From 3d7e71a8e030e7d81672fdfcc9cb2e88aa7ef699 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Wed, 5 Dec 2018 16:02:45 +0100 Subject: [PATCH 01/14] Rename filebeat apache2 module to apache --- CHANGELOG.asciidoc | 1 + dev-tools/ecs-migration.yml | 18 +-- filebeat/docs/fields.asciidoc | 76 +++++----- .../docs/filebeat-modules-options.asciidoc | 6 +- filebeat/docs/filebeat-options.asciidoc | 2 +- filebeat/docs/inputs/input-log.asciidoc | 4 +- filebeat/docs/migration.asciidoc | 2 +- .../{apache2.asciidoc => apache.asciidoc} | 22 +-- filebeat/docs/modules_list.asciidoc | 4 +- filebeat/docs/reload-configuration.asciidoc | 6 +- filebeat/filebeat.reference.yml | 4 +- filebeat/include/fields.go | 2 +- .../_meta/config.reference.yml | 2 +- .../{apache2 => apache}/_meta/config.yml | 2 +- .../{apache2 => apache}/_meta/docs.asciidoc | 18 +-- .../{apache2 => apache}/_meta/fields.yml | 10 +- .../kibana/6/dashboard/Filebeat-apache.json} | 130 +++++++++--------- .../access/_meta/fields.yml | 2 +- .../access/config/access.yml | 0 .../access/ingest/default.json | 16 +-- .../{apache2 => apache}/access/manifest.yml | 6 +- .../access/test/darwin-2.4.23.log | 0 .../{apache2 => apache}/access/test/test.log | 0 .../access/test/test.log-expected.json | 28 ++-- .../access/test/ubuntu-2.2.22.log | 0 .../error/_meta/fields.yml | 0 .../error/config/error.yml | 0 .../error/ingest/pipeline.json | 14 +- .../{apache2 => apache}/error/manifest.yml | 4 +- .../error/test/darwin-2.4.23.log | 0 .../{apache2 => apache}/error/test/test.log | 0 .../apache/error/test/test.log-expected.json | 36 +++++ .../error/test/ubuntu-2.2.22.log | 0 filebeat/module/apache/module.yml | 4 + .../apache2/error/test/test.log-expected.json | 36 ----- filebeat/module/apache2/module.yml | 4 - ...ache2.yml.disabled => apache.yml.disabled} | 6 +- x-pack/filebeat/filebeat.reference.yml | 4 +- 38 files changed, 235 insertions(+), 234 deletions(-) rename filebeat/docs/modules/{apache2.asciidoc => apache.asciidoc} (72%) rename filebeat/module/{apache2 => apache}/_meta/config.reference.yml (96%) rename filebeat/module/{apache2 => apache}/_meta/config.yml (95%) rename filebeat/module/{apache2 => apache}/_meta/docs.asciidoc (73%) rename filebeat/module/{apache2 => apache}/_meta/fields.yml (51%) rename filebeat/module/{apache2/_meta/kibana/6/dashboard/Filebeat-apache2.json => apache/_meta/kibana/6/dashboard/Filebeat-apache.json} (85%) rename filebeat/module/{apache2 => apache}/access/_meta/fields.yml (97%) rename filebeat/module/{apache2 => apache}/access/config/access.yml (100%) rename filebeat/module/{apache2 => apache}/access/ingest/default.json (67%) rename filebeat/module/{apache2 => apache}/access/manifest.yml (74%) rename filebeat/module/{apache2 => apache}/access/test/darwin-2.4.23.log (100%) rename filebeat/module/{apache2 => apache}/access/test/test.log (100%) rename filebeat/module/{apache2 => apache}/access/test/test.log-expected.json (83%) rename filebeat/module/{apache2 => apache}/access/test/ubuntu-2.2.22.log (100%) rename filebeat/module/{apache2 => apache}/error/_meta/fields.yml (100%) rename filebeat/module/{apache2 => apache}/error/config/error.yml (100%) rename filebeat/module/{apache2 => apache}/error/ingest/pipeline.json (52%) rename filebeat/module/{apache2 => apache}/error/manifest.yml (77%) rename filebeat/module/{apache2 => apache}/error/test/darwin-2.4.23.log (100%) rename filebeat/module/{apache2 => apache}/error/test/test.log (100%) create mode 100644 filebeat/module/apache/error/test/test.log-expected.json rename filebeat/module/{apache2 => apache}/error/test/ubuntu-2.2.22.log (100%) create mode 100644 filebeat/module/apache/module.yml delete mode 100644 filebeat/module/apache2/error/test/test.log-expected.json delete mode 100644 filebeat/module/apache2/module.yml rename filebeat/modules.d/{apache2.yml.disabled => apache.yml.disabled} (86%) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 5ab427f7247..2f99b20e4ae 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -157,6 +157,7 @@ https://github.com/elastic/beats/compare/v6.5.0...v7.0.0-alpha1[View commits] - Rename many `nginx.access.*` fields to map to ECS. {pull}9081[9081] - Rename many `system.auth.*` fields to map to ECS. {pull}9138[9138] - Rename many `apache2.access.*` fields to map to ECS. {pull}9245[9245] +- Rename `apache2` module to `apache`. {pull}9402[9402] *Metricbeat* diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index 40e33fc1ef8..574389dc09d 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -142,31 +142,31 @@ ## Apache -- from: apache2.access.user_name +- from: apache.access.user_name to: user.name alias: true -- from: apache2.access.method +- from: apache.access.method to: http.request.method alias: true -- from: apache2.access.url +- from: apache.access.url to: url.original alias: true -- from: apache2.access.http_version +- from: apache.access.http_version to: http.version alias: true -- from: apache2.access.response_code +- from: apache.access.response_code to: http.response.status_code alias: true -- from: apache2.access.referrer +- from: apache.access.referrer to: http.request.referrer alias: true -- from: apache2.access.agent +- from: apache.access.agent to: user_agent.original alias: true @@ -175,11 +175,11 @@ alias: true # These expand all fields under geoip and user_agent -- from: apache2.access.geoip.* +- from: apache.access.geoip.* to: source.geo.* alias: true -- from: apache2.access.user_agent.* +- from: apache.access.user_agent.* to: user_agent.* alias: true diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index c80741bcc34..2e647fcd68c 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -12,7 +12,7 @@ This file is generated! See _meta/fields.yml and scripts/generate_field_docs.py This document describes the fields that are exported by Filebeat. They are grouped in the following categories: -* <> +* <> * <> * <> * <> @@ -38,28 +38,28 @@ grouped in the following categories: * <> -- -[[exported-fields-apache2]] -== Apache2 fields +[[exported-fields-apache]] +== Apache fields -Apache2 Module +Apache Module [float] -== apache2 fields +== apache fields -Apache2 fields. +Apache fields. [float] == access fields -Contains fields for the Apache2 HTTPD access logs. +Contains fields for the Apache HTTP Server access logs. -*`apache2.access.remote_ip`*:: +*`apache.access.remote_ip`*:: + -- type: keyword @@ -69,7 +69,7 @@ Client IP address or hostname. -- -*`apache2.access.body_sent.bytes`*:: +*`apache.access.body_sent.bytes`*:: + -- type: long @@ -81,7 +81,7 @@ The number of bytes of the server response body. -- -*`apache2.access.user_name`*:: +*`apache.access.user_name`*:: + -- type: alias @@ -90,7 +90,7 @@ alias to: user.name -- -*`apache2.access.method`*:: +*`apache.access.method`*:: + -- type: alias @@ -99,7 +99,7 @@ alias to: http.request.method -- -*`apache2.access.url`*:: +*`apache.access.url`*:: + -- type: alias @@ -108,7 +108,7 @@ alias to: url.original -- -*`apache2.access.http_version`*:: +*`apache.access.http_version`*:: + -- type: alias @@ -117,7 +117,7 @@ alias to: http.version -- -*`apache2.access.response_code`*:: +*`apache.access.response_code`*:: + -- type: alias @@ -126,7 +126,7 @@ alias to: http.response.status_code -- -*`apache2.access.referrer`*:: +*`apache.access.referrer`*:: + -- type: alias @@ -135,7 +135,7 @@ alias to: http.request.referrer -- -*`apache2.access.agent`*:: +*`apache.access.agent`*:: + -- type: alias @@ -145,7 +145,7 @@ alias to: user_agent.original -- -*`apache2.access.user_agent.device`*:: +*`apache.access.user_agent.device`*:: + -- type: alias @@ -154,7 +154,7 @@ alias to: user_agent.device -- -*`apache2.access.user_agent.major`*:: +*`apache.access.user_agent.major`*:: + -- type: alias @@ -163,7 +163,7 @@ alias to: user_agent.major -- -*`apache2.access.user_agent.minor`*:: +*`apache.access.user_agent.minor`*:: + -- type: alias @@ -172,7 +172,7 @@ alias to: user_agent.minor -- -*`apache2.access.user_agent.patch`*:: +*`apache.access.user_agent.patch`*:: + -- type: alias @@ -181,7 +181,7 @@ alias to: user_agent.patch -- -*`apache2.access.user_agent.name`*:: +*`apache.access.user_agent.name`*:: + -- type: alias @@ -190,7 +190,7 @@ alias to: user_agent.name -- -*`apache2.access.user_agent.os`*:: +*`apache.access.user_agent.os`*:: + -- type: alias @@ -199,7 +199,7 @@ alias to: user_agent.os.full_name -- -*`apache2.access.user_agent.os_major`*:: +*`apache.access.user_agent.os_major`*:: + -- type: alias @@ -208,7 +208,7 @@ alias to: user_agent.os.major -- -*`apache2.access.user_agent.os_minor`*:: +*`apache.access.user_agent.os_minor`*:: + -- type: alias @@ -217,7 +217,7 @@ alias to: user_agent.os.minor -- -*`apache2.access.user_agent.os_name`*:: +*`apache.access.user_agent.os_name`*:: + -- type: alias @@ -226,7 +226,7 @@ alias to: user_agent.os.name -- -*`apache2.access.user_agent.original`*:: +*`apache.access.user_agent.original`*:: + -- type: alias @@ -236,7 +236,7 @@ alias to: user_agent.original -- -*`apache2.access.geoip.continent_name`*:: +*`apache.access.geoip.continent_name`*:: + -- type: alias @@ -245,7 +245,7 @@ alias to: source.geo.continent_name -- -*`apache2.access.geoip.country_iso_code`*:: +*`apache.access.geoip.country_iso_code`*:: + -- type: alias @@ -254,7 +254,7 @@ alias to: source.geo.country_iso_code -- -*`apache2.access.geoip.location`*:: +*`apache.access.geoip.location`*:: + -- type: alias @@ -263,7 +263,7 @@ alias to: source.geo.location -- -*`apache2.access.geoip.region_name`*:: +*`apache.access.geoip.region_name`*:: + -- type: alias @@ -272,7 +272,7 @@ alias to: source.geo.region_name -- -*`apache2.access.geoip.city_name`*:: +*`apache.access.geoip.city_name`*:: + -- type: alias @@ -281,7 +281,7 @@ alias to: source.geo.city_name -- -*`apache2.access.geoip.region_iso_code`*:: +*`apache.access.geoip.region_iso_code`*:: + -- type: alias @@ -297,7 +297,7 @@ Fields from the Apache error logs. -*`apache2.error.level`*:: +*`apache.error.level`*:: + -- type: keyword @@ -307,7 +307,7 @@ The severity level of the message. -- -*`apache2.error.client`*:: +*`apache.error.client`*:: + -- type: keyword @@ -317,7 +317,7 @@ The IP address of the client that generated the error. -- -*`apache2.error.message`*:: +*`apache.error.message`*:: + -- type: text @@ -327,7 +327,7 @@ The logged message. -- -*`apache2.error.pid`*:: +*`apache.error.pid`*:: + -- type: long @@ -337,7 +337,7 @@ The process ID. -- -*`apache2.error.tid`*:: +*`apache.error.tid`*:: + -- type: long @@ -347,7 +347,7 @@ The thread ID. -- -*`apache2.error.module`*:: +*`apache.error.module`*:: + -- type: keyword diff --git a/filebeat/docs/filebeat-modules-options.asciidoc b/filebeat/docs/filebeat-modules-options.asciidoc index e13f3f754b7..7732c90d09e 100644 --- a/filebeat/docs/filebeat-modules-options.asciidoc +++ b/filebeat/docs/filebeat-modules-options.asciidoc @@ -1,4 +1,4 @@ -:modulename: apache2 mysql +:modulename: apache mysql [id="configuration-{beatname_lc}-modules"] == Specify which modules to run @@ -38,13 +38,13 @@ available in {beatname_uc}. You can enable or disable specific module configurat under `modules.d` by running the <> commands. -For example, to enable the `apache2` and `mysql` configs in the `modules.d` +For example, to enable the `apache` and `mysql` configs in the `modules.d` directory, you use: include::./include/enable-modules-command.asciidoc[] Then when you run {beatname_uc}, it loads the corresponding module configurations -specified in the `modules.d` directory (for example, `modules.d/apache2.yml` and +specified in the `modules.d` directory (for example, `modules.d/apache.yml` and `modules.d/mysql.yml`). To see a list of enabled and disabled modules, run: diff --git a/filebeat/docs/filebeat-options.asciidoc b/filebeat/docs/filebeat-options.asciidoc index c2fcceae33c..d082a1131b6 100644 --- a/filebeat/docs/filebeat-options.asciidoc +++ b/filebeat/docs/filebeat-options.asciidoc @@ -29,7 +29,7 @@ input type more than once. For example: - /var/log/wifi.log - type: log paths: - - "/var/log/apache2/*" + - "/var/log/apache/*" fields: apache: true fields_under_root: true diff --git a/filebeat/docs/inputs/input-log.asciidoc b/filebeat/docs/inputs/input-log.asciidoc index 181714a4d64..8a20ffe0035 100644 --- a/filebeat/docs/inputs/input-log.asciidoc +++ b/filebeat/docs/inputs/input-log.asciidoc @@ -42,7 +42,7 @@ multiple input sections: - /var/log/wifi.log - type: log <2> paths: - - "/var/log/apache2/*" + - "/var/log/apache/*" fields: apache: true fields_under_root: true @@ -50,7 +50,7 @@ multiple input sections: <1> Harvests lines from two files: `system.log` and `wifi.log`. -<2> Harvests lines from every file in the `apache2` directory, and uses the +<2> Harvests lines from every file in the `apache` directory, and uses the `fields` configuration option to add a field called `apache` to the output. diff --git a/filebeat/docs/migration.asciidoc b/filebeat/docs/migration.asciidoc index 92c1102ef3b..a57c765ab5c 100644 --- a/filebeat/docs/migration.asciidoc +++ b/filebeat/docs/migration.asciidoc @@ -148,7 +148,7 @@ The equivalent `inputs` section would look like this: - type: stdin <1> - type: log paths: - - /var/log/apache2/httpd-*.log + - /var/log/apache/httpd-*.log ------------------------------------------------------------------------------------- <1> The explicit `type` option was introduced to differentiate between normal files and diff --git a/filebeat/docs/modules/apache2.asciidoc b/filebeat/docs/modules/apache.asciidoc similarity index 72% rename from filebeat/docs/modules/apache2.asciidoc rename to filebeat/docs/modules/apache.asciidoc index 84d40be3d6c..9a162acca81 100644 --- a/filebeat/docs/modules/apache2.asciidoc +++ b/filebeat/docs/modules/apache.asciidoc @@ -2,11 +2,11 @@ This file is generated! See scripts/docs_collector.py //// -[[filebeat-module-apache2]] -:modulename: apache2 +[[filebeat-module-apache]] +:modulename: apache :has-dashboards: true -== Apache2 module +== Apache module The +{modulename}+ module parses access and error logs created by the https://httpd.apache.org/[Apache HTTP] server. @@ -23,7 +23,7 @@ This module requires the The +{modulename}+ module was tested with logs from versions 2.2.22 and 2.4.23. -On Windows, the module was tested with Apache2 installed from the Chocolatey +On Windows, the module was tested with Apache HTTP Server installed from the Chocolatey repository. include::../include/running-modules.asciidoc[] @@ -34,22 +34,22 @@ include::../include/running-modules.asciidoc[] This module comes with a sample dashboard. For example: [role="screenshot"] -image::./images/kibana-apache2.png[] +image::./images/kibana-apache.png[] include::../include/configuring-intro.asciidoc[] The following example shows how to set paths in the +modules.d/{modulename}.yml+ -file to override the default paths for Apache2 access and error logs: +file to override the default paths for Apache HTTP Server access and error logs: ["source","yaml",subs="attributes"] ----- -- module: apache2 +- module: apache access: enabled: true - var.paths: ["/path/to/log/apache2/access.log*"] + var.paths: ["/path/to/log/apache/access.log*"] error: enabled: true - var.paths: ["/path/to/log/apache2/error.log*"] + var.paths: ["/path/to/log/apache/error.log*"] ----- @@ -57,7 +57,7 @@ To specify the same settings at the command line, you use: ["source","sh",subs="attributes"] ----- --M "apache2.access.var.paths=[/path/to/apache2/access.log*]" -M "apache2.error.var.paths=[/path/to/log/apache2/error.log*]" +-M "apache.access.var.paths=[/path/to/apache/access.log*]" -M "apache.error.var.paths=[/path/to/log/apache/error.log*]" ----- @@ -87,5 +87,5 @@ include::../include/var-paths.asciidoc[] === Fields For a description of each field in the module, see the -<> section. +<> section. diff --git a/filebeat/docs/modules_list.asciidoc b/filebeat/docs/modules_list.asciidoc index 2d3cecc8d9b..c2b866a75ea 100644 --- a/filebeat/docs/modules_list.asciidoc +++ b/filebeat/docs/modules_list.asciidoc @@ -3,7 +3,7 @@ This file is generated! See scripts/docs_collector.py //// * <> - * <> + * <> * <> * <> * <> @@ -26,7 +26,7 @@ This file is generated! See scripts/docs_collector.py -- include::modules-overview.asciidoc[] -include::modules/apache2.asciidoc[] +include::modules/apache.asciidoc[] include::modules/auditd.asciidoc[] include::modules/elasticsearch.asciidoc[] include::modules/haproxy.asciidoc[] diff --git a/filebeat/docs/reload-configuration.asciidoc b/filebeat/docs/reload-configuration.asciidoc index 5aacc9ba9c0..3684f872582 100644 --- a/filebeat/docs/reload-configuration.asciidoc +++ b/filebeat/docs/reload-configuration.asciidoc @@ -83,13 +83,13 @@ For example: [source,yaml] ------------------------------------------------------------------------------ -- module: apache2 +- module: apache access: enabled: true - var.paths: [/var/log/apache2/access.log*] + var.paths: [/var/log/apache/access.log*] error: enabled: true - var.paths: [/var/log/apache2/error.log*] + var.paths: [/var/log/apache/error.log*] ------------------------------------------------------------------------------ diff --git a/filebeat/filebeat.reference.yml b/filebeat/filebeat.reference.yml index ce4b822bbb4..181afa8260d 100644 --- a/filebeat/filebeat.reference.yml +++ b/filebeat/filebeat.reference.yml @@ -43,8 +43,8 @@ filebeat.modules: # can be added under this section. #input: -#------------------------------- Apache2 Module ------------------------------ -#- module: apache2 +#------------------------------- Apache Module ------------------------------- +#- module: apache # Access logs #access: #enabled: true diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index 429c913091d..aa48d9a7591 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "eJzsvX2T2zaSMP5/PgVqUvWLvT+NPDN2nGS29u6845fMrt/WM948d05KgkhIwg4FMAA4snK33/0pNAASIEGKlDR29jl7qza2SHY3gEaju9Evx+iGbM4RSeRXCCmqMnKOnl1cfYVQSmQiaK4oZ+fo375CCOkHaE5JlsrxV8j+7RyewP8dI4ZX5BzhBWEKfilBPvF+Wghe5OfozP4zgkf/uV4SA8jiQQlnClOG1JKgFCuM8IwXCv4J7z1IMqr/I5c0z4lAaolVCS0RBCuSwtvkljA1to/mnCvGFfFRP/uIV3lG5Dm6NOgSLAnic/RngpVEcy5QxhdyVOEe64EjKtGcZmRGsBqj51ygJ29fjRBV+oFakhK+GZYoGKNsgeyQcJ4/kETc0oSMvcFTNudihfXsoJQTiRhXKFlitiCIzkuQMCFUIqm/UUvBi8US/VqQQmOQG6nISqKM3hD0Vzy/wSP0jqRUjhAXKBc8IVJ6L5ZQZZEsEZboJV9IheUSmTGhKyJuiXBTqDY5OTer6ibV4wyfMW6JkJSz8nf37Q3ZrLlIvd9bmEL/+bsBotejmv+KCc0fYpbwHD0en4xPjkVy1iBGo96Pktd60fuR4fiiQcWSS6X/th8lP1ooNWoa2Gi6H573jP5aEERTwhSdUyIMQiott96jc8QZQeQjlUreb8xHubfOYX+Y/QTfr3mRpWhGEOwemo5js/g9fjT/9uQkbYyL5EuyIgJnk31H+MxB2meQ1/plmiKmt26WbeyGlQgngkuJBJEKCyVHaFYoNDWrRdNpucO7Rj9vCtwZliSUt3+ufrHi9nS7uNVgkCTKiVqJcJY58bteUi0MBEHcCCzFc5SRW5KBuJLEvahfSfhqxZkbroail0LqiQTpK4fLjqP/UHSl522VHzWWOMXK30GC/FpQQdJzpEThP8iXWJJz9DA2vUdnJ6ePj0++PT57eH3y/fnJt+cPH42///bhfx3145ynWJEHmka0XhJWnTSIC7qgTB8/EVZ5bg4TOy2GzcxxAYOKAlxjiRaEEaFhjhBmaQBSnxDwBTWvCoJjmN/ZSTIzDqeaXih/fZoyEy9kj/1VzemHn49ywdMi0TP289EI/XxE2O3Zz0e/9JzVl1QqzTYWiUSF1Mc416QggpOlf5w36M3wjGRNivnsHyRRMYL/+4ZsTs/RLc4KcjrSWM/sv87+2Y/gv5LNA/gA5ZiK+kTqPxeYaUHnBoLTFK2IPr69o15xtxDoagmiEc59qwIxIhUJF90MSY7RkywzBJudKBXXa4ylm8EumTxNeXJDxFSzFJrefC+ndgZbpndFpMSL5tmlyEfV3HWnUQ75kWQZRz9xkaU9WaKxZYgjxLJyKb70I/2mfRwZ+iVDXC2J0KsBal4UXrhgCWcJVoSFMgehlM7nROgNaue/EplKb8e5ICTbIEmwSJZ4lpExupyjVZEpmmchKItfmjMGFM2NIyPhqxllJEWUKQ4HUXN4boGSjBdpeDJceD/108SfG7kuSGZUaG50Yg1HK4SUzQWWShSJKsxQ7cpU+q45EbSGORd81VP1nqNXRAmaaIVAi0SnL+tzhaFnF2egOwGrzolKlkQaLVijQNRDr18beTTrfRbySGBOUIlWOFlSZtanIqIEKAomgQwkyIor4t5HvFCSpsTDFacOI6vp+yB9YwA+NjTXWNqArUABt1r0vo1hEYQTN/zUzQW/pSkRsa1LPKV6b/3ZjMuhGztG8EUZSc5GaJEQbbXUNt6CKpzxhGDWIqnwLaYZntGMqs3kN85IbECFPCZYquPTZL9xPfGQIY1ML6sRBsBewLfVwrSQLMiin63UpL8fme8AwU60USYVZgkZ91K3SwLp8enZw0ffPv7u+x9O8CxJyfykH6mXFh+6fOoYBgh1G3ULlfsbWCUBvpXVgwT3tKexWc6UOhuvSEqLVT/yXjkJsMmHUIeThBdgegyh7fHjx999993333//ww8/9CPvupKHBqM+N7hYYEZ/M/oOTcvj1dpdm+o8DWDph4oSqfkWm9PzWB/GTCHCbqngbBWzxP2j5clPVyUhNB2hF5wvMmJORvTm3Qt0mYJnxGoGYPMGoCrTMHbmGlFdykx37tZ+7nf2ll/51hXMlNbXG2pj5RKTOUnonCYNchA4xpyNIXkhEmAZD0zNoFuSLEcJF0YBMGePNhUr5ihxSHu+sY0WINp2GX7k2A/326/vDBC0wgwv9OEHwq2kM2pfG+W3KUUO4zMpcSPfuVEiWWkFbn855R+pANMcriVubQ/OCpopTxuoU6HwYj8iKqa1JOBFE9f+Y63QaFhNDH2NP/PDZJdTAYbXMJEcASmRShv+1TFuZcHTxoN+0sD7zm1O8+aMoJQoTDPpiQAPvWYJXILJcXJD1IPAD95/f9K8MaXBT13z9VZbu4JI6XjUo7HdUtYalJZ21lJCl29vH+kfLt/ePnYAiYy4O3MuVIPYjLNFP3LfcqGihMaO+f14+dWTi86paWBM+QrTPtphxPjucmJ5PGNQRHAvCG8g9jmnjiPA8ILwjCeWh7locoD5U+e+8HyljDA1qYmQ9jnoHHLNDnHQvXH7uAumxGZCJZ8kPD0I9gsDE11evUEaZhSxm7IIwgXhk5zTmprUifIlZwuqipSAfZphBf+IIjZWyMGm2tocRmDHJljbZ4dCdqHtr1ZUdmSHXEo7utpKVseBZ/KXJ4H3W99DAAz7uj6ouLOetSCh+iuctSiHASVtCiGoEKFSCCqUvafBaE4FWeMsGyFG1JqLGwt3hIhKhp8rdyNDg4He0REGd7YNJHdzs9eG7ZawNHCLRD2xnZIf2MrACRY+gusA17glPoDVRCKJoDibsGI1I81x7YLKQEQGYhOhthd+44yM+XwuiRpL0uTH/rrDtYWGDLTAKKcMSZJwlsZuB14Defp9+45xvNJborf4++sL8EpqWBYylej45PT84Ung/9N/zDXEmmaZ3rDH3z46OYkaPvCkOR97349rs9/3SBjerTyuIE5qbuE6AAEuTKaFG0nJHBzfmb0TcvA2OZFjdMVXxI0J5GIAakpYCqfkdISmTnLpv9NUwn9y+E8u+MfNNDpL7qOmnk+E4DVr/5n3U+94l8rkTjBDguSCQDwHwAd5ow3rG8rSMXovYSJXoEPZF4KIlyXOcwKuvYwYF7SeaHtnAjvc3nesYZKr20WqJMnm3h0wM/CD9RlgLhw85ECPGMhtUDX4ZqorEEBDb7k5qtTBdM8tYrBoOM6SM86K5uhKZrttBFc9u90luMqsdsytpJeefFRtygNsXWCSHYzHw3DD5VMtDEvbtxHVhTqjRiJGUbmiWJEFF5s9VxWm1sFqCxCx93lYT7y2g4xwC7+qDWUFl1Eyzo37C+wnRlwv6C1h5p6PSpA3ZeCGvSrwb0Q1x8DSN68LyqGCCLexMG6gsw2smx58dKxsQdnHY6mwksed48aJ2lsbgYA7gIMSnKtCVAQaxgoOM/smnKy3WGzg/ArgmUg6PYf2b7MCTuqM3pBsA25ulmRggQEsqbFJkhRC2yz28k6OQpg2Gm+W8eQGLvQE+rXAAmuLlbLFH/XDNcky/d8VF8QEidCkxKEhBCCxRBlfUGbPhRHEqSH6gNvAwI8bvbxrLNLq8Iif01bZ2GWhBSkdck05ztMiO6BP1MAzjN1XB9H860nC8AsPqo1NoczGtXFRBk7GN/NG/prFh61Jk6Tpu9p53BZgy9olnCUkB50Ko6l9d4ruaW7QKuYDJ3iIuq/HH44TS8+3aBh1ZlVeOzFjdKnCG3d/Qo1I0dNaCEGYyjYhNBPBQllFhAm3xSz1frIrywWyVI9Dr7A38SBT4hMvyS3RW3Cb5t8Z0vJdz0CWK4usPMisCe5+tmtnBdBP2kqHtYzei5Vf2RvzFcEM5PQtEd5dGpoRtSaEVQEvenG+kajIkeIBRHOHkGdkRZgiQgutFb4hSBaiJJISF/DHJJVKI7BBf51xZDYkLuvB4JGZ/hq91+yjCoYVSFO9Re30GwmkkFzyNTO3VonKNmhDlGbU/0EpNwFyXNwEIClDCs/0LtYiNHh0KdH/9/Xp2aM/OidJqZqXzvX/gWA7Lm40IbCXQJGqFOwAoHHY0ORGRvnz6Irk6PQHdPL9+dnj89MTYzVePHt+fmLouLIHhflXsGh62QTBCi6+iDBvnI7th6cnJ9Fv1lys9OmQECnnhRbeUvE8J6n7zPxXiuRPpydj/b/TGoRUqj+djU/HZ+Mzmas/nZ49POu5CxB6h9egmJdhV1rbYIqKkvffWw9XSlacSSWwMoFdlCmy0DMREWxWdJv4GcsVlKXkIzFhOSlPJl50SUqlXv7UyCrM9OszUoNoYrdIagJ3qXKKkNBiiNxqbUifCdOJcaMFhiTgPkdznEkfbEWG/6yxY5ZYLnfbLRVbVcEXsb89+fPF095L9iOWS3QvJ2KJc9AhTH7AnLIFEbmgTN3Xqyjw2i6A4qDrzvThy+u803NVh/ufWgOBt6iCFkMsntA9wsxZUFxAYgxO9T6XSPE2LcJAk0vnQrX+WojOzLG5a6pCWkt5SxXKuZR0VgsShP2gSAJvmkNU09EgcEb04RXT28zuch9QCRFtQVQwnLGFVCYQEWIuqhhhdBm7c5iVkY8+NZV/Ycs8EacGII+uk/HpOO67gictSlQh6ncmQ714Ty2I4CjWs8Aw43EfXmlJmoyjBvJaqHoHcrM6LnOpHrAYjQq3L7cxYBlBr+c0pVJRligjsv7De8bMjYD3k0Pe0A9s8hAcZ/blsQvQBVIlQWrNq6el2RvXYrAZX40YIxYyyozSVxs4NSHuxhNm+CKAOdug5zb9BiQ9HATgTkpwNkbTapxTw+t+pln5LFyaj0rgRDl571M4qq1bSWw5BOqH5PuML7VWay5YcJ4bMzHHyY0+Eo1Vqq0O46+LLE7D/1u9EqHX3dk4BHpi45Q3mXILr10a16KZv3Dx9fyXcz/yR1GJRa0dtcVEUnkzkQkXTZNwnnHc07X3jsobBFCMmUt5Q91G98h4MfYscp4VYEPfD5ftvSRowwthzfxvZKnaWoNYL9bWwUy0zbzPiF6DzU1/IylA3TK4kQlelgnOQNc60Yx26i4Hot6bFaYs2+ilmRcZonM9aDAhwM+glphBlIZze2jxgaWki5rIqIiTkLcCYNbYHHaSEISt+wCGYmbQSyKy+YkRr6i2+SymmgfU+kifVy+0hrlnpf/d3aSGQTVwNmtMff2eZRwKVpXyFnFEBxS9xWrpgux9ZMgEwExa4+bwej9/QQNxufp6VdgxZjjb/FaqBu7W2PBEAAlyiRYLQRZweoZHZJVLJBZETQbNzTV8A/MJSORmlVHmm1HxOWqbpZ1v+g83Vz1ni3xUhAVab5zyVqqBvUsoja0O5FsZjLOMrxHBcqPHpggcO7ONcQ6WILxJL7Wx3CpW9aX2PdM96AZawdkKLqgRSqmAiFy73vejU1SPatiO56m7kGyLf6j2Xw0XZf7VTw9Ul/qDynHgbnmMv5WVfzcSLoqy8O5OBq79tXW/osun6N77y6f3YS7d2eZdrd27gofV4BFfMyKi9MCTwasKX30DO0FUDroa6MWwob4VdIXFxghiGOOL2jDiWIKQtcF4/KiMVhyr7WxSmTKPH53EEb/SvOOvCmWIJwpnNU9UlARJf6uTEBhAzTXSX2gUs40iUm9B60HhWgXAaep0w6mGNkU0POOnmsJpfIuugsjuiEEUEPMSSwXKoxk0XEta5XPFU82xaRRLsg+WFVEYbgZMznYaUTaq+EerXLwof+h3/fqCcP+mP8FCbPwkNFyF75exkl76nbPsS3hcaJoCpzocKgxdvjWIht/UtoZZ7pvoVQVYNlG2RlfuFB5ej6us44sEVbaHVHblKLeEU9bxxWMpd8lu8KMoG7MYCaHcZfqq4ElU3wBLLmshCD9Wv/TbAvqDurbt86/P7oBvjJ4YP7i7Ni9B5cuN1OakS3YaIYxuqVCF/5PeDugpZHjU00BKQK/dzaUXqRXc+9VSYMu0zyqDjtR2ZpCq/yDhWUYS5fzHflYvXAmUPpFso20sRkhKdti6/+si2bq83lVwW2Oe9t8kwJiu9o+blXqKYMxDYtjYOZrWWgGdum+nSBBVCJNj/J7Rj87utQnBRVa7If21wBmchjZkHwZmWR6IsadJ7S7e+JwIC9N79XgTmpZOXDP1iutvWue8MbW94nyGpSbY0B/DdzG30xNZTb+978HZGm+kTeEbgcPCXvkYF4UgcE9K2aJullFm/Dq9cgrPA7914e6wplDLBpY0kmu1ewwyyE6au0Dk9tTT/Zj7R5tAugXPAeJEbVhNy2Z5zoXNzXTp4bZOihWdQQq8BgV1rqZlCu00dNldztHtauQSAq3PMciSG/muZC8T1DsNAogVC7WzjfkT3zRfoze5PiG0UXhlPGgxVKXhJcd5htU85jMcNO8VVuu3c2DRvYQwxeUIFbOCqWKE1pSlfC1NaP/9mJxNsVjbhKQYxT1lbXVZ+Qon6M0V+j89ryQbY2kYlwE5c7yiWZ8ov4qglMwoZn3JuUIGBbonSLrEaoTM9yMoAzKTaXROY6T2v+30bnpPxqdn48e7zl0QlN+gCYtkSRWBch+DqPr4/ePJ40e7EuWjjemkSuU1nfT6+u0gnbRZ6ESDgCtRIpUE7V4QmXMG6Yb+sHslNhs44xVRS75nHOyPSuUOIDIAo9ejL55dj9DbN1f6/99fR0gyoxlLhVUh41ZXf1XRUmVgIgOzZnt5tD06edRO0Iynze3ZP3r72ipKwBYVSRpqlBZThWjNRdYsLneQdBeYmkayi0fB6fi0ydQZX4Q8/bL8oZuHq9JDpSdBca9q0nDuhVJv+83BS74wYJx2XNITOfUb6Rxo+tOTd6+nIzR99u6d/s/l6+dv4qkaz969a0rSvULO2mOzMp7gDJTSVxs9IF+8DQr5aZ2+GmNXBeLKq0avxhUIqSBWALaB90YAbkbmHJgkowqELVWogFv3Mts6xyIa9Htp7BcB7jNjEE8tiqm99qiCxZ2lg5l3F60hByA9trCQrJ4WicNxgx81BjiOmVpLfEsQzgTB6QZJzVvGhWg8QBIu3CnkFt0QRFjCUxthzUh4YZRRRiQUfrq15cAyghmET26tNrZTQBqS3EaafdOISPu1IALMOpubYYy1XkFpgZyxwQChrHkd/LjrEVrmhmKFh0udqNrY/xgAx6NJZ5htEAeVAjKlOJLEBsUbpqPCURo/R+Gg/YnOqfe07a6x/bax675xy43jPoNpTGsuuOIJ31Oev3YhJBYaao249pQz776OCnKA1I2nDowTH47jlMDzOU0i+/AdSfhqRVjqggxgx53XZvwPiLIZL1h9mf6AeKHiDwp2w/iaxabAh9WYCptkQdLJvm4BLz+5jDyyd5reI3uAQIZHXBv54Wx8Oj4dn4X0fm3L4cnGCOzwxnBntIcK6XjKwjN3UHESv2+qj44KU+HkkHRYiHFKmsWlHYccbD4cwIETUtJxuBkpKRk4JYornB1sPgCanQzjyCxWpoyVN+/o/68tRJTWh4+/byH2DictRrN95lPdpKAk++xR8xz3a6qFh/mb5pP+qaJBqTZ7aUOY0Mod3FquqVq2ZIsmfJVjttGaFFRuq4w6Pw0cS8kTaqIOqVrGCpBteIGwEFD43iT5KCIMgCpDCDOjUcEBGVYNKvH6g9nBDtpTI/HXoctHdXdp0/74xyH3yBrP1LySg/nmzVW9eUOcSXjN1zP2oYSVxflcmeQlvd5QbNX4ZnNB5vQjkaMyTRLuU8Zcjv8w1XwwLSQRE1NqHX4cvvR37nUF0ltcr/fjNesqr+tWJv003lafjE/oZXWrvs3ben+fciYNB+uxSPqmObU5WSF9EhJlpBJlCrVP3w0RrJfrpSLv0fjR+OT49PTs2KYA70qkwd1NayBDbEJAKEjeBj/uUg+jVXxgh7FFZoDt786PqoilzRsN81D1KVbCQzR9EGwjW7nZt/CNlJs6CnKaTq2AkgpvpAvsM8hcYQ1t6nshUwnPaRVSsMj4DGdeSX5Hct0d319qYdGrZn9XYLCdESwWxaolBfwV3qAZscdyWY4KspMkYZLCtX+0qpDHtx+OjrOjETrSolr/1+UaPj76ZVcR12NYkVMYWQckpCegBGcZgdvHhcArG/gnkKQrmuF4Trv0svXKrRE50wcUIyzZMkTYge8wCHMMt9qNK/cq2kTtm6HvUAGolqwwvcng+chuMeUyZrAs92xLvFJYbd0Kpavgx/5KjausXi/AqfxnUN/YiIwqNMjoytjf+zYeqE3hnVOWWo+uk1yQWAXRfaVrv4Tn0OsvYnd4n7Nqj3XOuGL0rtVVbLFN8xwbjG5iN7JNVRcaPMJeqyxIT7khsitRsjZ/XukAs1bMuyhpJ60M97icW3uEIPIxJ4ISloD3XEpo/KBPEg1TkBSqR5ji4SP9UQBQn07WkuE2646mLhfGEQhBhW7V4R1J2QKigG198zqllXr48DvyLZnNyQkmj5NHP3x3ls7ID/OT0+8e4dPHD7+bzb4/e/Td/LH3bXdcT0+p23mDQjIsFU1MLnVPxcSPIHVcXtXvsLuoo4yYEdq1Rh4mjjuyvQL20Hs4bBiAerIIwDJlus1CQqEEn1jXhm3qAJr4L9cMK4A8BWaa7heFMyzkyopIgNaCV6own/UwiC9sKBVAr637Pgp8J18+HJ+N+0Yn1JrQOZb0pXwfvqTSJNtIczvLbxDWKq3xahBlIu5DYV/q4kFJZ1RnSn9+PlF3NDcJB++P5gbWv0NaePqD+7t2+Pu/tQzYvNOj0HaYM2QvtHseuZFwQLgiP0dBlmvjJqB1kZoFSg15QQ3c3QprR8tqt1PbnmXi0+sX2a5RGotkbEfXOxsqUie2BXGtyPYBcFueqpXWjhXWbjJOa1HtekltNxr3/DOmeERw3m2ORwPhXSd5NBDeTZZHcyIPnubRNpLDLFV3bexCZKGAfv/uZbd0fv/uZT1/BMNtQ0YU0U9HRg2XiT6yRrYLGIYrGHvD4CFxXSCq2AlX46zbvVyIbPyHqd51JSB7Go3RXwkxQSFVczSvTNZ6SRi5JaLMpK8GtKPNNiDCqWOdnhdZppfDzFAZrNKnj+BUf7YUZD41idAf4GAxMH65t1Qql+cPHqzX67E1AcYJf7AoaEoeEPYgABXYCA8EgbSYhDx4PD4LXzQNgOy8LdUq+3rih2VMNA9M3AE3sWnZQt43w7MmRKhG1Ufqj0vzjyJSxcc9dmnf05pBTxhUPtJLrbi2gRGG2J0NwguszbjWWKhCZEgqmmW2ulgVqWUjjjTbaLNR608mjzG2MtWqMFTLTZfG85hjYTi+coi6TKvElHgJbWrbY3oajlvvGBOUJAOFI4gE0VxQccD5o0cPH5iF/vdf/xQs/NeKN8NGzIbej8mvAEbpkzBxtNXePgIqj2I5TdCvELy+51MXxOVqN8FeB8itQTDNwIm7KRPfHFI14UfBykAgHwTEmWp1GDhqhTcIdp3NN9VaJUsfcAHKnw3dyTZGxoIfPgDp5SGNTRN1SNeQxKQw+UEqYOoueBlCWGVBBYmrwUxWY2lMZ7TlCxQUC7KcupyRnkLamMZHjx7GY5kfPWyS4le2GH5TDCUmWpfT7pgjn5pPHI+m+cScpU8G17xoq3rhEwsCco8J1LvUCFlDUFhl0zwx91j1aQ7PAzflNeEUEw8gGP4dBAP5CPV9vYpLPkZIfTRbLVpbi3ENB3ZLWQHfG4vLnDTPMODUprJ7a1ST1eFEGMPc3ncxRFa5quiCIZg3pgEUA6HmQiszVilWpKwt6go/mfqin5dDDdlaRN8Vn84FXqzCQma73IFw4Qcx6nMfz6Hsql6Qr6fe3lc8b2W+r6OnkiOxSbyrw7Ef8e8tlNpGaqLLsZQ1sDtVKjJQoui+qg+vZljIgS0Yy+IpdUdQPJYFXnU8JUhGbrHHGoojv6bvc++SGt8ahwwBi9Z3y+hfKBTq9V1+gGjpSn2XJbhoOqoMIgYhUxtLj6k4bkpp8XlF07KKuPl0N0Rvar6non5jVDpnwsLhh7v/9V0WFY7GlipNIOzAGzMSstFNlVik+A1h9DcS6exIVpjumHSyZcMZ0GF2LjpIydjtF3uO+Zbh5VqjAol5ESLzONusoKybfiUy1+/L2nIQqgXeXhe3Ze9FXBhIwtncMEq9xVUtJrus41svKujLBxMU1pQSyP99mKwwIJ3EqNzcWs22cSQzwdcaiZNd+tuNudouwcklX9t0nDWZlQ52uFeq16C39ltREl6LJzqAH6G/6vWeWXJuw3sSLwavgbZWvmvvLV2WBWlvmXWAvL7aRdBWpCv8j0ibrv5RGa/097FpRS3TuqJsP4T6+yEIc6ySPnKn2/RJlkNwDo13vFgKvupZhrd+TLTR0D/JvSey9qjYnbLD+zNxL8R3wsj9MN8FRzcxf4XQ1+iarHIuoMUL/QgxA0Sh78YnKMVyOeNYpBIcc1bQfm3DUQqp0IK7+D+SyPFmBW1ZwJu8ppKAF1GilLNvTOOAMBS7rBwSSG+c0TJ6SFve55YX4fK/+X3NtdQNo3z5q6+ONfcYGF+VJ+Kfzb8i83rh0jITvlpxBt+VIdu3mGbg+/RLhwMpoLH4Z1BAu6thtP28dW+a6F9VCK/nTH1Vw1JNeki+99fGJtWuJo6qIsVHwUx6JeWideaNWhK8VwqgJ8VC88jZY7VEZyenj0fo9Oz84bfn3z4cP3zYQ8mo6ibXimFnfIEESbRxFNSeqg1K4TIotAXLEzGjCjhfv2ssCGv8S6JQToSZP7hR0SaPwEzWWjGZuJEAsVnwYB6DhtwdzbhbCC3ZD4QzqIaLQgDPueuUgIKgW19DKWpBYvq0hdHImq1qrVZdVz2o5A9N+cZblK39q+cY0sxU251rygZUJQOC+olbNnHmXodEZ3+PBrOY8cUYql56Xs4Y8dXO8DPdOzgbcNcCJ6Fs+hrbuul+GnWQEo5nUKabmPrA0RLKz6vCPudo+uAWiwcZXzywMj/ji+m4OU57n15GX9SCMQYN8arMxayP0dVCKAeKHiBo/2iihxpUmaJpAUneGbjbvNtCbLbHDRcKMuIZ1PIQSiKsaoSENQUaZgJdMC7IBM/4LTlHJ13SsoM0V/jTlQegEFmJa8X3zUIH1EklCF4dijv1RjIQjdDVJGgZUNaNAsNs5KTkN1KlvFDfaCNW/50I8U1IHmV5YQ/v3SYGAJiaVzVuqjipOgFq5QdgoblXNqCsElficCljttArByKcVmOQyzD3umy0YORwbFH0tE3qbRVaBul3ErA3nDnNCXAAWJj1dhEBR1i+kSNElbnWrc76oH5G0ALiXqNIMxSHbfZxcPv0vpkRT5GwN1chL24kyEyc0KxKgzzAvrUAYz0eXPX/OCnu6cFIqTcbMHiCgLgaCa5p2STDszLF6SDHyLJYYbNFQRNwiLoX5c7JcIhqZJQJRCbD5JAE+F55Cz5ylsyzrfpg26ELn8ZiH/3CXOOyrhPJcC6JEQBtjNemg5lPzXZ0V02uBpZfmwvK19Aso1Vx0g6KrJSYZIQtaqrMdpou7NFkPnbTYMuGBUWnAgqabseeYaJcBsp1PUCwTcucF1nWHSwWsXYLpmgGTZzKm4NycDZaCqJXYnNrfJoQQSCI6GDolnl9Z7+0RxCVQSm2cd2cclElM83MLgAr4asHg634mrFSdZLcYkQbznd9O6NQgl6m3XDsq1adTzJepJVCH9bCLAuWx/X6V66cORwKSa2Mpinmbo1lnKYTeGFS1kC3gsk0oo7aAfrVMXw1dmDri0OSLQZtEDsaUDhGb21Cj1enRQMcoUViSnOmdEEVznhCMGsopyVtLlWmioBv1TjMi+jyaVDp2BYY7YHBY5ZtOFitUvB2LPaFiac0lvNcFjztxv7KL5U6CLl15pij0nPOlBQU8phgqY5Pky2+BQ8QAt8NrfwyVNoav7LFIROyHLgLylWtOpGYJ8cf+7Oe/UTT8oLzRUbMTmvHbuJjtwmyhdWZu8ZnN3oK9cmrnf7U/TsC3NYyh1629awi80zvWbnkQk2MMl7pDJglSy4cvuNyl7c45Eqy4sdOV3i5KbN+oGzCytCikYtWD90q1vp/Zz88gAsrBIPuPytoppCfytwk5QAB2iVOFi/3X+IC5bWZ6h2411C3i20LLZcwEwZPybS2GUDYCCAC5JLNuc+o1rYMRU/Fm/r3rZzpNyLof78px71LKmwJL6v7l7+RtYoJ5SzdFDP9wBQ/snP1V/+3CKbqedWVJDixK6DIn6nuTV99tHV6A6KHTXLO0wMwvzcDOU/NNV8UVbGviPEwveUpen/5tIlI/7/M8b6X1B6qCmITGU/JYWcQOlDFp7Cv6OiHyEBDK5w3MUFAhomkOxQ6D2Qc5yHFsYc3CSRzF9oDHEhRvAaulTA4x8mSnFXi5eiJ+eUoLl3sU/TKmSWh2LAeyJhYqDChIXcoDqGf5NJRtiTxSsbE8WyZsvJKw17buBPH0aEtyqcWD7hu/UjVzhhVsuKKhKUau5Z1C51Aa0YJC6o3clGmBlR0RcmZ8XQzkdpsrBfXQ22348i7nox9tIVacCyV3V1MqT0vExqimqIVt6P0gzOktjNR1ER2f4ypXAaGRaE2qqz3ARl4LyIQmulqvYkV2TgSWBU6TibNaI7eVMc+rRjWrEY9jW/AlHTWifcxBR6fneY9CqMUC4t6y+h+jOIqv9WXoJ0j2zHVZRBqkReoK7ptO/HRAbTAaQsv2xFLHExbSNmuSKJg2sLIdkQSB9MSN7YjjiiUiMd2ZwRcjmMe3DqiyYFWPxLd1UR1GB6IhHM1UB1mkZrheTVEMeG8G6YuMb8gvEVv2EWqtGbwDyHdhjcsCB9vgdcjiX9nxFsgdqTz74iyFVJ3Iv+O2LqAdaX074iuHdT25P79RtgAGIu7Qrvo8zZZprzdNnq8gTtIf6+3MkH76e6mKJy5Xw77m0QbUpSrDSr/YcloFn8xWEz4XhkKYu5q9bzFSYt1CmlJAuhJWMYXC5J2T0hYrhB12S49MLqSgJdP49jUQbGpJQQktSELrv5CfDuvtYGpx5kWiQtVqc+z8w0UKVWp7xqAH1o8A8YjAPZyjoWEOEd4v9xl/V0FDjEa4imo7/QadtTVpogvDiljXlJWfDT4IVACvYaukplfkjrlCZRFJSmCjNwZSXAhayUIl2RjXt4wvKKJKdGIxQbNNhZ8FRnd3w+RcJFOaiGkPdmnC6mnFWXpBBeNrbIF/nMjkKntU23bNbquRVlqkV8+NXnEzjEDAbwQRIQUbwAFGAA1Tioj60OTysi6JHXszdrl01oedJNYgROC5gVUfXGQeTVK/ROirlmLyWVTVR20exm9aR7JM2KTvgTn6n77gsmh/pyt6yWJhGSJw6/YYWnVC1bROnbNn7yEdUVJrVYFcrm0itcWbLbxgUWHIMmvBWENg3yfo8TfmA689bbFacBJssOJbFKZElC8TSBCrQmDH9AVQ9s8rvsoKE+92/awbHcA+y6BU0VWezk8AYBtN9ExQbRqmTAAjf7KBemylCZYla2Y4REvykBo0wOlRtc4ApVK9xaV6Dci+PEMS5L+EWEb+svn6ATa2EIRXbuZ5lRIBUBb+O5k+OgMTFdI3IlEm5yT4CyLoxK7eKgFkUWmvGBUhwO6BSTWyT7HNCsEaRGnw8z1bU5+dyHxgvDLt0Hi8gJDNY8UwcKYYsAETY3iM9aah9brpw2QthrIG5ZtkI1atseKRfLML1mC8qzQkpP6iVn1nGlk5GFaZ6QD+SLi+m6P2UORiFav0mArWVuN6sNSBNG9bcT0cSkclByDsGN2+npy9qKqWaaxjZ6t7p1Y1caB85O1VHJso6mvp2SvKWqUR7SWW1ByyDPgGkW0IziCd6p73pidVkeD+ptrrY2SIgEMAYAjP8hKv+3XXq7KMt/+9Pov8r8eHjXMuvp8V2k1KfnYjfkSmkTpV+I45zaN5VgRqY4h02Uoftp6sW+x0zSOG795sXi6nr1/N7/4+7ffPblKfp1dLNb90cslFmkn+rJuDrwap+KkP0I4pHY3ujs9dXjTuEsMBwMbWr8VZkBRaTVo64xXJAUtQo1MoipUseMC0Xxi6u8f1bBUM6G/qj9t3/DlhtLYt5rmQL4LxLW2+BIrxJOkEJDmYeqm8EJOTKDCJCWMknSEcKGW2mo08nKi1Rj4ufaW+edCYKb0vxPOmMnYiv7mPlN4lWt1ZFIWnhMFm2APkP23+aB98kL8w6fRLN/2efwJPC9eLajGwqN7zSeuFsu7Z1fX6MnbS/fxfZ9Lyu9MvldC6G2loVWvadOdkez+yHSEnkC01T3jk0u0mq7/Df0hUp/O++1zV8HZed6sM3grC3p+41oiYXPS2gmGpqGPvx+fjh+dxUmu6dJV/hNlCc0bl29NQss30T1Xuey+2TJmA9S2RTutk3JjDZ9cXO9aG6fV18PMJ4ZSzUfkI0mKzslMskIqIs5XnFHFxYMVpo3hbCe1EHQrncD9hKWgVqH37y5biXow+Zjj5OaBJEkhqNo8mHjT3d+9XSlWwFu9BaTjxQGzeJERLK4SwbPsnfl6+BxatJMZTzdbadUvNap20rmtANxBqf4wTltw41LFk+SCtFU23/XoLa3eZHeYCL24cClPtVC/GEofLVQiO5SxbT35ZdsMxTVhgGKoZXt35pqvAb+4cNHxWlJECfWWvxDm3JckaSVtnnG8o510UaOkRAguQwF579Z58xd8i9EtFarAmR/IHydcJqKYTeRmNePZROk9AamgdzUO9BYX0mZwU+byQU3PfltE29CCgJaI96xGONRU+wSE96DblK7dRvea4JuJIHM5sU5RoP8OKb/WNMtc67IVRiADlXXcpTeodtJzLHCWkWwiiEww+1RUe/O9wpAUijJ6S2x4OjhjM4JwnmdWy7D18fO86TTzr/uxlJOCZdyWP/gEIzHYgF8YXIAAET1nP8kLP0u7SWNMKPek0TX8u3j73vC45Rci5lysTFENJ4AiJLaLbFSP4oxPMto60T0Hov/UBsELBX2JIUEHkoFiAwhqEHwGKm3zZI9I1EmlIDj7FGRew52GrRJQJxpqjdoOH8b9W55SYLZAlRq4x6OMymXcpf+P29VEFKxlC7YPpE8UCHX1Pf/y91eWGlO+0+62kemgC+A1lxuVu+tyzwSWyAnc9Uy0lGkTHjtT/gKLGV4Es2mx2hsmjdUuQ0xolIysRSCcLo7mQ0+xJkFxfgMdEoEoS2cnXV6ts5CEnUJvXlxAkI05ehctKJcEH+zW6EeCc+gSl5Q1bt260N8G67L6m8nNrFWoN1sl9CQTlZtXDx7waMa/oRmHBJH2g0afTHdG0nsJYTk47yDGj51YkHj2xQ4L9yZLXcgdVEhKkiLHLNn8/lcQFo/PIfTDG8HvYDlb53T76m54wRaHXN//1AD/xVd4Ux/D72CNO+Y1Tl0VjCNu27u8HF2Z1DRXK655wVHngeY6Vdemq5yzevhuiO4lVCCz74Wencrrw8dknIxX41dE4adY4QtBsCJwQWSbr4Zfth1cUc9NnSJzdMUANrm/y08DTNO1V47MEr64aHd3xV1d/XMgSpnNmgZKSEsdUxcVHZFbpTaxbga6HRxhtZwTfkvEkuC0Y13bmCu20gGicuNkfB0GztZ2jnnu4uJAw33W1sW5wv/h7OT0++OTx8dnP1yfnpyfPD4/fTT64eHDXz5cvn7+Bv3ywdyUGhBjS8QYGrb8gj7cTv7+l+U//v4L+mD6J8N97OPxw/HJsYY7Pnk8Pnv8y4eTX0Al/PBo/O1K/jKCf0yg+pf88Aj+rRXnJVXyw+kPjx5+q3/a5ER++GVkiqfAX4AEuGb68Lf3z9795+T6x2evJ8+fXV/8WMKA21L54VS/D2kPH/775yOg9uej8//++WiFVbKc4Cwz/5xxLtXPR+en45N//vOfv4z2kTcQ1i26hc3CJqK3cUN0sudEhau3XcToCe6gBJR0qko93froqyZEbfQ9PDlZyRgptYyDkg69il2E6OdDtkb7kIFPOlBdKawo7IYh+FrG5fFiF0oT1KHfasNZZ+SBYwYWn9SbcMVEQ/e6DtgkA2YJql1OgtbOMfKe6ddcg2Yv4O4A6+QJmm3bAfaCK0pobdUWCh6dDdyMTrp10WDMMqoOitSIw61oTTfI1MSatBFwNowAwQtFayd0iPudeaNtmeXJ6Y//dfa3P9/88I/1o4Va4OeKDdsetONAvkwPInW2SIDrjq2f8qQLl6vchHPBP268qDL7S0s8mX3aHUlWAUXDY8gamslcQIHNtB4yGUDxb9HcB+geFyiDXrtE3LcBDWX0BhStNz5oG45RBcFEGiHPcHIzhAj7fpSGNZZIElsES3G0wswrL8acA4571TQiFJkHvQnSuporzaG4F97hoTSERZt2mw2/xlSVl0dBBH2A12x7d3PlizzrxbVwXB3pWywoL6QWFAVpFnwBhbVBkRezpMEdjCaX2BIuBZEKzzIqvaLyTBvRdXuzi2KwWSci1OQjRNbrqkCE0Yoqyy5eTmdQkZpKRMxb454EwZTBpN/NSg6iw+0wO++fYx1HtswtJFgR03Gv5xDsbuwxmdXq2uAQl9uxJoJ4ImlG5qarH5XI1sf0qusAor7Euam9e+ospm8kWmR8Zs7+AXTSARLWSFXbgcM0Eg4l/FaZDunPk2amc4DS9NawL7nk2tkG/fjkLZyE9XYfzbGC8thkmLreGtU0wxVakhKt1WfdXPDYriJiRZmNEVFhdFYA94Iz08LEMpjJd9OHAdQsJeHvhKVlLxkUJjgPG47+wARyBae2ZqiypuK964u3iAso1HW/6wxolftlxo0TTZDvAMnx3tcQnXdbsnEkeayvvR7GCN52xqzWt1zCGQT9MhXQxgOimiuiV8owZt1dG9tsKKJbHY7IchkPSKUVKgcgcolZmlXFM52SdkBaGwrBrqSajv+WLXkg+w9Irj3luuh97VPqTlL7HSIfc23bscRNKnQVsVQBmWJjA8Xs13W9dju9rdUyQosr2orX6kkpd9URmgGnQx1xtQDmztuM1mIcNpuTUUXLahxa1IXKijWkas36EboM1oJKdEsxKhj9iCRPboga2f+aLkhUuu4kzX76ZZxV2DO/vfJLUPMFvvoqUo7VSKp4u4E6TAPRSVwWr+8aqe3aDUd/0QCTEqnsidjGRk+rV3xn0R78MnBqPRrHtU9bOLA/PBqpjFpPbx0c6zs4pdVsgTHNm+yIDprGWk9h7TqsO1NX28sgDSmf1TPhchCyDkhb8ikHoIlC2J7POgBDG5BtGbxD5ioKol+C5/CRtJbAWirVuq/eZkRbEjhN/d/7ip4qeC8iMlz1zvajywbLmy7epZ8haGMTkTrDbo3bSofWSAGk5l3IhK16egbejw7dITITHjPhXBWCpJOE8xs6sG7OG3iCM3Skgf0Jaicc2Yb9tliDUTVwoIAscWpOYIPT2RllUdWeFC8JTokYWAjhJZVQAsF+XEKrE4HSgrgZNhK4MjCP7EfVywbaEawTWdmgad8CiC9PYBBGGbWZENSfT5vf7sKmn5RBrE6/9FvXYscmUISFKlnvevSZ+MTkXvVjE/PugbnE4xO8dpmpk4w2IkBqLgAbMOxzCTTw8x1+plqfWvJ0FLQUg49cq+iwoX4H0R2kg7fTGHaT7io05ubQm3pBVpgCh5TuCmsjjJxJIb26MFEvqQusdu3Tqjovs40itcS1MOMVYtrcXYJ7u5QI1e1BbHa2y2WYF3Dla7bnhZqkWOFtUzTUHVxdgUht+mNojBaecyPEuDJqmv5SU7H/mA44jJBms05luTp74NwLhjDj6eY+wnNFRH29/QUeMspyhEmrPqMNWgi1A4NgHxOqlrZUm8uWgK2+ExzbEDhJSK5Chk8yHuhALRdRvwsq7fUuTShbYO929xJ+aLncNQ+773ZLiPF1HFQeJCWzYq9SjW3tHexAAP6gsrC11qwhYTvlClzZjroSraF9uosG1ZLTkmnvFLZWi3UFZg9HXKyz3hHM2tEIHTGuaEL03/yomRE6WmPBKFscoUjR7qNEUEUTnB197rqyJUbXn9JHdTgm0+C/8Nj/ch6DPK/iMG60OJtZDF847X8Zp7mDnEr/FL+86l+3+fLyqkx4kOO2Y52293drodqvk9zAgboiuu6mr5OmYYdOThJS+rEqendN6rGKxoNVzDwnVpyB1pQ9PDs8/p8oS/laoq34nQkdU1j3I6Gs1BJRZlskAlWk3cm7e11+qmwhHq0n07LxbkfGbTy07gC0MC9+xRqinHmxeG4PWX+Rts3Kiv0tLQRiLqo9qbTt0KsKm+CLkqaWWmksQk0bzDZxuv6FOpI1yC7N4d8T6WY39eilZpm3pWZt+yVG7aIwBvp32FBN/y0KDhIObLGWHeA2kx5a73OHTW3j86BWxQ53XN098LobFW690mphhDvv8fbp2tXdZdM9171xKFwu1Tj6bcArX7rTtSL50p3uS3e6L93pWjF96U63A+Iv3em+dKfbzSsxvD3dHbSXvq7uBquo1DanAGBvVXR3cwhY5FApuYfxfeixW0Nq29gt9gOP3SLfOvatyujOw/ejGNp8ma3GXRxrmWv64tn1cIKcRQuEGdxxutrswp2nIsD8/t3L1n4zWyyQPVyDpSeiyzOHJWeTfCnaKuLuxwsGPjLw4yRA7tYdeMHAU+vVzsw5zwDl77EBTymKY9HK6MARy+j/scY7X1rL9G0tc7frZpBE9hgapN3tTYdGsYWKz9pq5wbPb/xwmb/qf7dctcGzqq1r7FbNgUP7x8rs2dTUEJvxBYQ99tZDFV0RqfBqoJB1hVDh0yo0zaGPi/lYS+aqnMVPT969rlfO6nedagB/7kgBFIjFWOm4vY7Vi/Im3qsGYFuF6vlv6z+NG51Bdh081IAHgINIgC6phzrcEbqGpquUdfBbj9M0Mi3oMIKnNkumR2zXPKGt3Iq6Fq0nWQi9sgnuORZVc0lNXTs58yJrd0btQwt0iSyyzE1PfTWdsKYzzHxpbX5oEdfmYXdwYwkR/csK7IMWOv6rmbPtxY7r5QX2xHth86EBrOZGQ0ir3Vrv5mtQm2L9tUfmx0lInGWojC+kwtLvsed+amEq97ibrTy46OCMZQl96REaTsM+rc/d8Ib4rg57ppb2GvSaZsc5Fto40xsjhqhLmdjTai1VCSceLf6RS+wSxqqHnKSXfPHoH+b1li1TKo4HJNHARFzYI2ZdtkSrdcLrKjR/oIWL5+OLgjGTbKNReQTq2d1CXsYXExhH/92+hcYbsrFd+LOCmHDxhSlmVNIeCbYohV6jZOrgDdcE8WVnfdlZn3xnte+q4dS9w2uUFqvcraW7bIwgKW/SwTN2YEejXyrKIOjCrZrdJffhGNutrsJ9ji5ZXig5Qs+h16gcoTeF0r9onrrgKUnaWldwfjOhLFZmdHdH9DOoyAtVRqBfiY01dy7KPtGaji6GWSOC4M7IAmRdVNnlzLHALdGswzn6ynTZKtvkeyQlnM3pwvZF207QJHpI7Xd+Hf9bSFlAEjiTXbUjQ0rkQOv6i1WNV5wteDrzNGP7S/849Ff6g6d/3h6LXuFCQ+LRQ/XVw9YISK+v0Z6HeOTit42CGBVbUiK2Maf9pjpAY4d36Ue7DH5uE3HdjqotFD0vWGJT4BOsyIIL+ptt4rCFuIs3r149ef10IImssaN7KD7ko9pKDmVUYZaaOoODiIqB7aNkWB9Mp/vKk2Jub27kr5m3M19trv72sv++1Kjgk3BnyiUXamKkyTlSomizbh16tGvySAsBqGPHHj5UIyRkeMTGp/SUGxVvQuMK5fBj9wlEm5uRfzv+bnxmFW9XS8BolDQdo+dc2PdsKIFEuaAc0um9LxsYYOZgr5YWh6tmSFuu/bdcB9ikrY6Bdpsan/s+4IBG5BZe1hgGsXIhuwsYxgdqkOlvTW2TBNrYpFXTh5aIF97d/TmOTH/l2pQ7O6cDtVsF2hL60ggv6BPE0OiXfgBCTNKCFgjjQ/clrCoLVNRoHX60V2/CjCc3d0IvXvHCpiCFNK8xhbb91jbQBGjpMyNVWMVYQ2hANVoylXuNV/C1hLSmA4neMPNHQ6+qAFm1vWPzADVaKFJGDnUYRCiSCWb9CGo7BfchBupaVmekwjeEVTJuevXsuno67SKumdLTL3avbG/SIjwOOfNeWc/LpyWTW+xW32MLyj56+t5r/e9h+h58sqO+59CjffS9CAGoQ9+7m4zhipAd8ob/hRIc47LDxbVNtIETJb89Q4kRtebiZjznYo1FStJ6uO7dpp/dTarc7zC7sTNT4y4z1z5d/t2dpxK2p8l1M0pbskw7R35JyGtF8iUh70tC3peEvFZMvWTMl8y8FsRfMvO+ZObto/0P9/YeOAjC9BgyNzj3yHgxNiSNkCs/db/ltvNgtufb0htLmKJzSgS69/byaQtedUCb1/qWHdq2iOmyxObBUF94HTS2oD+8W5j4XaWcYc+lc1E40/6NLPuqRoBao5p8zLlQlX9mauFMu5MTKmxo/6BEQWSRbS/x2rlFVyvO3Aatj8nAR6YNtCSq70Y9fPKanwJlvahLrKoyTebqBIJd4syEk8jRsQdRz7lAlCUCymvjDMoVj9AKixsIU1JLW/O3KimF07ThLkSmtNOK35J0jC4VSjBDMwK93fgcHcE3RyN0ZN85GukPjiTDuVxy1VIfb8mlmlS767Ar4ckqJ8/hXiCoqGW53FiBiEoXJ9UMa3/NxQpn2aYE1MxTKq09Rj+C1/tAouh96OK03AU85LvnkaQssVFnOU+WY/ReWld4wld5oZx7b/ofnkc04VmxarlvSHBGWIpFdDDFzqtjI2YEsWmR5fW/CVDJMtfiiK4I+OCNV8zud7tkpb8z51ItBAkvud+aHwffdFff7ej+DKhBuweohITcdYxK3f/aNg3uz+/mqpuuyG+8u7x/O6rfrPQq0X6a+3RfnYrLj+YNa3W1jdMVZYMutl2oYwNs6UrCCs+aaeQVztXGRHINRhmF3O8K//mT6ycvD32Bn8Zi8bquIit6Hp6MTwaR89QF2fE5wkMvniq8V89ePru4Rn9Az9+9eQVrKP84iI6/wQFXdtj4zJVqBUmDWrXv9L9bZDQ8686dceDQZ8/IMsSW0rKnsDyciXbtBc1cPnWnqaEq1kyxuiQ+dDC8hhjid1VVx+giUBunKywVEdMRmsoM3xL9l2RJs3SK7umT+d3T5w+evHmO1sJ0t4Bn90cx3XSqFQnKSDbtHy90qLyExrAgVUQP5paIGZcwLlNgegp68dQWlW6h9U42YwPqAUOMrlwMERTVNs0/b7XqqU9xwwK3FCPsLgaDvssVmM6mS6shtWd6XaWvVpiliEBQeVv9XHdgjA9Wf/lHmCq2QFRBgA10HTc0WP3X0AVR9onojmc/qPSopEbHYXVDDliSXWO9IZvQJHMToE3R7sXB4pDZrBBWJBaFPiSlaa0VJyrBWaZJsiea3EhFVt6RdgU/9Lc7DIAd7Y1YMdDYJKQkNvYf7Ydu4QFaVZHd2vk2MNMU9Z86ZFMbigS9ncFENQORI9NDqMiyilV+LXCmbfEUpRxaYmgIIAuxcZlI2zqgdOnAZbytjsVST3NNSUJT4tq5m7AtxfX7lvLyQkQLsHG5RWKzIsivBRUkPUdznJVqagujVPvDQI5h27IKg/D5KUoxjCXjoX1CbWLch7pibYqgovL+ScSUFR8BapUJcIjI6m13+N9UTpBvooDvrDpvLvhC4NVAuEEH5CjYlsNgO8j6l330kHaoXdmhEct2eFBOFLKU9Uv5oXefnXE+fWqLLAm6uvoRWFnrorZ6ma1dV1MRj3IspRYMR+AnzYtZRpMbsjmqOx7L8dEFw6oQzeu0XoSVn9cajRvEWkq1IU4Fz/NmBFc1w5EHvUiqqk2CLNBT5ze4B7e5Vid5TpjpzbBakZRiRbKNo6oliK07dbX7/tFwnXHQR33xrVHhfeDGA9d892GjsOQAsMHXLRhiYQJdm6U9VGBAsMC2K9/hAQODQgZ2Qr8Vao/AgR0Qd0DrFz6wA85ugH2CCHaZ4Q5w/UMJdh9tA2j8XClS3vtg2XYVZ1Qfq+omYPndgrXhMkHcFa3GOnVGR7/6VG3BEOZP6U+E7JPXb67h3qhIebMNcE/xHVxRa2gJlsaC1WBLg2mOadYsWFkqb40GXz2xX1//p5dSE2CkbWajJ2XXO57via08lFJBEsXFZg8iIrqQt06C8+ZB0ItGhcWCKJtmxD0btk6gXFOVLCOXnV5+7ypWgrTfVNX8K+AB0iRsCTzXdOM0rsre6Z6ziHfcdkseEWSdfnmXqgaVDLLUu6ZmZG3U3jZdcEkipdV6IEvJHBeZMgA60LXgjQrr7cpJPKzeW/GG4dIbauPLUsvZCWbNY9AWaKnf+iws6jDvyKM7rl/Ds9GYkMNMtufXuKuUVwPa83l8cTPU4P7LuRmsF1YJTOb0xnPDXptfhsV/2I+2VyGp8KF9vG9RfOizpLo5UnZIdruDfhQX/XpRdF7oD78G8e/sXQd1KU1sXEusV2eu2c4XEaC9gWMcSvSsl4ShGZY0qbuXqIxUhA+Iu4v4uktTpOHd8wt0+uj0oY21U5vQu9Sy27/0kRiSpXeHLT0+dw+Lf6EcWdQ3JXHfrhsGdMt9Z2sC4cHKO4LcMcGwpjfmONrAImq7ms/aulowrrzOFlzAD1tE17CMySEjtsN9Xw3XtO841GiDHh479ezYkt950F4d+XIjaYIzi7S9pvesoFkM54FoAvCOqIoVO0qed+YnRmTHAGIAthOgg4jqzGTckygNexeiurNf9145AL8LXS0O4G1kVUXhliLmedlpG/ShtyP79qBbkudEmKozxljtomhLmu4dbINh1H3q/TCIuh0Z8G6XdFvqcEv7BMpS8jGMLRlI8xtXjtdTBEyIzYzMuSClsTzbIMoWRKpj/eaxebNeQhTtnJ7c9yz/0qZrwKyhL226+k7RlzZdHXT8btt0xSkBM3wCXHxAI9crgmYwyCj6ueBMEZa2+4h2i+j297DDAUInbmnj5EYT0ebk2EJDlIJClAX5LXh7GeocHxR8i6YA1Ff/NwAA///zmG1a" + return "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" } diff --git a/filebeat/module/apache2/_meta/config.reference.yml b/filebeat/module/apache/_meta/config.reference.yml similarity index 96% rename from filebeat/module/apache2/_meta/config.reference.yml rename to filebeat/module/apache/_meta/config.reference.yml index ad61cd6f5f1..3e6d830dde1 100644 --- a/filebeat/module/apache2/_meta/config.reference.yml +++ b/filebeat/module/apache/_meta/config.reference.yml @@ -1,4 +1,4 @@ -#- module: apache2 +#- module: apache # Access logs #access: #enabled: true diff --git a/filebeat/module/apache2/_meta/config.yml b/filebeat/module/apache/_meta/config.yml similarity index 95% rename from filebeat/module/apache2/_meta/config.yml rename to filebeat/module/apache/_meta/config.yml index 6a545ad3645..24e64df694a 100644 --- a/filebeat/module/apache2/_meta/config.yml +++ b/filebeat/module/apache/_meta/config.yml @@ -1,4 +1,4 @@ -- module: apache2 +- module: apache # Access logs access: enabled: true diff --git a/filebeat/module/apache2/_meta/docs.asciidoc b/filebeat/module/apache/_meta/docs.asciidoc similarity index 73% rename from filebeat/module/apache2/_meta/docs.asciidoc rename to filebeat/module/apache/_meta/docs.asciidoc index 55716bcab49..4b0aa94d710 100644 --- a/filebeat/module/apache2/_meta/docs.asciidoc +++ b/filebeat/module/apache/_meta/docs.asciidoc @@ -1,7 +1,7 @@ -:modulename: apache2 +:modulename: apache :has-dashboards: true -== Apache2 module +== Apache module The +{modulename}+ module parses access and error logs created by the https://httpd.apache.org/[Apache HTTP] server. @@ -18,7 +18,7 @@ This module requires the The +{modulename}+ module was tested with logs from versions 2.2.22 and 2.4.23. -On Windows, the module was tested with Apache2 installed from the Chocolatey +On Windows, the module was tested with Apache HTTP Server installed from the Chocolatey repository. include::../include/running-modules.asciidoc[] @@ -29,22 +29,22 @@ include::../include/running-modules.asciidoc[] This module comes with a sample dashboard. For example: [role="screenshot"] -image::./images/kibana-apache2.png[] +image::./images/kibana-apache.png[] include::../include/configuring-intro.asciidoc[] The following example shows how to set paths in the +modules.d/{modulename}.yml+ -file to override the default paths for Apache2 access and error logs: +file to override the default paths for Apache HTTP Server access and error logs: ["source","yaml",subs="attributes"] ----- -- module: apache2 +- module: apache access: enabled: true - var.paths: ["/path/to/log/apache2/access.log*"] + var.paths: ["/path/to/log/apache/access.log*"] error: enabled: true - var.paths: ["/path/to/log/apache2/error.log*"] + var.paths: ["/path/to/log/apache/error.log*"] ----- @@ -52,7 +52,7 @@ To specify the same settings at the command line, you use: ["source","sh",subs="attributes"] ----- --M "apache2.access.var.paths=[/path/to/apache2/access.log*]" -M "apache2.error.var.paths=[/path/to/log/apache2/error.log*]" +-M "apache.access.var.paths=[/path/to/apache/access.log*]" -M "apache.error.var.paths=[/path/to/log/apache/error.log*]" ----- diff --git a/filebeat/module/apache2/_meta/fields.yml b/filebeat/module/apache/_meta/fields.yml similarity index 51% rename from filebeat/module/apache2/_meta/fields.yml rename to filebeat/module/apache/_meta/fields.yml index 9a0810d1972..ead9903ad9d 100644 --- a/filebeat/module/apache2/_meta/fields.yml +++ b/filebeat/module/apache/_meta/fields.yml @@ -1,11 +1,11 @@ -- key: apache2 - title: "Apache2" +- key: apache + title: "Apache" description: > - Apache2 Module + Apache Module short_config: true fields: - - name: apache2 + - name: apache type: group description: > - Apache2 fields. + Apache fields. fields: diff --git a/filebeat/module/apache2/_meta/kibana/6/dashboard/Filebeat-apache2.json b/filebeat/module/apache/_meta/kibana/6/dashboard/Filebeat-apache.json similarity index 85% rename from filebeat/module/apache2/_meta/kibana/6/dashboard/Filebeat-apache2.json rename to filebeat/module/apache/_meta/kibana/6/dashboard/Filebeat-apache.json index 4ad494191c3..ae4641e94f9 100644 --- a/filebeat/module/apache2/_meta/kibana/6/dashboard/Filebeat-apache2.json +++ b/filebeat/module/apache/_meta/kibana/6/dashboard/Filebeat-apache.json @@ -8,8 +8,8 @@ "filter": [] } }, - "savedSearchId": "Apache2-access-logs", - "title": "Unique IPs map [Filebeat Apache2]", + "savedSearchId": "Apache-access-logs", + "title": "Unique IPs map [Filebeat Apache]", "uiStateJSON": { "mapCenter": [ 14.944784875088372, @@ -23,7 +23,7 @@ "enabled": true, "id": "1", "params": { - "field": "apache2.access.remote_ip" + "field": "apache.access.remote_ip" }, "schema": "metric", "type": "cardinality" @@ -33,7 +33,7 @@ "id": "2", "params": { "autoPrecision": true, - "field": "apache2.access.geoip.location" + "field": "apache.access.geoip.location" }, "schema": "segment", "type": "geohash_grid" @@ -68,11 +68,11 @@ "url": "https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer" } }, - "title": "Apache2 access unique IPs map", + "title": "Apache access unique IPs map", "type": "tile_map" } }, - "id": "Apache2-access-unique-IPs-map", + "id": "Apache-access-unique-IPs-map", "type": "visualization", "version": 1 }, @@ -84,8 +84,8 @@ "filter": [] } }, - "savedSearchId": "Apache2-access-logs", - "title": "Top URLs by response code [Filebeat Apache2]", + "savedSearchId": "Apache-access-logs", + "title": "Top URLs by response code [Filebeat Apache]", "uiStateJSON": { "vis": { "colors": { @@ -109,7 +109,7 @@ "id": "3", "params": { "customLabel": "URL", - "field": "apache2.access.url", + "field": "apache.access.url", "order": "desc", "orderBy": "1", "row": false, @@ -122,7 +122,7 @@ "enabled": true, "id": "2", "params": { - "field": "apache2.access.response_code", + "field": "apache.access.response_code", "order": "desc", "orderBy": "1", "size": 5 @@ -139,11 +139,11 @@ "legendPosition": "right", "shareYAxis": true }, - "title": "Apache2 response codes of top URLs", + "title": "Apache response codes of top URLs", "type": "pie" } }, - "id": "Apache2-response-codes-of-top-URLs", + "id": "Apache-response-codes-of-top-URLs", "type": "visualization", "version": 1 }, @@ -155,8 +155,8 @@ "filter": [] } }, - "savedSearchId": "Apache2-access-logs", - "title": "Browsers breakdown [Filebeat Apache2]", + "savedSearchId": "Apache-access-logs", + "title": "Browsers breakdown [Filebeat Apache]", "uiStateJSON": {}, "version": 1, "visState": { @@ -165,7 +165,7 @@ "enabled": true, "id": "1", "params": { - "field": "apache2.access.remote_ip" + "field": "apache.access.remote_ip" }, "schema": "metric", "type": "cardinality" @@ -174,7 +174,7 @@ "enabled": true, "id": "2", "params": { - "field": "apache2.access.user_agent.name", + "field": "apache.access.user_agent.name", "order": "desc", "orderBy": "1", "size": 5 @@ -186,7 +186,7 @@ "enabled": true, "id": "3", "params": { - "field": "apache2.access.user_agent.major", + "field": "apache.access.user_agent.major", "order": "desc", "orderBy": "1", "size": 5 @@ -203,11 +203,11 @@ "legendPosition": "bottom", "shareYAxis": true }, - "title": "Apache2 browsers", + "title": "Apache browsers", "type": "pie" } }, - "id": "Apache2-browsers", + "id": "Apache-browsers", "type": "visualization", "version": 1 }, @@ -219,8 +219,8 @@ "filter": [] } }, - "savedSearchId": "Apache2-access-logs", - "title": "Operating systems breakdown [Filebeat Apache2]", + "savedSearchId": "Apache-access-logs", + "title": "Operating systems breakdown [Filebeat Apache]", "uiStateJSON": {}, "version": 1, "visState": { @@ -229,7 +229,7 @@ "enabled": true, "id": "1", "params": { - "field": "apache2.access.remote_ip" + "field": "apache.access.remote_ip" }, "schema": "metric", "type": "cardinality" @@ -238,7 +238,7 @@ "enabled": true, "id": "2", "params": { - "field": "apache2.access.user_agent.os_name", + "field": "apache.access.user_agent.os_name", "order": "desc", "orderBy": "1", "size": 5 @@ -250,7 +250,7 @@ "enabled": true, "id": "3", "params": { - "field": "apache2.access.user_agent.os_major", + "field": "apache.access.user_agent.os_major", "order": "desc", "orderBy": "1", "size": 5 @@ -267,11 +267,11 @@ "legendPosition": "bottom", "shareYAxis": true }, - "title": "Apache2 operating systems", + "title": "Apache operating systems", "type": "pie" } }, - "id": "Apache2-operating-systems", + "id": "Apache-operating-systems", "type": "visualization", "version": 1 }, @@ -283,8 +283,8 @@ "filter": [] } }, - "savedSearchId": "Apache2-errors-log", - "title": "Error logs over time [Filebeat Apache2]", + "savedSearchId": "Apache-errors-log", + "title": "Error logs over time [Filebeat Apache]", "uiStateJSON": {}, "version": 1, "visState": { @@ -313,7 +313,7 @@ "enabled": true, "id": "3", "params": { - "field": "apache2.error.level", + "field": "apache.error.level", "order": "desc", "orderBy": "1", "size": 5 @@ -336,11 +336,11 @@ "times": [], "yAxis": {} }, - "title": "Apache2 error logs over time", + "title": "Apache error logs over time", "type": "histogram" } }, - "id": "Apache2-error-logs-over-time", + "id": "Apache-error-logs-over-time", "type": "visualization", "version": 1 }, @@ -352,8 +352,8 @@ "filter": [] } }, - "savedSearchId": "Apache2-access-logs", - "title": "Response codes over time [Filebeat Apache2]", + "savedSearchId": "Apache-access-logs", + "title": "Response codes over time [Filebeat Apache]", "uiStateJSON": { "vis": { "colors": { @@ -389,7 +389,7 @@ "enabled": true, "id": "3", "params": { - "field": "apache2.access.response_code", + "field": "apache.access.response_code", "order": "desc", "orderBy": "1", "size": 5 @@ -412,21 +412,21 @@ "times": [], "yAxis": {} }, - "title": "Apache2 response codes over time", + "title": "Apache response codes over time", "type": "histogram" } }, - "id": "Apache2-response-codes-over-time", + "id": "Apache-response-codes-over-time", "type": "visualization", "version": 1 }, { "attributes": { "columns": [ - "apache2.error.client", - "apache2.error.level", - "apache2.error.module", - "apache2.error.message" + "apache.error.client", + "apache.error.level", + "apache.error.module", + "apache.error.message" ], "description": "", "hits": 0, @@ -450,7 +450,7 @@ "query": { "query_string": { "analyze_wildcard": true, - "query": "_exists_:apache2.error" + "query": "_exists_:apache.error" } } } @@ -459,20 +459,20 @@ "@timestamp", "desc" ], - "title": "Apache errors log [Filebeat Apache2]", + "title": "Apache errors log [Filebeat Apache]", "version": 1 }, - "id": "Apache2-errors-log", + "id": "Apache-errors-log", "type": "search", "version": 1 }, { "attributes": { "columns": [ - "apache2.access.remote_ip", - "apache2.access.method", - "apache2.access.url", - "apache2.access.response_code" + "apache.access.remote_ip", + "apache.access.method", + "apache.access.url", + "apache.access.response_code" ], "description": "", "hits": 0, @@ -496,7 +496,7 @@ "query": { "query_string": { "analyze_wildcard": true, - "query": "_exists_:apache2.access" + "query": "_exists_:apache.access" } } } @@ -505,16 +505,16 @@ "@timestamp", "desc" ], - "title": "Apache access logs [Filebeat Apache2]", + "title": "Apache access logs [Filebeat Apache]", "version": 1 }, - "id": "Apache2-access-logs", + "id": "Apache-access-logs", "type": "search", "version": 1 }, { "attributes": { - "description": "Filebeat Apache2 module dashboard", + "description": "Filebeat Apache module dashboard", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": { @@ -538,7 +538,7 @@ "panelsJSON": [ { "col": 1, - "id": "Apache2-access-unique-IPs-map", + "id": "Apache-access-unique-IPs-map", "panelIndex": 1, "row": 1, "size_x": 12, @@ -547,7 +547,7 @@ }, { "col": 1, - "id": "Apache2-response-codes-of-top-URLs", + "id": "Apache-response-codes-of-top-URLs", "panelIndex": 2, "row": 6, "size_x": 8, @@ -556,7 +556,7 @@ }, { "col": 9, - "id": "Apache2-browsers", + "id": "Apache-browsers", "panelIndex": 3, "row": 6, "size_x": 4, @@ -565,7 +565,7 @@ }, { "col": 11, - "id": "Apache2-operating-systems", + "id": "Apache-operating-systems", "panelIndex": 4, "row": 4, "size_x": 2, @@ -574,7 +574,7 @@ }, { "col": 1, - "id": "Apache2-error-logs-over-time", + "id": "Apache-error-logs-over-time", "panelIndex": 5, "row": 9, "size_x": 12, @@ -583,7 +583,7 @@ }, { "col": 1, - "id": "Apache2-response-codes-over-time", + "id": "Apache-response-codes-over-time", "panelIndex": 6, "row": 4, "size_x": 10, @@ -593,12 +593,12 @@ { "col": 1, "columns": [ - "apache2.error.client", - "apache2.error.level", - "apache2.error.module", - "apache2.error.message" + "apache.error.client", + "apache.error.level", + "apache.error.module", + "apache.error.message" ], - "id": "Apache2-errors-log", + "id": "Apache-errors-log", "panelIndex": 7, "row": 11, "size_x": 12, @@ -611,7 +611,7 @@ } ], "timeRestore": false, - "title": "[Filebeat Apache2] Access and error logs", + "title": "[Filebeat Apache] Access and error logs", "uiStateJSON": { "P-1": { "mapBounds": { @@ -644,10 +644,10 @@ }, "version": 1 }, - "id": "Filebeat-Apache2-Dashboard", + "id": "Filebeat-Apache-Dashboard", "type": "dashboard", "version": 2 } ], "version": "6.0.0-beta1-SNAPSHOT" -} \ No newline at end of file +} diff --git a/filebeat/module/apache2/access/_meta/fields.yml b/filebeat/module/apache/access/_meta/fields.yml similarity index 97% rename from filebeat/module/apache2/access/_meta/fields.yml rename to filebeat/module/apache/access/_meta/fields.yml index 84456c4e131..48f578d51b0 100644 --- a/filebeat/module/apache2/access/_meta/fields.yml +++ b/filebeat/module/apache/access/_meta/fields.yml @@ -1,7 +1,7 @@ - name: access type: group description: > - Contains fields for the Apache2 HTTPD access logs. + Contains fields for the Apache HTTP Server access logs. fields: - name: remote_ip type: keyword diff --git a/filebeat/module/apache2/access/config/access.yml b/filebeat/module/apache/access/config/access.yml similarity index 100% rename from filebeat/module/apache2/access/config/access.yml rename to filebeat/module/apache/access/config/access.yml diff --git a/filebeat/module/apache2/access/ingest/default.json b/filebeat/module/apache/access/ingest/default.json similarity index 67% rename from filebeat/module/apache2/access/ingest/default.json rename to filebeat/module/apache/access/ingest/default.json index fa112c470f3..80a2ae05571 100644 --- a/filebeat/module/apache2/access/ingest/default.json +++ b/filebeat/module/apache/access/ingest/default.json @@ -1,11 +1,11 @@ { - "description": "Pipeline for parsing Apache2 access logs. Requires the geoip and user_agent plugins.", + "description": "Pipeline for parsing Apache HTTP Server access logs. Requires the geoip and user_agent plugins.", "processors": [{ "grok": { "field": "message", "patterns":[ - "%{IPORHOST:apache2.access.remote_ip} - %{DATA:user.name} \\[%{HTTPDATE:apache2.access.time}\\] \"%{WORD:http.request.method} %{DATA:url.original} HTTP/%{NUMBER:http.version}\" %{NUMBER:http.response.status_code:int} (?:%{NUMBER:apache2.access.body_sent.bytes:int}|-)( \"%{DATA:http.request.referrer}\")?( \"%{DATA:apache2.access.agent}\")?", - "%{IPORHOST:apache2.access.remote_ip} - %{DATA:user.name} \\[%{HTTPDATE:apache2.access.time}\\] \"-\" %{NUMBER:http.response.status_code:int} -" + "%{IPORHOST:apache.access.remote_ip} - %{DATA:user.name} \\[%{HTTPDATE:apache.access.time}\\] \"%{WORD:http.request.method} %{DATA:url.original} HTTP/%{NUMBER:http.version}\" %{NUMBER:http.response.status_code:int} (?:%{NUMBER:apache.access.body_sent.bytes:int}|-)( \"%{DATA:http.request.referrer}\")?( \"%{DATA:apache.access.agent}\")?", + "%{IPORHOST:apache.access.remote_ip} - %{DATA:user.name} \\[%{HTTPDATE:apache.access.time}\\] \"-\" %{NUMBER:http.response.status_code:int} -" ], "ignore_missing": true } @@ -15,7 +15,7 @@ } }, { "grok": { - "field": "apache2.access.remote_ip", + "field": "apache.access.remote_ip", "ignore_missing": true, "patterns": [ "^(%{IP:source.ip}|%{HOSTNAME:source.domain})$" @@ -28,17 +28,17 @@ } }, { "date": { - "field": "apache2.access.time", + "field": "apache.access.time", "target_field": "@timestamp", "formats": ["dd/MMM/YYYY:H:m:s Z"] } }, { "remove": { - "field": "apache2.access.time" + "field": "apache.access.time" } }, { "user_agent": { - "field": "apache2.access.agent", + "field": "apache.access.agent", "ignore_failure": true } }, { @@ -73,7 +73,7 @@ } }, { "rename": { - "field": "apache2.access.agent", + "field": "apache.access.agent", "target_field": "user_agent.original", "ignore_missing": true } diff --git a/filebeat/module/apache2/access/manifest.yml b/filebeat/module/apache/access/manifest.yml similarity index 74% rename from filebeat/module/apache2/access/manifest.yml rename to filebeat/module/apache/access/manifest.yml index 2d75da4b9c9..1c29b3b7233 100644 --- a/filebeat/module/apache2/access/manifest.yml +++ b/filebeat/module/apache/access/manifest.yml @@ -3,10 +3,10 @@ module_version: 1.0 var: - name: paths default: - - /var/log/apache2/access.log* - - /var/log/apache2/other_vhosts_access.log* + - /var/log/apache/access.log* + - /var/log/apache/other_vhosts_access.log* os.darwin: - - /usr/local/var/log/apache2/access_log* + - /usr/local/var/log/apache/access_log* os.windows: - "C:/tools/Apache/httpd-2.*/Apache24/logs/access.log*" - "C:/Program Files/Apache Software Foundation/Apache2.*/logs/access.log*" diff --git a/filebeat/module/apache2/access/test/darwin-2.4.23.log b/filebeat/module/apache/access/test/darwin-2.4.23.log similarity index 100% rename from filebeat/module/apache2/access/test/darwin-2.4.23.log rename to filebeat/module/apache/access/test/darwin-2.4.23.log diff --git a/filebeat/module/apache2/access/test/test.log b/filebeat/module/apache/access/test/test.log similarity index 100% rename from filebeat/module/apache2/access/test/test.log rename to filebeat/module/apache/access/test/test.log diff --git a/filebeat/module/apache2/access/test/test.log-expected.json b/filebeat/module/apache/access/test/test.log-expected.json similarity index 83% rename from filebeat/module/apache2/access/test/test.log-expected.json rename to filebeat/module/apache/access/test/test.log-expected.json index 199c81d0d39..e034428fc6c 100644 --- a/filebeat/module/apache2/access/test/test.log-expected.json +++ b/filebeat/module/apache/access/test/test.log-expected.json @@ -1,10 +1,10 @@ [ { "@timestamp": "2016-12-26T14:16:29.000Z", - "apache2.access.body_sent.bytes": 209, - "apache2.access.remote_ip": "::1", + "apache.access.body_sent.bytes": 209, + "apache.access.remote_ip": "::1", "event.dataset": "access", - "event.module": "apache2", + "event.module": "apache", "http.request.method": "GET", "http.response.status_code": 404, "http.version": "1.1", @@ -16,10 +16,10 @@ }, { "@timestamp": "2016-12-26T16:22:13.000Z", - "apache2.access.body_sent.bytes": 499, - "apache2.access.remote_ip": "192.168.33.1", + "apache.access.body_sent.bytes": 499, + "apache.access.remote_ip": "192.168.33.1", "event.dataset": "access", - "event.module": "apache2", + "event.module": "apache", "http.request.method": "GET", "http.request.referrer": "-", "http.response.status_code": 404, @@ -41,9 +41,9 @@ }, { "@timestamp": "2016-12-26T14:16:48.000Z", - "apache2.access.remote_ip": "::1", + "apache.access.remote_ip": "::1", "event.dataset": "access", - "event.module": "apache2", + "event.module": "apache", "http.response.status_code": 408, "input.type": "log", "log.offset": 238, @@ -52,10 +52,10 @@ }, { "@timestamp": "2017-05-29T19:02:48.000Z", - "apache2.access.body_sent.bytes": 612, - "apache2.access.remote_ip": "172.17.0.1", + "apache.access.body_sent.bytes": 612, + "apache.access.remote_ip": "172.17.0.1", "event.dataset": "access", - "event.module": "apache2", + "event.module": "apache", "http.request.method": "GET", "http.request.referrer": "-", "http.response.status_code": 404, @@ -76,10 +76,10 @@ }, { "@timestamp": "2017-05-29T19:02:48.000Z", - "apache2.access.body_sent.bytes": 612, - "apache2.access.remote_ip": "monitoring-server", + "apache.access.body_sent.bytes": 612, + "apache.access.remote_ip": "monitoring-server", "event.dataset": "access", - "event.module": "apache2", + "event.module": "apache", "http.request.method": "GET", "http.request.referrer": "-", "http.response.status_code": 200, diff --git a/filebeat/module/apache2/access/test/ubuntu-2.2.22.log b/filebeat/module/apache/access/test/ubuntu-2.2.22.log similarity index 100% rename from filebeat/module/apache2/access/test/ubuntu-2.2.22.log rename to filebeat/module/apache/access/test/ubuntu-2.2.22.log diff --git a/filebeat/module/apache2/error/_meta/fields.yml b/filebeat/module/apache/error/_meta/fields.yml similarity index 100% rename from filebeat/module/apache2/error/_meta/fields.yml rename to filebeat/module/apache/error/_meta/fields.yml diff --git a/filebeat/module/apache2/error/config/error.yml b/filebeat/module/apache/error/config/error.yml similarity index 100% rename from filebeat/module/apache2/error/config/error.yml rename to filebeat/module/apache/error/config/error.yml diff --git a/filebeat/module/apache2/error/ingest/pipeline.json b/filebeat/module/apache/error/ingest/pipeline.json similarity index 52% rename from filebeat/module/apache2/error/ingest/pipeline.json rename to filebeat/module/apache/error/ingest/pipeline.json index 417d9890397..2634d4d5818 100644 --- a/filebeat/module/apache2/error/ingest/pipeline.json +++ b/filebeat/module/apache/error/ingest/pipeline.json @@ -1,12 +1,12 @@ { - "description": "Pipeline for parsing apache2 error logs", + "description": "Pipeline for parsing apache error logs", "processors": [ { "grok": { "field": "message", "patterns": [ - "\\[%{APACHE_TIME:apache2.error.timestamp}\\] \\[%{LOGLEVEL:apache2.error.level}\\]( \\[client %{IPORHOST:apache2.error.client}\\])? %{GREEDYDATA:apache2.error.message}", - "\\[%{APACHE_TIME:apache2.error.timestamp}\\] \\[%{DATA:apache2.error.module}:%{LOGLEVEL:apache2.error.level}\\] \\[pid %{NUMBER:apache2.error.pid}(:tid %{NUMBER:apache2.error.tid})?\\]( \\[client %{IPORHOST:apache2.error.client}\\])? %{GREEDYDATA:apache2.error.message1}" + "\\[%{APACHE_TIME:apache.error.timestamp}\\] \\[%{LOGLEVEL:apache.error.level}\\]( \\[client %{IPORHOST:apache.error.client}\\])? %{GREEDYDATA:apache.error.message}", + "\\[%{APACHE_TIME:apache.error.timestamp}\\] \\[%{DATA:apache.error.module}:%{LOGLEVEL:apache.error.level}\\] \\[pid %{NUMBER:apache.error.pid}(:tid %{NUMBER:apache.error.tid})?\\]( \\[client %{IPORHOST:apache.error.client}\\])? %{GREEDYDATA:apache.error.message1}" ], "pattern_definitions": { "APACHE_TIME": "%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}" @@ -21,14 +21,14 @@ }, { "rename": { - "field": "apache2.error.message1", - "target_field": "apache2.error.message", + "field": "apache.error.message1", + "target_field": "apache.error.message", "ignore_failure": true } }, { "date": { - "field": "apache2.error.timestamp", + "field": "apache.error.timestamp", "target_field": "@timestamp", "formats": ["EEE MMM dd H:m:s YYYY", "EEE MMM dd H:m:s.SSSSSS YYYY"], "ignore_failure": true @@ -36,7 +36,7 @@ }, { "remove": { - "field": "apache2.error.timestamp", + "field": "apache.error.timestamp", "ignore_failure": true } } diff --git a/filebeat/module/apache2/error/manifest.yml b/filebeat/module/apache/error/manifest.yml similarity index 77% rename from filebeat/module/apache2/error/manifest.yml rename to filebeat/module/apache/error/manifest.yml index 0d8abdc0484..0dd3c4c0d28 100644 --- a/filebeat/module/apache2/error/manifest.yml +++ b/filebeat/module/apache/error/manifest.yml @@ -3,9 +3,9 @@ module_version: 1.0 var: - name: paths default: - - /var/log/apache2/error.log* + - /var/log/apache/error.log* os.darwin: - - /usr/local/var/log/apache2/error_log* + - /usr/local/var/log/apache/error_log* os.windows: - "C:/tools/Apache/httpd-2.*/Apache24/logs/error.log*" - "C:/Program Files/Apache Software Foundation/Apache2.*/logs/error.log*" diff --git a/filebeat/module/apache2/error/test/darwin-2.4.23.log b/filebeat/module/apache/error/test/darwin-2.4.23.log similarity index 100% rename from filebeat/module/apache2/error/test/darwin-2.4.23.log rename to filebeat/module/apache/error/test/darwin-2.4.23.log diff --git a/filebeat/module/apache2/error/test/test.log b/filebeat/module/apache/error/test/test.log similarity index 100% rename from filebeat/module/apache2/error/test/test.log rename to filebeat/module/apache/error/test/test.log diff --git a/filebeat/module/apache/error/test/test.log-expected.json b/filebeat/module/apache/error/test/test.log-expected.json new file mode 100644 index 00000000000..e942a7954c4 --- /dev/null +++ b/filebeat/module/apache/error/test/test.log-expected.json @@ -0,0 +1,36 @@ +[ + { + "@timestamp": "2016-12-26T16:22:08.000Z", + "apache.error.client": "192.168.33.1", + "apache.error.level": "error", + "apache.error.message": "File does not exist: /var/www/favicon.ico", + "event.dataset": "error", + "event.module": "apache", + "input.type": "log", + "log.offset": 0 + }, + { + "@timestamp": "2016-12-26T16:15:55.103Z", + "apache.error.level": "notice", + "apache.error.message": "AH00094: Command line: '/usr/local/Cellar/httpd24/2.4.23_2/bin/httpd'", + "apache.error.module": "core", + "apache.error.pid": "11379", + "event.dataset": "error", + "event.module": "apache", + "input.type": "log", + "log.offset": 99 + }, + { + "@timestamp": "2011-09-09T10:42:29.902Z", + "apache.error.client": "72.15.99.187", + "apache.error.level": "error", + "apache.error.message": "File does not exist: /usr/local/apache2/htdocs/favicon.ico", + "apache.error.module": "core", + "apache.error.pid": "35708", + "apache.error.tid": "4328636416", + "event.dataset": "error", + "event.module": "apache", + "input.type": "log", + "log.offset": 229 + } +] diff --git a/filebeat/module/apache2/error/test/ubuntu-2.2.22.log b/filebeat/module/apache/error/test/ubuntu-2.2.22.log similarity index 100% rename from filebeat/module/apache2/error/test/ubuntu-2.2.22.log rename to filebeat/module/apache/error/test/ubuntu-2.2.22.log diff --git a/filebeat/module/apache/module.yml b/filebeat/module/apache/module.yml new file mode 100644 index 00000000000..1d553ef8fc2 --- /dev/null +++ b/filebeat/module/apache/module.yml @@ -0,0 +1,4 @@ +dashboards: +- id: Filebeat-Apache-Dashboard + file: Filebeat-apache.json + diff --git a/filebeat/module/apache2/error/test/test.log-expected.json b/filebeat/module/apache2/error/test/test.log-expected.json deleted file mode 100644 index 3832540823f..00000000000 --- a/filebeat/module/apache2/error/test/test.log-expected.json +++ /dev/null @@ -1,36 +0,0 @@ -[ - { - "@timestamp": "2016-12-26T16:22:08.000Z", - "apache2.error.client": "192.168.33.1", - "apache2.error.level": "error", - "apache2.error.message": "File does not exist: /var/www/favicon.ico", - "event.dataset": "error", - "event.module": "apache2", - "input.type": "log", - "log.offset": 0 - }, - { - "@timestamp": "2016-12-26T16:15:55.103Z", - "apache2.error.level": "notice", - "apache2.error.message": "AH00094: Command line: '/usr/local/Cellar/httpd24/2.4.23_2/bin/httpd'", - "apache2.error.module": "core", - "apache2.error.pid": "11379", - "event.dataset": "error", - "event.module": "apache2", - "input.type": "log", - "log.offset": 99 - }, - { - "@timestamp": "2011-09-09T10:42:29.902Z", - "apache2.error.client": "72.15.99.187", - "apache2.error.level": "error", - "apache2.error.message": "File does not exist: /usr/local/apache2/htdocs/favicon.ico", - "apache2.error.module": "core", - "apache2.error.pid": "35708", - "apache2.error.tid": "4328636416", - "event.dataset": "error", - "event.module": "apache2", - "input.type": "log", - "log.offset": 229 - } -] \ No newline at end of file diff --git a/filebeat/module/apache2/module.yml b/filebeat/module/apache2/module.yml deleted file mode 100644 index 0ac265bd256..00000000000 --- a/filebeat/module/apache2/module.yml +++ /dev/null @@ -1,4 +0,0 @@ -dashboards: -- id: Filebeat-Apache2-Dashboard - file: Filebeat-apache2.json - diff --git a/filebeat/modules.d/apache2.yml.disabled b/filebeat/modules.d/apache.yml.disabled similarity index 86% rename from filebeat/modules.d/apache2.yml.disabled rename to filebeat/modules.d/apache.yml.disabled index 9fa8f214667..c6a2c941469 100644 --- a/filebeat/modules.d/apache2.yml.disabled +++ b/filebeat/modules.d/apache.yml.disabled @@ -1,7 +1,7 @@ -# Module: apache2 -# Docs: https://www.elastic.co/guide/en/beats/filebeat/master/filebeat-module-apache2.html +# Module: apache +# Docs: https://www.elastic.co/guide/en/beats/filebeat/master/filebeat-module-apache.html -- module: apache2 +- module: apache # Access logs access: enabled: true diff --git a/x-pack/filebeat/filebeat.reference.yml b/x-pack/filebeat/filebeat.reference.yml index 294c9b42f1a..c36d0690397 100644 --- a/x-pack/filebeat/filebeat.reference.yml +++ b/x-pack/filebeat/filebeat.reference.yml @@ -43,8 +43,8 @@ filebeat.modules: # can be added under this section. #input: -#------------------------------- Apache2 Module ------------------------------- -#- module: apache2 +#-------------------------------- Apache Module -------------------------------- +#- module: apache # Access logs #access: #enabled: true From 872474922a1d584e2a874c476cab209655e611f7 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Wed, 5 Dec 2018 18:44:13 +0100 Subject: [PATCH 02/14] Add aliases from old fields to new ones --- dev-tools/ecs-migration.yml | 18 +++---- filebeat/docs/fields.asciidoc | 72 +++++++++++++++++++++++++ filebeat/include/fields.go | 2 +- filebeat/module/apache/_meta/fields.yml | 25 +++++++++ 4 files changed, 107 insertions(+), 10 deletions(-) diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index 574389dc09d..40e33fc1ef8 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -142,31 +142,31 @@ ## Apache -- from: apache.access.user_name +- from: apache2.access.user_name to: user.name alias: true -- from: apache.access.method +- from: apache2.access.method to: http.request.method alias: true -- from: apache.access.url +- from: apache2.access.url to: url.original alias: true -- from: apache.access.http_version +- from: apache2.access.http_version to: http.version alias: true -- from: apache.access.response_code +- from: apache2.access.response_code to: http.response.status_code alias: true -- from: apache.access.referrer +- from: apache2.access.referrer to: http.request.referrer alias: true -- from: apache.access.agent +- from: apache2.access.agent to: user_agent.original alias: true @@ -175,11 +175,11 @@ alias: true # These expand all fields under geoip and user_agent -- from: apache.access.geoip.* +- from: apache2.access.geoip.* to: source.geo.* alias: true -- from: apache.access.user_agent.* +- from: apache2.access.user_agent.* to: user_agent.* alias: true diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 2e647fcd68c..75d7bc4f0ad 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -45,6 +45,78 @@ Apache Module +*`apache2.access.remote_ip`*:: ++ +-- +type: alias + +alias to: apache.access.remote_ip + +-- + +*`apache2.access.body_sent.bytes`*:: ++ +-- +type: alias + +alias to: apache.access.body_sent.bytes + +-- + +*`apache2.error.level`*:: ++ +-- +type: alias + +alias to: apache.error.level + +-- + +*`apache2.error.client`*:: ++ +-- +type: alias + +alias to: apache.error.client + +-- + +*`apache2.error.message`*:: ++ +-- +type: alias + +alias to: apache.error.message + +-- + +*`apache2.error.pid`*:: ++ +-- +type: alias + +alias to: apache.error.pid + +-- + +*`apache2.error.tid`*:: ++ +-- +type: alias + +alias to: apache.error.tid + +-- + +*`apache2.error.module`*:: ++ +-- +type: alias + +alias to: apache.error.module + +-- + [float] == apache fields diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index aa48d9a7591..7343ddd912e 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "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" + return "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" } diff --git a/filebeat/module/apache/_meta/fields.yml b/filebeat/module/apache/_meta/fields.yml index ead9903ad9d..cfa176acaed 100644 --- a/filebeat/module/apache/_meta/fields.yml +++ b/filebeat/module/apache/_meta/fields.yml @@ -4,6 +4,31 @@ Apache Module short_config: true fields: + - name: apache2.access.remote_ip + type: alias + path: apache.access.remote_ip + - name: apache2.access.body_sent.bytes + type: alias + path: apache.access.body_sent.bytes + - name: apache2.error.level + type: alias + path: apache.error.level + - name: apache2.error.client + type: alias + path: apache.error.client + - name: apache2.error.message + type: alias + path: apache.error.message + - name: apache2.error.pid + type: alias + path: apache.error.pid + - name: apache2.error.tid + type: alias + path: apache.error.tid + - name: apache2.error.module + type: alias + path: apache.error.module + - name: apache type: group description: > From 7d98126d81620fea1f530cc0a20488f71b1213d9 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 6 Dec 2018 10:24:27 +0100 Subject: [PATCH 03/14] Use old names in apache dashboard for backwards compatibility --- .../kibana/6/dashboard/Filebeat-apache.json | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/filebeat/module/apache/_meta/kibana/6/dashboard/Filebeat-apache.json b/filebeat/module/apache/_meta/kibana/6/dashboard/Filebeat-apache.json index ae4641e94f9..e22d3775255 100644 --- a/filebeat/module/apache/_meta/kibana/6/dashboard/Filebeat-apache.json +++ b/filebeat/module/apache/_meta/kibana/6/dashboard/Filebeat-apache.json @@ -23,7 +23,7 @@ "enabled": true, "id": "1", "params": { - "field": "apache.access.remote_ip" + "field": "apache2.access.remote_ip" }, "schema": "metric", "type": "cardinality" @@ -33,7 +33,7 @@ "id": "2", "params": { "autoPrecision": true, - "field": "apache.access.geoip.location" + "field": "apache2.access.geoip.location" }, "schema": "segment", "type": "geohash_grid" @@ -109,7 +109,7 @@ "id": "3", "params": { "customLabel": "URL", - "field": "apache.access.url", + "field": "apache2.access.url", "order": "desc", "orderBy": "1", "row": false, @@ -122,7 +122,7 @@ "enabled": true, "id": "2", "params": { - "field": "apache.access.response_code", + "field": "apache2.access.response_code", "order": "desc", "orderBy": "1", "size": 5 @@ -165,7 +165,7 @@ "enabled": true, "id": "1", "params": { - "field": "apache.access.remote_ip" + "field": "apache2.access.remote_ip" }, "schema": "metric", "type": "cardinality" @@ -174,7 +174,7 @@ "enabled": true, "id": "2", "params": { - "field": "apache.access.user_agent.name", + "field": "apache2.access.user_agent.name", "order": "desc", "orderBy": "1", "size": 5 @@ -186,7 +186,7 @@ "enabled": true, "id": "3", "params": { - "field": "apache.access.user_agent.major", + "field": "apache2.access.user_agent.major", "order": "desc", "orderBy": "1", "size": 5 @@ -229,7 +229,7 @@ "enabled": true, "id": "1", "params": { - "field": "apache.access.remote_ip" + "field": "apache2.access.remote_ip" }, "schema": "metric", "type": "cardinality" @@ -238,7 +238,7 @@ "enabled": true, "id": "2", "params": { - "field": "apache.access.user_agent.os_name", + "field": "apache2.access.user_agent.os_name", "order": "desc", "orderBy": "1", "size": 5 @@ -250,7 +250,7 @@ "enabled": true, "id": "3", "params": { - "field": "apache.access.user_agent.os_major", + "field": "apache2.access.user_agent.os_major", "order": "desc", "orderBy": "1", "size": 5 @@ -313,7 +313,7 @@ "enabled": true, "id": "3", "params": { - "field": "apache.error.level", + "field": "apache2.error.level", "order": "desc", "orderBy": "1", "size": 5 @@ -389,7 +389,7 @@ "enabled": true, "id": "3", "params": { - "field": "apache.access.response_code", + "field": "apache2.access.response_code", "order": "desc", "orderBy": "1", "size": 5 @@ -423,10 +423,10 @@ { "attributes": { "columns": [ - "apache.error.client", - "apache.error.level", - "apache.error.module", - "apache.error.message" + "apache2.error.client", + "apache2.error.level", + "apache2.error.module", + "apache2.error.message" ], "description": "", "hits": 0, @@ -450,7 +450,7 @@ "query": { "query_string": { "analyze_wildcard": true, - "query": "_exists_:apache.error" + "query": "_exists_:apache2.error" } } } @@ -469,10 +469,10 @@ { "attributes": { "columns": [ - "apache.access.remote_ip", - "apache.access.method", - "apache.access.url", - "apache.access.response_code" + "apache2.access.remote_ip", + "apache2.access.method", + "apache2.access.url", + "apache2.access.response_code" ], "description": "", "hits": 0, @@ -496,7 +496,7 @@ "query": { "query_string": { "analyze_wildcard": true, - "query": "_exists_:apache.access" + "query": "_exists_:apache2.access" } } } @@ -593,10 +593,10 @@ { "col": 1, "columns": [ - "apache.error.client", - "apache.error.level", - "apache.error.module", - "apache.error.message" + "apache2.error.client", + "apache2.error.level", + "apache2.error.module", + "apache2.error.message" ], "id": "Apache-errors-log", "panelIndex": 7, From 23c3bd4e5458c04e746851732fc42320ee0d2811 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 6 Dec 2018 10:27:25 +0100 Subject: [PATCH 04/14] Remove reference to apache2 in tests --- filebeat/autodiscover/builder/hints/logs_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/filebeat/autodiscover/builder/hints/logs_test.go b/filebeat/autodiscover/builder/hints/logs_test.go index da687231a8a..a96b58a6882 100644 --- a/filebeat/autodiscover/builder/hints/logs_test.go +++ b/filebeat/autodiscover/builder/hints/logs_test.go @@ -233,13 +233,13 @@ func TestGenerateHints(t *testing.T) { }, "hints": common.MapStr{ "logs": common.MapStr{ - "module": "apache2", + "module": "apache", }, }, }, len: 1, result: common.MapStr{ - "module": "apache2", + "module": "apache", "error": map[string]interface{}{ "enabled": true, "input": map[string]interface{}{ @@ -280,14 +280,14 @@ func TestGenerateHints(t *testing.T) { }, "hints": common.MapStr{ "logs": common.MapStr{ - "module": "apache2", + "module": "apache", "fileset": "access", }, }, }, len: 1, result: common.MapStr{ - "module": "apache2", + "module": "apache", "access": map[string]interface{}{ "enabled": true, "input": map[string]interface{}{ @@ -328,7 +328,7 @@ func TestGenerateHints(t *testing.T) { }, "hints": common.MapStr{ "logs": common.MapStr{ - "module": "apache2", + "module": "apache", "fileset.stdout": "access", "fileset.stderr": "error", }, @@ -336,7 +336,7 @@ func TestGenerateHints(t *testing.T) { }, len: 1, result: common.MapStr{ - "module": "apache2", + "module": "apache", "access": map[string]interface{}{ "enabled": true, "input": map[string]interface{}{ From 8637d2fd6b5c9c2505433872eb17643159b21728 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 6 Dec 2018 10:31:25 +0100 Subject: [PATCH 05/14] Move image used in docs --- .../{kibana-apache2.png => kibana-apache.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename filebeat/docs/images/{kibana-apache2.png => kibana-apache.png} (100%) diff --git a/filebeat/docs/images/kibana-apache2.png b/filebeat/docs/images/kibana-apache.png similarity index 100% rename from filebeat/docs/images/kibana-apache2.png rename to filebeat/docs/images/kibana-apache.png From be2f162f65624a07db94e9a4f9529a6415dff827 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 6 Dec 2018 16:32:24 +0100 Subject: [PATCH 06/14] Revert changes in apache2 paths --- filebeat/docs/filebeat-options.asciidoc | 2 +- filebeat/docs/inputs/input-log.asciidoc | 4 ++-- filebeat/docs/migration.asciidoc | 2 +- filebeat/docs/reload-configuration.asciidoc | 4 ++-- filebeat/module/apache/access/manifest.yml | 6 +++--- filebeat/module/apache/error/manifest.yml | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/filebeat/docs/filebeat-options.asciidoc b/filebeat/docs/filebeat-options.asciidoc index d082a1131b6..c2fcceae33c 100644 --- a/filebeat/docs/filebeat-options.asciidoc +++ b/filebeat/docs/filebeat-options.asciidoc @@ -29,7 +29,7 @@ input type more than once. For example: - /var/log/wifi.log - type: log paths: - - "/var/log/apache/*" + - "/var/log/apache2/*" fields: apache: true fields_under_root: true diff --git a/filebeat/docs/inputs/input-log.asciidoc b/filebeat/docs/inputs/input-log.asciidoc index 8a20ffe0035..181714a4d64 100644 --- a/filebeat/docs/inputs/input-log.asciidoc +++ b/filebeat/docs/inputs/input-log.asciidoc @@ -42,7 +42,7 @@ multiple input sections: - /var/log/wifi.log - type: log <2> paths: - - "/var/log/apache/*" + - "/var/log/apache2/*" fields: apache: true fields_under_root: true @@ -50,7 +50,7 @@ multiple input sections: <1> Harvests lines from two files: `system.log` and `wifi.log`. -<2> Harvests lines from every file in the `apache` directory, and uses the +<2> Harvests lines from every file in the `apache2` directory, and uses the `fields` configuration option to add a field called `apache` to the output. diff --git a/filebeat/docs/migration.asciidoc b/filebeat/docs/migration.asciidoc index a57c765ab5c..92c1102ef3b 100644 --- a/filebeat/docs/migration.asciidoc +++ b/filebeat/docs/migration.asciidoc @@ -148,7 +148,7 @@ The equivalent `inputs` section would look like this: - type: stdin <1> - type: log paths: - - /var/log/apache/httpd-*.log + - /var/log/apache2/httpd-*.log ------------------------------------------------------------------------------------- <1> The explicit `type` option was introduced to differentiate between normal files and diff --git a/filebeat/docs/reload-configuration.asciidoc b/filebeat/docs/reload-configuration.asciidoc index 3684f872582..e498c5495c8 100644 --- a/filebeat/docs/reload-configuration.asciidoc +++ b/filebeat/docs/reload-configuration.asciidoc @@ -86,10 +86,10 @@ For example: - module: apache access: enabled: true - var.paths: [/var/log/apache/access.log*] + var.paths: [/var/log/apache2/access.log*] error: enabled: true - var.paths: [/var/log/apache/error.log*] + var.paths: [/var/log/apache2/error.log*] ------------------------------------------------------------------------------ diff --git a/filebeat/module/apache/access/manifest.yml b/filebeat/module/apache/access/manifest.yml index 1c29b3b7233..2d75da4b9c9 100644 --- a/filebeat/module/apache/access/manifest.yml +++ b/filebeat/module/apache/access/manifest.yml @@ -3,10 +3,10 @@ module_version: 1.0 var: - name: paths default: - - /var/log/apache/access.log* - - /var/log/apache/other_vhosts_access.log* + - /var/log/apache2/access.log* + - /var/log/apache2/other_vhosts_access.log* os.darwin: - - /usr/local/var/log/apache/access_log* + - /usr/local/var/log/apache2/access_log* os.windows: - "C:/tools/Apache/httpd-2.*/Apache24/logs/access.log*" - "C:/Program Files/Apache Software Foundation/Apache2.*/logs/access.log*" diff --git a/filebeat/module/apache/error/manifest.yml b/filebeat/module/apache/error/manifest.yml index 0dd3c4c0d28..0d8abdc0484 100644 --- a/filebeat/module/apache/error/manifest.yml +++ b/filebeat/module/apache/error/manifest.yml @@ -3,9 +3,9 @@ module_version: 1.0 var: - name: paths default: - - /var/log/apache/error.log* + - /var/log/apache2/error.log* os.darwin: - - /usr/local/var/log/apache/error_log* + - /usr/local/var/log/apache2/error_log* os.windows: - "C:/tools/Apache/httpd-2.*/Apache24/logs/error.log*" - "C:/Program Files/Apache Software Foundation/Apache2.*/logs/error.log*" From 436bc15d3c541424ec60b9c8fdba6601a667b374 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 6 Dec 2018 17:03:17 +0100 Subject: [PATCH 07/14] Make aliases for old apache2 fields --- filebeat/docs/fields.asciidoc | 179 +++++++++--------- filebeat/include/fields.go | 2 +- filebeat/module/apache/_meta/fields.yml | 136 ++++++++++--- .../module/apache/access/_meta/fields.yml | 77 -------- 4 files changed, 207 insertions(+), 187 deletions(-) diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 75d7bc4f0ad..77277f8ec04 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -45,6 +45,14 @@ Apache Module +[float] +== apache2 fields + +Aliases for backward compatibility with old apache2 fields + + + + *`apache2.access.remote_ip`*:: + -- @@ -63,151 +71,152 @@ alias to: apache.access.body_sent.bytes -- -*`apache2.error.level`*:: +*`apache2.access.user_name`*:: + -- type: alias -alias to: apache.error.level +alias to: user.name -- -*`apache2.error.client`*:: +*`apache2.access.method`*:: + -- type: alias -alias to: apache.error.client +alias to: http.request.method -- -*`apache2.error.message`*:: +*`apache2.access.url`*:: + -- type: alias -alias to: apache.error.message +alias to: url.original -- -*`apache2.error.pid`*:: +*`apache2.access.http_version`*:: + -- type: alias -alias to: apache.error.pid +alias to: http.version -- -*`apache2.error.tid`*:: +*`apache2.access.response_code`*:: + -- type: alias -alias to: apache.error.tid +alias to: http.response.status_code -- -*`apache2.error.module`*:: +*`apache2.access.referrer`*:: + -- type: alias -alias to: apache.error.module +alias to: http.request.referrer -- -[float] -== apache fields - -Apache fields. +*`apache2.access.agent`*:: ++ +-- +type: alias +alias to: user_agent.original +-- -[float] -== access fields -Contains fields for the Apache HTTP Server access logs. +*`apache2.access.user_agent.device`*:: ++ +-- +type: alias +alias to: user_agent.device +-- -*`apache.access.remote_ip`*:: +*`apache2.access.user_agent.major`*:: + -- -type: keyword - -Client IP address or hostname. +type: alias +alias to: user_agent.major -- -*`apache.access.body_sent.bytes`*:: +*`apache2.access.user_agent.minor`*:: + -- -type: long - -format: bytes - -The number of bytes of the server response body. +type: alias +alias to: user_agent.minor -- -*`apache.access.user_name`*:: +*`apache2.access.user_agent.patch`*:: + -- type: alias -alias to: user.name +alias to: user_agent.patch -- -*`apache.access.method`*:: +*`apache2.access.user_agent.name`*:: + -- type: alias -alias to: http.request.method +alias to: user_agent.name -- -*`apache.access.url`*:: +*`apache2.access.user_agent.os`*:: + -- type: alias -alias to: url.original +alias to: user_agent.os.full_name -- -*`apache.access.http_version`*:: +*`apache2.access.user_agent.os_major`*:: + -- type: alias -alias to: http.version +alias to: user_agent.os.major -- -*`apache.access.response_code`*:: +*`apache2.access.user_agent.os_minor`*:: + -- type: alias -alias to: http.response.status_code +alias to: user_agent.os.minor -- -*`apache.access.referrer`*:: +*`apache2.access.user_agent.os_name`*:: + -- type: alias -alias to: http.request.referrer +alias to: user_agent.os.name -- -*`apache.access.agent`*:: +*`apache2.access.user_agent.original`*:: + -- type: alias @@ -217,148 +226,148 @@ alias to: user_agent.original -- -*`apache.access.user_agent.device`*:: +*`apache2.access.geoip.continent_name`*:: + -- type: alias -alias to: user_agent.device +alias to: source.geo.continent_name -- -*`apache.access.user_agent.major`*:: +*`apache2.access.geoip.country_iso_code`*:: + -- type: alias -alias to: user_agent.major +alias to: source.geo.country_iso_code -- -*`apache.access.user_agent.minor`*:: +*`apache2.access.geoip.location`*:: + -- type: alias -alias to: user_agent.minor +alias to: source.geo.location -- -*`apache.access.user_agent.patch`*:: +*`apache2.access.geoip.region_name`*:: + -- type: alias -alias to: user_agent.patch +alias to: source.geo.region_name -- -*`apache.access.user_agent.name`*:: +*`apache2.access.geoip.city_name`*:: + -- type: alias -alias to: user_agent.name +alias to: source.geo.city_name -- -*`apache.access.user_agent.os`*:: +*`apache2.access.geoip.region_iso_code`*:: + -- type: alias -alias to: user_agent.os.full_name +alias to: source.geo.region_iso_code -- -*`apache.access.user_agent.os_major`*:: + +*`apache2.error.level`*:: + -- type: alias -alias to: user_agent.os.major +alias to: apache.error.level -- -*`apache.access.user_agent.os_minor`*:: +*`apache2.error.client`*:: + -- type: alias -alias to: user_agent.os.minor +alias to: apache.error.client -- -*`apache.access.user_agent.os_name`*:: +*`apache2.error.message`*:: + -- type: alias -alias to: user_agent.os.name +alias to: apache.error.message -- -*`apache.access.user_agent.original`*:: +*`apache2.error.pid`*:: + -- type: alias -alias to: user_agent.original +alias to: apache.error.pid -- - -*`apache.access.geoip.continent_name`*:: +*`apache2.error.tid`*:: + -- type: alias -alias to: source.geo.continent_name +alias to: apache.error.tid -- -*`apache.access.geoip.country_iso_code`*:: +*`apache2.error.module`*:: + -- type: alias -alias to: source.geo.country_iso_code +alias to: apache.error.module -- -*`apache.access.geoip.location`*:: -+ --- -type: alias +[float] +== apache fields -alias to: source.geo.location +Apache fields. --- -*`apache.access.geoip.region_name`*:: -+ --- -type: alias -alias to: source.geo.region_name +[float] +== access fields --- +Contains fields for the Apache HTTP Server access logs. -*`apache.access.geoip.city_name`*:: + + +*`apache.access.remote_ip`*:: + -- -type: alias +type: keyword + +Client IP address or hostname. -alias to: source.geo.city_name -- -*`apache.access.geoip.region_iso_code`*:: +*`apache.access.body_sent.bytes`*:: + -- -type: alias +type: long + +format: bytes + +The number of bytes of the server response body. -alias to: source.geo.region_iso_code -- diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index 7343ddd912e..5e18599d01b 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "eJzsvX2T2zaSMP5/PgVqUvWLvT+NPDN2nGS29u6845fMrt/WM948d05KgkhIwg4FMAA4snK33/0pNAASIEGKlDR29jl7qza2SHY3gEaju9Evx+iGbM4RSeRXCCmqMnKOnl1cfYVQSmQiaK4oZ+fo375CCOkHaE5JlsrxV8j+7RyewP8dI4ZX5BzhBWEKfilBPvF+Wghe5OfozP4zgkf/uV4SA8jiQQlnClOG1JKgFCuM8IwXCv4J7z1IMqr/I5c0z4lAaolVCS0RBCuSwtvkljA1to/mnCvGFfFRP/uIV3lG5Dm6NOgSLAnic/RngpVEcy5QxhdyVOEe64EjKtGcZmRGsBqj51ygJ29fjRBV+oFakhK+GZYoGKNsgeyQcJ4/kETc0oSMvcFTNudihfXsoJQTiRhXKFlitiCIzkuQMCFUIqm/UUvBi8US/VqQQmOQG6nISqKM3hD0Vzy/wSP0jqRUjhAXKBc8IVJ6L5ZQZZEsEZboJV9IheUSmTGhKyJuiXBTqDY5OTer6ibV4wyfMW6JkJSz8nf37Q3ZrLlIvd9bmEL/+bsBotejmv+KCc0fYpbwHD0en4xPjkVy1iBGo96Pktd60fuR4fiiQcWSS6X/th8lP1ooNWoa2Gi6H573jP5aEERTwhSdUyIMQiott96jc8QZQeQjlUreb8xHubfOYX+Y/QTfr3mRpWhGEOwemo5js/g9fjT/9uQkbYyL5EuyIgJnk31H+MxB2meQ1/plmiKmt26WbeyGlQgngkuJBJEKCyVHaFYoNDWrRdNpucO7Rj9vCtwZliSUt3+ufrHi9nS7uNVgkCTKiVqJcJY58bteUi0MBEHcCCzFc5SRW5KBuJLEvahfSfhqxZkbroail0LqiQTpK4fLjqP/UHSl522VHzWWOMXK30GC/FpQQdJzpEThP8iXWJJz9DA2vUdnJ6ePj0++PT57eH3y/fnJt+cPH42///bhfx3145ynWJEHmka0XhJWnTSIC7qgTB8/EVZ5bg4TOy2GzcxxAYOKAlxjiRaEEaFhjhBmaQBSnxDwBTWvCoJjmN/ZSTIzDqeaXih/fZoyEy9kj/1VzemHn49ywdMi0TP289EI/XxE2O3Zz0e/9JzVl1QqzTYWiUSF1Mc416QggpOlf5w36M3wjGRNivnsHyRRMYL/+4ZsTs/RLc4KcjrSWM/sv87+2Y/gv5LNA/gA5ZiK+kTqPxeYaUHnBoLTFK2IPr69o15xtxDoagmiEc59qwIxIhUJF90MSY7RkywzBJudKBXXa4ylm8EumTxNeXJDxFSzFJrefC+ndgZbpndFpMSL5tmlyEfV3HWnUQ75kWQZRz9xkaU9WaKxZYgjxLJyKb70I/2mfRwZ+iVDXC2J0KsBal4UXrhgCWcJVoSFMgehlM7nROgNaue/EplKb8e5ICTbIEmwSJZ4lpExupyjVZEpmmchKItfmjMGFM2NIyPhqxllJEWUKQ4HUXN4boGSjBdpeDJceD/108SfG7kuSGZUaG50Yg1HK4SUzQWWShSJKsxQ7cpU+q45EbSGORd81VP1nqNXRAmaaIVAi0SnL+tzhaFnF2egOwGrzolKlkQaLVijQNRDr18beTTrfRbySGBOUIlWOFlSZtanIqIEKAomgQwkyIor4t5HvFCSpsTDFacOI6vp+yB9YwA+NjTXWNqArUABt1r0vo1hEYQTN/zUzQW/pSkRsa1LPKV6b/3ZjMuhGztG8EUZSc5GaJEQbbXUNt6CKpzxhGDWIqnwLaYZntGMqs3kN85IbECFPCZYquPTZL9xPfGQIY1ML6sRBsBewLfVwrSQLMiin63UpL8fme8AwU60USYVZgkZ91K3SwLp8enZw0ffPv7u+x9O8CxJyfykH6mXFh+6fOoYBgh1G3ULlfsbWCUBvpXVgwT3tKexWc6UOhuvSEqLVT/yXjkJsMmHUIeThBdgegyh7fHjx999993333//ww8/9CPvupKHBqM+N7hYYEZ/M/oOTcvj1dpdm+o8DWDph4oSqfkWm9PzWB/GTCHCbqngbBWzxP2j5clPVyUhNB2hF5wvMmJORvTm3Qt0mYJnxGoGYPMGoCrTMHbmGlFdykx37tZ+7nf2ll/51hXMlNbXG2pj5RKTOUnonCYNchA4xpyNIXkhEmAZD0zNoFuSLEcJF0YBMGePNhUr5ihxSHu+sY0WINp2GX7k2A/326/vDBC0wgwv9OEHwq2kM2pfG+W3KUUO4zMpcSPfuVEiWWkFbn855R+pANMcriVubQ/OCpopTxuoU6HwYj8iKqa1JOBFE9f+Y63QaFhNDH2NP/PDZJdTAYbXMJEcASmRShv+1TFuZcHTxoN+0sD7zm1O8+aMoJQoTDPpiQAPvWYJXILJcXJD1IPAD95/f9K8MaXBT13z9VZbu4JI6XjUo7HdUtYalJZ21lJCl29vH+kfLt/ePnYAiYy4O3MuVIPYjLNFP3LfcqGihMaO+f14+dWTi86paWBM+QrTPtphxPjucmJ5PGNQRHAvCG8g9jmnjiPA8ILwjCeWh7locoD5U+e+8HyljDA1qYmQ9jnoHHLNDnHQvXH7uAumxGZCJZ8kPD0I9gsDE11evUEaZhSxm7IIwgXhk5zTmprUifIlZwuqipSAfZphBf+IIjZWyMGm2tocRmDHJljbZ4dCdqHtr1ZUdmSHXEo7utpKVseBZ/KXJ4H3W99DAAz7uj6ouLOetSCh+iuctSiHASVtCiGoEKFSCCqUvafBaE4FWeMsGyFG1JqLGwt3hIhKhp8rdyNDg4He0REGd7YNJHdzs9eG7ZawNHCLRD2xnZIf2MrACRY+gusA17glPoDVRCKJoDibsGI1I81x7YLKQEQGYhOhthd+44yM+XwuiRpL0uTH/rrDtYWGDLTAKKcMSZJwlsZuB14Defp9+45xvNJborf4++sL8EpqWBYylej45PT84Ung/9N/zDXEmmaZ3rDH3z46OYkaPvCkOR97349rs9/3SBjerTyuIE5qbuE6AAEuTKaFG0nJHBzfmb0TcvA2OZFjdMVXxI0J5GIAakpYCqfkdISmTnLpv9NUwn9y+E8u+MfNNDpL7qOmnk+E4DVr/5n3U+94l8rkTjBDguSCQDwHwAd5ow3rG8rSMXovYSJXoEPZF4KIlyXOcwKuvYwYF7SeaHtnAjvc3nesYZKr20WqJMnm3h0wM/CD9RlgLhw85ECPGMhtUDX4ZqorEEBDb7k5qtTBdM8tYrBoOM6SM86K5uhKZrttBFc9u90luMqsdsytpJeefFRtygNsXWCSHYzHw3DD5VMtDEvbtxHVhTqjRiJGUbmiWJEFF5s9VxWm1sFqCxCx93lYT7y2g4xwC7+qDWUFl1Eyzo37C+wnRlwv6C1h5p6PSpA3ZeCGvSrwb0Q1x8DSN68LyqGCCLexMG6gsw2smx58dKxsQdnHY6mwksed48aJ2lsbgYA7gIMSnKtCVAQaxgoOM/smnKy3WGzg/ArgmUg6PYf2b7MCTuqM3pBsA25ulmRggQEsqbFJkhRC2yz28k6OQpg2Gm+W8eQGLvQE+rXAAmuLlbLFH/XDNcky/d8VF8QEidCkxKEhBCCxRBlfUGbPhRHEqSH6gNvAwI8bvbxrLNLq8Iif01bZ2GWhBSkdck05ztMiO6BP1MAzjN1XB9H860nC8AsPqo1NoczGtXFRBk7GN/NG/prFh61Jk6Tpu9p53BZgy9olnCUkB50Ko6l9d4ruaW7QKuYDJ3iIuq/HH44TS8+3aBh1ZlVeOzFjdKnCG3d/Qo1I0dNaCEGYyjYhNBPBQllFhAm3xSz1frIrywWyVI9Dr7A38SBT4hMvyS3RW3Cb5t8Z0vJdz0CWK4usPMisCe5+tmtnBdBP2kqHtYzei5Vf2RvzFcEM5PQtEd5dGpoRtSaEVQEvenG+kajIkeIBRHOHkGdkRZgiQgutFb4hSBaiJJISF/DHJJVKI7BBf51xZDYkLuvB4JGZ/hq91+yjCoYVSFO9Re30GwmkkFzyNTO3VonKNmhDlGbU/0EpNwFyXNwEIClDCs/0LtYiNHh0KdH/9/Xp2aM/OidJqZqXzvX/gWA7Lm40IbCXQJGqFOwAoHHY0ORGRvnz6Irk6PQHdPL9+dnj89MTYzVePHt+fmLouLIHhflXsGh62QTBCi6+iDBvnI7th6cnJ9Fv1lys9OmQECnnhRbeUvE8J6n7zPxXiuRPpydj/b/TGoRUqj+djU/HZ+Mzmas/nZ49POu5CxB6h9egmJdhV1rbYIqKkvffWw9XSlacSSWwMoFdlCmy0DMREWxWdJv4GcsVlKXkIzFhOSlPJl50SUqlXv7UyCrM9OszUoNoYrdIagJ3qXKKkNBiiNxqbUifCdOJcaMFhiTgPkdznEkfbEWG/6yxY5ZYLnfbLRVbVcEXsb89+fPF095L9iOWS3QvJ2KJc9AhTH7AnLIFEbmgTN3Xqyjw2i6A4qDrzvThy+u803NVh/ufWgOBt6iCFkMsntA9wsxZUFxAYgxO9T6XSPE2LcJAk0vnQrX+WojOzLG5a6pCWkt5SxXKuZR0VgsShP2gSAJvmkNU09EgcEb04RXT28zuch9QCRFtQVQwnLGFVCYQEWIuqhhhdBm7c5iVkY8+NZV/Ycs8EacGII+uk/HpOO67gictSlQh6ncmQ714Ty2I4CjWs8Aw43EfXmlJmoyjBvJaqHoHcrM6LnOpHrAYjQq3L7cxYBlBr+c0pVJRligjsv7De8bMjYD3k0Pe0A9s8hAcZ/blsQvQBVIlQWrNq6el2RvXYrAZX40YIxYyyozSVxs4NSHuxhNm+CKAOdug5zb9BiQ9HATgTkpwNkbTapxTw+t+pln5LFyaj0rgRDl571M4qq1bSWw5BOqH5PuML7VWay5YcJ4bMzHHyY0+Eo1Vqq0O46+LLE7D/1u9EqHX3dk4BHpi45Q3mXILr10a16KZv3Dx9fyXcz/yR1GJRa0dtcVEUnkzkQkXTZNwnnHc07X3jsobBFCMmUt5Q91G98h4MfYscp4VYEPfD5ftvSRowwthzfxvZKnaWoNYL9bWwUy0zbzPiF6DzU1/IylA3TK4kQlelgnOQNc60Yx26i4Hot6bFaYs2+ilmRcZonM9aDAhwM+glphBlIZze2jxgaWki5rIqIiTkLcCYNbYHHaSEISt+wCGYmbQSyKy+YkRr6i2+SymmgfU+kifVy+0hrlnpf/d3aSGQTVwNmtMff2eZRwKVpXyFnFEBxS9xWrpgux9ZMgEwExa4+bwej9/QQNxufp6VdgxZjjb/FaqBu7W2PBEAAlyiRYLQRZweoZHZJVLJBZETQbNzTV8A/MJSORmlVHmm1HxOWqbpZ1v+g83Vz1ni3xUhAVab5zyVqqBvUsoja0O5FsZjLOMrxHBcqPHpggcO7ONcQ6WILxJL7Wx3CpW9aX2PdM96AZawdkKLqgRSqmAiFy73vejU1SPatiO56m7kGyLf6j2Xw0XZf7VTw9Ul/qDynHgbnmMv5WVfzcSLoqy8O5OBq79tXW/osun6N77y6f3YS7d2eZdrd27gofV4BFfMyKi9MCTwasKX30DO0FUDroa6MWwob4VdIXFxghiGOOL2jDiWIKQtcF4/KiMVhyr7WxSmTKPH53EEb/SvOOvCmWIJwpnNU9UlARJf6uTEBhAzTXSX2gUs40iUm9B60HhWgXAaep0w6mGNkU0POOnmsJpfIuugsjuiEEUEPMSSwXKoxk0XEta5XPFU82xaRRLsg+WFVEYbgZMznYaUTaq+EerXLwof+h3/fqCcP+mP8FCbPwkNFyF75exkl76nbPsS3hcaJoCpzocKgxdvjWIht/UtoZZ7pvoVQVYNlG2RlfuFB5ej6us44sEVbaHVHblKLeEU9bxxWMpd8lu8KMoG7MYCaHcZfqq4ElU3wBLLmshCD9Wv/TbAvqDurbt86/P7oBvjJ4YP7i7Ni9B5cuN1OakS3YaIYxuqVCF/5PeDugpZHjU00BKQK/dzaUXqRXc+9VSYMu0zyqDjtR2ZpCq/yDhWUYS5fzHflYvXAmUPpFso20sRkhKdti6/+si2bq83lVwW2Oe9t8kwJiu9o+blXqKYMxDYtjYOZrWWgGdum+nSBBVCJNj/J7Rj87utQnBRVa7If21wBmchjZkHwZmWR6IsadJ7S7e+JwIC9N79XgTmpZOXDP1iutvWue8MbW94nyGpSbY0B/DdzG30xNZTb+978HZGm+kTeEbgcPCXvkYF4UgcE9K2aJullFm/Dq9cgrPA7914e6wplDLBpY0kmu1ewwyyE6au0Dk9tTT/Zj7R5tAugXPAeJEbVhNy2Z5zoXNzXTp4bZOihWdQQq8BgV1rqZlCu00dNldztHtauQSAq3PMciSG/muZC8T1DsNAogVC7WzjfkT3zRfoze5PiG0UXhlPGgxVKXhJcd5htU85jMcNO8VVuu3c2DRvYQwxeUIFbOCqWKE1pSlfC1NaP/9mJxNsVjbhKQYxT1lbXVZ+Qon6M0V+j89ryQbY2kYlwE5c7yiWZ8ov4qglMwoZn3JuUIGBbonSLrEaoTM9yMoAzKTaXROY6T2v+30bnpPxqdn48e7zl0QlN+gCYtkSRWBch+DqPr4/ePJ40e7EuWjjemkSuU1nfT6+u0gnbRZ6ESDgCtRIpUE7V4QmXMG6Yb+sHslNhs44xVRS75nHOyPSuUOIDIAo9ejL55dj9DbN1f6/99fR0gyoxlLhVUh41ZXf1XRUmVgIgOzZnt5tD06edRO0Iynze3ZP3r72ipKwBYVSRpqlBZThWjNRdYsLneQdBeYmkayi0fB6fi0ydQZX4Q8/bL8oZuHq9JDpSdBca9q0nDuhVJv+83BS74wYJx2XNITOfUb6Rxo+tOTd6+nIzR99u6d/s/l6+dv4qkaz969a0rSvULO2mOzMp7gDJTSVxs9IF+8DQr5aZ2+GmNXBeLKq0avxhUIqSBWALaB90YAbkbmHJgkowqELVWogFv3Mts6xyIa9Htp7BcB7jNjEE8tiqm99qiCxZ2lg5l3F60hByA9trCQrJ4WicNxgx81BjiOmVpLfEsQzgTB6QZJzVvGhWg8QBIu3CnkFt0QRFjCUxthzUh4YZRRRiQUfrq15cAyghmET26tNrZTQBqS3EaafdOISPu1IALMOpubYYy1XkFpgZyxwQChrHkd/LjrEVrmhmKFh0udqNrY/xgAx6NJZ5htEAeVAjKlOJLEBsUbpqPCURo/R+Gg/YnOqfe07a6x/bax675xy43jPoNpTGsuuOIJ31Oev3YhJBYaao249pQz776OCnKA1I2nDowTH47jlMDzOU0i+/AdSfhqRVjqggxgx53XZvwPiLIZL1h9mf6AeKHiDwp2w/iaxabAh9WYCptkQdLJvm4BLz+5jDyyd5reI3uAQIZHXBv54Wx8Oj4dn4X0fm3L4cnGCOzwxnBntIcK6XjKwjN3UHESv2+qj44KU+HkkHRYiHFKmsWlHYccbD4cwIETUtJxuBkpKRk4JYornB1sPgCanQzjyCxWpoyVN+/o/68tRJTWh4+/byH2DictRrN95lPdpKAk++xR8xz3a6qFh/mb5pP+qaJBqTZ7aUOY0Mod3FquqVq2ZIsmfJVjttGaFFRuq4w6Pw0cS8kTaqIOqVrGCpBteIGwEFD43iT5KCIMgCpDCDOjUcEBGVYNKvH6g9nBDtpTI/HXoctHdXdp0/74xyH3yBrP1LySg/nmzVW9eUOcSXjN1zP2oYSVxflcmeQlvd5QbNX4ZnNB5vQjkaMyTRLuU8Zcjv8w1XwwLSQRE1NqHX4cvvR37nUF0ltcr/fjNesqr+tWJv003lafjE/oZXWrvs3ben+fciYNB+uxSPqmObU5WSF9EhJlpBJlCrVP3w0RrJfrpSLv0fjR+OT49PTs2KYA70qkwd1NayBDbEJAKEjeBj/uUg+jVXxgh7FFZoDt786PqoilzRsN81D1KVbCQzR9EGwjW7nZt/CNlJs6CnKaTq2AkgpvpAvsM8hcYQ1t6nshUwnPaRVSsMj4DGdeSX5Hct0d319qYdGrZn9XYLCdESwWxaolBfwV3qAZscdyWY4KspMkYZLCtX+0qpDHtx+OjrOjETrSolr/1+UaPj76ZVcR12NYkVMYWQckpCegBGcZgdvHhcArG/gnkKQrmuF4Trv0svXKrRE50wcUIyzZMkTYge8wCHMMt9qNK/cq2kTtm6HvUAGolqwwvcng+chuMeUyZrAs92xLvFJYbd0Kpavgx/5KjausXi/AqfxnUN/YiIwqNMjoytjf+zYeqE3hnVOWWo+uk1yQWAXRfaVrv4Tn0OsvYnd4n7Nqj3XOuGL0rtVVbLFN8xwbjG5iN7JNVRcaPMJeqyxIT7khsitRsjZ/XukAs1bMuyhpJ60M97icW3uEIPIxJ4ISloD3XEpo/KBPEg1TkBSqR5ji4SP9UQBQn07WkuE2646mLhfGEQhBhW7V4R1J2QKigG198zqllXr48DvyLZnNyQkmj5NHP3x3ls7ID/OT0+8e4dPHD7+bzb4/e/Td/LH3bXdcT0+p23mDQjIsFU1MLnVPxcSPIHVcXtXvsLuoo4yYEdq1Rh4mjjuyvQL20Hs4bBiAerIIwDJlus1CQqEEn1jXhm3qAJr4L9cMK4A8BWaa7heFMyzkyopIgNaCV6own/UwiC9sKBVAr637Pgp8J18+HJ+N+0Yn1JrQOZb0pXwfvqTSJNtIczvLbxDWKq3xahBlIu5DYV/q4kFJZ1RnSn9+PlF3NDcJB++P5gbWv0NaePqD+7t2+Pu/tQzYvNOj0HaYM2QvtHseuZFwQLgiP0dBlmvjJqB1kZoFSg15QQ3c3QprR8tqt1PbnmXi0+sX2a5RGotkbEfXOxsqUie2BXGtyPYBcFueqpXWjhXWbjJOa1HtekltNxr3/DOmeERw3m2ORwPhXSd5NBDeTZZHcyIPnubRNpLDLFV3bexCZKGAfv/uZbd0fv/uZT1/BMNtQ0YU0U9HRg2XiT6yRrYLGIYrGHvD4CFxXSCq2AlX46zbvVyIbPyHqd51JSB7Go3RXwkxQSFVczSvTNZ6SRi5JaLMpK8GtKPNNiDCqWOdnhdZppfDzFAZrNKnj+BUf7YUZD41idAf4GAxMH65t1Qql+cPHqzX67E1AcYJf7AoaEoeEPYgABXYCA8EgbSYhDx4PD4LXzQNgOy8LdUq+3rih2VMNA9M3AE3sWnZQt43w7MmRKhG1Ufqj0vzjyJSxcc9dmnf05pBTxhUPtJLrbi2gRGG2J0NwguszbjWWKhCZEgqmmW2ulgVqWUjjjTbaLNR608mjzG2MtWqMFTLTZfG85hjYTi+coi6TKvElHgJbWrbY3oajlvvGBOUJAOFI4gE0VxQccD5o0cPH5iF/vdf/xQs/NeKN8NGzIbej8mvAEbpkzBxtNXePgIqj2I5TdCvELy+51MXxOVqN8FeB8itQTDNwIm7KRPfHFI14UfBykAgHwTEmWp1GDhqhTcIdp3NN9VaJUsfcAHKnw3dyTZGxoIfPgDp5SGNTRN1SNeQxKQw+UEqYOoueBlCWGVBBYmrwUxWY2lMZ7TlCxQUC7KcupyRnkLamMZHjx7GY5kfPWyS4le2GH5TDCUmWpfT7pgjn5pPHI+m+cScpU8G17xoq3rhEwsCco8J1LvUCFlDUFhl0zwx91j1aQ7PAzflNeEUEw8gGP4dBAP5CPV9vYpLPkZIfTRbLVpbi3ENB3ZLWQHfG4vLnDTPMODUprJ7a1ST1eFEGMPc3ncxRFa5quiCIZg3pgEUA6HmQiszVilWpKwt6go/mfqin5dDDdlaRN8Vn84FXqzCQma73IFw4Qcx6nMfz6Hsql6Qr6fe3lc8b2W+r6OnkiOxSbyrw7Ef8e8tlNpGaqLLsZQ1sDtVKjJQoui+qg+vZljIgS0Yy+IpdUdQPJYFXnU8JUhGbrHHGoojv6bvc++SGt8ahwwBi9Z3y+hfKBTq9V1+gGjpSn2XJbhoOqoMIgYhUxtLj6k4bkpp8XlF07KKuPl0N0Rvar6non5jVDpnwsLhh7v/9V0WFY7GlipNIOzAGzMSstFNlVik+A1h9DcS6exIVpjumHSyZcMZ0GF2LjpIydjtF3uO+Zbh5VqjAol5ESLzONusoKybfiUy1+/L2nIQqgXeXhe3Ze9FXBhIwtncMEq9xVUtJrus41svKujLBxMU1pQSyP99mKwwIJ3EqNzcWs22cSQzwdcaiZNd+tuNudouwcklX9t0nDWZlQ52uFeq16C39ltREl6LJzqAH6G/6vWeWXJuw3sSLwavgbZWvmvvLV2WBWlvmXWAvL7aRdBWpCv8j0ibrv5RGa/097FpRS3TuqJsP4T6+yEIc6ySPnKn2/RJlkNwDo13vFgKvupZhrd+TLTR0D/JvSey9qjYnbLD+zNxL8R3wsj9MN8FRzcxf4XQ1+iarHIuoMUL/QgxA0Sh78YnKMVyOeNYpBIcc1bQfm3DUQqp0IK7+D+SyPFmBW1ZwJu8ppKAF1GilLNvTOOAMBS7rBwSSG+c0TJ6SFve55YX4fK/+X3NtdQNo3z5q6+ONfcYGF+VJ+Kfzb8i83rh0jITvlpxBt+VIdu3mGbg+/RLhwMpoLH4Z1BAu6thtP28dW+a6F9VCK/nTH1Vw1JNeki+99fGJtWuJo6qIsVHwUx6JeWideaNWhK8VwqgJ8VC88jZY7VEZyenj0fo9Oz84bfn3z4cP3zYQ8mo6ibXimFnfIEESbRxFNSeqg1K4TIotAXLEzGjCjhfv2ssCGv8S6JQToSZP7hR0SaPwEzWWjGZuJEAsVnwYB6DhtwdzbhbCC3ZD4QzqIaLQgDPueuUgIKgW19DKWpBYvq0hdHImq1qrVZdVz2o5A9N+cZblK39q+cY0sxU251rygZUJQOC+olbNnHmXodEZ3+PBrOY8cUYql56Xs4Y8dXO8DPdOzgbcNcCJ6Fs+hrbuul+GnWQEo5nUKabmPrA0RLKz6vCPudo+uAWiwcZXzywMj/ji+m4OU57n15GX9SCMQYN8arMxayP0dVCKAeKHiBo/2iihxpUmaJpAUneGbjbvNtCbLbHDRcKMuIZ1PIQSiKsaoSENQUaZgJdMC7IBM/4LTlHJ13SsoM0V/jTlQegEFmJa8X3zUIH1EklCF4dijv1RjIQjdDVJGgZUNaNAsNs5KTkN1KlvFDfaCNW/50I8U1IHmV5YQ/v3SYGAJiaVzVuqjipOgFq5QdgoblXNqCsElficCljttArByKcVmOQyzD3umy0YORwbFH0tE3qbRVaBul3ErA3nDnNCXAAWJj1dhEBR1i+kSNElbnWrc76oH5G0ALiXqNIMxSHbfZxcPv0vpkRT5GwN1chL24kyEyc0KxKgzzAvrUAYz0eXPX/OCnu6cFIqTcbMHiCgLgaCa5p2STDszLF6SDHyLJYYbNFQRNwiLoX5c7JcIhqZJQJRCbD5JAE+F55Cz5ylsyzrfpg26ELn8ZiH/3CXOOyrhPJcC6JEQBtjNemg5lPzXZ0V02uBpZfmwvK19Aso1Vx0g6KrJSYZIQtaqrMdpou7NFkPnbTYMuGBUWnAgqabseeYaJcBsp1PUCwTcucF1nWHSwWsXYLpmgGTZzKm4NycDZaCqJXYnNrfJoQQSCI6GDolnl9Z7+0RxCVQSm2cd2cclElM83MLgAr4asHg634mrFSdZLcYkQbznd9O6NQgl6m3XDsq1adTzJepJVCH9bCLAuWx/X6V66cORwKSa2Mpinmbo1lnKYTeGFS1kC3gsk0oo7aAfrVMXw1dmDri0OSLQZtEDsaUDhGb21Cj1enRQMcoUViSnOmdEEVznhCMGsopyVtLlWmioBv1TjMi+jyaVDp2BYY7YHBY5ZtOFitUvB2LPaFiac0lvNcFjztxv7KL5U6CLl15pij0nPOlBQU8phgqY5Pky2+BQ8QAt8NrfwyVNoav7LFIROyHLgLylWtOpGYJ8cf+7Oe/UTT8oLzRUbMTmvHbuJjtwmyhdWZu8ZnN3oK9cmrnf7U/TsC3NYyh1629awi80zvWbnkQk2MMl7pDJglSy4cvuNyl7c45Eqy4sdOV3i5KbN+oGzCytCikYtWD90q1vp/Zz88gAsrBIPuPytoppCfytwk5QAB2iVOFi/3X+IC5bWZ6h2411C3i20LLZcwEwZPybS2GUDYCCAC5JLNuc+o1rYMRU/Fm/r3rZzpNyLof78px71LKmwJL6v7l7+RtYoJ5SzdFDP9wBQ/snP1V/+3CKbqedWVJDixK6DIn6nuTV99tHV6A6KHTXLO0wMwvzcDOU/NNV8UVbGviPEwveUpen/5tIlI/7/M8b6X1B6qCmITGU/JYWcQOlDFp7Cv6OiHyEBDK5w3MUFAhomkOxQ6D2Qc5yHFsYc3CSRzF9oDHEhRvAaulTA4xwm0zbDS5egJ/HAUly3mIXrlbJJQZlj3Y0wmGDRnY5MVMBZkxRWZ1HzjkUtG+Cz+VQtobTdPpDaH/KJx/RDEvq2jgQuasV/XeAvs+gdxgElG63b9FojeF3GQMS/7Fpj+J3GgVXWQXgDd63Fgahgw1Qmsl6EcjtZ8EYHZenC1mSZmX/iJWB2ldRKvrFEczZZtXV672atFpxVZMsDpcUXELREWGdwx+CHVncHUtc0ZkrlTSPUF8GqQZSzKHJaKrig58Q0dElUL40DePXrsoy3Ugge0bENkakJ6KfsQfhctDR+lH7x2tSMERVnU/TGsWkYwRqE22gH0ARm42SIQmnmVvYkV2TgSARh6+CbNsKPeVMc+rRjWrEY933TAlHQ2NPAxBa7JneY9CqOUDYt6b/N+jOJKFNaXoJ0j2zHVBRFqkReoKwxzO/HRAbTAaYuD3BFLHExb7OOuSKJg2uIdd0QSB9MS4LgjjiiUyNXCzgi4HMeuGuqIJgda/UgYYhPVYXggEnfYQHWYRWrGkdYQxYTzbpi6xPyC8Ba9YRep0lpqYgjpNg5nQfh4C7we1SZ2RrwFYkfdiR1RtkLqrjixI7YuYF21J3ZE1w5qexWK/UbYABgLEES7KPU2q6sMw7DKPMAdpL/Xe+6g/XR3U73QBEKEjXiinVPK1fYN2gOR0axSZLCYONMyZskEFYCJ16I7N1vatGSr9CQs44sFSbsnJKyribpslx4YXe3Ky6dxbOqg2NQSIufakAWmd4hv57U2MPU40yJxMVX1eXZOrCKlKvWdWPBDixPLeK/AaM6xkBCQC++Xu6y/W8shRkO8BfWdXsOOuvpp8cUhZcxLyoqPBj9E9KDX0P4082unpzyB+r0kRZA6PiMJLmStVuaSbMzLG4ZXNDG1RLHYoNnGgq9C+Pv7IRIu0kkt1rkn+3Qh9bSiLJ3gorFVtsB/bgQytQ3VbV9R114rSy3yy6cm4d15ZyDSHKLdkOINoAADoMZJZWR9aFIZWZekjr1Zu3xaS9hvEitwQtC8gPJEDjKvRql/QtR1FTJJl6oq2HcvozfNI3lGbHai4Fzdb18wOdSfs3W9JJGQ1XP4FTssrXrBKlrHrkuZV1lBUVIrqoJc0rfitQWbbXxg0SFI8mtBWMMg3+co8TemA2+9bXEacJLscCKbnLsEFG8TMVPrFuJHHsbQNo/rPgrKUy8sJKwvH8C+S+BUkdVeDk8AYPuidEwQrXp7DECjv3LR5CylCVZlz3B4xIsyYt8066nRNY5ApdK9RSX6jQh+PMOSpH9E2Mao8zk6gX7LUO3ZbqY5FVIB0Ba+Oxk+OgPTVbx3ItFmkSU4y+KoxC4eakFkkSkvatrhgLYWiXWyzzHNCkFaxOkwc32bk9/dSrwg/PJtkGG/wFB2JkWwMKZqNUFTo/iMteah9fppA6QtW/OGZRtkw+vtsWKRPPNr66A8K7TkpH4GYT25Hxl5mNYZ6UC+iLi+22P2UCT02iuJ2UrWVqP6sBRBGHobMX1cCgclxyDsmJ2+npy9qGrWE22jZ6t7J1ZedOD8ZC0lR9to6usp2WuKGnU8reUW1MbyDLhGtfcIjuCdKiYhZqfV0aD+5lprR69IpE0A4MiPBtRv+0XCq/rhtz+9/ov8r4dHDbOuPt9V/ldKPnZjvoRuZvqVOM65zbc6VkSqY0jJGoqftkagWOw0jePGb14snq5n79/NL/7+7XdPrpJfZxeLdX/0colF2om+LPAEr8apOOmPEA6p3Y3uTk8d3jTuEsPBwIbWb4WpelRaDdo64xVJQYtQI5NRDeUWuUA0n5hGEUc1LNVM6K/qT9s3fLmhNPatpjmQ7yLGrS2+xArxJCkE5COZAj+8kBMTqDBJCaMkHSFcqKW2Go28nGg1Bn6uvWX+uRCYKf3vhDNmUgujv7nPFF7lWh2ZlBUSRcEm2ANk/20+aJ+8EP/waTTLt30efwLPi1e0rLHw6F7ziSsa9O7Z1TV68vbSfXzf55LyO5OYmBB6W2lo1WvadGckuz8yrcsnEBZ4z/jkEq2m639DI5PUp/N++9xVcHaeN+sM3sqCnt+4lvHanLR2gqG77ePvx6fjR2dxkmu6dJWoR1lC88blW5PQ8k10z5XYu2+2jNkAtW3RTuuk3FjDJxfX2yvHafX1MPOJoVTzEflIkqJzMpOskIqI8xVnVHHxYIVpYzjbSS0E3UoncD9hKahV6P27y1aiHkw+5ji5eSBJUgiqNg8m3nT3d29XihXwVm8B6XhxwCxeZASLq0TwLHtnvh4+hxbtZMbTzVZa9UuN8rJ0bktVd1CqP4zTFty4VPEkuSBtJfh3PXpLqzfZHSZCLy5cbl4t3i+G0kcLJfMOZWxbT37Z30VxTRigGGrZ3p255mvALy5cGoeWFFFCveUvhDn3JUlaSZtnHO9oJ13UKCkRgstQQIEG67z5C77F6JYKVeDMzziJEy4TUcwmcrOa8Wyi9J6AnOW7Ggd6iwtpSw1Q5hKXUZIRzGy1d0MLAloi3rMa4VD87xMQ3oNuU2N5G91rgm8mgszlxDpFgf47pPxa0yxzrctWGIEMVDYckN6g2knPscBZRrKJIDLB7FNR7c33CkP2MsroLbF5FOCMzQjCeZ5ZLcM2csjzptPMv+7HUk4KlnFbp+MTjMRgA35hcAECRPSc/SQv/HICTRpjQrknja4z5cXb94bHLb8QMediZaq/OAEUIbFdZKN6FGd8ktHWie45EP2nNgheKGigDZlkkLUWG0BQLOMzUGm7fHtEok4qBcHZpyDzGu40bDmLOtFQFNe2ojHu3/KUArMFyinBPR5lVC7jLv1/3K4momAtW7B9IH2iQKgrRPuXv7+y1Jg6s3a3jUyrZwCvudyo3F2XeyawRE7grmeipUyb8NiZ8hdYzPAimE2L1d4waax2GWJCo2RkLQLhdHE0H3qKNQmK8xto5QlEWTo76fKK8oUk7BR68+ICgmzM0btoQbkk+GC3Rj8SnEM7w6QsxuzWhf42WJfV30xuZq1CvdnToyeZqNy8evCARzP+Dc04JIi0HzT6ZLozkt5LCMvBeQcxfuzEgsSzL3ZYuDdZ6kLuoJRXkhQ5Zsnm97+CsHh8DqEf3gh+B8vZOqfbV3fDC7Y45Pr+pwb4L77Cm/oYfgdr3DGvceqqYBxx296O6Mgm/Lmihs0LjjoPNNepujZd5ZzVw3dDdC+hVJ59L/TsVF4fPibjZLwavyIKP8UKXwiCFYELItslOPyy7eCKem7qFJmjKwawyf1dfhpgmq69cmSW8MVFu7sr7urqnwNRymzWNFBCWuqYuqjoiNwqtYl1M9Dt4Air5ZzwWyKWBKcd69rGXLGVDhCVGyfj6zBwtrZzzHMXFwca7rO2duMV/g9nJ6ffH588Pj774fr05Pzk8fnpo9EPDx/+8uHy9fM36JcP5qbUgBhbIsbQWegX9OF28ve/LP/x91/QB9PoG+5jH48fjk+ONdzxyePx2eNfPpz8Airhh0fjb1fylxH8YwJl6uSHR/BvrTgvqZIfTn949PBb/dMmJ/LDLyNT5Qf+AiTANdOHv71/9u4/J9c/Pns9ef7s+uLHEgbclsoPp/p9SHv48N8/HwG1Px+d//fPRyuskuUEZ5n554xzqX4+Oj8dn/zzn//8ZbSPvIGwbtEtbBa2YkIbN0Qne05UuHrbRYye4A5KQEmnqtTTrY++6pbVRt/Dk5OVjJFSyzgo6dCr2EWIfj5ka7QPGfikA9WVworCbhiCr2VcHi92oTRBHfqtNpx1Rh44ZmDxSb1bXEw0dK/rgE0yYJagLOsk6EEeI++Zfs11EvcC7g6wTp6g2bYdYC+46pnWVm2h4NHZwM3opFsXDcYso+qgSI043IrWtC1NTaxJGwFnwwgQvFC0dkKHuN+ZN9qWWZ6c/vhfZ3/7880P/1g/WqgFfq7YsO1BOw7ky/QgUmeLBLju2PopT7pwuRJjOBf848aLKrO/tMST2afdkWQVUDQ8hqyhmcwFVIJN6yGTART/Fs19gO5xgTJoCk3EfRvQUEZvQHcF44O24RhVEEykY/cMJzdDiLDvR2lYY4kksdXaFEcrzLw6eMw54LhXTSNCkXnQmyCtq7nSHIp74R0eSkNYtLu82fBrTFV5eRRE0Ad4zbZ3N1e+yLNeXAvHFTy/xYLyQmpBUZBm1RdQWBsUeTFLGtzBaHKJLeFSEKnwLKPS637AtBFdtze7KAabdSJCTT5CZL2uCkQYraiy7OLldAal06lExLw17kkQTBlM+t2s5CA63A6z8/451nFk6zFDghUxrSF7DsHuxh6TWa2uDQ5xuR1rIognkmZkbtpPUolsIVevug4g6kucm9q7p85i+kaiRcZn5uwfQCcdIGGNVLWtYkzH61DCb5XpkP48aWY6ByhNExj7kkuunW3Qj0/ewklY70vTHCsoj02GqeutUU0zXKElKdFafdbNBY/tKiJWlNkYERVGZwVwLzgzvXYsg5l8N30YQHFdEv5OWFo2PUJhgvOw4egPTCBXcGprhiqLf967vniLuIByXfe7zoBWuV9m3DjRBPkOkBzvfQ3RebclG0eSx/ra62GM4G1nzGp9yyWcQdAvUwFtPCCquSJ6pQxj1t21sc2GIrrV4Ygsl/GAVFqhcgAil5ilWVXl1SlpB6S1oRDsSqpUNMscW/JA9h+QXHvKddH72qfUnaT2O0Q+5tq2Y4mbVGh/Y6kCMsXGBorZr+t67XZ6W6tlhBZXtGe01ZNS7qojNANOhzriagHMnbcZrcU4bDYno4qW1Ti0qAuVFWtIjb+qgw3Wgkp0SzEqGP2IJE9uiBrZ/5p2XVS6NjqufU5zUDkXKmItNiu/BDVf4KuvInWDjaSK98WowzQQncRl8ULEkSLE3XD0Fw0wKZHKnohtbPS0esV3Fu3BLwOn1qNxXPu0hQP7w6OREr719NbBsb6DU1rNFhjTvMmO6KBprPUU1q7DujN1tb0M0pDyWT0TLgch64C0JZ9yAJoohO35rAMwtAHZlsE7ZK6iIPoleA4fSWsJrKVSrfvqbUa0JYHT1P+9r+ipgvciIsNV72w/umywvGk3X/oZgn5LEakz7Na4rXRojRRAat6FTNiq+Wzg/ejQHSIz4TETzlUhSDpJOL+hA+vmvIEnOENHGtifoHbCESKQ22yLNRhVAwcKyBKn5gQ2OJ2dURZV7UnxkuCUiIGFEF5SCSUQ7McltDoRKC2Im2EjgSsD88h+VL1soB3BOpGVDZr2LYD48gQGYZRRmwlB/fm0+e0ubPpJGcTq9Eu/xzJ2bAJFWKiS9fZcn4lPTO5VPzYx7x6YSzw+wWuXmTrJaCMCpOYCsAHDPpdAp0nf4Weq9aklT0dB7zv4yPU0NxkXPYjuIB28ncawm3RXoTE3h97UC7LCFDikdFdYG2HkTArp1YWJekldYLXr81fVeZltFKklroUZrxDT5u4S3NulRKhuD2Kzs10uw7yAK1+zPS/UJMUKb5uioe7g6gpEatMfQwe/8JwbIcaVUdP0l5qK/cd0wGGENJt1KsvV2QPnXjCEGU839xGeKyLq6+0v8JBRliNMWvUZbdBCqB0YBPuYULW0pdpctgRs9Z3g2IbASUJyFTJ8kvFAB2q5iPpdUGmvd2lC2QJ7t7uX8EPL5a552H23W0KMr+Og8iApmRV7lWps6/FgBwLwB5WFrfUQDgnbKVfgyrZ+lmgNff5dNKiWnJZMe6ewtVqsKzB7OOJiLSCPYNaORuiIcUUTov/mR82M0NEaC0bZ4ghFinYfJYIqmuDs6HPXlS0xukaqPqrDMZkG/4XH/pfzGOR5FYdxo8XZzGL4wmn/yzjNHeRU+qf45VX/us2Xl1dlwoMctx3rtL0RYQvVfp3kBg7UFdF1N82dNA07dHKSkNKPVdG7a1KPVTQerGLmObHiDLSm7OHZ4fH/RFnK1xJtxe9M6JjCuh8JZaWWiDLbIhGoIu1O3t3r8lNlC/FoPZmWHaI7Mm7joXUHoIV58SvWEOXMi8Vze8j6i7RtVlbsb2khEHNR7Uml7dtfVdgEX5Q0tdRKYxFq2mC2idP1L9SRrEF2aQ7/nkg3u6lHLzXLvC01a9svMWoXhTHQv8OGavpvUXCQcGCLtewAt5n00HqfO2xqG58HtSp2uOPq7oHX3ahw65VWCyPceY+3T9eu7i6b7rnujUPhcqnG0W8DXvnSna4VyZfudF+6033pTteK6Ut3uh0Qf+lO96U73W5eieHt6e6gvfR1dTdYRaW2OQUAe6uiu5tDwCKHSsk9jO9Dj90aUtvGbrEfeOwW+daxb1VGdx6+H8XQ5stsNe7iWMtc0xfProcT5CxaIMzgjtPVZhfuPBUB5vfvXrb2m9ligezhGiw9EV2eOSw5m+RL0VYRdz9eMPCRgR8nAXK37sALBp5ar3ZmznkGKH+PDXhKURyLVkYHjlhG/4813vnSWqZva5m7XTeDJLLH0CDtbm86NIotVHzWVjs3eH7jh8v8Vf+75aoNnlVtXWO3ag4c2j9WZs+mpobYjC8g7LG3HqroikiFVwOFrCuECp9WoWkOfVzMx1oyV+Usfnry7nW9cla/61QD+HNHCqBALMZKx+11rF6UN/FeNQDbKlTPf1v/adzoDLLr4KEGPAAcRAJ0ST3U4Y7QNTRdpayD33qcppFpQYcRPLVZMj1iu+YJbeVW1LVoPclC6JVNcM+xqJpLaurayZkXWbszah9aoEtkkWVueuqr6YQ1nWHmS2vzQ4u4Ng+7gxtLiOhfVmAftNDxX82cbS92XC8vsCfeC5sPDWA1NxpCWu3Wejdfg9oU6689Mj9OQuIsQ2V8IRWWfo8991MLU7nH3WzlwUUHZyxL6EuP0HAa9ml97oY3xHd12DO1tNeg1zQ7zrHQxpneGDFEXcrEnlZrqUo48Wjxj1xilzBWPeQkveSLR/8wr7dsmVJxPCCJBibiwh4x67IlWq0TXleh+QMtXDwfXxSMmWQbjcojUM/uFvIyvpjAOPrv9i003pCN7cKfFcSEiy9MMaOS9kiwRSn0GiVTB2+4JogvO+vLzvrkO6t9Vw2n7h1eo7RY5W4t3WVjBEl5kw6esQM7Gv1SUQZBF27V7C65D8fYbnUV7nN0yfJCyRF6Dr1G5Qi9KZT+RfPUBU9J0ta6gvObCWWxMqO7O6KfQUVeqDIC/UpsrLlzUfaJ1nR0McwaEQR3RhYg66LKLmeOBW6JZh3O0Vemy1bZJt8jKeFsThe2L9p2gibRQ2q/8+v430LKApLAmeyqHRlSIgda11+sarzibMHTmacZ21/6x6G/0h88/fP2WPQKFxoSjx6qrx62RkB6fY32PMQjF79tFMSo2JISsY057TfVARo7vEs/2mXwc5uI63ZUbaHoecESmwKfYEUWXNDfbBOHLcRdvHn16snrpwNJZI0d3UPxIR/VVnIoowqz1NQZHERUDGwfJcP6YDrdV54Uc3tzI3/NvJ35anP1t5f996VGBZ+EO1MuuVATI03OkRJFm3Xr0KNdk0daCEAdO/bwoRohIcMjNj6lp9yoeBMaVyiHH7tPINrcjPzb8XfjM6t4u1oCRqOk6Rg958K+Z0MJJMoF5ZBO733ZwAAzB3u1tDhcNUPacu2/5TrAJm11DLTb1Pjc9wEHNCK38LLGMIiVC9ldwDA+UINMf2tqmyTQxiatmj60RLzw7u7PcWT6K9em3Nk5HajdKtCW0JdGeEGfIIZGv/QDEGKSFrRAGB+6L2FVWaCiRuvwo716E2Y8ubkTevGKFzYFKaR5jSm07be2gSZAS58ZqcIqxhpCA6rRkqnca7yCryWkNR1I9IaZPxp6VQXIqu0dmweo0UKRMnKowyBCkUww60dQ2ym4DzFQ17I6IxW+IayScdOrZ9fV02kXcc2Unn6xe2V7kxbhcciZ98p6Xj4tmdxit/oeW1D20dP3Xut/D9P34JMd9T2HHu2j70UIQB363t1kDFeE7JA3/C+U4BiXHS6ubaINnCj57RlKjKg1FzfjORdrLFKS1sN17zb97G5S5X6H2Y2dmRp3mbn26fLv7jyVsD1NrptR2pJl2jnyS0JeK5IvCXlfEvK+JOS1YuolY75k5rUg/pKZ9yUzbx/tf7i398BBEKbHkLnBuUfGi7EhaYRc+an7LbedB7M935beWMIUnVMi0L23l09b8KoD2rzWt+zQtkVMlyU2D4b6wuugsQX94d3CxO8q5Qx7Lp2Lwpn2b2TZVzUC1BrV5GPOhar8M1MLZ9qdnFBhQ/sHJQoii2x7idfOLbpaceY2aH1MBj4ybaAlUX036uGT1/wUKOtFXWJVlWkyVycQ7BJnJpxEjo49iHrOBaIsEVBeG2dQrniEVljcQJiSWtqav1VJKZymDXchMqWdVvyWpGN0qVCCGZoR6O3G5+gIvjkaoSP7ztFIf3AkGc7lkquW+nhLLtWk2l2HXQlPVjl5DvcCQUUty+XGCkRUujipZlj7ay5WOMs2JaBmnlJp7TH6EbzeBxJF70MXp+Uu4CHfPY8kZYmNOst5shyj99K6whO+ygvl3HvT//A8ognPilXLfUOCM8JSLKKDKXZeHRsxI4hNiyyv/02ASpa5Fkd0RcAHb7xidr/bJSv9nTmXaiFIeMn91vw4+Ka7+m5H92dADdo9QCUk5K5jVOr+17ZpcH9+N1fddEV+493l/dtR/WalV4n209yn++pUXH40b1irq22crigbdLHtQh0bYEtXElZ41kwjr3CuNiaSazDKKOR+V/jPn1w/eXnoC/w0FovXdRVZ0fPwZHwyiJynLsiOzxEeevFU4b169vLZxTX6A3r+7s0rWEP5x0F0/A0OuLLDxmeuVCtIGtSqfaf/3SKj4Vl37owDhz57RpYhtpSWPYXl4Uy0ay9o5vKpO00NVbFmitUl8aGD4TXEEL+rqjpGF4HaOF1hqYiYjtBUZviW6L8kS5qlU3RPn8zvnj5/8OTNc7QWprsFPLs/iummU61IUEayaf94oUPlJTSGBakiejC3RMy4hHGZAtNT0Iuntqh0C613shkbUA8YYnTlYoigqLZp/nmrVU99ihsWuKUYYXcxGPRdrsB0Nl1aDak90+sqfbXCLEUEgsrb6ue6A2N8sPrLP8JUsQWiCgJsoOu4ocHqv4YuiLJPRHc8+0GlRyU1Og6rG3LAkuwa6w3ZhCaZmwBtinYvDhaHzGaFsCKxKPQhKU1rrThRCc4yTZI90eRGKrLyjrQr+KG/3WEA7GhvxIqBxiYhJbGx/2g/dAsP0KqK7NbOt4GZpqj/1CGb2lAk6O0MJqoZiByZHkJFllWs8muBM22Lpyjl0BJDQwBZiI3LRNrWAaVLBy7jbXUslnqaa0oSmhLXzt2EbSmu37eUlxciWoCNyy0SmxVBfi2oIOk5muOsVFNbGKXaHwZyDNuWVRiEz09RimEsGQ/tE2oT4z7UFWtTBBWV908ipqz4CFCrTIBDRFZvu8P/pnKCfBMFfGfVeXPBFwKvBsINOiBHwbYcBttB1r/so4e0Q+3KDo1YtsODcqKQpaxfyg+9++yM8+lTW2RJ0NXVj8DKWhe11cts7bqainiUYym1YDgCP2lezDKa3JDNUd3xWI6PLhhWhWhep/UirPy81mjcINZSqg1xKnieNyO4qhmOPOhFUlVtEmSBnjq/wT24zbU6yXPCTG+G1YqkFCuSbRxVLUFs3amr3fePhuuMgz7qi2+NCu8DNx645rsPG4UlB4ANvm7BEAsT6Nos7aECA4IFtl35Dg8YGBQysBP6rVB7BA7sgLgDWr/wgR1wdgPsE0Swywx3gOsfSrD7aBtA4+dKkfLeB8u2qzij+lhVNwHL7xasDZcJ4q5oNdapMzr61adqC4Ywf0p/ImSfvH5zDfdGRcqbbYB7iu/gilpDS7A0FqwGWxpMc0yzZsHKUnlrNPjqif36+j+9lJoAI20zGz0pu97xfE9s5aGUCpIoLjZ7EBHRhbx1Epw3D4JeNCosFkTZNCPu2bB1AuWaqmQZuez08ntXsRKk/aaq5l8BD5AmYUvguaYbp3FV9k73nEW847Zb8ogg6/TLu1Q1qGSQpd41NSNro/a26YJLEimt1gNZSua4yJQB0IGuBW9UWG9XTuJh9d6KNwyX3lAbX5Zazk4wax6DtkBL/dZnYVGHeUce3XH9Gp6NxoQcZrI9v8Zdpbwa0J7P44uboQb3X87NYL2wSmAypzeeG/ba/DIs/sN+tL0KSYUP7eN9i+JDnyXVzZGyQ7LbHfSjuOjXi6LzQn/4NYh/Z+86qEtpYuNaYr06c812vogA7Q0c41CiZ70kDM2wpEndvURlpCJ8QNxdxNddmiIN755foNNHpw9trJ3ahN6llt3+pY/EkCy9O2zp8bl7WPwL5ciivimJ+3bdMKBb7jtbEwgPVt4R5I4JhjW9McfRBhZR29V81tbVgnHldbbgAn7YIrqGZUwOGbEd7vtquKZ9x6FGG/Tw2Klnx5b8zoP26siXG0kTnFmk7TW9ZwXNYjgPRBOAd0RVrNhR8rwzPzEiOwYQA7CdAB1EVGcm455Eadi7ENWd/br3ygH4XehqcQBvI6sqCrcUMc/LTtugD70d2bcH3ZI8J8JUnTHGahdFW9J072AbDKPuU++HQdTtyIB3u6TbUodb2idQlpKPYWzJQJrfuHK8niJgQmxmZM4FKY3l2QZRtiBSHes3j82b9RKiaOf05L5n+Zc2XQNmDX1p09V3ir606eqg43fbpitOCZjhE+DiAxq5XhE0g0FG0c8FZ4qwtN1HtFtEt7+HHQ4QOnFLGyc3mog2J8cWGqIUFKIsyG/B28tQ5/ig4Fs0BaC++r8BAAD///neQSI=" + return "eJzsvX2T2zaSMP5/PgVqUvWLvT+NPDN2nGS29u6845fMrt/WM948d05KgkhIwg4FMAA4snK33/0pNAASIEGKlDR29jl7qza2SHY3gEaju9Evx+iGbM4RSeRXCCmqMnKOnl1cfYVQSmQiaK4oZ+fo375CCOkHaE5JlsrxV8j+7RyewP8dI4ZX5BzhBWEKfilBPvF+Wghe5OfozP4zgkf/uV4SA8jiQQlnClOG1JKgFCuM8IwXCv4J7z1IMqr/I5c0z4lAaolVCS0RBCuSwtvkljA1to/mnCvGFfFRP/uIV3lG5Dm6NOgSLAnic/RngpVEcy5QxhdyVOEe64EjKtGcZmRGsBqj51ygJ29fjRBV+oFakhK+GZYoGKNsgeyQcJ4/kETc0oSMvcFTNudihfXsoJQTiRhXKFlitiCIzkuQMCFUIqm/UUvBi8US/VqQQmOQG6nISqKM3hD0Vzy/wSP0jqRUjhAXKBc8IVJ6L5ZQZZEsEZboJV9IheUSmTGhKyJuiXBTqDY5OTer6ibV4wyfMW6JkJSz8nf37Q3ZrLlIvd9bmEL/+bsBotejmv+KCc0fYpbwHD0en4xPjkVy1iBGo96Pktd60fuR4fiiQcWSS6X/th8lP1ooNWoa2Gi6H573jP5aEERTwhSdUyIMQiott96jc8QZQeQjlUreb8xHubfOYX+Y/QTfr3mRpWhGEOwemo5js/g9fjT/9uQkbYyL5EuyIgJnk31H+MxB2meQ1/plmiKmt26WbeyGlQgngkuJBJEKCyVHaFYoNDWrRdNpucO7Rj9vCtwZliSUt3+ufrHi9nS7uNVgkCTKiVqJcJY58bteUi0MBEHcCCzFc5SRW5KBuJLEvahfSfhqxZkbroail0LqiQTpK4fLjqP/UHSl522VHzWWOMXK30GC/FpQQdJzpEThP8iXWJJz9DA2vUdnJ6ePj0++PT57eH3y/fnJt+cPH42///bhfx3145ynWJEHmka0XhJWnTSIC7qgTB8/EVZ5bg4TOy2GzcxxAYOKAlxjiRaEEaFhjhBmaQBSnxDwBTWvCoJjmN/ZSTIzDqeaXih/fZoyEy9kj/1VzemHn49ywdMi0TP289EI/XxE2O3Zz0e/9JzVl1QqzTYWiUSF1Mc416QggpOlf5w36M3wjGRNivnsHyRRMYL/+4ZsTs/RLc4KcjrSWM/sv87+2Y/gv5LNA/gA5ZiK+kTqPxeYaUHnBoLTFK2IPr69o15xtxDoagmiEc59qwIxIhUJF90MSY7RkywzBJudKBXXa4ylm8EumTxNeXJDxFSzFJrefC+ndgZbpndFpMSL5tmlyEfV3HWnUQ75kWQZRz9xkaU9WaKxZYgjxLJyKb70I/2mfRwZ+iVDXC2J0KsBal4UXrhgCWcJVoSFMgehlM7nROgNaue/EplKb8e5ICTbIEmwSJZ4lpExupyjVZEpmmchKItfmjMGFM2NIyPhqxllJEWUKQ4HUXN4boGSjBdpeDJceD/108SfG7kuSGZUaG50Yg1HK4SUzQWWShSJKsxQ7cpU+q45EbSGORd81VP1nqNXRAmaaIVAi0SnL+tzhaFnF2egOwGrzolKlkQaLVijQNRDr18beTTrfRbySGBOUIlWOFlSZtanIqIEKAomgQwkyIor4t5HvFCSpsTDFacOI6vp+yB9YwA+NjTXWNqArUABt1r0vo1hEYQTN/zUzQW/pSkRsa1LPKV6b/3ZjMuhGztG8EUZSc5GaJEQbbXUNt6CKpzxhGDWIqnwLaYZntGMqs3kN85IbECFPCZYquPTZL9xPfGQIY1ML6sRBsBewLfVwrSQLMiin63UpL8fme8AwU60USYVZgkZ91K3SwLp8enZw0ffPv7u+x9O8CxJyfykH6mXFh+6fOoYBgh1G3ULlfsbWCUBvpXVgwT3tKexWc6UOhuvSEqLVT/yXjkJsMmHUIeThBdgegyh7fHjx999993333//ww8/9CPvupKHBqM+N7hYYEZ/M/oOTcvj1dpdm+o8DWDph4oSqfkWm9PzWB/GTCHCbqngbBWzxP2j5clPVyUhNB2hF5wvMmJORvTm3Qt0mYJnxGoGYPMGoCrTMHbmGlFdykx37tZ+7nf2ll/51hXMlNbXG2pj5RKTOUnonCYNchA4xpyNIXkhEmAZD0zNoFuSLEcJF0YBMGePNhUr5ihxSHu+sY0WINp2GX7k2A/326/vDBC0wgwv9OEHwq2kM2pfG+W3KUUO4zMpcSPfuVEiWWkFbn855R+pANMcriVubQ/OCpopTxuoU6HwYj8iKqa1JOBFE9f+Y63QaFhNDH2NP/PDZJdTAYbXMJEcASmRShv+1TFuZcHTxoN+0sD7zm1O8+aMoJQoTDPpiQAPvWYJXILJcXJD1IPAD95/f9K8MaXBT13z9VZbu4JI6XjUo7HdUtYalJZ21lJCl29vH+kfLt/ePnYAiYy4O3MuVIPYjLNFP3LfcqGihMaO+f14+dWTi86paWBM+QrTPtphxPjucmJ5PGNQRHAvCG8g9jmnjiPA8ILwjCeWh7locoD5U+e+8HyljDA1qYmQ9jnoHHLNDnHQvXH7uAumxGZCJZ8kPD0I9gsDE11evUEaZhSxm7IIwgXhk5zTmprUifIlZwuqipSAfZphBf+IIjZWyMGm2tocRmDHJljbZ4dCdqHtr1ZUdmSHXEo7utpKVseBZ/KXJ4H3W99DAAz7uj6ouLOetSCh+iuctSiHASVtCiGoEKFSCCqUvafBaE4FWeMsGyFG1JqLGwt3hIhKhp8rdyNDg4He0REGd7YNJHdzs9eG7ZawNHCLRD2xnZIf2MrACRY+gusA17glPoDVRCKJoDibsGI1I81x7YLKQEQGYhOhthd+44yM+XwuiRpL0uTH/rrDtYWGDLTAKKcMSZJwlsZuB14Defp9+45xvNJborf4++sL8EpqWBYylej45PT84Ung/9N/zDXEmmaZ3rDH3z46OYkaPvCkOR97349rs9/3SBjerTyuIE5qbuE6AAEuTKaFG0nJHBzfmb0TcvA2OZFjdMVXxI0J5GIAakpYCqfkdISmTnLpv9NUwn9y+E8u+MfNNDpL7qOmnk+E4DVr/5n3U+94l8rkTjBDguSCQDwHwAd5ow3rG8rSMXovYSJXoEPZF4KIlyXOcwKuvYwYF7SeaHtnAjvc3nesYZKr20WqJMnm3h0wM/CD9RlgLhw85ECPGMhtUDX4ZqorEEBDb7k5qtTBdM8tYrBoOM6SM86K5uhKZrttBFc9u90luMqsdsytpJeefFRtygNsXWCSHYzHw3DD5VMtDEvbtxHVhTqjRiJGUbmiWJEFF5s9VxWm1sFqCxCx93lYT7y2g4xwC7+qDWUFl1Eyzo37C+wnRlwv6C1h5p6PSpA3ZeCGvSrwb0Q1x8DSN68LyqGCCLexMG6gsw2smx58dKxsQdnHY6mwksed48aJ2lsbgYA7gIMSnKtCVAQaxgoOM/smnKy3WGzg/ArgmUg6PYf2b7MCTuqM3pBsA25ulmRggQEsqbFJkhRC2yz28k6OQpg2Gm+W8eQGLvQE+rXAAmuLlbLFH/XDNcky/d8VF8QEidCkxKEhBCCxRBlfUGbPhRHEqSH6gNvAwI8bvbxrLNLq8Iif01bZ2GWhBSkdck05ztMiO6BP1MAzjN1XB9H860nC8AsPqo1NoczGtXFRBk7GN/NG/prFh61Jk6Tpu9p53BZgy9olnCUkB50Ko6l9d4ruaW7QKuYDJ3iIuq/HH44TS8+3aBh1ZlVeOzFjdKnCG3d/Qo1I0dNaCEGYyjYhNBPBQllFhAm3xSz1frIrywWyVI9Dr7A38SBT4hMvyS3RW3Cb5t8Z0vJdz0CWK4usPMisCe5+tmtnBdBP2kqHtYzei5Vf2RvzFcEM5PQtEd5dGpoRtSaEVQEvenG+kajIkeIBRHOHkGdkRZgiQgutFb4hSBaiJJISF/DHJJVKI7BBf51xZDYkLuvB4JGZ/hq91+yjCoYVSFO9Re30GwmkkFzyNTO3VonKNmhDlGbU/0EpNwFyXNwEIClDCs/0LtYiNHh0KdH/9/Xp2aM/OidJqZqXzvX/gWA7Lm40IbCXQJGqFOwAoHHY0ORGRvnz6Irk6PQHdPL9+dnj89MTYzVePHt+fmLouLIHhflXsGh62QTBCi6+iDBvnI7th6cnJ9Fv1lys9OmQECnnhRbeUvE8J6n7zPxXiuRPpydj/b/TGoRUqj+djU/HZ+Mzmas/nZ49POu5CxB6h9egmJdhV1rbYIqKkvffWw9XSlacSSWwMoFdlCmy0DMREWxWdJv4GcsVlKXkIzFhOSlPJl50SUqlXv7UyCrM9OszUoNoYrdIagJ3qXKKkNBiiNxqbUifCdOJcaMFhiTgPkdznEkfbEWG/6yxY5ZYLnfbLRVbVcEXsb89+fPF095L9iOWS3QvJ2KJc9AhTH7AnLIFEbmgTN3Xqyjw2i6A4qDrzvThy+u803NVh/ufWgOBt6iCFkMsntA9wsxZUFxAYgxO9T6XSPE2LcJAk0vnQrX+WojOzLG5a6pCWkt5SxXKuZR0VgsShP2gSAJvmkNU09EgcEb04RXT28zuch9QCRFtQVQwnLGFVCYQEWIuqhhhdBm7c5iVkY8+NZV/Ycs8EacGII+uk/HpOO67gictSlQh6ncmQ714Ty2I4CjWs8Aw43EfXmlJmoyjBvJaqHoHcrM6LnOpHrAYjQq3L7cxYBlBr+c0pVJRligjsv7De8bMjYD3k0Pe0A9s8hAcZ/blsQvQBVIlQWrNq6el2RvXYrAZX40YIxYyyozSVxs4NSHuxhNm+CKAOdug5zb9BiQ9HATgTkpwNkbTapxTw+t+pln5LFyaj0rgRDl571M4qq1bSWw5BOqH5PuML7VWay5YcJ4bMzHHyY0+Eo1Vqq0O46+LLE7D/1u9EqHX3dk4BHpi45Q3mXILr10a16KZv3Dx9fyXcz/yR1GJRa0dtcVEUnkzkQkXTZNwnnHc07X3jsobBFCMmUt5Q91G98h4MfYscp4VYEPfD5ftvSRowwthzfxvZKnaWoNYL9bWwUy0zbzPiF6DzU1/IylA3TK4kQlelgnOQNc60Yx26i4Hot6bFaYs2+ilmRcZonM9aDAhwM+glphBlIZze2jxgaWki5rIqIiTkLcCYNbYHHaSEISt+wCGYmbQSyKy+YkRr6i2+SymmgfU+kifVy+0hrlnpf/d3aSGQTVwNmtMff2eZRwKVpXyFnFEBxS9xWrpgux9ZMgEwExa4+bwej9/QQNxufp6VdgxZjjb/FaqBu7W2PBEAAlyiRYLQRZweoZHZJVLJBZETQbNzTV8A/MJSORmlVHmm1HxOWqbpZ1v+g83Vz1ni3xUhAVab5zyVqqBvUsoja0O5FsZjLOMrxHBcqPHpggcO7ONcQ6WILxJL7Wx3CpW9aX2PdM96AZawdkKLqgRSqmAiFy73vejU1SPatiO56m7kGyLf6j2Xw0XZf7VTw9Ul/qDynHgbnmMv5WVfzcSLoqy8O5OBq79tXW/osun6N77y6f3YS7d2eZdrd27gofV4BFfMyKi9MCTwasKX30DO0FUDroa6MWwob4VdIXFxghiGOOL2jDiWIKQtcF4/KiMVhyr7WxSmTKPH53EEb/SvOOvCmWIJwpnNU9UlARJf6uTEBhAzTXSX2gUs40iUm9B60HhWgXAaep0w6mGNkU0POOnmsJpfIuugsjuiEEUEPMSSwXKoxk0XEta5XPFU82xaRRLsg+WFVEYbgZMznYaUTaq+EerXLwof+h3/fqCcP+mP8FCbPwkNFyF75exkl76nbPsS3hcaJoCpzocKgxdvjWIht/UtoZZ7pvoVQVYNlG2RlfuFB5ej6us44sEVbaHVHblKLeEU9bxxWMpd8lu8KMoG7MYCaHcZfqq4ElU3wBLLmshCD9Wv/TbAvqDurbt86/P7oBvjJ4YP7i7Ni9B5cuN1OakS3YaIYxuqVCF/5PeDugpZHjU00BKQK/dzaUXqRXc+9VSYMu0zyqDjtR2ZpCq/yDhWUYS5fzHflYvXAmUPpFso20sRkhKdti6/+si2bq83lVwW2Oe9t8kwJiu9o+blXqKYMxDYtjYOZrWWgGdum+nSBBVCJNj/J7Rj87utQnBRVa7If21wBmchjZkHwZmWR6IsadJ7S7e+JwIC9N79XgTmpZOXDP1iutvWue8MbW94nyGpSbY0B/DdzG30xNZTb+978HZGm+kTeEbgcPCXvkYF4UgcE9K2aJullFm/Dq9cgrPA7914e6wplDLBpY0kmu1ewwyyE6au0Dk9tTT/Zj7R5tAugXPAeJEbVhNy2Z5zoXNzXTp4bZOihWdQQq8BgV1rqZlCu00dNldztHtauQSAq3PMciSG/muZC8T1DsNAogVC7WzjfkT3zRfoze5PiG0UXhlPGgxVKXhJcd5htU85jMcNO8VVuu3c2DRvYQwxeUIFbOCqWKE1pSlfC1NaP/9mJxNsVjbhKQYxT1lbXVZ+Qon6M0V+j89ryQbY2kYlwE5c7yiWZ8ov4qglMwoZn3JuUIGBbonSLrEaoTM9yMoAzKTaXROY6T2v+30bnpPxqdn48e7zl0QlN+gCYtkSRWBch+DqPr4/ePJ40e7EuWjjemkSuU1nfT6+u0gnbRZ6ESDgCtRIpUE7V4QmXMG6Yb+sHslNhs44xVRS75nHOyPSuUOIDIAo9ejL55dj9DbN1f6/99fR0gyoxlLhVUh41ZXf1XRUmVgIgOzZnt5tD06edRO0Iynze3ZP3r72ipKwBYVSRpqlBZThWjNRdYsLneQdBeYmkayi0fB6fi0ydQZX4Q8/bL8oZuHq9JDpSdBca9q0nDuhVJv+83BS74wYJx2XNITOfUb6Rxo+tOTd6+nIzR99u6d/s/l6+dv4qkaz969a0rSvULO2mOzMp7gDJTSVxs9IF+8DQr5aZ2+GmNXBeLKq0avxhUIqSBWALaB90YAbkbmHJgkowqELVWogFv3Mts6xyIa9Htp7BcB7jNjEE8tiqm99qiCxZ2lg5l3F60hByA9trCQrJ4WicNxgx81BjiOmVpLfEsQzgTB6QZJzVvGhWg8QBIu3CnkFt0QRFjCUxthzUh4YZRRRiQUfrq15cAyghmET26tNrZTQBqS3EaafdOISPu1IALMOpubYYy1XkFpgZyxwQChrHkd/LjrEVrmhmKFh0udqNrY/xgAx6NJZ5htEAeVAjKlOJLEBsUbpqPCURo/R+Gg/YnOqfe07a6x/bax675xy43jPoNpTGsuuOIJ31Oev3YhJBYaao249pQz776OCnKA1I2nDowTH47jlMDzOU0i+/AdSfhqRVjqggxgx53XZvwPiLIZL1h9mf6AeKHiDwp2w/iaxabAh9WYCptkQdLJvm4BLz+5jDyyd5reI3uAQIZHXBv54Wx8Oj4dn4X0fm3L4cnGCOzwxnBntIcK6XjKwjN3UHESv2+qj44KU+HkkHRYiHFKmsWlHYccbD4cwIETUtJxuBkpKRk4JYornB1sPgCanQzjyCxWpoyVN+/o/68tRJTWh4+/byH2DictRrN95lPdpKAk++xR8xz3a6qFh/mb5pP+qaJBqTZ7aUOY0Mod3FquqVq2ZIsmfJVjttGaFFRuq4w6Pw0cS8kTaqIOqVrGCpBteIGwEFD43iT5KCIMgCpDCDOjUcEBGVYNKvH6g9nBDtpTI/HXoctHdXdp0/74xyH3yBrP1LySg/nmzVW9eUOcSXjN1zP2oYSVxflcmeQlvd5QbNX4ZnNB5vQjkaMyTRLuU8Zcjv8w1XwwLSQRE1NqHX4cvvR37nUF0ltcr/fjNesqr+tWJv003lafjE/oZXWrvs3ben+fciYNB+uxSPqmObU5WSF9EhJlpBJlCrVP3w0RrJfrpSLv0fjR+OT49PTs2KYA70qkwd1NayBDbEJAKEjeBj/uUg+jVXxgh7FFZoDt786PqoilzRsN81D1KVbCQzR9EGwjW7nZt/CNlJs6CnKaTq2AkgpvpAvsM8hcYQ1t6nshUwnPaRVSsMj4DGdeSX5Hct0d319qYdGrZn9XYLCdESwWxaolBfwV3qAZscdyWY4KspMkYZLCtX+0qpDHtx+OjrOjETrSolr/1+UaPj76ZVcR12NYkVMYWQckpCegBGcZgdvHhcArG/gnkKQrmuF4Trv0svXKrRE50wcUIyzZMkTYge8wCHMMt9qNK/cq2kTtm6HvUAGolqwwvcng+chuMeUyZrAs92xLvFJYbd0Kpavgx/5KjausXi/AqfxnUN/YiIwqNMjoytjf+zYeqE3hnVOWWo+uk1yQWAXRfaVrv4Tn0OsvYnd4n7Nqj3XOuGL0rtVVbLFN8xwbjG5iN7JNVRcaPMJeqyxIT7khsitRsjZ/XukAs1bMuyhpJ60M97icW3uEIPIxJ4ISloD3XEpo/KBPEg1TkBSqR5ji4SP9UQBQn07WkuE2646mLhfGEQhBhW7V4R1J2QKigG198zqllXr48DvyLZnNyQkmj5NHP3x3ls7ID/OT0+8e4dPHD7+bzb4/e/Td/LH3bXdcT0+p23mDQjIsFU1MLnVPxcSPIHVcXtXvsLuoo4yYEdq1Rh4mjjuyvQL20Hs4bBiAerIIwDJlus1CQqEEn1jXhm3qAJr4L9cMK4A8BWaa7heFMyzkyopIgNaCV6own/UwiC9sKBVAr637Pgp8J18+HJ+N+0Yn1JrQOZb0pXwfvqTSJNtIczvLbxDWKq3xahBlIu5DYV/q4kFJZ1RnSn9+PlF3NDcJB++P5gbWv0NaePqD+7t2+Pu/tQzYvNOj0HaYM2QvtHseuZFwQLgiP0dBlmvjJqB1kZoFSg15QQ3c3QprR8tqt1PbnmXi0+sX2a5RGotkbEfXOxsqUie2BXGtyPYBcFueqpXWjhXWbjJOa1HtekltNxr3/DOmeERw3m2ORwPhXSd5NBDeTZZHcyIPnubRNpLDLFV3bexCZKGAfv/uZbd0fv/uZT1/BMNtQ0YU0U9HRg2XiT6yRrYLGIYrGHvD4CFxXSCq2AlX46zbvVyIbPyHqd51JSB7Go3RXwkxQSFVczSvTNZ6SRi5JaLMpK8GtKPNNiDCqWOdnhdZppfDzFAZrNKnj+BUf7YUZD41idAf4GAxMH65t1Qql+cPHqzX67E1AcYJf7AoaEoeEPYgABXYCA8EgbSYhDx4PD4LXzQNgOy8LdUq+3rih2VMNA9M3AE3sWnZQt43w7MmRKhG1Ufqj0vzjyJSxcc9dmnf05pBTxhUPtJLrbi2gRGG2J0NwguszbjWWKhCZEgqmmW2ulgVqWUjjjTbaLNR608mjzG2MtWqMFTLTZfG85hjYTi+coi6TKvElHgJbWrbY3oajlvvGBOUJAOFI4gE0VxQccD5o0cPH5iF/vdf/xQs/NeKN8NGzIbej8mvAEbpkzBxtNXePgIqj2I5TdCvELy+51MXxOVqN8FeB8itQTDNwIm7KRPfHFI14UfBykAgHwTEmWp1GDhqhTcIdp3NN9VaJUsfcAHKnw3dyTZGxoIfPgDp5SGNTRN1SNeQxKQw+UEqYOoueBlCWGVBBYmrwUxWY2lMZ7TlCxQUC7KcupyRnkLamMZHjx7GY5kfPWyS4le2GH5TDCUmWpfT7pgjn5pPHI+m+cScpU8G17xoq3rhEwsCco8J1LvUCFlDUFhl0zwx91j1aQ7PAzflNeEUEw8gGP4dBAP5CPV9vYpLPkZIfTRbLVpbi3ENB3ZLWQHfG4vLnDTPMODUprJ7a1ST1eFEGMPc3ncxRFa5quiCIZg3pgEUA6HmQiszVilWpKwt6go/mfqin5dDDdlaRN8Vn84FXqzCQma73IFw4Qcx6nMfz6Hsql6Qr6fe3lc8b2W+r6OnkiOxSbyrw7Ef8e8tlNpGaqLLsZQ1sDtVKjJQoui+qg+vZljIgS0Yy+IpdUdQPJYFXnU8JUhGbrHHGoojv6bvc++SGt8ahwwBi9Z3y+hfKBTq9V1+gGjpSn2XJbhoOqoMIgYhUxtLj6k4bkpp8XlF07KKuPl0N0Rvar6non5jVDpnwsLhh7v/9V0WFY7GlipNIOzAGzMSstFNlVik+A1h9DcS6exIVpjumHSyZcMZ0GF2LjpIydjtF3uO+Zbh5VqjAol5ESLzONusoKybfiUy1+/L2nIQqgXeXhe3Ze9FXBhIwtncMEq9xVUtJrus41svKujLBxMU1pQSyP99mKwwIJ3EqNzcWs22cSQzwdcaiZNd+tuNudouwcklX9t0nDWZlQ52uFeq16C39ltREl6LJzqAH6G/6vWeWXJuw3sSLwavgbZWvmvvLV2WBWlvmXWAvL7aRdBWpCv8j0ibrv5RGa/097FpRS3TuqJsP4T6+yEIc6ySPnKn2/RJlkNwDo13vFgKvupZhrd+TLTR0D/JvSey9qjYnbLD+zNxL8R3wsj9MN8FRzcxf4XQ1+iarHIuoMUL/QgxA0Sh78YnKMVyOeNYpBIcc1bQfm3DUQqp0IK7+D+SyPFmBW1ZwJu8ppKAF1GilLNvTOOAMBS7rBwSSG+c0TJ6SFve55YX4fK/+X3NtdQNo3z5q6+ONfcYGF+VJ+Kfzb8i83rh0jITvlpxBt+VIdu3mGbg+/RLhwMpoLH4Z1BAu6thtP28dW+a6F9VCK/nTH1Vw1JNeki+99fGJtWuJo6qIsVHwUx6JeWideaNWhK8VwqgJ8VC88jZY7VEZyenj0fo9Oz84bfn3z4cP3zYQ8mo6ibXimFnfIEESbRxFNSeqg1K4TIotAXLEzGjCjhfv2ssCGv8S6JQToSZP7hR0SaPwEzWWjGZuJEAsVnwYB6DhtwdzbhbCC3ZD4QzqIaLQgDPueuUgIKgW19DKWpBYvq0hdHImq1qrVZdVz2o5A9N+cZblK39q+cY0sxU251rygZUJQOC+olbNnHmXodEZ3+PBrOY8cUYql56Xs4Y8dXO8DPdOzgbcNcCJ6Fs+hrbuul+GnWQEo5nUKabmPrA0RLKz6vCPudo+uAWiwcZXzywMj/ji+m4OU57n15GX9SCMQYN8arMxayP0dVCKAeKHiBo/2iihxpUmaJpAUneGbjbvNtCbLbHDRcKMuIZ1PIQSiKsaoSENQUaZgJdMC7IBM/4LTlHJ13SsoM0V/jTlQegEFmJa8X3zUIH1EklCF4dijv1RjIQjdDVJGgZUNaNAsNs5KTkN1KlvFDfaCNW/50I8U1IHmV5YQ/v3SYGAJiaVzVuqjipOgFq5QdgoblXNqCsElficCljttArByKcVmOQyzD3umy0YORwbFH0tE3qbRVaBul3ErA3nDnNCXAAWJj1dhEBR1i+kSNElbnWrc76oH5G0ALiXqNIMxSHbfZxcPv0vpkRT5GwN1chL24kyEyc0KxKgzzAvrUAYz0eXPX/OCnu6cFIqTcbMHiCgLgaCa5p2STDszLF6SDHyLJYYbNFQRNwiLoX5c7JcIhqZJQJRCbD5JAE+F55Cz5ylsyzrfpg26ELn8ZiH/3CXOOyrhPJcC6JEQBtjNemg5lPzXZ0V02uBpZfmwvK19Aso1Vx0g6KrJSYZIQtaqrMdpou7NFkPnbTYMuGBUWnAgqabseeYaJcBsp1PUCwTcucF1nWHSwWsXYLpmgGTZzKm4NycDZaCqJXYnNrfJoQQSCI6GDolnl9Z7+0RxCVQSm2cd2cclElM83MLgAr4asHg634mrFSdZLcYkQbznd9O6NQgl6m3XDsq1adTzJepJVCH9bCLAuWx/X6V66cORwKSa2Mpinmbo1lnKYTeGFS1kC3gsk0oo7aAfrVMXw1dmDri0OSLQZtEDsaUDhGb21Cj1enRQMcoUViSnOmdEEVznhCMGsopyVtLlWmioBv1TjMi+jyaVDp2BYY7YHBY5ZtOFitUvB2LPaFiac0lvNcFjztxv7KL5U6CLl15pij0nPOlBQU8phgqY5Pky2+BQ8QAt8NrfwyVNoav7LFIROyHLgLylWtOpGYJ8cf+7Oe/UTT8oLzRUbMTmvHbuJjtwmyhdWZu8ZnN3oK9cmrnf7U/TsC3NYyh1629awi80zvWbnkQk2MMl7pDJglSy4cvuNyl7c45Eqy4sdOV3i5KbN+oGzCytCikYtWD90q1vp/Zz88gAsrBIPuPytoppCfytwk5QAB2iVOFi/3X+IC5bWZ6h2411C3i20LLZcwEwZPybS2GUDYCCAC5JLNuc+o1rYMRU/Fm/r3rZzpNyLof78px71LKmwJL6v7l7+RtYoJ5SzdFDP9wBQ/snP1V/+3CKbqedWVJDixK6DIn6nuTV99tHV6A6KHTXLO0wMwvzcDOU/NNV8UVbGviPEwveUpen/5tIlI/7/M8b6X1B6qCmITGU/JYWcQOlDFp7Cv6OiHyEBDK5w3MUFAhomkOxQ6D2Qc5yHFsYc3CSRzF9oDHEhRvAaulTA4xwm0zbDS5egJ/HAUly3mIXrlbJJQZlj3Y0wmGDRnrQKhTeXTlg4xOewznNyssUhNcTBFrSJosuah+SmgCO+KWsubJF5pmThJsc9R4JFccUXC0osoaqO5P/biFOgcGwrGcSjlpSZPNxOpbbt6BbzhmLpgBR6GGrv3wVRGW0WhNkqX9wEZuAQiEJo5YL2JFdk4Eq0UeiMmzRCJ3lTHPq24xvh36rlxA6aks/i6jylwo+w071EY5R5a1Psw92MUV07NLUE7J7ZjqG9U1LJZUVeo2Haio4S3wGmL1doRSxxMW3zWrkiiYNpisnZEEgfTEoS1I44olIj7c2cEXI5j7tA6osmBVj8SKtVEdRgeiMRGNVAdZpGasW41RDGhvBumLvG+ILzl0N5FqrSmww8h3cYKLAgfb4HXIyN+Z8RbIHbkxu+IshVSd1b8jti6gHXlx++Irh3U9kz5/UbYABgLYkI7Kb31fh7dRAZqKCAfNwGUU5/R4fpEADsCIR5xshP0GIjypKRD1dsAdP3zMsxrP7D1z8vJ8K+UdpsLA+GriI032MQzJqVfw2Bvs227Y1S6qDznULRkwH3hFRG3RFhkEJ4zPohNuFM24gUwdVCgR5Tp3xVdO5uPtQho5IWgxj7aQi0ED5QdPE05da/aFWSuRLsqDRNRXZUo7Lq6aBa7sAB30Fq2i7qd1tEUgTTxJGE/o2gDmh5ScWcymsWeDBYTrluGfpnYDNjvg2VqLemnJ2EZXyxI2j0hbaI2wsc9MLoSoJdP49jaJPBu2NQSAhDbkHXI5Z3X2sDU40yLxIWm1efZ+QKLlKrU9wXCDy2+QOMEBAGaYyEhrhneL3dZf++gQ4yGnBz1nV7DjrrakvHFIWXMS8qKjwY/BEah19BFNvNL0Kc8gTLIJEWQgT8jCS5kreTokmzMyxuGVzQxJVmx2KDZxoKvMiH6n0kJF+mkFjLek326kHqGW5ZOcNHYKlvgPzcCmdq+9LY9q+tSlqUW+eVTUzfAndQQsA9Bg0jxBlCAAVDjpDKyPjSpjKxLUsferF0+rdU9aBIrcELQvIAqTw4yr0apf0LUNWcyuauqqnt4L6M3TathRmySp+Bc3W9fMDn0bN+6XpJISI46/Iodlla9YBWtY9fszStQoSip1aZBLnde8dqCzTY+sOgQJPm1IKzhM9znKPE3pgNvNa84DThJdjiRTepiAr4BE3hUa7riB3DG0DaP6z4KylMvuiYs0x/AvkvgVJHVXsovALDtZTomiFYtUgag0V+5oHyW0gSrsvU6POJFmfhgeh7V6BpHoFLp3qIS/UYEP55hSdI/ImxD/fkcnUDbaiiabTfTnAqpAGgL350MH52B6RoHOJFok/ESnGVxVGIXa0UQWWTKCz53OKA7SGINrjmmWSFIizgd5lHcZvA5C/UF4Zdvg0IFCwzVe1IEC2OKfxM0NYrPWGseWq+fNkDa6j9vWLZBNkvBHisWyTO/RBHKs0JLTuonYtZrJCAjD9M6Ix3IXRrXd3vMHopEsHuVRVvJ2ur3OyxFEM3fRkwfr+dByTEIO2anr7N5L6qaZVnb6NnqgY5VaR04P1lL5dY2mvo6c/eaokY5VGu5BSXGPAOuUTQ/giN4pwrtiNlpdTSov7nW2hgtErAUADjygyr1236t9aoM++1Pr/8i/+vhUcOsq893lUaXko/dmC+hKZx+JY5zbtPWjhWR6hgy24bip62BPBY7TeO48ZsXi6fr2ft384u/f/vdk6vk19nFYt0fvVxikXaiL+tkwatxKk76I4RDaneju9NThzeNMIdwMLCh9VthxiOVVoO294WKpKBFqJFJTIeqlVwgmk9Mv42jGpZqJvRX9aftG77cUBr7VtMcyHeB99YWX2KFeJIUAtK6TJ0kXsiJcVpPUsIoSUcIF2qprUYjLydajYGfa2+Zfy4EZkr/O+GMmQzN6G/uM4VXuVZHJmWhSVGwCfYA2X+bD9onL8Q/fBrN8m2fx5/A8+LVfmssPLrXfOJqL717dnWNnry9dB/f97mk/M7kdyaE3lYaWvWaNt0Zye6PTAf4CURX3jM+uUSr6frf0A8m9em83z53FZyd5806g7eyoOc3riUONyetnWBoEvz4+/Hp+NFZnOSWYLhcUJbQvBEf0CS0fBPdc5UK75stYzZAbVu00zopN9bwycX1LtVxWn09zHxiKNV8RD6SpOiczCQrpCLifMUZVVw8WGHaGM52UgtBt9IJ3E9YCmoVev/uspWoB5OPOU5uHkiSFIKqzYOJN9393duVYgW81VtAOl4cMIsXGcHiKhE8y96Zr4fPoUU7mfF0s5VW/VKjSi+d24rfHZTqD+O0BTcuVchbLkhbJ4Ndj97S6k12h4nQiwuX4li7+42h9NFC5cFDGdvWk1+2yVFcEwYohlq2d2eu+RrwiwuXDaMlRZRQb/kLYc59SZJW0uYZxzvaSRc1SkqE4DIUUOfCOm/+gm8xuqVCFTjzE3fihMtEFLOJ3KxmPJsovScg9fuuxoHe4kLaig2UufxvlGQEM1s039CCgJaI96xGONRQ/ASE96DblKreRvea4JuJIHM5sU5RoP8OKb/WNMtc67IVRiADlX0bpDeodtJzLHCWkWwiiEww+1RUe/O9wpAEjjJ6S2w6CjhjM4JwnmdWy7D9MPK86TTzr/uxlJOCZdyWO/kEIzHYgF8YXIAAET1nP8kLvypDk8aYUO5Jo2vwefH2veFxyy9EzLlYmSI6TgBFSGwX2ageaB6fZLR1onsORP+pDYIXCvqQQ0IeJP/FBuAJlo38DFTaZukekaiTSkFw9inIvIY7DVsVpE401Ba2HX2M+7c8pcBsgapUcI9HGZXLuEv/H7eriShYyxZsH0ifKBDq6vn+5e+vLDWmXK/dbSPTMRvAay43KnfX5Z4JLJETuOuZaCnTJjx2pvwFFjO8CGbTYrU3TBqrXYaY0CgZWYtAOF0czYeeYk2C4vwGOqICUZbOTrq82oYhCTuF3ry4gCAbc/QuWlAuCT7YrdGPBOfQFTIpa1q7daG/DdZl9TeTm1mrUG+2RulJJio3rx484NGMf0MzDsGC7QeNPpnujKT3EsJycN5BjB87sSDxxLAdFu5NlrqQO6iIliRFjlmy+f2vICwen0PohzeC38Fyts7p9tXd8IItDrm+/6kB/ouv8KY+ht/BGnfMa5y6KhhH3LZ3dTqywd+uNmTzgmN7ukR1bbrKOauH74boXkLFQfte6NmpvD58TMbJeDV+RRR+ihW+EAQrAhdEttly+GXbwRX13NQpMkdXDGCT+7v8NMA0XXvlyCzhi4t2d1fc1dU/TauU2axpoIS01DF1UdERuVVqE+tmoNvBEVbLOeG3RCwJTjvWtY25YisdICo3TsbXYeBsbeeY5y4uDjTcZ21d2yv8H85OTr8/Pnl8fPbD9enJ+cnj89NHox8ePvzlw+Xr52/QLx/MTakBMbZEjKFB0y/ow+3k739Z/uPvv6APpl863Mc+Hj8cnxxruOOTx+Ozx798OPkFVMIPj8bfruQvI/jHBKr9yQ+P4N9acV5SJT+c/vDo4bf6p01O5IdfRqZYEvwFSIBrpg9/e//s3X9Orn989nry/Nn1xY8lDLgtlR9O9fuQmfXhv38+Amp/Pjr/75+PVlglywnOMvPPGedS/Xx0fjo++ec///nLaB95A2HdolvYLGzhiTZuiE72nKhw9baLGD3BHZSAkk5VqadbH33VdKyNvocnJysZI6WWcVDSoVexixD9fMjWaB8y8EkHqiuFFYXdMARfy7g8XuxCaYI69FttOOuMPHDMwOKTetO9mGjoXtcBm2TALEF120nQyj1G3jP9mmvI7gXcHWCdPEGzbTvAXnBFSK2t2kLBo7OBm9FJty4ajFlG1UGRGnG4Fa3p/pqaWJM2As6GESB4oWjthA5xvzNvtC2zPDn98b/O/vbnmx/+sX60UAv8XLFh24N2HMiX6UGkzhYJcN2x9VOedOFyldpwLvjHjRdVZn9piSezT7sjySqgaHgMWUMzmQsoqJvWQyYDKP4tmvsA3eMCZdBbm4j7NqChjN6AJhXGB23DMaogmEjj8xlOboYQYd+P0rDGEklii94pjlaYeeUEmXPAcS+zMkKRedCbIK2ruTRNxb3wDg+lISzapN9s+DWmqrw8CiLoA7xm27ubK1/kWS+uhePqxt9iQXkhtaAoSDMDGBTWBkVezJIGdzCaXGJLuBREKjzLqPSaSDBtRNftzS6KwWadiFCTjxBZz7GFCKMVVZZdvJzOoAI9lYiYt8Y9CYIpg0m/m5UcRIfbYXbeP8c6jmxZa0iwIqbDZs8h2N3YYzKr1bXBIS63Y00E8UTSjMxNF08qka2H62VaA6K+xLmpvXvqLKZvJFpkfGbO/gF00gES1khV23HHNA4PJfxWmQ7pz5NmpnOA0vTSsS+55NrZBv345C2chPX2Ps2xgvLYZJi63hrVNMMVWpISrdVn3Vzw2K4iYkWZjRFRYXRWAPeCM9OyyDKYyXfThwHUKCbh74SlZe8oFCY4DxuO/sAEcgWntmaosobqveuLt4gLKN1wv+sMaJX7ZcaNE02Q7wDJ8d7XEJ13W7JxJHlseDkVA7LLSVbfcglnEPTLVEAbD4hqroheKcOYdXdtbLOhiG51OCLLZTwglVaoHIDIJWZpVhXLdUraAWltKAS7kioVzTLHljyQ/Qck155yXfS+9il1J6n9DpGPubbtWOImFboIWaqATLGxgWL267peu53e1moZocUVbb1t9aSUu+oIzYDToY64WgBz521GazEOm83JqKJlNQ4t6kJlxRpS46/qYIO1oBLdUowKRj8iyZMbokb2v6brGZWuG5HrQtQcVM6FiliLzYpBQVkq+OqrSPllI6ni7UXqMA1EJ3FZvJ5zpJZzNxz9RQNMSqSyJ2IbGz2tXvGdRXvwy8Cp9Wgc1z5t4cD+8GikEnI9vXX3okt9U1rNFhjTvMmO6KBprPUU1q7DujN1dVv5rH4V/nomXA5C1gFpSz7lADRRCNvzWQdgaAOyLYN3yFxFQfRL8Bw+ktYqfUulWvfV24xoSwKnqf97X9FTBe9FRIYrzNV+dNlgedO1v/QzBG2rIlJn2K1xW1XjGimA1LwLmbBVD9/A+9GhO0RmwmMmnKtCkHSScH5DB9bNeQNPcIaONLA/Qe2EI0Qgt9kWazCqBg4UkCVOzQlscDo7o6z33JPiJcEpEQMLIbykEkog2I9LaHUiUFoQN8NGAlcG5pH9qHrZQDuCdSIrGzTtWwDx5QkMwiijNhOC+vNp89td2PSTMojV6Zd+q2rs2ASKsFAl613OPhOfmNyrfmxi3j0wl3h8gtcuM3WS0UYESM0FYAOGfS6Bhp2+w89U61NLno6CFoLwkWsNbzIuehDdQTp4O41hN+muQmNuDr2pF2SFKXBI6a6wNsLImRTSqwsT9ZK6wGrXLrGq8zLbKFJLXAszXiGmzd0luLdLiVDdHsRmZ7tchnkBV75me16oSYoV3jZFQ93B1RWI1KY/hkaI4Tk3Qowro6bpLzUV+4/pgMMIaTbrVJarswfOvWAIM55u7iM8V0TU19tf4CGjLEeYtOoz2qCFUDswCPYxoWppS7W5bAnY6jvBsQ2Bk4TkKmT4JOOBDtRyEfW7oNJe79KEsgX2bncv4YeWy13zsPtut4QYX8dB5UFSMiv2KtXYVu/XDgTgDyoLW2vFHBK2U67Ale2gLdF6CT2wbTSolpyWTHunsLVarCswezjiYp00j2DWjkboiHFFE6L/5kfNjNDRGgtG2eIIRfoKHCWCKprg7Ohz15UtMbp+tD6qwzGZBv+Fx/6X8xjkeRWHcaPF2cxi+MJp/8s4zR3kVPqn+OVV/7rNl5dXZcKDHLcd67S9n2ML1X6d5AYO1BXRdTeF/jUNO1T1l5DSj1XRu4J+j1U0Hqxi5jmx4gy0puzh2eHx/0RZytcSbcXvTOiYwrofCWWllogy2yIRqCLtTt7d6/JTZQvxaD2Zlo22OzJu46F1B6CFefEr1hDlzIvFc3vI+ou0bVZW7G9pIRBzUe1JZQKuGVVV2ARflDS11EpjEWraYLaJ0/Uv1J2iQXZpDv+eSDe7KaS8i3kHt66sXRTGQP8Oez3qv0XBQcKBLdayA9xm0kPrfe6wqW18HtSq2OGOq7s9566NTO2VVgsj3Hn7yU/XSfMu+4G6Tj5D4XKpxtFvA1750kCzFcmXBppfGmh+aaDZiulLA80dEH9poPmlgeZuXonh7enuoNXgdXU3WEWltjkFAHurorubQ8Aih0rJPYzvQ4/dGlLbxm6xH3jsFvnWsW9VRncevh/F0ObLbDXu4ljLXNMXz66HE+QsWiDM4I7T1WYX7jwVAeb371629pvZYoHs4RosPRFdnjksOZvkS9FWEXc/XjDwkYEfJwFyt+7ACwaeWq92Zs55Bih/jw14SlEci1ZGB45YRv+PNd750lqmb2uZu103gySyx9Ag7W5vOjSKLVR81lY7N3h+44fL/FX/u+WqDZ5VbV1jt2oOHNo/VmbPpqaG2IwvIOyxtx6q6IpIhVcDhawrhAqfVqFpDn1czMdaMlflLH568u51vXJWv+tUA/hzRwqgQCzGSsftdaxelDfxXjUA2ypUz39b/2nc6Ayy6+ChBjwAHEQCdEk91OGO0DU0XaWsg996nKaRaUGHETy1WTI9YrvmCW3lVtS1aD3JQuiVTXDPsaiaS2rq2smZF1m7M2ofWqBLZJFlbnrqq+mENZ1h5ktr80OLuDYPu4MbS4joX1ZgH7TQ8V/NnG0vdlwvL7An3gubDw1gNTcaQlrt1no3X4PaFOuvPTI/TkLiLENlfCEVln6PPfdTC1O5x91s5cFFB2csS+hLj9BwGvZpfe6GN8R3ddgztbTXoNc0O86x0MaZ3hgxRF3KxJ5Wa6lKOPFo8Y9cYpcwVj3kJL3ki0f/MK+3bJlScTwgiQYm4sIeMeuyJVqtE15XofkDLVw8H18UjJlkG43KI1DP7hbyMr6YwDj67/YtNN6Qje3CnxXEhIsvTDGjkvZIsEUp9BolUwdvuCaILzvry8765DurfVcNp+4dXqO0WOVuLd1lYwRJeZMOnrEDOxr9UlEGQRdu1ewuuQ/H2G51Fe5zdMnyQskReg69RuUIvSmU/kXz1AVPSdLWuoLzmwllsTKjuzuin0FFXqgyAv1KbKy5c1H2idZ0dDHMGhEEd0YWIOuiyi5njgVuiWYdztFXpstW2SbfIynhbE4Xti/adoIm0UNqv/Pr+N9CygKSwJnsqh0ZUiIHWtdfrGq84mzB05mnGdtf+sehv9IfPP3z9lj0ChcaEo8eqq8etkZAen2N9jzEIxe/bRTEqNiSErGNOe031QEaO7xLP9pl8HObiOt2VG2h6HnBEpsCn2BFFlzQ32wThy3EXbx59erJ66cDSWSNHd1D8SEf1VZyKKMKs9TUGRxEVAxsHyXD+mA63VeeFHN7cyN/zbyd+Wpz9beX/felRgWfhDtTLrlQEyNNzpESRZt169CjXZNHWghAHTv28KEaISHDIzY+pafcqHgTGlcohx+7TyDa3Iz82/F34zOreLtaAkajpOkYPefCvmdDCSTKBeWQTu992cAAMwd7tbQ4XDVD2nLtv+U6wCZtdQy029T43PcBBzQit/CyxjCIlQvZXcAwPlCDTH9rapsk0MYmrZo+tES88O7uz3Fk+ivXptzZOR2o3SrQltCXRnhBnyCGRr/0AxBikha0QBgfui9hVVmgokbr8KO9ehNmPLm5E3rxihc2BSmkeY0ptO23toEmQEufGanCKsYaQgOq0ZKp3Gu8gq8lpDUdSPSGmT8aelUFyKrtHZsHqNFCkTJyqMMgQpFMMOtHUNspuA8xUNeyOiMVviGsknHTq2fX1dNpF3HNlJ5+sXtle5MW4XHImffKel4+LZncYrf6HltQ9tHT917rfw/T9+CTHfU9hx7to+9FCEAd+t7dZAxXhOyQN/wvlOAYlx0urm2iDZwo+e0ZSoyoNRc34zkXayxSktbDde82/exuUuV+h9mNnZkad5m59uny7+48lbA9Ta6bUdqSZdo58ktCXiuSLwl5XxLyviTktWLqJWO+ZOa1IP6SmfclM28f7X+4t/fAQRCmx5C5wblHxouxIWmEXPmp+y23nQezPd+W3ljCFJ1TItC9t5dPW/CqA9q81rfs0LZFTJclNg+G+sLroLEF/eHdwsTvKuUMey6di8KZ9m9k2Vc1AtQa1eRjzoWq/DNTC2fanZxQYUP7ByUKIotse4nXzi26WnHmNmh9TAY+Mm2gJVF9N+rhk9f8FCjrRV1iVZVpMlcnEOwSZyacRI6OPYh6zgWiLBFQXhtnUK54hFZY3ECYklramr9VSSmcpg13ITKlnVb8lqRjdKlQghmaEejtxufoCL45GqEj+87RSH9wJBnO5ZKrlvp4Sy7VpNpdh10JT1Y5eQ73AkFFLcvlxgpEVLo4qWZY+2suVjjLNiWgZp5Sae0x+hG83gcSRe9DF6flLuAh3z2PJGWJjTrLebIco/fSusITvsoL5dx70//wPKIJz4pVy31DgjPCUiyigyl2Xh0bMSOITYssr/9NgEqWuRZHdEXAB2+8Yna/2yUr/Z05l2ohSHjJ/db8OPimu/puR/dnQA3aPUAlJOSuY1Tq/te2aXB/fjdX3XRFfuPd5f3bUf1mpVeJ9tPcp/vqVFx+NG9Yq6ttnK4oG3Sx7UIdG2BLVxJWeNZMI69wrjYmkmswyijkflf4z59cP3l56Av8NBaL13UVWdHz8GR8Moicpy7Ijs8RHnrxVOG9evby2cU1+gN6/u7NK1hD+cdBdPwNDriyw8ZnrlQrSBrUqn2n/90io+FZd+6MA4c+e0aWIbaUlj2F5eFMtGsvaObyqTtNDVWxZorVJfGhg+E1xBC/q6o6RheB2jhdYamImI7QVGb4lui/JEuapVN0T5/M754+f/DkzXO0Fqa7BTy7P4rpplOtSFBGsmn/eKFD5SU0hgWpInowt0TMuIRxmQLTU9CLp7aodAutd7IZG1APGGJ05WKIoKi2af55q1VPfYobFrilGGF3MRj0Xa7AdDZdWg2pPdPrKn21wixFBILK2+rnugNjfLD6yz/CVLEFogoCbKDruKHB6r+GLoiyT0R3PPtBpUclNToOqxtywJLsGusN2YQmmZsAbYp2Lw4Wh8xmhbAisSj0ISlNa604UQnOMk2SPdHkRiqy8o60K/ihv91hAOxob8SKgcYmISWxsf9oP3QLD9CqiuzWzreBmaao/9Qhm9pQJOjtDCaqGYgcmR5CRZZVrPJrgTNti6co5dASQ0MAWYiNy0Ta1gGlSwcu4211LJZ6mmtKEpoS187dhG0prt+3lJcXIlqAjcstEpsVQX4tqCDpOZrjrFRTWxil2h8GcgzbllUYhM9PUYphLBkP7RNqE+M+1BVrUwQVlfdPIqas+AhQq0yAQ0RWb7vD/6ZygnwTBXxn1XlzwRcCrwbCDTogR8G2HAbbQda/7KOHtEPtyg6NWLbDg3KikKWsX8oPvfvsjPPpU1tkSdDV1Y/AyloXtdXLbO26mop4lGMptWA4Aj9pXswymtyQzVHd8ViOjy4YVoVoXqf1Iqz8vNZo3CDWUqoNcSp4njcjuKoZjjzoRVJVbRJkgZ46v8E9uM21OslzwkxvhtWKpBQrkm0cVS1BbN2pq933j4brjIM+6otvjQrvAzceuOa7DxuFJQeADb5uwRALE+jaLO2hAgOCBbZd+Q4PGBgUMrAT+q1QewQO7IC4A1q/8IEdcHYD7BNEsMsMd4DrH0qw+2gbQOPnSpHy3gfLtqs4o/pYVTcBy+8WrA2XCeKuaDXWqTM6+tWnaguGMH9KfyJkn7x+cw33RkXKm22Ae4rv4IpaQ0uwNBasBlsaTHNMs2bBylJ5azT46on9+vo/vZSaACNtMxs9Kbve8XxPbOWhlAqSKC42exAR0YW8dRKcNw+CXjQqLBZE2TQj7tmwdQLlmqpkGbns9PJ7V7ESpP2mquZfAQ+QJmFL4LmmG6dxVfZO95xFvOO2W/KIIOv0y7tUNahkkKXeNTUja6P2tumCSxIprdYDWUrmuMiUAdCBrgVvVFhvV07iYfXeijcMl95QG1+WWs5OMGseg7ZAS/3WZ2FRh3lHHt1x/RqejcaEHGayPb/GXaW8GtCez+OLm6EG91/OzWC9sEpgMqc3nhv22vwyLP7DfrS9CkmFD+3jfYviQ58l1c2RskOy2x30o7jo14ui80J/+DWIf2fvOqhLaWLjWmK9OnPNdr6IAO0NHONQome9JAzNsKRJ3b1EZaQifEDcXcTXXZoiDe+eX6DTR6cPbayd2oTepZbd/qWPxJAsvTts6fG5e1j8C+XIor4pift23TCgW+47WxMID1beEeSOCYY1vTHH0QYWUdvVfNbW1YJx5XW24AJ+2CK6hmVMDhmxHe77arimfcehRhv08NipZ8eW/M6D9urIlxtJE5xZpO01vWcFzWI4D0QTgHdEVazYUfK8Mz8xIjsGEAOwnQAdRFRnJuOeRGnYuxDVnf2698oB+F3oanEAbyOrKgq3FDHPy07boA+9Hdm3B92SPCfCVJ0xxmoXRVvSdO9gGwyj7lPvh0HU7ciAd7uk21KHW9onUJaSj2FsyUCa37hyvJ4iYEJsZmTOBSmN5dkGUbYgUh3rN4/Nm/USomjn9OS+Z/mXNl0DZg19adPVd4q+tOnqoON326YrTgmY4RPg4gMauV4RNINBRtHPBWeKsLTdR7RbRLe/hx0OEDpxSxsnN5qINifHFhqiFBSiLMhvwdvLUOf4oOBbNAWgvvq/AQAA//+tuXbK" } diff --git a/filebeat/module/apache/_meta/fields.yml b/filebeat/module/apache/_meta/fields.yml index cfa176acaed..eed6720b845 100644 --- a/filebeat/module/apache/_meta/fields.yml +++ b/filebeat/module/apache/_meta/fields.yml @@ -4,30 +4,118 @@ Apache Module short_config: true fields: - - name: apache2.access.remote_ip - type: alias - path: apache.access.remote_ip - - name: apache2.access.body_sent.bytes - type: alias - path: apache.access.body_sent.bytes - - name: apache2.error.level - type: alias - path: apache.error.level - - name: apache2.error.client - type: alias - path: apache.error.client - - name: apache2.error.message - type: alias - path: apache.error.message - - name: apache2.error.pid - type: alias - path: apache.error.pid - - name: apache2.error.tid - type: alias - path: apache.error.tid - - name: apache2.error.module - type: alias - path: apache.error.module + - name: apache2 + type: group + description: > + Aliases for backward compatibility with old apache2 fields + fields: + - name: access + type: group + fields: + - name: remote_ip + type: alias + path: apache.access.remote_ip + - name: body_sent.bytes + type: alias + path: apache.access.body_sent.bytes + - name: user_name + type: alias + path: user.name + - name: method + type: alias + path: http.request.method + - name: url + type: alias + path: url.original + - name: http_version + type: alias + path: http.version + - name: response_code + type: alias + path: http.response.status_code + - name: referrer + type: alias + path: http.request.referrer + - name: agent + type: alias + path: user_agent.original + + - name: user_agent + type: group + fields: + - name: device + type: alias + path: user_agent.device + - name: major + type: alias + path: user_agent.major + - name: minor + type: alias + path: user_agent.minor + - name: patch + type: alias + path: user_agent.patch + - name: name + type: alias + path: user_agent.name + - name: os + type: alias + path: user_agent.os.full_name + - name: os_major + type: alias + path: user_agent.os.major + - name: os_minor + type: alias + path: user_agent.os.minor + - name: os_name + type: alias + path: user_agent.os.name + - name: original + type: alias + path: user_agent.original + - name: geoip + type: group + fields: + - name: continent_name + type: alias + path: source.geo.continent_name + - name: country_iso_code + type: alias + path: source.geo.country_iso_code + - name: location + type: alias + path: source.geo.location + - name: region_name + type: alias + path: source.geo.region_name + - name: city_name + type: alias + path: source.geo.city_name + - name: region_iso_code + type: alias + path: source.geo.region_iso_code + - name: error + type: group + fields: + - name: level + type: alias + path: apache.error.level + - name: client + type: alias + path: apache.error.client + - name: message + type: alias + path: apache.error.message + - name: pid + type: alias + path: apache.error.pid + - name: tid + type: alias + path: apache.error.tid + - name: module + type: alias + path: apache.error.module + - name: apache type: group diff --git a/filebeat/module/apache/access/_meta/fields.yml b/filebeat/module/apache/access/_meta/fields.yml index 48f578d51b0..57496b62da0 100644 --- a/filebeat/module/apache/access/_meta/fields.yml +++ b/filebeat/module/apache/access/_meta/fields.yml @@ -13,80 +13,3 @@ format: bytes description: > The number of bytes of the server response body. - - - name: user_name - type: alias - path: user.name - - name: method - type: alias - path: http.request.method - - name: url - type: alias - path: url.original - - name: http_version - type: alias - path: http.version - - name: response_code - type: alias - path: http.response.status_code - - name: referrer - type: alias - path: http.request.referrer - - name: agent - type: alias - path: user_agent.original - - - name: user_agent - type: group - fields: - - name: device - type: alias - path: user_agent.device - - name: major - type: alias - path: user_agent.major - - name: minor - type: alias - path: user_agent.minor - - name: patch - type: alias - path: user_agent.patch - - name: name - type: alias - path: user_agent.name - - name: os - type: alias - path: user_agent.os.full_name - - name: os_major - type: alias - path: user_agent.os.major - - name: os_minor - type: alias - path: user_agent.os.minor - - name: os_name - type: alias - path: user_agent.os.name - - name: original - type: alias - path: user_agent.original - - name: geoip - type: group - fields: - - name: continent_name - type: alias - path: source.geo.continent_name - - name: country_iso_code - type: alias - path: source.geo.country_iso_code - - name: location - type: alias - path: source.geo.location - - name: region_name - type: alias - path: source.geo.region_name - - name: city_name - type: alias - path: source.geo.city_name - - name: region_iso_code - type: alias - path: source.geo.region_iso_code From 6442d5fa1eb84e51f5c4fb97eda1282f7fb1f8f2 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 6 Dec 2018 17:59:47 +0100 Subject: [PATCH 08/14] Revert "Remove reference to apache2 in tests" This reverts commit 23c3bd4e5458c04e746851732fc42320ee0d2811. --- filebeat/autodiscover/builder/hints/logs_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/filebeat/autodiscover/builder/hints/logs_test.go b/filebeat/autodiscover/builder/hints/logs_test.go index a96b58a6882..da687231a8a 100644 --- a/filebeat/autodiscover/builder/hints/logs_test.go +++ b/filebeat/autodiscover/builder/hints/logs_test.go @@ -233,13 +233,13 @@ func TestGenerateHints(t *testing.T) { }, "hints": common.MapStr{ "logs": common.MapStr{ - "module": "apache", + "module": "apache2", }, }, }, len: 1, result: common.MapStr{ - "module": "apache", + "module": "apache2", "error": map[string]interface{}{ "enabled": true, "input": map[string]interface{}{ @@ -280,14 +280,14 @@ func TestGenerateHints(t *testing.T) { }, "hints": common.MapStr{ "logs": common.MapStr{ - "module": "apache", + "module": "apache2", "fileset": "access", }, }, }, len: 1, result: common.MapStr{ - "module": "apache", + "module": "apache2", "access": map[string]interface{}{ "enabled": true, "input": map[string]interface{}{ @@ -328,7 +328,7 @@ func TestGenerateHints(t *testing.T) { }, "hints": common.MapStr{ "logs": common.MapStr{ - "module": "apache", + "module": "apache2", "fileset.stdout": "access", "fileset.stderr": "error", }, @@ -336,7 +336,7 @@ func TestGenerateHints(t *testing.T) { }, len: 1, result: common.MapStr{ - "module": "apache", + "module": "apache2", "access": map[string]interface{}{ "enabled": true, "input": map[string]interface{}{ From 9af3f75a9f68dd2f3a4b166ed2d8bb9ca1e588ce Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 6 Dec 2018 17:59:01 +0100 Subject: [PATCH 09/14] Add option for moved filebeat modules --- filebeat/fileset/modules.go | 27 +++++++++++++++++++++++++++ filebeat/module/apache2/module.yml | 1 + 2 files changed, 28 insertions(+) create mode 100644 filebeat/module/apache2/module.yml diff --git a/filebeat/fileset/modules.go b/filebeat/fileset/modules.go index ea6562239f5..dab47c6c536 100644 --- a/filebeat/fileset/modules.go +++ b/filebeat/fileset/modules.go @@ -26,6 +26,7 @@ import ( "strings" "github.com/pkg/errors" + yaml "gopkg.in/yaml.v2" "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/kibana" @@ -57,6 +58,12 @@ func newModuleRegistry(modulesPath string, continue } + // Look for moved modules + if module, moved := getCurrentModuleName(modulesPath, mcfg.Module); moved { + logp.Warn("Using old name '%s' for module '%s', please update your configuration", mcfg.Module, module) + mcfg.Module = module + } + reg.registry[mcfg.Module] = map[string]*Fileset{} moduleFilesets, err := getModuleFilesets(modulesPath, mcfg.Module) if err != nil { @@ -180,7 +187,27 @@ func mcfgFromConfig(cfg *common.Config) (*ModuleConfig, error) { return &mcfg, nil } +func getCurrentModuleName(modulePath, module string) (string, bool) { + moduleConfigPath := filepath.Join(modulePath, module, "module.yml") + logp.Info("path: %s, module: %s, path: %s", modulePath, module, moduleConfigPath) + d, err := ioutil.ReadFile(moduleConfigPath) + if err != nil { + return module, false + } + + var moduleConfig struct { + MovedTo string `yaml:"movedTo"` + } + err = yaml.Unmarshal(d, &moduleConfig) + if err == nil && moduleConfig.MovedTo != "" { + return moduleConfig.MovedTo, true + } + + return module, false +} + func getModuleFilesets(modulePath, module string) ([]string, error) { + module, _ = getCurrentModuleName(modulePath, module) fileInfos, err := ioutil.ReadDir(filepath.Join(modulePath, module)) if err != nil { return []string{}, err diff --git a/filebeat/module/apache2/module.yml b/filebeat/module/apache2/module.yml new file mode 100644 index 00000000000..139027d128b --- /dev/null +++ b/filebeat/module/apache2/module.yml @@ -0,0 +1 @@ +movedTo: apache From 11e6c0716cce7c0d426068c8026a92b8039e92d3 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Tue, 8 Jan 2019 18:41:06 +0100 Subject: [PATCH 10/14] Don't generate fields assets on modules without fields --- dev-tools/cmd/module_fields/module_fields.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dev-tools/cmd/module_fields/module_fields.go b/dev-tools/cmd/module_fields/module_fields.go index cdb051b2825..217a568d126 100644 --- a/dev-tools/cmd/module_fields/module_fields.go +++ b/dev-tools/cmd/module_fields/module_fields.go @@ -80,6 +80,11 @@ func main() { if err != nil { log.Fatalf("Error fetching files for module %v: %v", module, err) } + if len(files) == 0 { + // This can happen on moved modules + log.Printf("No fields files for module %v", module) + continue + } data, err := fields.GenerateFieldsYml(files) if err != nil { From 62488076bbc108ad1b2b11008dd678ad2ea709fe Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Wed, 9 Jan 2019 11:54:01 +0100 Subject: [PATCH 11/14] Update aliases for apache error fileset --- filebeat/docs/fields.asciidoc | 8 ++++---- filebeat/module/apache/_meta/fields.yml | 8 ++++---- filebeat/module/apache/fields.go | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 246da940e7d..fcbcf061b14 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -307,7 +307,7 @@ alias to: source.geo.region_iso_code -- type: alias -alias to: apache.error.level +alias to: log.level -- @@ -325,7 +325,7 @@ alias to: apache.error.client -- type: alias -alias to: apache.error.message +alias to: message -- @@ -334,7 +334,7 @@ alias to: apache.error.message -- type: alias -alias to: apache.error.pid +alias to: process.pid -- @@ -343,7 +343,7 @@ alias to: apache.error.pid -- type: alias -alias to: apache.error.tid +alias to: process.thread.id -- diff --git a/filebeat/module/apache/_meta/fields.yml b/filebeat/module/apache/_meta/fields.yml index 98387f5e5f5..4cfa929b5b0 100644 --- a/filebeat/module/apache/_meta/fields.yml +++ b/filebeat/module/apache/_meta/fields.yml @@ -105,19 +105,19 @@ fields: - name: level type: alias - path: apache.error.level + path: log.level - name: client type: alias path: apache.error.client - name: message type: alias - path: apache.error.message + path: message - name: pid type: alias - path: apache.error.pid + path: process.pid - name: tid type: alias - path: apache.error.tid + path: process.thread.id - name: module type: alias path: apache.error.module diff --git a/filebeat/module/apache/fields.go b/filebeat/module/apache/fields.go index b67037e2673..01d4f3681b6 100644 --- a/filebeat/module/apache/fields.go +++ b/filebeat/module/apache/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "eJysmM+O4zYMxu/zFMTe14cecyhQtCi6QAssMHM3FJux1VFEl6Iz8NsX/iMncWTPSPGcBjL4+z5TNCXmO7xjdwDVqKLGFwDRYvAA334bFr69AJToCtaNaLIH+PUFAGB8CP9Q2Zo+yNXEkhdkT7o6gHDbL540mtIdhoDvYNUZvcwvwxqAdA0eoGJqm2kloDXoGa0cOjgRw1EV7x+KSyjo3CjRR220dPChpQYypZeY5CfErZc7P0WBzs3LIUuh8FsE45kEc93cPfUk1TtfPGmU1D4V2eggC1O8hnMma5iECjJPyayCbpUK3dTIT+sEMF7lSGWXO7SSHTvBJTBOaovl9VqHnPf/Rir1cdlDnKeeUWoqI5G1SJMx/teikyxAmC1z7E63bDJiXWmrwnvbS+cXZKfJprgOhV6/AteQdZgXVMZmeUrJCMicKGndI+eqdELm6Pq8y3uQMfeECq0kFEo+BF63YL0S1xWWjQdWms8tssSLLpY53zYdNL7Cmatd/UvLpCeohDGziLa7iAQxXqRRUtTPi4QxXiTQbRI0ghQvQSFEpAC57NQaE2qOt0L5TrtP7pMC6KX2qYFearMMyIXfOkVpO32hppymtNXeK6SVS0hKVynIirZo5ZkkOWq5wKxCyj7hXWVbK9zl2lHoKEkS/oTopQ0VSh6PxgTJVdL1DKs02Z0yuwWb06ql22sjV1GLt9tvC9eAXhCZ777z+Eu8wQsm3qwH8ewRMKfe6Pj7xB07QLheQZ1TVeyF644eQswnpY693t6hl+EeK89hl+FzMvw4mp6LkfASmFmjR9ZxRB6LLttnDF2R6v9+JytKWzdJDJOy1Oht/PX29hNekS/IkxgYqmZfIW/w5Rn3HbsP4uWWbpgdDA9FDT9+gipL7g0RQ01OesWrr7RxOMnR6+vf4KkwzTpfMLIxLSfbGJmwkorkkdqQrZbXAOKzkgOEgj4x+lYj2PZ8RAY6jYD+n77q3FhpfqYbzAVeJK5/b9j5cyp6pvNt1Q/cqEJPOQcMVYH2D3DWFavR7fSLWGRyHV6QtXSjK5/bqV9nsYdNUjH2Nm4/0dHCqAJSK4EKLbISLIcnYxvd8agKRz2dWkNVheV2LuMPv4Zp+EnqMfJpwxMafvwRNht/pHqzUjOqMtvf8ghedbxxWieX6sjsX61sC22roSaXe/1/AAAA//9Cecxf" + return "eJy0mM9u5DYMxu95CmLv60OPcyhQtCi6QAsskNwNjc2x1ciiS9ET+O0L/5Fn4sjOSuPNaWCD3+8TRVNivsIr9idQrSpqfAIQLQZP8OW38cGXJ4ASXcG6FU32BL8+AQBML+EfKjszBLmaWPKC7EVXJxDuhocXjaZ0pzHgK1jVoMf8Mj4DkL7FE1RMXTs/CbBGntHKoYMLMZxV8fqmuISCmlaJPmujpYc3LTWQKT1ixs8S917e+SkKdG55HLIUCr+XYGxIMNftu7deSQ3OV29aJbVPRTY5yMIqnuGcyVomoYLMQ5hNoXtSodsa+WFOQMZTzlT2uUMr2bkXXAvGofa0PK9zyPnwM5I0xGUf4rxqg1JTGSlZi7QZ438dOskCCotljt3pjk1GrCttVXhvB3R+RXaabIrrUOjtK3AtWYd5QWVslueUTAKZEyWd+6hzI12QObo+3+U9qLH0hAqtJBRKPgbetmC7ErcJ68YDG83nXrLEqy7WOd83HTS+obNUu/qX1klPoIRlFoi2h0CCMh7SKinqxyFhGQ8JdJsERlDFIygkEQkgl106Y0LN8R6UH7T75D4pgAF1TA0MqN0yIBdedQppP32hppxG2mvvFdLGJSSlqxRkRVu08kiSHHVcYFYhZZ/o3bCdFe5z7Sh0lCSBP1H0aEOFko9HYwJyU+l2hlWa7EGZ3RNb0qqlP2ojN6VWqztuC7cEPRCZ333n8Zd4g1eMvW8ZqrKPcUvGjY6/Rsw323E9WUDhdvN0TlWx96xQ1HIm6tiLbMs03r/XkV5RkhWlZlRltqHb+KEzObGzwlNgMo0eTKdBeCqt7JhhcwM1/P1OVpS2bkaM87DU6G389fLyHZ6Rr8gzbCjSxVfIG/zwJPuK/Rvxek93zI6GxxqGb99BlSUPhoihJicD8eYrbehNcvT8/Dd4VZgnmh8wsjMTJ9uYNGEjFcmDsyFbrQ974kbJCUJBnxh9qRFs15yRgS6TwPBjqDo3VZqf3EZzgYXEdekdO3/ORc/U3Ff9qBtV6Md1e4BGV6wmt/P/vSKT6/CKrKWfXPnczr06iz1bkopxsHH/iU4WJgpIrQQqtMhKsBzfTG30J59MB6TWUFVhuZ/L4w6+AwzP0vDtj7DZo8/UAyxPwpuOd07r5FKdNIellV2hbTXW5Hqv/w8AAP//i8DCuw==" } From 6cc43a1ea514e24c23113451dac256729c4a23b2 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Wed, 9 Jan 2019 12:59:12 +0100 Subject: [PATCH 12/14] Remove aliases not needed in error fileset --- filebeat/docs/fields.asciidoc | 58 ------------------- filebeat/module/apache/error/_meta/fields.yml | 28 --------- filebeat/module/apache/fields.go | 2 +- 3 files changed, 1 insertion(+), 87 deletions(-) diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index fcbcf061b14..5fab12c8845 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -419,64 +419,6 @@ Fields from the Apache error logs. -*`apache.error.level`*:: -+ --- -type: alias - -alias to: log.level - -The severity level of the message. - - --- - -*`apache.error.client`*:: -+ --- -type: keyword - -The IP address of the client that generated the error. - - --- - -*`apache.error.message`*:: -+ --- -type: alias - -alias to: message - -The logged message. - - --- - -*`apache.error.pid`*:: -+ --- -type: alias - -alias to: process.pid - -The process ID. - - --- - -*`apache.error.tid`*:: -+ --- -type: alias - -alias to: process.thread.id - -The thread ID. - - --- - *`apache.error.module`*:: + -- diff --git a/filebeat/module/apache/error/_meta/fields.yml b/filebeat/module/apache/error/_meta/fields.yml index 470e413d875..b720de9cdb7 100644 --- a/filebeat/module/apache/error/_meta/fields.yml +++ b/filebeat/module/apache/error/_meta/fields.yml @@ -3,34 +3,6 @@ description: > Fields from the Apache error logs. fields: - - name: level - type: alias - path: log.level - migration: true - description: > - The severity level of the message. - - name: client - type: keyword - description: > - The IP address of the client that generated the error. - - name: message - type: alias - path: message - migration: true - description: > - The logged message. - - name: pid - type: alias - path: process.pid - migration: true - description: > - The process ID. - - name: tid - type: alias - path: process.thread.id - migration: true - description: > - The thread ID. - name: module type: keyword description: > diff --git a/filebeat/module/apache/fields.go b/filebeat/module/apache/fields.go index 01d4f3681b6..10cb18b8f1f 100644 --- a/filebeat/module/apache/fields.go +++ b/filebeat/module/apache/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "eJy0mM9u5DYMxu95CmLv60OPcyhQtCi6QAsskNwNjc2x1ciiS9ET+O0L/5Fn4sjOSuPNaWCD3+8TRVNivsIr9idQrSpqfAIQLQZP8OW38cGXJ4ASXcG6FU32BL8+AQBML+EfKjszBLmaWPKC7EVXJxDuhocXjaZ0pzHgK1jVoMf8Mj4DkL7FE1RMXTs/CbBGntHKoYMLMZxV8fqmuISCmlaJPmujpYc3LTWQKT1ixs8S917e+SkKdG55HLIUCr+XYGxIMNftu7deSQ3OV29aJbVPRTY5yMIqnuGcyVomoYLMQ5hNoXtSodsa+WFOQMZTzlT2uUMr2bkXXAvGofa0PK9zyPnwM5I0xGUf4rxqg1JTGSlZi7QZ438dOskCCotljt3pjk1GrCttVXhvB3R+RXaabIrrUOjtK3AtWYd5QWVslueUTAKZEyWd+6hzI12QObo+3+U9qLH0hAqtJBRKPgbetmC7ErcJ68YDG83nXrLEqy7WOd83HTS+obNUu/qX1klPoIRlFoi2h0CCMh7SKinqxyFhGQ8JdJsERlDFIygkEQkgl106Y0LN8R6UH7T75D4pgAF1TA0MqN0yIBdedQppP32hppxG2mvvFdLGJSSlqxRkRVu08kiSHHVcYFYhZZ/o3bCdFe5z7Sh0lCSBP1H0aEOFko9HYwJyU+l2hlWa7EGZ3RNb0qqlP2ojN6VWqztuC7cEPRCZ333n8Zd4g1eMvW8ZqrKPcUvGjY6/Rsw323E9WUDhdvN0TlWx96xQ1HIm6tiLbMs03r/XkV5RkhWlZlRltqHb+KEzObGzwlNgMo0eTKdBeCqt7JhhcwM1/P1OVpS2bkaM87DU6G389fLyHZ6Rr8gzbCjSxVfIG/zwJPuK/Rvxek93zI6GxxqGb99BlSUPhoihJicD8eYrbehNcvT8/Dd4VZgnmh8wsjMTJ9uYNGEjFcmDsyFbrQ974kbJCUJBnxh9qRFs15yRgS6TwPBjqDo3VZqf3EZzgYXEdekdO3/ORc/U3Ff9qBtV6Md1e4BGV6wmt/P/vSKT6/CKrKWfXPnczr06iz1bkopxsHH/iU4WJgpIrQQqtMhKsBzfTG30J59MB6TWUFVhuZ/L4w6+AwzP0vDtj7DZo8/UAyxPwpuOd07r5FKdNIellV2hbTXW5Hqv/w8AAP//i8DCuw==" + return "eJysl0GPqzYQx+/5FKN3fz70mEOlqlLVSq30pN07cswE3DUeag+74ttXBkwSYsjDSU6R0fx/f8bD2PMdPrA/gmylqvEAwJoNHuHbb8PCtwNAiV453bIme4RfDwAA40P4h8rOhCBfk+NCkT3r6gjsurB41mhKfxwCvoOVDUbML8MaAPctHqFy1LXTSoI18IyWHj2cycFJqo8v6UpQ1LSS9UkbzT18aa6BTBkRE36SuPZy40cp9H5eTllKhV9LOGyIsdDtzdOoJIPzxZNWch1TIUYHIq0SGd4b0TpiUmSewqwKXZOUbmt0T3MSMpFyorIvPFoWp55xKbgPtaUVeZ1HV4S/O0khTtzFRdUGuaZyp2TN3AqH/3XoWSQUZstu7053zghyutJWpvc2oItPdF6TzXGdCr18Bb4l67FQVO7N8pSSUUB4ltz5e50L6YzO7a7Pm7wnNeaeUKHljEIphsDLFqxX4jph2XhgpflcS5b4qdUy59umk8ZXdOZql//SMukZlLTMDNH2JZCkTIS0klX9PCQtEyGJbpPBSKpEBKUkdgLIi3NnTKo5XoOKF+0++QcFEFCvqYGA2iwD8um3ziFtpy/VlPNIW+29Qlq5hOR0FUWWtUXLzyTJU+cUigpJPNC7YDvLri+0p9RRkgV+oBjRhpTk+6MxA7mqdDnDKk32RZndEpvTqrl/1UauSi3e7nVbuCYYgejczXe+/xJv8BP33rcMVeI+bs640fuvEdPNdngfkVC43Dy9l9Xee1Yqaj4T9d6LbOtouH8vI6MiZyty7VCWYkW3iUNndmInhUNiMt09mI6D8Fha4jXD5goq/H4ny1JbPyGGeZhrjDb+fH//AW/oPtFNsFCks6+UN/jpSfYD+y9yyz3dMDsYHmoY/voBsixdMEQOavIciBdfeUNvlqO3t78hqsI00fyEkY2ZONvGqAkrqcgenA3ZannYk2skHyEV9MDoe41gu+aEDug8CoQ/oer8WGlxchvMJV5kX5fesPPHVPSOmuuqH3R3FfpGC8nazJCjUTOUVtkpbavBoaGqwjI2XnH4PwAA///nLunK" } From 84a72948568035e086df2379e865bf5fb6571211 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Wed, 9 Jan 2019 14:08:16 +0100 Subject: [PATCH 13/14] Remove wrong alias to error client --- filebeat/docs/fields.asciidoc | 9 --------- filebeat/module/apache/_meta/fields.yml | 3 --- filebeat/module/apache/fields.go | 2 +- 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 5fab12c8845..1439d42bda5 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -311,15 +311,6 @@ alias to: log.level -- -*`apache2.error.client`*:: -+ --- -type: alias - -alias to: apache.error.client - --- - *`apache2.error.message`*:: + -- diff --git a/filebeat/module/apache/_meta/fields.yml b/filebeat/module/apache/_meta/fields.yml index 4cfa929b5b0..f5367ae335a 100644 --- a/filebeat/module/apache/_meta/fields.yml +++ b/filebeat/module/apache/_meta/fields.yml @@ -106,9 +106,6 @@ - name: level type: alias path: log.level - - name: client - type: alias - path: apache.error.client - name: message type: alias path: message diff --git a/filebeat/module/apache/fields.go b/filebeat/module/apache/fields.go index 10cb18b8f1f..b92d3e1bfff 100644 --- a/filebeat/module/apache/fields.go +++ b/filebeat/module/apache/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "eJysl0GPqzYQx+/5FKN3fz70mEOlqlLVSq30pN07cswE3DUeag+74ttXBkwSYsjDSU6R0fx/f8bD2PMdPrA/gmylqvEAwJoNHuHbb8PCtwNAiV453bIme4RfDwAA40P4h8rOhCBfk+NCkT3r6gjsurB41mhKfxwCvoOVDUbML8MaAPctHqFy1LXTSoI18IyWHj2cycFJqo8v6UpQ1LSS9UkbzT18aa6BTBkRE36SuPZy40cp9H5eTllKhV9LOGyIsdDtzdOoJIPzxZNWch1TIUYHIq0SGd4b0TpiUmSewqwKXZOUbmt0T3MSMpFyorIvPFoWp55xKbgPtaUVeZ1HV4S/O0khTtzFRdUGuaZyp2TN3AqH/3XoWSQUZstu7053zghyutJWpvc2oItPdF6TzXGdCr18Bb4l67FQVO7N8pSSUUB4ltz5e50L6YzO7a7Pm7wnNeaeUKHljEIphsDLFqxX4jph2XhgpflcS5b4qdUy59umk8ZXdOZql//SMukZlLTMDNH2JZCkTIS0klX9PCQtEyGJbpPBSKpEBKUkdgLIi3NnTKo5XoOKF+0++QcFEFCvqYGA2iwD8um3ziFtpy/VlPNIW+29Qlq5hOR0FUWWtUXLzyTJU+cUigpJPNC7YDvLri+0p9RRkgV+oBjRhpTk+6MxA7mqdDnDKk32RZndEpvTqrl/1UauSi3e7nVbuCYYgejczXe+/xJv8BP33rcMVeI+bs640fuvEdPNdngfkVC43Dy9l9Xee1Yqaj4T9d6LbOtouH8vI6MiZyty7VCWYkW3iUNndmInhUNiMt09mI6D8Fha4jXD5goq/H4ny1JbPyGGeZhrjDb+fH//AW/oPtFNsFCks6+UN/jpSfYD+y9yyz3dMDsYHmoY/voBsixdMEQOavIciBdfeUNvlqO3t78hqsI00fyEkY2ZONvGqAkrqcgenA3ZannYk2skHyEV9MDoe41gu+aEDug8CoQ/oer8WGlxchvMJV5kX5fesPPHVPSOmuuqH3R3FfpGC8nazJCjUTOUVtkpbavBoaGqwjI2XnH4PwAA///nLunK" + return "eJysl0FvqzgQx+/5FKPe68Mec1hptdJqV9onVWrvyDET8Kvx8OwhFd/+yYBJQgwpJD1VoPn//sxMxp5X+MR2D7KWqsQdAGs2uIeXv7oHLzuAHL1yumZNdg9/7gAA+pfwg/LGhCBfkuNMkT3qYg/smvDwqNHkft8FvIKVFUbMH90zAG5r3EPhqKmHJwlWxzNaevRwJAcHqT6/pMtBUVVL1gdtNLfwpbkEMnlEDPhB4tLLlR+l0PvxccpSKvxSwmFFjJmur95GJRmcT97UksuYCtE7EGmVyPDeiNoRkyLzEGZW6JKkdF2ie5iTkImUA+Vt5tGyOLSMU8F1qCWtyGs8uiz8u5IU4sRNXFStkEvKV0qWzLVw+KtBzyKhMFp2ayvdOCPI6UJbma5tQGcndF6T3eI6FXr+FfiarMdMUb42y0NKegHhWXLjb3XOpCM6t7o/r/Ke1BhnQoGWNzRK1gWeSzDfifOE6eCBmeFzKZnjSatpzpdNJ43P6IzdLn/SNOkbKGmZEaLtUyBJmQipJavycUhaJkIS02YDI6kSEZSSWAkgL46NManheAnKnlR98ncaIKCe0wMBtdgG5NNfvYW0nL7UUN5GWhrvBdLMJWTLVFFkWVu0/EiSPDVOoSiQxB29M7ax7NpMe0odJZvAdxQj2pCSfHs0bkDOKp3PsEKTfVJml8TGtGpun1XIWanJ1z2vhHOCEYjOXf3O11/iDZ5w7X3LUCFu486XQ+9lsfYqlIoajy299q5ZO+quyNPIqMibFbl0KHMxo1vFvXCN9HCr72opBoVdYnlcvTv2u2pfffGcfXAGFf7+JstSWz8gupWVS4w2/v34eIN3dCd0Ayz00egr5Q2+vWx+YvtFblrTBbOdYaPRMvz3BjLPXTBEDkryHIhnX9v20k2O3t//h6gKw9LxDSMLa+tmG70mzKRi825ryBbT85hcJXkPqaA7Rj9KBNtUB3RAx14g/BO6zvedFperzlziQ9YN0gU7/wxN76i67PpOd1WjL4yQTcUMOeo1Q2vljdK26BwaKgrM4+AVu98BAAD///dD0lE=" } From d7c8bbc489f921c6da9e9d3a1ca0647565473c5f Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 10 Jan 2019 22:38:06 +0100 Subject: [PATCH 14/14] Add migration for moved fields --- filebeat/module/apache/_meta/fields.yml | 32 +++++++++++++++++++++++++ filebeat/module/apache/fields.go | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/filebeat/module/apache/_meta/fields.yml b/filebeat/module/apache/_meta/fields.yml index f5367ae335a..2a4ba231b99 100644 --- a/filebeat/module/apache/_meta/fields.yml +++ b/filebeat/module/apache/_meta/fields.yml @@ -15,36 +15,47 @@ - name: remote_ip type: alias path: apache.access.remote_ip + migration: true - name: ssl.protocol type: alias path: apache.access.ssl.protocol + migration: true - name: ssl.cipher type: alias path: apache.access.ssl.cipher + migration: true - name: body_sent.bytes type: alias path: apache.access.body_sent.bytes + migration: true - name: user_name type: alias path: user.name + migration: true - name: method type: alias path: http.request.method + migration: true - name: url type: alias path: url.original + migration: true - name: http_version type: alias path: http.version + migration: true - name: response_code type: alias path: http.response.status_code + migration: true - name: referrer type: alias path: http.request.referrer + migration: true - name: agent type: alias path: user_agent.original + migration: true - name: user_agent type: group @@ -52,72 +63,93 @@ - name: device type: alias path: user_agent.device + migration: true - name: major type: alias path: user_agent.major + migration: true - name: minor type: alias path: user_agent.minor + migration: true - name: patch type: alias path: user_agent.patch + migration: true - name: name type: alias path: user_agent.name + migration: true - name: os type: alias path: user_agent.os.full_name + migration: true - name: os_major type: alias path: user_agent.os.major + migration: true - name: os_minor type: alias path: user_agent.os.minor + migration: true - name: os_name type: alias path: user_agent.os.name + migration: true - name: original type: alias path: user_agent.original + migration: true - name: geoip type: group fields: - name: continent_name type: alias path: source.geo.continent_name + migration: true - name: country_iso_code type: alias path: source.geo.country_iso_code + migration: true - name: location type: alias path: source.geo.location + migration: true - name: region_name type: alias path: source.geo.region_name + migration: true - name: city_name type: alias path: source.geo.city_name + migration: true - name: region_iso_code type: alias path: source.geo.region_iso_code + migration: true - name: error type: group fields: - name: level type: alias path: log.level + migration: true - name: message type: alias path: message + migration: true - name: pid type: alias path: process.pid + migration: true - name: tid type: alias path: process.thread.id + migration: true - name: module type: alias path: apache.error.module + migration: true - name: apache diff --git a/filebeat/module/apache/fields.go b/filebeat/module/apache/fields.go index b92d3e1bfff..4eb3cdf339d 100644 --- a/filebeat/module/apache/fields.go +++ b/filebeat/module/apache/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "eJysl0FvqzgQx+/5FKPe68Mec1hptdJqV9onVWrvyDET8Kvx8OwhFd/+yYBJQgwpJD1VoPn//sxMxp5X+MR2D7KWqsQdAGs2uIeXv7oHLzuAHL1yumZNdg9/7gAA+pfwg/LGhCBfkuNMkT3qYg/smvDwqNHkft8FvIKVFUbMH90zAG5r3EPhqKmHJwlWxzNaevRwJAcHqT6/pMtBUVVL1gdtNLfwpbkEMnlEDPhB4tLLlR+l0PvxccpSKvxSwmFFjJmur95GJRmcT97UksuYCtE7EGmVyPDeiNoRkyLzEGZW6JKkdF2ie5iTkImUA+Vt5tGyOLSMU8F1qCWtyGs8uiz8u5IU4sRNXFStkEvKV0qWzLVw+KtBzyKhMFp2ayvdOCPI6UJbma5tQGcndF6T3eI6FXr+FfiarMdMUb42y0NKegHhWXLjb3XOpCM6t7o/r/Ke1BhnQoGWNzRK1gWeSzDfifOE6eCBmeFzKZnjSatpzpdNJ43P6IzdLn/SNOkbKGmZEaLtUyBJmQipJavycUhaJkIS02YDI6kSEZSSWAkgL46NManheAnKnlR98ncaIKCe0wMBtdgG5NNfvYW0nL7UUN5GWhrvBdLMJWTLVFFkWVu0/EiSPDVOoSiQxB29M7ax7NpMe0odJZvAdxQj2pCSfHs0bkDOKp3PsEKTfVJml8TGtGpun1XIWanJ1z2vhHOCEYjOXf3O11/iDZ5w7X3LUCFu486XQ+9lsfYqlIoajy299q5ZO+quyNPIqMibFbl0KHMxo1vFvXCN9HCr72opBoVdYnlcvTv2u2pfffGcfXAGFf7+JstSWz8gupWVS4w2/v34eIN3dCd0Ayz00egr5Q2+vWx+YvtFblrTBbOdYaPRMvz3BjLPXTBEDkryHIhnX9v20k2O3t//h6gKw9LxDSMLa+tmG70mzKRi825ryBbT85hcJXkPqaA7Rj9KBNtUB3RAx14g/BO6zvedFperzlziQ9YN0gU7/wxN76i67PpOd1WjL4yQTcUMOeo1Q2vljdK26BwaKgrM4+AVu98BAAD///dD0lE=" + return "eJysmM+O4zYMxu95CmLvq0OPORQoChQt0AILzNwNRWZsdWTRpegZ5O0L/5vNJLIj2ZlToAy/7yeSkS1+hze8HEG32tR4ABArDo/w7bdh4dsBoMRg2LZiyR/h1wMAwPgl/ENl5/qgUBNLYcifbXUE4a5fPFt0ZTgOAd/B6wZnm1+GNQC5tHiEiqlrp5WI1+DnrA4Y4EwMJ23ePjSXYKhptdiTdVYu8GGlBnLlbDHZTxLXLF94jMEQPpdjSLHwawnGhgQL2375dlbSPfnNN62Wek6FGgnUkkpjK9ZjOqa03hOE4FTLJGTI7YJYEUrlMLatkXdTRGVSGE5UXoqAXtTpInhrlweyrpVC0wXkov+YydHHqUhcimeDUlOZaViLtIrxvw6DqKhC0nY5t/86dorYVtbrLR3XYxfvyMGS37LjeGiKM2NoyQcsDJW51Z2SPQqoIFq6ENNJ4zgjc/Yv7ku9FzRS7HWFXjY0dzEEppZ++be17H97hMPCMX4tWeK7NbdVWN9SdFuLOmspvQZp9L90W44NHEsyyRjWPwVjQSYVo9Vi6v0YSzKpGJHzeAPFgkoqBMVMMhEoqHPnXOzBlIdSPKlPKexu1R7mOd3aw+xsWApLuc1n2Vuk+Am7hWVZKeVJUSEtvCJvOakNebEevexJdKCODaoKST3US823oc4LXwobKPZI34T2UDEVzpEZ/m0/1IpSKgxjZck/qX7rYsnFs3J5VkOtSGVm6Hmt9FhwCW1GQuYvJ2P+ddnhO+beEhxVKhaXdh0KQVe5r+jxqBS/1ubevVqm4bp5H5niJ5v9pGbUpdrk2syTnxzj6XY99JCKKty9+B/gbnh0uDZLmR2Ns6qxJ9W0vHMetGDV//1OXrT1YbIYRlZS44zx5+vrD3hBfkeezPru/uSKsUHysOkNLx/Et/VcgR2AnUUv8NcP0GXJPRAx1BSkd/zJFcV5OHnaRPTy8jfMqjBd0RNAVkZPmzFGTVhIRRQlZQLlyFe3bzzEjZYjxIIegL7WCL5rTshA51Gg/9B3XRg7bR42DHCRjeQd7ys4f0xNz9Rcd/2gm9XoKwfMpmL2ORo1+9YqO2N9NRA6qios5wNfHf4PAAD//0mO0CA=" }