You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2021/09/30 11:54:03 UTC

[skywalking-swck] branch master updated: Add java agent injector manual. (#33)

This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-swck.git


The following commit(s) were added to refs/heads/master by this push:
     new c6a6c0f  Add java agent injector manual. (#33)
c6a6c0f is described below

commit c6a6c0f7f92c45f8558e60735c4e903beb4fa91a
Author: dashanji <71...@users.noreply.github.com>
AuthorDate: Thu Sep 30 19:53:58 2021 +0800

    Add java agent injector manual. (#33)
    
    * add feature-injector
    
    * add license
    
    * fix naming errors
    
    * add configmap
    * add a default configmap to save the default agent config
    * when create operator, the configmap will be created
    
    * add default annotation and validate func
    * add some annotation override template
    * add sidecar fields' default value
    * add some func to validate the agent config annotation
    
    * sidecar inject
    * users can choose different injection strategies through annotations
    * sidecar coverage is enabled by default, and agent coverage is the user's choice
    * agent.config will be overwritten by configmap
    * failure to inject will return an error annotation
    
    * add func test
    
    * update label
    
    * fix lint error
    
    * fix bug, refactor code and add feature
    * fix naming and version.
    * fix the bug about inject container.
    * use annotations.yaml to generate configmap and overlay the value of sidecar and agent
    * create a controller to watch the default configmap
    * add function to validate configmap's key and value
    
    * fix bug
    
    * remove validate function and add optional plugins
    * remove most of the validate function and retain the functions that validate service_name and backend_service.
    * add overridable annotations to use optioncal plugins.
    
    * add optional-reporter
    
    * update configmap , fix optinal plugins and add injector manual
    * delete the extra spaces in the configmap and update to the latest agent.config.
    * since "cp" does not support regular expressions , multiple options for plugins are implemented through "grep".
    * add java agent injector manual.
    
    * regenerate assets.gen.go
    
    * clean code and update doc
    * clean the configmap and only reserve agent.namespace and collector.backend_service
    * add java-agent-injector.md and java-agent-injector-usage.md
    
    * fix doc
    
    Co-authored-by: 吴晟 Wu Sheng <wu...@foxmail.com>
---
 config/operator/configmap/configmap.yaml           | 252 +---------------
 docs/examples/java-agent-injector-usage.md         | 255 ++++++++++++++++
 docs/java-agent-injector.md                        | 168 +++++++++++
 go.sum                                             |  86 +-----
 pkg/operator/injector/annotation.go                |   9 +-
 pkg/operator/injector/configmap.go                 |   4 +-
 pkg/operator/injector/injector.go                  |  65 ++---
 .../manifests/injector/templates/annotations.yaml  | 296 +------------------
 .../manifests/injector/templates/configmap.yaml    |  15 -
 pkg/operator/repo/assets.gen.go                    | 320 +--------------------
 10 files changed, 462 insertions(+), 1008 deletions(-)

diff --git a/config/operator/configmap/configmap.yaml b/config/operator/configmap/configmap.yaml
index 58c9d81..ebb7af2 100644
--- a/config/operator/configmap/configmap.yaml
+++ b/config/operator/configmap/configmap.yaml
@@ -23,260 +23,10 @@ metadata:
   namespace: skywalking-swck-system
 data:
   agent.config: |
-    # Licensed to the Apache Software Foundation (ASF) under one
-    # or more contributor license agreements.  See the NOTICE file
-    # distributed with this work for additional information
-    # regarding copyright ownership.  The ASF licenses this file
-    # to you under the Apache License, Version 2.0 (the
-    # "License"); you may not use this file except in compliance
-    # with the License.  You may obtain a copy of the License at
-    #
-    #     http://www.apache.org/licenses/LICENSE-2.0
-    #
-    # Unless required by applicable law or agreed to in writing, software
-    # distributed under the License is distributed on an "AS IS" BASIS,
-    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    # See the License for the specific language governing permissions and
-    # limitations under the License.
-
-    # The agent namespace
-    agent.namespace=${SW_AGENT_NAMESPACE:}
-
     # The service name in UI
     agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
 
-    # Instance name is the identity of an instance, should be unique in the service. If empty, SkyWalking agent will
-    # generate an 32-bit uuid. BY Default, SkyWalking uses UUID@hostname as the instance name. Max length is 50(UTF-8 char)
-    agent.instance_name=${SW_AGENT_INSTANCE_NAME:}
-
-    # The number of sampled traces per 3 seconds
-    # Negative or zero means off, by default
-    agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}
-
-    # Authentication active is based on backend setting, see application.yml for more details.
-    agent.authentication=${SW_AGENT_AUTHENTICATION:}
-
-    # The max amount of spans in a single segment.
-    # Through this config item, SkyWalking keep your application memory cost estimated.
-    agent.span_limit_per_segment=${SW_AGENT_SPAN_LIMIT:300}
-
-    # If the operation name of the first span is included in this set, this segment should be ignored. Multiple values should be separated by `,`.
-    agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}
-
-    # If true, SkyWalking agent will save all instrumented classes files in `/debugging` folder.
-    # SkyWalking team may ask for these files in order to resolve compatible problem.
-    agent.is_open_debugging_class=${SW_AGENT_OPEN_DEBUG:false}
-
-    # If true, SkyWalking agent will cache all instrumented classes files to memory or disk files (decided by class cache mode),
-    # allow other javaagent to enhance those classes that enhanced by SkyWalking agent.
-    agent.is_cache_enhanced_class=${SW_AGENT_CACHE_CLASS:false}
-
-    # The instrumented classes cache mode: MEMORY or FILE
-    # MEMORY: cache class bytes to memory, if instrumented classes is too many or too large, it may take up more memory
-    # FILE: cache class bytes in `/class-cache` folder, automatically clean up cached class files when the application exits
-    agent.class_cache_mode=${SW_AGENT_CLASS_CACHE_MODE:MEMORY}
-
-    # How depth the agent goes, when log all cause exceptions.
-    agent.cause_exception_depth=${SW_AGENT_CAUSE_EXCEPTION_DEPTH:5}
-
-    # Force reconnection period of grpc, based on grpc_channel_check_interval.
-    agent.force_reconnection_period=${SW_AGENT_FORCE_RECONNECTION_PERIOD:1}
-
-    # The operationName max length
-    # Notice, in the current practice, we don't recommend the length over 190.
-    agent.operation_name_threshold=${SW_AGENT_OPERATION_NAME_THRESHOLD:150}
-
-    # Keep tracing even the backend is not available if this value is true.
-    agent.keep_tracing=${SW_AGENT_KEEP_TRACING:false}
-
-    # The agent use gRPC plain text in default.
-    # If true, SkyWalking agent uses TLS even no CA file detected.
-    agent.force_tls=${SW_AGENT_FORCE_TLS:false}
-
-    # Limit the length of the ipv4 list size.
-    osinfo.ipv4_list_size=${SW_AGENT_OSINFO_IPV4_LIST_SIZE:10}
-
-    # grpc channel status check interval.
-    collector.grpc_channel_check_interval=${SW_AGENT_COLLECTOR_GRPC_CHANNEL_CHECK_INTERVAL:30}
-    # Agent heartbeat report period. Unit, second.
-    collector.heartbeat_period=${SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD:30}
-    # The agent sends the instance properties to the backend every
-    # collector.heartbeat_period * collector.properties_report_period_factor seconds
-    collector.properties_report_period_factor=${SW_AGENT_COLLECTOR_PROPERTIES_REPORT_PERIOD_FACTOR:10}
     # Backend service addresses.
     collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
-    # How long grpc client will timeout in sending data to upstream. Unit is second.
-    collector.grpc_upstream_timeout=${SW_AGENT_COLLECTOR_GRPC_UPSTREAM_TIMEOUT:30}
-    # Sniffer get profile task list interval.
-    collector.get_profile_task_interval=${SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL:20}
-    # Sniffer get agent dynamic config interval.
-    collector.get_agent_dynamic_config_interval=${SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL:20}
-    # If true, skywalking agent will enable periodically resolving DNS to update receiver service addresses.
-    collector.is_resolve_dns_periodically=${SW_AGENT_COLLECTOR_IS_RESOLVE_DNS_PERIODICALLY:false}
-
-    # Logging level
-    logging.level=${SW_LOGGING_LEVEL:INFO}
-    # Logging file_name
-    logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log}
-    # Log output. Default is FILE. Use CONSOLE means output to stdout.
-    logging.output=${SW_LOGGING_OUTPUT:FILE}
-    # Log files directory. Default is blank string, meaning use "{theSkywalkingAgentJarDir}/logs " to output logs.
-    # {theSkywalkingAgentJarDir} is the directory where the skywalking agent jar file is located
-    logging.dir=${SW_LOGGING_DIR:}
-    # Logger resolver: PATTERN or JSON. The default is PATTERN, which uses logging.pattern to print traditional text logs.
-    # JSON resolver prints logs in JSON format.
-    logging.resolver=${SW_LOGGING_RESOLVER:PATTERN}
-    # Logging format. There are all conversion specifiers:
-    #  * %level means log level.
-    #  * %timestamp means now of time with format yyyy-MM-dd HH:mm:ss:SSS.
-    #  * %thread means name of current thread.
-    #  * %msg means some message which user logged.
-    #  * %class means SimpleName of TargetClass.
-    #  * %throwable means a throwable which user called.
-    #  * %agent_name means agent.service_name. Only apply to the PatternLogger.
-    logging.pattern=${SW_LOGGING_PATTERN:%level %timestamp %thread %class : %msg %throwable}
-    # Logging max_file_size, default: 300 * 1024 * 1024 = 314572800
-    logging.max_file_size=${SW_LOGGING_MAX_FILE_SIZE:314572800}
-    # The max history log files. When rollover happened, if log files exceed this number,
-    # then the oldest file will be delete. Negative or zero means off, by default.
-    logging.max_history_files=${SW_LOGGING_MAX_HISTORY_FILES:-1}
-
-    # Listed exceptions would not be treated as an error. Because in some codes, the exception is being used as a way of controlling business flow.
-    # Besides, the annotation named IgnoredException in the trace toolkit is another way to configure ignored exceptions.
-    statuscheck.ignored_exceptions=${SW_STATUSCHECK_IGNORED_EXCEPTIONS:}
-    # The max recursive depth when checking the exception traced by the agent. Typically, we don't recommend setting this more than 10, which could cause a performance issue. Negative value and 0 would be ignored, which means all exceptions would make the span tagged in error status.
-    statuscheck.max_recursive_depth=${SW_STATUSCHECK_MAX_RECURSIVE_DEPTH:1}
-
-    # Max element count in the correlation context
-    correlation.element_max_number=${SW_CORRELATION_ELEMENT_MAX_NUMBER:3}
-
-    # Max value length of each element.
-    correlation.value_max_length=${SW_CORRELATION_VALUE_MAX_LENGTH:128}
-    # Tag the span by the key/value in the correlation context, when the keys listed here exist.
-    correlation.auto_tag_keys=${SW_CORRELATION_AUTO_TAG_KEYS:}
-    # The buffer size of collected JVM info.
-    jvm.buffer_size=${SW_JVM_BUFFER_SIZE:600}
-    # The buffer channel size.
-    buffer.channel_size=${SW_BUFFER_CHANNEL_SIZE:5}
-    # The buffer size.
-    buffer.buffer_size=${SW_BUFFER_BUFFER_SIZE:300}
-    # If true, skywalking agent will enable profile when user create a new profile task. Otherwise disable profile.
-    profile.active=${SW_AGENT_PROFILE_ACTIVE:true}
-    # Parallel monitor segment count
-    profile.max_parallel=${SW_AGENT_PROFILE_MAX_PARALLEL:5}
-    # Max monitor segment time(minutes), if current segment monitor time out of limit, then stop it.
-    profile.duration=${SW_AGENT_PROFILE_DURATION:10}
-    # Max dump thread stack depth
-    profile.dump_max_stack_depth=${SW_AGENT_PROFILE_DUMP_MAX_STACK_DEPTH:500}
-    # Snapshot transport to backend buffer size
-    profile.snapshot_transport_buffer_size=${SW_AGENT_PROFILE_SNAPSHOT_TRANSPORT_BUFFER_SIZE:50}
-    # If true, the agent collects and reports metrics to the backend.
-    meter.active=${SW_METER_ACTIVE:true}
-    # Report meters interval. The unit is second
-    meter.report_interval=${SW_METER_REPORT_INTERVAL:20}
-    #  Max size of the meter pool 
-    meter.max_meter_size=${SW_METER_MAX_METER_SIZE:500}
-    #  Mount the specific folders of the plugins. Plugins in mounted folders would work.
 
-    plugin.mount=${SW_MOUNT_FOLDERS:plugins,activations}
-    # Peer maximum description limit.
-    plugin.peer_max_length=${SW_PLUGIN_PEER_MAX_LENGTH:200}
-    # Exclude some plugins define in plugins dir.Plugin names is defined in [Agent plugin list](Plugin-list.md)
-    plugin.exclude_plugins=${SW_EXCLUDE_PLUGINS:}
-    # If true, trace all the parameters in MongoDB access, default is false. Only trace the operation, not include parameters.
-    plugin.mongodb.trace_param=${SW_PLUGIN_MONGODB_TRACE_PARAM:false}
-    # If set to positive number, the `WriteRequest.params` would be truncated to this length, otherwise it would be completely saved, which may cause performance problem.
-    plugin.mongodb.filter_length_limit=${SW_PLUGIN_MONGODB_FILTER_LENGTH_LIMIT:256}
-    # If true, trace all the DSL(Domain Specific Language) in ElasticSearch access, default is false.
-    plugin.elasticsearch.trace_dsl=${SW_PLUGIN_ELASTICSEARCH_TRACE_DSL:false}
-    # If true, the fully qualified method name will be used as the endpoint name instead of the request URL, default is false.
-    plugin.springmvc.use_qualified_name_as_endpoint_name=${SW_PLUGIN_SPRINGMVC_USE_QUALIFIED_NAME_AS_ENDPOINT_NAME:false}
-    # If true, the fully qualified method name will be used as the operation name instead of the given operation name, default is false.
-    plugin.toolit.use_qualified_name_as_operation_name=${SW_PLUGIN_TOOLIT_USE_QUALIFIED_NAME_AS_OPERATION_NAME:false}
-    # If set to true, the parameters of the sql (typically `java.sql.PreparedStatement`) would be collected.
-    plugin.jdbc.trace_sql_parameters=${SW_JDBC_TRACE_SQL_PARAMETERS:false}
-    # If set to positive number, the `db.sql.parameters` would be truncated to this length, otherwise it would be completely saved, which may cause performance problem.
-    plugin.jdbc.sql_parameters_max_length=${SW_PLUGIN_JDBC_SQL_PARAMETERS_MAX_LENGTH:512}
-    # If set to positive number, the `db.statement` would be truncated to this length, otherwise it would be completely saved, which may cause performance problem.
-    plugin.jdbc.sql_body_max_length=${SW_PLUGIN_JDBC_SQL_BODY_MAX_LENGTH:2048}
-    # If true, trace all the query parameters(include deleteByIds and deleteByQuery) in Solr query request, default is false.
-    plugin.solrj.trace_statement=${SW_PLUGIN_SOLRJ_TRACE_STATEMENT:false}
-    # If true, trace all the operation parameters in Solr request, default is false.
-    plugin.solrj.trace_ops_params=${SW_PLUGIN_SOLRJ_TRACE_OPS_PARAMS:false}
-    # If true, trace all middleware/business handlers that are part of the Light4J handler chain for a request.
-    plugin.light4j.trace_handler_chain=${SW_PLUGIN_LIGHT4J_TRACE_HANDLER_CHAIN:false}
-    # If true, the transaction definition name will be simplified.
-    plugin.springtransaction.simplify_transaction_definition_name=${SW_PLUGIN_SPRINGTRANSACTION_SIMPLIFY_TRANSACTION_DEFINITION_NAME:false}
-    #  Threading classes (`java.lang.Runnable` and `java.util.concurrent.Callable`) and their subclasses, including anonymous inner classes whose name match any one of the `THREADING_CLASS_PREFIXES` (splitted by `,`) will be instrumented, make sure to only specify as narrow prefixes as what you're expecting to instrument, (`java.` and `javax.` will be ignored due to safety issues)
-    plugin.jdkthreading.threading_class_prefixes=${SW_PLUGIN_JDKTHREADING_THREADING_CLASS_PREFIXES:}
-    #  This config item controls that whether the Tomcat plugin should collect the parameters of the request. Also, activate implicitly in the profiled trace. 
-    plugin.tomcat.collect_http_params=${SW_PLUGIN_TOMCAT_COLLECT_HTTP_PARAMS:false}
-    #  This config item controls that whether the SpringMVC plugin should collect the parameters of the request, when your Spring application is based on Tomcat, consider only setting either `plugin.tomcat.collect_http_params` or `plugin.springmvc.collect_http_params`. Also, activate implicitly in the profiled trace. 
-    plugin.springmvc.collect_http_params=${SW_PLUGIN_SPRINGMVC_COLLECT_HTTP_PARAMS:false}
-    #  This config item controls that whether the HttpClient plugin should collect the parameters of the request 
-    plugin.httpclient.collect_http_params=${SW_PLUGIN_HTTPCLIENT_COLLECT_HTTP_PARAMS:false}
-    #  When `COLLECT_HTTP_PARAMS` is enabled, how many characters to keep and send to the OAP backend, use negative values to keep and send the complete parameters, NB. this config item is added for the sake of performance.  
-    plugin.http.http_params_length_threshold=${SW_PLUGIN_HTTP_HTTP_PARAMS_LENGTH_THRESHOLD:1024}
-    #  When `include_http_headers` declares header names, this threshold controls the length limitation of all header values. use negative values to keep and send the complete headers. Note. this config item is added for the sake of performance. 
-    plugin.http.http_headers_length_threshold=${SW_PLUGIN_HTTP_HTTP_HEADERS_LENGTH_THRESHOLD:2048}
-    #  Set the header names, which should be collected by the plugin. Header name must follow `javax.servlet.http` definition. Multiple names should be split by comma.
-    plugin.http.include_http_headers=${SW_PLUGIN_HTTP_INCLUDE_HTTP_HEADERS:}
-    #  This config item controls that whether the Feign plugin should collect the http body of the request. 
-    plugin.feign.collect_request_body=${SW_PLUGIN_FEIGN_COLLECT_REQUEST_BODY:false}
-    #  When `COLLECT_REQUEST_BODY` is enabled, how many characters to keep and send to the OAP backend, use negative values to keep and send the complete body.  
-    plugin.feign.filter_length_limit=${SW_PLUGIN_FEIGN_FILTER_LENGTH_LIMIT:1024}
-    #  When `COLLECT_REQUEST_BODY` is enabled and content-type start with SUPPORTED_CONTENT_TYPES_PREFIX, collect the body of the request , multiple paths should be separated by `,`  
-    plugin.feign.supported_content_types_prefix=${SW_PLUGIN_FEIGN_SUPPORTED_CONTENT_TYPES_PREFIX:application/json,text/}
-    # If true, trace all the influxql(query and write) in InfluxDB access, default is true.
-    plugin.influxdb.trace_influxql=${SW_PLUGIN_INFLUXDB_TRACE_INFLUXQL:true}
-    #  Apache Dubbo consumer collect `arguments` in RPC call, use `Object#toString` to collect `arguments`. 
-    plugin.dubbo.collect_consumer_arguments=${SW_PLUGIN_DUBBO_COLLECT_CONSUMER_ARGUMENTS:false}
-    #  When `plugin.dubbo.collect_consumer_arguments` is `true`, Arguments of length from the front will to the OAP backend 
-    plugin.dubbo.consumer_arguments_length_threshold=${SW_PLUGIN_DUBBO_CONSUMER_ARGUMENTS_LENGTH_THRESHOLD:256}
-    #  Apache Dubbo provider collect `arguments` in RPC call, use `Object#toString` to collect `arguments`. 
-    plugin.dubbo.collect_provider_arguments=${SW_PLUGIN_DUBBO_COLLECT_PROVIDER_ARGUMENTS:false}
-    #  When `plugin.dubbo.provider_consumer_arguments` is `true`, Arguments of length from the front will to the OAP backend 
-    plugin.dubbo.consumer_provider_length_threshold=${SW_PLUGIN_DUBBO_CONSUMER_PROVIDER_LENGTH_THRESHOLD:256}
-    #  A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. 
-    plugin.kafka.bootstrap_servers=${SW_KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
-    #  Timeout period of reading topics from the Kafka server, the unit is second. 
-    plugin.kafka.get_topic_timeout=${SW_GET_TOPIC_TIMEOUT:10}
-    #  Kafka producer configuration.
-    plugin.kafka.consumer_config=${SW_PLUGIN_KAFKA_CONSUMER_CONFIG:}
-    # Kafka producer configuration. Read [producer configure](http://kafka.apache.org/24/documentation.html#producerconfigs)
-    # to get more details. Check [Kafka report doc](How-to-enable-kafka-reporter.md) for more details and examples.
-    plugin.kafka.producer_config=${SW_PLUGIN_KAFKA_PRODUCER_CONFIG:}
-    #  Specify which Kafka topic name for Meter System data to report to. 
-    plugin.kafka.topic_meter=${SW_PLUGIN_KAFKA_TOPIC_METER:skywalking-meters}
-    #  Specify which Kafka topic name for JVM metrics data to report to. 
-    plugin.kafka.topic_metrics=${SW_PLUGIN_KAFKA_TOPIC_METRICS:skywalking-metrics}
-    #  Specify which Kafka topic name for traces data to report to. 
-    plugin.kafka.topic_segment=${SW_PLUGIN_KAFKA_TOPIC_SEGMENT:skywalking-segments}
-    #  Specify which Kafka topic name for Thread Profiling snapshot to report to. 
-    plugin.kafka.topic_profiling=${SW_PLUGIN_KAFKA_TOPIC_PROFILINGS:skywalking-profilings}
-    #  Specify which Kafka topic name for the register or heartbeat data of Service Instance to report to. 
-    plugin.kafka.topic_management=${SW_PLUGIN_KAFKA_TOPIC_MANAGEMENT:skywalking-managements}
-    #  isolate multi OAP server when using same Kafka cluster (final topic name will append namespace before Kafka topics with `-` ).  
-    plugin.kafka.namespace=${SW_KAFKA_NAMESPACE:}
-    #   Match spring beans with regular expression for the class name. Multiple expressions could be separated by a comma. This only works when `Spring annotation plugin` has been activated. 
-    plugin.springannotation.classname_match_regex=${SW_SPRINGANNOTATION_CLASSNAME_MATCH_REGEX:}
-    #  Whether or not to transmit logged data as formatted or un-formatted. 
-    plugin.toolkit.log.transmit_formatted=${SW_PLUGIN_TOOLKIT_LOG_TRANSMIT_FORMATTED:true}
-    #  Specify which grpc server's host for log data to report to. 
-    plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1}
-    #  Specify which grpc server's port for log data to report to. 
-    plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
-    #  Specify the maximum size of log data for grpc client to report to. 
-    plugin.toolkit.log.grpc.reporter.max_message_size=${SW_PLUGIN_TOOLKIT_LOG_GRPC_REPORTER_MAX_MESSAGE_SIZE:10485760}
-    #  How long grpc client will timeout in sending data to upstream. Unit is second.
-    plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_PLUGIN_TOOLKIT_LOG_GRPC_REPORTER_UPSTREAM_TIMEOUT:30}
-    #  If set to true, the parameters of Redis commands would be collected by Lettuce agent.
-    plugin.lettuce.trace_redis_parameters=${SW_PLUGIN_LETTUCE_TRACE_REDIS_PARAMETERS:false}
-    #  If set to positive number and `plugin.lettuce.trace_redis_parameters` is set to `true`, Redis command parameters would be collected and truncated to this length.
-    plugin.lettuce.redis_parameter_max_length=${SW_PLUGIN_LETTUCE_REDIS_PARAMETER_MAX_LENGTH:128}
-    # If set to true, the parameters of the cypher would be collected.
-    plugin.neo4j.trace_cypher_parameters=${SW_PLUGIN_NEO4J_TRACE_CYPHER_PARAMETERS:false}
-    # If set to positive number, the `db.cypher.parameters` would be truncated to this length, otherwise it would be completely saved, which may cause performance problem.
-    plugin.neo4j.cypher_parameters_max_length=${SW_PLUGIN_NEO4J_CYPHER_PARAMETERS_MAX_LENGTH:512}
-    # If set to positive number, the `db.statement` would be truncated to this length, otherwise it would be completely saved, which may cause performance problem.
-    plugin.neo4j.cypher_body_max_length=${SW_PLUGIN_NEO4J_CYPHER_BODY_MAX_LENGTH:2048}
\ No newline at end of file
+    # Please refer to https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/configurations/#table-of-agent-configuration-properties to get more details.
\ No newline at end of file
diff --git a/docs/examples/java-agent-injector-usage.md b/docs/examples/java-agent-injector-usage.md
new file mode 100644
index 0000000..ab5ee50
--- /dev/null
+++ b/docs/examples/java-agent-injector-usage.md
@@ -0,0 +1,255 @@
+# Java agent injector Usage
+
+In this example, you will learn how to use the java agent injector in three ways.
+
+## Install injector
+
+The java agent injector is a component of the operator, so you need to follow [Operator installation instrument](../../README.md#operator) to install the operator firstly.
+
+## Use default configuration
+
+At first, set the injection label in your namespace as below.
+
+```shell
+kubectl label namespace default(your namespace) swck-injection=enabled
+```
+
+Then add `swck-java-agent-injected: "true"` in the labels of yaml file as below.
+
+```
+apiVersion: v1
+kind: Pod
+metadata:
+  name: inject-demo
+  labels:
+    swck-java-agent-injected: "true"
+    app: demo
+  namespace: default
+spec:
+  containers:
+  - name: demo
+    image: dashanji/swck-spring-demo:v0.0.3
+    command: ["java"]
+    args: ["-jar","$(AGENT_OPTS)","-jar","/app.jar"]
+   
+```
+
+Get injected resources as below:
+
+```
+spec:
+  containers:
+  - args:
+    - -jar
+    - $(AGENT_OPTS)
+    - -jar
+    - /app.jar
+    command:
+    - java
+    env:
+    - name: AGENT_OPTS
+      value: -javaagent:/sky/agent/skywalking-agent.jar
+    image: dashanji/swck-spring-demo:v0.0.3
+    name: demo
+    - mountPath: /sky/agent
+      name: sky-agent
+    - mountPath: /sky/agent/config
+      name: java-agent-configmap-volume
+  initContainers:
+  - args:
+    - -c
+    - mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent
+    command:
+    - sh
+    image: apache/skywalking-java-agent:8.7.0-jdk8
+    name: inject-skywalking-agent
+    volumeMounts:
+    - mountPath: /sky/agent
+      name: sky-agent
+  volumes:
+  - emptyDir: {}
+    name: sky-agent
+  - configMap:
+      name: skywalking-swck-java-agent-configmap
+    name: java-agent-configmap-volume
+```
+
+```shell
+$ kubectl get configmap skywalking-swck-java-agent-configmap -n default(your namespace)
+NAME                                   DATA   AGE
+skywalking-swck-java-agent-configmap   1      61s
+```
+
+## Use annotation to override sidecar configuration
+
+At first, set the injection label in your namespace as below.
+
+```shell
+kubectl label namespace default(your namespace) swck-injection=enabled
+```
+
+Then add `swck-java-agent-injected: "true"` in the labels of yaml file and add the [sidecar configuration](../java-agent-injector.md#configure-sidecar) to the annotations as below.
+
+```
+apiVersion: v1
+kind: Pod
+metadata:
+  labels:
+    swck-java-agent-injected: "true"
+  annotations:
+    sidecar.skywalking.apache.org/initcontainer.Name: "test-inject-agent"
+    sidecar.skywalking.apache.org/initcontainer.Image: "apache/skywalking-java-agent:8.5.0-jdk8"
+    sidecar.skywalking.apache.org/initcontainer.Command: "sh"
+    sidecar.skywalking.apache.org/initcontainer.args.Option: "-c"
+    sidecar.skywalking.apache.org/initcontainer.args.Command: "mkdir -p /skytest/agent && cp -r /skywalking/agent/* /skytest/agent"
+    sidecar.skywalking.apache.org/sidecarVolumeMount.MountPath: "/skytest/agent"
+    sidecar.skywalking.apache.org/configmapVolumeMount.MountPath: "/skytest/agent/config"
+    sidecar.skywalking.apache.org/configmapVolume.ConfigMap.Name: "haha"
+    sidecar.skywalking.apache.org/env.Value: "-javaagent:/skytest/agent/skywalking-agent.jar"
+  name: inject2
+  namespace: default
+spec:
+  containers:
+  - name: demo
+    image: dashanji/swck-spring-demo:v0.0.3
+    command: ["java"]
+    args: ["-jar","$(AGENT_OPTS)","-jar","/app.jar"]
+```
+
+Get injected resources as below:
+
+```
+spec:
+  containers:
+  - args:
+    - -jar
+    - $(AGENT_OPTS)
+    - -jar
+    - /app.jar
+    command:
+    - java
+    env:
+    - name: AGENT_OPTS
+      value: -javaagent:/skytest/agent/skywalking-agent.jar
+    image: dashanji/swck-spring-demo:v0.0.3
+    name: demo
+    - mountPath: /skytest/agent
+      name: sky-agent
+    - mountPath: /skytest/agent/config
+      name: java-agent-configmap-volume
+  initContainers:
+  - args:
+    - -c
+    - mkdir -p /skytest/agent && cp -r /skywalking/agent/* /skytest/agent
+    command:
+    - sh
+    image: apache/skywalking-java-agent:8.5.0-jdk8
+    name: test-inject-agent
+    volumeMounts:
+    - mountPath: /skytest/agent
+      name: sky-agent
+  volumes:
+  - emptyDir: {}
+    name: sky-agent
+  - configMap:
+      name: haha
+    name: java-agent-configmap-volume
+```
+
+```shell
+$ kubectl get configmap skywalking-swck-java-agent-configmap -n default(your namespace)
+NAME                                   DATA   AGE
+skywalking-swck-java-agent-configmap   1      61s
+```
+
+#### Use annotation to set the coverage strategy and override the agent configuration
+
+At first, set the injection label in your namespace as below.
+
+```shell
+kubectl label namespace default(your namespace) swck-injection=enabled
+```
+
+Then add `swck-java-agent-injected: "true"` in the labels of yaml file and [agent configuration](../java-agent-injector.md#use-annotations-to-overlay-default-agent-configuration) and [sidecar configuration](../java-agent-injector.md#configure-sidecar) to annotations as below.
+
+
+```
+apiVersion: v1
+kind: Pod
+metadata:
+  labels:
+    swck-java-agent-injected: "true"
+  annotations:
+    strategy.skywalking.apache.org/inject.Container: "demo"
+    strategy.skywalking.apache.org/agent.Overlay: "true"
+    agent.skywalking.apache.org/agent.sample_n_per_3_secs: "6"
+    agent.skywalking.apache.org/agent.class_cache_mode: "MEMORY"
+    agent.skywalking.apache.org/agent.ignore_suffix: "'jpg,.jpeg'"
+    plugins.skywalking.apache.org/plugin.mount: "'plugins,activations'"
+    plugins.skywalking.apache.org/plugin.mongodb.trace_param: "true"
+    plugins.skywalking.apache.org/plugin.influxdb.trace_influxql: "false"
+    optional.skywalking.apache.org: "trace|webflux|cloud-gateway-2.1.x"
+    optional-reporter.skywalking.apache.org: "kafka"
+  name: inject3
+  namespace: default
+spec:
+  containers:
+  - name: nginx
+    image: nginx:1.16.1
+  - name: demo
+    image: dashanji/swck-spring-demo:v0.0.3
+    command: ["java"]
+    args: ["-jar","$(AGENT_OPTS)","-jar","/app.jar"]
+```
+
+Get injected resources as below:
+
+```
+spec:
+  containers:
+  - image: nginx:1.16.1
+    imagePullPolicy: IfNotPresent
+    name: nginx
+  - args:
+    - -jar
+    - $(AGENT_OPTS)
+    - -jar
+    - /app.jar
+    command:
+    - java
+    env:
+    - name: AGENT_OPTS
+      value: -javaagent:/sky/agent/skywalking-agent.jar=agent.ignore_suffix='jpg,.jpeg',agent.sample_n_per_3_secs=6,agent.class_cache_mode=MEMORY,plugin.mount='plugins,activations',plugin.influxdb.trace_influxql=false,plugin.mongodb.trace_param=true
+    image: dashanji/swck-spring-demo:v0.0.3
+    name: demo
+    - mountPath: /sky/agent
+      name: sky-agent
+    - mountPath: /sky/agent/config
+      name: java-agent-configmap-volume
+  initContainers:
+  - args:
+    - -c
+    - mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent && cd /sky/agent/optional-plugins/&&
+      ls | grep -E "trace|webflux|cloud-gateway-2.1.x"  | xargs -i cp {} /sky/agent/plugins/
+      && cd /sky/agent/optional-reporter-plugins/&& ls | grep -E "kafka"  | xargs
+      -i cp {} /sky/agent/plugins/
+    command:
+    - sh
+    image: apache/skywalking-java-agent:8.7.0-jdk8
+    name: inject-skywalking-agent
+    volumeMounts:
+    - mountPath: /sky/agent
+      name: sky-agent
+  volumes:
+  - emptyDir: {}
+    name: sky-agent
+  - configMap:
+      name: skywalking-swck-java-agent-configmap
+    name: java-agent-configmap-volume
+```
+
+```shell
+$ kubectl get configmap skywalking-swck-java-agent-configmap -n default
+NAME                                   DATA   AGE
+skywalking-swck-java-agent-configmap   1      17s
+```
diff --git a/docs/java-agent-injector.md b/docs/java-agent-injector.md
new file mode 100644
index 0000000..44bab45
--- /dev/null
+++ b/docs/java-agent-injector.md
@@ -0,0 +1,168 @@
+# Java agent injector Manual
+
+To use the java agent more natively, we propose the java agent injector to inject the agent sidecar into a pod.
+
+When enabled in a pod's namespace, the injector injects the java agent container at pod creation time using a mutating webhook admission controller. By rendering the java agent to a shared volume, containers within the pod can use the java agent.
+ 
+The following sections describe how to configure the agent, if you want to try it directly, please see [Usage](examples/java-agent-injector-usage) for more details.
+
+## Install Injector
+
+The java agent injector is a component of the operator, so you need to follow [Operator installation instrument](../README.md#operator) to install the operator firstly.
+
+## Active the java agent injection
+
+We have two granularities here: namespace and pod.
+
+| Resource  | Label               | Enabled value | Disabled value |
+| --------- | ------------------- | ------------- | -------------- |
+| Namespace | swck-injection      | enabled       | disabled       |
+| Pod       | swck-java-agent-injected | "true"        | "false"        |
+
+The injector is configured with the following logic:
+
+1. If either label is disabled, the pod is not injected.
+2. If two labels are enabled, the pod is injected.
+
+Follow the next steps to active java agent injection.
+
+* Label the namespace with `swck-injection=enabled` 
+
+```shell
+$ kubectl label namespace default(your namespace) swck-injection=enabled
+```
+
+* Add label `swck-java-agent-injected: "true"` to the pod, and get the result as below.
+
+```shell
+$ kubectl get pod -l swck-java-agent-injected=true
+NAME          READY   STATUS    RESTARTS   AGE
+inject-demo   1/1     Running   0          2d2h
+```
+
+## The ways to configure the agent
+
+The java agent injector supports a precedence order to configure the agent:
+
+``` Annotations > Configmap > Default configmap```
+
+### Annotations
+
+Annotations are described in [kubernetes annotations doc](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/).
+
+We support annotations in [agent annotations](#Use-annotations-to-overlay-default-agent-configuration) and [sidecar annotations](#configure-sidecar).
+
+### Configmap
+
+Configmap is described in [kubernetes configmap doc](https://kubernetes.io/docs/concepts/configuration/configmap/).
+
+We need to use configmap to set [agent.config](https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/configurations/#table-of-agent-configuration-properties) so that we can modify the agent configuration without entering the container. 
+
+If there are different configmap in the namepsace, you can choose a configmap by setting [sidecar annotations](#configure-sidecar); If there is no configmap, the injector will create a default configmap. 
+
+### Default configmap
+
+The injector will create the default configmap to overlay the `agent.config` in the agent container. 
+
+The default configmap is shown as below, one is `agent.service_name` and the string can't be empty; the other is `collector.backend_service` and it needs to be a legal IP address and port, the other fields need to be guaranteed by users themselves. Users can change it as their default configmap.
+
+```
+data:
+  agent.config: |
+    # The service name in UI
+    agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
+
+    # Backend service addresses.
+    collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
+
+    # Please refer to https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/configurations/#table-of-agent-configuration-properties to get more details.
+```
+
+To avoid the default configmap deleting by mistake, we use a configmap controller to watch the default configmap. In addition, if the user applies an invalid configuration, such as a malformed `backend_service`, the controller will use the default configmap.
+
+## Configure the agent
+
+The injector supports two methods to configure agent:
+
+* Only use the default configuration.
+* Use annotations to overlay the default configuration.
+
+### Use the default agent configuration
+
+After activating the java agent injection, if not set the annotations, the injector will use the default agent configuration directly as below.
+
+```
+initContainers:
+  - args:
+    - -c
+    - mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent
+    command:
+    - sh
+    image: apache/skywalking-java-agent:8.7.0-jdk8
+    name: inject-skywalking-agent
+    volumeMounts:
+    - mountPath: /sky/agent
+      name: sky-agent
+volumes:
+  - emptyDir: {}
+    name: sky-agent
+  - configMap:
+      name: skywalking-swck-java-agent-configmap
+    name: java-agent-configmap-volume
+```
+
+### Use annotations to overlay default agent configuration
+
+The injector can recognize five kinds of annotations to configure the agent as below.
+
+#### 1. strategy configuration
+
+The strategy configuration is the annotation as below.
+
+| Annotation key                                    | Description                                                  | Annotation Default value |
+| ------------------------------------------------- | ------------------------------------------------------------ | ------------------------ |
+| `strategy.skywalking.apache.org/inject.Container` | Select the injected container, if not set, inject all containers. | not set                  |
+| `strategy.skywalking.apache.org/agent.Overlay`    | Whether to overlay the agent configuration. If set true, then you can see the next details to configure the agent. If set false, then you can skip [Configure agent](#configure-agent). | `false`                  |
+
+#### 2. agent configuration
+
+The agent configuration is the annotation like `agent.skywalking.apache.org/{option}: {value}`, and the option support  `agent.xxx 、osinfo.xxx 、collector.xxx 、 logging.xxx 、statuscheck.xxx 、correlation.xxx 、jvm.xxx 、buffer.xxx 、 profile.xxx 、 meter.xxx 、 log.xxx` in [agent.config](https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/configurations/#table-of-agent-configuration-properties), such as `agent.skywalking.apache.org/agent.namespace`, `agen [...]
+
+#### 3. plugins configuration
+
+The plugins configuration is the annotation like `plugins.skywalking.apache.org/{option}: {value}`, and the option only support `plugin.xxx` in the [agent.config](https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/configurations/#table-of-agent-configuration-properties), such as `plugins.skywalking.apache.org/plugin.mount`, ``plugins.skywalking.apache.org/plugin.mongodb.trace_param``, etc. 
+
+#### 4. optional plugin configuration
+
+The optional plugin configuration is the annotation as below.
+
+| Annotation key                   | Description                                                  | Annotation value |
+| -------------------------------- | ------------------------------------------------------------ | ---------------- |
+| `optional.skywalking.apache.org` | Select the optional plugin which needs to be moved to the directory(/plugins). Users can select several optional plugins by separating from `|`, such as `trace|webflux|cloud-gateway-2.1.x`. | not set          |
+
+#### 5. optional reporter plugin configuration
+
+The optional reporter plugin configuration is the annotation as below.
+
+| Annotation key                            | Description                                                  | Annotation value |
+| ----------------------------------------- | ------------------------------------------------------------ | ---------------- |
+| `optional-reporter.skywalking.apache.org` | Select the optional reporter plugin which needs to be moved to the directory(/plugins). Users can select several optional reporter plugins by separating from `|`, such as `kafka`. | not set          |
+
+## Configure sidecar
+
+The injector can recognize the following annotations to configure the sidecar:
+
+| Annotation key                                               | Description                                                  | Annotation Default value                                     |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `sidecar.skywalking.apache.org/initcontainer.Name`           | The name of the injected java agent container.               | `inject-skywalking-agent`                                    |
+| `sidecar.skywalking.apache.org/initcontainer.Image`          | The container image of the injected java agent container.    | `apache/skywalking-java-agent:8.7.0-jdk8`                    |
+| `sidecar.skywalking.apache.org/initcontainer.Command`        | The command of the injected java agent container.            | `sh`                                                         |
+| `sidecar.skywalking.apache.org/initcontainer.args.Option`    | The args option of the injected java agent container.       | `-c`                                                         |
+| `sidecar.skywalking.apache.org/initcontainer.args.Command`   | The args command of  the injected java agent container.      | `mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent` |
+| `sidecar.skywalking.apache.org/sidecarVolume.Name`           | The name of sidecar Volume.                                  | `sky-agent`                                                  |
+| `sidecar.skywalking.apache.org/sidecarVolumeMount.MountPath` | Mount path of the agent directory in the injected container. | `/sky/agent`                                                 |
+| `sidecar.skywalking.apache.org/configmapVolume.Name`         | The name of configmap volume.                                | `java-agent-configmap-volume`                                |
+| `sidecar.skywalking.apache.org/configmapVolumeMount.MountPath` | Mount path of the configmap in the injected container        | `/sky/agent/config`                                          |
+| `sidecar.skywalking.apache.org/configmapVolume.ConfigMap.Name` | The name pf configmap used in the injected container as `agent.config ` | `skywalking-swck-java-agent-configmap`                       |
+| `sidecar.skywalking.apache.org/env.Name`                     | Environment Name used by the injected container (application container). | `AGENT_OPTS`                                                 |
+| `sidecar.skywalking.apache.org/env.Value`                    | Environment variables used by the injected container (application container). | `-javaagent:/sky/agent/skywalking-agent.jar`                 |
diff --git a/go.sum b/go.sum
index 8403523..089cdf8 100644
--- a/go.sum
+++ b/go.sum
@@ -1,16 +1,13 @@
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo=
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
 cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
 cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
 cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
 cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
 cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
-cloud.google.com/go v0.51.0 h1:PvKAVQWCtlGUSlZkGW3QLelKaWq7KYv/MW1EboG8bfM=
 cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw=
 cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
 cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
-cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0=
 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
 cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
 cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
@@ -72,7 +69,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
-github.com/apache/skywalking-cli v0.0.0-20201125155244-ffee47d2e83d h1:vJeCfqKTLGQXGUy3+dYRNclCJgRsj3VQiCff/+yvfMA=
 github.com/apache/skywalking-cli v0.0.0-20201125155244-ffee47d2e83d/go.mod h1:kUqj2ESaiYz89JFJUr+cL6EDmzlEYSrlEMOkWg9wuS4=
 github.com/apache/skywalking-cli v0.0.0-20210209032327-04a0ce08990f h1:DknnvUn5ZR1hRtS42stGr3O6REwBFh6iyotoCJ2jFZ8=
 github.com/apache/skywalking-cli v0.0.0-20210209032327-04a0ce08990f/go.mod h1:EMKZ5MAEnCrNTPxqWu3s1QgnoUDQEO0oS+ohNB09JE8=
@@ -84,15 +80,12 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
-github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs=
 github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
 github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
@@ -146,13 +139,11 @@ github.com/emicklei/go-restful-swagger12 v0.0.0-20201014110547-68ccff494617 h1:j
 github.com/emicklei/go-restful-swagger12 v0.0.0-20201014110547-68ccff494617/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M=
 github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses=
 github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
@@ -171,9 +162,7 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg=
 github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
-github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
 github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 github.com/go-logr/logr v0.3.0 h1:q4c+kbcR0d5rSurhBR8dIgieOaYpXtsdTYfx22Cu6rs=
 github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
@@ -231,12 +220,10 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
 github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA=
 github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -247,7 +234,6 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
 github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
 github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
@@ -257,7 +243,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
 github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
 github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
 github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
 github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
@@ -265,15 +250,12 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
 github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
 github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -285,7 +267,6 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
 github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -321,7 +302,6 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b
 github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
@@ -330,7 +310,6 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
 github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
 github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
 github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs=
 github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
@@ -344,7 +323,6 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
 github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=
 github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -355,11 +333,9 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
 github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -390,7 +366,6 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
 github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
 github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
@@ -433,16 +408,13 @@ github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXW
 github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ=
 github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
 github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ=
 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
 github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4=
 github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs=
 github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
@@ -451,7 +423,6 @@ github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtP
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -461,28 +432,22 @@ github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndr
 github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
-github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
 github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA=
 github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
 github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
 github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
 github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
@@ -497,7 +462,6 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg
 github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
@@ -514,14 +478,12 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU
 github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
 github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
 github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
 github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4=
 github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -531,9 +493,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
@@ -556,7 +516,6 @@ go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
 go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
-go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5 h1:Gqga3zA9tdAcfqobUGjSoCob5L3f8Dt5EuOp3ihNZko=
 go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8=
 go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489 h1:1JFLBqwIgdyHN1ZtgjTBwO+blA6gVOmZurpiMEsETKo=
 go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg=
@@ -567,22 +526,18 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4=
 go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
 go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
 go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
 go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
 go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
-go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
 go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
 go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
 go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
-go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM=
 go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
@@ -592,13 +547,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
 golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU=
 golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
 golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -620,7 +573,6 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl
 golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE=
 golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
 golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
@@ -664,15 +616,12 @@ golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs=
 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -697,12 +646,10 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f h1:25KHgbfyiSm6vwQLbM3zZIe1v9p/3ea4Rz+nnM5K/i4=
 golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg=
 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -729,18 +676,13 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
 golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
 golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -788,10 +730,8 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs
 golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
 golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -808,10 +748,8 @@ google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/
 google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
 google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
 google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
 google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
@@ -833,7 +771,6 @@ google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4
 google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
 google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
 google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8=
 google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
@@ -847,7 +784,6 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
 google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
 google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
 google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
@@ -858,7 +794,6 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogR
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
@@ -871,13 +806,10 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
@@ -889,32 +821,25 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI=
-k8s.io/api v0.19.3 h1:GN6ntFnv44Vptj/b+OnMW7FmzkpDoIDLZRvKX3XH9aU=
 k8s.io/api v0.19.3/go.mod h1:VF+5FT1B74Pw3KxMdKyinLo+zynBaMBiAfGMuldcNDs=
 k8s.io/api v0.20.1 h1:ud1c3W3YNzGd6ABJlbFfKXBKXO+1KdGfcgGGNgFR03E=
 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
-k8s.io/apiextensions-apiserver v0.19.2 h1:oG84UwiDsVDu7dlsGQs5GySmQHCzMhknfhFExJMz9tA=
 k8s.io/apiextensions-apiserver v0.19.2/go.mod h1:EYNjpqIAvNZe+svXVx9j4uBaVhTB4C94HkY3w058qcg=
 k8s.io/apiextensions-apiserver v0.20.1 h1:ZrXQeslal+6zKM/HjDXLzThlz/vPSxrfK3OqL8txgVQ=
 k8s.io/apiextensions-apiserver v0.20.1/go.mod h1:ntnrZV+6a3dB504qwC5PN/Yg9PBiDNt1EVqbW2kORVk=
 k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
-k8s.io/apimachinery v0.19.3 h1:bpIQXlKjB4cB/oNpnNnV+BybGPR7iP5oYpsOTEJ4hgc=
 k8s.io/apimachinery v0.19.3/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
 k8s.io/apimachinery v0.20.1 h1:LAhz8pKbgR8tUwn7boK+b2HZdt7MiTu2mkYtFMUjTRQ=
 k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
 k8s.io/apiserver v0.19.2/go.mod h1:FreAq0bJ2vtZFj9Ago/X0oNGC51GfubKK/ViOKfVAOA=
-k8s.io/apiserver v0.19.3 h1:H7KUbLD74rh8NOPMLBJPSEG3Djqcv6Zxn5Ud0AL5u/k=
 k8s.io/apiserver v0.19.3/go.mod h1:bx6dMm+H6ifgKFpCQT/SAhPwhzoeIMlHIaibomUDec0=
 k8s.io/apiserver v0.20.1 h1:yEqdkxlnQbxi/3e74cp0X16h140fpvPrNnNRAJBDuBk=
 k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
-k8s.io/client-go v0.19.2 h1:gMJuU3xJZs86L1oQ99R4EViAADUPMHHtS9jFshasHSc=
 k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA=
-k8s.io/client-go v0.19.3 h1:ctqR1nQ52NUs6LpI0w+a5U+xjYwflFwA13OJKcicMxg=
 k8s.io/client-go v0.19.3/go.mod h1:+eEMktZM+MG0KO+PTkci8xnbCZHvj9TqR6Q1XDUIJOM=
 k8s.io/client-go v0.20.1 h1:Qquik0xNFbK9aUG92pxHYsyfea5/RPO9o9bSywNor+M=
 k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
@@ -922,7 +847,6 @@ k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZ
 k8s.io/code-generator v0.19.3/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk=
 k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg=
 k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo=
-k8s.io/component-base v0.19.3 h1:c+DzDNAQFlaoyX+yv8YuWi8xmlQvvY5DnJGbaz5U74o=
 k8s.io/component-base v0.19.3/go.mod h1:WhLWSIefQn8W8jxSLl5WNiR6z8oyMe/8Zywg7alOkRc=
 k8s.io/component-base v0.20.1 h1:6OQaHr205NSl24t5wOF2IhdrlxZTWEZwuGlLvBgaeIg=
 k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
@@ -931,38 +855,30 @@ k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8
 k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
 k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
 k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
-k8s.io/klog/v2 v2.3.0 h1:WmkrnW7fdrm0/DMClc+HIxtftvxVIPAhlVwMQo5yLco=
 k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ=
 k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
-k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ=
 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
 k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c=
 k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
-k8s.io/metrics v0.19.3 h1:p/goUqtdCslX76mSNowzZkNxiKzNRQW4bUP02U34+QQ=
 k8s.io/metrics v0.19.3/go.mod h1:Eap/Lk1FiAIjkaArFuv41v+ph6dbDpVGwAg7jMI+4vg=
 k8s.io/metrics v0.20.1 h1:c03Mn9FpIOV3r5WSkF4VelFdlIGH9UYR4onIxrMBnHI=
 k8s.io/metrics v0.20.1/go.mod h1:JhpBE/fad3yRGsgEpiZz5FQQM5wJ18OTLkD7Tv40c0s=
-k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg=
 k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20200912215256-4140de9c8800 h1:9ZNvfPvVIEsp/T1ez4GQuzCcCTEQWhovSofhqR73A6g=
 k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
 k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
 rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 h1:rusRLrDhjBp6aYtl9sGEvQJr6faoHoDLd0YcUBTZguI=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14 h1:TihvEz9MPj2u0KWds6E2OBUXfwaL4qRJ33c7HGiJpqk=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
 sigs.k8s.io/controller-runtime v0.7.0 h1:bU20IBBEPccWz5+zXpLnpVsgBYxqclaHu1pVDl/gEt8=
 sigs.k8s.io/controller-runtime v0.7.0/go.mod h1:pJ3YBrJiAqMAZKi6UVGuE98ZrroV1p+pIhoHsMm9wdU=
-sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA=
 sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
 sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8=
 sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
 sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
-sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
\ No newline at end of file
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/pkg/operator/injector/annotation.go b/pkg/operator/injector/annotation.go
index e2835c3..7e4d235 100644
--- a/pkg/operator/injector/annotation.go
+++ b/pkg/operator/injector/annotation.go
@@ -37,17 +37,12 @@ type Annotation struct {
 	// ValidateFunc defines a Validate func to judge whether the value
 	// is valid, if there isn't a validate func, it will be "nil".
 	ValidateFunc string `yaml:"validateFunc"`
-	// UseQuotes defines whether the key or value of the annotation needs
-	// to be wrapped in quotes, if don't need quotes, it will be "nil" .
-	// if UseQuotes is set to "key", it means the key of annotation need quotes.
-	// if UseQuotes is set to "value", it means the value of annotation need quotes.
-	UseQuotes string `yaml:"useQuotes"`
 	// EnvName represent the environment variable , just like following
 	// in agent.namespace=${SW_AGENT_NAMESPACE:} , the EnvName is SW_AGENT_NAMESPACE
 	EnvName string `yaml:"envName"`
 }
 
-// Annotations are
+// Annotations are set of
 type Annotations struct {
 	Annotations []Annotation
 }
@@ -70,7 +65,7 @@ func NewAnnotations() (*Annotations, error) {
 	return a, nil
 }
 
-// GetAnnotationsByPrefix is
+// GetAnnotationsByPrefix gets annotations from annotations.yaml
 func GetAnnotationsByPrefix(a Annotations, prefixName string) *Annotations {
 	anno := new(Annotations)
 	for _, v := range a.Annotations {
diff --git a/pkg/operator/injector/configmap.go b/pkg/operator/injector/configmap.go
index cdca73c..7bb5b88 100644
--- a/pkg/operator/injector/configmap.go
+++ b/pkg/operator/injector/configmap.go
@@ -92,9 +92,7 @@ func ValidateConfigmap(configmap *corev1.ConfigMap) (bool, error) {
 				}
 				value = strings.Trim(str[i][valueStart+1:valueEnd], " ")
 			}
-			if len(value) == 0 {
-				continue
-			}
+
 			for _, a := range anno.Annotations {
 				if strings.Contains(a.Name, option) {
 					f := FindValidateFunc(a.ValidateFunc)
diff --git a/pkg/operator/injector/injector.go b/pkg/operator/injector/injector.go
index b048d1f..b159202 100644
--- a/pkg/operator/injector/injector.go
+++ b/pkg/operator/injector/injector.go
@@ -48,12 +48,12 @@ const (
 	// the annotation is plugins.skywalking.apache.org/plugin.mongodb.trace_param: "true"
 	pluginsAnnotationPrefix = "plugins.skywalking.apache.org/"
 	// If user want to use optional-plugins , the annotation must match a optinal plugin
-	// such as optional.skywalking.apache.org: "*ehcache*"
+	// such as optional.skywalking.apache.org: "trace|webflux|cloud-gateway-2.1.x"
 	// Notice , If the injected container's image don't has the optional plugin ,
 	// the container will panic
 	optionsAnnotation = "optional.skywalking.apache.org"
 	// If user want to use optional-reporter-plugins , the annotation must match a optinal-reporter plugin
-	// such as optional-exporter.skywalking.apache.org: "kafka*"
+	// such as optional-exporter.skywalking.apache.org: "kafka"
 	optionsReporterAnnotation = "optional-reporter.skywalking.apache.org"
 )
 
@@ -254,38 +254,15 @@ func (s *SidecarInjectField) OverlaySidecar(a Annotations, ao *AnnotationOverlay
 
 // AgentOverlayandGetValue will do real annotation overlay
 func (s *SidecarInjectField) AgentOverlayandGetValue(ao *AnnotationOverlay, annotation *map[string]string,
-	a Annotation) (string, bool) {
+	a Annotation) bool {
 	if _, ok := (*annotation)[a.Name]; ok {
 		err := ao.SetOverlay(annotation, a)
 		if err != nil {
 			s.injectErrorAnnotation(annotation, err.Error())
-			return "", false
-		}
-	}
-	return ao.GetOverlayValue(a), true
-}
-
-func (s *SidecarInjectField) setJvmAgentStr(ao *AnnotationOverlay, annotation *map[string]string, a Annotation) bool {
-	v, ok := s.AgentOverlayandGetValue(ao, annotation, a)
-	if v != "" && ok {
-		// get {config1}={value1}
-		configName := strings.TrimPrefix(a.Name, agentAnnotationPrefix)
-		switch a.UseQuotes {
-		case "option":
-			configName = strings.Join([]string{"'", "'"}, configName)
-		case "value":
-			v = strings.Join([]string{"'", "'"}, v)
-		}
-		config := strings.Join([]string{configName, v}, "=")
-
-		// add to jvmAgentConfigStr
-		if s.JvmAgentConfigStr != "" {
-			s.JvmAgentConfigStr = strings.Join([]string{s.JvmAgentConfigStr, config}, ",")
-		} else {
-			s.JvmAgentConfigStr = config
+			return false
 		}
 	}
-	return ok
+	return true
 }
 
 // OverlayAgent overlays agent
@@ -293,9 +270,23 @@ func (s *SidecarInjectField) OverlayAgent(a Annotations, ao *AnnotationOverlay,
 	// jvmAgentConfigStr init
 	s.JvmAgentConfigStr = ""
 	anno := GetAnnotationsByPrefix(a, agentAnnotationPrefix)
-	for _, v := range anno.Annotations {
-		if !s.setJvmAgentStr(ao, annotation, v) {
-			return false
+	for k, v := range *annotation {
+		if strings.HasPrefix(k, agentAnnotationPrefix) {
+			for _, an := range anno.Annotations {
+				if strings.EqualFold(k, an.Name) {
+					if !s.AgentOverlayandGetValue(ao, annotation, an) {
+						return false
+					}
+				}
+			}
+			configName := strings.TrimPrefix(k, agentAnnotationPrefix)
+			config := strings.Join([]string{configName, v}, "=")
+			// add to jvmAgentConfigStr
+			if s.JvmAgentConfigStr != "" {
+				s.JvmAgentConfigStr = strings.Join([]string{s.JvmAgentConfigStr, config}, ",")
+			} else {
+				s.JvmAgentConfigStr = config
+			}
 		}
 	}
 	return true
@@ -304,9 +295,10 @@ func (s *SidecarInjectField) OverlayAgent(a Annotations, ao *AnnotationOverlay,
 // OverlayOptional overlays optional plugins and move optional plugins to the directory(/plugins)
 // user must ensure that the optional plugins are in the injected container's image
 // Notice , user must specify the correctness of the regular value
-// such as optional.skywalking.apache.org: "*ehcache*" or optional-reporter.skywalking.apache.org: "kafka*"
-// the final command will be "cp /optional-plugins/*ehcache*  /plugins/" or
-// "cp /optional-exporter-plugins/kafka*  /plugins/"
+// such as optional.skywalking.apache.org: "trace|webflux|cloud-gateway-2.1.x" or
+// optional-reporter.skywalking.apache.org: "kafka"
+// the final command will be "cd /optional-plugins && ls | grep -E "trace|webflux|cloud-gateway-2.1.x" | xargs -i cp {}  /plugins
+// or "cd /optional-reporter-plugins && ls | grep -E "kafka" | xargs -i cp {}  /plugins"
 func (s *SidecarInjectField) OverlayOptional(annotation *map[string]string) {
 	sourceOptionalPath := strings.Join([]string{s.SidecarVolumeMount.MountPath, "optional-plugins/"}, "/")
 	sourceOptionalReporterPath := strings.Join([]string{s.SidecarVolumeMount.MountPath, "optional-reporter-plugins/"}, "/")
@@ -315,12 +307,11 @@ func (s *SidecarInjectField) OverlayOptional(annotation *map[string]string) {
 	for k, v := range *annotation {
 		command := ""
 		if strings.EqualFold(k, optionsAnnotation) {
-			command = strings.Join([]string{"cp", sourceOptionalPath}, " ")
+			command = "cd " + sourceOptionalPath + "&& ls | grep -E \"" + v + "\"  | xargs -i cp {} " + targetPath
 		} else if strings.EqualFold(k, optionsReporterAnnotation) {
-			command = strings.Join([]string{"cp", sourceOptionalReporterPath}, " ")
+			command = "cd " + sourceOptionalReporterPath + "&& ls | grep -E \"" + v + "\"  | xargs -i cp {} " + targetPath
 		}
 		if command != "" {
-			command = command + v + " " + targetPath
 			s.Initcontainer.Args[1] = strings.Join([]string{s.Initcontainer.Args[1], command}, " && ")
 		}
 	}
diff --git a/pkg/operator/manifests/injector/templates/annotations.yaml b/pkg/operator/manifests/injector/templates/annotations.yaml
index 506db07..adad9d5 100644
--- a/pkg/operator/manifests/injector/templates/annotations.yaml
+++ b/pkg/operator/manifests/injector/templates/annotations.yaml
@@ -20,10 +20,6 @@
 # vaildateFunc means use which function to validate the value
 # Notice , the vaildateFunc must exist in validate.go , 
 # if don't have the vaildateFunc , please set nil
-# useQuotes means a separator(, or =) in the option or value, it should be wrapped in quotes.
-# if there is a separator in the option, then set useQuotes: option
-# if there is a separator in the value, then set useQuotes: value
-# if there isn't a separator,then set useQuotes: nil
 # envName is the environment variable in agent.config
 
 annotations:
@@ -31,360 +27,70 @@ annotations:
   - name: sidecar.skywalking.apache.org/initcontainer.Name
     defaultValue: inject-skywalking-agent
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/initcontainer.Image
     defaultValue: apache/skywalking-java-agent:8.7.0-jdk8
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/initcontainer.Command
     defaultValue: sh
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/initcontainer.args.Option
     defaultValue: -c
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/initcontainer.args.Command
     defaultValue: "mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent"
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/sidecarVolume.Name
     defaultValue: sky-agent
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/sidecarVolumeMount.MountPath
     defaultValue: /sky/agent
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/configmapVolume.ConfigMap.Name
     defaultValue: skywalking-swck-java-agent-configmap
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/configmapVolume.Name
     defaultValue: java-agent-configmap-volume
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/configmapVolumeMount.MountPath
     defaultValue: /sky/agent/config
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/env.Name
     defaultValue: AGENT_OPTS
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/env.Value
     defaultValue: -javaagent:/sky/agent/skywalking-agent.jar
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   # Next is the annotation of the java agent configuration
-  - name: agent.skywalking.apache.org/agent.namespace
-    defaultValue: default-namespace
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_NAMESPACE
-
   - name: agent.skywalking.apache.org/agent.service_name
     defaultValue: Your_ApplicationName
     validateFunc: ValidateServiceName
-    useQuotes: nil
     envName: SW_AGENT_NAME
 
-  - name: agent.skywalking.apache.org/agent.instance_name
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_INSTANCE_NAME
-
-  - name: agent.skywalking.apache.org/agent.sample_n_per_3_secs
-    defaultValue: -1
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_SAMPLE
-
-  - name: agent.skywalking.apache.org/agent.authentication
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_AUTHENTICATION
-
-  - name: agent.skywalking.apache.org/agent.span_limit_per_segment
-    defaultValue: 300
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_SPAN_LIMIT
-
-  - name: agent.skywalking.apache.org/agent.ignore_suffix
-    defaultValue: .jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg
-    validateFunc: nil
-    useQuotes: value
-    envName: SW_AGENT_IGNORE_SUFFIX
-
-  - name: agent.skywalking.apache.org/agent.is_open_debugging_class
-    defaultValue: true
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_OPEN_DEBUG
-
-  - name: agent.skywalking.apache.org/agent.is_cache_enhanced_class
-    defaultValue: false
-    validateFunc: nil
-    useQuotes: nil  
-    envName: SW_AGENT_CACHE_CLASS
-
-  - name: agent.skywalking.apache.org/agent.class_cache_mode
-    defaultValue: MEMORY
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_CLASS_CACHE_MODE
-
-  - name: agent.skywalking.apache.org/agent.cause_exception_depth
-    defaultValue: 5
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_CAUSE_EXCEPTION_DEPTH
-
-  - name: agent.skywalking.apache.org/agent.force_reconnection_period
-    defaultValue: 1
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_FORCE_RECONNECTION_PERIOD
-
-  - name: agent.skywalking.apache.org/agent.operation_name_threshold
-    defaultValue: 150
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_OPERATION_NAME_THRESHOLD
-
-  - name: agent.skywalking.apache.org/agent.keep_tracing
-    defaultValue: false
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_KEEP_TRACING
-
-  - name: agent.skywalking.apache.org/agent.force_tls
-    defaultValue: false
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_FORCE_TLS
-
-  - name: agent.skywalking.apache.org/osinfo.ipv4_list_size
-    defaultValue: 10
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_OSINFO_IPV4_LIST_SIZE
-
-  - name: agent.skywalking.apache.org/collector.grpc_channel_check_interval
-    defaultValue: 30
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_GRPC_CHANNEL_CHECK_INTERVAL
-
-  - name: agent.skywalking.apache.org/collector.heartbeat_period
-    defaultValue: 30
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD
-
-  - name: agent.skywalking.apache.org/collector.properties_report_period_factor
-    defaultValue: 10
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_PROPERTIES_REPORT_PERIOD_FACTOR
-
   - name: agent.skywalking.apache.org/collector.backend_service
     defaultValue: 127.0.0.1:11800
     validateFunc: ValidateIpandPort
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_BACKEND_SERVICES
-
-  - name: agent.skywalking.apache.org/collector.grpc_upstream_timeout
-    defaultValue: 30
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_GRPC_UPSTREAM_TIMEOUT
-
-  - name: agent.skywalking.apache.org/collector.get_profile_task_interval
-    defaultValue: 20
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL 
-
-  - name: agent.skywalking.apache.org/collector.get_agent_dynamic_config_interval
-    defaultValue: 20
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL 
-
-  - name: agent.skywalking.apache.org/collector.is_resolve_dns_periodically
-    defaultValue: false
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_IS_RESOLVE_DNS_PERIODICALLY 
-
-  - name: agent.skywalking.apache.org/logging.level
-    defaultValue: INFO
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_LEVEL
-
-  - name: agent.skywalking.apache.org/logging.file_name
-    defaultValue: skywalking-api.log
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_FILE_NAME
-
-  - name: agent.skywalking.apache.org/logging.output
-    defaultValue: FILE
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_OUTPUT
-
-  - name: agent.skywalking.apache.org/logging.dir
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_DIR 
-
-  - name: agent.skywalking.apache.org/logging.resolver
-    defaultValue: PATTERN
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_RESOLVER
-
-  - name: agent.skywalking.apache.org/logging.pattern
-    defaultValue: "%level %timestamp %thread %class : %msg %throwable"
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_PATTERN
-
-  - name: agent.skywalking.apache.org/logging.max_file_size
-    defaultValue: 314572800
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_MAX_FILE_SIZE
-
-  - name: agent.skywalking.apache.org/logging.max_history_files
-    defaultValue: -1
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_MAX_HISTORY_FILES  
-
-  - name: agent.skywalking.apache.org/statuscheck.ignored_exceptions
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_STATUSCHECK_IGNORED_EXCEPTIONS
-
-  - name: agent.skywalking.apache.org/statuscheck.max_recursive_depth
-    defaultValue: 1
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_STATUSCHECK_MAX_RECURSIVE_DEPTH
-
-  - name: agent.skywalking.apache.org/correlation.element_max_number
-    defaultValue: 3
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_CORRELATION_ELEMENT_MAX_NUMBER
-
-  - name: agent.skywalking.apache.org/correlation.value_max_length
-    defaultValue: 128
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_CORRELATION_VALUE_MAX_LENGTH
-
-  - name: agent.skywalking.apache.org/correlation.auto_tag_keys
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_CORRELATION_AUTO_TAG_KEYS
-
-  - name: agent.skywalking.apache.org/jvm.buffer_size
-    defaultValue: 600
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_JVM_BUFFER_SIZE
-
-  - name: agent.skywalking.apache.org/buffer.channel_size
-    defaultValue: 5
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_BUFFER_CHANNEL_SIZE
-
-  - name: agent.skywalking.apache.org/buffer.buffer_size
-    defaultValue: 300
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_BUFFER_BUFFER_SIZE
-
-  - name: agent.skywalking.apache.org/profile.active
-    defaultValue: true
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_PROFILE_ACTIVE
-
-  - name: agent.skywalking.apache.org/profile.max_parallel
-    defaultValue: 5
-    validateFunc: nil
-    useQuotes: nil    
-    envName: SW_AGENT_PROFILE_MAX_PARALLEL
-
-  - name: agent.skywalking.apache.org/profile.duration
-    defaultValue: 10
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_PROFILE_DURATION
-
-  - name: agent.skywalking.apache.org/profile.dump_max_stack_depth
-    defaultValue: 500
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_PROFILE_DUMP_MAX_STACK_DEPTH
-
-  - name: agent.skywalking.apache.org/profile.snapshot_transport_buffer_size
-    defaultValue: 50
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_PROFILE_SNAPSHOT_TRANSPORT_BUFFER_SIZE
-
-  - name: agent.skywalking.apache.org/meter.active
-    defaultValue: true
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_METER_ACTIVE
-
-  - name: agent.skywalking.apache.org/meter.report_interval
-    defaultValue: 20
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_METER_REPORT_INTERVAL
-
-  - name: agent.skywalking.apache.org/meter.max_meter_size
-    defaultValue: 500
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_METER_MAX_METER_SIZE
+    envName: SW_AGENT_COLLECTOR_BACKEND_SERVICES
\ No newline at end of file
diff --git a/pkg/operator/manifests/injector/templates/configmap.yaml b/pkg/operator/manifests/injector/templates/configmap.yaml
index e3b6017..3de57fc 100644
--- a/pkg/operator/manifests/injector/templates/configmap.yaml
+++ b/pkg/operator/manifests/injector/templates/configmap.yaml
@@ -22,21 +22,6 @@ metadata:
   namespace: skywalking-swck-system
 data:
   agent.config: |
-    # Licensed to the Apache Software Foundation (ASF) under one
-    # or more contributor license agreements.  See the NOTICE file
-    # distributed with this work for additional information
-    # regarding copyright ownership.  The ASF licenses this file
-    # to you under the Apache License, Version 2.0 (the
-    # "License"); you may not use this file except in compliance
-    # with the License.  You may obtain a copy of the License at
-    #
-    #     http://www.apache.org/licenses/LICENSE-2.0
-    #
-    # Unless required by applicable law or agreed to in writing, software
-    # distributed under the License is distributed on an "AS IS" BASIS,
-    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    # See the License for the specific language governing permissions and
-    # limitations under the License.
     {{- $anno := getAgentAnnotations }}
     {{- range $anno -}}
     {{- if ne .DefaultValue "nil" }}
diff --git a/pkg/operator/repo/assets.gen.go b/pkg/operator/repo/assets.gen.go
index 910ee98..ac5813d 100644
--- a/pkg/operator/repo/assets.gen.go
+++ b/pkg/operator/repo/assets.gen.go
@@ -21,8 +21,8 @@
 // fetcher/templates/configmap.yaml (3.082kB)
 // fetcher/templates/deployment.yaml (2.084kB)
 // fetcher/templates/service_account.yaml (1.088kB)
-// injector/templates/annotations.yaml (11.792kB)
-// injector/templates/configmap.yaml (2.044kB)
+// injector/templates/annotations.yaml (3.355kB)
+// injector/templates/configmap.yaml (1.2kB)
 // oapserver/templates/cluster_role.yaml (1.241kB)
 // oapserver/templates/cluster_role_binding.yaml (1.207kB)
 // oapserver/templates/deployment.yaml (3.429kB)
@@ -420,10 +420,6 @@ var _injectorTemplatesAnnotationsYaml = []byte(`# Licensed to Apache Software Fo
 # vaildateFunc means use which function to validate the value
 # Notice , the vaildateFunc must exist in validate.go , 
 # if don't have the vaildateFunc , please set nil
-# useQuotes means a separator(, or =) in the option or value, it should be wrapped in quotes.
-# if there is a separator in the option, then set useQuotes: option
-# if there is a separator in the value, then set useQuotes: value
-# if there isn't a separator,then set useQuotes: nil
 # envName is the environment variable in agent.config
 
 annotations:
@@ -431,364 +427,73 @@ annotations:
   - name: sidecar.skywalking.apache.org/initcontainer.Name
     defaultValue: inject-skywalking-agent
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/initcontainer.Image
     defaultValue: apache/skywalking-java-agent:8.7.0-jdk8
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/initcontainer.Command
     defaultValue: sh
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/initcontainer.args.Option
     defaultValue: -c
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/initcontainer.args.Command
     defaultValue: "mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent"
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/sidecarVolume.Name
     defaultValue: sky-agent
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/sidecarVolumeMount.MountPath
     defaultValue: /sky/agent
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/configmapVolume.ConfigMap.Name
     defaultValue: skywalking-swck-java-agent-configmap
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/configmapVolume.Name
     defaultValue: java-agent-configmap-volume
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/configmapVolumeMount.MountPath
     defaultValue: /sky/agent/config
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/env.Name
     defaultValue: AGENT_OPTS
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   - name: sidecar.skywalking.apache.org/env.Value
     defaultValue: -javaagent:/sky/agent/skywalking-agent.jar
     validateFunc: nil
-    useQuotes: nil
     envName: nil
 
   # Next is the annotation of the java agent configuration
-  - name: agent.skywalking.apache.org/agent.namespace
-    defaultValue: default-namespace
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_NAMESPACE
-
   - name: agent.skywalking.apache.org/agent.service_name
     defaultValue: Your_ApplicationName
     validateFunc: ValidateServiceName
-    useQuotes: nil
     envName: SW_AGENT_NAME
 
-  - name: agent.skywalking.apache.org/agent.instance_name
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_INSTANCE_NAME
-
-  - name: agent.skywalking.apache.org/agent.sample_n_per_3_secs
-    defaultValue: -1
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_SAMPLE
-
-  - name: agent.skywalking.apache.org/agent.authentication
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_AUTHENTICATION
-
-  - name: agent.skywalking.apache.org/agent.span_limit_per_segment
-    defaultValue: 300
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_SPAN_LIMIT
-
-  - name: agent.skywalking.apache.org/agent.ignore_suffix
-    defaultValue: .jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg
-    validateFunc: nil
-    useQuotes: value
-    envName: SW_AGENT_IGNORE_SUFFIX
-
-  - name: agent.skywalking.apache.org/agent.is_open_debugging_class
-    defaultValue: true
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_OPEN_DEBUG
-
-  - name: agent.skywalking.apache.org/agent.is_cache_enhanced_class
-    defaultValue: false
-    validateFunc: nil
-    useQuotes: nil  
-    envName: SW_AGENT_CACHE_CLASS
-
-  - name: agent.skywalking.apache.org/agent.class_cache_mode
-    defaultValue: MEMORY
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_CLASS_CACHE_MODE
-
-  - name: agent.skywalking.apache.org/agent.cause_exception_depth
-    defaultValue: 5
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_CAUSE_EXCEPTION_DEPTH
-
-  - name: agent.skywalking.apache.org/agent.force_reconnection_period
-    defaultValue: 1
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_FORCE_RECONNECTION_PERIOD
-
-  - name: agent.skywalking.apache.org/agent.operation_name_threshold
-    defaultValue: 150
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_OPERATION_NAME_THRESHOLD
-
-  - name: agent.skywalking.apache.org/agent.keep_tracing
-    defaultValue: false
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_KEEP_TRACING
-
-  - name: agent.skywalking.apache.org/agent.force_tls
-    defaultValue: false
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_FORCE_TLS
-
-  - name: agent.skywalking.apache.org/osinfo.ipv4_list_size
-    defaultValue: 10
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_OSINFO_IPV4_LIST_SIZE
-
-  - name: agent.skywalking.apache.org/collector.grpc_channel_check_interval
-    defaultValue: 30
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_GRPC_CHANNEL_CHECK_INTERVAL
-
-  - name: agent.skywalking.apache.org/collector.heartbeat_period
-    defaultValue: 30
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD
-
-  - name: agent.skywalking.apache.org/collector.properties_report_period_factor
-    defaultValue: 10
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_PROPERTIES_REPORT_PERIOD_FACTOR
-
   - name: agent.skywalking.apache.org/collector.backend_service
     defaultValue: 127.0.0.1:11800
     validateFunc: ValidateIpandPort
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_BACKEND_SERVICES
-
-  - name: agent.skywalking.apache.org/collector.grpc_upstream_timeout
-    defaultValue: 30
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_GRPC_UPSTREAM_TIMEOUT
-
-  - name: agent.skywalking.apache.org/collector.get_profile_task_interval
-    defaultValue: 20
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL 
-
-  - name: agent.skywalking.apache.org/collector.get_agent_dynamic_config_interval
-    defaultValue: 20
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL 
-
-  - name: agent.skywalking.apache.org/collector.is_resolve_dns_periodically
-    defaultValue: false
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_COLLECTOR_IS_RESOLVE_DNS_PERIODICALLY 
-
-  - name: agent.skywalking.apache.org/logging.level
-    defaultValue: INFO
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_LEVEL
-
-  - name: agent.skywalking.apache.org/logging.file_name
-    defaultValue: skywalking-api.log
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_FILE_NAME
-
-  - name: agent.skywalking.apache.org/logging.output
-    defaultValue: FILE
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_OUTPUT
-
-  - name: agent.skywalking.apache.org/logging.dir
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_DIR 
-
-  - name: agent.skywalking.apache.org/logging.resolver
-    defaultValue: PATTERN
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_RESOLVER
-
-  - name: agent.skywalking.apache.org/logging.pattern
-    defaultValue: "%level %timestamp %thread %class : %msg %throwable"
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_PATTERN
-
-  - name: agent.skywalking.apache.org/logging.max_file_size
-    defaultValue: 314572800
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_MAX_FILE_SIZE
-
-  - name: agent.skywalking.apache.org/logging.max_history_files
-    defaultValue: -1
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_LOGGING_MAX_HISTORY_FILES  
-
-  - name: agent.skywalking.apache.org/statuscheck.ignored_exceptions
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_STATUSCHECK_IGNORED_EXCEPTIONS
-
-  - name: agent.skywalking.apache.org/statuscheck.max_recursive_depth
-    defaultValue: 1
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_STATUSCHECK_MAX_RECURSIVE_DEPTH
-
-  - name: agent.skywalking.apache.org/correlation.element_max_number
-    defaultValue: 3
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_CORRELATION_ELEMENT_MAX_NUMBER
-
-  - name: agent.skywalking.apache.org/correlation.value_max_length
-    defaultValue: 128
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_CORRELATION_VALUE_MAX_LENGTH
-
-  - name: agent.skywalking.apache.org/correlation.auto_tag_keys
-    defaultValue: nil
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_CORRELATION_AUTO_TAG_KEYS
-
-  - name: agent.skywalking.apache.org/jvm.buffer_size
-    defaultValue: 600
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_JVM_BUFFER_SIZE
-
-  - name: agent.skywalking.apache.org/buffer.channel_size
-    defaultValue: 5
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_BUFFER_CHANNEL_SIZE
-
-  - name: agent.skywalking.apache.org/buffer.buffer_size
-    defaultValue: 300
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_BUFFER_BUFFER_SIZE
-
-  - name: agent.skywalking.apache.org/profile.active
-    defaultValue: true
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_PROFILE_ACTIVE
-
-  - name: agent.skywalking.apache.org/profile.max_parallel
-    defaultValue: 5
-    validateFunc: nil
-    useQuotes: nil    
-    envName: SW_AGENT_PROFILE_MAX_PARALLEL
-
-  - name: agent.skywalking.apache.org/profile.duration
-    defaultValue: 10
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_PROFILE_DURATION
-
-  - name: agent.skywalking.apache.org/profile.dump_max_stack_depth
-    defaultValue: 500
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_PROFILE_DUMP_MAX_STACK_DEPTH
-
-  - name: agent.skywalking.apache.org/profile.snapshot_transport_buffer_size
-    defaultValue: 50
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_AGENT_PROFILE_SNAPSHOT_TRANSPORT_BUFFER_SIZE
-
-  - name: agent.skywalking.apache.org/meter.active
-    defaultValue: true
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_METER_ACTIVE
-
-  - name: agent.skywalking.apache.org/meter.report_interval
-    defaultValue: 20
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_METER_REPORT_INTERVAL
-
-  - name: agent.skywalking.apache.org/meter.max_meter_size
-    defaultValue: 500
-    validateFunc: nil
-    useQuotes: nil
-    envName: SW_METER_MAX_METER_SIZE
-`)
+    envName: SW_AGENT_COLLECTOR_BACKEND_SERVICES`)
 
 func injectorTemplatesAnnotationsYamlBytes() ([]byte, error) {
 	return _injectorTemplatesAnnotationsYaml, nil
@@ -801,7 +506,7 @@ func injectorTemplatesAnnotationsYaml() (*asset, error) {
 	}
 
 	info := bindataFileInfo{name: "injector/templates/annotations.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x80, 0x70, 0xea, 0x8c, 0x8a, 0xa2, 0xc3, 0x6a, 0xec, 0x88, 0x88, 0x90, 0x41, 0x13, 0xe7, 0x8f, 0x23, 0xba, 0x13, 0x44, 0x89, 0x20, 0xed, 0xbe, 0xa2, 0xdd, 0x40, 0x71, 0xa6, 0x67, 0xf0, 0xdd}}
+	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd7, 0x31, 0xc8, 0xb3, 0x2b, 0x73, 0xfc, 0x8f, 0x8, 0x60, 0xe9, 0xe6, 0xb, 0xa4, 0x1c, 0x86, 0x50, 0xc2, 0x14, 0xb6, 0x4d, 0x64, 0x4e, 0xc0, 0x51, 0x8f, 0xdc, 0x4a, 0x33, 0xe, 0xe5, 0x39}}
 	return a, nil
 }
 
@@ -829,21 +534,6 @@ metadata:
   namespace: skywalking-swck-system
 data:
   agent.config: |
-    # Licensed to the Apache Software Foundation (ASF) under one
-    # or more contributor license agreements.  See the NOTICE file
-    # distributed with this work for additional information
-    # regarding copyright ownership.  The ASF licenses this file
-    # to you under the Apache License, Version 2.0 (the
-    # "License"); you may not use this file except in compliance
-    # with the License.  You may obtain a copy of the License at
-    #
-    #     http://www.apache.org/licenses/LICENSE-2.0
-    #
-    # Unless required by applicable law or agreed to in writing, software
-    # distributed under the License is distributed on an "AS IS" BASIS,
-    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    # See the License for the specific language governing permissions and
-    # limitations under the License.
     {{- $anno := getAgentAnnotations }}
     {{- range $anno -}}
     {{- if ne .DefaultValue "nil" }}
@@ -864,7 +554,7 @@ func injectorTemplatesConfigmapYaml() (*asset, error) {
 	}
 
 	info := bindataFileInfo{name: "injector/templates/configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa4, 0xf9, 0x1c, 0x4f, 0x27, 0xe7, 0x88, 0xed, 0xfb, 0xf0, 0x9c, 0xa1, 0x33, 0x40, 0xba, 0x8c, 0xf3, 0x0, 0x71, 0xfc, 0xa9, 0x2b, 0x46, 0x1d, 0x53, 0xb3, 0x48, 0xd3, 0x1b, 0x5d, 0xe7, 0x9f}}
+	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc6, 0xee, 0xc8, 0x3f, 0x93, 0x98, 0x46, 0x72, 0x7e, 0x19, 0xa, 0x17, 0xc3, 0x8a, 0x76, 0x3f, 0xf5, 0x5f, 0x15, 0x53, 0x27, 0x92, 0xdc, 0xcc, 0x6c, 0x99, 0x70, 0x38, 0x7c, 0x75, 0x4e, 0x25}}
 	return a, nil
 }