diff --git a/VERSION-vendor b/VERSION-vendor index c5a2781..942ff0a 100644 --- a/VERSION-vendor +++ b/VERSION-vendor @@ -1 +1 @@ -2.0.0-8 +2.0.1-1 diff --git a/git-commit b/git-commit index 2d91c09..6571d62 100644 --- a/git-commit +++ b/git-commit @@ -1 +1 @@ -25197e4c5ef5b67040f64ecc54ac000a13506bc1 +a9c36f5a595959f3790b24a91ec243c74d9e382d diff --git a/patch/0001-Support-Labels-field-to-configure-QoSLevel.patch b/patch/0001-Support-Labels-field-to-configure-QoSLevel.patch deleted file mode 100644 index e7044a2..0000000 --- a/patch/0001-Support-Labels-field-to-configure-QoSLevel.patch +++ /dev/null @@ -1,188 +0,0 @@ -From aaa33596e0acb9e2ddb32bb888c15d86c242a388 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 10 May 2023 19:26:36 +0800 -Subject: [PATCH 01/13] Support Labels field to configure QoSLevel - -Signed-off-by: wujing ---- - pkg/core/typedef/podinfo.go | 39 +++++++++++++++++++++++++-- - pkg/services/dyncache/dynamic.go | 3 +-- - pkg/services/dyncache/sync.go | 3 +-- - pkg/services/iocost/iocost.go | 2 +- - pkg/services/preemption/preemption.go | 13 +++------ - tests/try/pod.go | 1 + - 6 files changed, 44 insertions(+), 17 deletions(-) - -diff --git a/pkg/core/typedef/podinfo.go b/pkg/core/typedef/podinfo.go -index 907f02b..fd96848 100644 ---- a/pkg/core/typedef/podinfo.go -+++ b/pkg/core/typedef/podinfo.go -@@ -15,6 +15,7 @@ - package typedef - - import ( -+ "isula.org/rubik/pkg/common/constant" - "isula.org/rubik/pkg/core/typedef/cgroup" - ) - -@@ -26,6 +27,7 @@ type PodInfo struct { - Namespace string `json:"namespace"` - IDContainersMap map[string]*ContainerInfo `json:"containers,omitempty"` - Annotations map[string]string `json:"annotations,omitempty"` -+ Labels map[string]string `json:"labels,omitempty"` - } - - // NewPodInfo creates the PodInfo instance -@@ -37,6 +39,7 @@ func NewPodInfo(pod *RawPod) *PodInfo { - Hierarchy: cgroup.Hierarchy{Path: pod.CgroupPath()}, - IDContainersMap: pod.ExtractContainerInfos(), - Annotations: pod.DeepCopy().Annotations, -+ Labels: pod.DeepCopy().Labels, - } - } - -@@ -46,8 +49,9 @@ func (pod *PodInfo) DeepCopy() *PodInfo { - return nil - } - var ( -- contMap map[string]*ContainerInfo -- annoMap map[string]string -+ contMap map[string]*ContainerInfo -+ annoMap map[string]string -+ labelMap map[string]string - ) - // nil is different from empty value in golang - if pod.IDContainersMap != nil { -@@ -56,6 +60,7 @@ func (pod *PodInfo) DeepCopy() *PodInfo { - contMap[id] = cont.DeepCopy() - } - } -+ - if pod.Annotations != nil { - annoMap = make(map[string]string) - for k, v := range pod.Annotations { -@@ -63,12 +68,42 @@ func (pod *PodInfo) DeepCopy() *PodInfo { - } - } - -+ if pod.Labels != nil { -+ labelMap = make(map[string]string) -+ for k, v := range pod.Labels { -+ labelMap[k] = v -+ } -+ } -+ - return &PodInfo{ - Name: pod.Name, - UID: pod.UID, - Hierarchy: pod.Hierarchy, - Namespace: pod.Namespace, - Annotations: annoMap, -+ Labels: labelMap, - IDContainersMap: contMap, - } - } -+ -+// Offline is used to determine whether the pod is offline -+func (pod *PodInfo) Offline() bool { -+ var anno string -+ var label string -+ -+ if pod.Annotations != nil { -+ anno = pod.Annotations[constant.PriorityAnnotationKey] -+ } -+ -+ if pod.Labels != nil { -+ label = pod.Labels[constant.PriorityAnnotationKey] -+ } -+ -+ // Annotations have a higher priority than labels -+ return anno == "true" || label == "true" -+} -+ -+// Online is used to determine whether the pod is online -+func (pod *PodInfo) Online() bool { -+ return !pod.Offline() -+} -diff --git a/pkg/services/dyncache/dynamic.go b/pkg/services/dyncache/dynamic.go -index 09bde4c..d74efc7 100644 ---- a/pkg/services/dyncache/dynamic.go -+++ b/pkg/services/dyncache/dynamic.go -@@ -124,8 +124,7 @@ func (c *DynCache) doFlush(limitSet *limitSet) error { - } - - func (c *DynCache) listOnlinePods() map[string]*typedef.PodInfo { -- onlineValue := "false" - return c.Viewer.ListPodsWithOptions(func(pi *typedef.PodInfo) bool { -- return pi.Annotations[constant.PriorityAnnotationKey] == onlineValue -+ return pi.Online() - }) - } -diff --git a/pkg/services/dyncache/sync.go b/pkg/services/dyncache/sync.go -index 8307c41..bf59cd4 100644 ---- a/pkg/services/dyncache/sync.go -+++ b/pkg/services/dyncache/sync.go -@@ -111,8 +111,7 @@ func (c *DynCache) syncLevel(pod *typedef.PodInfo) error { - } - - func (c *DynCache) listOfflinePods() map[string]*typedef.PodInfo { -- offlineValue := "true" - return c.Viewer.ListPodsWithOptions(func(pi *typedef.PodInfo) bool { -- return pi.Annotations[constant.PriorityAnnotationKey] == offlineValue -+ return pi.Offline() - }) - } -diff --git a/pkg/services/iocost/iocost.go b/pkg/services/iocost/iocost.go -index e5298b1..c11ef60 100644 ---- a/pkg/services/iocost/iocost.go -+++ b/pkg/services/iocost/iocost.go -@@ -236,7 +236,7 @@ func (b *IOCost) clearIOCost() error { - - func (b *IOCost) configPodIOCostWeight(podInfo *typedef.PodInfo) error { - var weight uint64 = offlineWeight -- if podInfo.Annotations[constant.PriorityAnnotationKey] == "false" { -+ if podInfo.Online() { - weight = onlineWeight - } - for _, container := range podInfo.IDContainersMap { -diff --git a/pkg/services/preemption/preemption.go b/pkg/services/preemption/preemption.go -index ce436a3..28ec36e 100644 ---- a/pkg/services/preemption/preemption.go -+++ b/pkg/services/preemption/preemption.go -@@ -160,18 +160,11 @@ func getQoSLevel(pod *typedef.PodInfo) int { - if pod == nil { - return constant.Online - } -- anno, ok := pod.Annotations[constant.PriorityAnnotationKey] -- if !ok { -- return constant.Online -- } -- switch anno { -- case "true": -+ if pod.Offline() { - return constant.Offline -- case "false": -- return constant.Online -- default: -- return constant.Online - } -+ -+ return constant.Online - } - - // Validate will validate the qos service config -diff --git a/tests/try/pod.go b/tests/try/pod.go -index 18cb0ec..8053c4b 100644 ---- a/tests/try/pod.go -+++ b/tests/try/pod.go -@@ -60,6 +60,7 @@ func GenFakePodInfo(qosClass corev1.PodQOSClass) *typedef.PodInfo { - UID: constant.PodCgroupNamePrefix + podID, - Hierarchy: cgroup.Hierarchy{Path: genRelativeCgroupPath(qosClass, podID)}, - Annotations: make(map[string]string, 0), -+ Labels: make(map[string]string, 0), - } - return fakePod - } --- -2.41.0 - diff --git a/patch/0002-rubik-fix-weight-for-iocost-does-not-take-effect.patch b/patch/0002-rubik-fix-weight-for-iocost-does-not-take-effect.patch deleted file mode 100644 index 35e996a..0000000 --- a/patch/0002-rubik-fix-weight-for-iocost-does-not-take-effect.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 347c81278ba63b6fe05476ad4dd9dd960b4b70a4 Mon Sep 17 00:00:00 2001 -From: vegbir -Date: Tue, 20 Aug 2024 13:26:04 +0000 -Subject: [PATCH 02/13] rubik-fix-weight-for-iocost-does-not-take-effect - ---- - pkg/services/iocost/iocost.go | 7 +------ - pkg/services/iocost/iocost_origin.go | 8 ++++---- - pkg/services/iocost/iocost_test.go | 2 +- - 3 files changed, 6 insertions(+), 11 deletions(-) - -diff --git a/pkg/services/iocost/iocost.go b/pkg/services/iocost/iocost.go -index c11ef60..0f77edc 100644 ---- a/pkg/services/iocost/iocost.go -+++ b/pkg/services/iocost/iocost.go -@@ -239,10 +239,5 @@ func (b *IOCost) configPodIOCostWeight(podInfo *typedef.PodInfo) error { - if podInfo.Online() { - weight = onlineWeight - } -- for _, container := range podInfo.IDContainersMap { -- if err := ConfigContainerIOCostWeight(container.Path, weight); err != nil { -- return err -- } -- } -- return nil -+ return ConfigPodIOCostWeight(podInfo.Path, weight) - } -diff --git a/pkg/services/iocost/iocost_origin.go b/pkg/services/iocost/iocost_origin.go -index d37109f..5e9948f 100644 ---- a/pkg/services/iocost/iocost_origin.go -+++ b/pkg/services/iocost/iocost_origin.go -@@ -63,14 +63,14 @@ func ConfigIOCostModel(devno string, p interface{}) error { - return cgroup.WriteCgroupFile(paramStr, blkcgRootDir, iocostModelFile) - } - --// ConfigContainerIOCostWeight for config iocost weight -+// ConfigPodIOCostWeight for config iocost weight - // cgroup v1 iocost cannot be inherited. Therefore, only the container level can be configured. --func ConfigContainerIOCostWeight(containerRelativePath string, weight uint64) error { -+func ConfigPodIOCostWeight(relativePath string, weight uint64) error { - if err := cgroup.WriteCgroupFile(strconv.FormatUint(weight, scale), blkcgRootDir, -- containerRelativePath, iocostWeightFile); err != nil { -+ relativePath, iocostWeightFile); err != nil { - return err - } -- if err := bindMemcgBlkcg(containerRelativePath); err != nil { -+ if err := bindMemcgBlkcg(relativePath); err != nil { - return err - } - return nil -diff --git a/pkg/services/iocost/iocost_test.go b/pkg/services/iocost/iocost_test.go -index 95b6d97..3bdadad 100644 ---- a/pkg/services/iocost/iocost_test.go -+++ b/pkg/services/iocost/iocost_test.go -@@ -334,7 +334,7 @@ func TestSetPodWeight(t *testing.T) { - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { -- err := ConfigContainerIOCostWeight(tt.cgroupPath, uint64(tt.weight)) -+ err := ConfigPodIOCostWeight(tt.cgroupPath, uint64(tt.weight)) - if tt.wantErr { - assert.Contains(t, err.Error(), tt.errMsg) - return --- -2.41.0 - diff --git a/patch/0003-rubik-test-coverage-for-PSI-Manager.patch b/patch/0003-rubik-test-coverage-for-PSI-Manager.patch deleted file mode 100644 index b21ec87..0000000 --- a/patch/0003-rubik-test-coverage-for-PSI-Manager.patch +++ /dev/null @@ -1,264 +0,0 @@ -From eaa82db55dbc543f9911e3c5ef4dd550711deb63 Mon Sep 17 00:00:00 2001 -From: jingxiaolu -Date: Mon, 12 Jun 2023 23:12:37 +0800 -Subject: [PATCH 03/13] rubik: test coverage for PSI Manager - -Adding test cases for PSI Manager - -Signed-off-by: jingxiaolu ---- - Makefile | 3 + - pkg/config/config_test.go | 29 ++++++++ - pkg/services/psi/psi.go | 14 ++-- - pkg/services/psi/psi_test.go | 126 +++++++++++++++++++++++++++++++++++ - pkg/services/service_test.go | 4 ++ - 5 files changed, 169 insertions(+), 7 deletions(-) - create mode 100644 pkg/services/psi/psi_test.go - -diff --git a/Makefile b/Makefile -index 7a92d12..bd66147 100644 ---- a/Makefile -+++ b/Makefile -@@ -54,6 +54,7 @@ help: - @echo "make test-unit # run unit test" - @echo "make cover # generate coverage report" - @echo "make install # install files to /var/lib/rubik" -+ @echo "make clean" # clean built files and test logs - - prepare: - mkdir -p $(TMP_DIR) $(BUILD_DIR) -@@ -101,3 +102,5 @@ install: - cp -f $(BUILD_DIR)/* $(INSTALL_DIR) - cp -f $(BUILD_DIR)/rubik.service /lib/systemd/system/ - -+clean: -+ rm -rf build/* cover.* unit_test_log -diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go -index dbbd2e4..03ff4ca 100644 ---- a/pkg/config/config_test.go -+++ b/pkg/config/config_test.go -@@ -53,6 +53,35 @@ var rubikConfig string = ` - "mid": 30, - "high": 50 - } -+ }, -+ "ioCost": [ -+ { -+ "nodeName": "k8s-single", -+ "config": [ -+ { -+ "dev": "sdb", -+ "enable": true, -+ "model": "linear", -+ "param": { -+ "rbps": 10000000, -+ "rseqiops": 10000000, -+ "rrandiops": 10000000, -+ "wbps": 10000000, -+ "wseqiops": 10000000, -+ "wrandiops": 10000000 -+ } -+ } -+ ] -+ } -+ ], -+ "psi": { -+ "interval": 10, -+ "resource": [ -+ "cpu", -+ "memory", -+ "io" -+ ], -+ "avg10Threshold": 5.0 - } - } - ` -diff --git a/pkg/services/psi/psi.go b/pkg/services/psi/psi.go -index 1c70255..a55922e 100644 ---- a/pkg/services/psi/psi.go -+++ b/pkg/services/psi/psi.go -@@ -37,19 +37,19 @@ const ( - minThreshold float64 = 5.0 - ) - --// Factory is the QuotaTurbo factory class -+// Factory is the PSI Manager factory class - type Factory struct { - ObjName string - } - - // Name returns the factory class name --func (i Factory) Name() string { -- return "Factory" -+func (f Factory) Name() string { -+ return "PSIFactory" - } - --// NewObj returns a QuotaTurbo object --func (i Factory) NewObj() (interface{}, error) { -- return NewManager(i.ObjName), nil -+// NewObj returns a Manager object -+func (f Factory) NewObj() (interface{}, error) { -+ return NewManager(f.ObjName), nil - } - - // Config is PSI service configuration -@@ -130,7 +130,7 @@ func (m *Manager) SetConfig(f helper.ConfigHandler) error { - } - - // IsRunner returns true that tells other Manager is a persistent service --func (qt *Manager) IsRunner() bool { -+func (m *Manager) IsRunner() bool { - return true - } - -diff --git a/pkg/services/psi/psi_test.go b/pkg/services/psi/psi_test.go -new file mode 100644 -index 0000000..2036aa1 ---- /dev/null -+++ b/pkg/services/psi/psi_test.go -@@ -0,0 +1,126 @@ -+// Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved. -+// rubik licensed under the Mulan PSL v2. -+// You can use this software according to the terms and conditions of the Mulan PSL v2. -+// You may obtain a copy of Mulan PSL v2 at: -+// http://license.coscl.org.cn/MulanPSL2 -+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR -+// PURPOSE. -+// See the Mulan PSL v2 for more details. -+// Author: Jingxiao Lu -+// Date: 2023-06-12 -+// Description: This file is used for testing psi.go -+ -+package psi -+ -+import ( -+ "context" -+ "fmt" -+ "testing" -+ "time" -+ -+ "isula.org/rubik/pkg/api" -+ "isula.org/rubik/pkg/core/typedef" -+) -+ -+// TestNewManagerObj tests NewObj() for Factory -+func TestNewManagerObj(t *testing.T) { -+ var fact = Factory{ -+ ObjName: "psi", -+ } -+ nm, err := fact.NewObj() -+ if err != nil { -+ t.Fatalf("New PSI Manager failed: %v", err) -+ return -+ } -+ fmt.Printf("New PSI Manager %s is %#v", fact.Name(), nm) -+} -+ -+// TestConfigValidate tests Config Validate -+func TestConfigValidate(t *testing.T) { -+ var tests = []struct { -+ name string -+ conf *Config -+ wantErr bool -+ }{ -+ { -+ name: "TC1 - Default Config", -+ conf: NewConfig(), -+ wantErr: true, -+ }, -+ { -+ name: "TC2 - Wrong Interval value", -+ conf: &Config{ -+ Interval: minInterval - 1, -+ }, -+ wantErr: true, -+ }, -+ { -+ name: "TC3 - Wrong Threshold value", -+ conf: &Config{ -+ Interval: minInterval, -+ Avg10Threshold: minThreshold - 1, -+ }, -+ wantErr: true, -+ }, -+ { -+ name: "TC4 - No resource type specified", -+ conf: &Config{ -+ Interval: minInterval, -+ Avg10Threshold: minThreshold, -+ }, -+ wantErr: true, -+ }, -+ { -+ name: "TC5 - Wrong resource type cpuacct - cpuacct is for psi subsystem, not for resource type", -+ conf: &Config{ -+ Interval: minInterval, -+ Avg10Threshold: minThreshold, -+ Resource: []string{"cpu", "memory", "io", "cpuacct"}, -+ }, -+ wantErr: true, -+ }, -+ { -+ name: "TC6 - Success case - trully end", -+ conf: &Config{ -+ Interval: minInterval, -+ Avg10Threshold: minThreshold, -+ Resource: []string{"cpu", "memory", "io"}, -+ }, -+ wantErr: false, -+ }, -+ } -+ for _, tc := range tests { -+ t.Run(tc.name, func(t *testing.T) { -+ if err := tc.conf.Validate(); (err != nil) != tc.wantErr { -+ t.Errorf("Config.Validate() error = %v, wantErr %v", err, tc.wantErr) -+ } -+ }) -+ } -+} -+ -+type FakeManager struct{} -+ -+func (m *FakeManager) ListContainersWithOptions(options ...api.ListOption) map[string]*typedef.ContainerInfo { -+ return make(map[string]*typedef.ContainerInfo) -+} -+func (m *FakeManager) ListPodsWithOptions(options ...api.ListOption) map[string]*typedef.PodInfo { -+ return make(map[string]*typedef.PodInfo, 1) -+} -+ -+// TestManagerRun creates a fake manager and runs it -+func TestManagerRun(t *testing.T) { -+ nm := NewManager("psi") -+ nm.conf.Interval = 1 -+ nm.PreStart(&FakeManager{}) -+ nm.SetConfig(func(configName string, d interface{}) error { return nil }) -+ if !nm.IsRunner() { -+ t.Fatalf("FakeManager is not a runner!") -+ return -+ } -+ -+ ctx, cancel := context.WithCancel(context.Background()) -+ go nm.Run(ctx) -+ time.Sleep(time.Second) -+ cancel() -+} -diff --git a/pkg/services/service_test.go b/pkg/services/service_test.go -index a6e0298..537d0b3 100644 ---- a/pkg/services/service_test.go -+++ b/pkg/services/service_test.go -@@ -36,6 +36,10 @@ var defaultFeature = []FeatureSpec{ - Name: feature.QuotaTurboFeature, - Default: true, - }, -+ { -+ Name: feature.PSIFeature, -+ Default: true, -+ }, - } - - func TestErrorInitServiceComponents(t *testing.T) { --- -2.41.0 - diff --git a/patch/0004-rubik-add-psi-design-documentation.patch b/patch/0004-rubik-add-psi-design-documentation.patch deleted file mode 100644 index 336c713..0000000 --- a/patch/0004-rubik-add-psi-design-documentation.patch +++ /dev/null @@ -1,199 +0,0 @@ -From 4c64eac61570b4cfd4e77766639f144a8a93f713 Mon Sep 17 00:00:00 2001 -From: vegbir -Date: Sat, 10 Jun 2023 11:41:04 +0800 -Subject: [PATCH 04/13] rubik: add psi design documentation - -Signed-off-by: vegbir ---- - CHANGELOG/CHANGELOG-2.0.0.md | 29 +++++++-- - docs/design/psi.md | 94 +++++++++++++++++++++++++++++ - docs/images/psi/PSI_designation.svg | 16 +++++ - docs/images/psi/PSI_implement.svg | 4 ++ - 4 files changed, 139 insertions(+), 4 deletions(-) - create mode 100644 docs/design/psi.md - create mode 100644 docs/images/psi/PSI_designation.svg - create mode 100644 docs/images/psi/PSI_implement.svg - -diff --git a/CHANGELOG/CHANGELOG-2.0.0.md b/CHANGELOG/CHANGELOG-2.0.0.md -index 5cc2cb8..b46fa3d 100644 ---- a/CHANGELOG/CHANGELOG-2.0.0.md -+++ b/CHANGELOG/CHANGELOG-2.0.0.md -@@ -1,16 +1,37 @@ --1. Architecture optimization: -+# CHANGELOG -+ -+## v2.0.1 -+ -+### New Feature -+ -+Before June 30, 2023 -+ -+1. **dynMemory** (asynchronous memory classification recovery): implement fssr strategy -+2. **psi**: interference detection based on PSI index -+3. **quotaTurbo**: elastic cpu limit user mode solution -+ -+## v2.0.0 -+ -+### Architecture optimization -+ - refactor rubik through `informer-podmanager-services` mechanism, decoupling modules and improving performance --2. Interface change: -+ -+### Interface change -+ - - configuration file changes - - use the list-watch mechanism to get the pod instead of the http interface --3. Feature enhancements: -+ -+### Feature enhancements -+ - - support elastic cpu limit user mode scheme-quotaturbo - - support psi index observation - - support memory asynchronous recovery feature (fssr optimization) - - support memory access bandwidth and LLC limit - - optimize the absolute preemption - - optimize the elastic cpu limiting kernel mode scheme-quotaburst --4. Other optimizations: -+ -+### Other optimizations -+ - - document optimization - - typo fix - - compile option optimization -diff --git a/docs/design/psi.md b/docs/design/psi.md -new file mode 100644 -index 0000000..674a8e0 ---- /dev/null -+++ b/docs/design/psi.md -@@ -0,0 +1,94 @@ -+# 【需求设计】基于PSI指标的干扰检测 -+ -+## 需求设计图 -+ -+![PSI_designation](../images/psi/PSI_designation.svg) -+ -+## 实现思路 -+ -+### PSI简介 -+ -+PSI是Pressure Stall Information的简称,用于评估当前系统三大基础硬件资源CPU、Memory、IO的压力。顾名思义,当进程无法获得运行所需的资源时将会产生停顿,PSI就是衡量进程停顿时间长度的度量标准。 -+ -+### 使能cgroupv1 psi特性 -+ -+首先,检查是否开启cgroup v1的PSI。两种方法,看看文件是否存在或者查看内核启动命令行是否包含psi相关选项。 -+ -+```bash -+cat /proc/cmdline | grep "psi=1 psi_v1=1" -+``` -+ -+若无,则新增内核启动命令行 -+ -+```bash -+# 查看内核版本号 -+uname -a -+# Linux openEuler 5.10.0-136.12.0.86.oe2203sp1.x86_64 #1 -+# 找到内核的boot文件 -+ls /boot/vmlinuz-5.10.0-136.12.0.86.oe2203sp1.x86_64 -+# 新增参数 -+grubby --update-kernel="/boot/vmlinuz-5.10.0-136.12.0.86.oe2203sp1.x86_64" --args="psi=1 psi_v1=1" -+# 重启 -+reboot -+``` -+ -+随后便可以在cgroup v1中使用psi的三个文件观测数据。 -+例如,在`/sys/fs/cgroup/cpu,cpuacct/kubepods/burstable//`目录下,涉及如下文件: -+ -+- cpu.pressure -+- memory.pressure -+- io.pressure -+ -+### 方案流程 -+ -+针对PSI格式数据,使用`some avg10`作为观测指标。它表示任一任务在10s内的平均阻塞时间占比。 -+ -+用户通过配置阈值保障在线Pod的资源可用以及高性能。具体来说,当阻塞占比超过某一阈值(默认为5%),则rubik按照一定策略驱逐离线Pod,释放相应资源。 -+ -+在离线业务由注解`volcano.sh/preemptable="true"/"false"`标识。 -+ -+```yaml -+annotations: -+ volcano.sh/preemptable: true -+``` -+ -+在线Pod的CPU和内存利用率偏高,rubik会驱逐当前占用CPU资源/内存资源最多的离线业务。若离线业务I/O高,则会选择驱逐CPU资源占用最多的离线业务。 -+> 注1:当前cgroup控制io带宽手段有效,难以精准判断驱逐哪个业务会降低io,因此暂时采用CPU利用率作为标准。 -+> -+> 注2:通过cadvisor库实时获取离线业务的CPU利用率、内存占用量、IO带宽等信息,按指标从大到小排序。 -+ -+需要处理可疑对象时则通过责任链设计模式传递事件处理请求,并执行相应操作。 -+ -+## 实现设计 -+ -+![PSI_implement](../images/psi/PSI_implement.svg) -+ -+## 接口设计 -+ -+```yaml -+data: -+ config.json: | -+ { -+ "agent": { -+ "enabledFeatures": [ -+ "psi" -+ ] -+ }, -+ "psi": { -+ "resource": [ -+ "cpu", -+ "memory", -+ "io", -+ ], -+ "interval": 10 -+ } -+ } -+``` -+ -+`psi`字段用于标识基于psi指标的干扰检测特性配置。目前,psi特性支持监测CPU、内存和I/O资源,用户可以按需配置该字段,单独或组合监测资源的PSI取值。 -+ -+| 配置键[=默认值] | 类型 | 描述 | 可选值 | -+| --------------- | ---------- | -------------------------------- | ----------- | -+| interval=10 |int|psi指标监测间隔(单位:秒)| [10,30]| -+| resource=[] | string数组 | 资源类型,声明何种资源需要被访问 | cpu, memory, io | -+| avg10Threshold=5.0 | float | psi some类型资源平均10s内的压制百分比阈值(单位:%),超过该阈值则驱逐离线业务 | [5.0,100]| -diff --git a/docs/images/psi/PSI_designation.svg b/docs/images/psi/PSI_designation.svg -new file mode 100644 -index 0000000..8b829e8 ---- /dev/null -+++ b/docs/images/psi/PSI_designation.svg -@@ -0,0 +1,16 @@ -+ -+ -+ -+ -+ -+ -+ 开始遍历在线Pod列表读取并解析Pod PSI指标是否支持cgroupV1 PSI接口?/sys/fs/cgroup/cpuacct/cpu.pressure...io.pressure ...memory.pressure标记PSI指标最大值分别为cpu_max、mem_max、io_maxcpu_max >= threshold?mem_max >= threshold?io_max >= threshold?按照CPU利用率对离线业务进行排序按照内存占用量对离线业务进行排序按io带宽对离线业务进行排序处理可疑对象日志告警应用驱逐 -\ No newline at end of file -diff --git a/docs/images/psi/PSI_implement.svg b/docs/images/psi/PSI_implement.svg -new file mode 100644 -index 0000000..9704504 ---- /dev/null -+++ b/docs/images/psi/PSI_implement.svg -@@ -0,0 +1,4 @@ -+ -+ -+ -+cadvisor

<<Interface>>
Metric


+ Update() error

+ AddTrigger(...Trigger) Metric


<<Interface>>...
BaseMetric
BaseMetric
attributes
attributes
trigger []Trigger
trigger []Trigger
operations
operations
AddTrigger(...Trigger) Metric
Update() error
AddTrigger(...Trigger) Metri...

Manager
Manager
attributes
attributes
PSIConfig
Viewer
PSIConfig...
operations
operations
IsRunner() bool
Run(context.Context)
SetConfig(helper.CnfigHandler) error
PreStart(api.Viewer) error
Terminate(api.Viewer) error
IsRunner() bool...

<<Singleton>>

expulsionExec



<<Singleton>>...

<<Singleton>>

resourceAnalysisExec



<<Singleton>>...
PSIConfig+ Interval: int+ Resource: []string

<<Interface>>
Analyzer


+ MaxCPUUtil([]*PodInfo) *PodInfo

+ MaxIOBandWidth([]*PodInfo) *PodInfo

+ MaxMemUtil([]*PodInfo)*PodInfo


<<Interface>>...

<<Interface>>
Trigger


+ Execute(TriggerFactor) error

+ SetNext(...Trigger) Trigger

+ Name() string

<<Interface>>...

<<Interface>>
TriggerFactor


+ Message() string

+ TargetPods() map[string]*typedef.PodInfo


<<Interface>>...
Use
Use
Use
Use
Manager
Manager
attributes
attributes
manager.Manager
manager.Manager
operations
operations

+ New()
+ Start() error
+ ContainerInfoV2() 

+ New()...
BasePSIMetric
BasePSIMetric
attributes
attributes
*metric.BaseMetric
avg10Threshold float64
resources []string
conservation map[string]*typedef.PodInfo
suspicion map[string]*typedef.PodInfo
*metric.BaseMetric...
operations
operations
Update() error
Update() error
Use
Use
Use
Use
Use
Use
Use
Use
Use
Use
Text is not SVG - cannot display
-\ No newline at end of file --- -2.41.0 - diff --git a/patch/0005-rubik-move-fssr-design-document-to-design-dir.patch b/patch/0005-rubik-move-fssr-design-document-to-design-dir.patch deleted file mode 100644 index efb77e0..0000000 --- a/patch/0005-rubik-move-fssr-design-document-to-design-dir.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 780a5e80311f5f3d188666733dcf276abc8e7e81 Mon Sep 17 00:00:00 2001 -From: vegbir -Date: Wed, 14 Jun 2023 17:14:16 +0800 -Subject: [PATCH 05/13] rubik: move fssr design document to design dir - -Signed-off-by: vegbir ---- - docs/{ => design}/fssr.md | 18 ++++++++++++++---- - .../fssr/flowchart.png} | Bin - .../fssr/sequence_diagram.png} | Bin - 3 files changed, 14 insertions(+), 4 deletions(-) - rename docs/{ => design}/fssr.md (90%) - rename docs/{png/rubik_fssr_2.png => images/fssr/flowchart.png} (100%) - rename docs/{png/rubik_fssr_1.png => images/fssr/sequence_diagram.png} (100%) - -diff --git a/docs/fssr.md b/docs/design/fssr.md -similarity index 90% -rename from docs/fssr.md -rename to docs/design/fssr.md -index 3fb36bd..184b364 100644 ---- a/docs/fssr.md -+++ b/docs/design/fssr.md -@@ -1,20 +1,27 @@ -+# 【需求设计】异步内存分级回收 fssr策略 -+ - ## 方案目标 -+ - 在混部集群中,在线和离线业务被同时部署到同一物理资源(节点)上,同时离线业务是内存资源消耗型,在线业务有波峰波谷,在离线业务之间内存资源竞争导致在线业务受影响。该方案目标在充分利用内存资源的同时保证在线QoS。 - - ## 总体设计 -+ - 各个模块之间的联系如下: --![](png/rubik_fssr_1.png) -+![sequence_diagram](../images/fssr/sequence_diagram.png) - - - 用户部署rubik,rubik向k8s注册监听pod事件。 - - 当离线业务被部署时k8s会通知rubik,rubik向该离线pod配置memory.high。 - - 同时rubik实时监控当前节点的内存使用量,使用fssr策略向pod配置memory.high。 - - ### 依赖说明 -+ - 内核需要支持memcg级内存水位线方案,即提供`memory.high`和`memory.high_async_ratio`。 - - ### 详细设计 -+ - 内存分级方案中,rubik新增FSSR内存处理模块,该模块主要处理获取主机(节点)的总内存(total memory)、预留内存(reserved memory)、剩余内存(free memory)。并根据FSSR算法设置离线内存的memory.high。具体策略如下: --![](png/rubik_fssr_2.png) -+![flowchart](../images/fssr/flowchart.png) -+ - - rubik启动时计算预留内存,默认为总内存的10%,如果总内存的10%超过10G,则为10G - - 配置离线容器的cgroup级别水位线,内核提供`memory.high`和`memory.high_async_ratio`两个接口,分别配置cgroup的软上限和警戒水位线。启动rubik时默认配置`memory.high`为`total_memory`(总内存)`*`80% - - 获取剩余内存free_memory -@@ -22,13 +29,16 @@ - - 持续一分钟free_memory>2`*`reserved_memory时提高离线的memory.high,每次提升总内存的1%,total_memory`*`1% - - 说明: -+ - 1. 离线应用memory.high的范围为`[total_memory*30%, total_memory*80%]` - - ### 配置说明 --``` -+ -+```json - "dynMemory": { - "policy": "fssr" - } - ``` -+ - - dynMemory表示动态内存 --- policy目前只支持fssr -\ No newline at end of file -+- policy目前只支持fssr -diff --git a/docs/png/rubik_fssr_2.png b/docs/images/fssr/flowchart.png -similarity index 100% -rename from docs/png/rubik_fssr_2.png -rename to docs/images/fssr/flowchart.png -diff --git a/docs/png/rubik_fssr_1.png b/docs/images/fssr/sequence_diagram.png -similarity index 100% -rename from docs/png/rubik_fssr_1.png -rename to docs/images/fssr/sequence_diagram.png --- -2.41.0 - diff --git a/patch/0006-rubik-fix-that-value-of-memory.high_async_ratio-lost.patch b/patch/0006-rubik-fix-that-value-of-memory.high_async_ratio-lost.patch deleted file mode 100644 index 6713c8c..0000000 --- a/patch/0006-rubik-fix-that-value-of-memory.high_async_ratio-lost.patch +++ /dev/null @@ -1,246 +0,0 @@ -From f7d9bc26368763d9c0bc9e7fc462dc0ab99a1784 Mon Sep 17 00:00:00 2001 -From: hanchao -Date: Fri, 16 Jun 2023 13:10:42 +0800 -Subject: [PATCH 06/13] rubik: fix that value of memory.high_async_ratio lost - efficacy - ---- - pkg/services/dynmemory/dynmemory.go | 22 +++++++- - pkg/services/dynmemory/fssr.go | 78 +++++++++++++++++------------ - 2 files changed, 67 insertions(+), 33 deletions(-) - -diff --git a/pkg/services/dynmemory/dynmemory.go b/pkg/services/dynmemory/dynmemory.go -index da859dd..b73f476 100644 ---- a/pkg/services/dynmemory/dynmemory.go -+++ b/pkg/services/dynmemory/dynmemory.go -@@ -6,6 +6,7 @@ import ( - "time" - - "isula.org/rubik/pkg/api" -+ "isula.org/rubik/pkg/core/typedef" - "isula.org/rubik/pkg/services/helper" - "k8s.io/apimachinery/pkg/util/wait" - ) -@@ -15,6 +16,7 @@ type DynMemoryAdapter interface { - preStart(api.Viewer) error - getInterval() int - dynamicAdjust() -+ setOfflinePod(path string) error - } - type dynMemoryConfig struct { - Policy string `json:"policy,omitempty"` -@@ -42,11 +44,11 @@ type DynMemory struct { - } - - // PreStart is an interface for calling a collection of methods when the service is pre-started --func (dynMem *DynMemory) PreStart(api api.Viewer) error { -+func (dynMem *DynMemory) PreStart(viewer api.Viewer) error { - if dynMem.dynMemoryAdapter == nil { - return nil - } -- return dynMem.dynMemoryAdapter.preStart(api) -+ return dynMem.dynMemoryAdapter.preStart(viewer) - } - - // SetConfig is an interface that invoke the ConfigHandler to obtain the corresponding configuration. -@@ -81,6 +83,22 @@ func (dynMem *DynMemory) IsRunner() bool { - return true - } - -+// AddPod to deal the event of adding a pod. -+func (dynMem *DynMemory) AddPod(podInfo *typedef.PodInfo) error { -+ if podInfo.Offline() { -+ return dynMem.dynMemoryAdapter.setOfflinePod(podInfo.Path) -+ } -+ return nil -+} -+ -+// UpdatePod to deal the pod update event. -+func (dynMem *DynMemory) UpdatePod(old, new *typedef.PodInfo) error { -+ if new.Offline() { -+ return dynMem.dynMemoryAdapter.setOfflinePod(new.Path) -+ } -+ return nil -+} -+ - // newAdapter to create adapter of dyn memory. - func newAdapter(policy string) DynMemoryAdapter { - switch policy { -diff --git a/pkg/services/dynmemory/fssr.go b/pkg/services/dynmemory/fssr.go -index 9fe4042..e23a4bc 100644 ---- a/pkg/services/dynmemory/fssr.go -+++ b/pkg/services/dynmemory/fssr.go -@@ -9,6 +9,7 @@ import ( - - "isula.org/rubik/pkg/api" - "isula.org/rubik/pkg/common/constant" -+ "isula.org/rubik/pkg/common/log" - "isula.org/rubik/pkg/common/util" - "isula.org/rubik/pkg/core/typedef" - "isula.org/rubik/pkg/core/typedef/cgroup" -@@ -30,71 +31,76 @@ type fssrDynMemAdapter struct { - memTotal int64 - memHigh int64 - reservedMem int64 -- api api.Viewer - count int64 -+ viewer api.Viewer - } - --// initFssrDynMemAdapter function -+// initFssrDynMemAdapter initializes a new fssrDynMemAdapter struct. - func initFssrDynMemAdapter() *fssrDynMemAdapter { - if total, err := getFieldMemory("MemTotal"); err == nil && total > 0 { - return &fssrDynMemAdapter{ - memTotal: total, - memHigh: total * 8 / 10, -- reservedMem: total * 8 / 10, -+ reservedMem: total * 1 / 10, -+ count: 0, - } - } - return nil - } - --// preStart function --func (f *fssrDynMemAdapter) preStart(api api.Viewer) error { -- f.api = api -+// preStart initializes the fssrDynMemAdapter with the provided viewer and -+// deals with any existing pods. -+func (f *fssrDynMemAdapter) preStart(viewer api.Viewer) error { -+ f.viewer = viewer - return f.dealExistedPods() - } - --// getInterval function -+// getInterval returns the fssrInterval value. - func (f *fssrDynMemAdapter) getInterval() int { - return fssrInterval - } - --// dynadjust function -+// dynamicAdjust adjusts the memory allocation of the fssrDynMemAdapter by -+// increasing or decreasing the amount of memory reserved for offline pods -+// based on the current amount of free memory available on the system. - func (f *fssrDynMemAdapter) dynamicAdjust() { - var freeMem int64 - var err error - if freeMem, err = getFieldMemory("MemFree"); err != nil { - return - } -+ -+ var memHigh int64 = 0 - if freeMem > 2*f.reservedMem { - if f.count < fssrIntervalCount { - f.count++ - return - } -- memHigh := f.memHigh + f.memTotal/100 -+ // no risk of overflow -+ memHigh = f.memHigh + f.memTotal/100 - if memHigh > f.memTotal*8/10 { - memHigh = f.memTotal * 8 / 10 - } -- if memHigh != f.memHigh { -- f.memHigh = memHigh -- f.adjustOfflinePodHighMemory() -- } - } else if freeMem < f.reservedMem { -- memHigh := f.memHigh - f.memTotal/10 -+ memHigh = f.memHigh - f.memTotal/10 - if memHigh < 0 { - return - } - if memHigh < f.memTotal*3/10 { - memHigh = f.memTotal * 3 / 10 - } -- if memHigh != f.memHigh { -- f.memHigh = memHigh -- f.adjustOfflinePodHighMemory() -- } - } -+ if memHigh != f.memHigh { -+ f.memHigh = memHigh -+ f.adjustOfflinePodHighMemory() -+ } -+ - f.count = 0 - } - -+// adjustOfflinePodHighMemory adjusts the memory.high of offline pods. - func (f *fssrDynMemAdapter) adjustOfflinePodHighMemory() error { -- pods := listOfflinePods(f.api) -+ pods := listOfflinePods(f.viewer) - for _, podInfo := range pods { - if err := setOfflinePodHighMemory(podInfo.Path, f.memHigh); err != nil { - return err -@@ -103,20 +109,18 @@ func (f *fssrDynMemAdapter) adjustOfflinePodHighMemory() error { - return nil - } - --// dealExistedPods function -+// dealExistedPods handles offline pods by setting their memory.high and memory.high_async_ratio - func (f *fssrDynMemAdapter) dealExistedPods() error { -- pods := listOfflinePods(f.api) -+ pods := listOfflinePods(f.viewer) - for _, podInfo := range pods { -- if err := setOfflinePodHighMemory(podInfo.Path, f.memHigh); err != nil { -- return err -- } -- if err := setOfflinePodHighAsyncRatio(podInfo.Path, highRatio); err != nil { -- return err -+ if err := f.setOfflinePod(podInfo.Path); err != nil { -+ log.Errorf("set fssr of offline pod[%v] error:%v", podInfo.UID, err) - } - } - return nil - } - -+// listOfflinePods returns a map of offline PodInfo objects. - func listOfflinePods(viewer api.Viewer) map[string]*typedef.PodInfo { - offlineValue := "true" - return viewer.ListPodsWithOptions(func(pi *typedef.PodInfo) bool { -@@ -124,23 +128,35 @@ func listOfflinePods(viewer api.Viewer) map[string]*typedef.PodInfo { - }) - } - --func setOfflinePodHighMemory(podPath string, high int64) error { -- if err := cgroup.WriteCgroupFile(strconv.FormatUint(uint64(high), scale), memcgRootDir, -+// setOfflinePod sets the offline pod for the given path. -+func (f *fssrDynMemAdapter) setOfflinePod(path string) error { -+ if err := setOfflinePodHighAsyncRatio(path, highRatio); err != nil { -+ return err -+ } -+ return setOfflinePodHighMemory(path, f.memHigh) -+} -+ -+// setOfflinePodHighMemory sets the high memory limit for the specified pod in the -+// cgroup memory -+func setOfflinePodHighMemory(podPath string, memHigh int64) error { -+ if err := cgroup.WriteCgroupFile(strconv.FormatUint(uint64(memHigh), scale), memcgRootDir, - podPath, highMemFile); err != nil { - return err - } - return nil - } - --func setOfflinePodHighAsyncRatio(podPath string, ratio uint64) error { -- if err := cgroup.WriteCgroupFile(strconv.FormatUint(ratio, scale), memcgRootDir, -+// setOfflinePodHighAsyncRatio sets the high memory async ratio for a pod in an offline state. -+func setOfflinePodHighAsyncRatio(podPath string, ratio uint) error { -+ if err := cgroup.WriteCgroupFile(strconv.FormatUint(uint64(ratio), scale), memcgRootDir, - podPath, highMemAsyncRatioFile); err != nil { - return err - } - return nil - } - --// getFieldMemory function -+// getFieldMemory retrieves the amount of memory used by a certain field in the -+// memory information file. - func getFieldMemory(field string) (int64, error) { - if !util.PathExist(memInfoFile) { - return 0, fmt.Errorf("%v: no such file or diretory", memInfoFile) --- -2.41.0 - diff --git a/patch/0007-bugfix-fix-typos-calling-order-of-waitgroup.patch b/patch/0007-bugfix-fix-typos-calling-order-of-waitgroup.patch deleted file mode 100644 index 1454f6e..0000000 --- a/patch/0007-bugfix-fix-typos-calling-order-of-waitgroup.patch +++ /dev/null @@ -1,127 +0,0 @@ -From 5d84595d50dc898b1c7307719cbd0807aff3fd99 Mon Sep 17 00:00:00 2001 -From: vegbir -Date: Mon, 19 Jun 2023 11:47:53 +0800 -Subject: [PATCH 07/13] bugfix: fix typos & calling order of waitgroup - -Signed-off-by: vegbir ---- - pkg/core/trigger/base.go | 4 ++-- - pkg/core/trigger/expulsion.go | 2 +- - pkg/core/trigger/resourceanalysis.go | 6 +++--- - pkg/rubik/servicemanager.go | 6 +++--- - 4 files changed, 9 insertions(+), 9 deletions(-) - -diff --git a/pkg/core/trigger/base.go b/pkg/core/trigger/base.go -index 7f1fbe9..c212f66 100644 ---- a/pkg/core/trigger/base.go -+++ b/pkg/core/trigger/base.go -@@ -70,8 +70,8 @@ type TreeTrigger struct { - subTriggers []Trigger - } - --// withTreeTirgger returns a BaseMetric object --func withTreeTirgger(name string, exec Executor) *TreeTrigger { -+// withTreeTrigger returns a BaseMetric object -+func withTreeTrigger(name string, exec Executor) *TreeTrigger { - return &TreeTrigger{ - name: name, - exec: exec, -diff --git a/pkg/core/trigger/expulsion.go b/pkg/core/trigger/expulsion.go -index 87dd484..e438d3d 100644 ---- a/pkg/core/trigger/expulsion.go -+++ b/pkg/core/trigger/expulsion.go -@@ -41,7 +41,7 @@ var expulsionCreator = func() Trigger { - appendUsedExecutors(ExpulsionAnno, expulsionExec) - } - } -- return withTreeTirgger(ExpulsionAnno, expulsionExec) -+ return withTreeTrigger(ExpulsionAnno, expulsionExec) - } - - // Expulsion is the trigger to evict pods -diff --git a/pkg/core/trigger/resourceanalysis.go b/pkg/core/trigger/resourceanalysis.go -index a3d99e5..7e7413e 100644 ---- a/pkg/core/trigger/resourceanalysis.go -+++ b/pkg/core/trigger/resourceanalysis.go -@@ -49,7 +49,7 @@ var analyzerCreator = func() Trigger { - appendUsedExecutors(ResourceAnalysisAnno, resourceAnalysisExec) - } - } -- return withTreeTirgger(ResourceAnalysisAnno, resourceAnalysisExec) -+ return withTreeTrigger(ResourceAnalysisAnno, resourceAnalysisExec) - } - - // rreqOpt is the option to get information from cadvisor -@@ -161,7 +161,7 @@ func (a *Analyzer) maxCPUUtil(pods map[string]*typedef.PodInfo) *typedef.PodInfo - } - } - if chosen != nil { -- log.Infof("find the max cpu util pod \"%v\": %v", chosen.Name, maxUtil) -+ log.Infof("find the pod(%v) with the highest cpu utilization(%v)", chosen.Name, maxUtil) - } - return chosen - } -@@ -185,7 +185,7 @@ func (a *Analyzer) maxMemoryUtil(pods map[string]*typedef.PodInfo) *typedef.PodI - } - } - if chosen != nil { -- log.Infof("find the max cpu util pod \"%v\": %v", chosen.Name, maxUtil) -+ log.Infof("find the pod(%v) with the highest memory utilization(%v)", chosen.Name, maxUtil) - } - return chosen - } -diff --git a/pkg/rubik/servicemanager.go b/pkg/rubik/servicemanager.go -index 3e162b6..c3b252a 100644 ---- a/pkg/rubik/servicemanager.go -+++ b/pkg/rubik/servicemanager.go -@@ -218,7 +218,6 @@ func (manager *ServiceManager) addFunc(event typedef.Event) { - - const retryCount = 5 - addOnce := func(s services.Service, podInfo *typedef.PodInfo, wg *sync.WaitGroup) { -- wg.Add(1) - for i := 0; i < retryCount; i++ { - if err := s.AddPod(podInfo); err != nil { - log.Errorf("service %s add func failed: %v", s.ID(), err) -@@ -231,6 +230,7 @@ func (manager *ServiceManager) addFunc(event typedef.Event) { - manager.RLock() - var wg sync.WaitGroup - for _, s := range manager.RunningServices { -+ wg.Add(1) - go addOnce(s, podInfo.DeepCopy(), &wg) - } - wg.Wait() -@@ -250,7 +250,6 @@ func (manager *ServiceManager) updateFunc(event typedef.Event) { - return - } - runOnce := func(s services.Service, old, new *typedef.PodInfo, wg *sync.WaitGroup) { -- wg.Add(1) - log.Debugf("update Func with service: %s", s.ID()) - if err := s.UpdatePod(old, new); err != nil { - log.Errorf("service %s update func failed: %v", s.ID(), err) -@@ -260,6 +259,7 @@ func (manager *ServiceManager) updateFunc(event typedef.Event) { - manager.RLock() - var wg sync.WaitGroup - for _, s := range manager.RunningServices { -+ wg.Add(1) - go runOnce(s, podInfos[0], podInfos[1], &wg) - } - wg.Wait() -@@ -275,7 +275,6 @@ func (manager *ServiceManager) deleteFunc(event typedef.Event) { - } - - deleteOnce := func(s services.Service, podInfo *typedef.PodInfo, wg *sync.WaitGroup) { -- wg.Add(1) - if err := s.DeletePod(podInfo); err != nil { - log.Errorf("service %s delete func failed: %v", s.ID(), err) - } -@@ -284,6 +283,7 @@ func (manager *ServiceManager) deleteFunc(event typedef.Event) { - manager.RLock() - var wg sync.WaitGroup - for _, s := range manager.RunningServices { -+ wg.Add(1) - go deleteOnce(s, podInfo.DeepCopy(), &wg) - } - wg.Wait() --- -2.41.0 - diff --git a/patch/0008-rubik-test-coverage-improvement-for-pkg-config.patch b/patch/0008-rubik-test-coverage-improvement-for-pkg-config.patch deleted file mode 100644 index d09c3fc..0000000 --- a/patch/0008-rubik-test-coverage-improvement-for-pkg-config.patch +++ /dev/null @@ -1,135 +0,0 @@ -From 0403c7860be078ba67c5e05d7628411f72977d6b Mon Sep 17 00:00:00 2001 -From: jingxiaolu -Date: Sun, 11 Jun 2023 22:34:08 +0800 -Subject: [PATCH 08/13] rubik: test coverage improvement for pkg/config - -1. improve test coverage for pkg/config from 57.4% to 80.3% -2. change cpuLimit to 1 in TestStatusStore_AddCgroup-TC5 for nano vm - -Signed-off-by: jingxiaolu ---- - pkg/config/config_test.go | 69 ++++++++++++++++++++-- - pkg/lib/cpu/quotaturbo/statusstore_test.go | 2 +- - 2 files changed, 66 insertions(+), 5 deletions(-) - -diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go -index 03ff4ca..8766e04 100644 ---- a/pkg/config/config_test.go -+++ b/pkg/config/config_test.go -@@ -27,7 +27,8 @@ import ( - "isula.org/rubik/pkg/common/util" - ) - --var rubikConfig string = ` -+func TestNewConfig(t *testing.T) { -+ var rubikConfig string = ` - { - "agent": { - "logDriver": "stdio", -@@ -85,27 +86,87 @@ var rubikConfig string = ` - } - } - ` -+ if !util.PathExist(constant.TmpTestDir) { -+ if err := os.Mkdir(constant.TmpTestDir, constant.DefaultDirMode); err != nil { -+ assert.NoError(t, err) -+ } -+ } - --func TestNewConfig(t *testing.T) { -+ defer os.RemoveAll(constant.TmpTestDir) -+ -+ tmpConfigFile := filepath.Join(constant.TmpTestDir, "config.json") -+ defer os.Remove(tmpConfigFile) -+ if err := ioutil.WriteFile(tmpConfigFile, []byte(rubikConfig), constant.DefaultFileMode); err != nil { -+ assert.NoError(t, err) -+ } -+ -+ c := NewConfig(JSON) -+ if err := c.LoadConfig(tmpConfigFile); err != nil { -+ assert.NoError(t, err) -+ } -+ fmt.Printf("config: %v", c) -+} -+ -+func TestNewConfigNoConfig(t *testing.T) { -+ c := &Config{} -+ if err := c.LoadConfig(""); err == nil { -+ t.Fatalf("Config file exists") -+ } -+} -+ -+func TestNewConfigDamagedConfig(t *testing.T) { -+ var rubikConfig string = `{` - if !util.PathExist(constant.TmpTestDir) { - if err := os.Mkdir(constant.TmpTestDir, constant.DefaultDirMode); err != nil { - assert.NoError(t, err) - } - } -+ defer os.RemoveAll(constant.TmpTestDir) -+ -+ tmpConfigFile := filepath.Join(constant.TmpTestDir, "config.json") -+ defer os.Remove(tmpConfigFile) -+ if err := ioutil.WriteFile(tmpConfigFile, []byte(rubikConfig), constant.DefaultFileMode); err != nil { -+ assert.NoError(t, err) -+ } -+ -+ c := NewConfig(JSON) -+ if err := c.LoadConfig(tmpConfigFile); err == nil { -+ t.Fatalf("Damaged config file should not be loaded.") -+ } -+} - -+func TestNewConfigNoAgentConfig(t *testing.T) { -+ var rubikConfig string = `{}` -+ if !util.PathExist(constant.TmpTestDir) { -+ if err := os.Mkdir(constant.TmpTestDir, constant.DefaultDirMode); err != nil { -+ assert.NoError(t, err) -+ } -+ } - defer os.RemoveAll(constant.TmpTestDir) - - tmpConfigFile := filepath.Join(constant.TmpTestDir, "config.json") - defer os.Remove(tmpConfigFile) - if err := ioutil.WriteFile(tmpConfigFile, []byte(rubikConfig), constant.DefaultFileMode); err != nil { - assert.NoError(t, err) -- return - } - - c := NewConfig(JSON) - if err := c.LoadConfig(tmpConfigFile); err != nil { - assert.NoError(t, err) -- return - } - fmt.Printf("config: %v", c) - } -+ -+func TestUnwrapServiceConfig(t *testing.T) { -+ c := &Config{} -+ c.Fields = make(map[string]interface{}) -+ c.Fields["agent"] = nil -+ c.Fields["config"] = nil -+ sc := c.UnwrapServiceConfig() -+ if _, exist := sc["agent"]; exist { -+ t.Fatalf("agent is exists") -+ } -+ if _, exist := sc["config"]; !exist { -+ t.Fatalf("config is not exists") -+ } -+} -diff --git a/pkg/lib/cpu/quotaturbo/statusstore_test.go b/pkg/lib/cpu/quotaturbo/statusstore_test.go -index 68c01c5..ce1684d 100644 ---- a/pkg/lib/cpu/quotaturbo/statusstore_test.go -+++ b/pkg/lib/cpu/quotaturbo/statusstore_test.go -@@ -354,7 +354,7 @@ func TestStatusStore_AddCgroup(t *testing.T) { - name: "TC5-add successfully", - args: args{ - cgroupPath: contPath, -- cpuLimit: 2, -+ cpuLimit: 1, - }, - fields: fields{ - Config: &Config{ --- -2.41.0 - diff --git a/patch/0009-rubik-optimize-dynamicAdjust-to-be-clear-and-add-log.patch b/patch/0009-rubik-optimize-dynamicAdjust-to-be-clear-and-add-log.patch deleted file mode 100644 index 3b822b0..0000000 --- a/patch/0009-rubik-optimize-dynamicAdjust-to-be-clear-and-add-log.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 3d63470cb0638f9b426f2060c260c45f27c36f04 Mon Sep 17 00:00:00 2001 -From: hanchao -Date: Mon, 19 Jun 2023 20:29:41 +0800 -Subject: [PATCH 09/13] rubik: optimize `dynamicAdjust` to be clear and add log - for error - ---- - pkg/services/dynmemory/fssr.go | 18 ++++++++++++++---- - 1 file changed, 14 insertions(+), 4 deletions(-) - -diff --git a/pkg/services/dynmemory/fssr.go b/pkg/services/dynmemory/fssr.go -index e23a4bc..2c81ccf 100644 ---- a/pkg/services/dynmemory/fssr.go -+++ b/pkg/services/dynmemory/fssr.go -@@ -4,6 +4,7 @@ import ( - "bufio" - "bytes" - "fmt" -+ "math" - "os" - "strconv" - -@@ -76,26 +77,35 @@ func (f *fssrDynMemAdapter) dynamicAdjust() { - f.count++ - return - } -- // no risk of overflow -+ // check int64 overflow -+ if f.memHigh > math.MaxInt64-f.memTotal/100 { -+ log.Errorf("int64 overflow") -+ return -+ } - memHigh = f.memHigh + f.memTotal/100 - if memHigh > f.memTotal*8/10 { - memHigh = f.memTotal * 8 / 10 - } -+ f.adjustMemoryHigh(memHigh) - } else if freeMem < f.reservedMem { - memHigh = f.memHigh - f.memTotal/10 -- if memHigh < 0 { -+ if memHigh <= 0 { -+ log.Errorf("memHigh is equal to or less than 0") - return - } - if memHigh < f.memTotal*3/10 { - memHigh = f.memTotal * 3 / 10 - } -+ f.adjustMemoryHigh(memHigh) - } -+ f.count = 0 -+} -+ -+func (f *fssrDynMemAdapter) adjustMemoryHigh(memHigh int64) { - if memHigh != f.memHigh { - f.memHigh = memHigh - f.adjustOfflinePodHighMemory() - } -- -- f.count = 0 - } - - // adjustOfflinePodHighMemory adjusts the memory.high of offline pods. --- -2.41.0 - diff --git a/patch/0010-support-isulad-container-engine.patch b/patch/0010-support-isulad-container-engine.patch deleted file mode 100644 index b182d74..0000000 --- a/patch/0010-support-isulad-container-engine.patch +++ /dev/null @@ -1,76 +0,0 @@ -From f2322711a03a998b34b54a5cc784c727f814cc96 Mon Sep 17 00:00:00 2001 -From: vegbir -Date: Tue, 26 Sep 2023 17:05:06 +0800 -Subject: [PATCH 10/13] support isulad container engine - -Signed-off-by: vegbir ---- - pkg/core/typedef/containerinfo.go | 5 +++++ - pkg/core/typedef/rawpod.go | 8 ++++++-- - 2 files changed, 11 insertions(+), 2 deletions(-) - -diff --git a/pkg/core/typedef/containerinfo.go b/pkg/core/typedef/containerinfo.go -index 39cb2cc..d810e5b 100644 ---- a/pkg/core/typedef/containerinfo.go -+++ b/pkg/core/typedef/containerinfo.go -@@ -15,6 +15,7 @@ - package typedef - - import ( -+ "fmt" - "path/filepath" - "strings" - "sync" -@@ -32,12 +33,15 @@ const ( - DOCKER - // CONTAINERD means containerd container engine - CONTAINERD -+ // ISULAD means isulad container engine -+ ISULAD - ) - - var ( - supportEnginesPrefixMap = map[ContainerEngineType]string{ - DOCKER: "docker://", - CONTAINERD: "containerd://", -+ ISULAD: "iSulad://", - } - currentContainerEngines = UNDEFINED - setContainerEnginesOnce sync.Once -@@ -85,6 +89,7 @@ func fixContainerEngine(containerID string) { - for engine, prefix := range supportEnginesPrefixMap { - if strings.HasPrefix(containerID, prefix) { - currentContainerEngines = engine -+ fmt.Printf("The container engine is %v\n", strings.Split(currentContainerEngines.Prefix(), ":")[0]) - return - } - } -diff --git a/pkg/core/typedef/rawpod.go b/pkg/core/typedef/rawpod.go -index 59dfb59..138c580 100644 ---- a/pkg/core/typedef/rawpod.go -+++ b/pkg/core/typedef/rawpod.go -@@ -149,7 +149,11 @@ func (pod *RawPod) ExtractContainerInfos() map[string]*ContainerInfo { - podCgroupPath := pod.CgroupPath() - for _, rawContainer := range nameRawContainersMap { - id, err := rawContainer.GetRealContainerID() -- if id == "" || err != nil { -+ if err != nil { -+ fmt.Printf("failed to parse container ID: %v\n", err) -+ continue -+ } -+ if id == "" { - continue - } - idContainersMap[id] = NewContainerInfo(id, podCgroupPath, rawContainer) -@@ -169,7 +173,7 @@ func (cont *RawContainer) GetRealContainerID() (string, error) { - setContainerEnginesOnce.Do(func() { fixContainerEngine(cont.status.ContainerID) }) - - if !currentContainerEngines.Support(cont) { -- return "", fmt.Errorf("fatal error : unsupported container engine") -+ return "", fmt.Errorf("unsupported container engine: %v", cont.status.ContainerID) - } - - cid := cont.status.ContainerID[len(currentContainerEngines.Prefix()):] --- -2.41.0 - diff --git a/patch/0011-support-systemd-cgroup-driver.patch b/patch/0011-support-systemd-cgroup-driver.patch deleted file mode 100644 index 81e93e7..0000000 --- a/patch/0011-support-systemd-cgroup-driver.patch +++ /dev/null @@ -1,197 +0,0 @@ -From 75075dbb1845e8714fa87ee0e19f80b8845dce71 Mon Sep 17 00:00:00 2001 -From: suoxiaocong -Date: Mon, 22 Apr 2024 15:52:03 +0800 -Subject: [PATCH 11/13] support systemd cgroup driver - ---- - pkg/common/constant/constant.go | 7 +++++++ - pkg/config/config.go | 12 +++++++----- - pkg/core/typedef/cgroup/common.go | 11 +++++++++++ - pkg/core/typedef/containerinfo.go | 16 +++++++++++++++- - pkg/core/typedef/rawpod.go | 30 ++++++++++++++++++++++++++++-- - pkg/rubik/rubik.go | 3 +++ - 6 files changed, 71 insertions(+), 8 deletions(-) - -diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go -index 2df0b81..4f22ef0 100644 ---- a/pkg/common/constant/constant.go -+++ b/pkg/common/constant/constant.go -@@ -111,3 +111,10 @@ const ( - // PSIIOCgroupFileName is name of cgroup file used for detecting io psi - PSIIOCgroupFileName = "io.pressure" - ) -+ -+const ( -+ // CgroupDriverSystemd is global config for cgroupfs driver choice: systemd driver -+ CgroupDriverSystemd = "systemd" -+ // CgroupDriverCgroupfs is global config for cgroupfs driver choice: cgroupfs driver -+ CgroupDriverCgroupfs = "cgroupfs" -+) -diff --git a/pkg/config/config.go b/pkg/config/config.go -index 16ab6e1..6ae775f 100644 ---- a/pkg/config/config.go -+++ b/pkg/config/config.go -@@ -44,6 +44,7 @@ type AgentConfig struct { - LogDir string `json:"logDir,omitempty"` - CgroupRoot string `json:"cgroupRoot,omitempty"` - EnabledFeatures []string `json:"enabledFeatures,omitempty"` -+ CgroupDriver string `json:"cgroupDriver,omitempty"` - } - - // NewConfig returns an config object pointer -@@ -51,11 +52,12 @@ func NewConfig(pType parserType) *Config { - c := &Config{ - ConfigParser: defaultParserFactory.getParser(pType), - Agent: &AgentConfig{ -- LogDriver: constant.LogDriverStdio, -- LogSize: constant.DefaultLogSize, -- LogLevel: constant.DefaultLogLevel, -- LogDir: constant.DefaultLogDir, -- CgroupRoot: constant.DefaultCgroupRoot, -+ LogDriver: constant.LogDriverStdio, -+ LogSize: constant.DefaultLogSize, -+ LogLevel: constant.DefaultLogLevel, -+ LogDir: constant.DefaultLogDir, -+ CgroupRoot: constant.DefaultCgroupRoot, -+ CgroupDriver: constant.CgroupDriverCgroupfs, - }, - } - return c -diff --git a/pkg/core/typedef/cgroup/common.go b/pkg/core/typedef/cgroup/common.go -index 8c0bd81..a952959 100644 ---- a/pkg/core/typedef/cgroup/common.go -+++ b/pkg/core/typedef/cgroup/common.go -@@ -25,6 +25,17 @@ import ( - ) - - var rootDir = constant.DefaultCgroupRoot -+var cgroupDriver = constant.CgroupDriverCgroupfs -+ -+// SetCgroupDriver is the setter of global cgroup driver -+func SetCgroupDriver(driver string) { -+ cgroupDriver = driver -+} -+ -+// GetCgroupDriver is the getter of global cgroup driver -+func GetCgroupDriver() string { -+ return cgroupDriver -+} - - // AbsoluteCgroupPath returns the absolute path of the cgroup - func AbsoluteCgroupPath(elem ...string) string { -diff --git a/pkg/core/typedef/containerinfo.go b/pkg/core/typedef/containerinfo.go -index d810e5b..f751b25 100644 ---- a/pkg/core/typedef/containerinfo.go -+++ b/pkg/core/typedef/containerinfo.go -@@ -20,6 +20,7 @@ import ( - "strings" - "sync" - -+ "isula.org/rubik/pkg/common/constant" - "isula.org/rubik/pkg/core/typedef/cgroup" - ) - -@@ -45,6 +46,11 @@ var ( - } - currentContainerEngines = UNDEFINED - setContainerEnginesOnce sync.Once -+ containerEngineScopes = map[ContainerEngineType]string{ -+ DOCKER: "docker", -+ CONTAINERD: "cri-containerd", -+ ISULAD: "isulad", -+ } - ) - - // Support returns true when the container uses the container engine -@@ -76,10 +82,18 @@ type ContainerInfo struct { - // NewContainerInfo creates a ContainerInfo instance - func NewContainerInfo(id, podCgroupPath string, rawContainer *RawContainer) *ContainerInfo { - requests, limits := rawContainer.GetResourceMaps() -+ var path string -+ if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -+ scopeName := containerEngineScopes[currentContainerEngines] -+ path = filepath.Join(podCgroupPath, scopeName+"-"+id+".scope") -+ } else { -+ path = filepath.Join(podCgroupPath, id) -+ } -+ - return &ContainerInfo{ - Name: rawContainer.status.Name, - ID: id, -- Hierarchy: cgroup.Hierarchy{Path: filepath.Join(podCgroupPath, id)}, -+ Hierarchy: cgroup.Hierarchy{Path: path}, - RequestResources: requests, - LimitResources: limits, - } -diff --git a/pkg/core/typedef/rawpod.go b/pkg/core/typedef/rawpod.go -index 138c580..895e9d4 100644 ---- a/pkg/core/typedef/rawpod.go -+++ b/pkg/core/typedef/rawpod.go -@@ -23,6 +23,7 @@ import ( - "k8s.io/apimachinery/pkg/api/resource" - - "isula.org/rubik/pkg/common/constant" -+ "isula.org/rubik/pkg/core/typedef/cgroup" - ) - - const ( -@@ -103,7 +104,7 @@ func (pod *RawPod) CgroupPath() string { - return "" - } - /* -- example: -+ for cgroupfs cgroup driver - 1. Burstable: pod requests are less than the value of limits and not 0; - kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3 - 2. BestEffort: pod requests and limits are both 0; -@@ -111,7 +112,32 @@ func (pod *RawPod) CgroupPath() string { - 3. Guaranteed: pod requests are equal to the value set by limits; - kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3 - */ -- return filepath.Join(constant.KubepodsCgroup, qosClassPath, constant.PodCgroupNamePrefix+id) -+ /* -+ for systemd cgroup driver -+ 1. burstable: -+ kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -+ 2. besteffort -+ kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -+ 3. guaranteed -+ kubepods.slice/kubepods-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/ -+ */ -+ -+ if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -+ if qosClassPath == "" { -+ return filepath.Join( -+ constant.KubepodsCgroup+".slice", -+ constant.KubepodsCgroup+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -+ ) -+ } -+ return filepath.Join( -+ constant.KubepodsCgroup+".slice", -+ constant.KubepodsCgroup+"-"+qosClassPath+".slice", -+ constant.KubepodsCgroup+"-"+qosClassPath+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -+ ) -+ } else { -+ return filepath.Join(constant.KubepodsCgroup, qosClassPath, constant.PodCgroupNamePrefix+id) -+ } -+ - } - - // ListRawContainers returns all RawContainers in the RawPod -diff --git a/pkg/rubik/rubik.go b/pkg/rubik/rubik.go -index 3864956..3595ff1 100644 ---- a/pkg/rubik/rubik.go -+++ b/pkg/rubik/rubik.go -@@ -126,6 +126,9 @@ func runAgent(ctx context.Context) error { - - // 3. enable cgroup system - cgroup.InitMountDir(c.Agent.CgroupRoot) -+ if c.Agent.CgroupDriver != "" { -+ cgroup.SetCgroupDriver(c.Agent.CgroupDriver) -+ } - - // 4. init service components - services.InitServiceComponents(defaultRubikFeature) --- -2.41.0 - diff --git a/patch/0012-support-crio-container-engine.patch b/patch/0012-support-crio-container-engine.patch deleted file mode 100644 index fb115d9..0000000 --- a/patch/0012-support-crio-container-engine.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 3741f7254be1a6766f7ca2056e689d6e84febb95 Mon Sep 17 00:00:00 2001 -From: weiyuan -Date: Tue, 21 May 2024 09:37:59 +0800 -Subject: [PATCH 12/13] support crio container engine - ---- - pkg/core/typedef/containerinfo.go | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/pkg/core/typedef/containerinfo.go b/pkg/core/typedef/containerinfo.go -index f751b25..845105f 100644 ---- a/pkg/core/typedef/containerinfo.go -+++ b/pkg/core/typedef/containerinfo.go -@@ -36,6 +36,8 @@ const ( - CONTAINERD - // ISULAD means isulad container engine - ISULAD -+ // CRIO means crio container engine -+ CRIO - ) - - var ( -@@ -43,6 +45,7 @@ var ( - DOCKER: "docker://", - CONTAINERD: "containerd://", - ISULAD: "iSulad://", -+ CRIO: "cri-o://", - } - currentContainerEngines = UNDEFINED - setContainerEnginesOnce sync.Once -@@ -50,6 +53,7 @@ var ( - DOCKER: "docker", - CONTAINERD: "cri-containerd", - ISULAD: "isulad", -+ CRIO: "crio", - } - ) - --- -2.41.0 - diff --git a/patch/0013-informer-add-nri-support.patch b/patch/0013-informer-add-nri-support.patch deleted file mode 100644 index c7ca0ca..0000000 --- a/patch/0013-informer-add-nri-support.patch +++ /dev/null @@ -1,191580 +0,0 @@ -From 79e30c1c990829b1bfbfe4fdc64644e06980bb9f Mon Sep 17 00:00:00 2001 -From: vegbir -Date: Tue, 20 Aug 2024 14:03:52 +0000 -Subject: [PATCH 13/13] informer-add-nri-support - ---- - go.mod | 33 +- - go.sum | 41 + - pkg/api/api.go | 1 + - pkg/common/constant/constant.go | 21 + - pkg/config/config.go | 2 + - pkg/core/typedef/containerinfo.go | 20 +- - pkg/core/typedef/event.go | 32 +- - pkg/core/typedef/nrirawpod.go | 461 + - pkg/core/typedef/podinfo.go | 2 + - pkg/core/typedef/rawpod.go | 74 +- - pkg/informer/apiserverinformer.go | 3 + - pkg/informer/informerfactory.go | 3 + - pkg/informer/nriinformer.go | 147 + - pkg/podmanager/podcache.go | 15 + - pkg/podmanager/podmanager.go | 212 + - pkg/rubik/rubik.go | 28 +- - vendor/github.com/beorn7/perks/LICENSE | 20 + - .../beorn7/perks/quantile/exampledata.txt | 2388 + - .../beorn7/perks/quantile/stream.go | 316 + - .../github.com/cespare/xxhash/v2/LICENSE.txt | 22 + - vendor/github.com/cespare/xxhash/v2/README.md | 72 + - .../github.com/cespare/xxhash/v2/testall.sh | 10 + - vendor/github.com/cespare/xxhash/v2/xxhash.go | 228 + - .../cespare/xxhash/v2/xxhash_amd64.s | 209 + - .../cespare/xxhash/v2/xxhash_arm64.s | 183 + - .../cespare/xxhash/v2/xxhash_asm.go | 15 + - .../cespare/xxhash/v2/xxhash_other.go | 76 + - .../cespare/xxhash/v2/xxhash_safe.go | 16 + - .../cespare/xxhash/v2/xxhash_unsafe.go | 58 + - .../checkpoint-restore/go-criu/v5/.gitignore | 0 - .../go-criu/v5/.golangci.yml | 0 - .../checkpoint-restore/go-criu/v5/LICENSE | 0 - .../checkpoint-restore/go-criu/v5/Makefile | 0 - .../checkpoint-restore/go-criu/v5/README.md | 0 - .../checkpoint-restore/go-criu/v5/features.go | 0 - .../checkpoint-restore/go-criu/v5/main.go | 0 - .../checkpoint-restore/go-criu/v5/notify.go | 0 - .../go-criu/v5/rpc/rpc.pb.go | 0 - .../go-criu/v5/rpc/rpc.proto | 0 - vendor/github.com/cilium/ebpf/.clang-format | 0 - vendor/github.com/cilium/ebpf/.gitignore | 0 - vendor/github.com/cilium/ebpf/.golangci.yaml | 0 - vendor/github.com/cilium/ebpf/ARCHITECTURE.md | 0 - .../github.com/cilium/ebpf/CODE_OF_CONDUCT.md | 0 - vendor/github.com/cilium/ebpf/CONTRIBUTING.md | 0 - vendor/github.com/cilium/ebpf/LICENSE | 0 - vendor/github.com/cilium/ebpf/Makefile | 0 - vendor/github.com/cilium/ebpf/README.md | 0 - vendor/github.com/cilium/ebpf/asm/alu.go | 0 - .../github.com/cilium/ebpf/asm/alu_string.go | 0 - vendor/github.com/cilium/ebpf/asm/doc.go | 0 - vendor/github.com/cilium/ebpf/asm/func.go | 0 - .../github.com/cilium/ebpf/asm/func_string.go | 0 - .../github.com/cilium/ebpf/asm/instruction.go | 0 - vendor/github.com/cilium/ebpf/asm/jump.go | 0 - .../github.com/cilium/ebpf/asm/jump_string.go | 0 - .../github.com/cilium/ebpf/asm/load_store.go | 0 - .../cilium/ebpf/asm/load_store_string.go | 0 - vendor/github.com/cilium/ebpf/asm/opcode.go | 0 - .../cilium/ebpf/asm/opcode_string.go | 0 - vendor/github.com/cilium/ebpf/asm/register.go | 0 - .../cilium/ebpf/attachtype_string.go | 0 - vendor/github.com/cilium/ebpf/collection.go | 0 - vendor/github.com/cilium/ebpf/doc.go | 0 - vendor/github.com/cilium/ebpf/elf_reader.go | 0 - .../github.com/cilium/ebpf/elf_reader_fuzz.go | 0 - vendor/github.com/cilium/ebpf/info.go | 0 - .../github.com/cilium/ebpf/internal/align.go | 0 - .../cilium/ebpf/internal/btf/btf.go | 0 - .../cilium/ebpf/internal/btf/btf_types.go | 0 - .../ebpf/internal/btf/btf_types_string.go | 0 - .../cilium/ebpf/internal/btf/core.go | 0 - .../cilium/ebpf/internal/btf/doc.go | 0 - .../cilium/ebpf/internal/btf/ext_info.go | 0 - .../cilium/ebpf/internal/btf/fuzz.go | 0 - .../cilium/ebpf/internal/btf/info.go | 0 - .../cilium/ebpf/internal/btf/strings.go | 0 - .../cilium/ebpf/internal/btf/syscalls.go | 0 - .../cilium/ebpf/internal/btf/types.go | 0 - vendor/github.com/cilium/ebpf/internal/cpu.go | 0 - vendor/github.com/cilium/ebpf/internal/elf.go | 0 - .../github.com/cilium/ebpf/internal/endian.go | 0 - .../github.com/cilium/ebpf/internal/errors.go | 0 - vendor/github.com/cilium/ebpf/internal/fd.go | 0 - .../cilium/ebpf/internal/feature.go | 0 - vendor/github.com/cilium/ebpf/internal/io.go | 0 - .../cilium/ebpf/internal/pinning.go | 0 - vendor/github.com/cilium/ebpf/internal/ptr.go | 0 - .../cilium/ebpf/internal/ptr_32_be.go | 0 - .../cilium/ebpf/internal/ptr_32_le.go | 0 - .../github.com/cilium/ebpf/internal/ptr_64.go | 0 - .../cilium/ebpf/internal/syscall.go | 0 - .../cilium/ebpf/internal/syscall_string.go | 0 - .../cilium/ebpf/internal/unix/types_linux.go | 0 - .../cilium/ebpf/internal/unix/types_other.go | 0 - .../cilium/ebpf/internal/version.go | 0 - vendor/github.com/cilium/ebpf/link/cgroup.go | 0 - vendor/github.com/cilium/ebpf/link/doc.go | 0 - .../github.com/cilium/ebpf/link/freplace.go | 0 - vendor/github.com/cilium/ebpf/link/iter.go | 0 - vendor/github.com/cilium/ebpf/link/kprobe.go | 0 - vendor/github.com/cilium/ebpf/link/link.go | 0 - vendor/github.com/cilium/ebpf/link/netns.go | 0 - .../github.com/cilium/ebpf/link/perf_event.go | 0 - .../github.com/cilium/ebpf/link/platform.go | 0 - vendor/github.com/cilium/ebpf/link/program.go | 0 - .../cilium/ebpf/link/raw_tracepoint.go | 0 - .../github.com/cilium/ebpf/link/syscalls.go | 0 - .../github.com/cilium/ebpf/link/tracepoint.go | 0 - vendor/github.com/cilium/ebpf/link/uprobe.go | 0 - vendor/github.com/cilium/ebpf/linker.go | 0 - vendor/github.com/cilium/ebpf/map.go | 0 - vendor/github.com/cilium/ebpf/marshalers.go | 0 - vendor/github.com/cilium/ebpf/prog.go | 0 - vendor/github.com/cilium/ebpf/run-tests.sh | 0 - vendor/github.com/cilium/ebpf/syscalls.go | 0 - vendor/github.com/cilium/ebpf/types.go | 0 - vendor/github.com/cilium/ebpf/types_string.go | 0 - .../containerd/console/.golangci.yml | 0 - vendor/github.com/containerd/console/LICENSE | 0 - .../github.com/containerd/console/README.md | 0 - .../github.com/containerd/console/console.go | 0 - .../containerd/console/console_linux.go | 0 - .../containerd/console/console_unix.go | 0 - .../containerd/console/console_windows.go | 0 - .../containerd/console/console_zos.go | 0 - .../containerd/console/pty_freebsd_cgo.go | 0 - .../containerd/console/pty_freebsd_nocgo.go | 0 - .../github.com/containerd/console/pty_unix.go | 0 - .../containerd/console/tc_darwin.go | 0 - .../containerd/console/tc_freebsd_cgo.go | 0 - .../containerd/console/tc_freebsd_nocgo.go | 0 - .../github.com/containerd/console/tc_linux.go | 0 - .../containerd/console/tc_netbsd.go | 0 - .../containerd/console/tc_openbsd_cgo.go | 0 - .../containerd/console/tc_openbsd_nocgo.go | 0 - .../containerd/console/tc_solaris_cgo.go | 0 - .../containerd/console/tc_solaris_nocgo.go | 0 - .../github.com/containerd/console/tc_unix.go | 0 - .../github.com/containerd/console/tc_zos.go | 0 - vendor/github.com/containerd/nri/LICENSE | 201 + - .../containerd/nri/pkg/api/adjustment.go | 310 + - .../containerd/nri/pkg/api/api.pb.go | 4402 ++ - .../containerd/nri/pkg/api/api.proto | 450 + - .../containerd/nri/pkg/api/api_ttrpc.pb.go | 192 + - .../containerd/nri/pkg/api/device.go | 89 + - .../github.com/containerd/nri/pkg/api/doc.go | 17 + - .../github.com/containerd/nri/pkg/api/env.go | 60 + - .../containerd/nri/pkg/api/event.go | 172 + - .../containerd/nri/pkg/api/helpers.go | 59 + - .../containerd/nri/pkg/api/hooks.go | 103 + - .../containerd/nri/pkg/api/mount.go | 88 + - .../containerd/nri/pkg/api/namespace.go | 33 + - .../containerd/nri/pkg/api/optional.go | 341 + - .../containerd/nri/pkg/api/plugin.go | 58 + - .../containerd/nri/pkg/api/resources.go | 233 + - .../containerd/nri/pkg/api/update.go | 186 + - .../github.com/containerd/nri/pkg/log/log.go | 87 + - .../github.com/containerd/nri/pkg/net/conn.go | 93 + - .../containerd/nri/pkg/net/multiplex/mux.go | 444 + - .../containerd/nri/pkg/net/multiplex/ttrpc.go | 24 + - .../containerd/nri/pkg/net/socketpair.go | 93 + - .../nri/pkg/net/socketpair_cloexec_linux.go | 27 + - .../nri/pkg/net/socketpair_cloexec_unix.go | 38 + - .../nri/pkg/net/socketpair_cloexec_windows.go | 30 + - .../containerd/nri/pkg/stub/stub.go | 779 + - .../containerd/ttrpc/.gitattributes | 1 + - vendor/github.com/containerd/ttrpc/.gitignore | 13 + - .../github.com/containerd/ttrpc/.golangci.yml | 52 + - vendor/github.com/containerd/ttrpc/LICENSE | 201 + - vendor/github.com/containerd/ttrpc/Makefile | 180 + - .../github.com/containerd/ttrpc/PROTOCOL.md | 240 + - .../containerd/ttrpc/Protobuild.toml | 28 + - vendor/github.com/containerd/ttrpc/README.md | 59 + - vendor/github.com/containerd/ttrpc/channel.go | 182 + - vendor/github.com/containerd/ttrpc/client.go | 551 + - vendor/github.com/containerd/ttrpc/codec.go | 43 + - vendor/github.com/containerd/ttrpc/config.go | 86 + - vendor/github.com/containerd/ttrpc/doc.go | 23 + - vendor/github.com/containerd/ttrpc/errors.go | 34 + - .../github.com/containerd/ttrpc/handshake.go | 50 + - .../containerd/ttrpc/interceptor.go | 65 + - .../github.com/containerd/ttrpc/metadata.go | 107 + - .../github.com/containerd/ttrpc/request.pb.go | 396 + - .../github.com/containerd/ttrpc/request.proto | 29 + - vendor/github.com/containerd/ttrpc/server.go | 579 + - .../github.com/containerd/ttrpc/services.go | 279 + - vendor/github.com/containerd/ttrpc/stream.go | 84 + - .../containerd/ttrpc/stream_server.go | 22 + - vendor/github.com/containerd/ttrpc/test.proto | 16 + - .../containerd/ttrpc/unixcreds_linux.go | 105 + - .../github.com/coreos/go-systemd/v22/LICENSE | 0 - .../github.com/coreos/go-systemd/v22/NOTICE | 0 - .../coreos/go-systemd/v22/dbus/dbus.go | 0 - .../coreos/go-systemd/v22/dbus/methods.go | 0 - .../coreos/go-systemd/v22/dbus/properties.go | 0 - .../coreos/go-systemd/v22/dbus/set.go | 0 - .../go-systemd/v22/dbus/subscription.go | 0 - .../go-systemd/v22/dbus/subscription_set.go | 0 - .../cyphar/filepath-securejoin/.travis.yml | 0 - .../cyphar/filepath-securejoin/LICENSE | 0 - .../cyphar/filepath-securejoin/README.md | 0 - .../cyphar/filepath-securejoin/VERSION | 0 - .../cyphar/filepath-securejoin/join.go | 0 - .../cyphar/filepath-securejoin/vendor.conf | 0 - .../cyphar/filepath-securejoin/vfs.go | 0 - vendor/github.com/davecgh/go-spew/LICENSE | 0 - .../github.com/davecgh/go-spew/spew/bypass.go | 0 - .../davecgh/go-spew/spew/bypasssafe.go | 0 - .../github.com/davecgh/go-spew/spew/common.go | 0 - .../github.com/davecgh/go-spew/spew/config.go | 0 - vendor/github.com/davecgh/go-spew/spew/doc.go | 0 - .../github.com/davecgh/go-spew/spew/dump.go | 0 - .../github.com/davecgh/go-spew/spew/format.go | 0 - .../github.com/davecgh/go-spew/spew/spew.go | 0 - .../docker/go-units/CONTRIBUTING.md | 0 - vendor/github.com/docker/go-units/LICENSE | 0 - vendor/github.com/docker/go-units/MAINTAINERS | 0 - vendor/github.com/docker/go-units/README.md | 0 - vendor/github.com/docker/go-units/circle.yml | 0 - vendor/github.com/docker/go-units/duration.go | 0 - vendor/github.com/docker/go-units/size.go | 0 - vendor/github.com/docker/go-units/ulimit.go | 0 - .../github.com/euank/go-kmsg-parser/LICENSE | 0 - .../go-kmsg-parser/kmsgparser/kmsgparser.go | 0 - .../euank/go-kmsg-parser/kmsgparser/log.go | 0 - vendor/github.com/go-logr/logr/.golangci.yaml | 0 - vendor/github.com/go-logr/logr/CHANGELOG.md | 0 - .../github.com/go-logr/logr/CONTRIBUTING.md | 0 - vendor/github.com/go-logr/logr/LICENSE | 0 - vendor/github.com/go-logr/logr/README.md | 4 + - vendor/github.com/go-logr/logr/discard.go | 0 - vendor/github.com/go-logr/logr/logr.go | 20 +- - .../github.com/godbus/dbus/v5/CONTRIBUTING.md | 0 - vendor/github.com/godbus/dbus/v5/LICENSE | 0 - vendor/github.com/godbus/dbus/v5/MAINTAINERS | 0 - vendor/github.com/godbus/dbus/v5/README.md | 0 - vendor/github.com/godbus/dbus/v5/auth.go | 0 - .../godbus/dbus/v5/auth_anonymous.go | 0 - .../godbus/dbus/v5/auth_external.go | 0 - vendor/github.com/godbus/dbus/v5/auth_sha1.go | 0 - vendor/github.com/godbus/dbus/v5/call.go | 0 - vendor/github.com/godbus/dbus/v5/conn.go | 0 - .../github.com/godbus/dbus/v5/conn_darwin.go | 0 - .../github.com/godbus/dbus/v5/conn_other.go | 0 - vendor/github.com/godbus/dbus/v5/conn_unix.go | 0 - .../github.com/godbus/dbus/v5/conn_windows.go | 0 - vendor/github.com/godbus/dbus/v5/dbus.go | 0 - vendor/github.com/godbus/dbus/v5/decoder.go | 0 - .../godbus/dbus/v5/default_handler.go | 0 - vendor/github.com/godbus/dbus/v5/doc.go | 0 - vendor/github.com/godbus/dbus/v5/encoder.go | 0 - vendor/github.com/godbus/dbus/v5/export.go | 0 - vendor/github.com/godbus/dbus/v5/homedir.go | 0 - .../godbus/dbus/v5/homedir_dynamic.go | 0 - .../godbus/dbus/v5/homedir_static.go | 0 - vendor/github.com/godbus/dbus/v5/match.go | 0 - vendor/github.com/godbus/dbus/v5/message.go | 0 - vendor/github.com/godbus/dbus/v5/object.go | 0 - vendor/github.com/godbus/dbus/v5/sequence.go | 0 - .../godbus/dbus/v5/sequential_handler.go | 0 - .../godbus/dbus/v5/server_interfaces.go | 0 - vendor/github.com/godbus/dbus/v5/sig.go | 0 - .../godbus/dbus/v5/transport_darwin.go | 0 - .../godbus/dbus/v5/transport_generic.go | 0 - .../godbus/dbus/v5/transport_nonce_tcp.go | 0 - .../godbus/dbus/v5/transport_tcp.go | 0 - .../godbus/dbus/v5/transport_unix.go | 0 - .../dbus/v5/transport_unixcred_dragonfly.go | 0 - .../dbus/v5/transport_unixcred_freebsd.go | 0 - .../dbus/v5/transport_unixcred_linux.go | 0 - .../dbus/v5/transport_unixcred_netbsd.go | 0 - .../dbus/v5/transport_unixcred_openbsd.go | 0 - vendor/github.com/godbus/dbus/v5/variant.go | 0 - .../godbus/dbus/v5/variant_lexer.go | 0 - .../godbus/dbus/v5/variant_parser.go | 0 - vendor/github.com/gogo/protobuf/AUTHORS | 0 - vendor/github.com/gogo/protobuf/CONTRIBUTORS | 0 - vendor/github.com/gogo/protobuf/LICENSE | 0 - .../gogo/protobuf/gogoproto/Makefile | 37 + - .../github.com/gogo/protobuf/gogoproto/doc.go | 169 + - .../gogo/protobuf/gogoproto/gogo.pb.go | 874 + - .../gogo/protobuf/gogoproto/gogo.pb.golden | 45 + - .../gogo/protobuf/gogoproto/gogo.proto | 144 + - .../gogo/protobuf/gogoproto/helper.go | 415 + - .../github.com/gogo/protobuf/proto/Makefile | 0 - .../github.com/gogo/protobuf/proto/clone.go | 0 - .../gogo/protobuf/proto/custom_gogo.go | 0 - .../github.com/gogo/protobuf/proto/decode.go | 0 - .../gogo/protobuf/proto/deprecated.go | 0 - .../github.com/gogo/protobuf/proto/discard.go | 0 - .../gogo/protobuf/proto/duration.go | 0 - .../gogo/protobuf/proto/duration_gogo.go | 0 - .../github.com/gogo/protobuf/proto/encode.go | 0 - .../gogo/protobuf/proto/encode_gogo.go | 0 - .../github.com/gogo/protobuf/proto/equal.go | 0 - .../gogo/protobuf/proto/extensions.go | 0 - .../gogo/protobuf/proto/extensions_gogo.go | 0 - vendor/github.com/gogo/protobuf/proto/lib.go | 0 - .../gogo/protobuf/proto/lib_gogo.go | 0 - .../gogo/protobuf/proto/message_set.go | 0 - .../gogo/protobuf/proto/pointer_reflect.go | 0 - .../protobuf/proto/pointer_reflect_gogo.go | 0 - .../gogo/protobuf/proto/pointer_unsafe.go | 0 - .../protobuf/proto/pointer_unsafe_gogo.go | 0 - .../gogo/protobuf/proto/properties.go | 0 - .../gogo/protobuf/proto/properties_gogo.go | 0 - .../gogo/protobuf/proto/skip_gogo.go | 0 - .../gogo/protobuf/proto/table_marshal.go | 0 - .../gogo/protobuf/proto/table_marshal_gogo.go | 0 - .../gogo/protobuf/proto/table_merge.go | 0 - .../gogo/protobuf/proto/table_unmarshal.go | 0 - .../protobuf/proto/table_unmarshal_gogo.go | 0 - vendor/github.com/gogo/protobuf/proto/text.go | 0 - .../gogo/protobuf/proto/text_gogo.go | 0 - .../gogo/protobuf/proto/text_parser.go | 0 - .../gogo/protobuf/proto/timestamp.go | 0 - .../gogo/protobuf/proto/timestamp_gogo.go | 0 - .../gogo/protobuf/proto/wrappers.go | 0 - .../gogo/protobuf/proto/wrappers_gogo.go | 0 - .../protoc-gen-gogo/descriptor/Makefile | 36 + - .../protoc-gen-gogo/descriptor/descriptor.go | 118 + - .../descriptor/descriptor.pb.go | 2865 ++ - .../descriptor/descriptor_gostring.gen.go | 752 + - .../protoc-gen-gogo/descriptor/helper.go | 390 + - .../gogo/protobuf/sortkeys/sortkeys.go | 0 - vendor/github.com/golang/protobuf/AUTHORS | 0 - .../github.com/golang/protobuf/CONTRIBUTORS | 0 - vendor/github.com/golang/protobuf/LICENSE | 0 - .../golang/protobuf/jsonpb/decode.go | 530 + - .../golang/protobuf/jsonpb/encode.go | 559 + - .../github.com/golang/protobuf/jsonpb/json.go | 69 + - .../golang/protobuf/proto/buffer.go | 0 - .../golang/protobuf/proto/defaults.go | 0 - .../golang/protobuf/proto/deprecated.go | 0 - .../golang/protobuf/proto/discard.go | 0 - .../golang/protobuf/proto/extensions.go | 0 - .../golang/protobuf/proto/properties.go | 0 - .../github.com/golang/protobuf/proto/proto.go | 0 - .../golang/protobuf/proto/registry.go | 0 - .../golang/protobuf/proto/text_decode.go | 0 - .../golang/protobuf/proto/text_encode.go | 0 - .../github.com/golang/protobuf/proto/wire.go | 0 - .../golang/protobuf/proto/wrappers.go | 0 - .../github.com/golang/protobuf/ptypes/any.go | 0 - .../golang/protobuf/ptypes/any/any.pb.go | 0 - .../github.com/golang/protobuf/ptypes/doc.go | 0 - .../golang/protobuf/ptypes/duration.go | 0 - .../protobuf/ptypes/duration/duration.pb.go | 0 - .../golang/protobuf/ptypes/timestamp.go | 0 - .../protobuf/ptypes/timestamp/timestamp.pb.go | 0 - vendor/github.com/google/cadvisor/AUTHORS | 0 - vendor/github.com/google/cadvisor/LICENSE | 0 - .../google/cadvisor/cache/memory/memory.go | 0 - .../cadvisor/collector/collector_manager.go | 0 - .../google/cadvisor/collector/config.go | 0 - .../google/cadvisor/collector/fakes.go | 0 - .../cadvisor/collector/generic_collector.go | 0 - .../collector/prometheus_collector.go | 0 - .../google/cadvisor/collector/types.go | 0 - .../google/cadvisor/collector/util.go | 0 - .../container/common/container_hints.go | 0 - .../cadvisor/container/common/fsHandler.go | 0 - .../cadvisor/container/common/helpers.go | 0 - .../container/common/inotify_watcher.go | 0 - .../google/cadvisor/container/container.go | 0 - .../google/cadvisor/container/factory.go | 0 - .../container/libcontainer/handler.go | 0 - .../container/libcontainer/helpers.go | 0 - .../google/cadvisor/container/raw/factory.go | 0 - .../google/cadvisor/container/raw/handler.go | 0 - .../google/cadvisor/container/raw/watcher.go | 0 - .../cadvisor/devicemapper/dmsetup_client.go | 0 - .../google/cadvisor/devicemapper/doc.go | 0 - .../cadvisor/devicemapper/thin_ls_client.go | 0 - .../devicemapper/thin_pool_watcher.go | 0 - .../google/cadvisor/devicemapper/util.go | 0 - .../google/cadvisor/events/handler.go | 0 - vendor/github.com/google/cadvisor/fs/fs.go | 0 - vendor/github.com/google/cadvisor/fs/types.go | 0 - .../google/cadvisor/info/v1/container.go | 0 - .../google/cadvisor/info/v1/docker.go | 0 - .../google/cadvisor/info/v1/machine.go | 0 - .../google/cadvisor/info/v1/metric.go | 0 - .../google/cadvisor/info/v2/container.go | 0 - .../google/cadvisor/info/v2/conversion.go | 0 - .../google/cadvisor/info/v2/machine.go | 0 - .../google/cadvisor/machine/info.go | 0 - .../google/cadvisor/machine/machine.go | 0 - .../cadvisor/machine/operatingsystem_unix.go | 0 - .../machine/operatingsystem_windows.go | 0 - .../google/cadvisor/manager/container.go | 0 - .../google/cadvisor/manager/manager.go | 0 - .../google/cadvisor/nvm/machine_libipmctl.go | 0 - .../cadvisor/nvm/machine_no_libipmctl.go | 0 - .../google/cadvisor/perf/collector_libpfm.go | 0 - .../cadvisor/perf/collector_no_libpfm.go | 0 - .../github.com/google/cadvisor/perf/config.go | 0 - .../google/cadvisor/perf/manager_libpfm.go | 0 - .../google/cadvisor/perf/manager_no_libpfm.go | 0 - .../google/cadvisor/perf/types_libpfm.go | 0 - .../google/cadvisor/perf/uncore_libpfm.go | 0 - .../google/cadvisor/resctrl/collector.go | 0 - .../google/cadvisor/resctrl/manager.go | 0 - .../google/cadvisor/resctrl/utils.go | 0 - .../github.com/google/cadvisor/stats/noop.go | 0 - .../github.com/google/cadvisor/stats/types.go | 0 - .../google/cadvisor/storage/common_flags.go | 0 - .../google/cadvisor/storage/storage.go | 0 - .../google/cadvisor/summary/buffer.go | 0 - .../google/cadvisor/summary/percentiles.go | 0 - .../google/cadvisor/summary/summary.go | 0 - .../cadvisor/utils/cloudinfo/cloudinfo.go | 0 - .../google/cadvisor/utils/cpuload/cpuload.go | 0 - .../cadvisor/utils/cpuload/netlink/conn.go | 0 - .../cadvisor/utils/cpuload/netlink/netlink.go | 0 - .../cadvisor/utils/cpuload/netlink/reader.go | 0 - .../cadvisor/utils/oomparser/oomparser.go | 0 - .../github.com/google/cadvisor/utils/path.go | 0 - .../google/cadvisor/utils/sysfs/sysfs.go | 0 - .../cadvisor/utils/sysfs/sysfs_notx86.go | 0 - .../google/cadvisor/utils/sysfs/sysfs_x86.go | 0 - .../google/cadvisor/utils/sysinfo/sysinfo.go | 0 - .../google/cadvisor/utils/timed_store.go | 0 - .../github.com/google/cadvisor/utils/utils.go | 0 - .../google/cadvisor/version/version.go | 0 - .../google/cadvisor/watcher/watcher.go | 0 - vendor/github.com/google/go-cmp/LICENSE | 0 - .../github.com/google/go-cmp/cmp/compare.go | 64 +- - .../google/go-cmp/cmp/export_panic.go | 0 - .../google/go-cmp/cmp/export_unsafe.go | 0 - .../go-cmp/cmp/internal/diff/debug_disable.go | 0 - .../go-cmp/cmp/internal/diff/debug_enable.go | 0 - .../google/go-cmp/cmp/internal/diff/diff.go | 44 +- - .../google/go-cmp/cmp/internal/flags/flags.go | 0 - .../go-cmp/cmp/internal/function/func.go | 0 - .../google/go-cmp/cmp/internal/value/name.go | 0 - .../cmp/internal/value/pointer_purego.go | 0 - .../cmp/internal/value/pointer_unsafe.go | 0 - .../google/go-cmp/cmp/internal/value/sort.go | 0 - .../google/go-cmp/cmp/internal/value/zero.go | 48 - - .../github.com/google/go-cmp/cmp/options.go | 10 +- - vendor/github.com/google/go-cmp/cmp/path.go | 20 +- - vendor/github.com/google/go-cmp/cmp/report.go | 0 - .../google/go-cmp/cmp/report_compare.go | 10 +- - .../google/go-cmp/cmp/report_references.go | 0 - .../google/go-cmp/cmp/report_reflect.go | 11 +- - .../google/go-cmp/cmp/report_slices.go | 25 +- - .../google/go-cmp/cmp/report_text.go | 1 + - .../google/go-cmp/cmp/report_value.go | 0 - vendor/github.com/google/gofuzz/.travis.yml | 0 - .../github.com/google/gofuzz/CONTRIBUTING.md | 0 - vendor/github.com/google/gofuzz/LICENSE | 0 - vendor/github.com/google/gofuzz/README.md | 0 - vendor/github.com/google/gofuzz/doc.go | 0 - vendor/github.com/google/gofuzz/fuzz.go | 0 - vendor/github.com/google/uuid/.travis.yml | 0 - vendor/github.com/google/uuid/CONTRIBUTING.md | 0 - vendor/github.com/google/uuid/CONTRIBUTORS | 0 - vendor/github.com/google/uuid/LICENSE | 0 - vendor/github.com/google/uuid/README.md | 0 - vendor/github.com/google/uuid/dce.go | 0 - vendor/github.com/google/uuid/doc.go | 0 - vendor/github.com/google/uuid/hash.go | 4 +- - vendor/github.com/google/uuid/marshal.go | 0 - vendor/github.com/google/uuid/node.go | 0 - vendor/github.com/google/uuid/node_js.go | 0 - vendor/github.com/google/uuid/node_net.go | 0 - vendor/github.com/google/uuid/null.go | 118 + - vendor/github.com/google/uuid/sql.go | 2 +- - vendor/github.com/google/uuid/time.go | 0 - vendor/github.com/google/uuid/util.go | 0 - vendor/github.com/google/uuid/uuid.go | 55 +- - vendor/github.com/google/uuid/version1.go | 0 - vendor/github.com/google/uuid/version4.go | 35 +- - vendor/github.com/googleapis/gnostic/LICENSE | 0 - .../googleapis/gnostic/compiler/README.md | 0 - .../googleapis/gnostic/compiler/context.go | 0 - .../googleapis/gnostic/compiler/error.go | 0 - .../gnostic/compiler/extension-handler.go | 0 - .../googleapis/gnostic/compiler/helpers.go | 0 - .../googleapis/gnostic/compiler/main.go | 0 - .../googleapis/gnostic/compiler/reader.go | 0 - .../googleapis/gnostic/extensions/README.md | 0 - .../gnostic/extensions/extension.pb.go | 0 - .../gnostic/extensions/extension.proto | 0 - .../gnostic/extensions/extensions.go | 0 - .../googleapis/gnostic/openapiv2/OpenAPIv2.go | 0 - .../gnostic/openapiv2/OpenAPIv2.pb.go | 0 - .../gnostic/openapiv2/OpenAPIv2.proto | 0 - .../googleapis/gnostic/openapiv2/README.md | 0 - .../gnostic/openapiv2/openapi-2.0.json | 0 - .../hashicorp/golang-lru/.gitignore | 0 - vendor/github.com/hashicorp/golang-lru/2q.go | 0 - .../github.com/hashicorp/golang-lru/LICENSE | 0 - .../github.com/hashicorp/golang-lru/README.md | 0 - vendor/github.com/hashicorp/golang-lru/arc.go | 0 - vendor/github.com/hashicorp/golang-lru/doc.go | 0 - vendor/github.com/hashicorp/golang-lru/lru.go | 0 - .../hashicorp/golang-lru/simplelru/lru.go | 0 - .../golang-lru/simplelru/lru_interface.go | 0 - .../github.com/json-iterator/go/.codecov.yml | 0 - vendor/github.com/json-iterator/go/.gitignore | 0 - .../github.com/json-iterator/go/.travis.yml | 0 - vendor/github.com/json-iterator/go/Gopkg.lock | 0 - vendor/github.com/json-iterator/go/Gopkg.toml | 0 - vendor/github.com/json-iterator/go/LICENSE | 0 - vendor/github.com/json-iterator/go/README.md | 0 - vendor/github.com/json-iterator/go/adapter.go | 0 - vendor/github.com/json-iterator/go/any.go | 0 - .../github.com/json-iterator/go/any_array.go | 0 - .../github.com/json-iterator/go/any_bool.go | 0 - .../github.com/json-iterator/go/any_float.go | 0 - .../github.com/json-iterator/go/any_int32.go | 0 - .../github.com/json-iterator/go/any_int64.go | 0 - .../json-iterator/go/any_invalid.go | 0 - vendor/github.com/json-iterator/go/any_nil.go | 0 - .../github.com/json-iterator/go/any_number.go | 0 - .../github.com/json-iterator/go/any_object.go | 0 - vendor/github.com/json-iterator/go/any_str.go | 0 - .../github.com/json-iterator/go/any_uint32.go | 0 - .../github.com/json-iterator/go/any_uint64.go | 0 - vendor/github.com/json-iterator/go/build.sh | 0 - vendor/github.com/json-iterator/go/config.go | 0 - .../go/fuzzy_mode_convert_table.md | 0 - vendor/github.com/json-iterator/go/iter.go | 0 - .../github.com/json-iterator/go/iter_array.go | 0 - .../github.com/json-iterator/go/iter_float.go | 0 - .../github.com/json-iterator/go/iter_int.go | 0 - .../json-iterator/go/iter_object.go | 0 - .../github.com/json-iterator/go/iter_skip.go | 0 - .../json-iterator/go/iter_skip_sloppy.go | 0 - .../json-iterator/go/iter_skip_strict.go | 0 - .../github.com/json-iterator/go/iter_str.go | 0 - .../github.com/json-iterator/go/jsoniter.go | 0 - vendor/github.com/json-iterator/go/pool.go | 0 - vendor/github.com/json-iterator/go/reflect.go | 0 - .../json-iterator/go/reflect_array.go | 0 - .../json-iterator/go/reflect_dynamic.go | 0 - .../json-iterator/go/reflect_extension.go | 0 - .../json-iterator/go/reflect_json_number.go | 0 - .../go/reflect_json_raw_message.go | 0 - .../json-iterator/go/reflect_map.go | 0 - .../json-iterator/go/reflect_marshaler.go | 0 - .../json-iterator/go/reflect_native.go | 0 - .../json-iterator/go/reflect_optional.go | 0 - .../json-iterator/go/reflect_slice.go | 0 - .../go/reflect_struct_decoder.go | 0 - .../go/reflect_struct_encoder.go | 0 - vendor/github.com/json-iterator/go/stream.go | 0 - .../json-iterator/go/stream_float.go | 0 - .../github.com/json-iterator/go/stream_int.go | 0 - .../github.com/json-iterator/go/stream_str.go | 0 - vendor/github.com/json-iterator/go/test.sh | 0 - .../github.com/karrick/godirwalk/.gitignore | 0 - vendor/github.com/karrick/godirwalk/LICENSE | 0 - vendor/github.com/karrick/godirwalk/README.md | 0 - .../karrick/godirwalk/azure-pipelines.yml | 0 - vendor/github.com/karrick/godirwalk/bench.sh | 0 - .../karrick/godirwalk/debug_development.go | 0 - .../karrick/godirwalk/debug_release.go | 0 - vendor/github.com/karrick/godirwalk/dirent.go | 0 - vendor/github.com/karrick/godirwalk/doc.go | 0 - .../karrick/godirwalk/inoWithFileno.go | 0 - .../karrick/godirwalk/inoWithIno.go | 0 - .../github.com/karrick/godirwalk/modeType.go | 0 - .../karrick/godirwalk/modeTypeWithType.go | 0 - .../karrick/godirwalk/modeTypeWithoutType.go | 0 - .../karrick/godirwalk/nameWithNamlen.go | 0 - .../karrick/godirwalk/nameWithoutNamlen.go | 0 - .../github.com/karrick/godirwalk/readdir.go | 0 - .../karrick/godirwalk/readdir_unix.go | 0 - .../karrick/godirwalk/readdir_windows.go | 0 - .../karrick/godirwalk/reclenFromNamlen.go | 0 - .../karrick/godirwalk/reclenFromReclen.go | 0 - .../karrick/godirwalk/scandir_unix.go | 0 - .../karrick/godirwalk/scandir_windows.go | 0 - .../github.com/karrick/godirwalk/scanner.go | 0 - vendor/github.com/karrick/godirwalk/walk.go | 0 - .../golang_protobuf_extensions/LICENSE | 0 - .../golang_protobuf_extensions/NOTICE | 0 - .../pbutil/.gitignore | 0 - .../pbutil/Makefile | 0 - .../pbutil/decode.go | 0 - .../golang_protobuf_extensions/pbutil/doc.go | 0 - .../pbutil/encode.go | 0 - vendor/github.com/mistifyio/go-zfs/.gitignore | 0 - .../github.com/mistifyio/go-zfs/.travis.yml | 0 - .../mistifyio/go-zfs/CONTRIBUTING.md | 0 - vendor/github.com/mistifyio/go-zfs/LICENSE | 0 - vendor/github.com/mistifyio/go-zfs/README.md | 0 - .../github.com/mistifyio/go-zfs/Vagrantfile | 0 - vendor/github.com/mistifyio/go-zfs/error.go | 0 - vendor/github.com/mistifyio/go-zfs/utils.go | 0 - .../mistifyio/go-zfs/utils_notsolaris.go | 0 - .../mistifyio/go-zfs/utils_solaris.go | 0 - vendor/github.com/mistifyio/go-zfs/zfs.go | 0 - vendor/github.com/mistifyio/go-zfs/zpool.go | 0 - vendor/github.com/moby/sys/mountinfo/LICENSE | 0 - vendor/github.com/moby/sys/mountinfo/doc.go | 0 - .../moby/sys/mountinfo/mounted_linux.go | 0 - .../moby/sys/mountinfo/mounted_unix.go | 0 - .../moby/sys/mountinfo/mountinfo.go | 0 - .../moby/sys/mountinfo/mountinfo_bsd.go | 0 - .../moby/sys/mountinfo/mountinfo_filters.go | 0 - .../sys/mountinfo/mountinfo_freebsdlike.go | 0 - .../moby/sys/mountinfo/mountinfo_linux.go | 0 - .../moby/sys/mountinfo/mountinfo_openbsd.go | 0 - .../sys/mountinfo/mountinfo_unsupported.go | 0 - .../moby/sys/mountinfo/mountinfo_windows.go | 0 - .../modern-go/concurrent/.gitignore | 0 - .../modern-go/concurrent/.travis.yml | 0 - .../github.com/modern-go/concurrent/LICENSE | 0 - .../github.com/modern-go/concurrent/README.md | 0 - .../modern-go/concurrent/executor.go | 0 - .../modern-go/concurrent/go_above_19.go | 0 - .../modern-go/concurrent/go_below_19.go | 0 - vendor/github.com/modern-go/concurrent/log.go | 0 - .../github.com/modern-go/concurrent/test.sh | 0 - .../concurrent/unbounded_executor.go | 0 - .../github.com/modern-go/reflect2/.gitignore | 0 - .../github.com/modern-go/reflect2/.travis.yml | 0 - .../github.com/modern-go/reflect2/Gopkg.lock | 0 - .../github.com/modern-go/reflect2/Gopkg.toml | 0 - vendor/github.com/modern-go/reflect2/LICENSE | 0 - .../github.com/modern-go/reflect2/README.md | 0 - .../modern-go/reflect2/go_above_118.go | 0 - .../modern-go/reflect2/go_above_19.go | 0 - .../modern-go/reflect2/go_below_118.go | 0 - .../github.com/modern-go/reflect2/reflect2.go | 0 - .../modern-go/reflect2/reflect2_amd64.s | 0 - .../modern-go/reflect2/reflect2_kind.go | 0 - .../modern-go/reflect2/relfect2_386.s | 0 - .../modern-go/reflect2/relfect2_amd64p32.s | 0 - .../modern-go/reflect2/relfect2_arm.s | 0 - .../modern-go/reflect2/relfect2_arm64.s | 0 - .../modern-go/reflect2/relfect2_mips64x.s | 0 - .../modern-go/reflect2/relfect2_mipsx.s | 0 - .../modern-go/reflect2/relfect2_ppc64x.s | 0 - .../modern-go/reflect2/relfect2_s390x.s | 0 - .../modern-go/reflect2/safe_field.go | 0 - .../github.com/modern-go/reflect2/safe_map.go | 0 - .../modern-go/reflect2/safe_slice.go | 0 - .../modern-go/reflect2/safe_struct.go | 0 - .../modern-go/reflect2/safe_type.go | 0 - .../github.com/modern-go/reflect2/type_map.go | 0 - .../modern-go/reflect2/unsafe_array.go | 0 - .../modern-go/reflect2/unsafe_eface.go | 0 - .../modern-go/reflect2/unsafe_field.go | 0 - .../modern-go/reflect2/unsafe_iface.go | 0 - .../modern-go/reflect2/unsafe_link.go | 0 - .../modern-go/reflect2/unsafe_map.go | 0 - .../modern-go/reflect2/unsafe_ptr.go | 0 - .../modern-go/reflect2/unsafe_slice.go | 0 - .../modern-go/reflect2/unsafe_struct.go | 0 - .../modern-go/reflect2/unsafe_type.go | 0 - .../github.com/mrunalp/fileutils/.gitignore | 0 - vendor/github.com/mrunalp/fileutils/LICENSE | 0 - .../github.com/mrunalp/fileutils/MAINTAINERS | 0 - vendor/github.com/mrunalp/fileutils/README.md | 0 - .../github.com/mrunalp/fileutils/fileutils.go | 0 - .../github.com/mrunalp/fileutils/idtools.go | 0 - vendor/github.com/opencontainers/runc/LICENSE | 0 - vendor/github.com/opencontainers/runc/NOTICE | 0 - .../runc/libcontainer/README.md | 0 - .../opencontainers/runc/libcontainer/SPEC.md | 0 - .../runc/libcontainer/apparmor/apparmor.go | 0 - .../libcontainer/apparmor/apparmor_linux.go | 0 - .../apparmor/apparmor_unsupported.go | 0 - .../libcontainer/capabilities/capabilities.go | 0 - .../capabilities/capabilities_unsupported.go | 0 - .../runc/libcontainer/cgroups/cgroups.go | 0 - .../cgroups/devices/devices_emulator.go | 0 - .../cgroups/ebpf/devicefilter/devicefilter.go | 0 - .../libcontainer/cgroups/ebpf/ebpf_linux.go | 0 - .../runc/libcontainer/cgroups/file.go | 0 - .../runc/libcontainer/cgroups/fs/blkio.go | 0 - .../runc/libcontainer/cgroups/fs/cpu.go | 0 - .../runc/libcontainer/cgroups/fs/cpuacct.go | 0 - .../runc/libcontainer/cgroups/fs/cpuset.go | 0 - .../runc/libcontainer/cgroups/fs/devices.go | 0 - .../runc/libcontainer/cgroups/fs/error.go | 0 - .../runc/libcontainer/cgroups/fs/freezer.go | 0 - .../runc/libcontainer/cgroups/fs/fs.go | 0 - .../runc/libcontainer/cgroups/fs/hugetlb.go | 0 - .../runc/libcontainer/cgroups/fs/memory.go | 0 - .../runc/libcontainer/cgroups/fs/name.go | 0 - .../runc/libcontainer/cgroups/fs/net_cls.go | 0 - .../runc/libcontainer/cgroups/fs/net_prio.go | 0 - .../runc/libcontainer/cgroups/fs/paths.go | 0 - .../libcontainer/cgroups/fs/perf_event.go | 0 - .../runc/libcontainer/cgroups/fs/pids.go | 0 - .../runc/libcontainer/cgroups/fs/rdma.go | 0 - .../runc/libcontainer/cgroups/fs2/cpu.go | 0 - .../runc/libcontainer/cgroups/fs2/cpuset.go | 0 - .../runc/libcontainer/cgroups/fs2/create.go | 0 - .../libcontainer/cgroups/fs2/defaultpath.go | 0 - .../runc/libcontainer/cgroups/fs2/devices.go | 0 - .../runc/libcontainer/cgroups/fs2/freezer.go | 0 - .../runc/libcontainer/cgroups/fs2/fs2.go | 0 - .../runc/libcontainer/cgroups/fs2/hugetlb.go | 0 - .../runc/libcontainer/cgroups/fs2/io.go | 0 - .../runc/libcontainer/cgroups/fs2/memory.go | 0 - .../runc/libcontainer/cgroups/fs2/pids.go | 0 - .../libcontainer/cgroups/fscommon/rdma.go | 0 - .../libcontainer/cgroups/fscommon/utils.go | 0 - .../runc/libcontainer/cgroups/getallpids.go | 0 - .../runc/libcontainer/cgroups/manager/new.go | 0 - .../runc/libcontainer/cgroups/stats.go | 0 - .../libcontainer/cgroups/systemd/common.go | 0 - .../libcontainer/cgroups/systemd/cpuset.go | 0 - .../runc/libcontainer/cgroups/systemd/dbus.go | 0 - .../runc/libcontainer/cgroups/systemd/user.go | 0 - .../runc/libcontainer/cgroups/systemd/v1.go | 0 - .../runc/libcontainer/cgroups/systemd/v2.go | 0 - .../runc/libcontainer/cgroups/utils.go | 0 - .../runc/libcontainer/cgroups/v1_utils.go | 0 - .../runc/libcontainer/configs/blkio_device.go | 0 - .../runc/libcontainer/configs/cgroup_linux.go | 0 - .../configs/cgroup_unsupported.go | 0 - .../runc/libcontainer/configs/config.go | 0 - .../runc/libcontainer/configs/config_linux.go | 0 - .../libcontainer/configs/configs_fuzzer.go | 0 - .../libcontainer/configs/hugepage_limit.go | 0 - .../runc/libcontainer/configs/intelrdt.go | 0 - .../configs/interface_priority_map.go | 0 - .../runc/libcontainer/configs/mount.go | 0 - .../runc/libcontainer/configs/namespaces.go | 0 - .../libcontainer/configs/namespaces_linux.go | 0 - .../configs/namespaces_syscall.go | 0 - .../configs/namespaces_syscall_unsupported.go | 0 - .../configs/namespaces_unsupported.go | 0 - .../runc/libcontainer/configs/network.go | 0 - .../runc/libcontainer/configs/rdma.go | 0 - .../libcontainer/configs/validate/rootless.go | 0 - .../configs/validate/validator.go | 0 - .../runc/libcontainer/console_linux.go | 0 - .../runc/libcontainer/container.go | 0 - .../runc/libcontainer/container_linux.go | 0 - .../runc/libcontainer/criu_opts_linux.go | 0 - .../runc/libcontainer/devices/device.go | 0 - .../runc/libcontainer/devices/device_unix.go | 0 - .../opencontainers/runc/libcontainer/error.go | 0 - .../runc/libcontainer/factory.go | 0 - .../runc/libcontainer/factory_linux.go | 0 - .../runc/libcontainer/init_linux.go | 0 - .../runc/libcontainer/intelrdt/cmt.go | 0 - .../runc/libcontainer/intelrdt/intelrdt.go | 0 - .../runc/libcontainer/intelrdt/mbm.go | 0 - .../runc/libcontainer/intelrdt/monitoring.go | 0 - .../runc/libcontainer/intelrdt/stats.go | 0 - .../runc/libcontainer/keys/keyctl.go | 0 - .../runc/libcontainer/logs/logs.go | 0 - .../runc/libcontainer/message_linux.go | 0 - .../runc/libcontainer/mount_linux.go | 0 - .../runc/libcontainer/network_linux.go | 0 - .../runc/libcontainer/notify_linux.go | 0 - .../runc/libcontainer/notify_v2_linux.go | 0 - .../runc/libcontainer/process.go | 0 - .../runc/libcontainer/process_linux.go | 0 - .../runc/libcontainer/restored_process.go | 0 - .../runc/libcontainer/rootfs_linux.go | 0 - .../runc/libcontainer/seccomp/config.go | 0 - .../seccomp/patchbpf/enosys_linux.go | 0 - .../seccomp/patchbpf/enosys_unsupported.go | 0 - .../libcontainer/seccomp/seccomp_linux.go | 0 - .../seccomp/seccomp_unsupported.go | 0 - .../runc/libcontainer/setns_init_linux.go | 0 - .../runc/libcontainer/standard_init_linux.go | 0 - .../runc/libcontainer/state_linux.go | 0 - .../runc/libcontainer/stats_linux.go | 0 - .../opencontainers/runc/libcontainer/sync.go | 0 - .../runc/libcontainer/system/linux.go | 0 - .../runc/libcontainer/system/proc.go | 0 - .../libcontainer/system/syscall_linux_32.go | 0 - .../libcontainer/system/syscall_linux_64.go | 0 - .../runc/libcontainer/user/lookup_unix.go | 0 - .../runc/libcontainer/user/user.go | 0 - .../runc/libcontainer/user/user_fuzzer.go | 0 - .../runc/libcontainer/userns/userns.go | 0 - .../runc/libcontainer/userns/userns_fuzzer.go | 0 - .../runc/libcontainer/userns/userns_linux.go | 0 - .../libcontainer/userns/userns_unsupported.go | 0 - .../runc/libcontainer/utils/cmsg.go | 0 - .../runc/libcontainer/utils/utils.go | 0 - .../runc/libcontainer/utils/utils_unix.go | 0 - .../opencontainers/runc/types/events.go | 0 - .../opencontainers/runtime-spec/LICENSE | 0 - .../runtime-spec/specs-go/config.go | 0 - .../runtime-spec/specs-go/state.go | 0 - .../runtime-spec/specs-go/version.go | 0 - .../github.com/opencontainers/selinux/LICENSE | 0 - .../opencontainers/selinux/go-selinux/doc.go | 0 - .../selinux/go-selinux/label/label.go | 0 - .../selinux/go-selinux/label/label_linux.go | 0 - .../selinux/go-selinux/label/label_stub.go | 0 - .../selinux/go-selinux/rchcon.go | 0 - .../selinux/go-selinux/rchcon_go115.go | 0 - .../selinux/go-selinux/selinux.go | 0 - .../selinux/go-selinux/selinux_linux.go | 0 - .../selinux/go-selinux/selinux_stub.go | 0 - .../selinux/go-selinux/xattrs_linux.go | 0 - .../selinux/pkg/pwalk/README.md | 0 - .../opencontainers/selinux/pkg/pwalk/pwalk.go | 0 - .../selinux/pkg/pwalkdir/README.md | 0 - .../selinux/pkg/pwalkdir/pwalkdir.go | 0 - vendor/github.com/pkg/errors/.gitignore | 0 - vendor/github.com/pkg/errors/.travis.yml | 0 - vendor/github.com/pkg/errors/LICENSE | 0 - vendor/github.com/pkg/errors/Makefile | 0 - vendor/github.com/pkg/errors/README.md | 0 - vendor/github.com/pkg/errors/appveyor.yml | 0 - vendor/github.com/pkg/errors/errors.go | 0 - vendor/github.com/pkg/errors/go113.go | 0 - vendor/github.com/pkg/errors/stack.go | 0 - vendor/github.com/pmezard/go-difflib/LICENSE | 0 - .../pmezard/go-difflib/difflib/difflib.go | 0 - .../prometheus/client_golang/LICENSE | 201 + - .../prometheus/client_golang/NOTICE | 23 + - .../client_golang/prometheus/.gitignore | 1 + - .../client_golang/prometheus/README.md | 1 + - .../prometheus/build_info_collector.go | 38 + - .../client_golang/prometheus/collector.go | 128 + - .../client_golang/prometheus/counter.go | 328 + - .../client_golang/prometheus/desc.go | 189 + - .../client_golang/prometheus/doc.go | 210 + - .../prometheus/expvar_collector.go | 86 + - .../client_golang/prometheus/fnv.go | 42 + - .../client_golang/prometheus/gauge.go | 291 + - .../client_golang/prometheus/get_pid.go | 26 + - .../prometheus/get_pid_gopherjs.go | 23 + - .../client_golang/prometheus/go_collector.go | 281 + - .../prometheus/go_collector_go116.go | 122 + - .../prometheus/go_collector_latest.go | 568 + - .../client_golang/prometheus/histogram.go | 1484 + - .../prometheus/internal/almost_equal.go | 60 + - .../prometheus/internal/difflib.go | 654 + - .../internal/go_collector_options.go | 32 + - .../prometheus/internal/go_runtime_metrics.go | 142 + - .../prometheus/internal/metric.go | 101 + - .../client_golang/prometheus/labels.go | 88 + - .../client_golang/prometheus/metric.go | 256 + - .../client_golang/prometheus/num_threads.go | 25 + - .../prometheus/num_threads_gopherjs.go | 22 + - .../client_golang/prometheus/observer.go | 64 + - .../prometheus/process_collector.go | 164 + - .../prometheus/process_collector_js.go | 26 + - .../prometheus/process_collector_other.go | 66 + - .../prometheus/process_collector_windows.go | 116 + - .../prometheus/promhttp/delegator.go | 374 + - .../client_golang/prometheus/promhttp/http.go | 395 + - .../prometheus/promhttp/instrument_client.go | 247 + - .../prometheus/promhttp/instrument_server.go | 570 + - .../prometheus/promhttp/option.go | 58 + - .../client_golang/prometheus/registry.go | 1072 + - .../client_golang/prometheus/summary.go | 747 + - .../client_golang/prometheus/timer.go | 55 + - .../client_golang/prometheus/untyped.go | 42 + - .../client_golang/prometheus/value.go | 237 + - .../client_golang/prometheus/vec.go | 642 + - .../client_golang/prometheus/wrap.go | 216 + - .../prometheus/client_model/LICENSE | 0 - .../github.com/prometheus/client_model/NOTICE | 0 - .../prometheus/client_model/go/metrics.pb.go | 0 - vendor/github.com/prometheus/common/LICENSE | 0 - vendor/github.com/prometheus/common/NOTICE | 0 - .../prometheus/common/expfmt/decode.go | 0 - .../prometheus/common/expfmt/encode.go | 0 - .../prometheus/common/expfmt/expfmt.go | 0 - .../prometheus/common/expfmt/fuzz.go | 0 - .../common/expfmt/openmetrics_create.go | 0 - .../prometheus/common/expfmt/text_create.go | 0 - .../prometheus/common/expfmt/text_parse.go | 0 - .../bitbucket.org/ww/goautoneg/README.txt | 0 - .../bitbucket.org/ww/goautoneg/autoneg.go | 0 - .../prometheus/common/model/alert.go | 0 - .../prometheus/common/model/fingerprinting.go | 0 - .../github.com/prometheus/common/model/fnv.go | 0 - .../prometheus/common/model/labels.go | 0 - .../prometheus/common/model/labelset.go | 0 - .../prometheus/common/model/metric.go | 0 - .../prometheus/common/model/model.go | 0 - .../prometheus/common/model/signature.go | 0 - .../prometheus/common/model/silence.go | 0 - .../prometheus/common/model/time.go | 0 - .../prometheus/common/model/value.go | 0 - .../github.com/prometheus/procfs/.gitignore | 2 + - .../prometheus/procfs/.golangci.yml | 12 + - .../prometheus/procfs/CODE_OF_CONDUCT.md | 3 + - .../prometheus/procfs/CONTRIBUTING.md | 121 + - vendor/github.com/prometheus/procfs/LICENSE | 201 + - .../prometheus/procfs/MAINTAINERS.md | 2 + - vendor/github.com/prometheus/procfs/Makefile | 31 + - .../prometheus/procfs/Makefile.common | 264 + - vendor/github.com/prometheus/procfs/NOTICE | 7 + - vendor/github.com/prometheus/procfs/README.md | 61 + - .../github.com/prometheus/procfs/SECURITY.md | 6 + - vendor/github.com/prometheus/procfs/arp.go | 116 + - .../github.com/prometheus/procfs/buddyinfo.go | 85 + - .../github.com/prometheus/procfs/cmdline.go | 30 + - .../github.com/prometheus/procfs/cpuinfo.go | 482 + - .../prometheus/procfs/cpuinfo_armx.go | 20 + - .../prometheus/procfs/cpuinfo_mipsx.go | 20 + - .../prometheus/procfs/cpuinfo_others.go | 19 + - .../prometheus/procfs/cpuinfo_ppcx.go | 20 + - .../prometheus/procfs/cpuinfo_riscvx.go | 20 + - .../prometheus/procfs/cpuinfo_s390x.go | 19 + - .../prometheus/procfs/cpuinfo_x86.go | 20 + - vendor/github.com/prometheus/procfs/crypto.go | 153 + - vendor/github.com/prometheus/procfs/doc.go | 45 + - vendor/github.com/prometheus/procfs/fs.go | 43 + - .../github.com/prometheus/procfs/fscache.go | 422 + - .../prometheus/procfs/internal/fs/fs.go | 55 + - .../prometheus/procfs/internal/util/parse.go | 97 + - .../procfs/internal/util/readfile.go | 37 + - .../procfs/internal/util/sysreadfile.go | 50 + - .../internal/util/sysreadfile_compat.go | 27 + - .../procfs/internal/util/valueparser.go | 91 + - vendor/github.com/prometheus/procfs/ipvs.go | 240 + - .../prometheus/procfs/kernel_random.go | 63 + - .../github.com/prometheus/procfs/loadavg.go | 62 + - vendor/github.com/prometheus/procfs/mdstat.go | 266 + - .../github.com/prometheus/procfs/meminfo.go | 277 + - .../github.com/prometheus/procfs/mountinfo.go | 180 + - .../prometheus/procfs/mountstats.go | 638 + - .../prometheus/procfs/net_conntrackstat.go | 153 + - .../github.com/prometheus/procfs/net_dev.go | 205 + - .../prometheus/procfs/net_ip_socket.go | 226 + - .../prometheus/procfs/net_protocols.go | 180 + - .../prometheus/procfs/net_sockstat.go | 163 + - .../prometheus/procfs/net_softnet.go | 102 + - .../github.com/prometheus/procfs/net_tcp.go | 64 + - .../github.com/prometheus/procfs/net_udp.go | 64 + - .../github.com/prometheus/procfs/net_unix.go | 257 + - .../github.com/prometheus/procfs/net_xfrm.go | 189 + - .../github.com/prometheus/procfs/netstat.go | 68 + - vendor/github.com/prometheus/procfs/proc.go | 319 + - .../prometheus/procfs/proc_cgroup.go | 98 + - .../prometheus/procfs/proc_cgroups.go | 98 + - .../prometheus/procfs/proc_environ.go | 37 + - .../prometheus/procfs/proc_fdinfo.go | 132 + - .../github.com/prometheus/procfs/proc_io.go | 59 + - .../prometheus/procfs/proc_limits.go | 160 + - .../github.com/prometheus/procfs/proc_maps.go | 211 + - .../prometheus/procfs/proc_netstat.go | 440 + - .../github.com/prometheus/procfs/proc_ns.go | 68 + - .../github.com/prometheus/procfs/proc_psi.go | 102 + - .../prometheus/procfs/proc_smaps.go | 166 + - .../github.com/prometheus/procfs/proc_snmp.go | 353 + - .../prometheus/procfs/proc_snmp6.go | 381 + - .../github.com/prometheus/procfs/proc_stat.go | 222 + - .../prometheus/procfs/proc_status.go | 170 + - .../github.com/prometheus/procfs/proc_sys.go | 51 + - .../github.com/prometheus/procfs/schedstat.go | 121 + - vendor/github.com/prometheus/procfs/slab.go | 151 + - .../github.com/prometheus/procfs/softirqs.go | 160 + - vendor/github.com/prometheus/procfs/stat.go | 244 + - vendor/github.com/prometheus/procfs/swaps.go | 89 + - vendor/github.com/prometheus/procfs/ttar | 413 + - vendor/github.com/prometheus/procfs/vm.go | 210 + - .../github.com/prometheus/procfs/zoneinfo.go | 196 + - .../seccomp/libseccomp-golang/.gitignore | 0 - .../seccomp/libseccomp-golang/.golangci.yml | 0 - .../seccomp/libseccomp-golang/CHANGELOG | 0 - .../seccomp/libseccomp-golang/CONTRIBUTING.md | 0 - .../seccomp/libseccomp-golang/LICENSE | 0 - .../seccomp/libseccomp-golang/Makefile | 0 - .../seccomp/libseccomp-golang/README.md | 0 - .../seccomp/libseccomp-golang/SECURITY.md | 0 - .../seccomp/libseccomp-golang/seccomp.go | 0 - .../libseccomp-golang/seccomp_internal.go | 0 - vendor/github.com/sirupsen/logrus/.gitignore | 0 - .../github.com/sirupsen/logrus/.golangci.yml | 0 - vendor/github.com/sirupsen/logrus/.travis.yml | 0 - .../github.com/sirupsen/logrus/CHANGELOG.md | 0 - vendor/github.com/sirupsen/logrus/LICENSE | 0 - vendor/github.com/sirupsen/logrus/README.md | 0 - vendor/github.com/sirupsen/logrus/alt_exit.go | 0 - .../github.com/sirupsen/logrus/appveyor.yml | 0 - .../github.com/sirupsen/logrus/buffer_pool.go | 0 - vendor/github.com/sirupsen/logrus/doc.go | 0 - vendor/github.com/sirupsen/logrus/entry.go | 0 - vendor/github.com/sirupsen/logrus/exported.go | 0 - .../github.com/sirupsen/logrus/formatter.go | 0 - vendor/github.com/sirupsen/logrus/hooks.go | 0 - .../sirupsen/logrus/json_formatter.go | 0 - vendor/github.com/sirupsen/logrus/logger.go | 0 - vendor/github.com/sirupsen/logrus/logrus.go | 0 - .../logrus/terminal_check_appengine.go | 0 - .../sirupsen/logrus/terminal_check_bsd.go | 0 - .../sirupsen/logrus/terminal_check_js.go | 0 - .../logrus/terminal_check_no_terminal.go | 0 - .../logrus/terminal_check_notappengine.go | 0 - .../sirupsen/logrus/terminal_check_solaris.go | 0 - .../sirupsen/logrus/terminal_check_unix.go | 0 - .../sirupsen/logrus/terminal_check_windows.go | 0 - .../sirupsen/logrus/text_formatter.go | 0 - vendor/github.com/sirupsen/logrus/writer.go | 0 - vendor/github.com/stretchr/testify/LICENSE | 0 - .../testify/assert/assertion_compare.go | 0 - .../assert/assertion_compare_can_convert.go | 0 - .../assert/assertion_compare_legacy.go | 0 - .../testify/assert/assertion_format.go | 0 - .../testify/assert/assertion_format.go.tmpl | 0 - .../testify/assert/assertion_forward.go | 0 - .../testify/assert/assertion_forward.go.tmpl | 0 - .../testify/assert/assertion_order.go | 0 - .../stretchr/testify/assert/assertions.go | 0 - .../github.com/stretchr/testify/assert/doc.go | 0 - .../stretchr/testify/assert/errors.go | 0 - .../testify/assert/forward_assertions.go | 0 - .../testify/assert/http_assertions.go | 0 - vendor/github.com/syndtr/gocapability/LICENSE | 0 - .../gocapability/capability/capability.go | 0 - .../capability/capability_linux.go | 0 - .../capability/capability_noop.go | 0 - .../syndtr/gocapability/capability/enum.go | 0 - .../gocapability/capability/enum_gen.go | 0 - .../gocapability/capability/syscall_linux.go | 0 - .../github.com/vishvananda/netlink/.gitignore | 0 - .../vishvananda/netlink/.travis.yml | 0 - .../vishvananda/netlink/CHANGELOG.md | 0 - vendor/github.com/vishvananda/netlink/LICENSE | 0 - .../github.com/vishvananda/netlink/Makefile | 0 - .../github.com/vishvananda/netlink/README.md | 0 - vendor/github.com/vishvananda/netlink/addr.go | 0 - .../vishvananda/netlink/addr_linux.go | 0 - .../vishvananda/netlink/bpf_linux.go | 0 - .../vishvananda/netlink/bridge_linux.go | 0 - .../github.com/vishvananda/netlink/class.go | 0 - .../vishvananda/netlink/class_linux.go | 0 - .../vishvananda/netlink/conntrack_linux.go | 0 - .../netlink/conntrack_unspecified.go | 0 - .../vishvananda/netlink/devlink_linux.go | 0 - .../github.com/vishvananda/netlink/filter.go | 0 - .../vishvananda/netlink/filter_linux.go | 0 - vendor/github.com/vishvananda/netlink/fou.go | 0 - .../vishvananda/netlink/fou_linux.go | 0 - .../vishvananda/netlink/fou_unspecified.go | 0 - .../vishvananda/netlink/genetlink_linux.go | 0 - .../netlink/genetlink_unspecified.go | 0 - .../vishvananda/netlink/gtp_linux.go | 0 - .../vishvananda/netlink/handle_linux.go | 0 - .../vishvananda/netlink/handle_unspecified.go | 0 - .../vishvananda/netlink/ioctl_linux.go | 0 - vendor/github.com/vishvananda/netlink/link.go | 0 - .../vishvananda/netlink/link_linux.go | 0 - .../vishvananda/netlink/link_tuntap_linux.go | 0 - .../github.com/vishvananda/netlink/neigh.go | 0 - .../vishvananda/netlink/neigh_linux.go | 0 - .../github.com/vishvananda/netlink/netlink.go | 0 - .../vishvananda/netlink/netlink_linux.go | 0 - .../netlink/netlink_unspecified.go | 0 - .../vishvananda/netlink/netns_linux.go | 0 - .../vishvananda/netlink/netns_unspecified.go | 0 - .../vishvananda/netlink/nl/addr_linux.go | 0 - .../vishvananda/netlink/nl/bridge_linux.go | 0 - .../vishvananda/netlink/nl/conntrack_linux.go | 0 - .../vishvananda/netlink/nl/devlink_linux.go | 0 - .../vishvananda/netlink/nl/genetlink_linux.go | 0 - .../vishvananda/netlink/nl/link_linux.go | 0 - .../vishvananda/netlink/nl/mpls_linux.go | 0 - .../vishvananda/netlink/nl/nl_linux.go | 0 - .../vishvananda/netlink/nl/nl_unspecified.go | 0 - .../vishvananda/netlink/nl/rdma_link_linux.go | 0 - .../vishvananda/netlink/nl/route_linux.go | 0 - .../vishvananda/netlink/nl/seg6_linux.go | 0 - .../vishvananda/netlink/nl/seg6local_linux.go | 0 - .../vishvananda/netlink/nl/syscall.go | 0 - .../vishvananda/netlink/nl/tc_linux.go | 0 - .../vishvananda/netlink/nl/xfrm_linux.go | 0 - .../netlink/nl/xfrm_monitor_linux.go | 0 - .../netlink/nl/xfrm_policy_linux.go | 0 - .../netlink/nl/xfrm_state_linux.go | 0 - .../github.com/vishvananda/netlink/order.go | 0 - .../vishvananda/netlink/protinfo.go | 0 - .../vishvananda/netlink/protinfo_linux.go | 0 - .../github.com/vishvananda/netlink/qdisc.go | 0 - .../vishvananda/netlink/qdisc_linux.go | 0 - .../vishvananda/netlink/rdma_link_linux.go | 0 - .../github.com/vishvananda/netlink/route.go | 0 - .../vishvananda/netlink/route_linux.go | 0 - .../vishvananda/netlink/route_unspecified.go | 0 - vendor/github.com/vishvananda/netlink/rule.go | 0 - .../vishvananda/netlink/rule_linux.go | 0 - .../github.com/vishvananda/netlink/socket.go | 0 - .../vishvananda/netlink/socket_linux.go | 0 - vendor/github.com/vishvananda/netlink/xfrm.go | 0 - .../vishvananda/netlink/xfrm_monitor_linux.go | 0 - .../vishvananda/netlink/xfrm_policy.go | 0 - .../vishvananda/netlink/xfrm_policy_linux.go | 0 - .../vishvananda/netlink/xfrm_state.go | 0 - .../vishvananda/netlink/xfrm_state_linux.go | 0 - vendor/github.com/vishvananda/netns/LICENSE | 0 - vendor/github.com/vishvananda/netns/README.md | 0 - vendor/github.com/vishvananda/netns/netns.go | 0 - .../vishvananda/netns/netns_linux.go | 0 - .../vishvananda/netns/netns_unspecified.go | 0 - vendor/golang.org/x/crypto/AUTHORS | 3 - - vendor/golang.org/x/crypto/CONTRIBUTORS | 3 - - vendor/golang.org/x/crypto/LICENSE | 0 - vendor/golang.org/x/crypto/PATENTS | 0 - .../x/crypto/ssh/terminal/terminal.go | 0 - vendor/golang.org/x/net/LICENSE | 0 - vendor/golang.org/x/net/PATENTS | 0 - vendor/golang.org/x/net/bpf/asm.go | 0 - vendor/golang.org/x/net/bpf/constants.go | 0 - vendor/golang.org/x/net/bpf/doc.go | 0 - vendor/golang.org/x/net/bpf/instructions.go | 0 - vendor/golang.org/x/net/bpf/setter.go | 0 - vendor/golang.org/x/net/bpf/vm.go | 0 - .../golang.org/x/net/bpf/vm_instructions.go | 0 - vendor/golang.org/x/net/context/context.go | 0 - .../x/net/context/ctxhttp/ctxhttp.go | 71 - - vendor/golang.org/x/net/context/go17.go | 0 - vendor/golang.org/x/net/context/go19.go | 0 - vendor/golang.org/x/net/context/pre_go17.go | 0 - vendor/golang.org/x/net/context/pre_go19.go | 0 - vendor/golang.org/x/net/http/httpguts/guts.go | 0 - .../golang.org/x/net/http/httpguts/httplex.go | 0 - vendor/golang.org/x/net/http2/.gitignore | 0 - vendor/golang.org/x/net/http2/Dockerfile | 51 - - vendor/golang.org/x/net/http2/Makefile | 3 - - vendor/golang.org/x/net/http2/ascii.go | 0 - vendor/golang.org/x/net/http2/ciphers.go | 0 - .../x/net/http2/client_conn_pool.go | 0 - vendor/golang.org/x/net/http2/databuffer.go | 0 - vendor/golang.org/x/net/http2/errors.go | 0 - vendor/golang.org/x/net/http2/flow.go | 88 +- - vendor/golang.org/x/net/http2/frame.go | 11 +- - vendor/golang.org/x/net/http2/go111.go | 0 - vendor/golang.org/x/net/http2/go115.go | 0 - vendor/golang.org/x/net/http2/go118.go | 0 - vendor/golang.org/x/net/http2/gotrack.go | 0 - vendor/golang.org/x/net/http2/headermap.go | 0 - vendor/golang.org/x/net/http2/hpack/encode.go | 0 - vendor/golang.org/x/net/http2/hpack/hpack.go | 81 +- - .../golang.org/x/net/http2/hpack/huffman.go | 0 - .../x/net/http2/hpack/static_table.go | 0 - vendor/golang.org/x/net/http2/hpack/tables.go | 0 - vendor/golang.org/x/net/http2/http2.go | 0 - vendor/golang.org/x/net/http2/not_go111.go | 0 - vendor/golang.org/x/net/http2/not_go115.go | 0 - vendor/golang.org/x/net/http2/not_go118.go | 0 - vendor/golang.org/x/net/http2/pipe.go | 6 +- - vendor/golang.org/x/net/http2/server.go | 207 +- - vendor/golang.org/x/net/http2/transport.go | 169 +- - vendor/golang.org/x/net/http2/write.go | 0 - vendor/golang.org/x/net/http2/writesched.go | 3 +- - .../x/net/http2/writesched_priority.go | 0 - .../x/net/http2/writesched_random.go | 0 - .../x/net/http2/writesched_roundrobin.go | 119 + - vendor/golang.org/x/net/idna/go118.go | 0 - vendor/golang.org/x/net/idna/idna10.0.0.go | 0 - vendor/golang.org/x/net/idna/idna9.0.0.go | 2 +- - vendor/golang.org/x/net/idna/pre_go118.go | 0 - vendor/golang.org/x/net/idna/punycode.go | 0 - vendor/golang.org/x/net/idna/tables10.0.0.go | 0 - vendor/golang.org/x/net/idna/tables11.0.0.go | 0 - vendor/golang.org/x/net/idna/tables12.0.0.go | 0 - vendor/golang.org/x/net/idna/tables13.0.0.go | 2988 +- - vendor/golang.org/x/net/idna/tables15.0.0.go | 5145 ++ - vendor/golang.org/x/net/idna/tables9.0.0.go | 0 - vendor/golang.org/x/net/idna/trie.go | 21 - - vendor/golang.org/x/net/idna/trie12.0.0.go | 31 + - vendor/golang.org/x/net/idna/trie13.0.0.go | 31 + - vendor/golang.org/x/net/idna/trieval.go | 0 - .../x/net/internal/timeseries/timeseries.go | 525 + - vendor/golang.org/x/net/trace/events.go | 532 + - vendor/golang.org/x/net/trace/histogram.go | 365 + - vendor/golang.org/x/net/trace/trace.go | 1130 + - vendor/golang.org/x/oauth2/.travis.yml | 0 - vendor/golang.org/x/oauth2/AUTHORS | 3 - - vendor/golang.org/x/oauth2/CONTRIBUTING.md | 0 - vendor/golang.org/x/oauth2/CONTRIBUTORS | 3 - - vendor/golang.org/x/oauth2/LICENSE | 0 - vendor/golang.org/x/oauth2/README.md | 12 +- - .../x/oauth2/internal/client_appengine.go | 0 - vendor/golang.org/x/oauth2/internal/doc.go | 0 - vendor/golang.org/x/oauth2/internal/oauth2.go | 0 - vendor/golang.org/x/oauth2/internal/token.go | 4 +- - .../golang.org/x/oauth2/internal/transport.go | 0 - vendor/golang.org/x/oauth2/oauth2.go | 33 +- - vendor/golang.org/x/oauth2/token.go | 14 +- - vendor/golang.org/x/oauth2/transport.go | 0 - vendor/golang.org/x/sys/LICENSE | 0 - vendor/golang.org/x/sys/PATENTS | 0 - .../sys/internal/unsafeheader/unsafeheader.go | 30 - - vendor/golang.org/x/sys/plan9/asm.s | 0 - vendor/golang.org/x/sys/plan9/asm_plan9_386.s | 0 - .../golang.org/x/sys/plan9/asm_plan9_amd64.s | 0 - vendor/golang.org/x/sys/plan9/asm_plan9_arm.s | 0 - vendor/golang.org/x/sys/plan9/const_plan9.go | 0 - vendor/golang.org/x/sys/plan9/dir_plan9.go | 0 - vendor/golang.org/x/sys/plan9/env_plan9.go | 0 - vendor/golang.org/x/sys/plan9/errors_plan9.go | 0 - vendor/golang.org/x/sys/plan9/mkall.sh | 0 - vendor/golang.org/x/sys/plan9/mkerrors.sh | 0 - .../golang.org/x/sys/plan9/mksysnum_plan9.sh | 0 - .../golang.org/x/sys/plan9/pwd_go15_plan9.go | 0 - vendor/golang.org/x/sys/plan9/pwd_plan9.go | 0 - vendor/golang.org/x/sys/plan9/race.go | 0 - vendor/golang.org/x/sys/plan9/race0.go | 0 - vendor/golang.org/x/sys/plan9/str.go | 0 - vendor/golang.org/x/sys/plan9/syscall.go | 0 - .../golang.org/x/sys/plan9/syscall_plan9.go | 0 - .../x/sys/plan9/zsyscall_plan9_386.go | 0 - .../x/sys/plan9/zsyscall_plan9_amd64.go | 0 - .../x/sys/plan9/zsyscall_plan9_arm.go | 0 - .../golang.org/x/sys/plan9/zsysnum_plan9.go | 0 - vendor/golang.org/x/sys/unix/.gitignore | 0 - vendor/golang.org/x/sys/unix/README.md | 0 - .../golang.org/x/sys/unix/affinity_linux.go | 0 - vendor/golang.org/x/sys/unix/aliases.go | 0 - vendor/golang.org/x/sys/unix/asm_aix_ppc64.s | 0 - vendor/golang.org/x/sys/unix/asm_bsd_386.s | 0 - vendor/golang.org/x/sys/unix/asm_bsd_amd64.s | 0 - vendor/golang.org/x/sys/unix/asm_bsd_arm.s | 0 - vendor/golang.org/x/sys/unix/asm_bsd_arm64.s | 0 - vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s | 0 - .../golang.org/x/sys/unix/asm_bsd_riscv64.s | 0 - vendor/golang.org/x/sys/unix/asm_linux_386.s | 0 - .../golang.org/x/sys/unix/asm_linux_amd64.s | 0 - vendor/golang.org/x/sys/unix/asm_linux_arm.s | 0 - .../golang.org/x/sys/unix/asm_linux_arm64.s | 0 - .../golang.org/x/sys/unix/asm_linux_loong64.s | 0 - .../golang.org/x/sys/unix/asm_linux_mips64x.s | 0 - .../golang.org/x/sys/unix/asm_linux_mipsx.s | 0 - .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 0 - .../golang.org/x/sys/unix/asm_linux_riscv64.s | 0 - .../golang.org/x/sys/unix/asm_linux_s390x.s | 0 - .../x/sys/unix/asm_openbsd_mips64.s | 0 - .../golang.org/x/sys/unix/asm_solaris_amd64.s | 0 - vendor/golang.org/x/sys/unix/asm_zos_s390x.s | 0 - .../golang.org/x/sys/unix/bluetooth_linux.go | 0 - vendor/golang.org/x/sys/unix/cap_freebsd.go | 0 - vendor/golang.org/x/sys/unix/constants.go | 0 - vendor/golang.org/x/sys/unix/dev_aix_ppc.go | 0 - vendor/golang.org/x/sys/unix/dev_aix_ppc64.go | 0 - vendor/golang.org/x/sys/unix/dev_darwin.go | 0 - vendor/golang.org/x/sys/unix/dev_dragonfly.go | 0 - vendor/golang.org/x/sys/unix/dev_freebsd.go | 0 - vendor/golang.org/x/sys/unix/dev_linux.go | 0 - vendor/golang.org/x/sys/unix/dev_netbsd.go | 0 - vendor/golang.org/x/sys/unix/dev_openbsd.go | 0 - vendor/golang.org/x/sys/unix/dev_zos.go | 0 - vendor/golang.org/x/sys/unix/dirent.go | 0 - vendor/golang.org/x/sys/unix/endian_big.go | 0 - vendor/golang.org/x/sys/unix/endian_little.go | 0 - vendor/golang.org/x/sys/unix/env_unix.go | 0 - vendor/golang.org/x/sys/unix/epoll_zos.go | 0 - vendor/golang.org/x/sys/unix/fcntl.go | 0 - vendor/golang.org/x/sys/unix/fcntl_darwin.go | 0 - .../x/sys/unix/fcntl_linux_32bit.go | 0 - vendor/golang.org/x/sys/unix/fdset.go | 0 - vendor/golang.org/x/sys/unix/fstatfs_zos.go | 0 - vendor/golang.org/x/sys/unix/gccgo.go | 4 +- - vendor/golang.org/x/sys/unix/gccgo_c.c | 4 +- - .../x/sys/unix/gccgo_linux_amd64.go | 0 - vendor/golang.org/x/sys/unix/ifreq_linux.go | 0 - vendor/golang.org/x/sys/unix/ioctl_linux.go | 0 - vendor/golang.org/x/sys/unix/ioctl_signed.go | 70 + - .../sys/unix/{ioctl.go => ioctl_unsigned.go} | 21 +- - vendor/golang.org/x/sys/unix/ioctl_zos.go | 20 +- - vendor/golang.org/x/sys/unix/mkall.sh | 6 +- - vendor/golang.org/x/sys/unix/mkerrors.sh | 14 +- - vendor/golang.org/x/sys/unix/mmap_nomremap.go | 14 + - vendor/golang.org/x/sys/unix/mremap.go | 53 + - vendor/golang.org/x/sys/unix/pagesize_unix.go | 0 - .../golang.org/x/sys/unix/pledge_openbsd.go | 0 - vendor/golang.org/x/sys/unix/ptrace_darwin.go | 0 - vendor/golang.org/x/sys/unix/ptrace_ios.go | 0 - vendor/golang.org/x/sys/unix/race.go | 0 - vendor/golang.org/x/sys/unix/race0.go | 0 - .../x/sys/unix/readdirent_getdents.go | 0 - .../x/sys/unix/readdirent_getdirentries.go | 0 - .../x/sys/unix/sockcmsg_dragonfly.go | 0 - .../golang.org/x/sys/unix/sockcmsg_linux.go | 0 - vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 0 - .../x/sys/unix/sockcmsg_unix_other.go | 0 - vendor/golang.org/x/sys/unix/syscall.go | 0 - vendor/golang.org/x/sys/unix/syscall_aix.go | 24 +- - .../golang.org/x/sys/unix/syscall_aix_ppc.go | 1 - - .../x/sys/unix/syscall_aix_ppc64.go | 1 - - vendor/golang.org/x/sys/unix/syscall_bsd.go | 17 +- - .../golang.org/x/sys/unix/syscall_darwin.go | 252 +- - .../x/sys/unix/syscall_darwin_amd64.go | 0 - .../x/sys/unix/syscall_darwin_arm64.go | 0 - .../x/sys/unix/syscall_darwin_libSystem.go | 0 - .../x/sys/unix/syscall_dragonfly.go | 201 +- - .../x/sys/unix/syscall_dragonfly_amd64.go | 0 - .../golang.org/x/sys/unix/syscall_freebsd.go | 237 +- - .../x/sys/unix/syscall_freebsd_386.go | 12 +- - .../x/sys/unix/syscall_freebsd_amd64.go | 12 +- - .../x/sys/unix/syscall_freebsd_arm.go | 10 +- - .../x/sys/unix/syscall_freebsd_arm64.go | 10 +- - .../x/sys/unix/syscall_freebsd_riscv64.go | 10 +- - vendor/golang.org/x/sys/unix/syscall_hurd.go | 30 + - .../golang.org/x/sys/unix/syscall_hurd_386.go | 29 + - .../golang.org/x/sys/unix/syscall_illumos.go | 0 - vendor/golang.org/x/sys/unix/syscall_linux.go | 317 +- - .../x/sys/unix/syscall_linux_386.go | 27 - - .../x/sys/unix/syscall_linux_alarm.go | 0 - .../x/sys/unix/syscall_linux_amd64.go | 3 +- - .../x/sys/unix/syscall_linux_amd64_gc.go | 0 - .../x/sys/unix/syscall_linux_arm.go | 27 - - .../x/sys/unix/syscall_linux_arm64.go | 12 +- - .../golang.org/x/sys/unix/syscall_linux_gc.go | 0 - .../x/sys/unix/syscall_linux_gc_386.go | 0 - .../x/sys/unix/syscall_linux_gc_arm.go | 0 - .../x/sys/unix/syscall_linux_gccgo_386.go | 0 - .../x/sys/unix/syscall_linux_gccgo_arm.go | 0 - .../x/sys/unix/syscall_linux_loong64.go | 7 +- - .../x/sys/unix/syscall_linux_mips64x.go | 3 +- - .../x/sys/unix/syscall_linux_mipsx.go | 27 - - .../x/sys/unix/syscall_linux_ppc.go | 27 - - .../x/sys/unix/syscall_linux_ppc64x.go | 1 - - .../x/sys/unix/syscall_linux_riscv64.go | 14 +- - .../x/sys/unix/syscall_linux_s390x.go | 1 - - .../x/sys/unix/syscall_linux_sparc64.go | 1 - - .../golang.org/x/sys/unix/syscall_netbsd.go | 294 +- - .../x/sys/unix/syscall_netbsd_386.go | 0 - .../x/sys/unix/syscall_netbsd_amd64.go | 0 - .../x/sys/unix/syscall_netbsd_arm.go | 0 - .../x/sys/unix/syscall_netbsd_arm64.go | 0 - .../golang.org/x/sys/unix/syscall_openbsd.go | 94 +- - .../x/sys/unix/syscall_openbsd_386.go | 0 - .../x/sys/unix/syscall_openbsd_amd64.go | 0 - .../x/sys/unix/syscall_openbsd_arm.go | 0 - .../x/sys/unix/syscall_openbsd_arm64.go | 0 - .../x/sys/unix/syscall_openbsd_libc.go | 4 +- - .../x/sys/unix/syscall_openbsd_mips64.go | 0 - .../x/sys/unix/syscall_openbsd_ppc64.go | 0 - .../x/sys/unix/syscall_openbsd_riscv64.go | 0 - .../golang.org/x/sys/unix/syscall_solaris.go | 69 +- - .../x/sys/unix/syscall_solaris_amd64.go | 0 - vendor/golang.org/x/sys/unix/syscall_unix.go | 75 +- - .../golang.org/x/sys/unix/syscall_unix_gc.go | 0 - .../x/sys/unix/syscall_unix_gc_ppc64x.go | 0 - .../x/sys/unix/syscall_zos_s390x.go | 21 +- - vendor/golang.org/x/sys/unix/sysvshm_linux.go | 0 - vendor/golang.org/x/sys/unix/sysvshm_unix.go | 0 - .../x/sys/unix/sysvshm_unix_other.go | 0 - vendor/golang.org/x/sys/unix/timestruct.go | 2 +- - .../golang.org/x/sys/unix/unveil_openbsd.go | 0 - vendor/golang.org/x/sys/unix/xattr_bsd.go | 9 +- - .../golang.org/x/sys/unix/zerrors_aix_ppc.go | 0 - .../x/sys/unix/zerrors_aix_ppc64.go | 0 - .../x/sys/unix/zerrors_darwin_amd64.go | 19 + - .../x/sys/unix/zerrors_darwin_arm64.go | 19 + - .../x/sys/unix/zerrors_dragonfly_amd64.go | 0 - .../x/sys/unix/zerrors_freebsd_386.go | 0 - .../x/sys/unix/zerrors_freebsd_amd64.go | 0 - .../x/sys/unix/zerrors_freebsd_arm.go | 0 - .../x/sys/unix/zerrors_freebsd_arm64.go | 0 - .../x/sys/unix/zerrors_freebsd_riscv64.go | 0 - vendor/golang.org/x/sys/unix/zerrors_linux.go | 102 +- - .../x/sys/unix/zerrors_linux_386.go | 12 + - .../x/sys/unix/zerrors_linux_amd64.go | 12 + - .../x/sys/unix/zerrors_linux_arm.go | 12 + - .../x/sys/unix/zerrors_linux_arm64.go | 14 + - .../x/sys/unix/zerrors_linux_loong64.go | 14 + - .../x/sys/unix/zerrors_linux_mips.go | 12 + - .../x/sys/unix/zerrors_linux_mips64.go | 12 + - .../x/sys/unix/zerrors_linux_mips64le.go | 12 + - .../x/sys/unix/zerrors_linux_mipsle.go | 12 + - .../x/sys/unix/zerrors_linux_ppc.go | 12 + - .../x/sys/unix/zerrors_linux_ppc64.go | 12 + - .../x/sys/unix/zerrors_linux_ppc64le.go | 12 + - .../x/sys/unix/zerrors_linux_riscv64.go | 12 + - .../x/sys/unix/zerrors_linux_s390x.go | 12 + - .../x/sys/unix/zerrors_linux_sparc64.go | 60 + - .../x/sys/unix/zerrors_netbsd_386.go | 0 - .../x/sys/unix/zerrors_netbsd_amd64.go | 0 - .../x/sys/unix/zerrors_netbsd_arm.go | 0 - .../x/sys/unix/zerrors_netbsd_arm64.go | 0 - .../x/sys/unix/zerrors_openbsd_386.go | 356 +- - .../x/sys/unix/zerrors_openbsd_amd64.go | 189 +- - .../x/sys/unix/zerrors_openbsd_arm.go | 348 +- - .../x/sys/unix/zerrors_openbsd_arm64.go | 160 +- - .../x/sys/unix/zerrors_openbsd_mips64.go | 95 +- - .../x/sys/unix/zerrors_openbsd_ppc64.go | 0 - .../x/sys/unix/zerrors_openbsd_riscv64.go | 0 - .../x/sys/unix/zerrors_solaris_amd64.go | 0 - .../x/sys/unix/zerrors_zos_s390x.go | 0 - .../x/sys/unix/zptrace_armnn_linux.go | 8 +- - .../x/sys/unix/zptrace_linux_arm64.go | 4 +- - .../x/sys/unix/zptrace_mipsnn_linux.go | 8 +- - .../x/sys/unix/zptrace_mipsnnle_linux.go | 8 +- - .../x/sys/unix/zptrace_x86_linux.go | 8 +- - .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 45 +- - .../x/sys/unix/zsyscall_aix_ppc64.go | 46 +- - .../x/sys/unix/zsyscall_aix_ppc64_gc.go | 17 +- - .../x/sys/unix/zsyscall_aix_ppc64_gccgo.go | 18 +- - .../x/sys/unix/zsyscall_darwin_amd64.go | 71 +- - .../x/sys/unix/zsyscall_darwin_amd64.s | 160 +- - .../x/sys/unix/zsyscall_darwin_arm64.go | 71 +- - .../x/sys/unix/zsyscall_darwin_arm64.s | 160 +- - .../x/sys/unix/zsyscall_dragonfly_amd64.go | 52 +- - .../x/sys/unix/zsyscall_freebsd_386.go | 62 +- - .../x/sys/unix/zsyscall_freebsd_amd64.go | 62 +- - .../x/sys/unix/zsyscall_freebsd_arm.go | 62 +- - .../x/sys/unix/zsyscall_freebsd_arm64.go | 62 +- - .../x/sys/unix/zsyscall_freebsd_riscv64.go | 62 +- - .../x/sys/unix/zsyscall_illumos_amd64.go | 10 +- - .../golang.org/x/sys/unix/zsyscall_linux.go | 100 +- - .../x/sys/unix/zsyscall_linux_386.go | 10 - - .../x/sys/unix/zsyscall_linux_amd64.go | 10 - - .../x/sys/unix/zsyscall_linux_arm.go | 10 - - .../x/sys/unix/zsyscall_linux_arm64.go | 10 - - .../x/sys/unix/zsyscall_linux_loong64.go | 0 - .../x/sys/unix/zsyscall_linux_mips.go | 10 - - .../x/sys/unix/zsyscall_linux_mips64.go | 10 - - .../x/sys/unix/zsyscall_linux_mips64le.go | 10 - - .../x/sys/unix/zsyscall_linux_mipsle.go | 10 - - .../x/sys/unix/zsyscall_linux_ppc.go | 10 - - .../x/sys/unix/zsyscall_linux_ppc64.go | 10 - - .../x/sys/unix/zsyscall_linux_ppc64le.go | 10 - - .../x/sys/unix/zsyscall_linux_riscv64.go | 26 +- - .../x/sys/unix/zsyscall_linux_s390x.go | 10 - - .../x/sys/unix/zsyscall_linux_sparc64.go | 10 - - .../x/sys/unix/zsyscall_netbsd_386.go | 59 +- - .../x/sys/unix/zsyscall_netbsd_amd64.go | 59 +- - .../x/sys/unix/zsyscall_netbsd_arm.go | 59 +- - .../x/sys/unix/zsyscall_netbsd_arm64.go | 59 +- - .../x/sys/unix/zsyscall_openbsd_386.go | 82 +- - .../x/sys/unix/zsyscall_openbsd_386.s | 152 +- - .../x/sys/unix/zsyscall_openbsd_amd64.go | 82 +- - .../x/sys/unix/zsyscall_openbsd_amd64.s | 152 +- - .../x/sys/unix/zsyscall_openbsd_arm.go | 82 +- - .../x/sys/unix/zsyscall_openbsd_arm.s | 152 +- - .../x/sys/unix/zsyscall_openbsd_arm64.go | 82 +- - .../x/sys/unix/zsyscall_openbsd_arm64.s | 152 +- - .../x/sys/unix/zsyscall_openbsd_mips64.go | 856 +- - .../x/sys/unix/zsyscall_openbsd_mips64.s | 674 + - .../x/sys/unix/zsyscall_openbsd_ppc64.go | 82 +- - .../x/sys/unix/zsyscall_openbsd_ppc64.s | 24 +- - .../x/sys/unix/zsyscall_openbsd_riscv64.go | 82 +- - .../x/sys/unix/zsyscall_openbsd_riscv64.s | 152 +- - .../x/sys/unix/zsyscall_solaris_amd64.go | 291 +- - .../x/sys/unix/zsyscall_zos_s390x.go | 23 +- - .../x/sys/unix/zsysctl_openbsd_386.go | 51 +- - .../x/sys/unix/zsysctl_openbsd_amd64.go | 17 +- - .../x/sys/unix/zsysctl_openbsd_arm.go | 51 +- - .../x/sys/unix/zsysctl_openbsd_arm64.go | 11 +- - .../x/sys/unix/zsysctl_openbsd_mips64.go | 3 +- - .../x/sys/unix/zsysctl_openbsd_ppc64.go | 0 - .../x/sys/unix/zsysctl_openbsd_riscv64.go | 0 - .../x/sys/unix/zsysnum_darwin_amd64.go | 0 - .../x/sys/unix/zsysnum_darwin_arm64.go | 0 - .../x/sys/unix/zsysnum_dragonfly_amd64.go | 0 - .../x/sys/unix/zsysnum_freebsd_386.go | 0 - .../x/sys/unix/zsysnum_freebsd_amd64.go | 0 - .../x/sys/unix/zsysnum_freebsd_arm.go | 0 - .../x/sys/unix/zsysnum_freebsd_arm64.go | 0 - .../x/sys/unix/zsysnum_freebsd_riscv64.go | 0 - .../x/sys/unix/zsysnum_linux_386.go | 1 + - .../x/sys/unix/zsysnum_linux_amd64.go | 1 + - .../x/sys/unix/zsysnum_linux_arm.go | 1 + - .../x/sys/unix/zsysnum_linux_arm64.go | 1 + - .../x/sys/unix/zsysnum_linux_loong64.go | 1 + - .../x/sys/unix/zsysnum_linux_mips.go | 1 + - .../x/sys/unix/zsysnum_linux_mips64.go | 1 + - .../x/sys/unix/zsysnum_linux_mips64le.go | 1 + - .../x/sys/unix/zsysnum_linux_mipsle.go | 1 + - .../x/sys/unix/zsysnum_linux_ppc.go | 1 + - .../x/sys/unix/zsysnum_linux_ppc64.go | 1 + - .../x/sys/unix/zsysnum_linux_ppc64le.go | 1 + - .../x/sys/unix/zsysnum_linux_riscv64.go | 3 + - .../x/sys/unix/zsysnum_linux_s390x.go | 2 + - .../x/sys/unix/zsysnum_linux_sparc64.go | 1 + - .../x/sys/unix/zsysnum_netbsd_386.go | 0 - .../x/sys/unix/zsysnum_netbsd_amd64.go | 0 - .../x/sys/unix/zsysnum_netbsd_arm.go | 0 - .../x/sys/unix/zsysnum_netbsd_arm64.go | 0 - .../x/sys/unix/zsysnum_openbsd_386.go | 0 - .../x/sys/unix/zsysnum_openbsd_amd64.go | 0 - .../x/sys/unix/zsysnum_openbsd_arm.go | 0 - .../x/sys/unix/zsysnum_openbsd_arm64.go | 0 - .../x/sys/unix/zsysnum_openbsd_mips64.go | 1 + - .../x/sys/unix/zsysnum_openbsd_ppc64.go | 0 - .../x/sys/unix/zsysnum_openbsd_riscv64.go | 0 - .../x/sys/unix/zsysnum_zos_s390x.go | 0 - .../golang.org/x/sys/unix/ztypes_aix_ppc.go | 0 - .../golang.org/x/sys/unix/ztypes_aix_ppc64.go | 0 - .../x/sys/unix/ztypes_darwin_amd64.go | 11 + - .../x/sys/unix/ztypes_darwin_arm64.go | 11 + - .../x/sys/unix/ztypes_dragonfly_amd64.go | 0 - .../x/sys/unix/ztypes_freebsd_386.go | 2 +- - .../x/sys/unix/ztypes_freebsd_amd64.go | 2 +- - .../x/sys/unix/ztypes_freebsd_arm.go | 2 +- - .../x/sys/unix/ztypes_freebsd_arm64.go | 2 +- - .../x/sys/unix/ztypes_freebsd_riscv64.go | 2 +- - vendor/golang.org/x/sys/unix/ztypes_linux.go | 432 +- - .../golang.org/x/sys/unix/ztypes_linux_386.go | 4 +- - .../x/sys/unix/ztypes_linux_amd64.go | 4 +- - .../golang.org/x/sys/unix/ztypes_linux_arm.go | 4 +- - .../x/sys/unix/ztypes_linux_arm64.go | 4 +- - .../x/sys/unix/ztypes_linux_loong64.go | 4 +- - .../x/sys/unix/ztypes_linux_mips.go | 4 +- - .../x/sys/unix/ztypes_linux_mips64.go | 4 +- - .../x/sys/unix/ztypes_linux_mips64le.go | 4 +- - .../x/sys/unix/ztypes_linux_mipsle.go | 4 +- - .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 4 +- - .../x/sys/unix/ztypes_linux_ppc64.go | 4 +- - .../x/sys/unix/ztypes_linux_ppc64le.go | 4 +- - .../x/sys/unix/ztypes_linux_riscv64.go | 31 +- - .../x/sys/unix/ztypes_linux_s390x.go | 4 +- - .../x/sys/unix/ztypes_linux_sparc64.go | 4 +- - .../x/sys/unix/ztypes_netbsd_386.go | 84 + - .../x/sys/unix/ztypes_netbsd_amd64.go | 84 + - .../x/sys/unix/ztypes_netbsd_arm.go | 84 + - .../x/sys/unix/ztypes_netbsd_arm64.go | 84 + - .../x/sys/unix/ztypes_openbsd_386.go | 97 +- - .../x/sys/unix/ztypes_openbsd_amd64.go | 33 +- - .../x/sys/unix/ztypes_openbsd_arm.go | 9 +- - .../x/sys/unix/ztypes_openbsd_arm64.go | 9 +- - .../x/sys/unix/ztypes_openbsd_mips64.go | 9 +- - .../x/sys/unix/ztypes_openbsd_ppc64.go | 0 - .../x/sys/unix/ztypes_openbsd_riscv64.go | 0 - .../x/sys/unix/ztypes_solaris_amd64.go | 0 - .../golang.org/x/sys/unix/ztypes_zos_s390x.go | 0 - vendor/golang.org/x/sys/windows/aliases.go | 0 - .../golang.org/x/sys/windows/dll_windows.go | 0 - vendor/golang.org/x/sys/windows/empty.s | 0 - .../golang.org/x/sys/windows/env_windows.go | 6 +- - vendor/golang.org/x/sys/windows/eventlog.go | 0 - .../golang.org/x/sys/windows/exec_windows.go | 92 +- - .../x/sys/windows/memory_windows.go | 0 - vendor/golang.org/x/sys/windows/mkerrors.bash | 0 - .../x/sys/windows/mkknownfolderids.bash | 0 - vendor/golang.org/x/sys/windows/mksyscall.go | 0 - vendor/golang.org/x/sys/windows/race.go | 0 - vendor/golang.org/x/sys/windows/race0.go | 0 - .../golang.org/x/sys/windows/registry/key.go | 0 - .../x/sys/windows/registry/mksyscall.go | 0 - .../x/sys/windows/registry/syscall.go | 0 - .../x/sys/windows/registry/value.go | 0 - .../sys/windows/registry/zsyscall_windows.go | 0 - .../x/sys/windows/security_windows.go | 21 +- - vendor/golang.org/x/sys/windows/service.go | 11 + - .../x/sys/windows/setupapi_windows.go | 0 - vendor/golang.org/x/sys/windows/str.go | 0 - vendor/golang.org/x/sys/windows/syscall.go | 0 - .../x/sys/windows/syscall_windows.go | 90 +- - .../golang.org/x/sys/windows/types_windows.go | 102 +- - .../x/sys/windows/types_windows_386.go | 0 - .../x/sys/windows/types_windows_amd64.go | 0 - .../x/sys/windows/types_windows_arm.go | 0 - .../x/sys/windows/types_windows_arm64.go | 0 - .../x/sys/windows/zerrors_windows.go | 0 - .../x/sys/windows/zknownfolderids_windows.go | 0 - .../x/sys/windows/zsyscall_windows.go | 98 +- - vendor/golang.org/x/term/CONTRIBUTING.md | 0 - vendor/golang.org/x/term/LICENSE | 0 - vendor/golang.org/x/term/PATENTS | 0 - vendor/golang.org/x/term/README.md | 0 - vendor/golang.org/x/term/codereview.cfg | 0 - vendor/golang.org/x/term/term.go | 0 - vendor/golang.org/x/term/term_plan9.go | 0 - vendor/golang.org/x/term/term_unix.go | 2 +- - vendor/golang.org/x/term/term_unix_bsd.go | 0 - vendor/golang.org/x/term/term_unix_other.go | 0 - vendor/golang.org/x/term/term_unsupported.go | 0 - vendor/golang.org/x/term/term_windows.go | 0 - vendor/golang.org/x/term/terminal.go | 0 - vendor/golang.org/x/text/LICENSE | 0 - vendor/golang.org/x/text/PATENTS | 0 - .../x/text/secure/bidirule/bidirule.go | 0 - .../x/text/secure/bidirule/bidirule10.0.0.go | 0 - .../x/text/secure/bidirule/bidirule9.0.0.go | 0 - .../golang.org/x/text/transform/transform.go | 0 - vendor/golang.org/x/text/unicode/bidi/bidi.go | 0 - .../golang.org/x/text/unicode/bidi/bracket.go | 0 - vendor/golang.org/x/text/unicode/bidi/core.go | 0 - vendor/golang.org/x/text/unicode/bidi/prop.go | 0 - .../x/text/unicode/bidi/tables10.0.0.go | 0 - .../x/text/unicode/bidi/tables11.0.0.go | 0 - .../x/text/unicode/bidi/tables12.0.0.go | 0 - .../x/text/unicode/bidi/tables13.0.0.go | 4 +- - .../x/text/unicode/bidi/tables15.0.0.go | 2043 + - .../x/text/unicode/bidi/tables9.0.0.go | 0 - .../golang.org/x/text/unicode/bidi/trieval.go | 0 - .../x/text/unicode/norm/composition.go | 0 - .../x/text/unicode/norm/forminfo.go | 2 +- - .../golang.org/x/text/unicode/norm/input.go | 0 - vendor/golang.org/x/text/unicode/norm/iter.go | 0 - .../x/text/unicode/norm/normalize.go | 0 - .../x/text/unicode/norm/readwriter.go | 0 - .../x/text/unicode/norm/tables10.0.0.go | 0 - .../x/text/unicode/norm/tables11.0.0.go | 0 - .../x/text/unicode/norm/tables12.0.0.go | 0 - .../x/text/unicode/norm/tables13.0.0.go | 4 +- - .../x/text/unicode/norm/tables15.0.0.go | 7908 +++ - .../x/text/unicode/norm/tables9.0.0.go | 0 - .../x/text/unicode/norm/transform.go | 0 - vendor/golang.org/x/text/unicode/norm/trie.go | 2 +- - vendor/golang.org/x/time/AUTHORS | 0 - vendor/golang.org/x/time/CONTRIBUTORS | 0 - vendor/golang.org/x/time/LICENSE | 0 - vendor/golang.org/x/time/PATENTS | 0 - vendor/golang.org/x/time/rate/rate.go | 0 - vendor/google.golang.org/appengine/LICENSE | 0 - .../appengine/internal/api.go | 0 - .../appengine/internal/api_classic.go | 0 - .../appengine/internal/api_common.go | 0 - .../appengine/internal/app_id.go | 0 - .../appengine/internal/base/api_base.pb.go | 0 - .../appengine/internal/base/api_base.proto | 0 - .../internal/datastore/datastore_v3.pb.go | 0 - .../internal/datastore/datastore_v3.proto | 0 - .../appengine/internal/identity.go | 0 - .../appengine/internal/identity_classic.go | 0 - .../appengine/internal/identity_flex.go | 0 - .../appengine/internal/identity_vm.go | 0 - .../appengine/internal/internal.go | 0 - .../appengine/internal/log/log_service.pb.go | 0 - .../appengine/internal/log/log_service.proto | 0 - .../appengine/internal/main.go | 0 - .../appengine/internal/main_common.go | 0 - .../appengine/internal/main_vm.go | 0 - .../appengine/internal/metadata.go | 0 - .../appengine/internal/net.go | 0 - .../appengine/internal/regen.sh | 0 - .../internal/remote_api/remote_api.pb.go | 0 - .../internal/remote_api/remote_api.proto | 0 - .../appengine/internal/transaction.go | 0 - .../internal/urlfetch/urlfetch_service.pb.go | 0 - .../internal/urlfetch/urlfetch_service.proto | 0 - .../appengine/urlfetch/urlfetch.go | 0 - .../genproto/googleapis/rpc/LICENSE | 202 + - .../googleapis/rpc/status/status.pb.go | 203 + - vendor/google.golang.org/grpc/AUTHORS | 1 + - .../google.golang.org/grpc/CODE-OF-CONDUCT.md | 3 + - vendor/google.golang.org/grpc/CONTRIBUTING.md | 73 + - vendor/google.golang.org/grpc/GOVERNANCE.md | 1 + - vendor/google.golang.org/grpc/LICENSE | 202 + - vendor/google.golang.org/grpc/MAINTAINERS.md | 28 + - vendor/google.golang.org/grpc/Makefile | 46 + - vendor/google.golang.org/grpc/NOTICE.txt | 13 + - vendor/google.golang.org/grpc/README.md | 141 + - vendor/google.golang.org/grpc/SECURITY.md | 3 + - .../grpc/attributes/attributes.go | 142 + - vendor/google.golang.org/grpc/backoff.go | 61 + - .../google.golang.org/grpc/backoff/backoff.go | 52 + - .../grpc/balancer/balancer.go | 404 + - .../grpc/balancer/base/balancer.go | 254 + - .../grpc/balancer/base/base.go | 71 + - .../grpc/balancer/conn_state_evaluator.go | 74 + - .../grpc/balancer/grpclb/state/state.go | 51 + - .../grpc/balancer/roundrobin/roundrobin.go | 81 + - .../grpc/balancer_conn_wrappers.go | 459 + - .../grpc_binarylog_v1/binarylog.pb.go | 1183 + - vendor/google.golang.org/grpc/call.go | 79 + - .../grpc/channelz/channelz.go | 36 + - vendor/google.golang.org/grpc/clientconn.go | 1979 + - vendor/google.golang.org/grpc/codec.go | 50 + - vendor/google.golang.org/grpc/codegen.sh | 17 + - .../grpc/codes/code_string.go | 111 + - vendor/google.golang.org/grpc/codes/codes.go | 244 + - .../grpc/connectivity/connectivity.go | 94 + - .../grpc/credentials/credentials.go | 291 + - .../grpc/credentials/insecure/insecure.go | 98 + - .../google.golang.org/grpc/credentials/tls.go | 236 + - vendor/google.golang.org/grpc/dialoptions.go | 701 + - vendor/google.golang.org/grpc/doc.go | 26 + - .../grpc/encoding/encoding.go | 135 + - .../grpc/encoding/proto/proto.go | 58 + - .../grpc/grpclog/component.go | 117 + - .../google.golang.org/grpc/grpclog/grpclog.go | 132 + - .../google.golang.org/grpc/grpclog/logger.go | 87 + - .../grpc/grpclog/loggerv2.go | 258 + - vendor/google.golang.org/grpc/idle.go | 287 + - vendor/google.golang.org/grpc/interceptor.go | 104 + - .../grpc/internal/backoff/backoff.go | 73 + - .../balancer/gracefulswitch/gracefulswitch.go | 384 + - .../grpc/internal/balancerload/load.go | 46 + - .../grpc/internal/binarylog/binarylog.go | 192 + - .../internal/binarylog/binarylog_testutil.go | 42 + - .../grpc/internal/binarylog/env_config.go | 208 + - .../grpc/internal/binarylog/method_logger.go | 445 + - .../grpc/internal/binarylog/sink.go | 170 + - .../grpc/internal/buffer/unbounded.go | 105 + - .../grpc/internal/channelz/funcs.go | 789 + - .../grpc/internal/channelz/id.go | 75 + - .../grpc/internal/channelz/logging.go | 79 + - .../grpc/internal/channelz/types.go | 722 + - .../grpc/internal/channelz/types_linux.go | 51 + - .../grpc/internal/channelz/types_nonlinux.go | 43 + - .../grpc/internal/channelz/util_linux.go | 37 + - .../grpc/internal/channelz/util_nonlinux.go | 27 + - .../grpc/internal/credentials/credentials.go | 49 + - .../grpc/internal/credentials/spiffe.go | 75 + - .../grpc/internal/credentials/syscallconn.go | 58 + - .../grpc/internal/credentials/util.go | 52 + - .../grpc/internal/envconfig/envconfig.go | 69 + - .../grpc/internal/envconfig/observability.go | 42 + - .../grpc/internal/envconfig/xds.go | 95 + - .../grpc/internal/grpclog/grpclog.go | 126 + - .../grpc/internal/grpclog/prefixLogger.go | 93 + - .../grpc/internal/grpcrand/grpcrand.go | 95 + - .../internal/grpcsync/callback_serializer.go | 119 + - .../grpc/internal/grpcsync/event.go | 61 + - .../grpc/internal/grpcsync/oncefunc.go | 32 + - .../grpc/internal/grpcsync/pubsub.go | 136 + - .../grpc/internal/grpcutil/compressor.go | 47 + - .../grpc/internal/grpcutil/encode_duration.go | 63 + - .../grpc/internal/grpcutil/grpcutil.go | 20 + - .../grpc/internal/grpcutil/metadata.go | 40 + - .../grpc/internal/grpcutil/method.go | 88 + - .../grpc/internal/grpcutil/regex.go | 31 + - .../grpc/internal/internal.go | 194 + - .../grpc/internal/metadata/metadata.go | 132 + - .../grpc/internal/pretty/pretty.go | 82 + - .../grpc/internal/resolver/config_selector.go | 167 + - .../internal/resolver/dns/dns_resolver.go | 470 + - .../resolver/passthrough/passthrough.go | 64 + - .../grpc/internal/resolver/unix/unix.go | 74 + - .../grpc/internal/serviceconfig/duration.go | 130 + - .../internal/serviceconfig/serviceconfig.go | 180 + - .../grpc/internal/status/status.go | 176 + - .../grpc/internal/syscall/syscall_linux.go | 112 + - .../grpc/internal/syscall/syscall_nonlinux.go | 77 + - .../grpc/internal/transport/bdp_estimator.go | 141 + - .../grpc/internal/transport/controlbuf.go | 1007 + - .../grpc/internal/transport/defaults.go | 55 + - .../grpc/internal/transport/flowcontrol.go | 215 + - .../grpc/internal/transport/handler_server.go | 480 + - .../grpc/internal/transport/http2_client.go | 1798 + - .../grpc/internal/transport/http2_server.go | 1464 + - .../grpc/internal/transport/http_util.go | 432 + - .../grpc/internal/transport/logging.go | 40 + - .../transport/networktype/networktype.go | 46 + - .../grpc/internal/transport/proxy.go | 142 + - .../grpc/internal/transport/transport.go | 842 + - .../grpc/internal/xds_handshake_cluster.go | 40 + - .../grpc/keepalive/keepalive.go | 85 + - .../grpc/metadata/metadata.go | 295 + - vendor/google.golang.org/grpc/peer/peer.go | 51 + - .../google.golang.org/grpc/picker_wrapper.go | 216 + - vendor/google.golang.org/grpc/pickfirst.go | 227 + - vendor/google.golang.org/grpc/preloader.go | 67 + - vendor/google.golang.org/grpc/regenerate.sh | 123 + - vendor/google.golang.org/grpc/resolver/map.go | 138 + - .../grpc/resolver/resolver.go | 330 + - .../grpc/resolver_conn_wrapper.go | 239 + - vendor/google.golang.org/grpc/rpc_util.go | 956 + - vendor/google.golang.org/grpc/server.go | 2104 + - .../google.golang.org/grpc/service_config.go | 347 + - .../grpc/serviceconfig/serviceconfig.go | 44 + - .../grpc/shared_buffer_pool.go | 154 + - .../google.golang.org/grpc/stats/handlers.go | 63 + - vendor/google.golang.org/grpc/stats/stats.go | 333 + - .../google.golang.org/grpc/status/status.go | 160 + - vendor/google.golang.org/grpc/stream.go | 1776 + - vendor/google.golang.org/grpc/tap/tap.go | 56 + - vendor/google.golang.org/grpc/trace.go | 123 + - vendor/google.golang.org/grpc/version.go | 22 + - vendor/google.golang.org/grpc/vet.sh | 208 + - vendor/google.golang.org/protobuf/LICENSE | 0 - vendor/google.golang.org/protobuf/PATENTS | 0 - .../protobuf/encoding/protojson/decode.go | 665 + - .../protobuf/encoding/protojson/doc.go | 11 + - .../protobuf/encoding/protojson/encode.go | 349 + - .../encoding/protojson/well_known_types.go | 895 + - .../protobuf/encoding/prototext/decode.go | 0 - .../protobuf/encoding/prototext/doc.go | 0 - .../protobuf/encoding/prototext/encode.go | 14 +- - .../protobuf/encoding/protowire/wire.go | 8 +- - .../protobuf/internal/descfmt/stringer.go | 0 - .../protobuf/internal/descopts/options.go | 0 - .../protobuf/internal/detrand/rand.go | 0 - .../internal/encoding/defval/default.go | 0 - .../protobuf/internal/encoding/json/decode.go | 340 + - .../internal/encoding/json/decode_number.go | 254 + - .../internal/encoding/json/decode_string.go | 91 + - .../internal/encoding/json/decode_token.go | 192 + - .../protobuf/internal/encoding/json/encode.go | 278 + - .../encoding/messageset/messageset.go | 0 - .../protobuf/internal/encoding/tag/tag.go | 0 - .../protobuf/internal/encoding/text/decode.go | 5 +- - .../internal/encoding/text/decode_number.go | 43 +- - .../internal/encoding/text/decode_string.go | 0 - .../internal/encoding/text/decode_token.go | 0 - .../protobuf/internal/encoding/text/doc.go | 0 - .../protobuf/internal/encoding/text/encode.go | 10 +- - .../protobuf/internal/errors/errors.go | 0 - .../protobuf/internal/errors/is_go112.go | 0 - .../protobuf/internal/errors/is_go113.go | 0 - .../protobuf/internal/filedesc/build.go | 0 - .../protobuf/internal/filedesc/desc.go | 0 - .../protobuf/internal/filedesc/desc_init.go | 0 - .../protobuf/internal/filedesc/desc_lazy.go | 0 - .../protobuf/internal/filedesc/desc_list.go | 0 - .../internal/filedesc/desc_list_gen.go | 0 - .../protobuf/internal/filedesc/placeholder.go | 0 - .../protobuf/internal/filetype/build.go | 0 - .../protobuf/internal/flags/flags.go | 0 - .../internal/flags/proto_legacy_disable.go | 0 - .../internal/flags/proto_legacy_enable.go | 0 - .../protobuf/internal/genid/any_gen.go | 0 - .../protobuf/internal/genid/api_gen.go | 0 - .../protobuf/internal/genid/descriptor_gen.go | 138 +- - .../protobuf/internal/genid/doc.go | 0 - .../protobuf/internal/genid/duration_gen.go | 0 - .../protobuf/internal/genid/empty_gen.go | 0 - .../protobuf/internal/genid/field_mask_gen.go | 0 - .../protobuf/internal/genid/goname.go | 0 - .../protobuf/internal/genid/map_entry.go | 0 - .../internal/genid/source_context_gen.go | 0 - .../protobuf/internal/genid/struct_gen.go | 0 - .../protobuf/internal/genid/timestamp_gen.go | 0 - .../protobuf/internal/genid/type_gen.go | 6 + - .../protobuf/internal/genid/wrappers.go | 0 - .../protobuf/internal/genid/wrappers_gen.go | 0 - .../protobuf/internal/impl/api_export.go | 0 - .../protobuf/internal/impl/checkinit.go | 0 - .../protobuf/internal/impl/codec_extension.go | 0 - .../protobuf/internal/impl/codec_field.go | 0 - .../protobuf/internal/impl/codec_gen.go | 0 - .../protobuf/internal/impl/codec_map.go | 0 - .../protobuf/internal/impl/codec_map_go111.go | 0 - .../protobuf/internal/impl/codec_map_go112.go | 0 - .../protobuf/internal/impl/codec_message.go | 0 - .../internal/impl/codec_messageset.go | 0 - .../protobuf/internal/impl/codec_reflect.go | 0 - .../protobuf/internal/impl/codec_tables.go | 0 - .../protobuf/internal/impl/codec_unsafe.go | 0 - .../protobuf/internal/impl/convert.go | 1 - - .../protobuf/internal/impl/convert_list.go | 0 - .../protobuf/internal/impl/convert_map.go | 0 - .../protobuf/internal/impl/decode.go | 0 - .../protobuf/internal/impl/encode.go | 0 - .../protobuf/internal/impl/enum.go | 0 - .../protobuf/internal/impl/extension.go | 0 - .../protobuf/internal/impl/legacy_enum.go | 0 - .../protobuf/internal/impl/legacy_export.go | 0 - .../internal/impl/legacy_extension.go | 0 - .../protobuf/internal/impl/legacy_file.go | 0 - .../protobuf/internal/impl/legacy_message.go | 0 - .../protobuf/internal/impl/merge.go | 0 - .../protobuf/internal/impl/merge_gen.go | 0 - .../protobuf/internal/impl/message.go | 0 - .../protobuf/internal/impl/message_reflect.go | 0 - .../internal/impl/message_reflect_field.go | 0 - .../internal/impl/message_reflect_gen.go | 0 - .../protobuf/internal/impl/pointer_reflect.go | 0 - .../protobuf/internal/impl/pointer_unsafe.go | 0 - .../protobuf/internal/impl/validate.go | 0 - .../protobuf/internal/impl/weak.go | 0 - .../protobuf/internal/order/order.go | 2 +- - .../protobuf/internal/order/range.go | 0 - .../protobuf/internal/pragma/pragma.go | 0 - .../protobuf/internal/set/ints.go | 0 - .../protobuf/internal/strs/strings.go | 0 - .../protobuf/internal/strs/strings_pure.go | 0 - .../protobuf/internal/strs/strings_unsafe.go | 2 +- - .../protobuf/internal/version/version.go | 4 +- - .../protobuf/proto/checkinit.go | 0 - .../protobuf/proto/decode.go | 0 - .../protobuf/proto/decode_gen.go | 0 - .../google.golang.org/protobuf/proto/doc.go | 9 +- - .../protobuf/proto/encode.go | 0 - .../protobuf/proto/encode_gen.go | 0 - .../google.golang.org/protobuf/proto/equal.go | 172 +- - .../protobuf/proto/extension.go | 0 - .../google.golang.org/protobuf/proto/merge.go | 0 - .../protobuf/proto/messageset.go | 0 - .../google.golang.org/protobuf/proto/proto.go | 0 - .../protobuf/proto/proto_methods.go | 0 - .../protobuf/proto/proto_reflect.go | 0 - .../google.golang.org/protobuf/proto/reset.go | 0 - .../google.golang.org/protobuf/proto/size.go | 10 +- - .../protobuf/proto/size_gen.go | 0 - .../protobuf/proto/wrappers.go | 0 - .../protobuf/reflect/protodesc/desc.go | 0 - .../protobuf/reflect/protodesc/desc_init.go | 0 - .../reflect/protodesc/desc_resolve.go | 0 - .../reflect/protodesc/desc_validate.go | 0 - .../protobuf/reflect/protodesc/proto.go | 0 - .../protobuf/reflect/protoreflect/methods.go | 0 - .../protobuf/reflect/protoreflect/proto.go | 0 - .../protobuf/reflect/protoreflect/source.go | 0 - .../reflect/protoreflect/source_gen.go | 41 + - .../protobuf/reflect/protoreflect/type.go | 0 - .../protobuf/reflect/protoreflect/value.go | 2 +- - .../reflect/protoreflect/value_equal.go | 168 + - .../reflect/protoreflect/value_pure.go | 0 - .../reflect/protoreflect/value_union.go | 4 +- - .../reflect/protoreflect/value_unsafe.go | 0 - .../reflect/protoregistry/registry.go | 2 +- - .../protobuf/runtime/protoiface/legacy.go | 0 - .../protobuf/runtime/protoiface/methods.go | 0 - .../protobuf/runtime/protoimpl/impl.go | 0 - .../protobuf/runtime/protoimpl/version.go | 0 - .../types/descriptorpb/descriptor.pb.go | 1880 +- - .../protobuf/types/known/anypb/any.pb.go | 133 +- - .../types/known/durationpb/duration.pb.go | 63 +- - .../types/known/timestamppb/timestamp.pb.go | 63 +- - vendor/gopkg.in/inf.v0/LICENSE | 0 - vendor/gopkg.in/inf.v0/dec.go | 0 - vendor/gopkg.in/inf.v0/rounder.go | 0 - vendor/gopkg.in/yaml.v2/.travis.yml | 0 - vendor/gopkg.in/yaml.v2/LICENSE | 0 - vendor/gopkg.in/yaml.v2/LICENSE.libyaml | 0 - vendor/gopkg.in/yaml.v2/NOTICE | 0 - vendor/gopkg.in/yaml.v2/README.md | 0 - vendor/gopkg.in/yaml.v2/apic.go | 0 - vendor/gopkg.in/yaml.v2/decode.go | 0 - vendor/gopkg.in/yaml.v2/emitterc.go | 0 - vendor/gopkg.in/yaml.v2/encode.go | 0 - vendor/gopkg.in/yaml.v2/parserc.go | 0 - vendor/gopkg.in/yaml.v2/readerc.go | 0 - vendor/gopkg.in/yaml.v2/resolve.go | 0 - vendor/gopkg.in/yaml.v2/scannerc.go | 0 - vendor/gopkg.in/yaml.v2/sorter.go | 0 - vendor/gopkg.in/yaml.v2/writerc.go | 0 - vendor/gopkg.in/yaml.v2/yaml.go | 0 - vendor/gopkg.in/yaml.v2/yamlh.go | 0 - vendor/gopkg.in/yaml.v2/yamlprivateh.go | 0 - vendor/gopkg.in/yaml.v3/LICENSE | 0 - vendor/gopkg.in/yaml.v3/NOTICE | 0 - vendor/gopkg.in/yaml.v3/README.md | 0 - vendor/gopkg.in/yaml.v3/apic.go | 0 - vendor/gopkg.in/yaml.v3/decode.go | 0 - vendor/gopkg.in/yaml.v3/emitterc.go | 0 - vendor/gopkg.in/yaml.v3/encode.go | 0 - vendor/gopkg.in/yaml.v3/parserc.go | 0 - vendor/gopkg.in/yaml.v3/readerc.go | 0 - vendor/gopkg.in/yaml.v3/resolve.go | 0 - vendor/gopkg.in/yaml.v3/scannerc.go | 0 - vendor/gopkg.in/yaml.v3/sorter.go | 0 - vendor/gopkg.in/yaml.v3/writerc.go | 0 - vendor/gopkg.in/yaml.v3/yaml.go | 0 - vendor/gopkg.in/yaml.v3/yamlh.go | 0 - vendor/gopkg.in/yaml.v3/yamlprivateh.go | 0 - vendor/k8s.io/api/LICENSE | 0 - .../api/admissionregistration/v1/doc.go | 0 - .../admissionregistration/v1/generated.pb.go | 0 - .../admissionregistration/v1/generated.proto | 0 - .../api/admissionregistration/v1/register.go | 0 - .../api/admissionregistration/v1/types.go | 0 - .../v1/types_swagger_doc_generated.go | 0 - .../v1/zz_generated.deepcopy.go | 0 - .../api/admissionregistration/v1beta1/doc.go | 0 - .../v1beta1/generated.pb.go | 0 - .../v1beta1/generated.proto | 0 - .../admissionregistration/v1beta1/register.go | 0 - .../admissionregistration/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - .../api/apiserverinternal/v1alpha1/doc.go | 0 - .../v1alpha1/generated.pb.go | 0 - .../v1alpha1/generated.proto | 0 - .../apiserverinternal/v1alpha1/register.go | 0 - .../api/apiserverinternal/v1alpha1/types.go | 0 - .../v1alpha1/types_swagger_doc_generated.go | 0 - .../v1alpha1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/apps/v1/doc.go | 0 - vendor/k8s.io/api/apps/v1/generated.pb.go | 0 - vendor/k8s.io/api/apps/v1/generated.proto | 0 - vendor/k8s.io/api/apps/v1/register.go | 0 - vendor/k8s.io/api/apps/v1/types.go | 0 - .../apps/v1/types_swagger_doc_generated.go | 0 - .../api/apps/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/apps/v1beta1/doc.go | 0 - .../k8s.io/api/apps/v1beta1/generated.pb.go | 0 - .../k8s.io/api/apps/v1beta1/generated.proto | 0 - vendor/k8s.io/api/apps/v1beta1/register.go | 0 - vendor/k8s.io/api/apps/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../api/apps/v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/apps/v1beta2/doc.go | 0 - .../k8s.io/api/apps/v1beta2/generated.pb.go | 0 - .../k8s.io/api/apps/v1beta2/generated.proto | 0 - vendor/k8s.io/api/apps/v1beta2/register.go | 0 - vendor/k8s.io/api/apps/v1beta2/types.go | 0 - .../v1beta2/types_swagger_doc_generated.go | 0 - .../api/apps/v1beta2/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/authentication/v1/doc.go | 0 - .../api/authentication/v1/generated.pb.go | 0 - .../api/authentication/v1/generated.proto | 0 - .../k8s.io/api/authentication/v1/register.go | 0 - vendor/k8s.io/api/authentication/v1/types.go | 0 - .../v1/types_swagger_doc_generated.go | 0 - .../v1/zz_generated.deepcopy.go | 0 - .../k8s.io/api/authentication/v1beta1/doc.go | 0 - .../authentication/v1beta1/generated.pb.go | 0 - .../authentication/v1beta1/generated.proto | 0 - .../api/authentication/v1beta1/register.go | 0 - .../api/authentication/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/authorization/v1/doc.go | 0 - .../api/authorization/v1/generated.pb.go | 0 - .../api/authorization/v1/generated.proto | 0 - .../k8s.io/api/authorization/v1/register.go | 0 - vendor/k8s.io/api/authorization/v1/types.go | 0 - .../v1/types_swagger_doc_generated.go | 0 - .../authorization/v1/zz_generated.deepcopy.go | 0 - .../k8s.io/api/authorization/v1beta1/doc.go | 0 - .../api/authorization/v1beta1/generated.pb.go | 0 - .../api/authorization/v1beta1/generated.proto | 0 - .../api/authorization/v1beta1/register.go | 0 - .../k8s.io/api/authorization/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/autoscaling/v1/doc.go | 0 - .../k8s.io/api/autoscaling/v1/generated.pb.go | 0 - .../k8s.io/api/autoscaling/v1/generated.proto | 0 - vendor/k8s.io/api/autoscaling/v1/register.go | 0 - vendor/k8s.io/api/autoscaling/v1/types.go | 0 - .../v1/types_swagger_doc_generated.go | 0 - .../autoscaling/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/autoscaling/v2beta1/doc.go | 0 - .../api/autoscaling/v2beta1/generated.pb.go | 0 - .../api/autoscaling/v2beta1/generated.proto | 0 - .../api/autoscaling/v2beta1/register.go | 0 - .../k8s.io/api/autoscaling/v2beta1/types.go | 0 - .../v2beta1/types_swagger_doc_generated.go | 0 - .../v2beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/autoscaling/v2beta2/doc.go | 0 - .../api/autoscaling/v2beta2/generated.pb.go | 0 - .../api/autoscaling/v2beta2/generated.proto | 0 - .../api/autoscaling/v2beta2/register.go | 0 - .../k8s.io/api/autoscaling/v2beta2/types.go | 0 - .../v2beta2/types_swagger_doc_generated.go | 0 - .../v2beta2/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/batch/v1/doc.go | 0 - vendor/k8s.io/api/batch/v1/generated.pb.go | 0 - vendor/k8s.io/api/batch/v1/generated.proto | 0 - vendor/k8s.io/api/batch/v1/register.go | 0 - vendor/k8s.io/api/batch/v1/types.go | 0 - .../batch/v1/types_swagger_doc_generated.go | 0 - .../api/batch/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/batch/v1beta1/doc.go | 0 - .../k8s.io/api/batch/v1beta1/generated.pb.go | 0 - .../k8s.io/api/batch/v1beta1/generated.proto | 0 - vendor/k8s.io/api/batch/v1beta1/register.go | 0 - vendor/k8s.io/api/batch/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../batch/v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/batch/v2alpha1/doc.go | 0 - .../k8s.io/api/batch/v2alpha1/generated.pb.go | 0 - .../k8s.io/api/batch/v2alpha1/generated.proto | 0 - vendor/k8s.io/api/batch/v2alpha1/register.go | 0 - vendor/k8s.io/api/batch/v2alpha1/types.go | 0 - .../v2alpha1/types_swagger_doc_generated.go | 0 - .../batch/v2alpha1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/certificates/v1/doc.go | 0 - .../api/certificates/v1/generated.pb.go | 0 - .../api/certificates/v1/generated.proto | 0 - vendor/k8s.io/api/certificates/v1/register.go | 0 - vendor/k8s.io/api/certificates/v1/types.go | 0 - .../v1/types_swagger_doc_generated.go | 0 - .../certificates/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/certificates/v1beta1/doc.go | 0 - .../api/certificates/v1beta1/generated.pb.go | 0 - .../api/certificates/v1beta1/generated.proto | 0 - .../api/certificates/v1beta1/register.go | 0 - .../k8s.io/api/certificates/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/coordination/v1/doc.go | 0 - .../api/coordination/v1/generated.pb.go | 0 - .../api/coordination/v1/generated.proto | 0 - vendor/k8s.io/api/coordination/v1/register.go | 0 - vendor/k8s.io/api/coordination/v1/types.go | 0 - .../v1/types_swagger_doc_generated.go | 0 - .../coordination/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/coordination/v1beta1/doc.go | 0 - .../api/coordination/v1beta1/generated.pb.go | 0 - .../api/coordination/v1beta1/generated.proto | 0 - .../api/coordination/v1beta1/register.go | 0 - .../k8s.io/api/coordination/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - .../api/core/v1/annotation_key_constants.go | 0 - vendor/k8s.io/api/core/v1/doc.go | 0 - vendor/k8s.io/api/core/v1/generated.pb.go | 0 - vendor/k8s.io/api/core/v1/generated.proto | 0 - vendor/k8s.io/api/core/v1/lifecycle.go | 0 - vendor/k8s.io/api/core/v1/objectreference.go | 0 - vendor/k8s.io/api/core/v1/register.go | 0 - vendor/k8s.io/api/core/v1/resource.go | 0 - vendor/k8s.io/api/core/v1/taint.go | 0 - vendor/k8s.io/api/core/v1/toleration.go | 0 - vendor/k8s.io/api/core/v1/types.go | 0 - .../core/v1/types_swagger_doc_generated.go | 0 - .../k8s.io/api/core/v1/well_known_labels.go | 0 - .../k8s.io/api/core/v1/well_known_taints.go | 0 - .../api/core/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/discovery/v1alpha1/doc.go | 0 - .../api/discovery/v1alpha1/generated.pb.go | 0 - .../api/discovery/v1alpha1/generated.proto | 0 - .../k8s.io/api/discovery/v1alpha1/register.go | 0 - vendor/k8s.io/api/discovery/v1alpha1/types.go | 0 - .../v1alpha1/types_swagger_doc_generated.go | 0 - .../discovery/v1alpha1/well_known_labels.go | 0 - .../v1alpha1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/discovery/v1beta1/doc.go | 0 - .../api/discovery/v1beta1/generated.pb.go | 0 - .../api/discovery/v1beta1/generated.proto | 0 - .../k8s.io/api/discovery/v1beta1/register.go | 0 - vendor/k8s.io/api/discovery/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../discovery/v1beta1/well_known_labels.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/events/v1/doc.go | 0 - vendor/k8s.io/api/events/v1/generated.pb.go | 0 - vendor/k8s.io/api/events/v1/generated.proto | 0 - vendor/k8s.io/api/events/v1/register.go | 0 - vendor/k8s.io/api/events/v1/types.go | 0 - .../events/v1/types_swagger_doc_generated.go | 0 - .../api/events/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/events/v1beta1/doc.go | 0 - .../k8s.io/api/events/v1beta1/generated.pb.go | 0 - .../k8s.io/api/events/v1beta1/generated.proto | 0 - vendor/k8s.io/api/events/v1beta1/register.go | 0 - vendor/k8s.io/api/events/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../events/v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/extensions/v1beta1/doc.go | 0 - .../api/extensions/v1beta1/generated.pb.go | 0 - .../api/extensions/v1beta1/generated.proto | 0 - .../k8s.io/api/extensions/v1beta1/register.go | 0 - vendor/k8s.io/api/extensions/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go | 0 - .../api/flowcontrol/v1alpha1/generated.pb.go | 0 - .../api/flowcontrol/v1alpha1/generated.proto | 0 - .../api/flowcontrol/v1alpha1/register.go | 0 - .../k8s.io/api/flowcontrol/v1alpha1/types.go | 0 - .../v1alpha1/types_swagger_doc_generated.go | 0 - .../v1alpha1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/flowcontrol/v1beta1/doc.go | 0 - .../api/flowcontrol/v1beta1/generated.pb.go | 0 - .../api/flowcontrol/v1beta1/generated.proto | 0 - .../api/flowcontrol/v1beta1/register.go | 0 - .../k8s.io/api/flowcontrol/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/networking/v1/doc.go | 0 - .../k8s.io/api/networking/v1/generated.pb.go | 0 - .../k8s.io/api/networking/v1/generated.proto | 0 - vendor/k8s.io/api/networking/v1/register.go | 0 - vendor/k8s.io/api/networking/v1/types.go | 0 - .../v1/types_swagger_doc_generated.go | 0 - .../networking/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/networking/v1beta1/doc.go | 0 - .../api/networking/v1beta1/generated.pb.go | 0 - .../api/networking/v1beta1/generated.proto | 0 - .../k8s.io/api/networking/v1beta1/register.go | 0 - vendor/k8s.io/api/networking/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/well_known_annotations.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/node/v1/doc.go | 0 - vendor/k8s.io/api/node/v1/generated.pb.go | 0 - vendor/k8s.io/api/node/v1/generated.proto | 0 - vendor/k8s.io/api/node/v1/register.go | 0 - vendor/k8s.io/api/node/v1/types.go | 0 - .../node/v1/types_swagger_doc_generated.go | 0 - .../api/node/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/node/v1alpha1/doc.go | 0 - .../k8s.io/api/node/v1alpha1/generated.pb.go | 0 - .../k8s.io/api/node/v1alpha1/generated.proto | 0 - vendor/k8s.io/api/node/v1alpha1/register.go | 0 - vendor/k8s.io/api/node/v1alpha1/types.go | 0 - .../v1alpha1/types_swagger_doc_generated.go | 0 - .../node/v1alpha1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/node/v1beta1/doc.go | 0 - .../k8s.io/api/node/v1beta1/generated.pb.go | 0 - .../k8s.io/api/node/v1beta1/generated.proto | 0 - vendor/k8s.io/api/node/v1beta1/register.go | 0 - vendor/k8s.io/api/node/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../api/node/v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/policy/v1beta1/doc.go | 0 - .../k8s.io/api/policy/v1beta1/generated.pb.go | 0 - .../k8s.io/api/policy/v1beta1/generated.proto | 0 - vendor/k8s.io/api/policy/v1beta1/register.go | 0 - vendor/k8s.io/api/policy/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../policy/v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/rbac/v1/doc.go | 0 - vendor/k8s.io/api/rbac/v1/generated.pb.go | 0 - vendor/k8s.io/api/rbac/v1/generated.proto | 0 - vendor/k8s.io/api/rbac/v1/register.go | 0 - vendor/k8s.io/api/rbac/v1/types.go | 0 - .../rbac/v1/types_swagger_doc_generated.go | 0 - .../api/rbac/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/rbac/v1alpha1/doc.go | 0 - .../k8s.io/api/rbac/v1alpha1/generated.pb.go | 0 - .../k8s.io/api/rbac/v1alpha1/generated.proto | 0 - vendor/k8s.io/api/rbac/v1alpha1/register.go | 0 - vendor/k8s.io/api/rbac/v1alpha1/types.go | 0 - .../v1alpha1/types_swagger_doc_generated.go | 0 - .../rbac/v1alpha1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/rbac/v1beta1/doc.go | 0 - .../k8s.io/api/rbac/v1beta1/generated.pb.go | 0 - .../k8s.io/api/rbac/v1beta1/generated.proto | 0 - vendor/k8s.io/api/rbac/v1beta1/register.go | 0 - vendor/k8s.io/api/rbac/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../api/rbac/v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/scheduling/v1/doc.go | 0 - .../k8s.io/api/scheduling/v1/generated.pb.go | 0 - .../k8s.io/api/scheduling/v1/generated.proto | 0 - vendor/k8s.io/api/scheduling/v1/register.go | 0 - vendor/k8s.io/api/scheduling/v1/types.go | 0 - .../v1/types_swagger_doc_generated.go | 0 - .../scheduling/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/scheduling/v1alpha1/doc.go | 0 - .../api/scheduling/v1alpha1/generated.pb.go | 0 - .../api/scheduling/v1alpha1/generated.proto | 0 - .../api/scheduling/v1alpha1/register.go | 0 - .../k8s.io/api/scheduling/v1alpha1/types.go | 0 - .../v1alpha1/types_swagger_doc_generated.go | 0 - .../v1alpha1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/scheduling/v1beta1/doc.go | 0 - .../api/scheduling/v1beta1/generated.pb.go | 0 - .../api/scheduling/v1beta1/generated.proto | 0 - .../k8s.io/api/scheduling/v1beta1/register.go | 0 - vendor/k8s.io/api/scheduling/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/api/storage/v1/doc.go | 0 - vendor/k8s.io/api/storage/v1/generated.pb.go | 0 - vendor/k8s.io/api/storage/v1/generated.proto | 0 - vendor/k8s.io/api/storage/v1/register.go | 0 - vendor/k8s.io/api/storage/v1/types.go | 0 - .../storage/v1/types_swagger_doc_generated.go | 0 - .../api/storage/v1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/storage/v1alpha1/doc.go | 0 - .../api/storage/v1alpha1/generated.pb.go | 0 - .../api/storage/v1alpha1/generated.proto | 0 - .../k8s.io/api/storage/v1alpha1/register.go | 0 - vendor/k8s.io/api/storage/v1alpha1/types.go | 0 - .../v1alpha1/types_swagger_doc_generated.go | 0 - .../storage/v1alpha1/zz_generated.deepcopy.go | 0 - vendor/k8s.io/api/storage/v1beta1/doc.go | 0 - .../api/storage/v1beta1/generated.pb.go | 0 - .../api/storage/v1beta1/generated.proto | 0 - vendor/k8s.io/api/storage/v1beta1/register.go | 0 - vendor/k8s.io/api/storage/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../storage/v1beta1/zz_generated.deepcopy.go | 0 - .../zz_generated.prerelease-lifecycle.go | 0 - vendor/k8s.io/apimachinery/LICENSE | 0 - .../k8s.io/apimachinery/pkg/api/errors/OWNERS | 0 - .../k8s.io/apimachinery/pkg/api/errors/doc.go | 0 - .../apimachinery/pkg/api/errors/errors.go | 0 - .../k8s.io/apimachinery/pkg/api/meta/OWNERS | 0 - .../apimachinery/pkg/api/meta/conditions.go | 0 - .../k8s.io/apimachinery/pkg/api/meta/doc.go | 0 - .../apimachinery/pkg/api/meta/errors.go | 0 - .../pkg/api/meta/firsthit_restmapper.go | 0 - .../k8s.io/apimachinery/pkg/api/meta/help.go | 0 - .../apimachinery/pkg/api/meta/interfaces.go | 0 - .../k8s.io/apimachinery/pkg/api/meta/lazy.go | 0 - .../k8s.io/apimachinery/pkg/api/meta/meta.go | 0 - .../pkg/api/meta/multirestmapper.go | 0 - .../apimachinery/pkg/api/meta/priority.go | 0 - .../apimachinery/pkg/api/meta/restmapper.go | 0 - .../apimachinery/pkg/api/resource/OWNERS | 0 - .../apimachinery/pkg/api/resource/amount.go | 0 - .../pkg/api/resource/generated.pb.go | 0 - .../pkg/api/resource/generated.proto | 0 - .../apimachinery/pkg/api/resource/math.go | 0 - .../apimachinery/pkg/api/resource/quantity.go | 0 - .../pkg/api/resource/quantity_proto.go | 0 - .../pkg/api/resource/scale_int.go | 0 - .../apimachinery/pkg/api/resource/suffix.go | 0 - .../pkg/api/resource/zz_generated.deepcopy.go | 0 - .../pkg/apis/meta/internalversion/doc.go | 0 - .../pkg/apis/meta/internalversion/register.go | 0 - .../pkg/apis/meta/internalversion/types.go | 0 - .../zz_generated.conversion.go | 0 - .../internalversion/zz_generated.deepcopy.go | 0 - .../apimachinery/pkg/apis/meta/v1/OWNERS | 0 - .../pkg/apis/meta/v1/controller_ref.go | 0 - .../pkg/apis/meta/v1/conversion.go | 0 - .../apimachinery/pkg/apis/meta/v1/deepcopy.go | 0 - .../apimachinery/pkg/apis/meta/v1/doc.go | 0 - .../apimachinery/pkg/apis/meta/v1/duration.go | 0 - .../pkg/apis/meta/v1/generated.pb.go | 0 - .../pkg/apis/meta/v1/generated.proto | 0 - .../pkg/apis/meta/v1/group_version.go | 0 - .../apimachinery/pkg/apis/meta/v1/helpers.go | 0 - .../apimachinery/pkg/apis/meta/v1/labels.go | 0 - .../apimachinery/pkg/apis/meta/v1/meta.go | 0 - .../pkg/apis/meta/v1/micro_time.go | 0 - .../pkg/apis/meta/v1/micro_time_fuzz.go | 0 - .../pkg/apis/meta/v1/micro_time_proto.go | 0 - .../apimachinery/pkg/apis/meta/v1/register.go | 0 - .../apimachinery/pkg/apis/meta/v1/time.go | 0 - .../pkg/apis/meta/v1/time_fuzz.go | 0 - .../pkg/apis/meta/v1/time_proto.go | 0 - .../apimachinery/pkg/apis/meta/v1/types.go | 0 - .../meta/v1/types_swagger_doc_generated.go | 0 - .../pkg/apis/meta/v1/unstructured/helpers.go | 0 - .../apis/meta/v1/unstructured/unstructured.go | 0 - .../meta/v1/unstructured/unstructured_list.go | 0 - .../v1/unstructured/zz_generated.deepcopy.go | 0 - .../apimachinery/pkg/apis/meta/v1/watch.go | 0 - .../apis/meta/v1/zz_generated.conversion.go | 0 - .../pkg/apis/meta/v1/zz_generated.deepcopy.go | 0 - .../pkg/apis/meta/v1/zz_generated.defaults.go | 0 - .../pkg/apis/meta/v1beta1/conversion.go | 0 - .../pkg/apis/meta/v1beta1/deepcopy.go | 0 - .../apimachinery/pkg/apis/meta/v1beta1/doc.go | 0 - .../pkg/apis/meta/v1beta1/generated.pb.go | 0 - .../pkg/apis/meta/v1beta1/generated.proto | 0 - .../pkg/apis/meta/v1beta1/register.go | 0 - .../pkg/apis/meta/v1beta1/types.go | 0 - .../v1beta1/types_swagger_doc_generated.go | 0 - .../meta/v1beta1/zz_generated.deepcopy.go | 0 - .../meta/v1beta1/zz_generated.defaults.go | 0 - .../apimachinery/pkg/conversion/converter.go | 0 - .../apimachinery/pkg/conversion/deep_equal.go | 0 - .../k8s.io/apimachinery/pkg/conversion/doc.go | 0 - .../apimachinery/pkg/conversion/helper.go | 0 - .../pkg/conversion/queryparams/convert.go | 0 - .../pkg/conversion/queryparams/doc.go | 0 - vendor/k8s.io/apimachinery/pkg/fields/doc.go | 0 - .../k8s.io/apimachinery/pkg/fields/fields.go | 0 - .../apimachinery/pkg/fields/requirements.go | 0 - .../apimachinery/pkg/fields/selector.go | 0 - vendor/k8s.io/apimachinery/pkg/labels/doc.go | 0 - .../k8s.io/apimachinery/pkg/labels/labels.go | 0 - .../apimachinery/pkg/labels/selector.go | 0 - .../pkg/labels/zz_generated.deepcopy.go | 0 - .../k8s.io/apimachinery/pkg/runtime/codec.go | 0 - .../apimachinery/pkg/runtime/codec_check.go | 0 - .../apimachinery/pkg/runtime/conversion.go | 0 - .../apimachinery/pkg/runtime/converter.go | 0 - vendor/k8s.io/apimachinery/pkg/runtime/doc.go | 0 - .../apimachinery/pkg/runtime/embedded.go | 0 - .../k8s.io/apimachinery/pkg/runtime/error.go | 0 - .../apimachinery/pkg/runtime/extension.go | 0 - .../apimachinery/pkg/runtime/generated.pb.go | 0 - .../apimachinery/pkg/runtime/generated.proto | 0 - .../k8s.io/apimachinery/pkg/runtime/helper.go | 0 - .../apimachinery/pkg/runtime/interfaces.go | 0 - .../k8s.io/apimachinery/pkg/runtime/mapper.go | 0 - .../apimachinery/pkg/runtime/negotiate.go | 0 - .../apimachinery/pkg/runtime/register.go | 0 - .../pkg/runtime/schema/generated.pb.go | 0 - .../pkg/runtime/schema/generated.proto | 0 - .../pkg/runtime/schema/group_version.go | 0 - .../pkg/runtime/schema/interfaces.go | 0 - .../k8s.io/apimachinery/pkg/runtime/scheme.go | 0 - .../pkg/runtime/scheme_builder.go | 0 - .../pkg/runtime/serializer/codec_factory.go | 0 - .../pkg/runtime/serializer/json/json.go | 0 - .../pkg/runtime/serializer/json/meta.go | 0 - .../runtime/serializer/negotiated_codec.go | 0 - .../pkg/runtime/serializer/protobuf/doc.go | 0 - .../runtime/serializer/protobuf/protobuf.go | 0 - .../serializer/recognizer/recognizer.go | 0 - .../runtime/serializer/streaming/streaming.go | 0 - .../serializer/versioning/versioning.go | 0 - .../pkg/runtime/swagger_doc_generator.go | 0 - .../k8s.io/apimachinery/pkg/runtime/types.go | 0 - .../apimachinery/pkg/runtime/types_proto.go | 0 - .../pkg/runtime/zz_generated.deepcopy.go | 0 - .../apimachinery/pkg/selection/operator.go | 0 - vendor/k8s.io/apimachinery/pkg/types/doc.go | 0 - .../apimachinery/pkg/types/namespacedname.go | 0 - .../k8s.io/apimachinery/pkg/types/nodename.go | 0 - vendor/k8s.io/apimachinery/pkg/types/patch.go | 0 - vendor/k8s.io/apimachinery/pkg/types/uid.go | 0 - .../apimachinery/pkg/util/cache/expiring.go | 0 - .../pkg/util/cache/lruexpirecache.go | 0 - .../apimachinery/pkg/util/clock/clock.go | 0 - .../k8s.io/apimachinery/pkg/util/diff/diff.go | 0 - .../apimachinery/pkg/util/errors/doc.go | 0 - .../apimachinery/pkg/util/errors/errors.go | 0 - .../apimachinery/pkg/util/framer/framer.go | 0 - .../pkg/util/intstr/generated.pb.go | 0 - .../pkg/util/intstr/generated.proto | 0 - .../pkg/util/intstr/instr_fuzz.go | 0 - .../apimachinery/pkg/util/intstr/intstr.go | 0 - .../k8s.io/apimachinery/pkg/util/json/json.go | 0 - .../pkg/util/naming/from_stack.go | 0 - .../k8s.io/apimachinery/pkg/util/net/http.go | 0 - .../apimachinery/pkg/util/net/interface.go | 0 - .../apimachinery/pkg/util/net/port_range.go | 0 - .../apimachinery/pkg/util/net/port_split.go | 0 - .../k8s.io/apimachinery/pkg/util/net/util.go | 0 - .../apimachinery/pkg/util/runtime/runtime.go | 0 - .../k8s.io/apimachinery/pkg/util/sets/byte.go | 0 - .../k8s.io/apimachinery/pkg/util/sets/doc.go | 0 - .../apimachinery/pkg/util/sets/empty.go | 0 - .../k8s.io/apimachinery/pkg/util/sets/int.go | 0 - .../apimachinery/pkg/util/sets/int32.go | 0 - .../apimachinery/pkg/util/sets/int64.go | 0 - .../apimachinery/pkg/util/sets/string.go | 0 - .../pkg/util/validation/field/errors.go | 0 - .../pkg/util/validation/field/path.go | 0 - .../pkg/util/validation/validation.go | 0 - .../k8s.io/apimachinery/pkg/util/wait/doc.go | 0 - .../k8s.io/apimachinery/pkg/util/wait/wait.go | 0 - .../apimachinery/pkg/util/yaml/decoder.go | 0 - vendor/k8s.io/apimachinery/pkg/version/doc.go | 0 - .../apimachinery/pkg/version/helpers.go | 0 - .../k8s.io/apimachinery/pkg/version/types.go | 0 - vendor/k8s.io/apimachinery/pkg/watch/doc.go | 0 - .../k8s.io/apimachinery/pkg/watch/filter.go | 0 - vendor/k8s.io/apimachinery/pkg/watch/mux.go | 0 - .../apimachinery/pkg/watch/streamwatcher.go | 0 - vendor/k8s.io/apimachinery/pkg/watch/watch.go | 0 - .../pkg/watch/zz_generated.deepcopy.go | 0 - .../forked/golang/reflect/deep_equal.go | 0 - vendor/k8s.io/client-go/LICENSE | 0 - .../client-go/discovery/discovery_client.go | 0 - vendor/k8s.io/client-go/discovery/doc.go | 0 - vendor/k8s.io/client-go/discovery/helper.go | 0 - .../admissionregistration/interface.go | 0 - .../admissionregistration/v1/interface.go | 0 - .../v1/mutatingwebhookconfiguration.go | 0 - .../v1/validatingwebhookconfiguration.go | 0 - .../v1beta1/interface.go | 0 - .../v1beta1/mutatingwebhookconfiguration.go | 0 - .../v1beta1/validatingwebhookconfiguration.go | 0 - .../informers/apiserverinternal/interface.go | 0 - .../apiserverinternal/v1alpha1/interface.go | 0 - .../v1alpha1/storageversion.go | 0 - .../client-go/informers/apps/interface.go | 0 - .../informers/apps/v1/controllerrevision.go | 0 - .../client-go/informers/apps/v1/daemonset.go | 0 - .../client-go/informers/apps/v1/deployment.go | 0 - .../client-go/informers/apps/v1/interface.go | 0 - .../client-go/informers/apps/v1/replicaset.go | 0 - .../informers/apps/v1/statefulset.go | 0 - .../apps/v1beta1/controllerrevision.go | 0 - .../informers/apps/v1beta1/deployment.go | 0 - .../informers/apps/v1beta1/interface.go | 0 - .../informers/apps/v1beta1/statefulset.go | 0 - .../apps/v1beta2/controllerrevision.go | 0 - .../informers/apps/v1beta2/daemonset.go | 0 - .../informers/apps/v1beta2/deployment.go | 0 - .../informers/apps/v1beta2/interface.go | 0 - .../informers/apps/v1beta2/replicaset.go | 0 - .../informers/apps/v1beta2/statefulset.go | 0 - .../informers/autoscaling/interface.go | 0 - .../autoscaling/v1/horizontalpodautoscaler.go | 0 - .../informers/autoscaling/v1/interface.go | 0 - .../v2beta1/horizontalpodautoscaler.go | 0 - .../autoscaling/v2beta1/interface.go | 0 - .../v2beta2/horizontalpodautoscaler.go | 0 - .../autoscaling/v2beta2/interface.go | 0 - .../client-go/informers/batch/interface.go | 0 - .../client-go/informers/batch/v1/interface.go | 0 - .../client-go/informers/batch/v1/job.go | 0 - .../informers/batch/v1beta1/cronjob.go | 0 - .../informers/batch/v1beta1/interface.go | 0 - .../informers/batch/v2alpha1/cronjob.go | 0 - .../informers/batch/v2alpha1/interface.go | 0 - .../informers/certificates/interface.go | 0 - .../v1/certificatesigningrequest.go | 0 - .../informers/certificates/v1/interface.go | 0 - .../v1beta1/certificatesigningrequest.go | 0 - .../certificates/v1beta1/interface.go | 0 - .../informers/coordination/interface.go | 0 - .../informers/coordination/v1/interface.go | 0 - .../informers/coordination/v1/lease.go | 0 - .../coordination/v1beta1/interface.go | 0 - .../informers/coordination/v1beta1/lease.go | 0 - .../client-go/informers/core/interface.go | 0 - .../informers/core/v1/componentstatus.go | 0 - .../client-go/informers/core/v1/configmap.go | 0 - .../client-go/informers/core/v1/endpoints.go | 0 - .../client-go/informers/core/v1/event.go | 0 - .../client-go/informers/core/v1/interface.go | 0 - .../client-go/informers/core/v1/limitrange.go | 0 - .../client-go/informers/core/v1/namespace.go | 0 - .../client-go/informers/core/v1/node.go | 0 - .../informers/core/v1/persistentvolume.go | 0 - .../core/v1/persistentvolumeclaim.go | 0 - .../k8s.io/client-go/informers/core/v1/pod.go | 0 - .../informers/core/v1/podtemplate.go | 0 - .../core/v1/replicationcontroller.go | 0 - .../informers/core/v1/resourcequota.go | 0 - .../client-go/informers/core/v1/secret.go | 0 - .../client-go/informers/core/v1/service.go | 0 - .../informers/core/v1/serviceaccount.go | 0 - .../informers/discovery/interface.go | 0 - .../discovery/v1alpha1/endpointslice.go | 0 - .../informers/discovery/v1alpha1/interface.go | 0 - .../discovery/v1beta1/endpointslice.go | 0 - .../informers/discovery/v1beta1/interface.go | 0 - .../client-go/informers/events/interface.go | 0 - .../client-go/informers/events/v1/event.go | 0 - .../informers/events/v1/interface.go | 0 - .../informers/events/v1beta1/event.go | 0 - .../informers/events/v1beta1/interface.go | 0 - .../informers/extensions/interface.go | 0 - .../informers/extensions/v1beta1/daemonset.go | 0 - .../extensions/v1beta1/deployment.go | 0 - .../informers/extensions/v1beta1/ingress.go | 0 - .../informers/extensions/v1beta1/interface.go | 0 - .../extensions/v1beta1/networkpolicy.go | 0 - .../extensions/v1beta1/podsecuritypolicy.go | 0 - .../extensions/v1beta1/replicaset.go | 0 - vendor/k8s.io/client-go/informers/factory.go | 0 - .../informers/flowcontrol/interface.go | 0 - .../flowcontrol/v1alpha1/flowschema.go | 0 - .../flowcontrol/v1alpha1/interface.go | 0 - .../v1alpha1/prioritylevelconfiguration.go | 0 - .../flowcontrol/v1beta1/flowschema.go | 0 - .../flowcontrol/v1beta1/interface.go | 0 - .../v1beta1/prioritylevelconfiguration.go | 0 - vendor/k8s.io/client-go/informers/generic.go | 0 - .../internalinterfaces/factory_interfaces.go | 0 - .../informers/networking/interface.go | 0 - .../informers/networking/v1/ingress.go | 0 - .../informers/networking/v1/ingressclass.go | 0 - .../informers/networking/v1/interface.go | 0 - .../informers/networking/v1/networkpolicy.go | 0 - .../informers/networking/v1beta1/ingress.go | 0 - .../networking/v1beta1/ingressclass.go | 0 - .../informers/networking/v1beta1/interface.go | 0 - .../client-go/informers/node/interface.go | 0 - .../client-go/informers/node/v1/interface.go | 0 - .../informers/node/v1/runtimeclass.go | 0 - .../informers/node/v1alpha1/interface.go | 0 - .../informers/node/v1alpha1/runtimeclass.go | 0 - .../informers/node/v1beta1/interface.go | 0 - .../informers/node/v1beta1/runtimeclass.go | 0 - .../client-go/informers/policy/interface.go | 0 - .../informers/policy/v1beta1/interface.go | 0 - .../policy/v1beta1/poddisruptionbudget.go | 0 - .../policy/v1beta1/podsecuritypolicy.go | 0 - .../client-go/informers/rbac/interface.go | 0 - .../informers/rbac/v1/clusterrole.go | 0 - .../informers/rbac/v1/clusterrolebinding.go | 0 - .../client-go/informers/rbac/v1/interface.go | 0 - .../client-go/informers/rbac/v1/role.go | 0 - .../informers/rbac/v1/rolebinding.go | 0 - .../informers/rbac/v1alpha1/clusterrole.go | 0 - .../rbac/v1alpha1/clusterrolebinding.go | 0 - .../informers/rbac/v1alpha1/interface.go | 0 - .../client-go/informers/rbac/v1alpha1/role.go | 0 - .../informers/rbac/v1alpha1/rolebinding.go | 0 - .../informers/rbac/v1beta1/clusterrole.go | 0 - .../rbac/v1beta1/clusterrolebinding.go | 0 - .../informers/rbac/v1beta1/interface.go | 0 - .../client-go/informers/rbac/v1beta1/role.go | 0 - .../informers/rbac/v1beta1/rolebinding.go | 0 - .../informers/scheduling/interface.go | 0 - .../informers/scheduling/v1/interface.go | 0 - .../informers/scheduling/v1/priorityclass.go | 0 - .../scheduling/v1alpha1/interface.go | 0 - .../scheduling/v1alpha1/priorityclass.go | 0 - .../informers/scheduling/v1beta1/interface.go | 0 - .../scheduling/v1beta1/priorityclass.go | 0 - .../client-go/informers/storage/interface.go | 0 - .../informers/storage/v1/csidriver.go | 0 - .../client-go/informers/storage/v1/csinode.go | 0 - .../informers/storage/v1/interface.go | 0 - .../informers/storage/v1/storageclass.go | 0 - .../informers/storage/v1/volumeattachment.go | 0 - .../storage/v1alpha1/csistoragecapacity.go | 0 - .../informers/storage/v1alpha1/interface.go | 0 - .../storage/v1alpha1/volumeattachment.go | 0 - .../informers/storage/v1beta1/csidriver.go | 0 - .../informers/storage/v1beta1/csinode.go | 0 - .../informers/storage/v1beta1/interface.go | 0 - .../informers/storage/v1beta1/storageclass.go | 0 - .../storage/v1beta1/volumeattachment.go | 0 - .../k8s.io/client-go/kubernetes/clientset.go | 0 - vendor/k8s.io/client-go/kubernetes/doc.go | 0 - vendor/k8s.io/client-go/kubernetes/import.go | 0 - .../k8s.io/client-go/kubernetes/scheme/doc.go | 0 - .../client-go/kubernetes/scheme/register.go | 0 - .../v1/admissionregistration_client.go | 0 - .../typed/admissionregistration/v1/doc.go | 0 - .../v1/generated_expansion.go | 0 - .../v1/mutatingwebhookconfiguration.go | 0 - .../v1/validatingwebhookconfiguration.go | 0 - .../v1beta1/admissionregistration_client.go | 0 - .../admissionregistration/v1beta1/doc.go | 0 - .../v1beta1/generated_expansion.go | 0 - .../v1beta1/mutatingwebhookconfiguration.go | 0 - .../v1beta1/validatingwebhookconfiguration.go | 0 - .../v1alpha1/apiserverinternal_client.go | 0 - .../typed/apiserverinternal/v1alpha1/doc.go | 0 - .../v1alpha1/generated_expansion.go | 0 - .../v1alpha1/storageversion.go | 0 - .../kubernetes/typed/apps/v1/apps_client.go | 0 - .../typed/apps/v1/controllerrevision.go | 0 - .../kubernetes/typed/apps/v1/daemonset.go | 0 - .../kubernetes/typed/apps/v1/deployment.go | 0 - .../client-go/kubernetes/typed/apps/v1/doc.go | 0 - .../typed/apps/v1/generated_expansion.go | 0 - .../kubernetes/typed/apps/v1/replicaset.go | 0 - .../kubernetes/typed/apps/v1/statefulset.go | 0 - .../typed/apps/v1beta1/apps_client.go | 0 - .../typed/apps/v1beta1/controllerrevision.go | 0 - .../typed/apps/v1beta1/deployment.go | 0 - .../kubernetes/typed/apps/v1beta1/doc.go | 0 - .../typed/apps/v1beta1/generated_expansion.go | 0 - .../typed/apps/v1beta1/statefulset.go | 0 - .../typed/apps/v1beta2/apps_client.go | 0 - .../typed/apps/v1beta2/controllerrevision.go | 0 - .../typed/apps/v1beta2/daemonset.go | 0 - .../typed/apps/v1beta2/deployment.go | 0 - .../kubernetes/typed/apps/v1beta2/doc.go | 0 - .../typed/apps/v1beta2/generated_expansion.go | 0 - .../typed/apps/v1beta2/replicaset.go | 0 - .../typed/apps/v1beta2/statefulset.go | 0 - .../v1/authentication_client.go | 0 - .../kubernetes/typed/authentication/v1/doc.go | 0 - .../authentication/v1/generated_expansion.go | 0 - .../typed/authentication/v1/tokenreview.go | 0 - .../v1beta1/authentication_client.go | 0 - .../typed/authentication/v1beta1/doc.go | 0 - .../v1beta1/generated_expansion.go | 0 - .../authentication/v1beta1/tokenreview.go | 0 - .../authorization/v1/authorization_client.go | 0 - .../kubernetes/typed/authorization/v1/doc.go | 0 - .../authorization/v1/generated_expansion.go | 0 - .../v1/localsubjectaccessreview.go | 0 - .../v1/selfsubjectaccessreview.go | 0 - .../v1/selfsubjectrulesreview.go | 0 - .../authorization/v1/subjectaccessreview.go | 0 - .../v1beta1/authorization_client.go | 0 - .../typed/authorization/v1beta1/doc.go | 0 - .../v1beta1/generated_expansion.go | 0 - .../v1beta1/localsubjectaccessreview.go | 0 - .../v1beta1/selfsubjectaccessreview.go | 0 - .../v1beta1/selfsubjectrulesreview.go | 0 - .../v1beta1/subjectaccessreview.go | 0 - .../autoscaling/v1/autoscaling_client.go | 0 - .../kubernetes/typed/autoscaling/v1/doc.go | 0 - .../autoscaling/v1/generated_expansion.go | 0 - .../autoscaling/v1/horizontalpodautoscaler.go | 0 - .../autoscaling/v2beta1/autoscaling_client.go | 0 - .../typed/autoscaling/v2beta1/doc.go | 0 - .../v2beta1/generated_expansion.go | 0 - .../v2beta1/horizontalpodautoscaler.go | 0 - .../autoscaling/v2beta2/autoscaling_client.go | 0 - .../typed/autoscaling/v2beta2/doc.go | 0 - .../v2beta2/generated_expansion.go | 0 - .../v2beta2/horizontalpodautoscaler.go | 0 - .../kubernetes/typed/batch/v1/batch_client.go | 0 - .../kubernetes/typed/batch/v1/doc.go | 0 - .../typed/batch/v1/generated_expansion.go | 0 - .../kubernetes/typed/batch/v1/job.go | 0 - .../typed/batch/v1beta1/batch_client.go | 0 - .../kubernetes/typed/batch/v1beta1/cronjob.go | 0 - .../kubernetes/typed/batch/v1beta1/doc.go | 0 - .../batch/v1beta1/generated_expansion.go | 0 - .../typed/batch/v2alpha1/batch_client.go | 0 - .../typed/batch/v2alpha1/cronjob.go | 0 - .../kubernetes/typed/batch/v2alpha1/doc.go | 0 - .../batch/v2alpha1/generated_expansion.go | 0 - .../certificates/v1/certificates_client.go | 0 - .../v1/certificatesigningrequest.go | 0 - .../kubernetes/typed/certificates/v1/doc.go | 0 - .../certificates/v1/generated_expansion.go | 0 - .../v1beta1/certificates_client.go | 0 - .../v1beta1/certificatesigningrequest.go | 0 - .../certificatesigningrequest_expansion.go | 0 - .../typed/certificates/v1beta1/doc.go | 0 - .../v1beta1/generated_expansion.go | 0 - .../coordination/v1/coordination_client.go | 0 - .../kubernetes/typed/coordination/v1/doc.go | 0 - .../coordination/v1/generated_expansion.go | 0 - .../kubernetes/typed/coordination/v1/lease.go | 0 - .../v1beta1/coordination_client.go | 0 - .../typed/coordination/v1beta1/doc.go | 0 - .../v1beta1/generated_expansion.go | 0 - .../typed/coordination/v1beta1/lease.go | 0 - .../typed/core/v1/componentstatus.go | 0 - .../kubernetes/typed/core/v1/configmap.go | 0 - .../kubernetes/typed/core/v1/core_client.go | 0 - .../client-go/kubernetes/typed/core/v1/doc.go | 0 - .../kubernetes/typed/core/v1/endpoints.go | 0 - .../kubernetes/typed/core/v1/event.go | 0 - .../typed/core/v1/event_expansion.go | 0 - .../typed/core/v1/generated_expansion.go | 0 - .../kubernetes/typed/core/v1/limitrange.go | 0 - .../kubernetes/typed/core/v1/namespace.go | 0 - .../typed/core/v1/namespace_expansion.go | 0 - .../kubernetes/typed/core/v1/node.go | 0 - .../typed/core/v1/node_expansion.go | 0 - .../typed/core/v1/persistentvolume.go | 0 - .../typed/core/v1/persistentvolumeclaim.go | 0 - .../client-go/kubernetes/typed/core/v1/pod.go | 0 - .../kubernetes/typed/core/v1/pod_expansion.go | 0 - .../kubernetes/typed/core/v1/podtemplate.go | 0 - .../typed/core/v1/replicationcontroller.go | 0 - .../kubernetes/typed/core/v1/resourcequota.go | 0 - .../kubernetes/typed/core/v1/secret.go | 0 - .../kubernetes/typed/core/v1/service.go | 0 - .../typed/core/v1/service_expansion.go | 0 - .../typed/core/v1/serviceaccount.go | 0 - .../discovery/v1alpha1/discovery_client.go | 0 - .../typed/discovery/v1alpha1/doc.go | 0 - .../typed/discovery/v1alpha1/endpointslice.go | 0 - .../discovery/v1alpha1/generated_expansion.go | 0 - .../discovery/v1beta1/discovery_client.go | 0 - .../kubernetes/typed/discovery/v1beta1/doc.go | 0 - .../typed/discovery/v1beta1/endpointslice.go | 0 - .../discovery/v1beta1/generated_expansion.go | 0 - .../kubernetes/typed/events/v1/doc.go | 0 - .../kubernetes/typed/events/v1/event.go | 0 - .../typed/events/v1/events_client.go | 0 - .../typed/events/v1/generated_expansion.go | 0 - .../kubernetes/typed/events/v1beta1/doc.go | 0 - .../kubernetes/typed/events/v1beta1/event.go | 0 - .../typed/events/v1beta1/event_expansion.go | 0 - .../typed/events/v1beta1/events_client.go | 0 - .../events/v1beta1/generated_expansion.go | 0 - .../typed/extensions/v1beta1/daemonset.go | 0 - .../typed/extensions/v1beta1/deployment.go | 0 - .../v1beta1/deployment_expansion.go | 0 - .../typed/extensions/v1beta1/doc.go | 0 - .../extensions/v1beta1/extensions_client.go | 0 - .../extensions/v1beta1/generated_expansion.go | 0 - .../typed/extensions/v1beta1/ingress.go | 0 - .../typed/extensions/v1beta1/networkpolicy.go | 0 - .../extensions/v1beta1/podsecuritypolicy.go | 0 - .../typed/extensions/v1beta1/replicaset.go | 0 - .../typed/flowcontrol/v1alpha1/doc.go | 0 - .../v1alpha1/flowcontrol_client.go | 0 - .../typed/flowcontrol/v1alpha1/flowschema.go | 0 - .../v1alpha1/generated_expansion.go | 0 - .../v1alpha1/prioritylevelconfiguration.go | 0 - .../typed/flowcontrol/v1beta1/doc.go | 0 - .../flowcontrol/v1beta1/flowcontrol_client.go | 0 - .../typed/flowcontrol/v1beta1/flowschema.go | 0 - .../v1beta1/generated_expansion.go | 0 - .../v1beta1/prioritylevelconfiguration.go | 0 - .../kubernetes/typed/networking/v1/doc.go | 0 - .../networking/v1/generated_expansion.go | 0 - .../kubernetes/typed/networking/v1/ingress.go | 0 - .../typed/networking/v1/ingressclass.go | 0 - .../typed/networking/v1/networking_client.go | 0 - .../typed/networking/v1/networkpolicy.go | 0 - .../typed/networking/v1beta1/doc.go | 0 - .../networking/v1beta1/generated_expansion.go | 0 - .../typed/networking/v1beta1/ingress.go | 0 - .../typed/networking/v1beta1/ingressclass.go | 0 - .../networking/v1beta1/networking_client.go | 0 - .../client-go/kubernetes/typed/node/v1/doc.go | 0 - .../typed/node/v1/generated_expansion.go | 0 - .../kubernetes/typed/node/v1/node_client.go | 0 - .../kubernetes/typed/node/v1/runtimeclass.go | 0 - .../kubernetes/typed/node/v1alpha1/doc.go | 0 - .../node/v1alpha1/generated_expansion.go | 0 - .../typed/node/v1alpha1/node_client.go | 0 - .../typed/node/v1alpha1/runtimeclass.go | 0 - .../kubernetes/typed/node/v1beta1/doc.go | 0 - .../typed/node/v1beta1/generated_expansion.go | 0 - .../typed/node/v1beta1/node_client.go | 0 - .../typed/node/v1beta1/runtimeclass.go | 0 - .../kubernetes/typed/policy/v1beta1/doc.go | 0 - .../typed/policy/v1beta1/eviction.go | 0 - .../policy/v1beta1/eviction_expansion.go | 0 - .../policy/v1beta1/generated_expansion.go | 0 - .../policy/v1beta1/poddisruptionbudget.go | 0 - .../typed/policy/v1beta1/podsecuritypolicy.go | 0 - .../typed/policy/v1beta1/policy_client.go | 0 - .../kubernetes/typed/rbac/v1/clusterrole.go | 0 - .../typed/rbac/v1/clusterrolebinding.go | 0 - .../client-go/kubernetes/typed/rbac/v1/doc.go | 0 - .../typed/rbac/v1/generated_expansion.go | 0 - .../kubernetes/typed/rbac/v1/rbac_client.go | 0 - .../kubernetes/typed/rbac/v1/role.go | 0 - .../kubernetes/typed/rbac/v1/rolebinding.go | 0 - .../typed/rbac/v1alpha1/clusterrole.go | 0 - .../typed/rbac/v1alpha1/clusterrolebinding.go | 0 - .../kubernetes/typed/rbac/v1alpha1/doc.go | 0 - .../rbac/v1alpha1/generated_expansion.go | 0 - .../typed/rbac/v1alpha1/rbac_client.go | 0 - .../kubernetes/typed/rbac/v1alpha1/role.go | 0 - .../typed/rbac/v1alpha1/rolebinding.go | 0 - .../typed/rbac/v1beta1/clusterrole.go | 0 - .../typed/rbac/v1beta1/clusterrolebinding.go | 0 - .../kubernetes/typed/rbac/v1beta1/doc.go | 0 - .../typed/rbac/v1beta1/generated_expansion.go | 0 - .../typed/rbac/v1beta1/rbac_client.go | 0 - .../kubernetes/typed/rbac/v1beta1/role.go | 0 - .../typed/rbac/v1beta1/rolebinding.go | 0 - .../kubernetes/typed/scheduling/v1/doc.go | 0 - .../scheduling/v1/generated_expansion.go | 0 - .../typed/scheduling/v1/priorityclass.go | 0 - .../typed/scheduling/v1/scheduling_client.go | 0 - .../typed/scheduling/v1alpha1/doc.go | 0 - .../v1alpha1/generated_expansion.go | 0 - .../scheduling/v1alpha1/priorityclass.go | 0 - .../scheduling/v1alpha1/scheduling_client.go | 0 - .../typed/scheduling/v1beta1/doc.go | 0 - .../scheduling/v1beta1/generated_expansion.go | 0 - .../typed/scheduling/v1beta1/priorityclass.go | 0 - .../scheduling/v1beta1/scheduling_client.go | 0 - .../kubernetes/typed/storage/v1/csidriver.go | 0 - .../kubernetes/typed/storage/v1/csinode.go | 0 - .../kubernetes/typed/storage/v1/doc.go | 0 - .../typed/storage/v1/generated_expansion.go | 0 - .../typed/storage/v1/storage_client.go | 0 - .../typed/storage/v1/storageclass.go | 0 - .../typed/storage/v1/volumeattachment.go | 0 - .../storage/v1alpha1/csistoragecapacity.go | 0 - .../kubernetes/typed/storage/v1alpha1/doc.go | 0 - .../storage/v1alpha1/generated_expansion.go | 0 - .../typed/storage/v1alpha1/storage_client.go | 0 - .../storage/v1alpha1/volumeattachment.go | 0 - .../typed/storage/v1beta1/csidriver.go | 0 - .../typed/storage/v1beta1/csinode.go | 0 - .../kubernetes/typed/storage/v1beta1/doc.go | 0 - .../storage/v1beta1/generated_expansion.go | 0 - .../typed/storage/v1beta1/storage_client.go | 0 - .../typed/storage/v1beta1/storageclass.go | 0 - .../typed/storage/v1beta1/volumeattachment.go | 0 - .../v1/expansion_generated.go | 0 - .../v1/mutatingwebhookconfiguration.go | 0 - .../v1/validatingwebhookconfiguration.go | 0 - .../v1beta1/expansion_generated.go | 0 - .../v1beta1/mutatingwebhookconfiguration.go | 0 - .../v1beta1/validatingwebhookconfiguration.go | 0 - .../v1alpha1/expansion_generated.go | 0 - .../v1alpha1/storageversion.go | 0 - .../listers/apps/v1/controllerrevision.go | 0 - .../client-go/listers/apps/v1/daemonset.go | 0 - .../listers/apps/v1/daemonset_expansion.go | 0 - .../client-go/listers/apps/v1/deployment.go | 0 - .../listers/apps/v1/expansion_generated.go | 0 - .../client-go/listers/apps/v1/replicaset.go | 0 - .../listers/apps/v1/replicaset_expansion.go | 0 - .../client-go/listers/apps/v1/statefulset.go | 0 - .../listers/apps/v1/statefulset_expansion.go | 0 - .../apps/v1beta1/controllerrevision.go | 0 - .../listers/apps/v1beta1/deployment.go | 0 - .../apps/v1beta1/expansion_generated.go | 0 - .../listers/apps/v1beta1/statefulset.go | 0 - .../apps/v1beta1/statefulset_expansion.go | 0 - .../apps/v1beta2/controllerrevision.go | 0 - .../listers/apps/v1beta2/daemonset.go | 0 - .../apps/v1beta2/daemonset_expansion.go | 0 - .../listers/apps/v1beta2/deployment.go | 0 - .../apps/v1beta2/expansion_generated.go | 0 - .../listers/apps/v1beta2/replicaset.go | 0 - .../apps/v1beta2/replicaset_expansion.go | 0 - .../listers/apps/v1beta2/statefulset.go | 0 - .../apps/v1beta2/statefulset_expansion.go | 0 - .../autoscaling/v1/expansion_generated.go | 0 - .../autoscaling/v1/horizontalpodautoscaler.go | 0 - .../v2beta1/expansion_generated.go | 0 - .../v2beta1/horizontalpodautoscaler.go | 0 - .../v2beta2/expansion_generated.go | 0 - .../v2beta2/horizontalpodautoscaler.go | 0 - .../listers/batch/v1/expansion_generated.go | 0 - .../k8s.io/client-go/listers/batch/v1/job.go | 0 - .../listers/batch/v1/job_expansion.go | 0 - .../listers/batch/v1beta1/cronjob.go | 0 - .../batch/v1beta1/expansion_generated.go | 0 - .../listers/batch/v2alpha1/cronjob.go | 0 - .../batch/v2alpha1/expansion_generated.go | 0 - .../v1/certificatesigningrequest.go | 0 - .../certificates/v1/expansion_generated.go | 0 - .../v1beta1/certificatesigningrequest.go | 0 - .../v1beta1/expansion_generated.go | 0 - .../coordination/v1/expansion_generated.go | 0 - .../listers/coordination/v1/lease.go | 0 - .../v1beta1/expansion_generated.go | 0 - .../listers/coordination/v1beta1/lease.go | 0 - .../listers/core/v1/componentstatus.go | 0 - .../client-go/listers/core/v1/configmap.go | 0 - .../client-go/listers/core/v1/endpoints.go | 0 - .../k8s.io/client-go/listers/core/v1/event.go | 0 - .../listers/core/v1/expansion_generated.go | 0 - .../client-go/listers/core/v1/limitrange.go | 0 - .../client-go/listers/core/v1/namespace.go | 0 - .../k8s.io/client-go/listers/core/v1/node.go | 0 - .../listers/core/v1/persistentvolume.go | 0 - .../listers/core/v1/persistentvolumeclaim.go | 0 - .../k8s.io/client-go/listers/core/v1/pod.go | 0 - .../client-go/listers/core/v1/podtemplate.go | 0 - .../listers/core/v1/replicationcontroller.go | 0 - .../v1/replicationcontroller_expansion.go | 0 - .../listers/core/v1/resourcequota.go | 0 - .../client-go/listers/core/v1/secret.go | 0 - .../client-go/listers/core/v1/service.go | 0 - .../listers/core/v1/serviceaccount.go | 0 - .../discovery/v1alpha1/endpointslice.go | 0 - .../discovery/v1alpha1/expansion_generated.go | 0 - .../discovery/v1beta1/endpointslice.go | 0 - .../discovery/v1beta1/expansion_generated.go | 0 - .../client-go/listers/events/v1/event.go | 0 - .../listers/events/v1/expansion_generated.go | 0 - .../client-go/listers/events/v1beta1/event.go | 0 - .../events/v1beta1/expansion_generated.go | 0 - .../listers/extensions/v1beta1/daemonset.go | 0 - .../extensions/v1beta1/daemonset_expansion.go | 0 - .../listers/extensions/v1beta1/deployment.go | 0 - .../extensions/v1beta1/expansion_generated.go | 0 - .../listers/extensions/v1beta1/ingress.go | 0 - .../extensions/v1beta1/networkpolicy.go | 0 - .../extensions/v1beta1/podsecuritypolicy.go | 0 - .../listers/extensions/v1beta1/replicaset.go | 0 - .../v1beta1/replicaset_expansion.go | 0 - .../v1alpha1/expansion_generated.go | 0 - .../flowcontrol/v1alpha1/flowschema.go | 0 - .../v1alpha1/prioritylevelconfiguration.go | 0 - .../v1beta1/expansion_generated.go | 0 - .../listers/flowcontrol/v1beta1/flowschema.go | 0 - .../v1beta1/prioritylevelconfiguration.go | 0 - .../networking/v1/expansion_generated.go | 0 - .../listers/networking/v1/ingress.go | 0 - .../listers/networking/v1/ingressclass.go | 0 - .../listers/networking/v1/networkpolicy.go | 0 - .../networking/v1beta1/expansion_generated.go | 0 - .../listers/networking/v1beta1/ingress.go | 0 - .../networking/v1beta1/ingressclass.go | 0 - .../listers/node/v1/expansion_generated.go | 0 - .../client-go/listers/node/v1/runtimeclass.go | 0 - .../node/v1alpha1/expansion_generated.go | 0 - .../listers/node/v1alpha1/runtimeclass.go | 0 - .../node/v1beta1/expansion_generated.go | 0 - .../listers/node/v1beta1/runtimeclass.go | 0 - .../listers/policy/v1beta1/eviction.go | 0 - .../policy/v1beta1/expansion_generated.go | 0 - .../policy/v1beta1/poddisruptionbudget.go | 0 - .../v1beta1/poddisruptionbudget_expansion.go | 0 - .../policy/v1beta1/podsecuritypolicy.go | 0 - .../client-go/listers/rbac/v1/clusterrole.go | 0 - .../listers/rbac/v1/clusterrolebinding.go | 0 - .../listers/rbac/v1/expansion_generated.go | 0 - .../k8s.io/client-go/listers/rbac/v1/role.go | 0 - .../client-go/listers/rbac/v1/rolebinding.go | 0 - .../listers/rbac/v1alpha1/clusterrole.go | 0 - .../rbac/v1alpha1/clusterrolebinding.go | 0 - .../rbac/v1alpha1/expansion_generated.go | 0 - .../client-go/listers/rbac/v1alpha1/role.go | 0 - .../listers/rbac/v1alpha1/rolebinding.go | 0 - .../listers/rbac/v1beta1/clusterrole.go | 0 - .../rbac/v1beta1/clusterrolebinding.go | 0 - .../rbac/v1beta1/expansion_generated.go | 0 - .../client-go/listers/rbac/v1beta1/role.go | 0 - .../listers/rbac/v1beta1/rolebinding.go | 0 - .../scheduling/v1/expansion_generated.go | 0 - .../listers/scheduling/v1/priorityclass.go | 0 - .../v1alpha1/expansion_generated.go | 0 - .../scheduling/v1alpha1/priorityclass.go | 0 - .../scheduling/v1beta1/expansion_generated.go | 0 - .../scheduling/v1beta1/priorityclass.go | 0 - .../client-go/listers/storage/v1/csidriver.go | 0 - .../client-go/listers/storage/v1/csinode.go | 0 - .../listers/storage/v1/expansion_generated.go | 0 - .../listers/storage/v1/storageclass.go | 0 - .../listers/storage/v1/volumeattachment.go | 0 - .../storage/v1alpha1/csistoragecapacity.go | 0 - .../storage/v1alpha1/expansion_generated.go | 0 - .../storage/v1alpha1/volumeattachment.go | 0 - .../listers/storage/v1beta1/csidriver.go | 0 - .../listers/storage/v1beta1/csinode.go | 0 - .../storage/v1beta1/expansion_generated.go | 0 - .../listers/storage/v1beta1/storageclass.go | 0 - .../storage/v1beta1/volumeattachment.go | 0 - .../pkg/apis/clientauthentication/OWNERS | 0 - .../pkg/apis/clientauthentication/doc.go | 0 - .../pkg/apis/clientauthentication/register.go | 0 - .../pkg/apis/clientauthentication/types.go | 0 - .../v1alpha1/conversion.go | 0 - .../apis/clientauthentication/v1alpha1/doc.go | 0 - .../clientauthentication/v1alpha1/register.go | 0 - .../clientauthentication/v1alpha1/types.go | 0 - .../v1alpha1/zz_generated.conversion.go | 0 - .../v1alpha1/zz_generated.deepcopy.go | 0 - .../v1alpha1/zz_generated.defaults.go | 0 - .../v1beta1/conversion.go | 0 - .../apis/clientauthentication/v1beta1/doc.go | 0 - .../clientauthentication/v1beta1/register.go | 0 - .../clientauthentication/v1beta1/types.go | 0 - .../v1beta1/zz_generated.conversion.go | 0 - .../v1beta1/zz_generated.deepcopy.go | 0 - .../v1beta1/zz_generated.defaults.go | 0 - .../zz_generated.deepcopy.go | 0 - .../client-go/pkg/version/.gitattributes | 0 - vendor/k8s.io/client-go/pkg/version/base.go | 0 - vendor/k8s.io/client-go/pkg/version/def.bzl | 0 - vendor/k8s.io/client-go/pkg/version/doc.go | 0 - .../k8s.io/client-go/pkg/version/version.go | 0 - .../plugin/pkg/client/auth/exec/exec.go | 0 - .../plugin/pkg/client/auth/exec/metrics.go | 0 - vendor/k8s.io/client-go/rest/OWNERS | 0 - vendor/k8s.io/client-go/rest/client.go | 0 - vendor/k8s.io/client-go/rest/config.go | 0 - vendor/k8s.io/client-go/rest/exec.go | 0 - vendor/k8s.io/client-go/rest/plugin.go | 0 - vendor/k8s.io/client-go/rest/request.go | 0 - vendor/k8s.io/client-go/rest/transport.go | 0 - vendor/k8s.io/client-go/rest/url_utils.go | 0 - vendor/k8s.io/client-go/rest/urlbackoff.go | 0 - vendor/k8s.io/client-go/rest/warnings.go | 0 - vendor/k8s.io/client-go/rest/watch/decoder.go | 0 - vendor/k8s.io/client-go/rest/watch/encoder.go | 0 - .../client-go/rest/zz_generated.deepcopy.go | 0 - vendor/k8s.io/client-go/tools/cache/OWNERS | 0 - .../client-go/tools/cache/controller.go | 0 - .../client-go/tools/cache/delta_fifo.go | 0 - vendor/k8s.io/client-go/tools/cache/doc.go | 0 - .../client-go/tools/cache/expiration_cache.go | 0 - .../tools/cache/expiration_cache_fakes.go | 0 - .../tools/cache/fake_custom_store.go | 0 - vendor/k8s.io/client-go/tools/cache/fifo.go | 0 - vendor/k8s.io/client-go/tools/cache/heap.go | 0 - vendor/k8s.io/client-go/tools/cache/index.go | 0 - .../k8s.io/client-go/tools/cache/listers.go | 0 - .../k8s.io/client-go/tools/cache/listwatch.go | 0 - .../client-go/tools/cache/mutation_cache.go | 0 - .../tools/cache/mutation_detector.go | 0 - .../k8s.io/client-go/tools/cache/reflector.go | 0 - .../tools/cache/reflector_metrics.go | 0 - .../client-go/tools/cache/shared_informer.go | 0 - vendor/k8s.io/client-go/tools/cache/store.go | 0 - .../tools/cache/thread_safe_store.go | 0 - .../client-go/tools/cache/undelta_store.go | 0 - .../client-go/tools/clientcmd/api/doc.go | 0 - .../client-go/tools/clientcmd/api/helpers.go | 0 - .../client-go/tools/clientcmd/api/register.go | 0 - .../client-go/tools/clientcmd/api/types.go | 0 - .../clientcmd/api/zz_generated.deepcopy.go | 0 - vendor/k8s.io/client-go/tools/metrics/OWNERS | 0 - .../k8s.io/client-go/tools/metrics/metrics.go | 0 - vendor/k8s.io/client-go/tools/pager/pager.go | 0 - .../k8s.io/client-go/tools/reference/ref.go | 0 - vendor/k8s.io/client-go/transport/OWNERS | 0 - vendor/k8s.io/client-go/transport/cache.go | 0 - .../client-go/transport/cert_rotation.go | 0 - vendor/k8s.io/client-go/transport/config.go | 0 - .../client-go/transport/round_trippers.go | 0 - .../client-go/transport/token_source.go | 0 - .../k8s.io/client-go/transport/transport.go | 0 - vendor/k8s.io/client-go/util/cert/OWNERS | 0 - vendor/k8s.io/client-go/util/cert/cert.go | 0 - vendor/k8s.io/client-go/util/cert/csr.go | 0 - vendor/k8s.io/client-go/util/cert/io.go | 0 - vendor/k8s.io/client-go/util/cert/pem.go | 0 - .../client-go/util/cert/server_inspection.go | 0 - .../util/connrotation/connrotation.go | 0 - .../client-go/util/flowcontrol/backoff.go | 0 - .../client-go/util/flowcontrol/throttle.go | 0 - vendor/k8s.io/client-go/util/keyutil/OWNERS | 0 - vendor/k8s.io/client-go/util/keyutil/key.go | 0 - .../util/workqueue/default_rate_limiters.go | 0 - .../util/workqueue/delaying_queue.go | 0 - vendor/k8s.io/client-go/util/workqueue/doc.go | 0 - .../client-go/util/workqueue/metrics.go | 0 - .../client-go/util/workqueue/parallelizer.go | 0 - .../k8s.io/client-go/util/workqueue/queue.go | 0 - .../util/workqueue/rate_limiting_queue.go | 0 - vendor/k8s.io/cri-api/LICENSE | 201 + - .../cri-api/pkg/apis/runtime/v1/api.pb.go | 40906 ++++++++++++++++ - .../cri-api/pkg/apis/runtime/v1/api.proto | 1606 + - .../cri-api/pkg/apis/runtime/v1/constants.go | 55 + - vendor/k8s.io/klog/v2/.gitignore | 0 - vendor/k8s.io/klog/v2/CONTRIBUTING.md | 0 - vendor/k8s.io/klog/v2/LICENSE | 0 - vendor/k8s.io/klog/v2/OWNERS | 0 - vendor/k8s.io/klog/v2/README.md | 0 - vendor/k8s.io/klog/v2/RELEASE.md | 0 - vendor/k8s.io/klog/v2/SECURITY.md | 0 - vendor/k8s.io/klog/v2/SECURITY_CONTACTS | 0 - vendor/k8s.io/klog/v2/code-of-conduct.md | 0 - vendor/k8s.io/klog/v2/contextual.go | 0 - vendor/k8s.io/klog/v2/exit.go | 0 - vendor/k8s.io/klog/v2/imports.go | 0 - .../k8s.io/klog/v2/internal/buffer/buffer.go | 0 - .../k8s.io/klog/v2/internal/clock/README.md | 0 - vendor/k8s.io/klog/v2/internal/clock/clock.go | 0 - vendor/k8s.io/klog/v2/internal/dbg/dbg.go | 0 - .../klog/v2/internal/serialize/keyvalues.go | 0 - .../klog/v2/internal/severity/severity.go | 0 - vendor/k8s.io/klog/v2/k8s_references.go | 0 - vendor/k8s.io/klog/v2/klog.go | 0 - vendor/k8s.io/klog/v2/klog_file.go | 0 - vendor/k8s.io/klog/v2/klog_file_others.go | 0 - vendor/k8s.io/klog/v2/klog_file_windows.go | 0 - vendor/k8s.io/klog/v2/klogr.go | 0 - vendor/k8s.io/utils/LICENSE | 0 - vendor/k8s.io/utils/buffer/ring_growing.go | 0 - vendor/k8s.io/utils/clock/README.md | 0 - vendor/k8s.io/utils/clock/clock.go | 0 - vendor/k8s.io/utils/inotify/LICENSE | 0 - vendor/k8s.io/utils/inotify/PATENTS | 0 - vendor/k8s.io/utils/inotify/README.md | 0 - vendor/k8s.io/utils/inotify/inotify.go | 0 - vendor/k8s.io/utils/inotify/inotify_linux.go | 0 - vendor/k8s.io/utils/inotify/inotify_others.go | 0 - vendor/k8s.io/utils/integer/integer.go | 0 - vendor/k8s.io/utils/trace/README.md | 0 - vendor/k8s.io/utils/trace/trace.go | 0 - vendor/modules.txt | 117 +- - .../structured-merge-diff/v4/LICENSE | 0 - .../v4/value/allocator.go | 0 - .../structured-merge-diff/v4/value/doc.go | 0 - .../structured-merge-diff/v4/value/fields.go | 0 - .../v4/value/jsontagutil.go | 0 - .../structured-merge-diff/v4/value/list.go | 0 - .../v4/value/listreflect.go | 0 - .../v4/value/listunstructured.go | 0 - .../structured-merge-diff/v4/value/map.go | 0 - .../v4/value/mapreflect.go | 0 - .../v4/value/mapunstructured.go | 0 - .../v4/value/reflectcache.go | 0 - .../structured-merge-diff/v4/value/scalar.go | 0 - .../v4/value/structreflect.go | 0 - .../structured-merge-diff/v4/value/value.go | 0 - .../v4/value/valuereflect.go | 0 - .../v4/value/valueunstructured.go | 0 - vendor/sigs.k8s.io/yaml/.gitignore | 4 + - vendor/sigs.k8s.io/yaml/.travis.yml | 7 +- - vendor/sigs.k8s.io/yaml/CONTRIBUTING.md | 0 - vendor/sigs.k8s.io/yaml/LICENSE | 0 - vendor/sigs.k8s.io/yaml/OWNERS | 0 - vendor/sigs.k8s.io/yaml/README.md | 2 +- - vendor/sigs.k8s.io/yaml/RELEASE.md | 0 - vendor/sigs.k8s.io/yaml/SECURITY_CONTACTS | 0 - vendor/sigs.k8s.io/yaml/code-of-conduct.md | 0 - vendor/sigs.k8s.io/yaml/fields.go | 0 - vendor/sigs.k8s.io/yaml/yaml.go | 0 - vendor/sigs.k8s.io/yaml/yaml_go110.go | 0 - 3149 files changed, 148862 insertions(+), 7173 deletions(-) - mode change 100644 => 100755 go.mod - mode change 100644 => 100755 go.sum - create mode 100644 pkg/core/typedef/nrirawpod.go - create mode 100644 pkg/informer/nriinformer.go - create mode 100755 vendor/github.com/beorn7/perks/LICENSE - create mode 100755 vendor/github.com/beorn7/perks/quantile/exampledata.txt - create mode 100755 vendor/github.com/beorn7/perks/quantile/stream.go - create mode 100755 vendor/github.com/cespare/xxhash/v2/LICENSE.txt - create mode 100755 vendor/github.com/cespare/xxhash/v2/README.md - create mode 100755 vendor/github.com/cespare/xxhash/v2/testall.sh - create mode 100755 vendor/github.com/cespare/xxhash/v2/xxhash.go - create mode 100755 vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s - create mode 100755 vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s - create mode 100755 vendor/github.com/cespare/xxhash/v2/xxhash_asm.go - create mode 100755 vendor/github.com/cespare/xxhash/v2/xxhash_other.go - create mode 100755 vendor/github.com/cespare/xxhash/v2/xxhash_safe.go - create mode 100755 vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/.gitignore - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/.golangci.yml - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/LICENSE - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/Makefile - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/README.md - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/features.go - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/main.go - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/notify.go - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/rpc/rpc.pb.go - mode change 100644 => 100755 vendor/github.com/checkpoint-restore/go-criu/v5/rpc/rpc.proto - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/.clang-format - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/.gitignore - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/.golangci.yaml - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/ARCHITECTURE.md - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/CODE_OF_CONDUCT.md - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/CONTRIBUTING.md - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/LICENSE - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/Makefile - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/README.md - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/alu.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/alu_string.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/doc.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/func.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/func_string.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/instruction.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/jump.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/jump_string.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/load_store.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/load_store_string.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/opcode.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/opcode_string.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/asm/register.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/attachtype_string.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/collection.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/doc.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/elf_reader.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/elf_reader_fuzz.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/info.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/align.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/btf.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/btf_types.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/btf_types_string.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/core.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/doc.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/ext_info.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/fuzz.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/info.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/strings.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/syscalls.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/btf/types.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/cpu.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/elf.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/endian.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/errors.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/fd.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/feature.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/io.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/pinning.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/ptr.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/ptr_32_be.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/ptr_32_le.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/ptr_64.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/syscall.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/syscall_string.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/unix/types_linux.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/unix/types_other.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/internal/version.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/cgroup.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/doc.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/freplace.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/iter.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/kprobe.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/link.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/netns.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/perf_event.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/platform.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/program.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/raw_tracepoint.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/syscalls.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/tracepoint.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/link/uprobe.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/linker.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/map.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/marshalers.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/prog.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/run-tests.sh - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/syscalls.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/types.go - mode change 100644 => 100755 vendor/github.com/cilium/ebpf/types_string.go - mode change 100644 => 100755 vendor/github.com/containerd/console/.golangci.yml - mode change 100644 => 100755 vendor/github.com/containerd/console/LICENSE - mode change 100644 => 100755 vendor/github.com/containerd/console/README.md - mode change 100644 => 100755 vendor/github.com/containerd/console/console.go - mode change 100644 => 100755 vendor/github.com/containerd/console/console_linux.go - mode change 100644 => 100755 vendor/github.com/containerd/console/console_unix.go - mode change 100644 => 100755 vendor/github.com/containerd/console/console_windows.go - mode change 100644 => 100755 vendor/github.com/containerd/console/console_zos.go - mode change 100644 => 100755 vendor/github.com/containerd/console/pty_freebsd_cgo.go - mode change 100644 => 100755 vendor/github.com/containerd/console/pty_freebsd_nocgo.go - mode change 100644 => 100755 vendor/github.com/containerd/console/pty_unix.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_darwin.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_freebsd_cgo.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_freebsd_nocgo.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_linux.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_netbsd.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_openbsd_cgo.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_openbsd_nocgo.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_solaris_cgo.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_solaris_nocgo.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_unix.go - mode change 100644 => 100755 vendor/github.com/containerd/console/tc_zos.go - create mode 100755 vendor/github.com/containerd/nri/LICENSE - create mode 100755 vendor/github.com/containerd/nri/pkg/api/adjustment.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/api.pb.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/api.proto - create mode 100755 vendor/github.com/containerd/nri/pkg/api/api_ttrpc.pb.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/device.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/doc.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/env.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/event.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/helpers.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/hooks.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/mount.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/namespace.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/optional.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/plugin.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/resources.go - create mode 100755 vendor/github.com/containerd/nri/pkg/api/update.go - create mode 100755 vendor/github.com/containerd/nri/pkg/log/log.go - create mode 100755 vendor/github.com/containerd/nri/pkg/net/conn.go - create mode 100755 vendor/github.com/containerd/nri/pkg/net/multiplex/mux.go - create mode 100755 vendor/github.com/containerd/nri/pkg/net/multiplex/ttrpc.go - create mode 100755 vendor/github.com/containerd/nri/pkg/net/socketpair.go - create mode 100755 vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_linux.go - create mode 100755 vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_unix.go - create mode 100755 vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_windows.go - create mode 100755 vendor/github.com/containerd/nri/pkg/stub/stub.go - create mode 100755 vendor/github.com/containerd/ttrpc/.gitattributes - create mode 100755 vendor/github.com/containerd/ttrpc/.gitignore - create mode 100755 vendor/github.com/containerd/ttrpc/.golangci.yml - create mode 100755 vendor/github.com/containerd/ttrpc/LICENSE - create mode 100755 vendor/github.com/containerd/ttrpc/Makefile - create mode 100755 vendor/github.com/containerd/ttrpc/PROTOCOL.md - create mode 100755 vendor/github.com/containerd/ttrpc/Protobuild.toml - create mode 100755 vendor/github.com/containerd/ttrpc/README.md - create mode 100755 vendor/github.com/containerd/ttrpc/channel.go - create mode 100755 vendor/github.com/containerd/ttrpc/client.go - create mode 100755 vendor/github.com/containerd/ttrpc/codec.go - create mode 100755 vendor/github.com/containerd/ttrpc/config.go - create mode 100755 vendor/github.com/containerd/ttrpc/doc.go - create mode 100755 vendor/github.com/containerd/ttrpc/errors.go - create mode 100755 vendor/github.com/containerd/ttrpc/handshake.go - create mode 100755 vendor/github.com/containerd/ttrpc/interceptor.go - create mode 100755 vendor/github.com/containerd/ttrpc/metadata.go - create mode 100755 vendor/github.com/containerd/ttrpc/request.pb.go - create mode 100755 vendor/github.com/containerd/ttrpc/request.proto - create mode 100755 vendor/github.com/containerd/ttrpc/server.go - create mode 100755 vendor/github.com/containerd/ttrpc/services.go - create mode 100755 vendor/github.com/containerd/ttrpc/stream.go - create mode 100755 vendor/github.com/containerd/ttrpc/stream_server.go - create mode 100755 vendor/github.com/containerd/ttrpc/test.proto - create mode 100755 vendor/github.com/containerd/ttrpc/unixcreds_linux.go - mode change 100644 => 100755 vendor/github.com/coreos/go-systemd/v22/LICENSE - mode change 100644 => 100755 vendor/github.com/coreos/go-systemd/v22/NOTICE - mode change 100644 => 100755 vendor/github.com/coreos/go-systemd/v22/dbus/dbus.go - mode change 100644 => 100755 vendor/github.com/coreos/go-systemd/v22/dbus/methods.go - mode change 100644 => 100755 vendor/github.com/coreos/go-systemd/v22/dbus/properties.go - mode change 100644 => 100755 vendor/github.com/coreos/go-systemd/v22/dbus/set.go - mode change 100644 => 100755 vendor/github.com/coreos/go-systemd/v22/dbus/subscription.go - mode change 100644 => 100755 vendor/github.com/coreos/go-systemd/v22/dbus/subscription_set.go - mode change 100644 => 100755 vendor/github.com/cyphar/filepath-securejoin/.travis.yml - mode change 100644 => 100755 vendor/github.com/cyphar/filepath-securejoin/LICENSE - mode change 100644 => 100755 vendor/github.com/cyphar/filepath-securejoin/README.md - mode change 100644 => 100755 vendor/github.com/cyphar/filepath-securejoin/VERSION - mode change 100644 => 100755 vendor/github.com/cyphar/filepath-securejoin/join.go - mode change 100644 => 100755 vendor/github.com/cyphar/filepath-securejoin/vendor.conf - mode change 100644 => 100755 vendor/github.com/cyphar/filepath-securejoin/vfs.go - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/LICENSE - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/spew/bypass.go - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/spew/bypasssafe.go - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/spew/common.go - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/spew/config.go - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/spew/doc.go - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/spew/dump.go - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/spew/format.go - mode change 100644 => 100755 vendor/github.com/davecgh/go-spew/spew/spew.go - mode change 100644 => 100755 vendor/github.com/docker/go-units/CONTRIBUTING.md - mode change 100644 => 100755 vendor/github.com/docker/go-units/LICENSE - mode change 100644 => 100755 vendor/github.com/docker/go-units/MAINTAINERS - mode change 100644 => 100755 vendor/github.com/docker/go-units/README.md - mode change 100644 => 100755 vendor/github.com/docker/go-units/circle.yml - mode change 100644 => 100755 vendor/github.com/docker/go-units/duration.go - mode change 100644 => 100755 vendor/github.com/docker/go-units/size.go - mode change 100644 => 100755 vendor/github.com/docker/go-units/ulimit.go - mode change 100644 => 100755 vendor/github.com/euank/go-kmsg-parser/LICENSE - mode change 100644 => 100755 vendor/github.com/euank/go-kmsg-parser/kmsgparser/kmsgparser.go - mode change 100644 => 100755 vendor/github.com/euank/go-kmsg-parser/kmsgparser/log.go - mode change 100644 => 100755 vendor/github.com/go-logr/logr/.golangci.yaml - mode change 100644 => 100755 vendor/github.com/go-logr/logr/CHANGELOG.md - mode change 100644 => 100755 vendor/github.com/go-logr/logr/CONTRIBUTING.md - mode change 100644 => 100755 vendor/github.com/go-logr/logr/LICENSE - mode change 100644 => 100755 vendor/github.com/go-logr/logr/README.md - mode change 100644 => 100755 vendor/github.com/go-logr/logr/discard.go - mode change 100644 => 100755 vendor/github.com/go-logr/logr/logr.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/CONTRIBUTING.md - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/LICENSE - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/MAINTAINERS - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/README.md - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/auth.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/auth_anonymous.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/auth_external.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/auth_sha1.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/call.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/conn.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/conn_darwin.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/conn_other.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/conn_unix.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/conn_windows.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/dbus.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/decoder.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/default_handler.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/doc.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/encoder.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/export.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/homedir.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/homedir_dynamic.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/homedir_static.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/match.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/message.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/object.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/sequence.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/sequential_handler.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/server_interfaces.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/sig.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_darwin.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_generic.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_nonce_tcp.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_tcp.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_unix.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_unixcred_dragonfly.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_unixcred_freebsd.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_unixcred_linux.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/transport_unixcred_openbsd.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/variant.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/variant_lexer.go - mode change 100644 => 100755 vendor/github.com/godbus/dbus/v5/variant_parser.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/AUTHORS - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/CONTRIBUTORS - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/LICENSE - create mode 100755 vendor/github.com/gogo/protobuf/gogoproto/Makefile - create mode 100755 vendor/github.com/gogo/protobuf/gogoproto/doc.go - create mode 100755 vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go - create mode 100755 vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden - create mode 100755 vendor/github.com/gogo/protobuf/gogoproto/gogo.proto - create mode 100755 vendor/github.com/gogo/protobuf/gogoproto/helper.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/Makefile - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/clone.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/custom_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/decode.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/deprecated.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/discard.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/duration.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/duration_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/encode.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/encode_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/equal.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/extensions.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/extensions_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/lib.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/lib_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/message_set.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/pointer_reflect.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/properties.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/properties_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/skip_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/table_marshal.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/table_merge.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/table_unmarshal.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/text.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/text_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/text_parser.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/timestamp.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/wrappers.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go - create mode 100755 vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile - create mode 100755 vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go - create mode 100755 vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go - create mode 100755 vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go - create mode 100755 vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go - mode change 100644 => 100755 vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/AUTHORS - mode change 100644 => 100755 vendor/github.com/golang/protobuf/CONTRIBUTORS - mode change 100644 => 100755 vendor/github.com/golang/protobuf/LICENSE - create mode 100755 vendor/github.com/golang/protobuf/jsonpb/decode.go - create mode 100755 vendor/github.com/golang/protobuf/jsonpb/encode.go - create mode 100755 vendor/github.com/golang/protobuf/jsonpb/json.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/buffer.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/defaults.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/deprecated.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/discard.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/extensions.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/properties.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/proto.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/registry.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/text_decode.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/text_encode.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/wire.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/proto/wrappers.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/ptypes/any.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/ptypes/any/any.pb.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/ptypes/doc.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/ptypes/duration.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/ptypes/timestamp.go - mode change 100644 => 100755 vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/AUTHORS - mode change 100644 => 100755 vendor/github.com/google/cadvisor/LICENSE - mode change 100644 => 100755 vendor/github.com/google/cadvisor/cache/memory/memory.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/collector/collector_manager.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/collector/config.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/collector/fakes.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/collector/generic_collector.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/collector/prometheus_collector.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/collector/types.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/collector/util.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/common/container_hints.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/common/fsHandler.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/common/helpers.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/common/inotify_watcher.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/container.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/factory.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/libcontainer/handler.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/libcontainer/helpers.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/raw/factory.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/raw/handler.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/container/raw/watcher.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/devicemapper/dmsetup_client.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/devicemapper/doc.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/devicemapper/thin_ls_client.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/devicemapper/thin_pool_watcher.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/devicemapper/util.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/events/handler.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/fs/fs.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/fs/types.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/info/v1/container.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/info/v1/docker.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/info/v1/machine.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/info/v1/metric.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/info/v2/container.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/info/v2/conversion.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/info/v2/machine.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/machine/info.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/machine/machine.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/machine/operatingsystem_unix.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/machine/operatingsystem_windows.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/manager/container.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/manager/manager.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/nvm/machine_libipmctl.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/nvm/machine_no_libipmctl.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/perf/collector_libpfm.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/perf/collector_no_libpfm.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/perf/config.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/perf/manager_libpfm.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/perf/manager_no_libpfm.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/perf/types_libpfm.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/perf/uncore_libpfm.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/resctrl/collector.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/resctrl/manager.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/resctrl/utils.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/stats/noop.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/stats/types.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/storage/common_flags.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/storage/storage.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/summary/buffer.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/summary/percentiles.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/summary/summary.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/cloudinfo/cloudinfo.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/cpuload/cpuload.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/cpuload/netlink/conn.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/cpuload/netlink/netlink.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/cpuload/netlink/reader.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/oomparser/oomparser.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/path.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/sysfs/sysfs.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/sysfs/sysfs_notx86.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/sysfs/sysfs_x86.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/sysinfo/sysinfo.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/timed_store.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/utils/utils.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/version/version.go - mode change 100644 => 100755 vendor/github.com/google/cadvisor/watcher/watcher.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/LICENSE - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/compare.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/export_panic.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/export_unsafe.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/function/func.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/value/name.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/internal/value/sort.go - delete mode 100644 vendor/github.com/google/go-cmp/cmp/internal/value/zero.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/options.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/path.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/report.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/report_compare.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/report_references.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/report_reflect.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/report_slices.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/report_text.go - mode change 100644 => 100755 vendor/github.com/google/go-cmp/cmp/report_value.go - mode change 100644 => 100755 vendor/github.com/google/gofuzz/.travis.yml - mode change 100644 => 100755 vendor/github.com/google/gofuzz/CONTRIBUTING.md - mode change 100644 => 100755 vendor/github.com/google/gofuzz/LICENSE - mode change 100644 => 100755 vendor/github.com/google/gofuzz/README.md - mode change 100644 => 100755 vendor/github.com/google/gofuzz/doc.go - mode change 100644 => 100755 vendor/github.com/google/gofuzz/fuzz.go - mode change 100644 => 100755 vendor/github.com/google/uuid/.travis.yml - mode change 100644 => 100755 vendor/github.com/google/uuid/CONTRIBUTING.md - mode change 100644 => 100755 vendor/github.com/google/uuid/CONTRIBUTORS - mode change 100644 => 100755 vendor/github.com/google/uuid/LICENSE - mode change 100644 => 100755 vendor/github.com/google/uuid/README.md - mode change 100644 => 100755 vendor/github.com/google/uuid/dce.go - mode change 100644 => 100755 vendor/github.com/google/uuid/doc.go - mode change 100644 => 100755 vendor/github.com/google/uuid/hash.go - mode change 100644 => 100755 vendor/github.com/google/uuid/marshal.go - mode change 100644 => 100755 vendor/github.com/google/uuid/node.go - mode change 100644 => 100755 vendor/github.com/google/uuid/node_js.go - mode change 100644 => 100755 vendor/github.com/google/uuid/node_net.go - create mode 100755 vendor/github.com/google/uuid/null.go - mode change 100644 => 100755 vendor/github.com/google/uuid/sql.go - mode change 100644 => 100755 vendor/github.com/google/uuid/time.go - mode change 100644 => 100755 vendor/github.com/google/uuid/util.go - mode change 100644 => 100755 vendor/github.com/google/uuid/uuid.go - mode change 100644 => 100755 vendor/github.com/google/uuid/version1.go - mode change 100644 => 100755 vendor/github.com/google/uuid/version4.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/LICENSE - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/compiler/README.md - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/compiler/context.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/compiler/error.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/compiler/extension-handler.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/compiler/helpers.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/compiler/main.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/compiler/reader.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/extensions/README.md - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/extensions/extension.pb.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/extensions/extension.proto - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/extensions/extensions.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/openapiv2/README.md - mode change 100644 => 100755 vendor/github.com/googleapis/gnostic/openapiv2/openapi-2.0.json - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/.gitignore - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/2q.go - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/LICENSE - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/README.md - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/arc.go - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/doc.go - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/lru.go - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/simplelru/lru.go - mode change 100644 => 100755 vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/.codecov.yml - mode change 100644 => 100755 vendor/github.com/json-iterator/go/.gitignore - mode change 100644 => 100755 vendor/github.com/json-iterator/go/.travis.yml - mode change 100644 => 100755 vendor/github.com/json-iterator/go/Gopkg.lock - mode change 100644 => 100755 vendor/github.com/json-iterator/go/Gopkg.toml - mode change 100644 => 100755 vendor/github.com/json-iterator/go/LICENSE - mode change 100644 => 100755 vendor/github.com/json-iterator/go/README.md - mode change 100644 => 100755 vendor/github.com/json-iterator/go/adapter.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_array.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_bool.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_float.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_int32.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_int64.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_invalid.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_nil.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_number.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_object.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_str.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_uint32.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/any_uint64.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/build.sh - mode change 100644 => 100755 vendor/github.com/json-iterator/go/config.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter_array.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter_float.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter_int.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter_object.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter_skip.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter_skip_sloppy.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter_skip_strict.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/iter_str.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/jsoniter.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/pool.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_array.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_dynamic.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_extension.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_json_number.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_json_raw_message.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_map.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_marshaler.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_native.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_optional.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_slice.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_struct_decoder.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/reflect_struct_encoder.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/stream.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/stream_float.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/stream_int.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/stream_str.go - mode change 100644 => 100755 vendor/github.com/json-iterator/go/test.sh - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/.gitignore - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/LICENSE - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/README.md - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/azure-pipelines.yml - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/bench.sh - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/debug_development.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/debug_release.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/dirent.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/doc.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/inoWithFileno.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/inoWithIno.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/modeType.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/modeTypeWithType.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/modeTypeWithoutType.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/nameWithNamlen.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/nameWithoutNamlen.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/readdir.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/readdir_unix.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/readdir_windows.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/reclenFromNamlen.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/reclenFromReclen.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/scandir_unix.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/scandir_windows.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/scanner.go - mode change 100644 => 100755 vendor/github.com/karrick/godirwalk/walk.go - mode change 100644 => 100755 vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE - mode change 100644 => 100755 vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE - mode change 100644 => 100755 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/.gitignore - mode change 100644 => 100755 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/Makefile - mode change 100644 => 100755 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go - mode change 100644 => 100755 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/doc.go - mode change 100644 => 100755 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/.gitignore - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/.travis.yml - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/CONTRIBUTING.md - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/LICENSE - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/README.md - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/Vagrantfile - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/error.go - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/utils.go - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/utils_notsolaris.go - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/utils_solaris.go - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/zfs.go - mode change 100644 => 100755 vendor/github.com/mistifyio/go-zfs/zpool.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/LICENSE - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/doc.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mounted_linux.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mounted_unix.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mountinfo.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mountinfo_bsd.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mountinfo_filters.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mountinfo_freebsdlike.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mountinfo_linux.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mountinfo_openbsd.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mountinfo_unsupported.go - mode change 100644 => 100755 vendor/github.com/moby/sys/mountinfo/mountinfo_windows.go - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/.gitignore - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/.travis.yml - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/LICENSE - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/README.md - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/executor.go - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/go_above_19.go - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/go_below_19.go - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/log.go - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/test.sh - mode change 100644 => 100755 vendor/github.com/modern-go/concurrent/unbounded_executor.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/.gitignore - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/.travis.yml - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/Gopkg.lock - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/Gopkg.toml - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/LICENSE - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/README.md - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/go_above_118.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/go_above_19.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/go_below_118.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/reflect2.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/reflect2_amd64.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/reflect2_kind.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/relfect2_386.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/relfect2_arm.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/relfect2_arm64.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/relfect2_mips64x.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/relfect2_mipsx.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/relfect2_s390x.s - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/safe_field.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/safe_map.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/safe_slice.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/safe_struct.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/safe_type.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/type_map.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_array.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_eface.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_field.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_iface.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_link.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_map.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_ptr.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_slice.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_struct.go - mode change 100644 => 100755 vendor/github.com/modern-go/reflect2/unsafe_type.go - mode change 100644 => 100755 vendor/github.com/mrunalp/fileutils/.gitignore - mode change 100644 => 100755 vendor/github.com/mrunalp/fileutils/LICENSE - mode change 100644 => 100755 vendor/github.com/mrunalp/fileutils/MAINTAINERS - mode change 100644 => 100755 vendor/github.com/mrunalp/fileutils/README.md - mode change 100644 => 100755 vendor/github.com/mrunalp/fileutils/fileutils.go - mode change 100644 => 100755 vendor/github.com/mrunalp/fileutils/idtools.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/LICENSE - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/NOTICE - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/README.md - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/SPEC.md - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor_unsupported.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/capabilities/capabilities.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/capabilities/capabilities_unsupported.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices/devices_emulator.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter/devicefilter.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/ebpf_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/file.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/blkio.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpu.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuacct.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuset.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/devices.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/error.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/freezer.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/fs.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/hugetlb.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/memory.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/name.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_cls.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_prio.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/paths.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/perf_event.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/pids.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/rdma.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/cpu.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/cpuset.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/create.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/defaultpath.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/devices.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/freezer.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/fs2.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/hugetlb.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/io.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/memory.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/pids.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/rdma.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/utils.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/getallpids.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/manager/new.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/stats.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/cpuset.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/dbus.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/user.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v2.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/cgroups/v1_utils.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/blkio_device.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unsupported.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/config.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/config_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/configs_fuzzer.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/hugepage_limit.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/intelrdt.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/interface_priority_map.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/mount.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall_unsupported.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unsupported.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/network.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/rdma.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/validate/rootless.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/configs/validate/validator.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/console_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/container.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/container_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/criu_opts_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/devices/device.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/devices/device_unix.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/error.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/factory.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/factory_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/init_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/intelrdt/cmt.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/intelrdt/intelrdt.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/intelrdt/mbm.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/intelrdt/monitoring.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/intelrdt/stats.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/keys/keyctl.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/logs/logs.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/message_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/mount_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/network_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/notify_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/notify_v2_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/process.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/process_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/restored_process.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_unsupported.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/seccomp/seccomp_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/seccomp/seccomp_unsupported.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/setns_init_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/standard_init_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/state_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/stats_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/sync.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/system/linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/system/proc.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_32.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/user/user.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/user/user_fuzzer.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/userns/userns.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/userns/userns_fuzzer.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/userns/userns_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/userns/userns_unsupported.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/utils/cmsg.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runc/types/events.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runtime-spec/LICENSE - mode change 100644 => 100755 vendor/github.com/opencontainers/runtime-spec/specs-go/config.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runtime-spec/specs-go/state.go - mode change 100644 => 100755 vendor/github.com/opencontainers/runtime-spec/specs-go/version.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/LICENSE - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/doc.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/label/label.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/label/label_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/label/label_stub.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/selinux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/go-selinux/xattrs_linux.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/pkg/pwalk/README.md - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/pkg/pwalk/pwalk.go - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/pkg/pwalkdir/README.md - mode change 100644 => 100755 vendor/github.com/opencontainers/selinux/pkg/pwalkdir/pwalkdir.go - mode change 100644 => 100755 vendor/github.com/pkg/errors/.gitignore - mode change 100644 => 100755 vendor/github.com/pkg/errors/.travis.yml - mode change 100644 => 100755 vendor/github.com/pkg/errors/LICENSE - mode change 100644 => 100755 vendor/github.com/pkg/errors/Makefile - mode change 100644 => 100755 vendor/github.com/pkg/errors/README.md - mode change 100644 => 100755 vendor/github.com/pkg/errors/appveyor.yml - mode change 100644 => 100755 vendor/github.com/pkg/errors/errors.go - mode change 100644 => 100755 vendor/github.com/pkg/errors/go113.go - mode change 100644 => 100755 vendor/github.com/pkg/errors/stack.go - mode change 100644 => 100755 vendor/github.com/pmezard/go-difflib/LICENSE - mode change 100644 => 100755 vendor/github.com/pmezard/go-difflib/difflib/difflib.go - create mode 100755 vendor/github.com/prometheus/client_golang/LICENSE - create mode 100755 vendor/github.com/prometheus/client_golang/NOTICE - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/.gitignore - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/README.md - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/build_info_collector.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/collector.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/counter.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/desc.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/doc.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/fnv.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/gauge.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/get_pid.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/get_pid_gopherjs.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/go_collector.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/histogram.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/internal/almost_equal.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/labels.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/metric.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/num_threads.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/num_threads_gopherjs.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/observer.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/process_collector.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/process_collector_js.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/registry.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/summary.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/timer.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/untyped.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/value.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/vec.go - create mode 100755 vendor/github.com/prometheus/client_golang/prometheus/wrap.go - mode change 100644 => 100755 vendor/github.com/prometheus/client_model/LICENSE - mode change 100644 => 100755 vendor/github.com/prometheus/client_model/NOTICE - mode change 100644 => 100755 vendor/github.com/prometheus/client_model/go/metrics.pb.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/LICENSE - mode change 100644 => 100755 vendor/github.com/prometheus/common/NOTICE - mode change 100644 => 100755 vendor/github.com/prometheus/common/expfmt/decode.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/expfmt/encode.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/expfmt/expfmt.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/expfmt/fuzz.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/expfmt/openmetrics_create.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/expfmt/text_create.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/expfmt/text_parse.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt - mode change 100644 => 100755 vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/alert.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/fingerprinting.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/fnv.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/labels.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/labelset.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/metric.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/model.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/signature.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/silence.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/time.go - mode change 100644 => 100755 vendor/github.com/prometheus/common/model/value.go - create mode 100755 vendor/github.com/prometheus/procfs/.gitignore - create mode 100755 vendor/github.com/prometheus/procfs/.golangci.yml - create mode 100755 vendor/github.com/prometheus/procfs/CODE_OF_CONDUCT.md - create mode 100755 vendor/github.com/prometheus/procfs/CONTRIBUTING.md - create mode 100755 vendor/github.com/prometheus/procfs/LICENSE - create mode 100755 vendor/github.com/prometheus/procfs/MAINTAINERS.md - create mode 100755 vendor/github.com/prometheus/procfs/Makefile - create mode 100755 vendor/github.com/prometheus/procfs/Makefile.common - create mode 100755 vendor/github.com/prometheus/procfs/NOTICE - create mode 100755 vendor/github.com/prometheus/procfs/README.md - create mode 100755 vendor/github.com/prometheus/procfs/SECURITY.md - create mode 100755 vendor/github.com/prometheus/procfs/arp.go - create mode 100755 vendor/github.com/prometheus/procfs/buddyinfo.go - create mode 100755 vendor/github.com/prometheus/procfs/cmdline.go - create mode 100755 vendor/github.com/prometheus/procfs/cpuinfo.go - create mode 100755 vendor/github.com/prometheus/procfs/cpuinfo_armx.go - create mode 100755 vendor/github.com/prometheus/procfs/cpuinfo_mipsx.go - create mode 100755 vendor/github.com/prometheus/procfs/cpuinfo_others.go - create mode 100755 vendor/github.com/prometheus/procfs/cpuinfo_ppcx.go - create mode 100755 vendor/github.com/prometheus/procfs/cpuinfo_riscvx.go - create mode 100755 vendor/github.com/prometheus/procfs/cpuinfo_s390x.go - create mode 100755 vendor/github.com/prometheus/procfs/cpuinfo_x86.go - create mode 100755 vendor/github.com/prometheus/procfs/crypto.go - create mode 100755 vendor/github.com/prometheus/procfs/doc.go - create mode 100755 vendor/github.com/prometheus/procfs/fs.go - create mode 100755 vendor/github.com/prometheus/procfs/fscache.go - create mode 100755 vendor/github.com/prometheus/procfs/internal/fs/fs.go - create mode 100755 vendor/github.com/prometheus/procfs/internal/util/parse.go - create mode 100755 vendor/github.com/prometheus/procfs/internal/util/readfile.go - create mode 100755 vendor/github.com/prometheus/procfs/internal/util/sysreadfile.go - create mode 100755 vendor/github.com/prometheus/procfs/internal/util/sysreadfile_compat.go - create mode 100755 vendor/github.com/prometheus/procfs/internal/util/valueparser.go - create mode 100755 vendor/github.com/prometheus/procfs/ipvs.go - create mode 100755 vendor/github.com/prometheus/procfs/kernel_random.go - create mode 100755 vendor/github.com/prometheus/procfs/loadavg.go - create mode 100755 vendor/github.com/prometheus/procfs/mdstat.go - create mode 100755 vendor/github.com/prometheus/procfs/meminfo.go - create mode 100755 vendor/github.com/prometheus/procfs/mountinfo.go - create mode 100755 vendor/github.com/prometheus/procfs/mountstats.go - create mode 100755 vendor/github.com/prometheus/procfs/net_conntrackstat.go - create mode 100755 vendor/github.com/prometheus/procfs/net_dev.go - create mode 100755 vendor/github.com/prometheus/procfs/net_ip_socket.go - create mode 100755 vendor/github.com/prometheus/procfs/net_protocols.go - create mode 100755 vendor/github.com/prometheus/procfs/net_sockstat.go - create mode 100755 vendor/github.com/prometheus/procfs/net_softnet.go - create mode 100755 vendor/github.com/prometheus/procfs/net_tcp.go - create mode 100755 vendor/github.com/prometheus/procfs/net_udp.go - create mode 100755 vendor/github.com/prometheus/procfs/net_unix.go - create mode 100755 vendor/github.com/prometheus/procfs/net_xfrm.go - create mode 100755 vendor/github.com/prometheus/procfs/netstat.go - create mode 100755 vendor/github.com/prometheus/procfs/proc.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_cgroup.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_cgroups.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_environ.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_fdinfo.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_io.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_limits.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_maps.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_netstat.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_ns.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_psi.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_smaps.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_snmp.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_snmp6.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_stat.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_status.go - create mode 100755 vendor/github.com/prometheus/procfs/proc_sys.go - create mode 100755 vendor/github.com/prometheus/procfs/schedstat.go - create mode 100755 vendor/github.com/prometheus/procfs/slab.go - create mode 100755 vendor/github.com/prometheus/procfs/softirqs.go - create mode 100755 vendor/github.com/prometheus/procfs/stat.go - create mode 100755 vendor/github.com/prometheus/procfs/swaps.go - create mode 100755 vendor/github.com/prometheus/procfs/ttar - create mode 100755 vendor/github.com/prometheus/procfs/vm.go - create mode 100755 vendor/github.com/prometheus/procfs/zoneinfo.go - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/.gitignore - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/.golangci.yml - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/CHANGELOG - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/CONTRIBUTING.md - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/LICENSE - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/Makefile - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/README.md - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/SECURITY.md - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/seccomp.go - mode change 100644 => 100755 vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/.gitignore - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/.golangci.yml - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/.travis.yml - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/CHANGELOG.md - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/LICENSE - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/README.md - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/alt_exit.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/appveyor.yml - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/buffer_pool.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/doc.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/entry.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/exported.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/formatter.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/hooks.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/json_formatter.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/logger.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/logrus.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/terminal_check_appengine.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/terminal_check_bsd.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/terminal_check_js.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/terminal_check_solaris.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/terminal_check_unix.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/terminal_check_windows.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/text_formatter.go - mode change 100644 => 100755 vendor/github.com/sirupsen/logrus/writer.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/LICENSE - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertion_compare.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertion_compare_can_convert.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertion_compare_legacy.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertion_format.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertion_forward.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertion_order.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/assertions.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/doc.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/errors.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/forward_assertions.go - mode change 100644 => 100755 vendor/github.com/stretchr/testify/assert/http_assertions.go - mode change 100644 => 100755 vendor/github.com/syndtr/gocapability/LICENSE - mode change 100644 => 100755 vendor/github.com/syndtr/gocapability/capability/capability.go - mode change 100644 => 100755 vendor/github.com/syndtr/gocapability/capability/capability_linux.go - mode change 100644 => 100755 vendor/github.com/syndtr/gocapability/capability/capability_noop.go - mode change 100644 => 100755 vendor/github.com/syndtr/gocapability/capability/enum.go - mode change 100644 => 100755 vendor/github.com/syndtr/gocapability/capability/enum_gen.go - mode change 100644 => 100755 vendor/github.com/syndtr/gocapability/capability/syscall_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/.gitignore - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/.travis.yml - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/CHANGELOG.md - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/LICENSE - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/Makefile - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/README.md - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/addr.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/addr_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/bpf_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/bridge_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/class.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/class_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/conntrack_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/conntrack_unspecified.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/devlink_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/filter.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/filter_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/fou.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/fou_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/fou_unspecified.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/genetlink_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/genetlink_unspecified.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/gtp_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/handle_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/handle_unspecified.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/ioctl_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/link.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/link_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/link_tuntap_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/neigh.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/neigh_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/netlink.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/netlink_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/netlink_unspecified.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/netns_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/netns_unspecified.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/addr_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/bridge_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/devlink_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/link_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/mpls_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/nl_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/rdma_link_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/route_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/seg6_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/seg6local_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/syscall.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/tc_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/order.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/protinfo.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/protinfo_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/qdisc.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/qdisc_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/rdma_link_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/route.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/route_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/route_unspecified.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/rule.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/rule_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/socket.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/socket_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/xfrm.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/xfrm_policy.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/xfrm_state.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netlink/xfrm_state_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netns/LICENSE - mode change 100644 => 100755 vendor/github.com/vishvananda/netns/README.md - mode change 100644 => 100755 vendor/github.com/vishvananda/netns/netns.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netns/netns_linux.go - mode change 100644 => 100755 vendor/github.com/vishvananda/netns/netns_unspecified.go - delete mode 100644 vendor/golang.org/x/crypto/AUTHORS - delete mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS - mode change 100644 => 100755 vendor/golang.org/x/crypto/LICENSE - mode change 100644 => 100755 vendor/golang.org/x/crypto/PATENTS - mode change 100644 => 100755 vendor/golang.org/x/crypto/ssh/terminal/terminal.go - mode change 100644 => 100755 vendor/golang.org/x/net/LICENSE - mode change 100644 => 100755 vendor/golang.org/x/net/PATENTS - mode change 100644 => 100755 vendor/golang.org/x/net/bpf/asm.go - mode change 100644 => 100755 vendor/golang.org/x/net/bpf/constants.go - mode change 100644 => 100755 vendor/golang.org/x/net/bpf/doc.go - mode change 100644 => 100755 vendor/golang.org/x/net/bpf/instructions.go - mode change 100644 => 100755 vendor/golang.org/x/net/bpf/setter.go - mode change 100644 => 100755 vendor/golang.org/x/net/bpf/vm.go - mode change 100644 => 100755 vendor/golang.org/x/net/bpf/vm_instructions.go - mode change 100644 => 100755 vendor/golang.org/x/net/context/context.go - delete mode 100644 vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go - mode change 100644 => 100755 vendor/golang.org/x/net/context/go17.go - mode change 100644 => 100755 vendor/golang.org/x/net/context/go19.go - mode change 100644 => 100755 vendor/golang.org/x/net/context/pre_go17.go - mode change 100644 => 100755 vendor/golang.org/x/net/context/pre_go19.go - mode change 100644 => 100755 vendor/golang.org/x/net/http/httpguts/guts.go - mode change 100644 => 100755 vendor/golang.org/x/net/http/httpguts/httplex.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/.gitignore - delete mode 100644 vendor/golang.org/x/net/http2/Dockerfile - delete mode 100644 vendor/golang.org/x/net/http2/Makefile - mode change 100644 => 100755 vendor/golang.org/x/net/http2/ascii.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/ciphers.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/client_conn_pool.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/databuffer.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/errors.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/flow.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/frame.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/go111.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/go115.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/go118.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/gotrack.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/headermap.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/hpack/encode.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/hpack/hpack.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/hpack/huffman.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/hpack/static_table.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/hpack/tables.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/http2.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/not_go111.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/not_go115.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/not_go118.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/pipe.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/server.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/transport.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/write.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/writesched.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/writesched_priority.go - mode change 100644 => 100755 vendor/golang.org/x/net/http2/writesched_random.go - create mode 100755 vendor/golang.org/x/net/http2/writesched_roundrobin.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/go118.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/idna10.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/idna9.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/pre_go118.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/punycode.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/tables10.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/tables11.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/tables12.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/tables13.0.0.go - create mode 100755 vendor/golang.org/x/net/idna/tables15.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/tables9.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/trie.go - create mode 100755 vendor/golang.org/x/net/idna/trie12.0.0.go - create mode 100755 vendor/golang.org/x/net/idna/trie13.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/net/idna/trieval.go - create mode 100755 vendor/golang.org/x/net/internal/timeseries/timeseries.go - create mode 100755 vendor/golang.org/x/net/trace/events.go - create mode 100755 vendor/golang.org/x/net/trace/histogram.go - create mode 100755 vendor/golang.org/x/net/trace/trace.go - mode change 100644 => 100755 vendor/golang.org/x/oauth2/.travis.yml - delete mode 100644 vendor/golang.org/x/oauth2/AUTHORS - mode change 100644 => 100755 vendor/golang.org/x/oauth2/CONTRIBUTING.md - delete mode 100644 vendor/golang.org/x/oauth2/CONTRIBUTORS - mode change 100644 => 100755 vendor/golang.org/x/oauth2/LICENSE - mode change 100644 => 100755 vendor/golang.org/x/oauth2/README.md - mode change 100644 => 100755 vendor/golang.org/x/oauth2/internal/client_appengine.go - mode change 100644 => 100755 vendor/golang.org/x/oauth2/internal/doc.go - mode change 100644 => 100755 vendor/golang.org/x/oauth2/internal/oauth2.go - mode change 100644 => 100755 vendor/golang.org/x/oauth2/internal/token.go - mode change 100644 => 100755 vendor/golang.org/x/oauth2/internal/transport.go - mode change 100644 => 100755 vendor/golang.org/x/oauth2/oauth2.go - mode change 100644 => 100755 vendor/golang.org/x/oauth2/token.go - mode change 100644 => 100755 vendor/golang.org/x/oauth2/transport.go - mode change 100644 => 100755 vendor/golang.org/x/sys/LICENSE - mode change 100644 => 100755 vendor/golang.org/x/sys/PATENTS - delete mode 100644 vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/asm.s - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/asm_plan9_386.s - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/asm_plan9_arm.s - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/const_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/dir_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/env_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/errors_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/mkall.sh - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/mkerrors.sh - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/pwd_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/race.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/race0.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/str.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/syscall.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/syscall_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/plan9/zsysnum_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/.gitignore - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/README.md - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/affinity_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/aliases.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_aix_ppc64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_bsd_386.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_bsd_amd64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_bsd_arm.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_bsd_arm64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_386.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_amd64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_arm.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_arm64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_loong64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_riscv64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_linux_s390x.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/asm_zos_s390x.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/bluetooth_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/cap_freebsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/constants.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_aix_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_aix_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_darwin.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_dragonfly.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_freebsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_netbsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_openbsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dev_zos.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/dirent.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/endian_big.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/endian_little.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/env_unix.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/epoll_zos.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/fcntl.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/fcntl_darwin.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/fdset.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/fstatfs_zos.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/gccgo.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/gccgo_c.c - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ifreq_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ioctl_linux.go - create mode 100755 vendor/golang.org/x/sys/unix/ioctl_signed.go - rename vendor/golang.org/x/sys/unix/{ioctl.go => ioctl_unsigned.go} (77%) - mode change 100644 => 100755 - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ioctl_zos.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/mkall.sh - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/mkerrors.sh - create mode 100755 vendor/golang.org/x/sys/unix/mmap_nomremap.go - create mode 100755 vendor/golang.org/x/sys/unix/mremap.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/pagesize_unix.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/pledge_openbsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ptrace_darwin.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ptrace_ios.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/race.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/race0.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/readdirent_getdents.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/readdirent_getdirentries.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/sockcmsg_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/sockcmsg_unix.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_aix.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_aix_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_bsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_darwin.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_dragonfly.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_freebsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go - create mode 100755 vendor/golang.org/x/sys/unix/syscall_hurd.go - create mode 100755 vendor/golang.org/x/sys/unix/syscall_hurd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_illumos.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_alarm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_gc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_loong64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_netbsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_solaris.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_unix.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_unix_gc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/syscall_zos_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/sysvshm_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/sysvshm_unix.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/sysvshm_unix_other.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/timestruct.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/unveil_openbsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/xattr_bsd.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zptrace_x86_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go - create mode 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/aliases.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/dll_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/empty.s - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/env_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/eventlog.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/exec_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/memory_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/mkerrors.bash - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/mkknownfolderids.bash - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/mksyscall.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/race.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/race0.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/registry/key.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/registry/mksyscall.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/registry/syscall.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/registry/value.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/security_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/service.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/setupapi_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/str.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/syscall.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/syscall_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/types_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/types_windows_386.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/types_windows_amd64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/types_windows_arm.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/types_windows_arm64.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/zerrors_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/zknownfolderids_windows.go - mode change 100644 => 100755 vendor/golang.org/x/sys/windows/zsyscall_windows.go - mode change 100644 => 100755 vendor/golang.org/x/term/CONTRIBUTING.md - mode change 100644 => 100755 vendor/golang.org/x/term/LICENSE - mode change 100644 => 100755 vendor/golang.org/x/term/PATENTS - mode change 100644 => 100755 vendor/golang.org/x/term/README.md - mode change 100644 => 100755 vendor/golang.org/x/term/codereview.cfg - mode change 100644 => 100755 vendor/golang.org/x/term/term.go - mode change 100644 => 100755 vendor/golang.org/x/term/term_plan9.go - mode change 100644 => 100755 vendor/golang.org/x/term/term_unix.go - mode change 100644 => 100755 vendor/golang.org/x/term/term_unix_bsd.go - mode change 100644 => 100755 vendor/golang.org/x/term/term_unix_other.go - mode change 100644 => 100755 vendor/golang.org/x/term/term_unsupported.go - mode change 100644 => 100755 vendor/golang.org/x/term/term_windows.go - mode change 100644 => 100755 vendor/golang.org/x/term/terminal.go - mode change 100644 => 100755 vendor/golang.org/x/text/LICENSE - mode change 100644 => 100755 vendor/golang.org/x/text/PATENTS - mode change 100644 => 100755 vendor/golang.org/x/text/secure/bidirule/bidirule.go - mode change 100644 => 100755 vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/transform/transform.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/bidi.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/bracket.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/core.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/prop.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go - create mode 100755 vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/bidi/trieval.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/composition.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/forminfo.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/input.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/iter.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/normalize.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/readwriter.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/tables10.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/tables11.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/tables12.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/tables13.0.0.go - create mode 100755 vendor/golang.org/x/text/unicode/norm/tables15.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/tables9.0.0.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/transform.go - mode change 100644 => 100755 vendor/golang.org/x/text/unicode/norm/trie.go - mode change 100644 => 100755 vendor/golang.org/x/time/AUTHORS - mode change 100644 => 100755 vendor/golang.org/x/time/CONTRIBUTORS - mode change 100644 => 100755 vendor/golang.org/x/time/LICENSE - mode change 100644 => 100755 vendor/golang.org/x/time/PATENTS - mode change 100644 => 100755 vendor/golang.org/x/time/rate/rate.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/LICENSE - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/api.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/api_classic.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/api_common.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/app_id.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/base/api_base.pb.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/base/api_base.proto - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/identity.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/identity_classic.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/identity_flex.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/identity_vm.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/internal.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/log/log_service.pb.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/log/log_service.proto - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/main.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/main_common.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/main_vm.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/metadata.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/net.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/regen.sh - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/transaction.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go - mode change 100644 => 100755 vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto - mode change 100644 => 100755 vendor/google.golang.org/appengine/urlfetch/urlfetch.go - create mode 100755 vendor/google.golang.org/genproto/googleapis/rpc/LICENSE - create mode 100755 vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go - create mode 100755 vendor/google.golang.org/grpc/AUTHORS - create mode 100755 vendor/google.golang.org/grpc/CODE-OF-CONDUCT.md - create mode 100755 vendor/google.golang.org/grpc/CONTRIBUTING.md - create mode 100755 vendor/google.golang.org/grpc/GOVERNANCE.md - create mode 100755 vendor/google.golang.org/grpc/LICENSE - create mode 100755 vendor/google.golang.org/grpc/MAINTAINERS.md - create mode 100755 vendor/google.golang.org/grpc/Makefile - create mode 100755 vendor/google.golang.org/grpc/NOTICE.txt - create mode 100755 vendor/google.golang.org/grpc/README.md - create mode 100755 vendor/google.golang.org/grpc/SECURITY.md - create mode 100755 vendor/google.golang.org/grpc/attributes/attributes.go - create mode 100755 vendor/google.golang.org/grpc/backoff.go - create mode 100755 vendor/google.golang.org/grpc/backoff/backoff.go - create mode 100755 vendor/google.golang.org/grpc/balancer/balancer.go - create mode 100755 vendor/google.golang.org/grpc/balancer/base/balancer.go - create mode 100755 vendor/google.golang.org/grpc/balancer/base/base.go - create mode 100755 vendor/google.golang.org/grpc/balancer/conn_state_evaluator.go - create mode 100755 vendor/google.golang.org/grpc/balancer/grpclb/state/state.go - create mode 100755 vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go - create mode 100755 vendor/google.golang.org/grpc/balancer_conn_wrappers.go - create mode 100755 vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go - create mode 100755 vendor/google.golang.org/grpc/call.go - create mode 100755 vendor/google.golang.org/grpc/channelz/channelz.go - create mode 100755 vendor/google.golang.org/grpc/clientconn.go - create mode 100755 vendor/google.golang.org/grpc/codec.go - create mode 100755 vendor/google.golang.org/grpc/codegen.sh - create mode 100755 vendor/google.golang.org/grpc/codes/code_string.go - create mode 100755 vendor/google.golang.org/grpc/codes/codes.go - create mode 100755 vendor/google.golang.org/grpc/connectivity/connectivity.go - create mode 100755 vendor/google.golang.org/grpc/credentials/credentials.go - create mode 100755 vendor/google.golang.org/grpc/credentials/insecure/insecure.go - create mode 100755 vendor/google.golang.org/grpc/credentials/tls.go - create mode 100755 vendor/google.golang.org/grpc/dialoptions.go - create mode 100755 vendor/google.golang.org/grpc/doc.go - create mode 100755 vendor/google.golang.org/grpc/encoding/encoding.go - create mode 100755 vendor/google.golang.org/grpc/encoding/proto/proto.go - create mode 100755 vendor/google.golang.org/grpc/grpclog/component.go - create mode 100755 vendor/google.golang.org/grpc/grpclog/grpclog.go - create mode 100755 vendor/google.golang.org/grpc/grpclog/logger.go - create mode 100755 vendor/google.golang.org/grpc/grpclog/loggerv2.go - create mode 100755 vendor/google.golang.org/grpc/idle.go - create mode 100755 vendor/google.golang.org/grpc/interceptor.go - create mode 100755 vendor/google.golang.org/grpc/internal/backoff/backoff.go - create mode 100755 vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go - create mode 100755 vendor/google.golang.org/grpc/internal/balancerload/load.go - create mode 100755 vendor/google.golang.org/grpc/internal/binarylog/binarylog.go - create mode 100755 vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go - create mode 100755 vendor/google.golang.org/grpc/internal/binarylog/env_config.go - create mode 100755 vendor/google.golang.org/grpc/internal/binarylog/method_logger.go - create mode 100755 vendor/google.golang.org/grpc/internal/binarylog/sink.go - create mode 100755 vendor/google.golang.org/grpc/internal/buffer/unbounded.go - create mode 100755 vendor/google.golang.org/grpc/internal/channelz/funcs.go - create mode 100755 vendor/google.golang.org/grpc/internal/channelz/id.go - create mode 100755 vendor/google.golang.org/grpc/internal/channelz/logging.go - create mode 100755 vendor/google.golang.org/grpc/internal/channelz/types.go - create mode 100755 vendor/google.golang.org/grpc/internal/channelz/types_linux.go - create mode 100755 vendor/google.golang.org/grpc/internal/channelz/types_nonlinux.go - create mode 100755 vendor/google.golang.org/grpc/internal/channelz/util_linux.go - create mode 100755 vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go - create mode 100755 vendor/google.golang.org/grpc/internal/credentials/credentials.go - create mode 100755 vendor/google.golang.org/grpc/internal/credentials/spiffe.go - create mode 100755 vendor/google.golang.org/grpc/internal/credentials/syscallconn.go - create mode 100755 vendor/google.golang.org/grpc/internal/credentials/util.go - create mode 100755 vendor/google.golang.org/grpc/internal/envconfig/envconfig.go - create mode 100755 vendor/google.golang.org/grpc/internal/envconfig/observability.go - create mode 100755 vendor/google.golang.org/grpc/internal/envconfig/xds.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpclog/grpclog.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcsync/event.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcutil/compressor.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcutil/grpcutil.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcutil/metadata.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcutil/method.go - create mode 100755 vendor/google.golang.org/grpc/internal/grpcutil/regex.go - create mode 100755 vendor/google.golang.org/grpc/internal/internal.go - create mode 100755 vendor/google.golang.org/grpc/internal/metadata/metadata.go - create mode 100755 vendor/google.golang.org/grpc/internal/pretty/pretty.go - create mode 100755 vendor/google.golang.org/grpc/internal/resolver/config_selector.go - create mode 100755 vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go - create mode 100755 vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go - create mode 100755 vendor/google.golang.org/grpc/internal/resolver/unix/unix.go - create mode 100755 vendor/google.golang.org/grpc/internal/serviceconfig/duration.go - create mode 100755 vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go - create mode 100755 vendor/google.golang.org/grpc/internal/status/status.go - create mode 100755 vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go - create mode 100755 vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/controlbuf.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/defaults.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/flowcontrol.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/handler_server.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/http2_client.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/http2_server.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/http_util.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/logging.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/proxy.go - create mode 100755 vendor/google.golang.org/grpc/internal/transport/transport.go - create mode 100755 vendor/google.golang.org/grpc/internal/xds_handshake_cluster.go - create mode 100755 vendor/google.golang.org/grpc/keepalive/keepalive.go - create mode 100755 vendor/google.golang.org/grpc/metadata/metadata.go - create mode 100755 vendor/google.golang.org/grpc/peer/peer.go - create mode 100755 vendor/google.golang.org/grpc/picker_wrapper.go - create mode 100755 vendor/google.golang.org/grpc/pickfirst.go - create mode 100755 vendor/google.golang.org/grpc/preloader.go - create mode 100755 vendor/google.golang.org/grpc/regenerate.sh - create mode 100755 vendor/google.golang.org/grpc/resolver/map.go - create mode 100755 vendor/google.golang.org/grpc/resolver/resolver.go - create mode 100755 vendor/google.golang.org/grpc/resolver_conn_wrapper.go - create mode 100755 vendor/google.golang.org/grpc/rpc_util.go - create mode 100755 vendor/google.golang.org/grpc/server.go - create mode 100755 vendor/google.golang.org/grpc/service_config.go - create mode 100755 vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go - create mode 100755 vendor/google.golang.org/grpc/shared_buffer_pool.go - create mode 100755 vendor/google.golang.org/grpc/stats/handlers.go - create mode 100755 vendor/google.golang.org/grpc/stats/stats.go - create mode 100755 vendor/google.golang.org/grpc/status/status.go - create mode 100755 vendor/google.golang.org/grpc/stream.go - create mode 100755 vendor/google.golang.org/grpc/tap/tap.go - create mode 100755 vendor/google.golang.org/grpc/trace.go - create mode 100755 vendor/google.golang.org/grpc/version.go - create mode 100755 vendor/google.golang.org/grpc/vet.sh - mode change 100644 => 100755 vendor/google.golang.org/protobuf/LICENSE - mode change 100644 => 100755 vendor/google.golang.org/protobuf/PATENTS - create mode 100755 vendor/google.golang.org/protobuf/encoding/protojson/decode.go - create mode 100755 vendor/google.golang.org/protobuf/encoding/protojson/doc.go - create mode 100755 vendor/google.golang.org/protobuf/encoding/protojson/encode.go - create mode 100755 vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/encoding/prototext/decode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/encoding/prototext/doc.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/encoding/prototext/encode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/encoding/protowire/wire.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/descfmt/stringer.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/descopts/options.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/detrand/rand.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/defval/default.go - create mode 100755 vendor/google.golang.org/protobuf/internal/encoding/json/decode.go - create mode 100755 vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go - create mode 100755 vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go - create mode 100755 vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go - create mode 100755 vendor/google.golang.org/protobuf/internal/encoding/json/encode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/text/decode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/text/doc.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/encoding/text/encode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/errors/errors.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/errors/is_go112.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/errors/is_go113.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/filedesc/build.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/filedesc/desc.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/filetype/build.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/flags/flags.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/any_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/api_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/doc.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/duration_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/empty_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/goname.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/map_entry.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/struct_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/type_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/wrappers.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/api_export.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/checkinit.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_extension.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_field.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_map.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_message.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_tables.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/convert.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/convert_list.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/convert_map.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/decode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/encode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/enum.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/extension.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/legacy_export.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/legacy_file.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/legacy_message.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/merge.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/merge_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/message.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/message_reflect.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/validate.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/impl/weak.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/order/order.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/order/range.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/pragma/pragma.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/set/ints.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/strs/strings.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/strs/strings_pure.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/internal/version/version.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/checkinit.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/decode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/decode_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/doc.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/encode.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/encode_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/equal.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/extension.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/merge.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/messageset.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/proto.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/proto_methods.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/proto_reflect.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/reset.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/size.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/size_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/proto/wrappers.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protodesc/desc.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protodesc/proto.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/source.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/type.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/value.go - create mode 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/runtime/protoiface/methods.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/runtime/protoimpl/version.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go - mode change 100644 => 100755 vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go - mode change 100644 => 100755 vendor/gopkg.in/inf.v0/LICENSE - mode change 100644 => 100755 vendor/gopkg.in/inf.v0/dec.go - mode change 100644 => 100755 vendor/gopkg.in/inf.v0/rounder.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/.travis.yml - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/LICENSE - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/LICENSE.libyaml - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/NOTICE - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/README.md - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/apic.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/decode.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/emitterc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/encode.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/parserc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/readerc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/resolve.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/scannerc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/sorter.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/writerc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/yaml.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/yamlh.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v2/yamlprivateh.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/LICENSE - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/NOTICE - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/README.md - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/apic.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/decode.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/emitterc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/encode.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/parserc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/readerc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/resolve.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/scannerc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/sorter.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/writerc.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/yaml.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/yamlh.go - mode change 100644 => 100755 vendor/gopkg.in/yaml.v3/yamlprivateh.go - mode change 100644 => 100755 vendor/k8s.io/api/LICENSE - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/apiserverinternal/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/apiserverinternal/v1alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/apiserverinternal/v1alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/apiserverinternal/v1alpha1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/apiserverinternal/v1alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta2/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta2/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta2/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta2/register.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta2/types.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/apps/v1beta2/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/authentication/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/authorization/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta2/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta2/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta2/register.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta2/types.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta2/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v2alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v2alpha1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v2alpha1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/batch/v2alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v2alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/certificates/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/coordination/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/annotation_key_constants.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/objectreference.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/resource.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/taint.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/toleration.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/well_known_labels.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/well_known_taints.go - mode change 100644 => 100755 vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1alpha1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/well_known_labels.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/events/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/events/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/events/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/extensions/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/extensions/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/extensions/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/extensions/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/extensions/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/extensions/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1alpha1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/flowcontrol/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/well_known_annotations.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/networking/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/node/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1alpha1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1alpha1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/node/v1alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/node/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/node/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/policy/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/policy/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/policy/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/policy/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/policy/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1alpha1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1alpha1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/rbac/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1alpha1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1alpha1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/scheduling/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1alpha1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1alpha1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/LICENSE - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/errors/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/errors/errors.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/errors.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/firsthit_restmapper.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/help.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/interfaces.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/lazy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/meta.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/priority.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/amount.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/math.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/scale_int.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/suffix.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/controller_ref.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/group_version.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/labels.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_fuzz.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_proto.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_fuzz.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/watch.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.defaults.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/conversion/converter.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/conversion/deep_equal.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/conversion/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/conversion/helper.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/conversion/queryparams/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/fields/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/fields/fields.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/fields/requirements.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/fields/selector.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/labels/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/labels/labels.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/labels/selector.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/labels/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/codec.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/codec_check.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/conversion.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/converter.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/embedded.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/error.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/extension.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/generated.proto - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/helper.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/mapper.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/negotiate.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/register.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/schema/interfaces.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/scheme.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/scheme_builder.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/codec_factory.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/meta.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/negotiated_codec.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer/recognizer.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming/streaming.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/swagger_doc_generator.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/types.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/types_proto.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/selection/operator.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/types/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/types/namespacedname.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/types/nodename.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/types/patch.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/types/uid.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/cache/expiring.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/clock/clock.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/diff/diff.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/errors/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/errors/errors.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/framer/framer.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/intstr/instr_fuzz.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/json/json.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/net/http.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/net/interface.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/net/port_range.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/net/port_split.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/net/util.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/sets/byte.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/sets/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/sets/empty.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/sets/int.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/sets/int32.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/sets/int64.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/sets/string.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/validation/field/path.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/validation/validation.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/wait/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/wait/wait.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/version/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/version/helpers.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/version/types.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/watch/doc.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/watch/filter.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/watch/mux.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/watch/watch.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/apimachinery/third_party/forked/golang/reflect/deep_equal.go - mode change 100644 => 100755 vendor/k8s.io/client-go/LICENSE - mode change 100644 => 100755 vendor/k8s.io/client-go/discovery/discovery_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/discovery/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/discovery/helper.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/admissionregistration/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/admissionregistration/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/admissionregistration/v1/mutatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apiserverinternal/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/storageversion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/autoscaling/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/autoscaling/v2beta2/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/autoscaling/v2beta2/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/batch/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/batch/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/batch/v1/job.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/batch/v2alpha1/cronjob.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/batch/v2alpha1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/certificates/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/certificates/v1/certificatesigningrequest.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/certificates/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/coordination/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/coordination/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/coordination/v1/lease.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/componentstatus.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/configmap.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/endpoints.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/limitrange.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/namespace.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/node.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/pod.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/podtemplate.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/resourcequota.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/secret.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/service.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/discovery/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/discovery/v1alpha1/endpointslice.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/discovery/v1alpha1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/discovery/v1beta1/endpointslice.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/discovery/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/events/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/events/v1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/events/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/events/v1beta1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/events/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/extensions/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/extensions/v1beta1/podsecuritypolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/factory.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/flowcontrol/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/flowschema.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/prioritylevelconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/flowschema.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/prioritylevelconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/generic.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/networking/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/networking/v1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/networking/v1/ingressclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/networking/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/networking/v1beta1/ingressclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/node/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/node/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/node/v1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/node/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/policy/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/scheduling/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/scheduling/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/scheduling/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/scheduling/v1beta1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1/csidriver.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1/csinode.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1/storageclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1alpha1/csistoragecapacity.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/clientset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/import.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/scheme/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/scheme/register.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/mutatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/validatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/apiserverinternal_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/storageversion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/tokenreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/tokenreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/localsubjectaccessreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectaccessreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectrulesreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/subjectaccessreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/localsubjectaccessreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectaccessreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectrulesreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/subjectaccessreview.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/certificates_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/certificatesigningrequest.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/event_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/node_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/service_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/discovery_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/endpointslice.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/discovery_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/endpointslice.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowcontrol_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowschema.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/prioritylevelconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowcontrol_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowschema.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/prioritylevelconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingressclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingressclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1/node_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/csidriver.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/csinode.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/csistoragecapacity.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/admissionregistration/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/admissionregistration/v1/mutatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/storageversion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/daemonset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/replicaset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1/statefulset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/autoscaling/v2beta2/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/autoscaling/v2beta2/horizontalpodautoscaler.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/batch/v1/job.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/batch/v1/job_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/batch/v2alpha1/cronjob.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/batch/v2alpha1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/certificates/v1/certificatesigningrequest.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/certificates/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/coordination/v1/lease.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/componentstatus.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/configmap.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/endpoints.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/limitrange.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/namespace.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/node.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/pod.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/podtemplate.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/replicationcontroller_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/resourcequota.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/secret.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/service.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/discovery/v1alpha1/endpointslice.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/discovery/v1alpha1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/discovery/v1beta1/endpointslice.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/discovery/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/events/v1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/events/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/events/v1beta1/event.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/podsecuritypolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/flowschema.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/prioritylevelconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/flowschema.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/prioritylevelconfiguration.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/networking/v1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/networking/v1/ingressclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/networking/v1beta1/ingressclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/node/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/node/v1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget_expansion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/scheduling/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/scheduling/v1beta1/priorityclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1/csidriver.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1/csinode.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1/storageclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1alpha1/csistoragecapacity.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go - mode change 100644 => 100755 vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/conversion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/conversion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/register.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/types.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.conversion.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.defaults.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/version/.gitattributes - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/version/base.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/version/def.bzl - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/version/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/pkg/version/version.go - mode change 100644 => 100755 vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go - mode change 100644 => 100755 vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/OWNERS - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/client.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/config.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/exec.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/plugin.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/request.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/transport.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/url_utils.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/urlbackoff.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/warnings.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/watch/decoder.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/watch/encoder.go - mode change 100644 => 100755 vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/OWNERS - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/controller.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/delta_fifo.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/expiration_cache.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/expiration_cache_fakes.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/fake_custom_store.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/fifo.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/heap.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/index.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/listers.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/listwatch.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/mutation_cache.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/mutation_detector.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/reflector.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/reflector_metrics.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/shared_informer.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/store.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/thread_safe_store.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/cache/undelta_store.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/clientcmd/api/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/clientcmd/api/register.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/clientcmd/api/types.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/metrics/OWNERS - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/metrics/metrics.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/pager/pager.go - mode change 100644 => 100755 vendor/k8s.io/client-go/tools/reference/ref.go - mode change 100644 => 100755 vendor/k8s.io/client-go/transport/OWNERS - mode change 100644 => 100755 vendor/k8s.io/client-go/transport/cache.go - mode change 100644 => 100755 vendor/k8s.io/client-go/transport/cert_rotation.go - mode change 100644 => 100755 vendor/k8s.io/client-go/transport/config.go - mode change 100644 => 100755 vendor/k8s.io/client-go/transport/round_trippers.go - mode change 100644 => 100755 vendor/k8s.io/client-go/transport/token_source.go - mode change 100644 => 100755 vendor/k8s.io/client-go/transport/transport.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/cert/OWNERS - mode change 100644 => 100755 vendor/k8s.io/client-go/util/cert/cert.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/cert/csr.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/cert/io.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/cert/pem.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/cert/server_inspection.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/connrotation/connrotation.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/flowcontrol/backoff.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/flowcontrol/throttle.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/keyutil/OWNERS - mode change 100644 => 100755 vendor/k8s.io/client-go/util/keyutil/key.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/workqueue/delaying_queue.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/workqueue/doc.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/workqueue/metrics.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/workqueue/parallelizer.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/workqueue/queue.go - mode change 100644 => 100755 vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go - create mode 100755 vendor/k8s.io/cri-api/LICENSE - create mode 100755 vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go - create mode 100755 vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto - create mode 100755 vendor/k8s.io/cri-api/pkg/apis/runtime/v1/constants.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/.gitignore - mode change 100644 => 100755 vendor/k8s.io/klog/v2/CONTRIBUTING.md - mode change 100644 => 100755 vendor/k8s.io/klog/v2/LICENSE - mode change 100644 => 100755 vendor/k8s.io/klog/v2/OWNERS - mode change 100644 => 100755 vendor/k8s.io/klog/v2/README.md - mode change 100644 => 100755 vendor/k8s.io/klog/v2/RELEASE.md - mode change 100644 => 100755 vendor/k8s.io/klog/v2/SECURITY.md - mode change 100644 => 100755 vendor/k8s.io/klog/v2/SECURITY_CONTACTS - mode change 100644 => 100755 vendor/k8s.io/klog/v2/code-of-conduct.md - mode change 100644 => 100755 vendor/k8s.io/klog/v2/contextual.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/exit.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/imports.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/internal/buffer/buffer.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/internal/clock/README.md - mode change 100644 => 100755 vendor/k8s.io/klog/v2/internal/clock/clock.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/internal/dbg/dbg.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/internal/serialize/keyvalues.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/internal/severity/severity.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/k8s_references.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/klog.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/klog_file.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/klog_file_others.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/klog_file_windows.go - mode change 100644 => 100755 vendor/k8s.io/klog/v2/klogr.go - mode change 100644 => 100755 vendor/k8s.io/utils/LICENSE - mode change 100644 => 100755 vendor/k8s.io/utils/buffer/ring_growing.go - mode change 100644 => 100755 vendor/k8s.io/utils/clock/README.md - mode change 100644 => 100755 vendor/k8s.io/utils/clock/clock.go - mode change 100644 => 100755 vendor/k8s.io/utils/inotify/LICENSE - mode change 100644 => 100755 vendor/k8s.io/utils/inotify/PATENTS - mode change 100644 => 100755 vendor/k8s.io/utils/inotify/README.md - mode change 100644 => 100755 vendor/k8s.io/utils/inotify/inotify.go - mode change 100644 => 100755 vendor/k8s.io/utils/inotify/inotify_linux.go - mode change 100644 => 100755 vendor/k8s.io/utils/inotify/inotify_others.go - mode change 100644 => 100755 vendor/k8s.io/utils/integer/integer.go - mode change 100644 => 100755 vendor/k8s.io/utils/trace/README.md - mode change 100644 => 100755 vendor/k8s.io/utils/trace/trace.go - mode change 100644 => 100755 vendor/modules.txt - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/LICENSE - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/allocator.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/doc.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/fields.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/jsontagutil.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/list.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/listreflect.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/listunstructured.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/map.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapreflect.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapunstructured.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/reflectcache.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/scalar.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/structreflect.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/value.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/valuereflect.go - mode change 100644 => 100755 vendor/sigs.k8s.io/structured-merge-diff/v4/value/valueunstructured.go - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/.gitignore - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/.travis.yml - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/CONTRIBUTING.md - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/LICENSE - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/OWNERS - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/README.md - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/RELEASE.md - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/SECURITY_CONTACTS - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/code-of-conduct.md - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/fields.go - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/yaml.go - mode change 100644 => 100755 vendor/sigs.k8s.io/yaml/yaml_go110.go - -diff --git a/go.mod b/go.mod -old mode 100644 -new mode 100755 -index fe03728..283c415 ---- a/go.mod -+++ b/go.mod -@@ -3,30 +3,35 @@ module isula.org/rubik - go 1.17 - - require ( -+ github.com/containerd/nri v0.6.1 - github.com/cyphar/filepath-securejoin v0.2.3 - github.com/google/cadvisor v0.47.1 -- github.com/google/uuid v1.1.2 -+ github.com/google/uuid v1.3.0 - github.com/pkg/errors v0.9.1 -+ github.com/prometheus/client_golang v1.14.0 - github.com/stretchr/testify v1.8.0 -- golang.org/x/sys v0.3.0 -+ golang.org/x/sys v0.13.0 - k8s.io/api v0.20.2 - k8s.io/apimachinery v0.20.2 - k8s.io/client-go v0.20.2 - ) - - require ( -+ github.com/beorn7/perks v1.0.1 // indirect -+ github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/checkpoint-restore/go-criu/v5 v5.3.0 // indirect - github.com/cilium/ebpf v0.7.0 // indirect - github.com/containerd/console v1.0.3 // indirect -+ github.com/containerd/ttrpc v1.2.3 // indirect - github.com/coreos/go-systemd/v22 v22.3.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/go-units v0.5.0 // indirect - github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect -- github.com/go-logr/logr v1.2.0 // indirect -+ github.com/go-logr/logr v1.2.3 // indirect - github.com/godbus/dbus/v5 v5.0.6 // indirect - github.com/gogo/protobuf v1.3.2 // indirect -- github.com/golang/protobuf v1.5.2 // indirect -- github.com/google/go-cmp v0.5.8 // indirect -+ github.com/golang/protobuf v1.5.3 // indirect -+ github.com/google/go-cmp v0.5.9 // indirect - github.com/google/gofuzz v1.1.0 // indirect - github.com/googleapis/gnostic v0.4.1 // indirect - github.com/hashicorp/golang-lru v0.5.1 // indirect -@@ -44,26 +49,30 @@ require ( - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect -+ github.com/prometheus/procfs v0.8.0 // indirect - github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 // indirect - github.com/sirupsen/logrus v1.8.1 // indirect - github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect - github.com/vishvananda/netlink v1.1.0 // indirect - github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df // indirect -- golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect -- golang.org/x/net v0.4.0 // indirect -- golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect -- golang.org/x/term v0.3.0 // indirect -- golang.org/x/text v0.5.0 // indirect -+ golang.org/x/crypto v0.14.0 // indirect -+ golang.org/x/net v0.17.0 // indirect -+ golang.org/x/oauth2 v0.7.0 // indirect -+ golang.org/x/term v0.13.0 // indirect -+ golang.org/x/text v0.13.0 // indirect - golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e // indirect - google.golang.org/appengine v1.6.7 // indirect -- google.golang.org/protobuf v1.28.1 // indirect -+ google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d // indirect -+ google.golang.org/grpc v1.57.1 // indirect -+ google.golang.org/protobuf v1.31.0 // indirect - gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -+ k8s.io/cri-api v0.25.3 // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/utils v0.0.0-20211116205334-6203023598ed // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.0.2 // indirect -- sigs.k8s.io/yaml v1.2.0 // indirect -+ sigs.k8s.io/yaml v1.3.0 // indirect - ) - - replace github.com/cyphar/filepath-securejoin => github.com/cyphar/filepath-securejoin v0.2.2 -diff --git a/go.sum b/go.sum -old mode 100644 -new mode 100755 -index 2eeecdd..369c6df ---- a/go.sum -+++ b/go.sum -@@ -71,13 +71,18 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l - github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= - github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= - github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= - github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= - github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= - github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= - github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -+github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= - github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= - github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -+github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= - github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -+github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= - github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= - github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= - github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -@@ -96,8 +101,12 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH - github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= - github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= - github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -+github.com/containerd/nri v0.6.1 h1:xSQ6elnQ4Ynidm9u49ARK9wRKHs80HCUI+bkXOxV4mA= -+github.com/containerd/nri v0.6.1/go.mod h1:7+sX3wNx+LR7RzhjnJiUkFDhn18P5Bg/0VnJ/uXpRJM= - github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= - github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= -+github.com/containerd/ttrpc v1.2.3 h1:4jlhbXIGvijRtNC8F/5CpuJZ7yKOBFGFOOXg1bkISz0= -+github.com/containerd/ttrpc v1.2.3/go.mod h1:ieWsXucbb8Mj9PH0rXCw1i8IunRbbAiDkpXkbfflWBM= - github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= - github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= - github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -@@ -156,6 +165,8 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7 - github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= - github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= - github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -+github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -+github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= - github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= - github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= - github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -@@ -204,6 +215,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS - github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= - github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= - github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -+github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= - github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= - github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= - github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -@@ -223,6 +236,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ - github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= - github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= - github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -+github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= - github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= - github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= - github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -@@ -248,6 +263,8 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 - 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= -+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= - github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= - github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= - github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -@@ -344,6 +361,7 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn - github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= - github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= - github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -+github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= - github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= - github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= - github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -@@ -362,6 +380,7 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT - github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= - github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= - github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -+github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= - github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= - github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= - github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -@@ -426,6 +445,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh - golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= - golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= - golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -+golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= - golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= - golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= - golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -@@ -508,6 +529,8 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su - golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= - golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= - golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= - golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= - golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= - golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -@@ -525,6 +548,8 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ - golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= - golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= - golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -+golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -+golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= - golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= - golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= - golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -@@ -610,10 +635,14 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc - golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= - golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= - golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= - golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= - golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= - golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -+golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= - 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= -@@ -626,6 +655,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= - golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= - golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= - golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -+golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= - golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= - golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= - golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -@@ -785,6 +816,8 @@ google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEc - google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= - google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 h1:hrbNEivu7Zn1pxvHk6MBrq9iE22woVILTHqexqBxe6I= - google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -+google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d h1:pgIUhmqwKOUlnKna4r6amKdUngdL8DrkpFeV8+VBElY= -+google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= - google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= - google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= - google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -@@ -813,6 +846,8 @@ google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9K - google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= - google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= - google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -+google.golang.org/grpc v1.57.1 h1:upNTNqv0ES+2ZOOqACwVtS3Il8M12/+Hz41RCPzAjQg= -+google.golang.org/grpc v1.57.1/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= - google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= - google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -@@ -830,6 +865,8 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ - google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= - google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= - google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -+google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -+google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= - gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= - gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -@@ -866,6 +903,8 @@ k8s.io/apimachinery v0.20.2 h1:hFx6Sbt1oG0n6DZ+g4bFt5f6BoMkOjKWsQFu077M3Vg= - k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= - k8s.io/client-go v0.20.2 h1:uuf+iIAbfnCSw8IGAv/Rg0giM+2bOzHLOsbbrwrdhNQ= - k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE= -+k8s.io/cri-api v0.25.3 h1:YaiQ05CM4+5L2DAz0KoSa4sv4/VlQvLbf3WHKICPSXs= -+k8s.io/cri-api v0.25.3/go.mod h1:riC/P0yOGUf2K1735wW+CXs1aY2ctBgePtnnoFLd0dU= - k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= - k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= - k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -@@ -883,3 +922,5 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK - 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= -+sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -+sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -diff --git a/pkg/api/api.go b/pkg/api/api.go -index 30822a9..dc8254d 100644 ---- a/pkg/api/api.go -+++ b/pkg/api/api.go -@@ -53,4 +53,5 @@ type EventHandler interface { - type Informer interface { - Publisher - Start(ctx context.Context) -+ WaitReady() - } -diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go -index 4f22ef0..5f525b3 100644 ---- a/pkg/common/constant/constant.go -+++ b/pkg/common/constant/constant.go -@@ -112,9 +112,30 @@ const ( - PSIIOCgroupFileName = "io.pressure" - ) - -+// cgroup driver - const ( - // CgroupDriverSystemd is global config for cgroupfs driver choice: systemd driver - CgroupDriverSystemd = "systemd" - // CgroupDriverCgroupfs is global config for cgroupfs driver choice: cgroupfs driver - CgroupDriverCgroupfs = "cgroupfs" - ) -+ -+// container engine -+const ( -+ // ContainerEngineCrio is name of crio container engine -+ ContainerEngineCrio = "crio" -+ // ContainerEngineContainerd is name of containerd container engine -+ ContainerEngineContainerd = "cri-containerd" -+ // ContainerEngineIsula is name of isula container engine -+ ContainerEngineIsula = "isula" -+ // ContainerEngineDocker is name of docker container engine -+ ContainerEngineDocker = "docker" -+) -+ -+// informer type -+const ( -+ // APIServerInformer is global config for informerType choice: informerType: "apiserver" -+ APIServerInformer = "apiserver" -+ // NRIInformer is global config for informerType choice: informerType: "nri" -+ NRIInformer = "nri" -+) -diff --git a/pkg/config/config.go b/pkg/config/config.go -index 6ae775f..05904d2 100644 ---- a/pkg/config/config.go -+++ b/pkg/config/config.go -@@ -45,6 +45,7 @@ type AgentConfig struct { - CgroupRoot string `json:"cgroupRoot,omitempty"` - EnabledFeatures []string `json:"enabledFeatures,omitempty"` - CgroupDriver string `json:"cgroupDriver,omitempty"` -+ InformerType string `json:"informerType,omitempty"` - } - - // NewConfig returns an config object pointer -@@ -58,6 +59,7 @@ func NewConfig(pType parserType) *Config { - LogDir: constant.DefaultLogDir, - CgroupRoot: constant.DefaultCgroupRoot, - CgroupDriver: constant.CgroupDriverCgroupfs, -+ InformerType: constant.APIServerInformer, - }, - } - return c -diff --git a/pkg/core/typedef/containerinfo.go b/pkg/core/typedef/containerinfo.go -index 845105f..841c800 100644 ---- a/pkg/core/typedef/containerinfo.go -+++ b/pkg/core/typedef/containerinfo.go -@@ -81,26 +81,34 @@ type ContainerInfo struct { - ID string `json:"id"` - RequestResources ResourceMap `json:"requests,omitempty"` - LimitResources ResourceMap `json:"limits,omitempty"` -+ // PodSandboxId means the id of the pod which the container belongs to -+ PodSandboxId string `json:"podisandid,omitempty"` - } - - // NewContainerInfo creates a ContainerInfo instance - func NewContainerInfo(id, podCgroupPath string, rawContainer *RawContainer) *ContainerInfo { -+ scopeName := containerEngineScopes[currentContainerEngines] - requests, limits := rawContainer.GetResourceMaps() - var path string - if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -- scopeName := containerEngineScopes[currentContainerEngines] -- path = filepath.Join(podCgroupPath, scopeName+"-"+id+".scope") -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ path = filepath.Join(podCgroupPath, scopeName+"-"+id+".scope") -+ } - } else { -- path = filepath.Join(podCgroupPath, id) -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ path = filepath.Join(podCgroupPath, id) -+ case constant.ContainerEngineCrio: -+ path = filepath.Join(podCgroupPath, scopeName+"-"+id) -+ } - } -- - return &ContainerInfo{ - Name: rawContainer.status.Name, - ID: id, - Hierarchy: cgroup.Hierarchy{Path: path}, - RequestResources: requests, -- LimitResources: limits, -- } -+ LimitResources: limits} - } - - func fixContainerEngine(containerID string) { -diff --git a/pkg/core/typedef/event.go b/pkg/core/typedef/event.go -index ee9d886..f4d7f21 100644 ---- a/pkg/core/typedef/event.go -+++ b/pkg/core/typedef/event.go -@@ -36,18 +36,36 @@ const ( - INFODELETE - // RAWPODSYNCALL means Full amount of kubernetes pods - RAWPODSYNCALL -+ // NRIPODADD means nri starts a new Pod event -+ NRIPODADD -+ // NRIPODDELETE means nri deletes Pod event -+ NRIPODDELETE -+ // NRICONTAINERCREATE means nri starts container event -+ NRICONTAINERSTART -+ // NRICONTAINERREMOVE means nri removes Container event -+ NRICONTAINERREMOVE -+ // NRIPODSYNCALL means sync all Pods event -+ NRIPODSYNCALL -+ // NRICONTAINERSYNCALL means sync all Containers event -+ NRICONTAINERSYNCALL - ) - - const undefinedType = "undefined" - - var eventTypeToString = map[EventType]string{ -- RAWPODADD: "addrawpod", -- RAWPODUPDATE: "updaterawpod", -- RAWPODDELETE: "deleterawpod", -- INFOADD: "addinfo", -- INFOUPDATE: "updateinfo", -- INFODELETE: "deleteinfo", -- RAWPODSYNCALL: "syncallrawpods", -+ RAWPODADD: "addrawpod", -+ RAWPODUPDATE: "updaterawpod", -+ RAWPODDELETE: "deleterawpod", -+ INFOADD: "addinfo", -+ INFOUPDATE: "updateinfo", -+ INFODELETE: "deleteinfo", -+ RAWPODSYNCALL: "syncallrawpods", -+ NRIPODADD: "addnripod", -+ NRIPODDELETE: "deletenripod", -+ NRICONTAINERSTART: "createnricontainer", -+ NRICONTAINERREMOVE: "removenricontainer", -+ NRIPODSYNCALL: "syncallnrirawpods", -+ NRICONTAINERSYNCALL: "syncallnrirawcontainers", - } - - // String returns the string of the current event type -diff --git a/pkg/core/typedef/nrirawpod.go b/pkg/core/typedef/nrirawpod.go -new file mode 100644 -index 0000000..0749c8a ---- /dev/null -+++ b/pkg/core/typedef/nrirawpod.go -@@ -0,0 +1,461 @@ -+// Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. -+// rubik licensed under the Mulan PSL v2. -+// You can use this software according to the terms and conditions of the Mulan PSL v2. -+// You may obtain a copy of Mulan PSL v2 at: -+// http://license.coscl.org.cn/MulanPSL2 -+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR -+// PURPOSE. -+// See the Mulan PSL v2 for more details. -+// Author: weiyuan -+// Create: 2024-05-28 -+// Description: This file defines NRIRawPod and NRIRawContainerwhich encapsulate nri pod and container info -+ -+// Package typedef defines core struct and methods for rubik -+package typedef -+ -+import ( -+ "bufio" -+ "encoding/json" -+ "fmt" -+ "io" -+ "os" -+ "path/filepath" -+ "strings" -+ -+ "github.com/containerd/nri/pkg/api" -+ "isula.org/rubik/pkg/common/constant" -+ "isula.org/rubik/pkg/core/typedef/cgroup" -+ corev1 "k8s.io/api/core/v1" -+ "k8s.io/apimachinery/pkg/api/resource" -+) -+ -+type ( -+ // NRIRawContainer is nri container structure -+ NRIRawContainer api.Container -+ // NRIRawPod is nri pod structure -+ NRIRawPod api.PodSandbox -+) -+ -+const ( -+ // nri Container Annotations "kubectl.kubernetes.io/last-applied-configuration" means container applied config -+ containerAppliedConfiguration string = "kubectl.kubernetes.io/last-applied-configuration" -+ // /proc/self/cgroup file -+ procSelfCgroupFile = "/proc/self/cgroup" -+ -+ containerSpec string = "containers" -+ resourcesSpec string = "resources" -+ nanoToMicro float64 = 1000 -+ fileMode os.FileMode = 0666 -+) -+ -+func init() { -+ setContainerEnginesOnce.Do(FixContainerEngine) -+} -+ -+// convert NRIRawPod structure to PodInfo structure -+func (pod *NRIRawPod) ConvertNRIRawPod2PodInfo() *PodInfo { -+ if pod == nil { -+ return nil -+ } -+ return &PodInfo{ -+ Hierarchy: cgroup.Hierarchy{ -+ Path: pod.CgroupPath(), -+ }, -+ Name: pod.Name, -+ UID: pod.Uid, -+ Namespace: pod.Namespace, -+ IDContainersMap: make(map[string]*ContainerInfo, 0), -+ Annotations: pod.Annotations, -+ Labels: pod.Labels, -+ ID: pod.Id, -+ } -+} -+ -+// get pod Qos -+func (pod *NRIRawPod) GetQosClass() string { -+ var podQosClass string -+ podQosClass = "Guaranteed" -+ if strings.Contains(pod.Linux.CgroupsPath, "burstable") { -+ podQosClass = "Burstable" -+ } -+ if strings.Contains(pod.Linux.CgroupsPath, "besteffort") { -+ podQosClass = "BestEffort" -+ } -+ return podQosClass -+} -+ -+// get pod cgroupPath -+func (pod *NRIRawPod) CgroupPath() string { -+ var path string -+ id := pod.Uid -+ -+ qosClassPath := "" -+ switch corev1.PodQOSClass(pod.GetQosClass()) { -+ case corev1.PodQOSGuaranteed: -+ case corev1.PodQOSBurstable: -+ qosClassPath = strings.ToLower(string(corev1.PodQOSBurstable)) -+ case corev1.PodQOSBestEffort: -+ qosClassPath = strings.ToLower(string(corev1.PodQOSBestEffort)) -+ default: -+ return "" -+ } -+ /* -+ Kubernetes defines three different pods: -+ 1. Burstable: pod requests are less than the value of limits and not 0; -+ 2. BestEffort: pod requests and limits are both 0; -+ 3. Guaranteed: pod requests are equal to the value set by limits; -+ -+ When using cgroupfs as cgroup driver, -+ 1. The Burstable path looks like: kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ 2. The BestEffort path is in the form: kubepods/besteffort/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ 3. The Guaranteed path is in the form: kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ -+ When using systemd as cgroup driver: -+ 1. The Burstable path looks like: kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -+ 2. The BestEffort path is in the form: kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -+ 3. The Guaranteed path is in the form: kubepods.slice/kubepods-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/ -+ */ -+ -+ if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -+ if qosClassPath == "" { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ path = filepath.Join( -+ constant.KubepodsCgroup+".slice", -+ constant.KubepodsCgroup+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -+ ) -+ } -+ } else { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ path = filepath.Join( -+ constant.KubepodsCgroup+".slice", -+ constant.KubepodsCgroup+"-"+qosClassPath+".slice", -+ pod.Linux.CgroupParent, -+ ) -+ -+ } -+ } -+ } else { -+ if qosClassPath == "" { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineDocker, constant.ContainerEngineIsula, constant.ContainerEngineCrio: -+ path = filepath.Join(constant.KubepodsCgroup, constant.PodCgroupNamePrefix+id) -+ } -+ } else { -+ -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineDocker, constant.ContainerEngineIsula, constant.ContainerEngineCrio: -+ path = filepath.Join(constant.KubepodsCgroup, qosClassPath, constant.PodCgroupNamePrefix+id) -+ default: -+ path = "" -+ } -+ } -+ -+ } -+ return path -+} -+ -+// get pod running state -+func (pod *NRIRawPod) Running() bool { -+ return true -+} -+ -+// get pod UID -+func (pod *NRIRawPod) ID() string { -+ if pod == nil { -+ return "" -+ } -+ return string(pod.Uid) -+} -+ -+// convert NRIRawContainer structure to ContainerInfo structure -+func (container *NRIRawContainer) ConvertNRIRawContainer2ContainerInfo() *ContainerInfo { -+ if container == nil { -+ return nil -+ } -+ requests, limits := container.GetResourceMaps() -+ return &ContainerInfo{ -+ Hierarchy: cgroup.Hierarchy{ -+ Path: container.CgroupPath(), -+ }, -+ Name: container.Name, -+ ID: container.Id, -+ RequestResources: requests, -+ LimitResources: limits, -+ PodSandboxId: container.PodSandboxId, -+ } -+} -+ -+// get container cgroupPath -+func (container *NRIRawContainer) CgroupPath() string { -+ var path string -+ /* -+ When using systemd cgroup driver with burstable qos: -+ kubepods-burstable-podbb29f378_0c50_4da4_b070_be919e350db2.slice:crio:a575c8505d48fd0f75488fcf979dea7a693633e99709bb82308af54f3bafb186 -+ convert to: -+ "kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod84d0ae01_83a0_42a7_8990_abbb16e59923.slice/crio-66ff3a44a254533880e6b50e8fb52e0311c9158eb66426ae244066a4f11b26e5.scope" -+ -+ When using cgroupfs as cgroup driver and isula, docker, containerd as runtime wich burstable qos: -+ /kubepods/burstable/poda168d109-4d40-4c50-8f89-957b9b0dc5d6/75082fa9e4783ecf3fc2e1ada7cd08fd2dd20d001d36e579e28e3cb00d312ad4 -+ convert to: -+ kubepods/burstable/pod42736679-4475-43cf-afb4-e3744f4352fd/88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec -+ -+ When using cgroupfs as cgroup drvier and crio as container runtime wich burstable qos: -+ /kubepods/burstable/poda168d109-4d40-4c50-8f89-957b9b0dc5d6/crio-75082fa9e4783ecf3fc2e1ada7cd08fd2dd20d001d36e579e28e3cb00d312ad4 -+ convert to: -+ kubepods/burstable/pod42736679-4475-43cf-afb4-e3744f4352fd/crio-88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec -+ */ -+ -+ /* -+ When using cgroupfs as cgroup driver and isula, docker, containerd as container runtime: -+ 1. The Burstable path looks like: kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3/88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec -+ 2. The BestEffort path is in the form: kubepods/bestEffort/pod34152897-dbaf-11ea-8cb9-0653660051c3/88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec -+ 3. The Guaranteed path is in the form: kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3/88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec -+ -+ When using cgroupfs as cgroup driver and crio as container runtime: -+ 1. The Burstable path looks like: kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3/crio-88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec -+ 2. The BestEffort path is in the form: kubepods/besteffort/pod34152897-dbaf-11ea-8cb9-0653660051c3/crio-88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec -+ 3. The Guaranteed path is in the form: kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3/crio-88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec -+ -+ When using systemd as cgroup driver: -+ 1. The Burstable path looks like: kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/crio-88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec.scope -+ 2. The BestEffort path is in the form: kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/crio-88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec.scope -+ 3. The Guaranteed path is in the form: kubepods.slice/kubepods-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/crio-88a791aa2090c928667579ea11a63f0ab67cf0be127743308a6e1a2130489dec.scope -+ */ -+ qosClassPath := "" -+ switch corev1.PodQOSClass(container.getQos()) { -+ case corev1.PodQOSGuaranteed: -+ case corev1.PodQOSBurstable: -+ qosClassPath = strings.ToLower(string(corev1.PodQOSBurstable)) -+ case corev1.PodQOSBestEffort: -+ qosClassPath = strings.ToLower(string(corev1.PodQOSBestEffort)) -+ default: -+ return "" -+ } -+ -+ if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -+ if qosClassPath == "" { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ path = filepath.Join( -+ constant.KubepodsCgroup+".slice", -+ container.getPodCgroupDir(), -+ containerEngineScopes[currentContainerEngines]+"-"+container.Id+".scope", -+ ) -+ default: -+ path = "" -+ } -+ } else { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ -+ path = filepath.Join( -+ constant.KubepodsCgroup+".slice", -+ constant.KubepodsCgroup+"-"+qosClassPath+".slice", -+ container.getPodCgroupDir(), -+ containerEngineScopes[currentContainerEngines]+"-"+container.Id+".scope", -+ ) -+ default: -+ path = "" -+ } -+ -+ } -+ -+ } else { -+ if qosClassPath == "" { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ path = filepath.Join( -+ constant.KubepodsCgroup, -+ container.getPodCgroupDir(), -+ container.Id, -+ ) -+ -+ case constant.ContainerEngineCrio: -+ path = filepath.Join( -+ constant.KubepodsCgroup, -+ container.getPodCgroupDir(), -+ containerEngineScopes[currentContainerEngines]+"-"+container.Id, -+ ) -+ default: -+ path = "" -+ } -+ } else { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ path = filepath.Join( -+ constant.KubepodsCgroup, -+ qosClassPath, -+ container.getPodCgroupDir(), -+ container.Id, -+ ) -+ case constant.ContainerEngineCrio: -+ path = filepath.Join( -+ constant.KubepodsCgroup, -+ qosClassPath, -+ container.getPodCgroupDir(), -+ containerEngineScopes[currentContainerEngines]+"-"+container.Id, -+ ) -+ -+ default: -+ path = "" -+ } -+ } -+ } -+ return path -+} -+ -+// get container's pod's cgroup dir -+func (container *NRIRawContainer) getPodCgroupDir() string { -+ var podPath string -+ if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -+ podPath = strings.Split(container.Linux.CgroupsPath, ":")[0] -+ } else { -+ pathInfo := strings.Split(container.Linux.CgroupsPath, "/") -+ podPath = pathInfo[len(pathInfo)-2] -+ } -+ return podPath -+} -+ -+// get Qos through NRIRawContainer -+func (container *NRIRawContainer) getQos() string { -+ var podQosClass string -+ podQosClass = "Guaranteed" -+ if strings.Contains(container.Linux.CgroupsPath, "burstable") { -+ podQosClass = "Burstable" -+ } -+ if strings.Contains(container.Linux.CgroupsPath, "besteffort") { -+ podQosClass = "BestEffort" -+ } -+ -+ return podQosClass -+} -+ -+// AppliedConfiguration define container applied configure -+type AppliedConfiguration struct { -+ ApiVersion string -+ Kind string -+ Metadata interface{} -+ Spec map[string][]map[string]interface{} -+} -+ -+// Resources define container resource info -+type Resources struct { -+ Limits Limits -+ Requests Requests -+} -+ -+// Limits define container resource limit info -+type Limits struct { -+ Memory string -+ Cpu float64 -+} -+ -+// Requests define container resource request info -+type Requests struct { -+ Memory string -+ Cpu float64 -+} -+ -+// ResourceInfo define get resource interface -+type ResourceInfo interface { -+ getCpuInfo() float64 -+ getMemoryInfo() float64 -+} -+ -+// get container cpu request info -+func (r *Requests) getCpuInfo() float64 { -+ return r.Cpu -+} -+ -+// get container memory request info -+func (r *Requests) getMemoryInfo() float64 { -+ var converter = func(value *resource.Quantity) float64 { -+ return float64(value.MilliValue()) / 1000 -+ } -+ -+ q, _ := resource.ParseQuantity(r.Memory) -+ -+ return converter(&q) -+} -+ -+// get container cpu limit info -+func (r *Limits) getCpuInfo() float64 { -+ return r.Cpu -+} -+ -+// get container memory limit info -+func (r *Limits) getMemoryInfo() float64 { -+ var converter = func(value *resource.Quantity) float64 { -+ return float64(value.MilliValue()) / 1000 -+ } -+ -+ q, _ := resource.ParseQuantity(r.Memory) -+ -+ return converter(&q) -+} -+ -+// get container request and limit info from container applied configuration -+func (container *NRIRawContainer) GetResourceMaps() (ResourceMap, ResourceMap) { -+ configurations := container.Annotations[containerAppliedConfiguration] -+ containerConf := &AppliedConfiguration{} -+ _ = json.Unmarshal([]byte(configurations), containerConf) -+ resourceInfo := &Resources{} -+ if r, ok := containerConf.Spec[containerSpec]; ok { -+ for _, containerSpec := range r { -+ if containerSpec["name"] == container.Name { -+ if containerResourceSpec, ok := containerSpec[resourcesSpec]; ok { -+ if resource, err := json.Marshal(containerResourceSpec); err != nil { -+ fmt.Printf("get container %v Resource failed ", container.Id) -+ } else { -+ if err = json.Unmarshal(resource, resourceInfo); err != nil { -+ fmt.Printf("container %v data format error", container.Id) -+ } else { -+ fmt.Printf("get container %v Resource success", container.Id) -+ } -+ } -+ } else { -+ fmt.Printf("container %v spec resources info not exist", container.Id) -+ } -+ } else { -+ continue -+ } -+ } -+ } else { -+ fmt.Printf("container %v spec containers info not exist", container.Id) -+ } -+ -+ iterator := func(res ResourceInfo) ResourceMap { -+ results := make(ResourceMap) -+ results[ResourceCPU] = res.getCpuInfo() -+ results[ResourceMem] = res.getMemoryInfo() -+ return results -+ } -+ return iterator(&resourceInfo.Requests), iterator(&resourceInfo.Limits) -+} -+ -+// get current container engine -+func FixContainerEngine() { -+ file, err := os.OpenFile(procSelfCgroupFile, os.O_RDONLY, fileMode) -+ if err != nil { -+ return -+ } -+ defer file.Close() -+ reader := bufio.NewReader(file) -+ for { -+ line, _, err := reader.ReadLine() -+ s := strings.Split(string(line), "/") -+ containerEngine := strings.Split(s[len(s)-1], "-")[0] -+ for engine, prefix := range containerEngineScopes { -+ if containerEngine == prefix { -+ currentContainerEngines = engine -+ break -+ } -+ } -+ if err == io.EOF { -+ break -+ } -+ } -+} -diff --git a/pkg/core/typedef/podinfo.go b/pkg/core/typedef/podinfo.go -index fd96848..656bc3c 100644 ---- a/pkg/core/typedef/podinfo.go -+++ b/pkg/core/typedef/podinfo.go -@@ -28,6 +28,8 @@ type PodInfo struct { - IDContainersMap map[string]*ContainerInfo `json:"containers,omitempty"` - Annotations map[string]string `json:"annotations,omitempty"` - Labels map[string]string `json:"labels,omitempty"` -+ // ID means id of the pod in sandbox but not uid -+ ID string `json:"id,omitempty"` - } - - // NewPodInfo creates the PodInfo instance -diff --git a/pkg/core/typedef/rawpod.go b/pkg/core/typedef/rawpod.go -index 895e9d4..b67126a 100644 ---- a/pkg/core/typedef/rawpod.go -+++ b/pkg/core/typedef/rawpod.go -@@ -87,6 +87,7 @@ func (pod *RawPod) ID() string { - } - - // CgroupPath returns cgroup path of raw pod -+// handle different combinations of cgroupdriver and pod qos and container runtime - func (pod *RawPod) CgroupPath() string { - id := string(pod.UID) - if configHash := pod.Annotations[configHashAnnotationKey]; configHash != "" { -@@ -103,41 +104,65 @@ func (pod *RawPod) CgroupPath() string { - default: - return "" - } -+ - /* -- for cgroupfs cgroup driver -+ Kubernetes defines three different pods: - 1. Burstable: pod requests are less than the value of limits and not 0; -- kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3 - 2. BestEffort: pod requests and limits are both 0; -- kubepods/bestEffort/pod34152897-dbaf-11ea-8cb9-0653660051c3 - 3. Guaranteed: pod requests are equal to the value set by limits; -- kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3 -- */ -- /* -- for systemd cgroup driver -- 1. burstable: -- kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -- 2. besteffort -- kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -- 3. guaranteed -- kubepods.slice/kubepods-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/ -+ -+ When using cgroupfs as cgroup driver: -+ 1. The Burstable path looks like: kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ 2. The BestEffort path is in the form: kubepods/bestEffort/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ 3. The Guaranteed path is in the form: kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ -+ When using systemd as cgroup driver: -+ 1. The Burstable path looks like: kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -+ 2. The BestEffort path is in the form: kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -+ 3. The Guaranteed path is in the form: kubepods.slice/kubepods-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/ - */ - - if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { - if qosClassPath == "" { -- return filepath.Join( -- constant.KubepodsCgroup+".slice", -- constant.KubepodsCgroup+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -- ) -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ return filepath.Join( -+ constant.KubepodsCgroup+".slice", -+ constant.KubepodsCgroup+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -+ ) -+ default: -+ return "" -+ } -+ } else { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -+ return filepath.Join( -+ constant.KubepodsCgroup+".slice", -+ constant.KubepodsCgroup+"-"+qosClassPath+".slice", -+ constant.KubepodsCgroup+"-"+qosClassPath+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -+ ) -+ default: -+ return "" -+ } -+ - } -- return filepath.Join( -- constant.KubepodsCgroup+".slice", -- constant.KubepodsCgroup+"-"+qosClassPath+".slice", -- constant.KubepodsCgroup+"-"+qosClassPath+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -- ) - } else { -- return filepath.Join(constant.KubepodsCgroup, qosClassPath, constant.PodCgroupNamePrefix+id) -+ if qosClassPath == "" { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineDocker, constant.ContainerEngineContainerd, constant.ContainerEngineIsula, constant.ContainerEngineCrio: -+ return filepath.Join(constant.KubepodsCgroup, constant.PodCgroupNamePrefix+id) -+ default: -+ return "" -+ } -+ } else { -+ switch containerEngineScopes[currentContainerEngines] { -+ case constant.ContainerEngineDocker, constant.ContainerEngineContainerd, constant.ContainerEngineIsula, constant.ContainerEngineCrio: -+ return filepath.Join(constant.KubepodsCgroup, qosClassPath, constant.PodCgroupNamePrefix+id) -+ default: -+ return "" -+ } -+ } - } -- - } - - // ListRawContainers returns all RawContainers in the RawPod -@@ -196,7 +221,6 @@ func (cont *RawContainer) GetRealContainerID() (string, error) { - So we don't consider the case of midway container engine changes - `fixContainerEngine` is only executed when `getRealContainerID` is called for the first time - */ -- setContainerEnginesOnce.Do(func() { fixContainerEngine(cont.status.ContainerID) }) - - if !currentContainerEngines.Support(cont) { - return "", fmt.Errorf("unsupported container engine: %v", cont.status.ContainerID) -diff --git a/pkg/informer/apiserverinformer.go b/pkg/informer/apiserverinformer.go -index cbba1e2..bb1a786 100644 ---- a/pkg/informer/apiserverinformer.go -+++ b/pkg/informer/apiserverinformer.go -@@ -78,6 +78,9 @@ func InitKubeClient() (*kubernetes.Clientset, error) { - return kubeClient, nil - } - -+func (informer *APIServerInformer) WaitReady() { -+} -+ - // Start starts and enables PIServerInformer - func (informer *APIServerInformer) Start(ctx context.Context) { - const specNodeNameField = "spec.nodeName" -diff --git a/pkg/informer/informerfactory.go b/pkg/informer/informerfactory.go -index 69de266..7358d53 100644 ---- a/pkg/informer/informerfactory.go -+++ b/pkg/informer/informerfactory.go -@@ -31,6 +31,7 @@ type ( - const ( - // APISERVER instructs the informer to interact with the api server of kubernetes to obtain data - APISERVER informerType = iota -+ NRI - ) - - // defaultInformerFactory is globally unique informer factory -@@ -41,6 +42,8 @@ func (factory *informerFactory) GetInformerCreator(iType informerType) informerC - switch iType { - case APISERVER: - return NewAPIServerInformer -+ case NRI: -+ return NewNRIInformer - default: - return func(publisher api.Publisher) (api.Informer, error) { - return nil, fmt.Errorf("infomer not implemented") -diff --git a/pkg/informer/nriinformer.go b/pkg/informer/nriinformer.go -new file mode 100644 -index 0000000..fb4744d ---- /dev/null -+++ b/pkg/informer/nriinformer.go -@@ -0,0 +1,147 @@ -+// Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. -+// rubik licensed under the Mulan PSL v2. -+// You can use this software according to the terms and conditions of the Mulan PSL v2. -+// You may obtain a copy of Mulan PSL v2 at: -+// http://license.coscl.org.cn/MulanPSL2 -+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR -+// PURPOSE. -+// See the Mulan PSL v2 for more details. -+// Author: weiyuan -+// Create: 2024-05-28 -+// Description: This file defines nriinformer which interact with nri -+ -+// Package informer implements informer interface -+package informer -+ -+import ( -+ "context" -+ "os" -+ -+ "github.com/containerd/nri/pkg/api" -+ "github.com/containerd/nri/pkg/stub" -+ rubikapi "isula.org/rubik/pkg/api" -+ "isula.org/rubik/pkg/common/constant" -+ "isula.org/rubik/pkg/core/typedef" -+) -+ -+// NRIInformer interacts with crio server and forward data to the internal -+type NRIInformer struct { -+ rubikapi.Publisher -+ nodeName string -+ stub stub.Stub -+ finishedSync chan struct{} -+} -+ -+// register nriplugin -+func NewNRIInformer(publisher rubikapi.Publisher) (rubikapi.Informer, error) { -+ p := &NRIInformer{} -+ p.Publisher = publisher -+ pluginName := "rubik" -+ pluginIndex := "10" -+ nodeName := os.Getenv(constant.NodeNameEnvKey) -+ p.finishedSync = make(chan struct{}) -+ p.nodeName = nodeName -+ var err error -+ options := []stub.Option{ -+ stub.WithPluginName(pluginName), -+ stub.WithPluginIdx(pluginIndex), -+ } -+ p.stub, err = stub.New(p, options...) -+ return p, err -+} -+ -+// start nriplugin -+func (plugin NRIInformer) Start(ctx context.Context) { -+ go plugin.stub.Run(ctx) -+} -+ -+// wait sync event finish -+func (plugin NRIInformer) WaitReady() { -+ <-plugin.finishedSync -+} -+ -+// nri sync event -+func (plugin NRIInformer) Synchronize(ctx context.Context, pods []*api.PodSandbox, containers []*api.Container) ([]*api.ContainerUpdate, error) { -+ plugin.Publish(typedef.NRIPODSYNCALL, pods) -+ plugin.Publish(typedef.NRICONTAINERSYNCALL, containers) -+ // notify service handler to start -+ close(plugin.finishedSync) -+ -+ return nil, nil -+} -+ -+// nri pod run event -+func (plugin NRIInformer) RunPodSandbox(ctx context.Context, pod *api.PodSandbox) error { -+ plugin.Publish(typedef.NRIPODADD, pod) -+ return nil -+} -+ -+// nri pod stop event -+func (plugin NRIInformer) StopPodSandbox(ctx context.Context, pod *api.PodSandbox) error { -+ return nil -+} -+ -+// nri pod remove event -+func (plugin NRIInformer) RemovePodSandbox(ctx context.Context, pod *api.PodSandbox) error { -+ plugin.Publish(typedef.NRIPODDELETE, pod) -+ -+ return nil -+} -+ -+// nri container create event -+func (plugin NRIInformer) CreateContainer(context.Context, *api.PodSandbox, *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) { -+ var containerAdjustment = &api.ContainerAdjustment{} -+ var containerUpdate = []*api.ContainerUpdate{} -+ return containerAdjustment, containerUpdate, nil -+} -+ -+// nri container start event -+func (plugin NRIInformer) StartContainer(ctx context.Context, pod *api.PodSandbox, container *api.Container) error { -+ plugin.Publish(typedef.NRICONTAINERSTART, container) -+ return nil -+} -+ -+// nri container update event -+func (plugin NRIInformer) UpdateContainer(ctx context.Context, pod *api.PodSandbox, container *api.Container, lr *api.LinuxResources) ([]*api.ContainerUpdate, error) { -+ var containerUpdate = []*api.ContainerUpdate{} -+ return containerUpdate, nil -+} -+ -+// nri container stop cont -+func (plugin NRIInformer) StopContainer(ctx context.Context, pod *api.PodSandbox, container *api.Container) ([]*api.ContainerUpdate, error) { -+ plugin.Publish(typedef.NRICONTAINERREMOVE, container) -+ var containerUpdate = []*api.ContainerUpdate{} -+ return containerUpdate, nil -+} -+ -+// nri container remove event -+func (plugin NRIInformer) RemoveContainer(ctx context.Context, pod *api.PodSandbox, container *api.Container) error { -+ plugin.Publish(typedef.NRICONTAINERREMOVE, container) -+ return nil -+} -+ -+// nri configure event -+func (plugin NRIInformer) Configure(context.Context, string, string, string) (api.EventMask, error) { -+ var eventMask api.EventMask -+ return eventMask, nil -+} -+ -+// nri post container create event -+func (plugin NRIInformer) PostCreateContainer(context.Context, *api.PodSandbox, *api.Container) error { -+ return nil -+} -+ -+// nri post container start event -+func (plugin NRIInformer) PostStartContainer(context.Context, *api.PodSandbox, *api.Container) error { -+ return nil -+} -+ -+// nri post container update event -+func (plugin NRIInformer) PostUpdateContainer(context.Context, *api.PodSandbox, *api.Container) error { -+ return nil -+} -+ -+// nri shutdown event -+func (plugin NRIInformer) Shutdown(context.Context) { -+} -diff --git a/pkg/podmanager/podcache.go b/pkg/podmanager/podcache.go -index 9e021c4..9326bcb 100644 ---- a/pkg/podmanager/podcache.go -+++ b/pkg/podmanager/podcache.go -@@ -104,6 +104,21 @@ func (cache *PodCache) substitute(pods []*typedef.PodInfo) { - } - } - -+// sync containers to podcache pods -+func (cache *PodCache) syncContainers2Pods(containers []*typedef.ContainerInfo) { -+ cache.Lock() -+ defer cache.Unlock() -+ pods := cache.Pods -+ for _, pod := range pods { -+ for _, container := range containers { -+ if pod.ID == container.PodSandboxId { -+ pod.IDContainersMap[container.ID] = container -+ log.Infof("sync container %v to pod %v", container.Name, pod.Name) -+ } -+ } -+ } -+} -+ - // listPod returns the deepcopy object of all pod - func (cache *PodCache) listPod() map[string]*typedef.PodInfo { - res := make(map[string]*typedef.PodInfo, len(cache.Pods)) -diff --git a/pkg/podmanager/podmanager.go b/pkg/podmanager/podmanager.go -index 8e3eef2..35f2903 100644 ---- a/pkg/podmanager/podmanager.go -+++ b/pkg/podmanager/podmanager.go -@@ -19,6 +19,7 @@ import ( - - corev1 "k8s.io/api/core/v1" - -+ nriapi "github.com/containerd/nri/pkg/api" - "isula.org/rubik/pkg/api" - "isula.org/rubik/pkg/common/log" - "isula.org/rubik/pkg/core/subscriber" -@@ -52,6 +53,14 @@ func (manager *PodManager) HandleEvent(eventType typedef.EventType, event typede - manager.handleWatchEvent(eventType, event) - case typedef.RAWPODSYNCALL: - manager.handleListEvent(eventType, event) -+ case typedef.NRIPODADD, typedef.NRIPODDELETE: -+ manager.handleNRIPodEvent(eventType, event) -+ case typedef.NRICONTAINERSTART, typedef.NRICONTAINERREMOVE: -+ manager.handleNRIContainerEvent(eventType, event) -+ case typedef.NRIPODSYNCALL: -+ manager.handleSYNCNRIPodsEvent(eventType, event) -+ case typedef.NRICONTAINERSYNCALL: -+ manager.handleSYNCNRIContainersEvent(eventType, event) - default: - log.Infof("fail to process %s type event", eventType.String()) - } -@@ -77,6 +86,42 @@ func (manager *PodManager) handleWatchEvent(eventType typedef.EventType, event t - } - } - -+// handlenripodevent handles the nri pod event -+func (manager *PodManager) handleNRIPodEvent(eventType typedef.EventType, event typedef.Event) { -+ pod, err := eventToNRIRawPod(event) -+ if err != nil { -+ log.Warnf(err.Error()) -+ return -+ } -+ -+ switch eventType { -+ case typedef.NRIPODADD: -+ manager.addNRIPodFunc(pod) -+ case typedef.NRIPODDELETE: -+ manager.deleteNRIPodFunc(pod) -+ default: -+ log.Errorf("code problem, should not go here...") -+ } -+} -+ -+// handlenricontainerevent handles the nri container event -+func (manager *PodManager) handleNRIContainerEvent(eventType typedef.EventType, event typedef.Event) { -+ container, err := eventToNRIRawContainer(event) -+ if err != nil { -+ log.Warnf(err.Error()) -+ return -+ } -+ switch eventType { -+ case typedef.NRICONTAINERSTART: -+ manager.addNRIContainerFunc(container) -+ case typedef.NRICONTAINERREMOVE: -+ manager.removeNRIContainerFunc(container) -+ default: -+ log.Errorf("code Problem, should not go here...") -+ } -+ -+} -+ - // handleListEvent handles the list event - func (manager *PodManager) handleListEvent(eventType typedef.EventType, event typedef.Event) { - pods, err := eventToRawPods(event) -@@ -92,12 +137,102 @@ func (manager *PodManager) handleListEvent(eventType typedef.EventType, event ty - } - } - -+// handleSYNCNRIPodsEvent handles sync pod event -+func (manager *PodManager) handleSYNCNRIPodsEvent(eventType typedef.EventType, event typedef.Event) { -+ pods, err := eventToNRIRawPods(event) -+ if err != nil { -+ log.Errorf(err.Error()) -+ return -+ } -+ switch eventType { -+ case typedef.NRIPODSYNCALL: -+ manager.nripodssync(pods) -+ default: -+ log.Errorf("code problem, should not go here...") -+ } -+} -+ -+// handleSYNCNRIContainersEvent handles sync container event -+func (manager *PodManager) handleSYNCNRIContainersEvent(eventType typedef.EventType, event typedef.Event) { -+ containers, err := eventToNRIRawContainers(event) -+ if err != nil { -+ log.Errorf(err.Error()) -+ return -+ } -+ switch eventType { -+ case typedef.NRICONTAINERSYNCALL: -+ manager.nricontainerssync(containers) -+ default: -+ log.Errorf("code problem, should not go here...") -+ } -+} -+ -+// eventToNRIRawContainers handles nri containers event -+func eventToNRIRawContainers(e typedef.Event) ([]*typedef.NRIRawContainer, error) { -+ containers, ok := e.([]*nriapi.Container) -+ if !ok { -+ return nil, fmt.Errorf("fail to get *typedef.NRIRawContainer which type is %T", e) -+ } -+ toRawContainerPointer := func(pod nriapi.Container) *typedef.NRIRawContainer { -+ tmp := typedef.NRIRawContainer(pod) -+ return &tmp -+ } -+ var pointerContainers []*typedef.NRIRawContainer -+ for _, pod := range containers { -+ pointerContainers = append(pointerContainers, toRawContainerPointer(*pod)) -+ } -+ return pointerContainers, nil -+} -+ -+// eventToNRIRawPods handles nri pods event -+func eventToNRIRawPods(e typedef.Event) ([]*typedef.NRIRawPod, error) { -+ pods, ok := e.([]*nriapi.PodSandbox) -+ if !ok { -+ return nil, fmt.Errorf("fail to get *typedef.NRIRawPod which type is %T", e) -+ } -+ toRawPodPointer := func(pod nriapi.PodSandbox) *typedef.NRIRawPod { -+ tmp := typedef.NRIRawPod(pod) -+ return &tmp -+ } -+ var pointerPods []*typedef.NRIRawPod -+ for _, pod := range pods { -+ pointerPods = append(pointerPods, toRawPodPointer(*pod)) -+ } -+ return pointerPods, nil -+} -+ -+// eventToNRIRawPod handles nri pod event -+func eventToNRIRawPod(e typedef.Event) (*typedef.NRIRawPod, error) { -+ pod, ok := e.(*nriapi.PodSandbox) -+ if !ok { -+ return nil, fmt.Errorf("fail to get *typedef.NRIRawPod which type is %T", e) -+ } -+ nriRawPod := typedef.NRIRawPod(*pod) -+ return &nriRawPod, nil -+} -+ -+// eventToNRIRawContainer handles nri container event -+func eventToNRIRawContainer(e typedef.Event) (*typedef.NRIRawContainer, error) { -+ container, ok := e.(*nriapi.Container) -+ if !ok { -+ return nil, fmt.Errorf("fail to get *typedef.NRIRawContainer which type is %T", e) -+ } -+ nriRawContainer := typedef.NRIRawContainer(*container) -+ return &nriRawContainer, nil -+} -+ - // EventTypes returns the intersted event types - func (manager *PodManager) EventTypes() []typedef.EventType { - return []typedef.EventType{typedef.RAWPODADD, - typedef.RAWPODUPDATE, - typedef.RAWPODDELETE, - typedef.RAWPODSYNCALL, -+ typedef.NRIPODADD, -+ typedef.NRICONTAINERSTART, -+ typedef.NRIPODDELETE, -+ typedef.NRIPODSYNCALL, -+ typedef.NRICONTAINERSYNCALL, -+ typedef.NRICONTAINERREMOVE, - } - } - -@@ -128,6 +263,49 @@ func eventToRawPods(e typedef.Event) ([]*typedef.RawPod, error) { - return pointerPods, nil - } - -+// addNRIPodFunc handles nri pod add event -+func (manager *PodManager) addNRIPodFunc(pod *typedef.NRIRawPod) { -+ // condition 1: only add running pod -+ if !pod.Running() { -+ log.Debugf("pod %v is not running", pod.Uid) -+ return -+ } -+ // condition2: pod is not existed -+ if manager.Pods.podExist(pod.ID()) { -+ log.Debugf("pod %v has added", pod.Uid) -+ return -+ } -+ // step1: get pod information -+ podInfo := pod.ConvertNRIRawPod2PodInfo() -+ if podInfo == nil { -+ log.Errorf("fail to strip info from raw pod") -+ return -+ } -+ // step2. add pod information -+ manager.tryAddNRIPod(podInfo) -+} -+ -+// addNRIContainerFunc handles add nri container event -+func (manager *PodManager) addNRIContainerFunc(container *typedef.NRIRawContainer) { -+ containerInfo := container.ConvertNRIRawContainer2ContainerInfo() -+ for _, pod := range manager.Pods.Pods { -+ if containerInfo.PodSandboxId == pod.ID { -+ pod.IDContainersMap[containerInfo.ID] = containerInfo -+ manager.Publish(typedef.INFOADD, pod.DeepCopy()) -+ } -+ } -+} -+ -+// sync to podCache after remove container -+func (manager *PodManager) removeNRIContainerFunc(container *typedef.NRIRawContainer) { -+ containerInfo := container.ConvertNRIRawContainer2ContainerInfo() -+ for _, pod := range manager.Pods.Pods { -+ if containerInfo.PodSandboxId == pod.ID { -+ delete(pod.IDContainersMap, containerInfo.ID) -+ } -+ } -+} -+ - // addFunc handles the pod add event - func (manager *PodManager) addFunc(pod *typedef.RawPod) { - // condition 1: only add running pod -@@ -171,6 +349,11 @@ func (manager *PodManager) updateFunc(pod *typedef.RawPod) { - manager.tryAdd(podInfo) - } - -+// deleteNRIPodFunc handles delete nri pod -+func (manager *PodManager) deleteNRIPodFunc(pod *typedef.NRIRawPod) { -+ manager.tryDelete(pod.ID()) -+} -+ - // deleteFunc handles the pod delete event - func (manager *PodManager) deleteFunc(pod *typedef.RawPod) { - manager.tryDelete(pod.ID()) -@@ -185,6 +368,14 @@ func (manager *PodManager) tryAdd(podInfo *typedef.PodInfo) { - } - } - -+// tryAddNRIPod tries to add nri pod info which is not added -+func (manager *PodManager) tryAddNRIPod(podInfo *typedef.PodInfo) { -+ // only add when pod is not existed -+ if !manager.Pods.podExist(podInfo.UID) { -+ manager.Pods.addPod(podInfo) -+ } -+} -+ - // tryUpdate tries to update podinfo which is existed - func (manager *PodManager) tryUpdate(podInfo *typedef.PodInfo) { - // only update when pod is existed -@@ -217,6 +408,27 @@ func (manager *PodManager) sync(pods []*typedef.RawPod) { - manager.Pods.substitute(newPods) - } - -+// nripodssync handles sync all pods -+func (manager *PodManager) nripodssync(pods []*typedef.NRIRawPod) { -+ var newPods []*typedef.PodInfo -+ for _, pod := range pods { -+ if pod == nil || !pod.Running() { -+ continue -+ } -+ newPods = append(newPods, pod.ConvertNRIRawPod2PodInfo()) -+ } -+ manager.Pods.substitute(newPods) -+} -+ -+// nricontainerssync handles sync all containers -+func (manager *PodManager) nricontainerssync(containers []*typedef.NRIRawContainer) { -+ var newContainers []*typedef.ContainerInfo -+ for _, container := range containers { -+ newContainers = append(newContainers, container.ConvertNRIRawContainer2ContainerInfo()) -+ } -+ manager.Pods.syncContainers2Pods(newContainers) -+} -+ - // ListOfflinePods returns offline pods - func (manager *PodManager) ListOfflinePods() ([]*typedef.PodInfo, error) { - return nil, nil -diff --git a/pkg/rubik/rubik.go b/pkg/rubik/rubik.go -index 3595ff1..3d3989e 100644 ---- a/pkg/rubik/rubik.go -+++ b/pkg/rubik/rubik.go -@@ -63,9 +63,15 @@ func NewAgent(cfg *config.Config) (*Agent, error) { - // Run starts and runs the agent until receiving stop signal - func (a *Agent) Run(ctx context.Context) error { - log.Infof("agent run with config:\n%s", a.config.String()) -- if err := a.startInformer(ctx); err != nil { -+ var informerName string -+ informerName = a.config.Agent.InformerType -+ if informerName == "nil" { -+ informerName = constant.APIServerInformer -+ } -+ if err := a.startInformer(ctx, informerName); err != nil { - return err - } -+ a.informer.WaitReady() - if err := a.startServiceHandler(ctx); err != nil { - return err - } -@@ -76,17 +82,23 @@ func (a *Agent) Run(ctx context.Context) error { - } - - // startInformer starts informer to obtain external data --func (a *Agent) startInformer(ctx context.Context) error { -+func (a *Agent) startInformer(ctx context.Context, informerName string) error { - publisher := publisher.GetPublisherFactory().GetPublisher(publisher.GENERIC) -- informer, err := informer.GetInformerFactory().GetInformerCreator(informer.APISERVER)(publisher) -+ var i api.Informer -+ var err error -+ if informerName == constant.APIServerInformer { -+ i, err = informer.GetInformerFactory().GetInformerCreator(informer.APISERVER)(publisher) -+ } else { -+ i, err = informer.GetInformerFactory().GetInformerCreator(informer.NRI)(publisher) -+ } - if err != nil { -- return fmt.Errorf("fail to set informer: %v", err) -+ return fmt.Errorf("failed to set informer: %v", err) - } -- if err := informer.Subscribe(a.podManager); err != nil { -- return fmt.Errorf("fail to subscribe informer: %v", err) -+ if err := i.Subscribe(a.podManager); err != nil { -+ return fmt.Errorf("failed to subscribe informer: %v", err) - } -- a.informer = informer -- informer.Start(ctx) -+ a.informer = i -+ i.Start(ctx) - return nil - } - -diff --git a/vendor/github.com/beorn7/perks/LICENSE b/vendor/github.com/beorn7/perks/LICENSE -new file mode 100755 -index 0000000..339177b ---- /dev/null -+++ b/vendor/github.com/beorn7/perks/LICENSE -@@ -0,0 +1,20 @@ -+Copyright (C) 2013 Blake Mizerany -+ -+Permission is hereby granted, free of charge, to any person obtaining -+a copy of this software and associated documentation files (the -+"Software"), to deal in the Software without restriction, including -+without limitation the rights to use, copy, modify, merge, publish, -+distribute, sublicense, and/or sell copies of the Software, and to -+permit persons to whom the Software is furnished to do so, subject to -+the following conditions: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -diff --git a/vendor/github.com/beorn7/perks/quantile/exampledata.txt b/vendor/github.com/beorn7/perks/quantile/exampledata.txt -new file mode 100755 -index 0000000..1602287 ---- /dev/null -+++ b/vendor/github.com/beorn7/perks/quantile/exampledata.txt -@@ -0,0 +1,2388 @@ -+8 -+5 -+26 -+12 -+5 -+235 -+13 -+6 -+28 -+30 -+3 -+3 -+3 -+3 -+5 -+2 -+33 -+7 -+2 -+4 -+7 -+12 -+14 -+5 -+8 -+3 -+10 -+4 -+5 -+3 -+6 -+6 -+209 -+20 -+3 -+10 -+14 -+3 -+4 -+6 -+8 -+5 -+11 -+7 -+3 -+2 -+3 -+3 -+212 -+5 -+222 -+4 -+10 -+10 -+5 -+6 -+3 -+8 -+3 -+10 -+254 -+220 -+2 -+3 -+5 -+24 -+5 -+4 -+222 -+7 -+3 -+3 -+223 -+8 -+15 -+12 -+14 -+14 -+3 -+2 -+2 -+3 -+13 -+3 -+11 -+4 -+4 -+6 -+5 -+7 -+13 -+5 -+3 -+5 -+2 -+5 -+3 -+5 -+2 -+7 -+15 -+17 -+14 -+3 -+6 -+6 -+3 -+17 -+5 -+4 -+7 -+6 -+4 -+4 -+8 -+6 -+8 -+3 -+9 -+3 -+6 -+3 -+4 -+5 -+3 -+3 -+660 -+4 -+6 -+10 -+3 -+6 -+3 -+2 -+5 -+13 -+2 -+4 -+4 -+10 -+4 -+8 -+4 -+3 -+7 -+9 -+9 -+3 -+10 -+37 -+3 -+13 -+4 -+12 -+3 -+6 -+10 -+8 -+5 -+21 -+2 -+3 -+8 -+3 -+2 -+3 -+3 -+4 -+12 -+2 -+4 -+8 -+8 -+4 -+3 -+2 -+20 -+1 -+6 -+32 -+2 -+11 -+6 -+18 -+3 -+8 -+11 -+3 -+212 -+3 -+4 -+2 -+6 -+7 -+12 -+11 -+3 -+2 -+16 -+10 -+6 -+4 -+6 -+3 -+2 -+7 -+3 -+2 -+2 -+2 -+2 -+5 -+6 -+4 -+3 -+10 -+3 -+4 -+6 -+5 -+3 -+4 -+4 -+5 -+6 -+4 -+3 -+4 -+4 -+5 -+7 -+5 -+5 -+3 -+2 -+7 -+2 -+4 -+12 -+4 -+5 -+6 -+2 -+4 -+4 -+8 -+4 -+15 -+13 -+7 -+16 -+5 -+3 -+23 -+5 -+5 -+7 -+3 -+2 -+9 -+8 -+7 -+5 -+8 -+11 -+4 -+10 -+76 -+4 -+47 -+4 -+3 -+2 -+7 -+4 -+2 -+3 -+37 -+10 -+4 -+2 -+20 -+5 -+4 -+4 -+10 -+10 -+4 -+3 -+7 -+23 -+240 -+7 -+13 -+5 -+5 -+3 -+3 -+2 -+5 -+4 -+2 -+8 -+7 -+19 -+2 -+23 -+8 -+7 -+2 -+5 -+3 -+8 -+3 -+8 -+13 -+5 -+5 -+5 -+2 -+3 -+23 -+4 -+9 -+8 -+4 -+3 -+3 -+5 -+220 -+2 -+3 -+4 -+6 -+14 -+3 -+53 -+6 -+2 -+5 -+18 -+6 -+3 -+219 -+6 -+5 -+2 -+5 -+3 -+6 -+5 -+15 -+4 -+3 -+17 -+3 -+2 -+4 -+7 -+2 -+3 -+3 -+4 -+4 -+3 -+2 -+664 -+6 -+3 -+23 -+5 -+5 -+16 -+5 -+8 -+2 -+4 -+2 -+24 -+12 -+3 -+2 -+3 -+5 -+8 -+3 -+5 -+4 -+3 -+14 -+3 -+5 -+8 -+2 -+3 -+7 -+9 -+4 -+2 -+3 -+6 -+8 -+4 -+3 -+4 -+6 -+5 -+3 -+3 -+6 -+3 -+19 -+4 -+4 -+6 -+3 -+6 -+3 -+5 -+22 -+5 -+4 -+4 -+3 -+8 -+11 -+4 -+9 -+7 -+6 -+13 -+4 -+4 -+4 -+6 -+17 -+9 -+3 -+3 -+3 -+4 -+3 -+221 -+5 -+11 -+3 -+4 -+2 -+12 -+6 -+3 -+5 -+7 -+5 -+7 -+4 -+9 -+7 -+14 -+37 -+19 -+217 -+16 -+3 -+5 -+2 -+2 -+7 -+19 -+7 -+6 -+7 -+4 -+24 -+5 -+11 -+4 -+7 -+7 -+9 -+13 -+3 -+4 -+3 -+6 -+28 -+4 -+4 -+5 -+5 -+2 -+5 -+6 -+4 -+4 -+6 -+10 -+5 -+4 -+3 -+2 -+3 -+3 -+6 -+5 -+5 -+4 -+3 -+2 -+3 -+7 -+4 -+6 -+18 -+16 -+8 -+16 -+4 -+5 -+8 -+6 -+9 -+13 -+1545 -+6 -+215 -+6 -+5 -+6 -+3 -+45 -+31 -+5 -+2 -+2 -+4 -+3 -+3 -+2 -+5 -+4 -+3 -+5 -+7 -+7 -+4 -+5 -+8 -+5 -+4 -+749 -+2 -+31 -+9 -+11 -+2 -+11 -+5 -+4 -+4 -+7 -+9 -+11 -+4 -+5 -+4 -+7 -+3 -+4 -+6 -+2 -+15 -+3 -+4 -+3 -+4 -+3 -+5 -+2 -+13 -+5 -+5 -+3 -+3 -+23 -+4 -+4 -+5 -+7 -+4 -+13 -+2 -+4 -+3 -+4 -+2 -+6 -+2 -+7 -+3 -+5 -+5 -+3 -+29 -+5 -+4 -+4 -+3 -+10 -+2 -+3 -+79 -+16 -+6 -+6 -+7 -+7 -+3 -+5 -+5 -+7 -+4 -+3 -+7 -+9 -+5 -+6 -+5 -+9 -+6 -+3 -+6 -+4 -+17 -+2 -+10 -+9 -+3 -+6 -+2 -+3 -+21 -+22 -+5 -+11 -+4 -+2 -+17 -+2 -+224 -+2 -+14 -+3 -+4 -+4 -+2 -+4 -+4 -+4 -+4 -+5 -+3 -+4 -+4 -+10 -+2 -+6 -+3 -+3 -+5 -+7 -+2 -+7 -+5 -+6 -+3 -+218 -+2 -+2 -+5 -+2 -+6 -+3 -+5 -+222 -+14 -+6 -+33 -+3 -+2 -+5 -+3 -+3 -+3 -+9 -+5 -+3 -+3 -+2 -+7 -+4 -+3 -+4 -+3 -+5 -+6 -+5 -+26 -+4 -+13 -+9 -+7 -+3 -+221 -+3 -+3 -+4 -+4 -+4 -+4 -+2 -+18 -+5 -+3 -+7 -+9 -+6 -+8 -+3 -+10 -+3 -+11 -+9 -+5 -+4 -+17 -+5 -+5 -+6 -+6 -+3 -+2 -+4 -+12 -+17 -+6 -+7 -+218 -+4 -+2 -+4 -+10 -+3 -+5 -+15 -+3 -+9 -+4 -+3 -+3 -+6 -+29 -+3 -+3 -+4 -+5 -+5 -+3 -+8 -+5 -+6 -+6 -+7 -+5 -+3 -+5 -+3 -+29 -+2 -+31 -+5 -+15 -+24 -+16 -+5 -+207 -+4 -+3 -+3 -+2 -+15 -+4 -+4 -+13 -+5 -+5 -+4 -+6 -+10 -+2 -+7 -+8 -+4 -+6 -+20 -+5 -+3 -+4 -+3 -+12 -+12 -+5 -+17 -+7 -+3 -+3 -+3 -+6 -+10 -+3 -+5 -+25 -+80 -+4 -+9 -+3 -+2 -+11 -+3 -+3 -+2 -+3 -+8 -+7 -+5 -+5 -+19 -+5 -+3 -+3 -+12 -+11 -+2 -+6 -+5 -+5 -+5 -+3 -+3 -+3 -+4 -+209 -+14 -+3 -+2 -+5 -+19 -+4 -+4 -+3 -+4 -+14 -+5 -+6 -+4 -+13 -+9 -+7 -+4 -+7 -+10 -+2 -+9 -+5 -+7 -+2 -+8 -+4 -+6 -+5 -+5 -+222 -+8 -+7 -+12 -+5 -+216 -+3 -+4 -+4 -+6 -+3 -+14 -+8 -+7 -+13 -+4 -+3 -+3 -+3 -+3 -+17 -+5 -+4 -+3 -+33 -+6 -+6 -+33 -+7 -+5 -+3 -+8 -+7 -+5 -+2 -+9 -+4 -+2 -+233 -+24 -+7 -+4 -+8 -+10 -+3 -+4 -+15 -+2 -+16 -+3 -+3 -+13 -+12 -+7 -+5 -+4 -+207 -+4 -+2 -+4 -+27 -+15 -+2 -+5 -+2 -+25 -+6 -+5 -+5 -+6 -+13 -+6 -+18 -+6 -+4 -+12 -+225 -+10 -+7 -+5 -+2 -+2 -+11 -+4 -+14 -+21 -+8 -+10 -+3 -+5 -+4 -+232 -+2 -+5 -+5 -+3 -+7 -+17 -+11 -+6 -+6 -+23 -+4 -+6 -+3 -+5 -+4 -+2 -+17 -+3 -+6 -+5 -+8 -+3 -+2 -+2 -+14 -+9 -+4 -+4 -+2 -+5 -+5 -+3 -+7 -+6 -+12 -+6 -+10 -+3 -+6 -+2 -+2 -+19 -+5 -+4 -+4 -+9 -+2 -+4 -+13 -+3 -+5 -+6 -+3 -+6 -+5 -+4 -+9 -+6 -+3 -+5 -+7 -+3 -+6 -+6 -+4 -+3 -+10 -+6 -+3 -+221 -+3 -+5 -+3 -+6 -+4 -+8 -+5 -+3 -+6 -+4 -+4 -+2 -+54 -+5 -+6 -+11 -+3 -+3 -+4 -+4 -+4 -+3 -+7 -+3 -+11 -+11 -+7 -+10 -+6 -+13 -+223 -+213 -+15 -+231 -+7 -+3 -+7 -+228 -+2 -+3 -+4 -+4 -+5 -+6 -+7 -+4 -+13 -+3 -+4 -+5 -+3 -+6 -+4 -+6 -+7 -+2 -+4 -+3 -+4 -+3 -+3 -+6 -+3 -+7 -+3 -+5 -+18 -+5 -+6 -+8 -+10 -+3 -+3 -+3 -+2 -+4 -+2 -+4 -+4 -+5 -+6 -+6 -+4 -+10 -+13 -+3 -+12 -+5 -+12 -+16 -+8 -+4 -+19 -+11 -+2 -+4 -+5 -+6 -+8 -+5 -+6 -+4 -+18 -+10 -+4 -+2 -+216 -+6 -+6 -+6 -+2 -+4 -+12 -+8 -+3 -+11 -+5 -+6 -+14 -+5 -+3 -+13 -+4 -+5 -+4 -+5 -+3 -+28 -+6 -+3 -+7 -+219 -+3 -+9 -+7 -+3 -+10 -+6 -+3 -+4 -+19 -+5 -+7 -+11 -+6 -+15 -+19 -+4 -+13 -+11 -+3 -+7 -+5 -+10 -+2 -+8 -+11 -+2 -+6 -+4 -+6 -+24 -+6 -+3 -+3 -+3 -+3 -+6 -+18 -+4 -+11 -+4 -+2 -+5 -+10 -+8 -+3 -+9 -+5 -+3 -+4 -+5 -+6 -+2 -+5 -+7 -+4 -+4 -+14 -+6 -+4 -+4 -+5 -+5 -+7 -+2 -+4 -+3 -+7 -+3 -+3 -+6 -+4 -+5 -+4 -+4 -+4 -+3 -+3 -+3 -+3 -+8 -+14 -+2 -+3 -+5 -+3 -+2 -+4 -+5 -+3 -+7 -+3 -+3 -+18 -+3 -+4 -+4 -+5 -+7 -+3 -+3 -+3 -+13 -+5 -+4 -+8 -+211 -+5 -+5 -+3 -+5 -+2 -+5 -+4 -+2 -+655 -+6 -+3 -+5 -+11 -+2 -+5 -+3 -+12 -+9 -+15 -+11 -+5 -+12 -+217 -+2 -+6 -+17 -+3 -+3 -+207 -+5 -+5 -+4 -+5 -+9 -+3 -+2 -+8 -+5 -+4 -+3 -+2 -+5 -+12 -+4 -+14 -+5 -+4 -+2 -+13 -+5 -+8 -+4 -+225 -+4 -+3 -+4 -+5 -+4 -+3 -+3 -+6 -+23 -+9 -+2 -+6 -+7 -+233 -+4 -+4 -+6 -+18 -+3 -+4 -+6 -+3 -+4 -+4 -+2 -+3 -+7 -+4 -+13 -+227 -+4 -+3 -+5 -+4 -+2 -+12 -+9 -+17 -+3 -+7 -+14 -+6 -+4 -+5 -+21 -+4 -+8 -+9 -+2 -+9 -+25 -+16 -+3 -+6 -+4 -+7 -+8 -+5 -+2 -+3 -+5 -+4 -+3 -+3 -+5 -+3 -+3 -+3 -+2 -+3 -+19 -+2 -+4 -+3 -+4 -+2 -+3 -+4 -+4 -+2 -+4 -+3 -+3 -+3 -+2 -+6 -+3 -+17 -+5 -+6 -+4 -+3 -+13 -+5 -+3 -+3 -+3 -+4 -+9 -+4 -+2 -+14 -+12 -+4 -+5 -+24 -+4 -+3 -+37 -+12 -+11 -+21 -+3 -+4 -+3 -+13 -+4 -+2 -+3 -+15 -+4 -+11 -+4 -+4 -+3 -+8 -+3 -+4 -+4 -+12 -+8 -+5 -+3 -+3 -+4 -+2 -+220 -+3 -+5 -+223 -+3 -+3 -+3 -+10 -+3 -+15 -+4 -+241 -+9 -+7 -+3 -+6 -+6 -+23 -+4 -+13 -+7 -+3 -+4 -+7 -+4 -+9 -+3 -+3 -+4 -+10 -+5 -+5 -+1 -+5 -+24 -+2 -+4 -+5 -+5 -+6 -+14 -+3 -+8 -+2 -+3 -+5 -+13 -+13 -+3 -+5 -+2 -+3 -+15 -+3 -+4 -+2 -+10 -+4 -+4 -+4 -+5 -+5 -+3 -+5 -+3 -+4 -+7 -+4 -+27 -+3 -+6 -+4 -+15 -+3 -+5 -+6 -+6 -+5 -+4 -+8 -+3 -+9 -+2 -+6 -+3 -+4 -+3 -+7 -+4 -+18 -+3 -+11 -+3 -+3 -+8 -+9 -+7 -+24 -+3 -+219 -+7 -+10 -+4 -+5 -+9 -+12 -+2 -+5 -+4 -+4 -+4 -+3 -+3 -+19 -+5 -+8 -+16 -+8 -+6 -+22 -+3 -+23 -+3 -+242 -+9 -+4 -+3 -+3 -+5 -+7 -+3 -+3 -+5 -+8 -+3 -+7 -+5 -+14 -+8 -+10 -+3 -+4 -+3 -+7 -+4 -+6 -+7 -+4 -+10 -+4 -+3 -+11 -+3 -+7 -+10 -+3 -+13 -+6 -+8 -+12 -+10 -+5 -+7 -+9 -+3 -+4 -+7 -+7 -+10 -+8 -+30 -+9 -+19 -+4 -+3 -+19 -+15 -+4 -+13 -+3 -+215 -+223 -+4 -+7 -+4 -+8 -+17 -+16 -+3 -+7 -+6 -+5 -+5 -+4 -+12 -+3 -+7 -+4 -+4 -+13 -+4 -+5 -+2 -+5 -+6 -+5 -+6 -+6 -+7 -+10 -+18 -+23 -+9 -+3 -+3 -+6 -+5 -+2 -+4 -+2 -+7 -+3 -+3 -+2 -+5 -+5 -+14 -+10 -+224 -+6 -+3 -+4 -+3 -+7 -+5 -+9 -+3 -+6 -+4 -+2 -+5 -+11 -+4 -+3 -+3 -+2 -+8 -+4 -+7 -+4 -+10 -+7 -+3 -+3 -+18 -+18 -+17 -+3 -+3 -+3 -+4 -+5 -+3 -+3 -+4 -+12 -+7 -+3 -+11 -+13 -+5 -+4 -+7 -+13 -+5 -+4 -+11 -+3 -+12 -+3 -+6 -+4 -+4 -+21 -+4 -+6 -+9 -+5 -+3 -+10 -+8 -+4 -+6 -+4 -+4 -+6 -+5 -+4 -+8 -+6 -+4 -+6 -+4 -+4 -+5 -+9 -+6 -+3 -+4 -+2 -+9 -+3 -+18 -+2 -+4 -+3 -+13 -+3 -+6 -+6 -+8 -+7 -+9 -+3 -+2 -+16 -+3 -+4 -+6 -+3 -+2 -+33 -+22 -+14 -+4 -+9 -+12 -+4 -+5 -+6 -+3 -+23 -+9 -+4 -+3 -+5 -+5 -+3 -+4 -+5 -+3 -+5 -+3 -+10 -+4 -+5 -+5 -+8 -+4 -+4 -+6 -+8 -+5 -+4 -+3 -+4 -+6 -+3 -+3 -+3 -+5 -+9 -+12 -+6 -+5 -+9 -+3 -+5 -+3 -+2 -+2 -+2 -+18 -+3 -+2 -+21 -+2 -+5 -+4 -+6 -+4 -+5 -+10 -+3 -+9 -+3 -+2 -+10 -+7 -+3 -+6 -+6 -+4 -+4 -+8 -+12 -+7 -+3 -+7 -+3 -+3 -+9 -+3 -+4 -+5 -+4 -+4 -+5 -+5 -+10 -+15 -+4 -+4 -+14 -+6 -+227 -+3 -+14 -+5 -+216 -+22 -+5 -+4 -+2 -+2 -+6 -+3 -+4 -+2 -+9 -+9 -+4 -+3 -+28 -+13 -+11 -+4 -+5 -+3 -+3 -+2 -+3 -+3 -+5 -+3 -+4 -+3 -+5 -+23 -+26 -+3 -+4 -+5 -+6 -+4 -+6 -+3 -+5 -+5 -+3 -+4 -+3 -+2 -+2 -+2 -+7 -+14 -+3 -+6 -+7 -+17 -+2 -+2 -+15 -+14 -+16 -+4 -+6 -+7 -+13 -+6 -+4 -+5 -+6 -+16 -+3 -+3 -+28 -+3 -+6 -+15 -+3 -+9 -+2 -+4 -+6 -+3 -+3 -+22 -+4 -+12 -+6 -+7 -+2 -+5 -+4 -+10 -+3 -+16 -+6 -+9 -+2 -+5 -+12 -+7 -+5 -+5 -+5 -+5 -+2 -+11 -+9 -+17 -+4 -+3 -+11 -+7 -+3 -+5 -+15 -+4 -+3 -+4 -+211 -+8 -+7 -+5 -+4 -+7 -+6 -+7 -+6 -+3 -+6 -+5 -+6 -+5 -+3 -+4 -+4 -+26 -+4 -+6 -+10 -+4 -+4 -+3 -+2 -+3 -+3 -+4 -+5 -+9 -+3 -+9 -+4 -+4 -+5 -+5 -+8 -+2 -+4 -+2 -+3 -+8 -+4 -+11 -+19 -+5 -+8 -+6 -+3 -+5 -+6 -+12 -+3 -+2 -+4 -+16 -+12 -+3 -+4 -+4 -+8 -+6 -+5 -+6 -+6 -+219 -+8 -+222 -+6 -+16 -+3 -+13 -+19 -+5 -+4 -+3 -+11 -+6 -+10 -+4 -+7 -+7 -+12 -+5 -+3 -+3 -+5 -+6 -+10 -+3 -+8 -+2 -+5 -+4 -+7 -+2 -+4 -+4 -+2 -+12 -+9 -+6 -+4 -+2 -+40 -+2 -+4 -+10 -+4 -+223 -+4 -+2 -+20 -+6 -+7 -+24 -+5 -+4 -+5 -+2 -+20 -+16 -+6 -+5 -+13 -+2 -+3 -+3 -+19 -+3 -+2 -+4 -+5 -+6 -+7 -+11 -+12 -+5 -+6 -+7 -+7 -+3 -+5 -+3 -+5 -+3 -+14 -+3 -+4 -+4 -+2 -+11 -+1 -+7 -+3 -+9 -+6 -+11 -+12 -+5 -+8 -+6 -+221 -+4 -+2 -+12 -+4 -+3 -+15 -+4 -+5 -+226 -+7 -+218 -+7 -+5 -+4 -+5 -+18 -+4 -+5 -+9 -+4 -+4 -+2 -+9 -+18 -+18 -+9 -+5 -+6 -+6 -+3 -+3 -+7 -+3 -+5 -+4 -+4 -+4 -+12 -+3 -+6 -+31 -+5 -+4 -+7 -+3 -+6 -+5 -+6 -+5 -+11 -+2 -+2 -+11 -+11 -+6 -+7 -+5 -+8 -+7 -+10 -+5 -+23 -+7 -+4 -+3 -+5 -+34 -+2 -+5 -+23 -+7 -+3 -+6 -+8 -+4 -+4 -+4 -+2 -+5 -+3 -+8 -+5 -+4 -+8 -+25 -+2 -+3 -+17 -+8 -+3 -+4 -+8 -+7 -+3 -+15 -+6 -+5 -+7 -+21 -+9 -+5 -+6 -+6 -+5 -+3 -+2 -+3 -+10 -+3 -+6 -+3 -+14 -+7 -+4 -+4 -+8 -+7 -+8 -+2 -+6 -+12 -+4 -+213 -+6 -+5 -+21 -+8 -+2 -+5 -+23 -+3 -+11 -+2 -+3 -+6 -+25 -+2 -+3 -+6 -+7 -+6 -+6 -+4 -+4 -+6 -+3 -+17 -+9 -+7 -+6 -+4 -+3 -+10 -+7 -+2 -+3 -+3 -+3 -+11 -+8 -+3 -+7 -+6 -+4 -+14 -+36 -+3 -+4 -+3 -+3 -+22 -+13 -+21 -+4 -+2 -+7 -+4 -+4 -+17 -+15 -+3 -+7 -+11 -+2 -+4 -+7 -+6 -+209 -+6 -+3 -+2 -+2 -+24 -+4 -+9 -+4 -+3 -+3 -+3 -+29 -+2 -+2 -+4 -+3 -+3 -+5 -+4 -+6 -+3 -+3 -+2 -+4 -diff --git a/vendor/github.com/beorn7/perks/quantile/stream.go b/vendor/github.com/beorn7/perks/quantile/stream.go -new file mode 100755 -index 0000000..d7d14f8 ---- /dev/null -+++ b/vendor/github.com/beorn7/perks/quantile/stream.go -@@ -0,0 +1,316 @@ -+// Package quantile computes approximate quantiles over an unbounded data -+// stream within low memory and CPU bounds. -+// -+// A small amount of accuracy is traded to achieve the above properties. -+// -+// Multiple streams can be merged before calling Query to generate a single set -+// of results. This is meaningful when the streams represent the same type of -+// data. See Merge and Samples. -+// -+// For more detailed information about the algorithm used, see: -+// -+// Effective Computation of Biased Quantiles over Data Streams -+// -+// http://www.cs.rutgers.edu/~muthu/bquant.pdf -+package quantile -+ -+import ( -+ "math" -+ "sort" -+) -+ -+// Sample holds an observed value and meta information for compression. JSON -+// tags have been added for convenience. -+type Sample struct { -+ Value float64 `json:",string"` -+ Width float64 `json:",string"` -+ Delta float64 `json:",string"` -+} -+ -+// Samples represents a slice of samples. It implements sort.Interface. -+type Samples []Sample -+ -+func (a Samples) Len() int { return len(a) } -+func (a Samples) Less(i, j int) bool { return a[i].Value < a[j].Value } -+func (a Samples) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -+ -+type invariant func(s *stream, r float64) float64 -+ -+// NewLowBiased returns an initialized Stream for low-biased quantiles -+// (e.g. 0.01, 0.1, 0.5) where the needed quantiles are not known a priori, but -+// error guarantees can still be given even for the lower ranks of the data -+// distribution. -+// -+// The provided epsilon is a relative error, i.e. the true quantile of a value -+// returned by a query is guaranteed to be within (1±Epsilon)*Quantile. -+// -+// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error -+// properties. -+func NewLowBiased(epsilon float64) *Stream { -+ ƒ := func(s *stream, r float64) float64 { -+ return 2 * epsilon * r -+ } -+ return newStream(ƒ) -+} -+ -+// NewHighBiased returns an initialized Stream for high-biased quantiles -+// (e.g. 0.01, 0.1, 0.5) where the needed quantiles are not known a priori, but -+// error guarantees can still be given even for the higher ranks of the data -+// distribution. -+// -+// The provided epsilon is a relative error, i.e. the true quantile of a value -+// returned by a query is guaranteed to be within 1-(1±Epsilon)*(1-Quantile). -+// -+// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error -+// properties. -+func NewHighBiased(epsilon float64) *Stream { -+ ƒ := func(s *stream, r float64) float64 { -+ return 2 * epsilon * (s.n - r) -+ } -+ return newStream(ƒ) -+} -+ -+// NewTargeted returns an initialized Stream concerned with a particular set of -+// quantile values that are supplied a priori. Knowing these a priori reduces -+// space and computation time. The targets map maps the desired quantiles to -+// their absolute errors, i.e. the true quantile of a value returned by a query -+// is guaranteed to be within (Quantile±Epsilon). -+// -+// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error properties. -+func NewTargeted(targetMap map[float64]float64) *Stream { -+ // Convert map to slice to avoid slow iterations on a map. -+ // ƒ is called on the hot path, so converting the map to a slice -+ // beforehand results in significant CPU savings. -+ targets := targetMapToSlice(targetMap) -+ -+ ƒ := func(s *stream, r float64) float64 { -+ var m = math.MaxFloat64 -+ var f float64 -+ for _, t := range targets { -+ if t.quantile*s.n <= r { -+ f = (2 * t.epsilon * r) / t.quantile -+ } else { -+ f = (2 * t.epsilon * (s.n - r)) / (1 - t.quantile) -+ } -+ if f < m { -+ m = f -+ } -+ } -+ return m -+ } -+ return newStream(ƒ) -+} -+ -+type target struct { -+ quantile float64 -+ epsilon float64 -+} -+ -+func targetMapToSlice(targetMap map[float64]float64) []target { -+ targets := make([]target, 0, len(targetMap)) -+ -+ for quantile, epsilon := range targetMap { -+ t := target{ -+ quantile: quantile, -+ epsilon: epsilon, -+ } -+ targets = append(targets, t) -+ } -+ -+ return targets -+} -+ -+// Stream computes quantiles for a stream of float64s. It is not thread-safe by -+// design. Take care when using across multiple goroutines. -+type Stream struct { -+ *stream -+ b Samples -+ sorted bool -+} -+ -+func newStream(ƒ invariant) *Stream { -+ x := &stream{ƒ: ƒ} -+ return &Stream{x, make(Samples, 0, 500), true} -+} -+ -+// Insert inserts v into the stream. -+func (s *Stream) Insert(v float64) { -+ s.insert(Sample{Value: v, Width: 1}) -+} -+ -+func (s *Stream) insert(sample Sample) { -+ s.b = append(s.b, sample) -+ s.sorted = false -+ if len(s.b) == cap(s.b) { -+ s.flush() -+ } -+} -+ -+// Query returns the computed qth percentiles value. If s was created with -+// NewTargeted, and q is not in the set of quantiles provided a priori, Query -+// will return an unspecified result. -+func (s *Stream) Query(q float64) float64 { -+ if !s.flushed() { -+ // Fast path when there hasn't been enough data for a flush; -+ // this also yields better accuracy for small sets of data. -+ l := len(s.b) -+ if l == 0 { -+ return 0 -+ } -+ i := int(math.Ceil(float64(l) * q)) -+ if i > 0 { -+ i -= 1 -+ } -+ s.maybeSort() -+ return s.b[i].Value -+ } -+ s.flush() -+ return s.stream.query(q) -+} -+ -+// Merge merges samples into the underlying streams samples. This is handy when -+// merging multiple streams from separate threads, database shards, etc. -+// -+// ATTENTION: This method is broken and does not yield correct results. The -+// underlying algorithm is not capable of merging streams correctly. -+func (s *Stream) Merge(samples Samples) { -+ sort.Sort(samples) -+ s.stream.merge(samples) -+} -+ -+// Reset reinitializes and clears the list reusing the samples buffer memory. -+func (s *Stream) Reset() { -+ s.stream.reset() -+ s.b = s.b[:0] -+} -+ -+// Samples returns stream samples held by s. -+func (s *Stream) Samples() Samples { -+ if !s.flushed() { -+ return s.b -+ } -+ s.flush() -+ return s.stream.samples() -+} -+ -+// Count returns the total number of samples observed in the stream -+// since initialization. -+func (s *Stream) Count() int { -+ return len(s.b) + s.stream.count() -+} -+ -+func (s *Stream) flush() { -+ s.maybeSort() -+ s.stream.merge(s.b) -+ s.b = s.b[:0] -+} -+ -+func (s *Stream) maybeSort() { -+ if !s.sorted { -+ s.sorted = true -+ sort.Sort(s.b) -+ } -+} -+ -+func (s *Stream) flushed() bool { -+ return len(s.stream.l) > 0 -+} -+ -+type stream struct { -+ n float64 -+ l []Sample -+ ƒ invariant -+} -+ -+func (s *stream) reset() { -+ s.l = s.l[:0] -+ s.n = 0 -+} -+ -+func (s *stream) insert(v float64) { -+ s.merge(Samples{{v, 1, 0}}) -+} -+ -+func (s *stream) merge(samples Samples) { -+ // TODO(beorn7): This tries to merge not only individual samples, but -+ // whole summaries. The paper doesn't mention merging summaries at -+ // all. Unittests show that the merging is inaccurate. Find out how to -+ // do merges properly. -+ var r float64 -+ i := 0 -+ for _, sample := range samples { -+ for ; i < len(s.l); i++ { -+ c := s.l[i] -+ if c.Value > sample.Value { -+ // Insert at position i. -+ s.l = append(s.l, Sample{}) -+ copy(s.l[i+1:], s.l[i:]) -+ s.l[i] = Sample{ -+ sample.Value, -+ sample.Width, -+ math.Max(sample.Delta, math.Floor(s.ƒ(s, r))-1), -+ // TODO(beorn7): How to calculate delta correctly? -+ } -+ i++ -+ goto inserted -+ } -+ r += c.Width -+ } -+ s.l = append(s.l, Sample{sample.Value, sample.Width, 0}) -+ i++ -+ inserted: -+ s.n += sample.Width -+ r += sample.Width -+ } -+ s.compress() -+} -+ -+func (s *stream) count() int { -+ return int(s.n) -+} -+ -+func (s *stream) query(q float64) float64 { -+ t := math.Ceil(q * s.n) -+ t += math.Ceil(s.ƒ(s, t) / 2) -+ p := s.l[0] -+ var r float64 -+ for _, c := range s.l[1:] { -+ r += p.Width -+ if r+c.Width+c.Delta > t { -+ return p.Value -+ } -+ p = c -+ } -+ return p.Value -+} -+ -+func (s *stream) compress() { -+ if len(s.l) < 2 { -+ return -+ } -+ x := s.l[len(s.l)-1] -+ xi := len(s.l) - 1 -+ r := s.n - 1 - x.Width -+ -+ for i := len(s.l) - 2; i >= 0; i-- { -+ c := s.l[i] -+ if c.Width+x.Width+x.Delta <= s.ƒ(s, r) { -+ x.Width += c.Width -+ s.l[xi] = x -+ // Remove element at i. -+ copy(s.l[i:], s.l[i+1:]) -+ s.l = s.l[:len(s.l)-1] -+ xi -= 1 -+ } else { -+ x = c -+ xi = i -+ } -+ r -= c.Width -+ } -+} -+ -+func (s *stream) samples() Samples { -+ samples := make(Samples, len(s.l)) -+ copy(samples, s.l) -+ return samples -+} -diff --git a/vendor/github.com/cespare/xxhash/v2/LICENSE.txt b/vendor/github.com/cespare/xxhash/v2/LICENSE.txt -new file mode 100755 -index 0000000..24b5306 ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/LICENSE.txt -@@ -0,0 +1,22 @@ -+Copyright (c) 2016 Caleb Spare -+ -+MIT License -+ -+Permission is hereby granted, free of charge, to any person obtaining -+a copy of this software and associated documentation files (the -+"Software"), to deal in the Software without restriction, including -+without limitation the rights to use, copy, modify, merge, publish, -+distribute, sublicense, and/or sell copies of the Software, and to -+permit persons to whom the Software is furnished to do so, subject to -+the following conditions: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -diff --git a/vendor/github.com/cespare/xxhash/v2/README.md b/vendor/github.com/cespare/xxhash/v2/README.md -new file mode 100755 -index 0000000..8bf0e5b ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/README.md -@@ -0,0 +1,72 @@ -+# xxhash -+ -+[![Go Reference](https://pkg.go.dev/badge/github.com/cespare/xxhash/v2.svg)](https://pkg.go.dev/github.com/cespare/xxhash/v2) -+[![Test](https://github.com/cespare/xxhash/actions/workflows/test.yml/badge.svg)](https://github.com/cespare/xxhash/actions/workflows/test.yml) -+ -+xxhash is a Go implementation of the 64-bit [xxHash] algorithm, XXH64. This is a -+high-quality hashing algorithm that is much faster than anything in the Go -+standard library. -+ -+This package provides a straightforward API: -+ -+``` -+func Sum64(b []byte) uint64 -+func Sum64String(s string) uint64 -+type Digest struct{ ... } -+ func New() *Digest -+``` -+ -+The `Digest` type implements hash.Hash64. Its key methods are: -+ -+``` -+func (*Digest) Write([]byte) (int, error) -+func (*Digest) WriteString(string) (int, error) -+func (*Digest) Sum64() uint64 -+``` -+ -+The package is written with optimized pure Go and also contains even faster -+assembly implementations for amd64 and arm64. If desired, the `purego` build tag -+opts into using the Go code even on those architectures. -+ -+[xxHash]: http://cyan4973.github.io/xxHash/ -+ -+## Compatibility -+ -+This package is in a module and the latest code is in version 2 of the module. -+You need a version of Go with at least "minimal module compatibility" to use -+github.com/cespare/xxhash/v2: -+ -+* 1.9.7+ for Go 1.9 -+* 1.10.3+ for Go 1.10 -+* Go 1.11 or later -+ -+I recommend using the latest release of Go. -+ -+## Benchmarks -+ -+Here are some quick benchmarks comparing the pure-Go and assembly -+implementations of Sum64. -+ -+| input size | purego | asm | -+| ---------- | --------- | --------- | -+| 4 B | 1.3 GB/s | 1.2 GB/s | -+| 16 B | 2.9 GB/s | 3.5 GB/s | -+| 100 B | 6.9 GB/s | 8.1 GB/s | -+| 4 KB | 11.7 GB/s | 16.7 GB/s | -+| 10 MB | 12.0 GB/s | 17.3 GB/s | -+ -+These numbers were generated on Ubuntu 20.04 with an Intel Xeon Platinum 8252C -+CPU using the following commands under Go 1.19.2: -+ -+``` -+benchstat <(go test -tags purego -benchtime 500ms -count 15 -bench 'Sum64$') -+benchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$') -+``` -+ -+## Projects using this package -+ -+- [InfluxDB](https://github.com/influxdata/influxdb) -+- [Prometheus](https://github.com/prometheus/prometheus) -+- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) -+- [FreeCache](https://github.com/coocood/freecache) -+- [FastCache](https://github.com/VictoriaMetrics/fastcache) -diff --git a/vendor/github.com/cespare/xxhash/v2/testall.sh b/vendor/github.com/cespare/xxhash/v2/testall.sh -new file mode 100755 -index 0000000..94b9c44 ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/testall.sh -@@ -0,0 +1,10 @@ -+#!/bin/bash -+set -eu -o pipefail -+ -+# Small convenience script for running the tests with various combinations of -+# arch/tags. This assumes we're running on amd64 and have qemu available. -+ -+go test ./... -+go test -tags purego ./... -+GOARCH=arm64 go test -+GOARCH=arm64 go test -tags purego -diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash.go b/vendor/github.com/cespare/xxhash/v2/xxhash.go -new file mode 100755 -index 0000000..a9e0d45 ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/xxhash.go -@@ -0,0 +1,228 @@ -+// Package xxhash implements the 64-bit variant of xxHash (XXH64) as described -+// at http://cyan4973.github.io/xxHash/. -+package xxhash -+ -+import ( -+ "encoding/binary" -+ "errors" -+ "math/bits" -+) -+ -+const ( -+ prime1 uint64 = 11400714785074694791 -+ prime2 uint64 = 14029467366897019727 -+ prime3 uint64 = 1609587929392839161 -+ prime4 uint64 = 9650029242287828579 -+ prime5 uint64 = 2870177450012600261 -+) -+ -+// Store the primes in an array as well. -+// -+// The consts are used when possible in Go code to avoid MOVs but we need a -+// contiguous array of the assembly code. -+var primes = [...]uint64{prime1, prime2, prime3, prime4, prime5} -+ -+// Digest implements hash.Hash64. -+type Digest struct { -+ v1 uint64 -+ v2 uint64 -+ v3 uint64 -+ v4 uint64 -+ total uint64 -+ mem [32]byte -+ n int // how much of mem is used -+} -+ -+// New creates a new Digest that computes the 64-bit xxHash algorithm. -+func New() *Digest { -+ var d Digest -+ d.Reset() -+ return &d -+} -+ -+// Reset clears the Digest's state so that it can be reused. -+func (d *Digest) Reset() { -+ d.v1 = primes[0] + prime2 -+ d.v2 = prime2 -+ d.v3 = 0 -+ d.v4 = -primes[0] -+ d.total = 0 -+ d.n = 0 -+} -+ -+// Size always returns 8 bytes. -+func (d *Digest) Size() int { return 8 } -+ -+// BlockSize always returns 32 bytes. -+func (d *Digest) BlockSize() int { return 32 } -+ -+// Write adds more data to d. It always returns len(b), nil. -+func (d *Digest) Write(b []byte) (n int, err error) { -+ n = len(b) -+ d.total += uint64(n) -+ -+ memleft := d.mem[d.n&(len(d.mem)-1):] -+ -+ if d.n+n < 32 { -+ // This new data doesn't even fill the current block. -+ copy(memleft, b) -+ d.n += n -+ return -+ } -+ -+ if d.n > 0 { -+ // Finish off the partial block. -+ c := copy(memleft, b) -+ d.v1 = round(d.v1, u64(d.mem[0:8])) -+ d.v2 = round(d.v2, u64(d.mem[8:16])) -+ d.v3 = round(d.v3, u64(d.mem[16:24])) -+ d.v4 = round(d.v4, u64(d.mem[24:32])) -+ b = b[c:] -+ d.n = 0 -+ } -+ -+ if len(b) >= 32 { -+ // One or more full blocks left. -+ nw := writeBlocks(d, b) -+ b = b[nw:] -+ } -+ -+ // Store any remaining partial block. -+ copy(d.mem[:], b) -+ d.n = len(b) -+ -+ return -+} -+ -+// Sum appends the current hash to b and returns the resulting slice. -+func (d *Digest) Sum(b []byte) []byte { -+ s := d.Sum64() -+ return append( -+ b, -+ byte(s>>56), -+ byte(s>>48), -+ byte(s>>40), -+ byte(s>>32), -+ byte(s>>24), -+ byte(s>>16), -+ byte(s>>8), -+ byte(s), -+ ) -+} -+ -+// Sum64 returns the current hash. -+func (d *Digest) Sum64() uint64 { -+ var h uint64 -+ -+ if d.total >= 32 { -+ v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4 -+ h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4) -+ h = mergeRound(h, v1) -+ h = mergeRound(h, v2) -+ h = mergeRound(h, v3) -+ h = mergeRound(h, v4) -+ } else { -+ h = d.v3 + prime5 -+ } -+ -+ h += d.total -+ -+ b := d.mem[:d.n&(len(d.mem)-1)] -+ for ; len(b) >= 8; b = b[8:] { -+ k1 := round(0, u64(b[:8])) -+ h ^= k1 -+ h = rol27(h)*prime1 + prime4 -+ } -+ if len(b) >= 4 { -+ h ^= uint64(u32(b[:4])) * prime1 -+ h = rol23(h)*prime2 + prime3 -+ b = b[4:] -+ } -+ for ; len(b) > 0; b = b[1:] { -+ h ^= uint64(b[0]) * prime5 -+ h = rol11(h) * prime1 -+ } -+ -+ h ^= h >> 33 -+ h *= prime2 -+ h ^= h >> 29 -+ h *= prime3 -+ h ^= h >> 32 -+ -+ return h -+} -+ -+const ( -+ magic = "xxh\x06" -+ marshaledSize = len(magic) + 8*5 + 32 -+) -+ -+// MarshalBinary implements the encoding.BinaryMarshaler interface. -+func (d *Digest) MarshalBinary() ([]byte, error) { -+ b := make([]byte, 0, marshaledSize) -+ b = append(b, magic...) -+ b = appendUint64(b, d.v1) -+ b = appendUint64(b, d.v2) -+ b = appendUint64(b, d.v3) -+ b = appendUint64(b, d.v4) -+ b = appendUint64(b, d.total) -+ b = append(b, d.mem[:d.n]...) -+ b = b[:len(b)+len(d.mem)-d.n] -+ return b, nil -+} -+ -+// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. -+func (d *Digest) UnmarshalBinary(b []byte) error { -+ if len(b) < len(magic) || string(b[:len(magic)]) != magic { -+ return errors.New("xxhash: invalid hash state identifier") -+ } -+ if len(b) != marshaledSize { -+ return errors.New("xxhash: invalid hash state size") -+ } -+ b = b[len(magic):] -+ b, d.v1 = consumeUint64(b) -+ b, d.v2 = consumeUint64(b) -+ b, d.v3 = consumeUint64(b) -+ b, d.v4 = consumeUint64(b) -+ b, d.total = consumeUint64(b) -+ copy(d.mem[:], b) -+ d.n = int(d.total % uint64(len(d.mem))) -+ return nil -+} -+ -+func appendUint64(b []byte, x uint64) []byte { -+ var a [8]byte -+ binary.LittleEndian.PutUint64(a[:], x) -+ return append(b, a[:]...) -+} -+ -+func consumeUint64(b []byte) ([]byte, uint64) { -+ x := u64(b) -+ return b[8:], x -+} -+ -+func u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) } -+func u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) } -+ -+func round(acc, input uint64) uint64 { -+ acc += input * prime2 -+ acc = rol31(acc) -+ acc *= prime1 -+ return acc -+} -+ -+func mergeRound(acc, val uint64) uint64 { -+ val = round(0, val) -+ acc ^= val -+ acc = acc*prime1 + prime4 -+ return acc -+} -+ -+func rol1(x uint64) uint64 { return bits.RotateLeft64(x, 1) } -+func rol7(x uint64) uint64 { return bits.RotateLeft64(x, 7) } -+func rol11(x uint64) uint64 { return bits.RotateLeft64(x, 11) } -+func rol12(x uint64) uint64 { return bits.RotateLeft64(x, 12) } -+func rol18(x uint64) uint64 { return bits.RotateLeft64(x, 18) } -+func rol23(x uint64) uint64 { return bits.RotateLeft64(x, 23) } -+func rol27(x uint64) uint64 { return bits.RotateLeft64(x, 27) } -+func rol31(x uint64) uint64 { return bits.RotateLeft64(x, 31) } -diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s b/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s -new file mode 100755 -index 0000000..3e8b132 ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s -@@ -0,0 +1,209 @@ -+//go:build !appengine && gc && !purego -+// +build !appengine -+// +build gc -+// +build !purego -+ -+#include "textflag.h" -+ -+// Registers: -+#define h AX -+#define d AX -+#define p SI // pointer to advance through b -+#define n DX -+#define end BX // loop end -+#define v1 R8 -+#define v2 R9 -+#define v3 R10 -+#define v4 R11 -+#define x R12 -+#define prime1 R13 -+#define prime2 R14 -+#define prime4 DI -+ -+#define round(acc, x) \ -+ IMULQ prime2, x \ -+ ADDQ x, acc \ -+ ROLQ $31, acc \ -+ IMULQ prime1, acc -+ -+// round0 performs the operation x = round(0, x). -+#define round0(x) \ -+ IMULQ prime2, x \ -+ ROLQ $31, x \ -+ IMULQ prime1, x -+ -+// mergeRound applies a merge round on the two registers acc and x. -+// It assumes that prime1, prime2, and prime4 have been loaded. -+#define mergeRound(acc, x) \ -+ round0(x) \ -+ XORQ x, acc \ -+ IMULQ prime1, acc \ -+ ADDQ prime4, acc -+ -+// blockLoop processes as many 32-byte blocks as possible, -+// updating v1, v2, v3, and v4. It assumes that there is at least one block -+// to process. -+#define blockLoop() \ -+loop: \ -+ MOVQ +0(p), x \ -+ round(v1, x) \ -+ MOVQ +8(p), x \ -+ round(v2, x) \ -+ MOVQ +16(p), x \ -+ round(v3, x) \ -+ MOVQ +24(p), x \ -+ round(v4, x) \ -+ ADDQ $32, p \ -+ CMPQ p, end \ -+ JLE loop -+ -+// func Sum64(b []byte) uint64 -+TEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32 -+ // Load fixed primes. -+ MOVQ ·primes+0(SB), prime1 -+ MOVQ ·primes+8(SB), prime2 -+ MOVQ ·primes+24(SB), prime4 -+ -+ // Load slice. -+ MOVQ b_base+0(FP), p -+ MOVQ b_len+8(FP), n -+ LEAQ (p)(n*1), end -+ -+ // The first loop limit will be len(b)-32. -+ SUBQ $32, end -+ -+ // Check whether we have at least one block. -+ CMPQ n, $32 -+ JLT noBlocks -+ -+ // Set up initial state (v1, v2, v3, v4). -+ MOVQ prime1, v1 -+ ADDQ prime2, v1 -+ MOVQ prime2, v2 -+ XORQ v3, v3 -+ XORQ v4, v4 -+ SUBQ prime1, v4 -+ -+ blockLoop() -+ -+ MOVQ v1, h -+ ROLQ $1, h -+ MOVQ v2, x -+ ROLQ $7, x -+ ADDQ x, h -+ MOVQ v3, x -+ ROLQ $12, x -+ ADDQ x, h -+ MOVQ v4, x -+ ROLQ $18, x -+ ADDQ x, h -+ -+ mergeRound(h, v1) -+ mergeRound(h, v2) -+ mergeRound(h, v3) -+ mergeRound(h, v4) -+ -+ JMP afterBlocks -+ -+noBlocks: -+ MOVQ ·primes+32(SB), h -+ -+afterBlocks: -+ ADDQ n, h -+ -+ ADDQ $24, end -+ CMPQ p, end -+ JG try4 -+ -+loop8: -+ MOVQ (p), x -+ ADDQ $8, p -+ round0(x) -+ XORQ x, h -+ ROLQ $27, h -+ IMULQ prime1, h -+ ADDQ prime4, h -+ -+ CMPQ p, end -+ JLE loop8 -+ -+try4: -+ ADDQ $4, end -+ CMPQ p, end -+ JG try1 -+ -+ MOVL (p), x -+ ADDQ $4, p -+ IMULQ prime1, x -+ XORQ x, h -+ -+ ROLQ $23, h -+ IMULQ prime2, h -+ ADDQ ·primes+16(SB), h -+ -+try1: -+ ADDQ $4, end -+ CMPQ p, end -+ JGE finalize -+ -+loop1: -+ MOVBQZX (p), x -+ ADDQ $1, p -+ IMULQ ·primes+32(SB), x -+ XORQ x, h -+ ROLQ $11, h -+ IMULQ prime1, h -+ -+ CMPQ p, end -+ JL loop1 -+ -+finalize: -+ MOVQ h, x -+ SHRQ $33, x -+ XORQ x, h -+ IMULQ prime2, h -+ MOVQ h, x -+ SHRQ $29, x -+ XORQ x, h -+ IMULQ ·primes+16(SB), h -+ MOVQ h, x -+ SHRQ $32, x -+ XORQ x, h -+ -+ MOVQ h, ret+24(FP) -+ RET -+ -+// func writeBlocks(d *Digest, b []byte) int -+TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40 -+ // Load fixed primes needed for round. -+ MOVQ ·primes+0(SB), prime1 -+ MOVQ ·primes+8(SB), prime2 -+ -+ // Load slice. -+ MOVQ b_base+8(FP), p -+ MOVQ b_len+16(FP), n -+ LEAQ (p)(n*1), end -+ SUBQ $32, end -+ -+ // Load vN from d. -+ MOVQ s+0(FP), d -+ MOVQ 0(d), v1 -+ MOVQ 8(d), v2 -+ MOVQ 16(d), v3 -+ MOVQ 24(d), v4 -+ -+ // We don't need to check the loop condition here; this function is -+ // always called with at least one block of data to process. -+ blockLoop() -+ -+ // Copy vN back to d. -+ MOVQ v1, 0(d) -+ MOVQ v2, 8(d) -+ MOVQ v3, 16(d) -+ MOVQ v4, 24(d) -+ -+ // The number of bytes written is p minus the old base pointer. -+ SUBQ b_base+8(FP), p -+ MOVQ p, ret+32(FP) -+ -+ RET -diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s b/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s -new file mode 100755 -index 0000000..7e3145a ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s -@@ -0,0 +1,183 @@ -+//go:build !appengine && gc && !purego -+// +build !appengine -+// +build gc -+// +build !purego -+ -+#include "textflag.h" -+ -+// Registers: -+#define digest R1 -+#define h R2 // return value -+#define p R3 // input pointer -+#define n R4 // input length -+#define nblocks R5 // n / 32 -+#define prime1 R7 -+#define prime2 R8 -+#define prime3 R9 -+#define prime4 R10 -+#define prime5 R11 -+#define v1 R12 -+#define v2 R13 -+#define v3 R14 -+#define v4 R15 -+#define x1 R20 -+#define x2 R21 -+#define x3 R22 -+#define x4 R23 -+ -+#define round(acc, x) \ -+ MADD prime2, acc, x, acc \ -+ ROR $64-31, acc \ -+ MUL prime1, acc -+ -+// round0 performs the operation x = round(0, x). -+#define round0(x) \ -+ MUL prime2, x \ -+ ROR $64-31, x \ -+ MUL prime1, x -+ -+#define mergeRound(acc, x) \ -+ round0(x) \ -+ EOR x, acc \ -+ MADD acc, prime4, prime1, acc -+ -+// blockLoop processes as many 32-byte blocks as possible, -+// updating v1, v2, v3, and v4. It assumes that n >= 32. -+#define blockLoop() \ -+ LSR $5, n, nblocks \ -+ PCALIGN $16 \ -+ loop: \ -+ LDP.P 16(p), (x1, x2) \ -+ LDP.P 16(p), (x3, x4) \ -+ round(v1, x1) \ -+ round(v2, x2) \ -+ round(v3, x3) \ -+ round(v4, x4) \ -+ SUB $1, nblocks \ -+ CBNZ nblocks, loop -+ -+// func Sum64(b []byte) uint64 -+TEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32 -+ LDP b_base+0(FP), (p, n) -+ -+ LDP ·primes+0(SB), (prime1, prime2) -+ LDP ·primes+16(SB), (prime3, prime4) -+ MOVD ·primes+32(SB), prime5 -+ -+ CMP $32, n -+ CSEL LT, prime5, ZR, h // if n < 32 { h = prime5 } else { h = 0 } -+ BLT afterLoop -+ -+ ADD prime1, prime2, v1 -+ MOVD prime2, v2 -+ MOVD $0, v3 -+ NEG prime1, v4 -+ -+ blockLoop() -+ -+ ROR $64-1, v1, x1 -+ ROR $64-7, v2, x2 -+ ADD x1, x2 -+ ROR $64-12, v3, x3 -+ ROR $64-18, v4, x4 -+ ADD x3, x4 -+ ADD x2, x4, h -+ -+ mergeRound(h, v1) -+ mergeRound(h, v2) -+ mergeRound(h, v3) -+ mergeRound(h, v4) -+ -+afterLoop: -+ ADD n, h -+ -+ TBZ $4, n, try8 -+ LDP.P 16(p), (x1, x2) -+ -+ round0(x1) -+ -+ // NOTE: here and below, sequencing the EOR after the ROR (using a -+ // rotated register) is worth a small but measurable speedup for small -+ // inputs. -+ ROR $64-27, h -+ EOR x1 @> 64-27, h, h -+ MADD h, prime4, prime1, h -+ -+ round0(x2) -+ ROR $64-27, h -+ EOR x2 @> 64-27, h, h -+ MADD h, prime4, prime1, h -+ -+try8: -+ TBZ $3, n, try4 -+ MOVD.P 8(p), x1 -+ -+ round0(x1) -+ ROR $64-27, h -+ EOR x1 @> 64-27, h, h -+ MADD h, prime4, prime1, h -+ -+try4: -+ TBZ $2, n, try2 -+ MOVWU.P 4(p), x2 -+ -+ MUL prime1, x2 -+ ROR $64-23, h -+ EOR x2 @> 64-23, h, h -+ MADD h, prime3, prime2, h -+ -+try2: -+ TBZ $1, n, try1 -+ MOVHU.P 2(p), x3 -+ AND $255, x3, x1 -+ LSR $8, x3, x2 -+ -+ MUL prime5, x1 -+ ROR $64-11, h -+ EOR x1 @> 64-11, h, h -+ MUL prime1, h -+ -+ MUL prime5, x2 -+ ROR $64-11, h -+ EOR x2 @> 64-11, h, h -+ MUL prime1, h -+ -+try1: -+ TBZ $0, n, finalize -+ MOVBU (p), x4 -+ -+ MUL prime5, x4 -+ ROR $64-11, h -+ EOR x4 @> 64-11, h, h -+ MUL prime1, h -+ -+finalize: -+ EOR h >> 33, h -+ MUL prime2, h -+ EOR h >> 29, h -+ MUL prime3, h -+ EOR h >> 32, h -+ -+ MOVD h, ret+24(FP) -+ RET -+ -+// func writeBlocks(d *Digest, b []byte) int -+TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40 -+ LDP ·primes+0(SB), (prime1, prime2) -+ -+ // Load state. Assume v[1-4] are stored contiguously. -+ MOVD d+0(FP), digest -+ LDP 0(digest), (v1, v2) -+ LDP 16(digest), (v3, v4) -+ -+ LDP b_base+8(FP), (p, n) -+ -+ blockLoop() -+ -+ // Store updated state. -+ STP (v1, v2), 0(digest) -+ STP (v3, v4), 16(digest) -+ -+ BIC $31, n -+ MOVD n, ret+32(FP) -+ RET -diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go b/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go -new file mode 100755 -index 0000000..9216e0a ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go -@@ -0,0 +1,15 @@ -+//go:build (amd64 || arm64) && !appengine && gc && !purego -+// +build amd64 arm64 -+// +build !appengine -+// +build gc -+// +build !purego -+ -+package xxhash -+ -+// Sum64 computes the 64-bit xxHash digest of b. -+// -+//go:noescape -+func Sum64(b []byte) uint64 -+ -+//go:noescape -+func writeBlocks(d *Digest, b []byte) int -diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_other.go b/vendor/github.com/cespare/xxhash/v2/xxhash_other.go -new file mode 100755 -index 0000000..26df13b ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/xxhash_other.go -@@ -0,0 +1,76 @@ -+//go:build (!amd64 && !arm64) || appengine || !gc || purego -+// +build !amd64,!arm64 appengine !gc purego -+ -+package xxhash -+ -+// Sum64 computes the 64-bit xxHash digest of b. -+func Sum64(b []byte) uint64 { -+ // A simpler version would be -+ // d := New() -+ // d.Write(b) -+ // return d.Sum64() -+ // but this is faster, particularly for small inputs. -+ -+ n := len(b) -+ var h uint64 -+ -+ if n >= 32 { -+ v1 := primes[0] + prime2 -+ v2 := prime2 -+ v3 := uint64(0) -+ v4 := -primes[0] -+ for len(b) >= 32 { -+ v1 = round(v1, u64(b[0:8:len(b)])) -+ v2 = round(v2, u64(b[8:16:len(b)])) -+ v3 = round(v3, u64(b[16:24:len(b)])) -+ v4 = round(v4, u64(b[24:32:len(b)])) -+ b = b[32:len(b):len(b)] -+ } -+ h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4) -+ h = mergeRound(h, v1) -+ h = mergeRound(h, v2) -+ h = mergeRound(h, v3) -+ h = mergeRound(h, v4) -+ } else { -+ h = prime5 -+ } -+ -+ h += uint64(n) -+ -+ for ; len(b) >= 8; b = b[8:] { -+ k1 := round(0, u64(b[:8])) -+ h ^= k1 -+ h = rol27(h)*prime1 + prime4 -+ } -+ if len(b) >= 4 { -+ h ^= uint64(u32(b[:4])) * prime1 -+ h = rol23(h)*prime2 + prime3 -+ b = b[4:] -+ } -+ for ; len(b) > 0; b = b[1:] { -+ h ^= uint64(b[0]) * prime5 -+ h = rol11(h) * prime1 -+ } -+ -+ h ^= h >> 33 -+ h *= prime2 -+ h ^= h >> 29 -+ h *= prime3 -+ h ^= h >> 32 -+ -+ return h -+} -+ -+func writeBlocks(d *Digest, b []byte) int { -+ v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4 -+ n := len(b) -+ for len(b) >= 32 { -+ v1 = round(v1, u64(b[0:8:len(b)])) -+ v2 = round(v2, u64(b[8:16:len(b)])) -+ v3 = round(v3, u64(b[16:24:len(b)])) -+ v4 = round(v4, u64(b[24:32:len(b)])) -+ b = b[32:len(b):len(b)] -+ } -+ d.v1, d.v2, d.v3, d.v4 = v1, v2, v3, v4 -+ return n - len(b) -+} -diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go b/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go -new file mode 100755 -index 0000000..e86f1b5 ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go -@@ -0,0 +1,16 @@ -+//go:build appengine -+// +build appengine -+ -+// This file contains the safe implementations of otherwise unsafe-using code. -+ -+package xxhash -+ -+// Sum64String computes the 64-bit xxHash digest of s. -+func Sum64String(s string) uint64 { -+ return Sum64([]byte(s)) -+} -+ -+// WriteString adds more data to d. It always returns len(s), nil. -+func (d *Digest) WriteString(s string) (n int, err error) { -+ return d.Write([]byte(s)) -+} -diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go b/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go -new file mode 100755 -index 0000000..1c1638f ---- /dev/null -+++ b/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go -@@ -0,0 +1,58 @@ -+//go:build !appengine -+// +build !appengine -+ -+// This file encapsulates usage of unsafe. -+// xxhash_safe.go contains the safe implementations. -+ -+package xxhash -+ -+import ( -+ "unsafe" -+) -+ -+// In the future it's possible that compiler optimizations will make these -+// XxxString functions unnecessary by realizing that calls such as -+// Sum64([]byte(s)) don't need to copy s. See https://go.dev/issue/2205. -+// If that happens, even if we keep these functions they can be replaced with -+// the trivial safe code. -+ -+// NOTE: The usual way of doing an unsafe string-to-[]byte conversion is: -+// -+// var b []byte -+// bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) -+// bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data -+// bh.Len = len(s) -+// bh.Cap = len(s) -+// -+// Unfortunately, as of Go 1.15.3 the inliner's cost model assigns a high enough -+// weight to this sequence of expressions that any function that uses it will -+// not be inlined. Instead, the functions below use a different unsafe -+// conversion designed to minimize the inliner weight and allow both to be -+// inlined. There is also a test (TestInlining) which verifies that these are -+// inlined. -+// -+// See https://github.com/golang/go/issues/42739 for discussion. -+ -+// Sum64String computes the 64-bit xxHash digest of s. -+// It may be faster than Sum64([]byte(s)) by avoiding a copy. -+func Sum64String(s string) uint64 { -+ b := *(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)})) -+ return Sum64(b) -+} -+ -+// WriteString adds more data to d. It always returns len(s), nil. -+// It may be faster than Write([]byte(s)) by avoiding a copy. -+func (d *Digest) WriteString(s string) (n int, err error) { -+ d.Write(*(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)}))) -+ // d.Write always returns len(s), nil. -+ // Ignoring the return output and returning these fixed values buys a -+ // savings of 6 in the inliner's cost model. -+ return len(s), nil -+} -+ -+// sliceHeader is similar to reflect.SliceHeader, but it assumes that the layout -+// of the first two words is the same as the layout of a string. -+type sliceHeader struct { -+ s string -+ cap int -+} -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/.gitignore b/vendor/github.com/checkpoint-restore/go-criu/v5/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/.golangci.yml b/vendor/github.com/checkpoint-restore/go-criu/v5/.golangci.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/LICENSE b/vendor/github.com/checkpoint-restore/go-criu/v5/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/Makefile b/vendor/github.com/checkpoint-restore/go-criu/v5/Makefile -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/README.md b/vendor/github.com/checkpoint-restore/go-criu/v5/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/features.go b/vendor/github.com/checkpoint-restore/go-criu/v5/features.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/main.go b/vendor/github.com/checkpoint-restore/go-criu/v5/main.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/notify.go b/vendor/github.com/checkpoint-restore/go-criu/v5/notify.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/rpc/rpc.pb.go b/vendor/github.com/checkpoint-restore/go-criu/v5/rpc/rpc.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/checkpoint-restore/go-criu/v5/rpc/rpc.proto b/vendor/github.com/checkpoint-restore/go-criu/v5/rpc/rpc.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/.clang-format b/vendor/github.com/cilium/ebpf/.clang-format -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/.gitignore b/vendor/github.com/cilium/ebpf/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/.golangci.yaml b/vendor/github.com/cilium/ebpf/.golangci.yaml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/ARCHITECTURE.md b/vendor/github.com/cilium/ebpf/ARCHITECTURE.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/CODE_OF_CONDUCT.md b/vendor/github.com/cilium/ebpf/CODE_OF_CONDUCT.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/CONTRIBUTING.md b/vendor/github.com/cilium/ebpf/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/LICENSE b/vendor/github.com/cilium/ebpf/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/Makefile b/vendor/github.com/cilium/ebpf/Makefile -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/README.md b/vendor/github.com/cilium/ebpf/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/alu.go b/vendor/github.com/cilium/ebpf/asm/alu.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/alu_string.go b/vendor/github.com/cilium/ebpf/asm/alu_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/doc.go b/vendor/github.com/cilium/ebpf/asm/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/func.go b/vendor/github.com/cilium/ebpf/asm/func.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/func_string.go b/vendor/github.com/cilium/ebpf/asm/func_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/instruction.go b/vendor/github.com/cilium/ebpf/asm/instruction.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/jump.go b/vendor/github.com/cilium/ebpf/asm/jump.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/jump_string.go b/vendor/github.com/cilium/ebpf/asm/jump_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/load_store.go b/vendor/github.com/cilium/ebpf/asm/load_store.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/load_store_string.go b/vendor/github.com/cilium/ebpf/asm/load_store_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/opcode.go b/vendor/github.com/cilium/ebpf/asm/opcode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/opcode_string.go b/vendor/github.com/cilium/ebpf/asm/opcode_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/asm/register.go b/vendor/github.com/cilium/ebpf/asm/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/attachtype_string.go b/vendor/github.com/cilium/ebpf/attachtype_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/collection.go b/vendor/github.com/cilium/ebpf/collection.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/doc.go b/vendor/github.com/cilium/ebpf/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/elf_reader.go b/vendor/github.com/cilium/ebpf/elf_reader.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/elf_reader_fuzz.go b/vendor/github.com/cilium/ebpf/elf_reader_fuzz.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/info.go b/vendor/github.com/cilium/ebpf/info.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/align.go b/vendor/github.com/cilium/ebpf/internal/align.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/btf.go b/vendor/github.com/cilium/ebpf/internal/btf/btf.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/btf_types.go b/vendor/github.com/cilium/ebpf/internal/btf/btf_types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/btf_types_string.go b/vendor/github.com/cilium/ebpf/internal/btf/btf_types_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/core.go b/vendor/github.com/cilium/ebpf/internal/btf/core.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/doc.go b/vendor/github.com/cilium/ebpf/internal/btf/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/ext_info.go b/vendor/github.com/cilium/ebpf/internal/btf/ext_info.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/fuzz.go b/vendor/github.com/cilium/ebpf/internal/btf/fuzz.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/info.go b/vendor/github.com/cilium/ebpf/internal/btf/info.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/strings.go b/vendor/github.com/cilium/ebpf/internal/btf/strings.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/syscalls.go b/vendor/github.com/cilium/ebpf/internal/btf/syscalls.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/btf/types.go b/vendor/github.com/cilium/ebpf/internal/btf/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/cpu.go b/vendor/github.com/cilium/ebpf/internal/cpu.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/elf.go b/vendor/github.com/cilium/ebpf/internal/elf.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/endian.go b/vendor/github.com/cilium/ebpf/internal/endian.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/errors.go b/vendor/github.com/cilium/ebpf/internal/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/fd.go b/vendor/github.com/cilium/ebpf/internal/fd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/feature.go b/vendor/github.com/cilium/ebpf/internal/feature.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/io.go b/vendor/github.com/cilium/ebpf/internal/io.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/pinning.go b/vendor/github.com/cilium/ebpf/internal/pinning.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/ptr.go b/vendor/github.com/cilium/ebpf/internal/ptr.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/ptr_32_be.go b/vendor/github.com/cilium/ebpf/internal/ptr_32_be.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/ptr_32_le.go b/vendor/github.com/cilium/ebpf/internal/ptr_32_le.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/ptr_64.go b/vendor/github.com/cilium/ebpf/internal/ptr_64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/syscall.go b/vendor/github.com/cilium/ebpf/internal/syscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/syscall_string.go b/vendor/github.com/cilium/ebpf/internal/syscall_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/unix/types_linux.go b/vendor/github.com/cilium/ebpf/internal/unix/types_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/unix/types_other.go b/vendor/github.com/cilium/ebpf/internal/unix/types_other.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/internal/version.go b/vendor/github.com/cilium/ebpf/internal/version.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/cgroup.go b/vendor/github.com/cilium/ebpf/link/cgroup.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/doc.go b/vendor/github.com/cilium/ebpf/link/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/freplace.go b/vendor/github.com/cilium/ebpf/link/freplace.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/iter.go b/vendor/github.com/cilium/ebpf/link/iter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/kprobe.go b/vendor/github.com/cilium/ebpf/link/kprobe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/link.go b/vendor/github.com/cilium/ebpf/link/link.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/netns.go b/vendor/github.com/cilium/ebpf/link/netns.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/perf_event.go b/vendor/github.com/cilium/ebpf/link/perf_event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/platform.go b/vendor/github.com/cilium/ebpf/link/platform.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/program.go b/vendor/github.com/cilium/ebpf/link/program.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/raw_tracepoint.go b/vendor/github.com/cilium/ebpf/link/raw_tracepoint.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/syscalls.go b/vendor/github.com/cilium/ebpf/link/syscalls.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/tracepoint.go b/vendor/github.com/cilium/ebpf/link/tracepoint.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/link/uprobe.go b/vendor/github.com/cilium/ebpf/link/uprobe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/linker.go b/vendor/github.com/cilium/ebpf/linker.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/map.go b/vendor/github.com/cilium/ebpf/map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/marshalers.go b/vendor/github.com/cilium/ebpf/marshalers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/prog.go b/vendor/github.com/cilium/ebpf/prog.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/run-tests.sh b/vendor/github.com/cilium/ebpf/run-tests.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/syscalls.go b/vendor/github.com/cilium/ebpf/syscalls.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/types.go b/vendor/github.com/cilium/ebpf/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cilium/ebpf/types_string.go b/vendor/github.com/cilium/ebpf/types_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/.golangci.yml b/vendor/github.com/containerd/console/.golangci.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/LICENSE b/vendor/github.com/containerd/console/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/README.md b/vendor/github.com/containerd/console/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/console.go b/vendor/github.com/containerd/console/console.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/console_linux.go b/vendor/github.com/containerd/console/console_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/console_unix.go b/vendor/github.com/containerd/console/console_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/console_windows.go b/vendor/github.com/containerd/console/console_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/console_zos.go b/vendor/github.com/containerd/console/console_zos.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/pty_freebsd_cgo.go b/vendor/github.com/containerd/console/pty_freebsd_cgo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/pty_freebsd_nocgo.go b/vendor/github.com/containerd/console/pty_freebsd_nocgo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/pty_unix.go b/vendor/github.com/containerd/console/pty_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_darwin.go b/vendor/github.com/containerd/console/tc_darwin.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_freebsd_cgo.go b/vendor/github.com/containerd/console/tc_freebsd_cgo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_freebsd_nocgo.go b/vendor/github.com/containerd/console/tc_freebsd_nocgo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_linux.go b/vendor/github.com/containerd/console/tc_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_netbsd.go b/vendor/github.com/containerd/console/tc_netbsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_openbsd_cgo.go b/vendor/github.com/containerd/console/tc_openbsd_cgo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_openbsd_nocgo.go b/vendor/github.com/containerd/console/tc_openbsd_nocgo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_solaris_cgo.go b/vendor/github.com/containerd/console/tc_solaris_cgo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_solaris_nocgo.go b/vendor/github.com/containerd/console/tc_solaris_nocgo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_unix.go b/vendor/github.com/containerd/console/tc_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/console/tc_zos.go b/vendor/github.com/containerd/console/tc_zos.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/containerd/nri/LICENSE b/vendor/github.com/containerd/nri/LICENSE -new file mode 100755 -index 0000000..261eeb9 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/LICENSE -@@ -0,0 +1,201 @@ -+ Apache License -+ Version 2.0, January 2004 -+ http://www.apache.org/licenses/ -+ -+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -+ -+ 1. Definitions. -+ -+ "License" shall mean the terms and conditions for use, reproduction, -+ and distribution as defined by Sections 1 through 9 of this document. -+ -+ "Licensor" shall mean the copyright owner or entity authorized by -+ the copyright owner that is granting the License. -+ -+ "Legal Entity" shall mean the union of the acting entity and all -+ other entities that control, are controlled by, or are under common -+ control with that entity. For the purposes of this definition, -+ "control" means (i) the power, direct or indirect, to cause the -+ direction or management of such entity, whether by contract or -+ otherwise, or (ii) ownership of fifty percent (50%) or more of the -+ outstanding shares, or (iii) beneficial ownership of such entity. -+ -+ "You" (or "Your") shall mean an individual or Legal Entity -+ exercising permissions granted by this License. -+ -+ "Source" form shall mean the preferred form for making modifications, -+ including but not limited to software source code, documentation -+ source, and configuration files. -+ -+ "Object" form shall mean any form resulting from mechanical -+ transformation or translation of a Source form, including but -+ not limited to compiled object code, generated documentation, -+ and conversions to other media types. -+ -+ "Work" shall mean the work of authorship, whether in Source or -+ Object form, made available under the License, as indicated by a -+ copyright notice that is included in or attached to the work -+ (an example is provided in the Appendix below). -+ -+ "Derivative Works" shall mean any work, whether in Source or Object -+ form, that is based on (or derived from) the Work and for which the -+ editorial revisions, annotations, elaborations, or other modifications -+ represent, as a whole, an original work of authorship. For the purposes -+ of this License, Derivative Works shall not include works that remain -+ separable from, or merely link (or bind by name) to the interfaces of, -+ the Work and Derivative Works thereof. -+ -+ "Contribution" shall mean any work of authorship, including -+ the original version of the Work and any modifications or additions -+ to that Work or Derivative Works thereof, that is intentionally -+ submitted to Licensor for inclusion in the Work by the copyright owner -+ or by an individual or Legal Entity authorized to submit on behalf of -+ the copyright owner. For the purposes of this definition, "submitted" -+ means any form of electronic, verbal, or written communication sent -+ to the Licensor or its representatives, including but not limited to -+ communication on electronic mailing lists, source code control systems, -+ and issue tracking systems that are managed by, or on behalf of, the -+ Licensor for the purpose of discussing and improving the Work, but -+ excluding communication that is conspicuously marked or otherwise -+ designated in writing by the copyright owner as "Not a Contribution." -+ -+ "Contributor" shall mean Licensor and any individual or Legal Entity -+ on behalf of whom a Contribution has been received by Licensor and -+ subsequently incorporated within the Work. -+ -+ 2. Grant of Copyright License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ copyright license to reproduce, prepare Derivative Works of, -+ publicly display, publicly perform, sublicense, and distribute the -+ Work and such Derivative Works in Source or Object form. -+ -+ 3. Grant of Patent License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ (except as stated in this section) patent license to make, have made, -+ use, offer to sell, sell, import, and otherwise transfer the Work, -+ where such license applies only to those patent claims licensable -+ by such Contributor that are necessarily infringed by their -+ Contribution(s) alone or by combination of their Contribution(s) -+ with the Work to which such Contribution(s) was submitted. If You -+ institute patent litigation against any entity (including a -+ cross-claim or counterclaim in a lawsuit) alleging that the Work -+ or a Contribution incorporated within the Work constitutes direct -+ or contributory patent infringement, then any patent licenses -+ granted to You under this License for that Work shall terminate -+ as of the date such litigation is filed. -+ -+ 4. Redistribution. You may reproduce and distribute copies of the -+ Work or Derivative Works thereof in any medium, with or without -+ modifications, and in Source or Object form, provided that You -+ meet the following conditions: -+ -+ (a) You must give any other recipients of the Work or -+ Derivative Works a copy of this License; and -+ -+ (b) You must cause any modified files to carry prominent notices -+ stating that You changed the files; and -+ -+ (c) You must retain, in the Source form of any Derivative Works -+ that You distribute, all copyright, patent, trademark, and -+ attribution notices from the Source form of the Work, -+ excluding those notices that do not pertain to any part of -+ the Derivative Works; and -+ -+ (d) If the Work includes a "NOTICE" text file as part of its -+ distribution, then any Derivative Works that You distribute must -+ include a readable copy of the attribution notices contained -+ within such NOTICE file, excluding those notices that do not -+ pertain to any part of the Derivative Works, in at least one -+ of the following places: within a NOTICE text file distributed -+ as part of the Derivative Works; within the Source form or -+ documentation, if provided along with the Derivative Works; or, -+ within a display generated by the Derivative Works, if and -+ wherever such third-party notices normally appear. The contents -+ of the NOTICE file are for informational purposes only and -+ do not modify the License. You may add Your own attribution -+ notices within Derivative Works that You distribute, alongside -+ or as an addendum to the NOTICE text from the Work, provided -+ that such additional attribution notices cannot be construed -+ as modifying the License. -+ -+ You may add Your own copyright statement to Your modifications and -+ may provide additional or different license terms and conditions -+ for use, reproduction, or distribution of Your modifications, or -+ for any such Derivative Works as a whole, provided Your use, -+ reproduction, and distribution of the Work otherwise complies with -+ the conditions stated in this License. -+ -+ 5. Submission of Contributions. Unless You explicitly state otherwise, -+ any Contribution intentionally submitted for inclusion in the Work -+ by You to the Licensor shall be under the terms and conditions of -+ this License, without any additional terms or conditions. -+ Notwithstanding the above, nothing herein shall supersede or modify -+ the terms of any separate license agreement you may have executed -+ with Licensor regarding such Contributions. -+ -+ 6. Trademarks. This License does not grant permission to use the trade -+ names, trademarks, service marks, or product names of the Licensor, -+ except as required for reasonable and customary use in describing the -+ origin of the Work and reproducing the content of the NOTICE file. -+ -+ 7. Disclaimer of Warranty. Unless required by applicable law or -+ agreed to in writing, Licensor provides the Work (and each -+ Contributor provides its Contributions) on an "AS IS" BASIS, -+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -+ implied, including, without limitation, any warranties or conditions -+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -+ PARTICULAR PURPOSE. You are solely responsible for determining the -+ appropriateness of using or redistributing the Work and assume any -+ risks associated with Your exercise of permissions under this License. -+ -+ 8. Limitation of Liability. In no event and under no legal theory, -+ whether in tort (including negligence), contract, or otherwise, -+ unless required by applicable law (such as deliberate and grossly -+ negligent acts) or agreed to in writing, shall any Contributor be -+ liable to You for damages, including any direct, indirect, special, -+ incidental, or consequential damages of any character arising as a -+ result of this License or out of the use or inability to use the -+ Work (including but not limited to damages for loss of goodwill, -+ work stoppage, computer failure or malfunction, or any and all -+ other commercial damages or losses), even if such Contributor -+ has been advised of the possibility of such damages. -+ -+ 9. Accepting Warranty or Additional Liability. While redistributing -+ the Work or Derivative Works thereof, You may choose to offer, -+ and charge a fee for, acceptance of support, warranty, indemnity, -+ or other liability obligations and/or rights consistent with this -+ License. However, in accepting such obligations, You may act only -+ on Your own behalf and on Your sole responsibility, not on behalf -+ of any other Contributor, and only if You agree to indemnify, -+ defend, and hold each Contributor harmless for any liability -+ incurred by, or claims asserted against, such Contributor by reason -+ of your accepting any such warranty or additional liability. -+ -+ END OF TERMS AND CONDITIONS -+ -+ APPENDIX: How to apply the Apache License to your work. -+ -+ To apply the Apache License to your work, attach the following -+ boilerplate notice, with the fields enclosed by brackets "[]" -+ replaced with your own identifying information. (Don't include -+ the brackets!) The text should be enclosed in the appropriate -+ comment syntax for the file format. We also recommend that a -+ file or class name and description of purpose be included on the -+ same "printed page" as the copyright notice for easier -+ identification within third-party archives. -+ -+ Copyright [yyyy] [name of copyright owner] -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -diff --git a/vendor/github.com/containerd/nri/pkg/api/adjustment.go b/vendor/github.com/containerd/nri/pkg/api/adjustment.go -new file mode 100755 -index 0000000..0f1fcd3 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/adjustment.go -@@ -0,0 +1,310 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+// -+// Notes: -+// Adjustment of metadata that is stored in maps (labels and annotations) -+// currently assumes that a single plugin will never do an add prior to a -+// delete for any key. IOW, it is always assumed that if both a deletion -+// and an addition/setting was recorded for a key then the final desired -+// state is the addition. This seems like a reasonably safe assumption. A -+// removal is usually done only to protect against triggering the conflict -+// in the runtime when a plugin intends to touch a key which is known to -+// have been put there or already modified by another plugin. -+// -+// An alternative without this implicit ordering assumption would be to -+// store the adjustment for such data as a sequence of add/del operations -+// in a slice. At the moment that does not seem to be necessary. -+// -+ -+// AddAnnotation records the addition of the annotation key=value. -+func (a *ContainerAdjustment) AddAnnotation(key, value string) { -+ a.initAnnotations() -+ a.Annotations[key] = value -+} -+ -+// RemoveAnnotation records the removal of the annotation for the given key. -+// Normally it is an error for a plugin to try and alter an annotation -+// touched by another plugin. However, this is not an error if the plugin -+// removes that annotation prior to touching it. -+func (a *ContainerAdjustment) RemoveAnnotation(key string) { -+ a.initAnnotations() -+ a.Annotations[MarkForRemoval(key)] = "" -+} -+ -+// AddMount records the addition of a mount to a container. -+func (a *ContainerAdjustment) AddMount(m *Mount) { -+ a.Mounts = append(a.Mounts, m) // TODO: should we dup m here ? -+} -+ -+// RemoveMount records the removal of a mount from a container. -+// Normally it is an error for a plugin to try and alter a mount -+// touched by another plugin. However, this is not an error if the -+// plugin removes that mount prior to touching it. -+func (a *ContainerAdjustment) RemoveMount(ContainerPath string) { -+ a.Mounts = append(a.Mounts, &Mount{ -+ Destination: MarkForRemoval(ContainerPath), -+ }) -+} -+ -+// AddEnv records the addition of an environment variable to a container. -+func (a *ContainerAdjustment) AddEnv(key, value string) { -+ a.Env = append(a.Env, &KeyValue{ -+ Key: key, -+ Value: value, -+ }) -+} -+ -+// RemoveEnv records the removal of an environment variable from a container. -+// Normally it is an error for a plugin to try and alter an environment -+// variable touched by another container. However, this is not an error if -+// the plugin removes that variable prior to touching it. -+func (a *ContainerAdjustment) RemoveEnv(key string) { -+ a.Env = append(a.Env, &KeyValue{ -+ Key: MarkForRemoval(key), -+ }) -+} -+ -+// AddHooks records the addition of the given hooks to a container. -+func (a *ContainerAdjustment) AddHooks(h *Hooks) { -+ a.initHooks() -+ if h.Prestart != nil { -+ a.Hooks.Prestart = append(a.Hooks.Prestart, h.Prestart...) -+ } -+ if h.CreateRuntime != nil { -+ a.Hooks.CreateRuntime = append(a.Hooks.CreateRuntime, h.CreateRuntime...) -+ } -+ if h.CreateContainer != nil { -+ a.Hooks.CreateContainer = append(a.Hooks.CreateContainer, h.CreateContainer...) -+ } -+ if h.StartContainer != nil { -+ a.Hooks.StartContainer = append(a.Hooks.StartContainer, h.StartContainer...) -+ } -+ if h.Poststart != nil { -+ a.Hooks.Poststart = append(a.Hooks.Poststart, h.Poststart...) -+ } -+ if h.Poststop != nil { -+ a.Hooks.Poststop = append(a.Hooks.Poststop, h.Poststop...) -+ } -+} -+ -+func (a *ContainerAdjustment) AddRlimit(typ string, hard, soft uint64) { -+ a.initRlimits() -+ a.Rlimits = append(a.Rlimits, &POSIXRlimit{ -+ Type: typ, -+ Hard: hard, -+ Soft: soft, -+ }) -+} -+ -+// AddDevice records the addition of the given device to a container. -+func (a *ContainerAdjustment) AddDevice(d *LinuxDevice) { -+ a.initLinux() -+ a.Linux.Devices = append(a.Linux.Devices, d) // TODO: should we dup d here ? -+} -+ -+// RemoveDevice records the removal of a device from a container. -+// Normally it is an error for a plugin to try and alter an device -+// touched by another container. However, this is not an error if -+// the plugin removes that device prior to touching it. -+func (a *ContainerAdjustment) RemoveDevice(path string) { -+ a.initLinux() -+ a.Linux.Devices = append(a.Linux.Devices, &LinuxDevice{ -+ Path: MarkForRemoval(path), -+ }) -+} -+ -+// SetLinuxMemoryLimit records setting the memory limit for a container. -+func (a *ContainerAdjustment) SetLinuxMemoryLimit(value int64) { -+ a.initLinuxResourcesMemory() -+ a.Linux.Resources.Memory.Limit = Int64(value) -+} -+ -+// SetLinuxMemoryReservation records setting the memory reservation for a container. -+func (a *ContainerAdjustment) SetLinuxMemoryReservation(value int64) { -+ a.initLinuxResourcesMemory() -+ a.Linux.Resources.Memory.Reservation = Int64(value) -+} -+ -+// SetLinuxMemorySwap records records setting the memory swap limit for a container. -+func (a *ContainerAdjustment) SetLinuxMemorySwap(value int64) { -+ a.initLinuxResourcesMemory() -+ a.Linux.Resources.Memory.Swap = Int64(value) -+} -+ -+// SetLinuxMemoryKernel records setting the memory kernel limit for a container. -+func (a *ContainerAdjustment) SetLinuxMemoryKernel(value int64) { -+ a.initLinuxResourcesMemory() -+ a.Linux.Resources.Memory.Kernel = Int64(value) -+} -+ -+// SetLinuxMemoryKernelTCP records setting the memory kernel TCP limit for a container. -+func (a *ContainerAdjustment) SetLinuxMemoryKernelTCP(value int64) { -+ a.initLinuxResourcesMemory() -+ a.Linux.Resources.Memory.KernelTcp = Int64(value) -+} -+ -+// SetLinuxMemorySwappiness records setting the memory swappiness for a container. -+func (a *ContainerAdjustment) SetLinuxMemorySwappiness(value uint64) { -+ a.initLinuxResourcesMemory() -+ a.Linux.Resources.Memory.Swappiness = UInt64(value) -+} -+ -+// SetLinuxMemoryDisableOomKiller records disabling the OOM killer for a container. -+func (a *ContainerAdjustment) SetLinuxMemoryDisableOomKiller() { -+ a.initLinuxResourcesMemory() -+ a.Linux.Resources.Memory.DisableOomKiller = Bool(true) -+} -+ -+// SetLinuxMemoryUseHierarchy records enabling hierarchical memory accounting for a container. -+func (a *ContainerAdjustment) SetLinuxMemoryUseHierarchy() { -+ a.initLinuxResourcesMemory() -+ a.Linux.Resources.Memory.UseHierarchy = Bool(true) -+} -+ -+// SetLinuxCPUShares records setting the scheduler's CPU shares for a container. -+func (a *ContainerAdjustment) SetLinuxCPUShares(value uint64) { -+ a.initLinuxResourcesCPU() -+ a.Linux.Resources.Cpu.Shares = UInt64(value) -+} -+ -+// SetLinuxCPUQuota records setting the scheduler's CPU quota for a container. -+func (a *ContainerAdjustment) SetLinuxCPUQuota(value int64) { -+ a.initLinuxResourcesCPU() -+ a.Linux.Resources.Cpu.Quota = Int64(value) -+} -+ -+// SetLinuxCPUPeriod records setting the scheduler's CPU period for a container. -+func (a *ContainerAdjustment) SetLinuxCPUPeriod(value int64) { -+ a.initLinuxResourcesCPU() -+ a.Linux.Resources.Cpu.Period = UInt64(value) -+} -+ -+// SetLinuxCPURealtimeRuntime records setting the scheduler's realtime runtime for a container. -+func (a *ContainerAdjustment) SetLinuxCPURealtimeRuntime(value int64) { -+ a.initLinuxResourcesCPU() -+ a.Linux.Resources.Cpu.RealtimeRuntime = Int64(value) -+} -+ -+// SetLinuxCPURealtimePeriod records setting the scheduler's realtime period for a container. -+func (a *ContainerAdjustment) SetLinuxCPURealtimePeriod(value uint64) { -+ a.initLinuxResourcesCPU() -+ a.Linux.Resources.Cpu.RealtimePeriod = UInt64(value) -+} -+ -+// SetLinuxCPUSetCPUs records setting the cpuset CPUs for a container. -+func (a *ContainerAdjustment) SetLinuxCPUSetCPUs(value string) { -+ a.initLinuxResourcesCPU() -+ a.Linux.Resources.Cpu.Cpus = value -+} -+ -+// SetLinuxCPUSetMems records setting the cpuset memory for a container. -+func (a *ContainerAdjustment) SetLinuxCPUSetMems(value string) { -+ a.initLinuxResourcesCPU() -+ a.Linux.Resources.Cpu.Mems = value -+} -+ -+// AddLinuxHugepageLimit records adding a hugepage limit for a container. -+func (a *ContainerAdjustment) AddLinuxHugepageLimit(pageSize string, value uint64) { -+ a.initLinuxResources() -+ a.Linux.Resources.HugepageLimits = append(a.Linux.Resources.HugepageLimits, -+ &HugepageLimit{ -+ PageSize: pageSize, -+ Limit: value, -+ }) -+} -+ -+// SetLinuxBlockIOClass records setting the Block I/O class for a container. -+func (a *ContainerAdjustment) SetLinuxBlockIOClass(value string) { -+ a.initLinuxResources() -+ a.Linux.Resources.BlockioClass = String(value) -+} -+ -+// SetLinuxRDTClass records setting the RDT class for a container. -+func (a *ContainerAdjustment) SetLinuxRDTClass(value string) { -+ a.initLinuxResources() -+ a.Linux.Resources.RdtClass = String(value) -+} -+ -+// AddLinuxUnified sets a cgroupv2 unified resource. -+func (a *ContainerAdjustment) AddLinuxUnified(key, value string) { -+ a.initLinuxResourcesUnified() -+ a.Linux.Resources.Unified[key] = value -+} -+ -+// SetLinuxCgroupsPath records setting the cgroups path for a container. -+func (a *ContainerAdjustment) SetLinuxCgroupsPath(value string) { -+ a.initLinux() -+ a.Linux.CgroupsPath = value -+} -+ -+// -+// Initializing a container adjustment and container update. -+// -+ -+func (a *ContainerAdjustment) initAnnotations() { -+ if a.Annotations == nil { -+ a.Annotations = make(map[string]string) -+ } -+} -+ -+func (a *ContainerAdjustment) initHooks() { -+ if a.Hooks == nil { -+ a.Hooks = &Hooks{} -+ } -+} -+ -+func (a *ContainerAdjustment) initRlimits() { -+ if a.Rlimits == nil { -+ a.Rlimits = []*POSIXRlimit{} -+ } -+} -+ -+func (a *ContainerAdjustment) initLinux() { -+ if a.Linux == nil { -+ a.Linux = &LinuxContainerAdjustment{} -+ } -+} -+ -+func (a *ContainerAdjustment) initLinuxResources() { -+ a.initLinux() -+ if a.Linux.Resources == nil { -+ a.Linux.Resources = &LinuxResources{} -+ } -+} -+ -+func (a *ContainerAdjustment) initLinuxResourcesMemory() { -+ a.initLinuxResources() -+ if a.Linux.Resources.Memory == nil { -+ a.Linux.Resources.Memory = &LinuxMemory{} -+ } -+} -+ -+func (a *ContainerAdjustment) initLinuxResourcesCPU() { -+ a.initLinuxResources() -+ if a.Linux.Resources.Cpu == nil { -+ a.Linux.Resources.Cpu = &LinuxCPU{} -+ } -+} -+ -+func (a *ContainerAdjustment) initLinuxResourcesUnified() { -+ a.initLinuxResources() -+ if a.Linux.Resources.Unified == nil { -+ a.Linux.Resources.Unified = make(map[string]string) -+ } -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/api.pb.go b/vendor/github.com/containerd/nri/pkg/api/api.pb.go -new file mode 100755 -index 0000000..d06c02e ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/api.pb.go -@@ -0,0 +1,4402 @@ -+// -+//Copyright The containerd Authors. -+// -+//Licensed under the Apache License, Version 2.0 (the "License"); -+//you may not use this file except in compliance with the License. -+//You may obtain a copy of the License at -+// -+//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. -+ -+// Code generated by protoc-gen-go. DO NOT EDIT. -+// versions: -+// protoc-gen-go v1.28.1 -+// protoc v3.20.1 -+// source: pkg/api/api.proto -+ -+package api -+ -+import ( -+ protoreflect "google.golang.org/protobuf/reflect/protoreflect" -+ protoimpl "google.golang.org/protobuf/runtime/protoimpl" -+ reflect "reflect" -+ sync "sync" -+) -+ -+const ( -+ // Verify that this generated code is sufficiently up-to-date. -+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) -+ // Verify that runtime/protoimpl is sufficiently up-to-date. -+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -+) -+ -+// Events that plugins can subscribe to in ConfigureResponse. -+type Event int32 -+ -+const ( -+ Event_UNKNOWN Event = 0 -+ Event_RUN_POD_SANDBOX Event = 1 -+ Event_STOP_POD_SANDBOX Event = 2 -+ Event_REMOVE_POD_SANDBOX Event = 3 -+ Event_CREATE_CONTAINER Event = 4 -+ Event_POST_CREATE_CONTAINER Event = 5 -+ Event_START_CONTAINER Event = 6 -+ Event_POST_START_CONTAINER Event = 7 -+ Event_UPDATE_CONTAINER Event = 8 -+ Event_POST_UPDATE_CONTAINER Event = 9 -+ Event_STOP_CONTAINER Event = 10 -+ Event_REMOVE_CONTAINER Event = 11 -+ Event_LAST Event = 12 -+) -+ -+// Enum value maps for Event. -+var ( -+ Event_name = map[int32]string{ -+ 0: "UNKNOWN", -+ 1: "RUN_POD_SANDBOX", -+ 2: "STOP_POD_SANDBOX", -+ 3: "REMOVE_POD_SANDBOX", -+ 4: "CREATE_CONTAINER", -+ 5: "POST_CREATE_CONTAINER", -+ 6: "START_CONTAINER", -+ 7: "POST_START_CONTAINER", -+ 8: "UPDATE_CONTAINER", -+ 9: "POST_UPDATE_CONTAINER", -+ 10: "STOP_CONTAINER", -+ 11: "REMOVE_CONTAINER", -+ 12: "LAST", -+ } -+ Event_value = map[string]int32{ -+ "UNKNOWN": 0, -+ "RUN_POD_SANDBOX": 1, -+ "STOP_POD_SANDBOX": 2, -+ "REMOVE_POD_SANDBOX": 3, -+ "CREATE_CONTAINER": 4, -+ "POST_CREATE_CONTAINER": 5, -+ "START_CONTAINER": 6, -+ "POST_START_CONTAINER": 7, -+ "UPDATE_CONTAINER": 8, -+ "POST_UPDATE_CONTAINER": 9, -+ "STOP_CONTAINER": 10, -+ "REMOVE_CONTAINER": 11, -+ "LAST": 12, -+ } -+) -+ -+func (x Event) Enum() *Event { -+ p := new(Event) -+ *p = x -+ return p -+} -+ -+func (x Event) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (Event) Descriptor() protoreflect.EnumDescriptor { -+ return file_pkg_api_api_proto_enumTypes[0].Descriptor() -+} -+ -+func (Event) Type() protoreflect.EnumType { -+ return &file_pkg_api_api_proto_enumTypes[0] -+} -+ -+func (x Event) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Use Event.Descriptor instead. -+func (Event) EnumDescriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{0} -+} -+ -+// Possible container states. -+type ContainerState int32 -+ -+const ( -+ ContainerState_CONTAINER_UNKNOWN ContainerState = 0 -+ ContainerState_CONTAINER_CREATED ContainerState = 1 -+ ContainerState_CONTAINER_PAUSED ContainerState = 2 // is this useful/necessary ? -+ ContainerState_CONTAINER_RUNNING ContainerState = 3 -+ ContainerState_CONTAINER_STOPPED ContainerState = 4 -+) -+ -+// Enum value maps for ContainerState. -+var ( -+ ContainerState_name = map[int32]string{ -+ 0: "CONTAINER_UNKNOWN", -+ 1: "CONTAINER_CREATED", -+ 2: "CONTAINER_PAUSED", -+ 3: "CONTAINER_RUNNING", -+ 4: "CONTAINER_STOPPED", -+ } -+ ContainerState_value = map[string]int32{ -+ "CONTAINER_UNKNOWN": 0, -+ "CONTAINER_CREATED": 1, -+ "CONTAINER_PAUSED": 2, -+ "CONTAINER_RUNNING": 3, -+ "CONTAINER_STOPPED": 4, -+ } -+) -+ -+func (x ContainerState) Enum() *ContainerState { -+ p := new(ContainerState) -+ *p = x -+ return p -+} -+ -+func (x ContainerState) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (ContainerState) Descriptor() protoreflect.EnumDescriptor { -+ return file_pkg_api_api_proto_enumTypes[1].Descriptor() -+} -+ -+func (ContainerState) Type() protoreflect.EnumType { -+ return &file_pkg_api_api_proto_enumTypes[1] -+} -+ -+func (x ContainerState) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Use ContainerState.Descriptor instead. -+func (ContainerState) EnumDescriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{1} -+} -+ -+type RegisterPluginRequest struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Name of the plugin to register. -+ PluginName string `protobuf:"bytes,1,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` -+ // Plugin invocation index. Plugins are called in ascending index order. -+ PluginIdx string `protobuf:"bytes,2,opt,name=plugin_idx,json=pluginIdx,proto3" json:"plugin_idx,omitempty"` -+} -+ -+func (x *RegisterPluginRequest) Reset() { -+ *x = RegisterPluginRequest{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[0] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *RegisterPluginRequest) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*RegisterPluginRequest) ProtoMessage() {} -+ -+func (x *RegisterPluginRequest) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[0] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use RegisterPluginRequest.ProtoReflect.Descriptor instead. -+func (*RegisterPluginRequest) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{0} -+} -+ -+func (x *RegisterPluginRequest) GetPluginName() string { -+ if x != nil { -+ return x.PluginName -+ } -+ return "" -+} -+ -+func (x *RegisterPluginRequest) GetPluginIdx() string { -+ if x != nil { -+ return x.PluginIdx -+ } -+ return "" -+} -+ -+type UpdateContainersRequest struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // List of containers to update. -+ Update []*ContainerUpdate `protobuf:"bytes,1,rep,name=update,proto3" json:"update,omitempty"` -+ // List of containers to evict. -+ Evict []*ContainerEviction `protobuf:"bytes,2,rep,name=evict,proto3" json:"evict,omitempty"` -+} -+ -+func (x *UpdateContainersRequest) Reset() { -+ *x = UpdateContainersRequest{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[1] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *UpdateContainersRequest) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*UpdateContainersRequest) ProtoMessage() {} -+ -+func (x *UpdateContainersRequest) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[1] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use UpdateContainersRequest.ProtoReflect.Descriptor instead. -+func (*UpdateContainersRequest) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{1} -+} -+ -+func (x *UpdateContainersRequest) GetUpdate() []*ContainerUpdate { -+ if x != nil { -+ return x.Update -+ } -+ return nil -+} -+ -+func (x *UpdateContainersRequest) GetEvict() []*ContainerEviction { -+ if x != nil { -+ return x.Evict -+ } -+ return nil -+} -+ -+type UpdateContainersResponse struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Containers that the runtime failed to udpate. -+ Failed []*ContainerUpdate `protobuf:"bytes,1,rep,name=failed,proto3" json:"failed,omitempty"` -+} -+ -+func (x *UpdateContainersResponse) Reset() { -+ *x = UpdateContainersResponse{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[2] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *UpdateContainersResponse) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*UpdateContainersResponse) ProtoMessage() {} -+ -+func (x *UpdateContainersResponse) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[2] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use UpdateContainersResponse.ProtoReflect.Descriptor instead. -+func (*UpdateContainersResponse) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{2} -+} -+ -+func (x *UpdateContainersResponse) GetFailed() []*ContainerUpdate { -+ if x != nil { -+ return x.Failed -+ } -+ return nil -+} -+ -+type ConfigureRequest struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Any plugin-specific data, if present among the NRI configuration. -+ Config string `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` -+ // Name of the runtime NRI is running in. -+ RuntimeName string `protobuf:"bytes,2,opt,name=runtime_name,json=runtimeName,proto3" json:"runtime_name,omitempty"` -+ // Version of the runtime NRI is running in. -+ RuntimeVersion string `protobuf:"bytes,3,opt,name=runtime_version,json=runtimeVersion,proto3" json:"runtime_version,omitempty"` -+} -+ -+func (x *ConfigureRequest) Reset() { -+ *x = ConfigureRequest{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[3] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *ConfigureRequest) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*ConfigureRequest) ProtoMessage() {} -+ -+func (x *ConfigureRequest) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[3] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use ConfigureRequest.ProtoReflect.Descriptor instead. -+func (*ConfigureRequest) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{3} -+} -+ -+func (x *ConfigureRequest) GetConfig() string { -+ if x != nil { -+ return x.Config -+ } -+ return "" -+} -+ -+func (x *ConfigureRequest) GetRuntimeName() string { -+ if x != nil { -+ return x.RuntimeName -+ } -+ return "" -+} -+ -+func (x *ConfigureRequest) GetRuntimeVersion() string { -+ if x != nil { -+ return x.RuntimeVersion -+ } -+ return "" -+} -+ -+type ConfigureResponse struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Events to subscribe the plugin for. Each bit set corresponds to an -+ // enumerated Event. -+ Events int32 `protobuf:"varint,2,opt,name=events,proto3" json:"events,omitempty"` -+} -+ -+func (x *ConfigureResponse) Reset() { -+ *x = ConfigureResponse{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[4] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *ConfigureResponse) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*ConfigureResponse) ProtoMessage() {} -+ -+func (x *ConfigureResponse) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[4] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use ConfigureResponse.ProtoReflect.Descriptor instead. -+func (*ConfigureResponse) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{4} -+} -+ -+func (x *ConfigureResponse) GetEvents() int32 { -+ if x != nil { -+ return x.Events -+ } -+ return 0 -+} -+ -+type SynchronizeRequest struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Pods known to the runtime. -+ Pods []*PodSandbox `protobuf:"bytes,1,rep,name=pods,proto3" json:"pods,omitempty"` -+ // Containers known to the runtime. -+ Containers []*Container `protobuf:"bytes,2,rep,name=containers,proto3" json:"containers,omitempty"` -+} -+ -+func (x *SynchronizeRequest) Reset() { -+ *x = SynchronizeRequest{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[5] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *SynchronizeRequest) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*SynchronizeRequest) ProtoMessage() {} -+ -+func (x *SynchronizeRequest) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[5] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use SynchronizeRequest.ProtoReflect.Descriptor instead. -+func (*SynchronizeRequest) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{5} -+} -+ -+func (x *SynchronizeRequest) GetPods() []*PodSandbox { -+ if x != nil { -+ return x.Pods -+ } -+ return nil -+} -+ -+func (x *SynchronizeRequest) GetContainers() []*Container { -+ if x != nil { -+ return x.Containers -+ } -+ return nil -+} -+ -+type SynchronizeResponse struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Updates to containers requested by the plugin. -+ Update []*ContainerUpdate `protobuf:"bytes,1,rep,name=update,proto3" json:"update,omitempty"` -+} -+ -+func (x *SynchronizeResponse) Reset() { -+ *x = SynchronizeResponse{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[6] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *SynchronizeResponse) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*SynchronizeResponse) ProtoMessage() {} -+ -+func (x *SynchronizeResponse) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[6] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use SynchronizeResponse.ProtoReflect.Descriptor instead. -+func (*SynchronizeResponse) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{6} -+} -+ -+func (x *SynchronizeResponse) GetUpdate() []*ContainerUpdate { -+ if x != nil { -+ return x.Update -+ } -+ return nil -+} -+ -+type CreateContainerRequest struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Pod of container being created. -+ Pod *PodSandbox `protobuf:"bytes,1,opt,name=pod,proto3" json:"pod,omitempty"` -+ // Container being created. -+ Container *Container `protobuf:"bytes,2,opt,name=container,proto3" json:"container,omitempty"` -+} -+ -+func (x *CreateContainerRequest) Reset() { -+ *x = CreateContainerRequest{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[7] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *CreateContainerRequest) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*CreateContainerRequest) ProtoMessage() {} -+ -+func (x *CreateContainerRequest) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[7] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use CreateContainerRequest.ProtoReflect.Descriptor instead. -+func (*CreateContainerRequest) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{7} -+} -+ -+func (x *CreateContainerRequest) GetPod() *PodSandbox { -+ if x != nil { -+ return x.Pod -+ } -+ return nil -+} -+ -+func (x *CreateContainerRequest) GetContainer() *Container { -+ if x != nil { -+ return x.Container -+ } -+ return nil -+} -+ -+type CreateContainerResponse struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Requested adjustments to container being created. -+ Adjust *ContainerAdjustment `protobuf:"bytes,1,opt,name=adjust,proto3" json:"adjust,omitempty"` -+ // Requested updates to other existing containers. -+ Update []*ContainerUpdate `protobuf:"bytes,2,rep,name=update,proto3" json:"update,omitempty"` -+ // Requested eviction of existing containers. -+ Evict []*ContainerEviction `protobuf:"bytes,3,rep,name=evict,proto3" json:"evict,omitempty"` -+} -+ -+func (x *CreateContainerResponse) Reset() { -+ *x = CreateContainerResponse{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[8] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *CreateContainerResponse) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*CreateContainerResponse) ProtoMessage() {} -+ -+func (x *CreateContainerResponse) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[8] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use CreateContainerResponse.ProtoReflect.Descriptor instead. -+func (*CreateContainerResponse) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{8} -+} -+ -+func (x *CreateContainerResponse) GetAdjust() *ContainerAdjustment { -+ if x != nil { -+ return x.Adjust -+ } -+ return nil -+} -+ -+func (x *CreateContainerResponse) GetUpdate() []*ContainerUpdate { -+ if x != nil { -+ return x.Update -+ } -+ return nil -+} -+ -+func (x *CreateContainerResponse) GetEvict() []*ContainerEviction { -+ if x != nil { -+ return x.Evict -+ } -+ return nil -+} -+ -+type UpdateContainerRequest struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Pod of container being updated. -+ Pod *PodSandbox `protobuf:"bytes,1,opt,name=pod,proto3" json:"pod,omitempty"` -+ // Container being updated. -+ Container *Container `protobuf:"bytes,2,opt,name=container,proto3" json:"container,omitempty"` -+ // Resources to update. -+ LinuxResources *LinuxResources `protobuf:"bytes,3,opt,name=linux_resources,json=linuxResources,proto3" json:"linux_resources,omitempty"` -+} -+ -+func (x *UpdateContainerRequest) Reset() { -+ *x = UpdateContainerRequest{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[9] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *UpdateContainerRequest) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*UpdateContainerRequest) ProtoMessage() {} -+ -+func (x *UpdateContainerRequest) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[9] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use UpdateContainerRequest.ProtoReflect.Descriptor instead. -+func (*UpdateContainerRequest) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{9} -+} -+ -+func (x *UpdateContainerRequest) GetPod() *PodSandbox { -+ if x != nil { -+ return x.Pod -+ } -+ return nil -+} -+ -+func (x *UpdateContainerRequest) GetContainer() *Container { -+ if x != nil { -+ return x.Container -+ } -+ return nil -+} -+ -+func (x *UpdateContainerRequest) GetLinuxResources() *LinuxResources { -+ if x != nil { -+ return x.LinuxResources -+ } -+ return nil -+} -+ -+type UpdateContainerResponse struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Requested updates to containers. -+ Update []*ContainerUpdate `protobuf:"bytes,1,rep,name=update,proto3" json:"update,omitempty"` -+ // Requested eviction of containers. -+ Evict []*ContainerEviction `protobuf:"bytes,2,rep,name=evict,proto3" json:"evict,omitempty"` -+} -+ -+func (x *UpdateContainerResponse) Reset() { -+ *x = UpdateContainerResponse{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[10] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *UpdateContainerResponse) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*UpdateContainerResponse) ProtoMessage() {} -+ -+func (x *UpdateContainerResponse) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[10] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use UpdateContainerResponse.ProtoReflect.Descriptor instead. -+func (*UpdateContainerResponse) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{10} -+} -+ -+func (x *UpdateContainerResponse) GetUpdate() []*ContainerUpdate { -+ if x != nil { -+ return x.Update -+ } -+ return nil -+} -+ -+func (x *UpdateContainerResponse) GetEvict() []*ContainerEviction { -+ if x != nil { -+ return x.Evict -+ } -+ return nil -+} -+ -+type StopContainerRequest struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Pod of container being stopped. -+ Pod *PodSandbox `protobuf:"bytes,1,opt,name=pod,proto3" json:"pod,omitempty"` -+ // Container being stopped. -+ Container *Container `protobuf:"bytes,2,opt,name=container,proto3" json:"container,omitempty"` -+} -+ -+func (x *StopContainerRequest) Reset() { -+ *x = StopContainerRequest{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[11] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *StopContainerRequest) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*StopContainerRequest) ProtoMessage() {} -+ -+func (x *StopContainerRequest) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[11] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use StopContainerRequest.ProtoReflect.Descriptor instead. -+func (*StopContainerRequest) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{11} -+} -+ -+func (x *StopContainerRequest) GetPod() *PodSandbox { -+ if x != nil { -+ return x.Pod -+ } -+ return nil -+} -+ -+func (x *StopContainerRequest) GetContainer() *Container { -+ if x != nil { -+ return x.Container -+ } -+ return nil -+} -+ -+type StopContainerResponse struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Requested updates to containers. -+ Update []*ContainerUpdate `protobuf:"bytes,1,rep,name=update,proto3" json:"update,omitempty"` -+} -+ -+func (x *StopContainerResponse) Reset() { -+ *x = StopContainerResponse{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[12] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *StopContainerResponse) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*StopContainerResponse) ProtoMessage() {} -+ -+func (x *StopContainerResponse) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[12] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use StopContainerResponse.ProtoReflect.Descriptor instead. -+func (*StopContainerResponse) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{12} -+} -+ -+func (x *StopContainerResponse) GetUpdate() []*ContainerUpdate { -+ if x != nil { -+ return x.Update -+ } -+ return nil -+} -+ -+type StateChangeEvent struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Event type of notification. -+ Event Event `protobuf:"varint,1,opt,name=event,proto3,enum=nri.pkg.api.v1alpha1.Event" json:"event,omitempty"` -+ // Pod this notification is sent for. If this event is related to a container, -+ // pod is set to the pod of the container. -+ Pod *PodSandbox `protobuf:"bytes,2,opt,name=pod,proto3" json:"pod,omitempty"` -+ // Container this notification is sent for. If the event is related to a pod, -+ // container is nil. -+ Container *Container `protobuf:"bytes,3,opt,name=container,proto3" json:"container,omitempty"` -+} -+ -+func (x *StateChangeEvent) Reset() { -+ *x = StateChangeEvent{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[13] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *StateChangeEvent) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*StateChangeEvent) ProtoMessage() {} -+ -+func (x *StateChangeEvent) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[13] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use StateChangeEvent.ProtoReflect.Descriptor instead. -+func (*StateChangeEvent) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{13} -+} -+ -+func (x *StateChangeEvent) GetEvent() Event { -+ if x != nil { -+ return x.Event -+ } -+ return Event_UNKNOWN -+} -+ -+func (x *StateChangeEvent) GetPod() *PodSandbox { -+ if x != nil { -+ return x.Pod -+ } -+ return nil -+} -+ -+func (x *StateChangeEvent) GetContainer() *Container { -+ if x != nil { -+ return x.Container -+ } -+ return nil -+} -+ -+// Empty response for those *Requests that are semantically events. -+type Empty struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+} -+ -+func (x *Empty) Reset() { -+ *x = Empty{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[14] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Empty) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Empty) ProtoMessage() {} -+ -+func (x *Empty) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[14] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Empty.ProtoReflect.Descriptor instead. -+func (*Empty) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{14} -+} -+ -+// Pod metadata that is considered relevant for a plugin. -+type PodSandbox struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` -+ Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"` -+ Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` -+ Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ Annotations map[string]string `protobuf:"bytes,6,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ RuntimeHandler string `protobuf:"bytes,7,opt,name=runtime_handler,json=runtimeHandler,proto3" json:"runtime_handler,omitempty"` -+ Linux *LinuxPodSandbox `protobuf:"bytes,8,opt,name=linux,proto3" json:"linux,omitempty"` -+ Pid uint32 `protobuf:"varint,9,opt,name=pid,proto3" json:"pid,omitempty"` // for NRI v1 emulation -+} -+ -+func (x *PodSandbox) Reset() { -+ *x = PodSandbox{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[15] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *PodSandbox) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*PodSandbox) ProtoMessage() {} -+ -+func (x *PodSandbox) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[15] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use PodSandbox.ProtoReflect.Descriptor instead. -+func (*PodSandbox) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{15} -+} -+ -+func (x *PodSandbox) GetId() string { -+ if x != nil { -+ return x.Id -+ } -+ return "" -+} -+ -+func (x *PodSandbox) GetName() string { -+ if x != nil { -+ return x.Name -+ } -+ return "" -+} -+ -+func (x *PodSandbox) GetUid() string { -+ if x != nil { -+ return x.Uid -+ } -+ return "" -+} -+ -+func (x *PodSandbox) GetNamespace() string { -+ if x != nil { -+ return x.Namespace -+ } -+ return "" -+} -+ -+func (x *PodSandbox) GetLabels() map[string]string { -+ if x != nil { -+ return x.Labels -+ } -+ return nil -+} -+ -+func (x *PodSandbox) GetAnnotations() map[string]string { -+ if x != nil { -+ return x.Annotations -+ } -+ return nil -+} -+ -+func (x *PodSandbox) GetRuntimeHandler() string { -+ if x != nil { -+ return x.RuntimeHandler -+ } -+ return "" -+} -+ -+func (x *PodSandbox) GetLinux() *LinuxPodSandbox { -+ if x != nil { -+ return x.Linux -+ } -+ return nil -+} -+ -+func (x *PodSandbox) GetPid() uint32 { -+ if x != nil { -+ return x.Pid -+ } -+ return 0 -+} -+ -+// PodSandbox linux-specific metadata -+type LinuxPodSandbox struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ PodOverhead *LinuxResources `protobuf:"bytes,1,opt,name=pod_overhead,json=podOverhead,proto3" json:"pod_overhead,omitempty"` -+ PodResources *LinuxResources `protobuf:"bytes,2,opt,name=pod_resources,json=podResources,proto3" json:"pod_resources,omitempty"` -+ CgroupParent string `protobuf:"bytes,3,opt,name=cgroup_parent,json=cgroupParent,proto3" json:"cgroup_parent,omitempty"` -+ CgroupsPath string `protobuf:"bytes,4,opt,name=cgroups_path,json=cgroupsPath,proto3" json:"cgroups_path,omitempty"` // for NRI v1 emulation -+ Namespaces []*LinuxNamespace `protobuf:"bytes,5,rep,name=namespaces,proto3" json:"namespaces,omitempty"` // for NRI v1 emulation -+ Resources *LinuxResources `protobuf:"bytes,6,opt,name=resources,proto3" json:"resources,omitempty"` // for NRI v1 emulation -+} -+ -+func (x *LinuxPodSandbox) Reset() { -+ *x = LinuxPodSandbox{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[16] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxPodSandbox) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxPodSandbox) ProtoMessage() {} -+ -+func (x *LinuxPodSandbox) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[16] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxPodSandbox.ProtoReflect.Descriptor instead. -+func (*LinuxPodSandbox) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{16} -+} -+ -+func (x *LinuxPodSandbox) GetPodOverhead() *LinuxResources { -+ if x != nil { -+ return x.PodOverhead -+ } -+ return nil -+} -+ -+func (x *LinuxPodSandbox) GetPodResources() *LinuxResources { -+ if x != nil { -+ return x.PodResources -+ } -+ return nil -+} -+ -+func (x *LinuxPodSandbox) GetCgroupParent() string { -+ if x != nil { -+ return x.CgroupParent -+ } -+ return "" -+} -+ -+func (x *LinuxPodSandbox) GetCgroupsPath() string { -+ if x != nil { -+ return x.CgroupsPath -+ } -+ return "" -+} -+ -+func (x *LinuxPodSandbox) GetNamespaces() []*LinuxNamespace { -+ if x != nil { -+ return x.Namespaces -+ } -+ return nil -+} -+ -+func (x *LinuxPodSandbox) GetResources() *LinuxResources { -+ if x != nil { -+ return x.Resources -+ } -+ return nil -+} -+ -+// Container metadata that is considered relevant for a plugin. -+type Container struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ PodSandboxId string `protobuf:"bytes,2,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` -+ State ContainerState `protobuf:"varint,4,opt,name=state,proto3,enum=nri.pkg.api.v1alpha1.ContainerState" json:"state,omitempty"` -+ Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ Annotations map[string]string `protobuf:"bytes,6,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ Args []string `protobuf:"bytes,7,rep,name=args,proto3" json:"args,omitempty"` -+ Env []string `protobuf:"bytes,8,rep,name=env,proto3" json:"env,omitempty"` -+ Mounts []*Mount `protobuf:"bytes,9,rep,name=mounts,proto3" json:"mounts,omitempty"` -+ Hooks *Hooks `protobuf:"bytes,10,opt,name=hooks,proto3" json:"hooks,omitempty"` -+ Linux *LinuxContainer `protobuf:"bytes,11,opt,name=linux,proto3" json:"linux,omitempty"` -+ Pid uint32 `protobuf:"varint,12,opt,name=pid,proto3" json:"pid,omitempty"` // for NRI v1 emulation -+ Rlimits []*POSIXRlimit `protobuf:"bytes,13,rep,name=rlimits,proto3" json:"rlimits,omitempty"` -+} -+ -+func (x *Container) Reset() { -+ *x = Container{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[17] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Container) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Container) ProtoMessage() {} -+ -+func (x *Container) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[17] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Container.ProtoReflect.Descriptor instead. -+func (*Container) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{17} -+} -+ -+func (x *Container) GetId() string { -+ if x != nil { -+ return x.Id -+ } -+ return "" -+} -+ -+func (x *Container) GetPodSandboxId() string { -+ if x != nil { -+ return x.PodSandboxId -+ } -+ return "" -+} -+ -+func (x *Container) GetName() string { -+ if x != nil { -+ return x.Name -+ } -+ return "" -+} -+ -+func (x *Container) GetState() ContainerState { -+ if x != nil { -+ return x.State -+ } -+ return ContainerState_CONTAINER_UNKNOWN -+} -+ -+func (x *Container) GetLabels() map[string]string { -+ if x != nil { -+ return x.Labels -+ } -+ return nil -+} -+ -+func (x *Container) GetAnnotations() map[string]string { -+ if x != nil { -+ return x.Annotations -+ } -+ return nil -+} -+ -+func (x *Container) GetArgs() []string { -+ if x != nil { -+ return x.Args -+ } -+ return nil -+} -+ -+func (x *Container) GetEnv() []string { -+ if x != nil { -+ return x.Env -+ } -+ return nil -+} -+ -+func (x *Container) GetMounts() []*Mount { -+ if x != nil { -+ return x.Mounts -+ } -+ return nil -+} -+ -+func (x *Container) GetHooks() *Hooks { -+ if x != nil { -+ return x.Hooks -+ } -+ return nil -+} -+ -+func (x *Container) GetLinux() *LinuxContainer { -+ if x != nil { -+ return x.Linux -+ } -+ return nil -+} -+ -+func (x *Container) GetPid() uint32 { -+ if x != nil { -+ return x.Pid -+ } -+ return 0 -+} -+ -+func (x *Container) GetRlimits() []*POSIXRlimit { -+ if x != nil { -+ return x.Rlimits -+ } -+ return nil -+} -+ -+// A container mount. -+type Mount struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Destination string `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` -+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` -+ Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"` -+ Options []string `protobuf:"bytes,4,rep,name=options,proto3" json:"options,omitempty"` -+} -+ -+func (x *Mount) Reset() { -+ *x = Mount{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[18] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Mount) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Mount) ProtoMessage() {} -+ -+func (x *Mount) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[18] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Mount.ProtoReflect.Descriptor instead. -+func (*Mount) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{18} -+} -+ -+func (x *Mount) GetDestination() string { -+ if x != nil { -+ return x.Destination -+ } -+ return "" -+} -+ -+func (x *Mount) GetType() string { -+ if x != nil { -+ return x.Type -+ } -+ return "" -+} -+ -+func (x *Mount) GetSource() string { -+ if x != nil { -+ return x.Source -+ } -+ return "" -+} -+ -+func (x *Mount) GetOptions() []string { -+ if x != nil { -+ return x.Options -+ } -+ return nil -+} -+ -+// Container OCI hooks. -+type Hooks struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Prestart []*Hook `protobuf:"bytes,1,rep,name=prestart,proto3" json:"prestart,omitempty"` -+ CreateRuntime []*Hook `protobuf:"bytes,2,rep,name=create_runtime,json=createRuntime,proto3" json:"create_runtime,omitempty"` -+ CreateContainer []*Hook `protobuf:"bytes,3,rep,name=create_container,json=createContainer,proto3" json:"create_container,omitempty"` -+ StartContainer []*Hook `protobuf:"bytes,4,rep,name=start_container,json=startContainer,proto3" json:"start_container,omitempty"` -+ Poststart []*Hook `protobuf:"bytes,5,rep,name=poststart,proto3" json:"poststart,omitempty"` -+ Poststop []*Hook `protobuf:"bytes,6,rep,name=poststop,proto3" json:"poststop,omitempty"` -+} -+ -+func (x *Hooks) Reset() { -+ *x = Hooks{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[19] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Hooks) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Hooks) ProtoMessage() {} -+ -+func (x *Hooks) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[19] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Hooks.ProtoReflect.Descriptor instead. -+func (*Hooks) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{19} -+} -+ -+func (x *Hooks) GetPrestart() []*Hook { -+ if x != nil { -+ return x.Prestart -+ } -+ return nil -+} -+ -+func (x *Hooks) GetCreateRuntime() []*Hook { -+ if x != nil { -+ return x.CreateRuntime -+ } -+ return nil -+} -+ -+func (x *Hooks) GetCreateContainer() []*Hook { -+ if x != nil { -+ return x.CreateContainer -+ } -+ return nil -+} -+ -+func (x *Hooks) GetStartContainer() []*Hook { -+ if x != nil { -+ return x.StartContainer -+ } -+ return nil -+} -+ -+func (x *Hooks) GetPoststart() []*Hook { -+ if x != nil { -+ return x.Poststart -+ } -+ return nil -+} -+ -+func (x *Hooks) GetPoststop() []*Hook { -+ if x != nil { -+ return x.Poststop -+ } -+ return nil -+} -+ -+// One OCI hook. -+type Hook struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` -+ Args []string `protobuf:"bytes,2,rep,name=args,proto3" json:"args,omitempty"` -+ Env []string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty"` -+ Timeout *OptionalInt `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"` -+} -+ -+func (x *Hook) Reset() { -+ *x = Hook{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[20] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Hook) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Hook) ProtoMessage() {} -+ -+func (x *Hook) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[20] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Hook.ProtoReflect.Descriptor instead. -+func (*Hook) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{20} -+} -+ -+func (x *Hook) GetPath() string { -+ if x != nil { -+ return x.Path -+ } -+ return "" -+} -+ -+func (x *Hook) GetArgs() []string { -+ if x != nil { -+ return x.Args -+ } -+ return nil -+} -+ -+func (x *Hook) GetEnv() []string { -+ if x != nil { -+ return x.Env -+ } -+ return nil -+} -+ -+func (x *Hook) GetTimeout() *OptionalInt { -+ if x != nil { -+ return x.Timeout -+ } -+ return nil -+} -+ -+// Container (linux) metadata. -+type LinuxContainer struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Namespaces []*LinuxNamespace `protobuf:"bytes,1,rep,name=namespaces,proto3" json:"namespaces,omitempty"` -+ Devices []*LinuxDevice `protobuf:"bytes,2,rep,name=devices,proto3" json:"devices,omitempty"` -+ Resources *LinuxResources `protobuf:"bytes,3,opt,name=resources,proto3" json:"resources,omitempty"` -+ OomScoreAdj *OptionalInt `protobuf:"bytes,4,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` -+ CgroupsPath string `protobuf:"bytes,5,opt,name=cgroups_path,json=cgroupsPath,proto3" json:"cgroups_path,omitempty"` -+} -+ -+func (x *LinuxContainer) Reset() { -+ *x = LinuxContainer{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[21] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxContainer) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxContainer) ProtoMessage() {} -+ -+func (x *LinuxContainer) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[21] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxContainer.ProtoReflect.Descriptor instead. -+func (*LinuxContainer) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{21} -+} -+ -+func (x *LinuxContainer) GetNamespaces() []*LinuxNamespace { -+ if x != nil { -+ return x.Namespaces -+ } -+ return nil -+} -+ -+func (x *LinuxContainer) GetDevices() []*LinuxDevice { -+ if x != nil { -+ return x.Devices -+ } -+ return nil -+} -+ -+func (x *LinuxContainer) GetResources() *LinuxResources { -+ if x != nil { -+ return x.Resources -+ } -+ return nil -+} -+ -+func (x *LinuxContainer) GetOomScoreAdj() *OptionalInt { -+ if x != nil { -+ return x.OomScoreAdj -+ } -+ return nil -+} -+ -+func (x *LinuxContainer) GetCgroupsPath() string { -+ if x != nil { -+ return x.CgroupsPath -+ } -+ return "" -+} -+ -+// A linux namespace. -+type LinuxNamespace struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` -+ Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` -+} -+ -+func (x *LinuxNamespace) Reset() { -+ *x = LinuxNamespace{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[22] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxNamespace) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxNamespace) ProtoMessage() {} -+ -+func (x *LinuxNamespace) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[22] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxNamespace.ProtoReflect.Descriptor instead. -+func (*LinuxNamespace) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{22} -+} -+ -+func (x *LinuxNamespace) GetType() string { -+ if x != nil { -+ return x.Type -+ } -+ return "" -+} -+ -+func (x *LinuxNamespace) GetPath() string { -+ if x != nil { -+ return x.Path -+ } -+ return "" -+} -+ -+// A container (linux) device. -+type LinuxDevice struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` -+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` -+ Major int64 `protobuf:"varint,3,opt,name=major,proto3" json:"major,omitempty"` -+ Minor int64 `protobuf:"varint,4,opt,name=minor,proto3" json:"minor,omitempty"` -+ FileMode *OptionalFileMode `protobuf:"bytes,5,opt,name=file_mode,json=fileMode,proto3" json:"file_mode,omitempty"` -+ Uid *OptionalUInt32 `protobuf:"bytes,6,opt,name=uid,proto3" json:"uid,omitempty"` -+ Gid *OptionalUInt32 `protobuf:"bytes,7,opt,name=gid,proto3" json:"gid,omitempty"` -+} -+ -+func (x *LinuxDevice) Reset() { -+ *x = LinuxDevice{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[23] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxDevice) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxDevice) ProtoMessage() {} -+ -+func (x *LinuxDevice) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[23] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxDevice.ProtoReflect.Descriptor instead. -+func (*LinuxDevice) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{23} -+} -+ -+func (x *LinuxDevice) GetPath() string { -+ if x != nil { -+ return x.Path -+ } -+ return "" -+} -+ -+func (x *LinuxDevice) GetType() string { -+ if x != nil { -+ return x.Type -+ } -+ return "" -+} -+ -+func (x *LinuxDevice) GetMajor() int64 { -+ if x != nil { -+ return x.Major -+ } -+ return 0 -+} -+ -+func (x *LinuxDevice) GetMinor() int64 { -+ if x != nil { -+ return x.Minor -+ } -+ return 0 -+} -+ -+func (x *LinuxDevice) GetFileMode() *OptionalFileMode { -+ if x != nil { -+ return x.FileMode -+ } -+ return nil -+} -+ -+func (x *LinuxDevice) GetUid() *OptionalUInt32 { -+ if x != nil { -+ return x.Uid -+ } -+ return nil -+} -+ -+func (x *LinuxDevice) GetGid() *OptionalUInt32 { -+ if x != nil { -+ return x.Gid -+ } -+ return nil -+} -+ -+// A linux device cgroup controller rule. -+type LinuxDeviceCgroup struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Allow bool `protobuf:"varint,1,opt,name=allow,proto3" json:"allow,omitempty"` -+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` -+ Major *OptionalInt64 `protobuf:"bytes,3,opt,name=major,proto3" json:"major,omitempty"` -+ Minor *OptionalInt64 `protobuf:"bytes,4,opt,name=minor,proto3" json:"minor,omitempty"` -+ Access string `protobuf:"bytes,5,opt,name=access,proto3" json:"access,omitempty"` -+} -+ -+func (x *LinuxDeviceCgroup) Reset() { -+ *x = LinuxDeviceCgroup{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[24] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxDeviceCgroup) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxDeviceCgroup) ProtoMessage() {} -+ -+func (x *LinuxDeviceCgroup) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[24] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxDeviceCgroup.ProtoReflect.Descriptor instead. -+func (*LinuxDeviceCgroup) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{24} -+} -+ -+func (x *LinuxDeviceCgroup) GetAllow() bool { -+ if x != nil { -+ return x.Allow -+ } -+ return false -+} -+ -+func (x *LinuxDeviceCgroup) GetType() string { -+ if x != nil { -+ return x.Type -+ } -+ return "" -+} -+ -+func (x *LinuxDeviceCgroup) GetMajor() *OptionalInt64 { -+ if x != nil { -+ return x.Major -+ } -+ return nil -+} -+ -+func (x *LinuxDeviceCgroup) GetMinor() *OptionalInt64 { -+ if x != nil { -+ return x.Minor -+ } -+ return nil -+} -+ -+func (x *LinuxDeviceCgroup) GetAccess() string { -+ if x != nil { -+ return x.Access -+ } -+ return "" -+} -+ -+// Container (linux) resources. -+type LinuxResources struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Memory *LinuxMemory `protobuf:"bytes,1,opt,name=memory,proto3" json:"memory,omitempty"` -+ Cpu *LinuxCPU `protobuf:"bytes,2,opt,name=cpu,proto3" json:"cpu,omitempty"` -+ HugepageLimits []*HugepageLimit `protobuf:"bytes,3,rep,name=hugepage_limits,json=hugepageLimits,proto3" json:"hugepage_limits,omitempty"` -+ BlockioClass *OptionalString `protobuf:"bytes,4,opt,name=blockio_class,json=blockioClass,proto3" json:"blockio_class,omitempty"` -+ RdtClass *OptionalString `protobuf:"bytes,5,opt,name=rdt_class,json=rdtClass,proto3" json:"rdt_class,omitempty"` -+ Unified map[string]string `protobuf:"bytes,6,rep,name=unified,proto3" json:"unified,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ Devices []*LinuxDeviceCgroup `protobuf:"bytes,7,rep,name=devices,proto3" json:"devices,omitempty"` // for NRI v1 emulation -+} -+ -+func (x *LinuxResources) Reset() { -+ *x = LinuxResources{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[25] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxResources) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxResources) ProtoMessage() {} -+ -+func (x *LinuxResources) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[25] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxResources.ProtoReflect.Descriptor instead. -+func (*LinuxResources) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{25} -+} -+ -+func (x *LinuxResources) GetMemory() *LinuxMemory { -+ if x != nil { -+ return x.Memory -+ } -+ return nil -+} -+ -+func (x *LinuxResources) GetCpu() *LinuxCPU { -+ if x != nil { -+ return x.Cpu -+ } -+ return nil -+} -+ -+func (x *LinuxResources) GetHugepageLimits() []*HugepageLimit { -+ if x != nil { -+ return x.HugepageLimits -+ } -+ return nil -+} -+ -+func (x *LinuxResources) GetBlockioClass() *OptionalString { -+ if x != nil { -+ return x.BlockioClass -+ } -+ return nil -+} -+ -+func (x *LinuxResources) GetRdtClass() *OptionalString { -+ if x != nil { -+ return x.RdtClass -+ } -+ return nil -+} -+ -+func (x *LinuxResources) GetUnified() map[string]string { -+ if x != nil { -+ return x.Unified -+ } -+ return nil -+} -+ -+func (x *LinuxResources) GetDevices() []*LinuxDeviceCgroup { -+ if x != nil { -+ return x.Devices -+ } -+ return nil -+} -+ -+// Memory-related parts of (linux) resources. -+type LinuxMemory struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Limit *OptionalInt64 `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` -+ Reservation *OptionalInt64 `protobuf:"bytes,2,opt,name=reservation,proto3" json:"reservation,omitempty"` -+ Swap *OptionalInt64 `protobuf:"bytes,3,opt,name=swap,proto3" json:"swap,omitempty"` -+ Kernel *OptionalInt64 `protobuf:"bytes,4,opt,name=kernel,proto3" json:"kernel,omitempty"` -+ KernelTcp *OptionalInt64 `protobuf:"bytes,5,opt,name=kernel_tcp,json=kernelTcp,proto3" json:"kernel_tcp,omitempty"` -+ Swappiness *OptionalUInt64 `protobuf:"bytes,6,opt,name=swappiness,proto3" json:"swappiness,omitempty"` -+ DisableOomKiller *OptionalBool `protobuf:"bytes,7,opt,name=disable_oom_killer,json=disableOomKiller,proto3" json:"disable_oom_killer,omitempty"` -+ UseHierarchy *OptionalBool `protobuf:"bytes,8,opt,name=use_hierarchy,json=useHierarchy,proto3" json:"use_hierarchy,omitempty"` -+} -+ -+func (x *LinuxMemory) Reset() { -+ *x = LinuxMemory{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[26] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxMemory) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxMemory) ProtoMessage() {} -+ -+func (x *LinuxMemory) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[26] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxMemory.ProtoReflect.Descriptor instead. -+func (*LinuxMemory) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{26} -+} -+ -+func (x *LinuxMemory) GetLimit() *OptionalInt64 { -+ if x != nil { -+ return x.Limit -+ } -+ return nil -+} -+ -+func (x *LinuxMemory) GetReservation() *OptionalInt64 { -+ if x != nil { -+ return x.Reservation -+ } -+ return nil -+} -+ -+func (x *LinuxMemory) GetSwap() *OptionalInt64 { -+ if x != nil { -+ return x.Swap -+ } -+ return nil -+} -+ -+func (x *LinuxMemory) GetKernel() *OptionalInt64 { -+ if x != nil { -+ return x.Kernel -+ } -+ return nil -+} -+ -+func (x *LinuxMemory) GetKernelTcp() *OptionalInt64 { -+ if x != nil { -+ return x.KernelTcp -+ } -+ return nil -+} -+ -+func (x *LinuxMemory) GetSwappiness() *OptionalUInt64 { -+ if x != nil { -+ return x.Swappiness -+ } -+ return nil -+} -+ -+func (x *LinuxMemory) GetDisableOomKiller() *OptionalBool { -+ if x != nil { -+ return x.DisableOomKiller -+ } -+ return nil -+} -+ -+func (x *LinuxMemory) GetUseHierarchy() *OptionalBool { -+ if x != nil { -+ return x.UseHierarchy -+ } -+ return nil -+} -+ -+// CPU-related parts of (linux) resources. -+type LinuxCPU struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Shares *OptionalUInt64 `protobuf:"bytes,1,opt,name=shares,proto3" json:"shares,omitempty"` -+ Quota *OptionalInt64 `protobuf:"bytes,2,opt,name=quota,proto3" json:"quota,omitempty"` -+ Period *OptionalUInt64 `protobuf:"bytes,3,opt,name=period,proto3" json:"period,omitempty"` -+ RealtimeRuntime *OptionalInt64 `protobuf:"bytes,4,opt,name=realtime_runtime,json=realtimeRuntime,proto3" json:"realtime_runtime,omitempty"` -+ RealtimePeriod *OptionalUInt64 `protobuf:"bytes,5,opt,name=realtime_period,json=realtimePeriod,proto3" json:"realtime_period,omitempty"` -+ Cpus string `protobuf:"bytes,6,opt,name=cpus,proto3" json:"cpus,omitempty"` -+ Mems string `protobuf:"bytes,7,opt,name=mems,proto3" json:"mems,omitempty"` -+} -+ -+func (x *LinuxCPU) Reset() { -+ *x = LinuxCPU{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[27] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxCPU) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxCPU) ProtoMessage() {} -+ -+func (x *LinuxCPU) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[27] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxCPU.ProtoReflect.Descriptor instead. -+func (*LinuxCPU) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{27} -+} -+ -+func (x *LinuxCPU) GetShares() *OptionalUInt64 { -+ if x != nil { -+ return x.Shares -+ } -+ return nil -+} -+ -+func (x *LinuxCPU) GetQuota() *OptionalInt64 { -+ if x != nil { -+ return x.Quota -+ } -+ return nil -+} -+ -+func (x *LinuxCPU) GetPeriod() *OptionalUInt64 { -+ if x != nil { -+ return x.Period -+ } -+ return nil -+} -+ -+func (x *LinuxCPU) GetRealtimeRuntime() *OptionalInt64 { -+ if x != nil { -+ return x.RealtimeRuntime -+ } -+ return nil -+} -+ -+func (x *LinuxCPU) GetRealtimePeriod() *OptionalUInt64 { -+ if x != nil { -+ return x.RealtimePeriod -+ } -+ return nil -+} -+ -+func (x *LinuxCPU) GetCpus() string { -+ if x != nil { -+ return x.Cpus -+ } -+ return "" -+} -+ -+func (x *LinuxCPU) GetMems() string { -+ if x != nil { -+ return x.Mems -+ } -+ return "" -+} -+ -+// Container huge page limit. -+type HugepageLimit struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ PageSize string `protobuf:"bytes,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` -+ Limit uint64 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` -+} -+ -+func (x *HugepageLimit) Reset() { -+ *x = HugepageLimit{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[28] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *HugepageLimit) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*HugepageLimit) ProtoMessage() {} -+ -+func (x *HugepageLimit) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[28] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use HugepageLimit.ProtoReflect.Descriptor instead. -+func (*HugepageLimit) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{28} -+} -+ -+func (x *HugepageLimit) GetPageSize() string { -+ if x != nil { -+ return x.PageSize -+ } -+ return "" -+} -+ -+func (x *HugepageLimit) GetLimit() uint64 { -+ if x != nil { -+ return x.Limit -+ } -+ return 0 -+} -+ -+// Container rlimits -+type POSIXRlimit struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` -+ Hard uint64 `protobuf:"varint,2,opt,name=hard,proto3" json:"hard,omitempty"` -+ Soft uint64 `protobuf:"varint,3,opt,name=soft,proto3" json:"soft,omitempty"` -+} -+ -+func (x *POSIXRlimit) Reset() { -+ *x = POSIXRlimit{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[29] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *POSIXRlimit) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*POSIXRlimit) ProtoMessage() {} -+ -+func (x *POSIXRlimit) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[29] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use POSIXRlimit.ProtoReflect.Descriptor instead. -+func (*POSIXRlimit) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{29} -+} -+ -+func (x *POSIXRlimit) GetType() string { -+ if x != nil { -+ return x.Type -+ } -+ return "" -+} -+ -+func (x *POSIXRlimit) GetHard() uint64 { -+ if x != nil { -+ return x.Hard -+ } -+ return 0 -+} -+ -+func (x *POSIXRlimit) GetSoft() uint64 { -+ if x != nil { -+ return x.Soft -+ } -+ return 0 -+} -+ -+// Requested adjustments to a container being created. -+type ContainerAdjustment struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Annotations map[string]string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ Mounts []*Mount `protobuf:"bytes,3,rep,name=mounts,proto3" json:"mounts,omitempty"` -+ Env []*KeyValue `protobuf:"bytes,4,rep,name=env,proto3" json:"env,omitempty"` -+ Hooks *Hooks `protobuf:"bytes,5,opt,name=hooks,proto3" json:"hooks,omitempty"` -+ Linux *LinuxContainerAdjustment `protobuf:"bytes,6,opt,name=linux,proto3" json:"linux,omitempty"` -+ Rlimits []*POSIXRlimit `protobuf:"bytes,7,rep,name=rlimits,proto3" json:"rlimits,omitempty"` -+} -+ -+func (x *ContainerAdjustment) Reset() { -+ *x = ContainerAdjustment{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[30] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *ContainerAdjustment) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*ContainerAdjustment) ProtoMessage() {} -+ -+func (x *ContainerAdjustment) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[30] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use ContainerAdjustment.ProtoReflect.Descriptor instead. -+func (*ContainerAdjustment) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{30} -+} -+ -+func (x *ContainerAdjustment) GetAnnotations() map[string]string { -+ if x != nil { -+ return x.Annotations -+ } -+ return nil -+} -+ -+func (x *ContainerAdjustment) GetMounts() []*Mount { -+ if x != nil { -+ return x.Mounts -+ } -+ return nil -+} -+ -+func (x *ContainerAdjustment) GetEnv() []*KeyValue { -+ if x != nil { -+ return x.Env -+ } -+ return nil -+} -+ -+func (x *ContainerAdjustment) GetHooks() *Hooks { -+ if x != nil { -+ return x.Hooks -+ } -+ return nil -+} -+ -+func (x *ContainerAdjustment) GetLinux() *LinuxContainerAdjustment { -+ if x != nil { -+ return x.Linux -+ } -+ return nil -+} -+ -+func (x *ContainerAdjustment) GetRlimits() []*POSIXRlimit { -+ if x != nil { -+ return x.Rlimits -+ } -+ return nil -+} -+ -+// Adjustments to (linux) resources. -+type LinuxContainerAdjustment struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Devices []*LinuxDevice `protobuf:"bytes,1,rep,name=devices,proto3" json:"devices,omitempty"` -+ Resources *LinuxResources `protobuf:"bytes,2,opt,name=resources,proto3" json:"resources,omitempty"` -+ CgroupsPath string `protobuf:"bytes,3,opt,name=cgroups_path,json=cgroupsPath,proto3" json:"cgroups_path,omitempty"` -+} -+ -+func (x *LinuxContainerAdjustment) Reset() { -+ *x = LinuxContainerAdjustment{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[31] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxContainerAdjustment) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxContainerAdjustment) ProtoMessage() {} -+ -+func (x *LinuxContainerAdjustment) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[31] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxContainerAdjustment.ProtoReflect.Descriptor instead. -+func (*LinuxContainerAdjustment) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{31} -+} -+ -+func (x *LinuxContainerAdjustment) GetDevices() []*LinuxDevice { -+ if x != nil { -+ return x.Devices -+ } -+ return nil -+} -+ -+func (x *LinuxContainerAdjustment) GetResources() *LinuxResources { -+ if x != nil { -+ return x.Resources -+ } -+ return nil -+} -+ -+func (x *LinuxContainerAdjustment) GetCgroupsPath() string { -+ if x != nil { -+ return x.CgroupsPath -+ } -+ return "" -+} -+ -+// Requested update to an already created container. -+type ContainerUpdate struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ Linux *LinuxContainerUpdate `protobuf:"bytes,2,opt,name=linux,proto3" json:"linux,omitempty"` -+ IgnoreFailure bool `protobuf:"varint,3,opt,name=ignore_failure,json=ignoreFailure,proto3" json:"ignore_failure,omitempty"` -+} -+ -+func (x *ContainerUpdate) Reset() { -+ *x = ContainerUpdate{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[32] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *ContainerUpdate) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*ContainerUpdate) ProtoMessage() {} -+ -+func (x *ContainerUpdate) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[32] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use ContainerUpdate.ProtoReflect.Descriptor instead. -+func (*ContainerUpdate) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{32} -+} -+ -+func (x *ContainerUpdate) GetContainerId() string { -+ if x != nil { -+ return x.ContainerId -+ } -+ return "" -+} -+ -+func (x *ContainerUpdate) GetLinux() *LinuxContainerUpdate { -+ if x != nil { -+ return x.Linux -+ } -+ return nil -+} -+ -+func (x *ContainerUpdate) GetIgnoreFailure() bool { -+ if x != nil { -+ return x.IgnoreFailure -+ } -+ return false -+} -+ -+// Updates to (linux) resources. -+type LinuxContainerUpdate struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Resources *LinuxResources `protobuf:"bytes,1,opt,name=resources,proto3" json:"resources,omitempty"` -+} -+ -+func (x *LinuxContainerUpdate) Reset() { -+ *x = LinuxContainerUpdate{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[33] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *LinuxContainerUpdate) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*LinuxContainerUpdate) ProtoMessage() {} -+ -+func (x *LinuxContainerUpdate) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[33] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use LinuxContainerUpdate.ProtoReflect.Descriptor instead. -+func (*LinuxContainerUpdate) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{33} -+} -+ -+func (x *LinuxContainerUpdate) GetResources() *LinuxResources { -+ if x != nil { -+ return x.Resources -+ } -+ return nil -+} -+ -+// Request to evict (IOW unsolicitedly stop) a container. -+type ContainerEviction struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Container to evict. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Human-readable reason for eviction. -+ Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` -+} -+ -+func (x *ContainerEviction) Reset() { -+ *x = ContainerEviction{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[34] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *ContainerEviction) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*ContainerEviction) ProtoMessage() {} -+ -+func (x *ContainerEviction) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[34] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use ContainerEviction.ProtoReflect.Descriptor instead. -+func (*ContainerEviction) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{34} -+} -+ -+func (x *ContainerEviction) GetContainerId() string { -+ if x != nil { -+ return x.ContainerId -+ } -+ return "" -+} -+ -+func (x *ContainerEviction) GetReason() string { -+ if x != nil { -+ return x.Reason -+ } -+ return "" -+} -+ -+// KeyValue represents an environment variable. -+type KeyValue struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` -+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *KeyValue) Reset() { -+ *x = KeyValue{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[35] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *KeyValue) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*KeyValue) ProtoMessage() {} -+ -+func (x *KeyValue) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[35] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use KeyValue.ProtoReflect.Descriptor instead. -+func (*KeyValue) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{35} -+} -+ -+func (x *KeyValue) GetKey() string { -+ if x != nil { -+ return x.Key -+ } -+ return "" -+} -+ -+func (x *KeyValue) GetValue() string { -+ if x != nil { -+ return x.Value -+ } -+ return "" -+} -+ -+// An optional string value. -+type OptionalString struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *OptionalString) Reset() { -+ *x = OptionalString{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[36] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *OptionalString) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*OptionalString) ProtoMessage() {} -+ -+func (x *OptionalString) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[36] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use OptionalString.ProtoReflect.Descriptor instead. -+func (*OptionalString) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{36} -+} -+ -+func (x *OptionalString) GetValue() string { -+ if x != nil { -+ return x.Value -+ } -+ return "" -+} -+ -+// An optional signed integer value. -+type OptionalInt struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *OptionalInt) Reset() { -+ *x = OptionalInt{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[37] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *OptionalInt) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*OptionalInt) ProtoMessage() {} -+ -+func (x *OptionalInt) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[37] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use OptionalInt.ProtoReflect.Descriptor instead. -+func (*OptionalInt) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{37} -+} -+ -+func (x *OptionalInt) GetValue() int64 { -+ if x != nil { -+ return x.Value -+ } -+ return 0 -+} -+ -+// An optional 32-bit signed integer value. -+type OptionalInt32 struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *OptionalInt32) Reset() { -+ *x = OptionalInt32{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[38] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *OptionalInt32) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*OptionalInt32) ProtoMessage() {} -+ -+func (x *OptionalInt32) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[38] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use OptionalInt32.ProtoReflect.Descriptor instead. -+func (*OptionalInt32) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{38} -+} -+ -+func (x *OptionalInt32) GetValue() int32 { -+ if x != nil { -+ return x.Value -+ } -+ return 0 -+} -+ -+// An optional 32-bit unsigned integer value. -+type OptionalUInt32 struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *OptionalUInt32) Reset() { -+ *x = OptionalUInt32{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[39] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *OptionalUInt32) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*OptionalUInt32) ProtoMessage() {} -+ -+func (x *OptionalUInt32) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[39] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use OptionalUInt32.ProtoReflect.Descriptor instead. -+func (*OptionalUInt32) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{39} -+} -+ -+func (x *OptionalUInt32) GetValue() uint32 { -+ if x != nil { -+ return x.Value -+ } -+ return 0 -+} -+ -+// An optional 64-bit signed integer value. -+type OptionalInt64 struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *OptionalInt64) Reset() { -+ *x = OptionalInt64{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[40] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *OptionalInt64) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*OptionalInt64) ProtoMessage() {} -+ -+func (x *OptionalInt64) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[40] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use OptionalInt64.ProtoReflect.Descriptor instead. -+func (*OptionalInt64) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{40} -+} -+ -+func (x *OptionalInt64) GetValue() int64 { -+ if x != nil { -+ return x.Value -+ } -+ return 0 -+} -+ -+// An optional 64-bit unsigned integer value. -+type OptionalUInt64 struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *OptionalUInt64) Reset() { -+ *x = OptionalUInt64{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[41] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *OptionalUInt64) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*OptionalUInt64) ProtoMessage() {} -+ -+func (x *OptionalUInt64) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[41] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use OptionalUInt64.ProtoReflect.Descriptor instead. -+func (*OptionalUInt64) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{41} -+} -+ -+func (x *OptionalUInt64) GetValue() uint64 { -+ if x != nil { -+ return x.Value -+ } -+ return 0 -+} -+ -+// An optional boolean value. -+type OptionalBool struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *OptionalBool) Reset() { -+ *x = OptionalBool{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[42] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *OptionalBool) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*OptionalBool) ProtoMessage() {} -+ -+func (x *OptionalBool) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[42] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use OptionalBool.ProtoReflect.Descriptor instead. -+func (*OptionalBool) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{42} -+} -+ -+func (x *OptionalBool) GetValue() bool { -+ if x != nil { -+ return x.Value -+ } -+ return false -+} -+ -+// An optional value of file permissions. -+type OptionalFileMode struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *OptionalFileMode) Reset() { -+ *x = OptionalFileMode{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_pkg_api_api_proto_msgTypes[43] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *OptionalFileMode) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*OptionalFileMode) ProtoMessage() {} -+ -+func (x *OptionalFileMode) ProtoReflect() protoreflect.Message { -+ mi := &file_pkg_api_api_proto_msgTypes[43] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use OptionalFileMode.ProtoReflect.Descriptor instead. -+func (*OptionalFileMode) Descriptor() ([]byte, []int) { -+ return file_pkg_api_api_proto_rawDescGZIP(), []int{43} -+} -+ -+func (x *OptionalFileMode) GetValue() uint32 { -+ if x != nil { -+ return x.Value -+ } -+ return 0 -+} -+ -+var File_pkg_api_api_proto protoreflect.FileDescriptor -+ -+var file_pkg_api_api_proto_rawDesc = []byte{ -+ 0x0a, 0x11, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, -+ 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, -+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x22, 0x57, 0x0a, 0x15, 0x52, 0x65, 0x67, -+ 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, -+ 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, -+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, -+ 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x64, -+ 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, -+ 0x64, 0x78, 0x22, 0x97, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, -+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, -+ 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, -+ 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, -+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, -+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, -+ 0x05, 0x65, 0x76, 0x69, 0x63, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, -+ 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, -+ 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x69, -+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x65, 0x76, 0x69, 0x63, 0x74, 0x22, 0x59, 0x0a, 0x18, -+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, -+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, -+ 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, -+ 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, -+ 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, -+ 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x76, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, -+ 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, -+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, -+ 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6e, -+ 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x74, 0x69, -+ 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, -+ 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, -+ 0x0e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, -+ 0x2b, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, -+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, -+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x8b, 0x01, 0x0a, -+ 0x12, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, -+ 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, -+ 0x0b, 0x32, 0x20, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, -+ 0x62, 0x6f, 0x78, 0x52, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x12, 0x3f, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, -+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x0a, -+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, 0x54, 0x0a, 0x13, 0x53, 0x79, -+ 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, -+ 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, -+ 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, -+ 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, -+ 0x22, 0x8b, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, -+ 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x70, -+ 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, -+ 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, -+ 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x03, 0x70, 0x6f, 0x64, 0x12, -+ 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, -+ 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, -+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0xda, -+ 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, -+ 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x61, 0x64, -+ 0x6a, 0x75, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6e, 0x72, 0x69, -+ 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, -+ 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, -+ 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x3d, 0x0a, -+ 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, -+ 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x05, -+ 0x65, 0x76, 0x69, 0x63, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x72, -+ 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, -+ 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x69, 0x63, -+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x65, 0x76, 0x69, 0x63, 0x74, 0x22, 0xda, 0x01, 0x0a, 0x16, -+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, -+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x70, 0x6f, 0x64, 0x18, 0x01, 0x20, -+ 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, -+ 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x53, 0x61, -+ 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x03, 0x70, 0x6f, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x6f, -+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, -+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x6c, 0x69, 0x6e, -+ 0x75, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, -+ 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, -+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, -+ 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x0e, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x52, -+ 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, -+ 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, -+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, -+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, -+ 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, -+ 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x75, 0x70, 0x64, -+ 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x65, 0x76, 0x69, 0x63, 0x74, 0x18, 0x02, 0x20, 0x03, -+ 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, -+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x45, 0x76, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x65, 0x76, 0x69, -+ 0x63, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, -+ 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x70, -+ 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, -+ 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, -+ 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x03, 0x70, 0x6f, 0x64, 0x12, -+ 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, -+ 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, -+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x56, -+ 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, -+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, -+ 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, -+ 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, -+ 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, -+ 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x74, 0x65, -+ 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x65, -+ 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6e, 0x72, 0x69, -+ 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, -+ 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x32, -+ 0x0a, 0x03, 0x70, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6e, 0x72, -+ 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, -+ 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x03, 0x70, -+ 0x6f, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, -+ 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, -+ 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, -+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, -+ 0x72, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xee, 0x03, 0x0a, 0x0a, 0x50, -+ 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, -+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, -+ 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, -+ 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, -+ 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x44, 0x0a, -+ 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, -+ 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, -+ 0x65, 0x6c, 0x73, 0x12, 0x53, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, -+ 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, -+ 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, -+ 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, -+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, -+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x75, 0x6e, 0x74, -+ 0x69, 0x6d, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, -+ 0x09, 0x52, 0x0e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, -+ 0x72, 0x12, 0x3b, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, -+ 0x32, 0x25, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, -+ 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x50, 0x6f, 0x64, -+ 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x12, 0x10, -+ 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, -+ 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, -+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, -+ 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, -+ 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, -+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, -+ 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x02, 0x0a, 0x0f, -+ 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, -+ 0x47, 0x0a, 0x0c, 0x70, 0x6f, 0x64, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, -+ 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, -+ 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x0b, 0x70, 0x6f, 0x64, -+ 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x12, 0x49, 0x0a, 0x0d, 0x70, 0x6f, 0x64, 0x5f, -+ 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, -+ 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, -+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x0c, 0x70, 0x6f, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, -+ 0x63, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x70, 0x61, -+ 0x72, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x67, 0x72, 0x6f, -+ 0x75, 0x70, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x67, 0x72, 0x6f, -+ 0x75, 0x70, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, -+ 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x0a, 0x6e, -+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, -+ 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, -+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, -+ 0x73, 0x12, 0x42, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x06, -+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, -+ 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, -+ 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, -+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xbe, 0x05, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, -+ 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x64, 0x5f, 0x73, 0x61, 0x6e, 0x64, 0x62, -+ 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x64, -+ 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, -+ 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, -+ 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6e, -+ 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, -+ 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, -+ 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x6c, 0x61, 0x62, -+ 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, -+ 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, -+ 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, -+ 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x52, -+ 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, -+ 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, -+ 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, -+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, -+ 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, -+ 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x08, 0x20, -+ 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x33, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, -+ 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, -+ 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, -+ 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x0a, -+ 0x05, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, -+ 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, -+ 0x68, 0x61, 0x31, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x05, 0x68, 0x6f, 0x6f, 0x6b, 0x73, -+ 0x12, 0x3a, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, -+ 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, -+ 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x12, 0x10, 0x0a, 0x03, -+ 0x70, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x3b, -+ 0x0a, 0x07, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, -+ 0x21, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x4f, 0x53, 0x49, 0x58, 0x52, 0x6c, 0x69, 0x6d, -+ 0x69, 0x74, 0x52, 0x07, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, -+ 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, -+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, -+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, -+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, -+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, -+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, -+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, -+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6f, 0x0a, 0x05, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x12, -+ 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, -+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, -+ 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, -+ 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, -+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, -+ 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, -+ 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x03, 0x0a, 0x05, 0x48, 0x6f, 0x6f, 0x6b, -+ 0x73, 0x12, 0x36, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, -+ 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, -+ 0x08, 0x70, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x41, 0x0a, 0x0e, 0x63, 0x72, 0x65, -+ 0x61, 0x74, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, -+ 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x0d, 0x63, -+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x10, -+ 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, -+ 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, -+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x6f, -+ 0x6f, 0x6b, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6e, -+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, -+ 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, -+ 0x68, 0x61, 0x31, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, -+ 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x74, -+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x72, -+ 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, -+ 0x61, 0x31, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x74, 0x61, -+ 0x72, 0x74, 0x12, 0x36, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x06, -+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, -+ 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, -+ 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x74, 0x6f, 0x70, 0x22, 0x7d, 0x0a, 0x04, 0x48, 0x6f, -+ 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, -+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, -+ 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x3b, 0x0a, 0x07, -+ 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, -+ 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xc1, 0x02, 0x0a, 0x0e, 0x4c, 0x69, -+ 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0a, -+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, -+ 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, -+ 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4e, 0x61, 0x6d, -+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, -+ 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, -+ 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, -+ 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, -+ 0x42, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, -+ 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, -+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, -+ 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, -+ 0x63, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x0d, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, -+ 0x5f, 0x61, 0x64, 0x6a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x72, 0x69, -+ 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, -+ 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x52, 0x0b, 0x6f, -+ 0x6f, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x41, 0x64, 0x6a, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x67, -+ 0x72, 0x6f, 0x75, 0x70, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x0b, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x50, 0x61, 0x74, 0x68, 0x22, 0x38, 0x0a, -+ 0x0e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, -+ 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, -+ 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, -+ 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x96, 0x02, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x75, -+ 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, -+ 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, -+ 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, -+ 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, -+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x66, -+ 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, -+ 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, -+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, -+ 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, -+ 0x12, 0x36, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, -+ 0x74, 0x33, 0x32, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, -+ 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, -+ 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x03, 0x67, 0x69, 0x64, -+ 0x22, 0xcb, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, -+ 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, -+ 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, -+ 0x12, 0x39, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, -+ 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, -+ 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x39, 0x0a, 0x05, 0x6d, -+ 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, -+ 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, -+ 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, -+ 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, -+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0xa5, -+ 0x04, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, -+ 0x73, 0x12, 0x39, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, -+ 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4d, 0x65, -+ 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x03, -+ 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, -+ 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, -+ 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x50, 0x55, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x4c, -+ 0x0a, 0x0f, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, -+ 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, -+ 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, -+ 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, 0x68, 0x75, -+ 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0d, -+ 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6f, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x04, 0x20, -+ 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, -+ 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, -+ 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, -+ 0x69, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x64, 0x74, 0x5f, 0x63, -+ 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, -+ 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, -+ 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, -+ 0x52, 0x08, 0x72, 0x64, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x75, 0x6e, -+ 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6e, 0x72, -+ 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, -+ 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, -+ 0x73, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, -+ 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, -+ 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, -+ 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, -+ 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x67, 0x72, 0x6f, 0x75, -+ 0x70, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x55, 0x6e, -+ 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, -+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, -+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, -+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaa, 0x04, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x75, 0x78, -+ 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, -+ 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, -+ 0x74, 0x12, 0x45, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, -+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, -+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, -+ 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0b, 0x72, 0x65, 0x73, -+ 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, -+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, -+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, -+ 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x04, 0x73, 0x77, 0x61, -+ 0x70, 0x12, 0x3b, 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, -+ 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, -+ 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x42, -+ 0x0a, 0x0a, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x74, 0x63, 0x70, 0x18, 0x05, 0x20, 0x01, -+ 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, -+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, -+ 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x09, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x54, -+ 0x63, 0x70, 0x12, 0x44, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73, 0x73, -+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, -+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, -+ 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0a, 0x73, 0x77, -+ 0x61, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x12, 0x64, 0x69, 0x73, 0x61, -+ 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x6f, 0x6d, 0x5f, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x07, -+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, -+ 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, -+ 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, -+ 0x65, 0x4f, 0x6f, 0x6d, 0x4b, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x0d, 0x75, 0x73, -+ 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, -+ 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, -+ 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, -+ 0x63, 0x68, 0x79, 0x22, 0x88, 0x03, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x50, 0x55, -+ 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, -+ 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, -+ 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, -+ 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x39, -+ 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, -+ 0x36, 0x34, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x65, 0x72, -+ 0x69, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, -+ 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, -+ 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, -+ 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x4e, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x6c, 0x74, -+ 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, -+ 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, -+ 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, -+ 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x6c, 0x74, -+ 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, -+ 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, -+ 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, -+ 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, -+ 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x70, 0x75, 0x73, 0x18, 0x06, -+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x70, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, -+ 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x73, 0x22, 0x42, -+ 0x0a, 0x0d, 0x48, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, -+ 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, -+ 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, -+ 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, -+ 0x69, 0x74, 0x22, 0x49, 0x0a, 0x0b, 0x50, 0x4f, 0x53, 0x49, 0x58, 0x52, 0x6c, 0x69, 0x6d, 0x69, -+ 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, -+ 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, -+ 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x66, -+ 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6f, 0x66, 0x74, 0x22, 0xd0, 0x03, -+ 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, -+ 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, -+ 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6e, 0x72, 0x69, -+ 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, -+ 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, -+ 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, -+ 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, -+ 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, -+ 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, -+ 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, -+ 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, -+ 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4b, 0x65, 0x79, -+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x31, 0x0a, 0x05, 0x68, 0x6f, -+ 0x6f, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, -+ 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, -+ 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x05, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x44, 0x0a, -+ 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6e, -+ 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, -+ 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, -+ 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x6c, 0x69, -+ 0x6e, 0x75, 0x78, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x07, -+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, -+ 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x4f, 0x53, 0x49, -+ 0x58, 0x52, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, -+ 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, -+ 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, -+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, -+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, -+ 0x22, 0xbe, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, -+ 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, -+ 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, -+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, -+ 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x72, 0x65, -+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, -+ 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x21, -+ 0x0a, 0x0c, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, -+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x50, 0x61, 0x74, -+ 0x68, 0x22, 0x9d, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, -+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, -+ 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, -+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x75, -+ 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, -+ 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, -+ 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, 0x64, -+ 0x61, 0x74, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x67, -+ 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, -+ 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, -+ 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x72, 0x65, 0x73, -+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, -+ 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, -+ 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, -+ 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x4e, 0x0a, -+ 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x69, 0x63, 0x74, 0x69, -+ 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, -+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, -+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x32, 0x0a, -+ 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, -+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, -+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, -+ 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, -+ 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, -+ 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x23, 0x0a, 0x0b, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, -+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, -+ 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, -+ 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, -+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, -+ 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, -+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, 0x0a, -+ 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x14, -+ 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, -+ 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, -+ 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x24, 0x0a, 0x0c, -+ 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, -+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, -+ 0x75, 0x65, 0x22, 0x28, 0x0a, 0x10, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, -+ 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x9c, 0x02, 0x0a, -+ 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, -+ 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, -+ 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x4f, 0x50, -+ 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x02, 0x12, 0x16, -+ 0x0a, 0x12, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, 0x41, 0x4e, -+ 0x44, 0x42, 0x4f, 0x58, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, -+ 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, -+ 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, -+ 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x52, 0x54, -+ 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, -+ 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, -+ 0x49, 0x4e, 0x45, 0x52, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, -+ 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, -+ 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, -+ 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x4f, 0x50, 0x5f, -+ 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x0a, 0x12, 0x14, 0x0a, 0x10, 0x52, -+ 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, -+ 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x41, 0x53, 0x54, 0x10, 0x0c, 0x2a, 0x82, 0x01, 0x0a, 0x0e, -+ 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, -+ 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, -+ 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, -+ 0x45, 0x52, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, -+ 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, -+ 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, -+ 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, -+ 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, -+ 0x32, 0xd8, 0x01, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x5a, 0x0a, 0x0e, -+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x2b, -+ 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, -+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6c, -+ 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6e, 0x72, -+ 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, -+ 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x71, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, -+ 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x2e, 0x6e, -+ 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, -+ 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6e, 0x72, -+ 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, -+ 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, -+ 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xae, 0x05, 0x0a, 0x06, -+ 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x5c, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, -+ 0x75, 0x72, 0x65, 0x12, 0x26, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, -+ 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, -+ 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6e, 0x72, -+ 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, -+ 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, -+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, -+ 0x69, 0x7a, 0x65, 0x12, 0x28, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, -+ 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, -+ 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, -+ 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, -+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, -+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, -+ 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, -+ 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, -+ 0x79, 0x1a, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x6e, -+ 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, -+ 0x72, 0x12, 0x2c, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, -+ 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, -+ 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, -+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, -+ 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, -+ 0x72, 0x12, 0x2c, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, -+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, -+ 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, -+ 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, -+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, -+ 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, -+ 0x2a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, -+ 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6e, 0x72, -+ 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, -+ 0x61, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, -+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, -+ 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, -+ 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, -+ 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, -+ 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, -+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x27, 0x5a, 0x25, -+ 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, -+ 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x6e, 0x72, 0x69, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, -+ 0x69, 0x3b, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -+} -+ -+var ( -+ file_pkg_api_api_proto_rawDescOnce sync.Once -+ file_pkg_api_api_proto_rawDescData = file_pkg_api_api_proto_rawDesc -+) -+ -+func file_pkg_api_api_proto_rawDescGZIP() []byte { -+ file_pkg_api_api_proto_rawDescOnce.Do(func() { -+ file_pkg_api_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_api_api_proto_rawDescData) -+ }) -+ return file_pkg_api_api_proto_rawDescData -+} -+ -+var file_pkg_api_api_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -+var file_pkg_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 50) -+var file_pkg_api_api_proto_goTypes = []interface{}{ -+ (Event)(0), // 0: nri.pkg.api.v1alpha1.Event -+ (ContainerState)(0), // 1: nri.pkg.api.v1alpha1.ContainerState -+ (*RegisterPluginRequest)(nil), // 2: nri.pkg.api.v1alpha1.RegisterPluginRequest -+ (*UpdateContainersRequest)(nil), // 3: nri.pkg.api.v1alpha1.UpdateContainersRequest -+ (*UpdateContainersResponse)(nil), // 4: nri.pkg.api.v1alpha1.UpdateContainersResponse -+ (*ConfigureRequest)(nil), // 5: nri.pkg.api.v1alpha1.ConfigureRequest -+ (*ConfigureResponse)(nil), // 6: nri.pkg.api.v1alpha1.ConfigureResponse -+ (*SynchronizeRequest)(nil), // 7: nri.pkg.api.v1alpha1.SynchronizeRequest -+ (*SynchronizeResponse)(nil), // 8: nri.pkg.api.v1alpha1.SynchronizeResponse -+ (*CreateContainerRequest)(nil), // 9: nri.pkg.api.v1alpha1.CreateContainerRequest -+ (*CreateContainerResponse)(nil), // 10: nri.pkg.api.v1alpha1.CreateContainerResponse -+ (*UpdateContainerRequest)(nil), // 11: nri.pkg.api.v1alpha1.UpdateContainerRequest -+ (*UpdateContainerResponse)(nil), // 12: nri.pkg.api.v1alpha1.UpdateContainerResponse -+ (*StopContainerRequest)(nil), // 13: nri.pkg.api.v1alpha1.StopContainerRequest -+ (*StopContainerResponse)(nil), // 14: nri.pkg.api.v1alpha1.StopContainerResponse -+ (*StateChangeEvent)(nil), // 15: nri.pkg.api.v1alpha1.StateChangeEvent -+ (*Empty)(nil), // 16: nri.pkg.api.v1alpha1.Empty -+ (*PodSandbox)(nil), // 17: nri.pkg.api.v1alpha1.PodSandbox -+ (*LinuxPodSandbox)(nil), // 18: nri.pkg.api.v1alpha1.LinuxPodSandbox -+ (*Container)(nil), // 19: nri.pkg.api.v1alpha1.Container -+ (*Mount)(nil), // 20: nri.pkg.api.v1alpha1.Mount -+ (*Hooks)(nil), // 21: nri.pkg.api.v1alpha1.Hooks -+ (*Hook)(nil), // 22: nri.pkg.api.v1alpha1.Hook -+ (*LinuxContainer)(nil), // 23: nri.pkg.api.v1alpha1.LinuxContainer -+ (*LinuxNamespace)(nil), // 24: nri.pkg.api.v1alpha1.LinuxNamespace -+ (*LinuxDevice)(nil), // 25: nri.pkg.api.v1alpha1.LinuxDevice -+ (*LinuxDeviceCgroup)(nil), // 26: nri.pkg.api.v1alpha1.LinuxDeviceCgroup -+ (*LinuxResources)(nil), // 27: nri.pkg.api.v1alpha1.LinuxResources -+ (*LinuxMemory)(nil), // 28: nri.pkg.api.v1alpha1.LinuxMemory -+ (*LinuxCPU)(nil), // 29: nri.pkg.api.v1alpha1.LinuxCPU -+ (*HugepageLimit)(nil), // 30: nri.pkg.api.v1alpha1.HugepageLimit -+ (*POSIXRlimit)(nil), // 31: nri.pkg.api.v1alpha1.POSIXRlimit -+ (*ContainerAdjustment)(nil), // 32: nri.pkg.api.v1alpha1.ContainerAdjustment -+ (*LinuxContainerAdjustment)(nil), // 33: nri.pkg.api.v1alpha1.LinuxContainerAdjustment -+ (*ContainerUpdate)(nil), // 34: nri.pkg.api.v1alpha1.ContainerUpdate -+ (*LinuxContainerUpdate)(nil), // 35: nri.pkg.api.v1alpha1.LinuxContainerUpdate -+ (*ContainerEviction)(nil), // 36: nri.pkg.api.v1alpha1.ContainerEviction -+ (*KeyValue)(nil), // 37: nri.pkg.api.v1alpha1.KeyValue -+ (*OptionalString)(nil), // 38: nri.pkg.api.v1alpha1.OptionalString -+ (*OptionalInt)(nil), // 39: nri.pkg.api.v1alpha1.OptionalInt -+ (*OptionalInt32)(nil), // 40: nri.pkg.api.v1alpha1.OptionalInt32 -+ (*OptionalUInt32)(nil), // 41: nri.pkg.api.v1alpha1.OptionalUInt32 -+ (*OptionalInt64)(nil), // 42: nri.pkg.api.v1alpha1.OptionalInt64 -+ (*OptionalUInt64)(nil), // 43: nri.pkg.api.v1alpha1.OptionalUInt64 -+ (*OptionalBool)(nil), // 44: nri.pkg.api.v1alpha1.OptionalBool -+ (*OptionalFileMode)(nil), // 45: nri.pkg.api.v1alpha1.OptionalFileMode -+ nil, // 46: nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry -+ nil, // 47: nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry -+ nil, // 48: nri.pkg.api.v1alpha1.Container.LabelsEntry -+ nil, // 49: nri.pkg.api.v1alpha1.Container.AnnotationsEntry -+ nil, // 50: nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry -+ nil, // 51: nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry -+} -+var file_pkg_api_api_proto_depIdxs = []int32{ -+ 34, // 0: nri.pkg.api.v1alpha1.UpdateContainersRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate -+ 36, // 1: nri.pkg.api.v1alpha1.UpdateContainersRequest.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction -+ 34, // 2: nri.pkg.api.v1alpha1.UpdateContainersResponse.failed:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate -+ 17, // 3: nri.pkg.api.v1alpha1.SynchronizeRequest.pods:type_name -> nri.pkg.api.v1alpha1.PodSandbox -+ 19, // 4: nri.pkg.api.v1alpha1.SynchronizeRequest.containers:type_name -> nri.pkg.api.v1alpha1.Container -+ 34, // 5: nri.pkg.api.v1alpha1.SynchronizeResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate -+ 17, // 6: nri.pkg.api.v1alpha1.CreateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox -+ 19, // 7: nri.pkg.api.v1alpha1.CreateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container -+ 32, // 8: nri.pkg.api.v1alpha1.CreateContainerResponse.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment -+ 34, // 9: nri.pkg.api.v1alpha1.CreateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate -+ 36, // 10: nri.pkg.api.v1alpha1.CreateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction -+ 17, // 11: nri.pkg.api.v1alpha1.UpdateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox -+ 19, // 12: nri.pkg.api.v1alpha1.UpdateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container -+ 27, // 13: nri.pkg.api.v1alpha1.UpdateContainerRequest.linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources -+ 34, // 14: nri.pkg.api.v1alpha1.UpdateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate -+ 36, // 15: nri.pkg.api.v1alpha1.UpdateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction -+ 17, // 16: nri.pkg.api.v1alpha1.StopContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox -+ 19, // 17: nri.pkg.api.v1alpha1.StopContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container -+ 34, // 18: nri.pkg.api.v1alpha1.StopContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate -+ 0, // 19: nri.pkg.api.v1alpha1.StateChangeEvent.event:type_name -> nri.pkg.api.v1alpha1.Event -+ 17, // 20: nri.pkg.api.v1alpha1.StateChangeEvent.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox -+ 19, // 21: nri.pkg.api.v1alpha1.StateChangeEvent.container:type_name -> nri.pkg.api.v1alpha1.Container -+ 46, // 22: nri.pkg.api.v1alpha1.PodSandbox.labels:type_name -> nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry -+ 47, // 23: nri.pkg.api.v1alpha1.PodSandbox.annotations:type_name -> nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry -+ 18, // 24: nri.pkg.api.v1alpha1.PodSandbox.linux:type_name -> nri.pkg.api.v1alpha1.LinuxPodSandbox -+ 27, // 25: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_overhead:type_name -> nri.pkg.api.v1alpha1.LinuxResources -+ 27, // 26: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources -+ 24, // 27: nri.pkg.api.v1alpha1.LinuxPodSandbox.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace -+ 27, // 28: nri.pkg.api.v1alpha1.LinuxPodSandbox.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources -+ 1, // 29: nri.pkg.api.v1alpha1.Container.state:type_name -> nri.pkg.api.v1alpha1.ContainerState -+ 48, // 30: nri.pkg.api.v1alpha1.Container.labels:type_name -> nri.pkg.api.v1alpha1.Container.LabelsEntry -+ 49, // 31: nri.pkg.api.v1alpha1.Container.annotations:type_name -> nri.pkg.api.v1alpha1.Container.AnnotationsEntry -+ 20, // 32: nri.pkg.api.v1alpha1.Container.mounts:type_name -> nri.pkg.api.v1alpha1.Mount -+ 21, // 33: nri.pkg.api.v1alpha1.Container.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks -+ 23, // 34: nri.pkg.api.v1alpha1.Container.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainer -+ 31, // 35: nri.pkg.api.v1alpha1.Container.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit -+ 22, // 36: nri.pkg.api.v1alpha1.Hooks.prestart:type_name -> nri.pkg.api.v1alpha1.Hook -+ 22, // 37: nri.pkg.api.v1alpha1.Hooks.create_runtime:type_name -> nri.pkg.api.v1alpha1.Hook -+ 22, // 38: nri.pkg.api.v1alpha1.Hooks.create_container:type_name -> nri.pkg.api.v1alpha1.Hook -+ 22, // 39: nri.pkg.api.v1alpha1.Hooks.start_container:type_name -> nri.pkg.api.v1alpha1.Hook -+ 22, // 40: nri.pkg.api.v1alpha1.Hooks.poststart:type_name -> nri.pkg.api.v1alpha1.Hook -+ 22, // 41: nri.pkg.api.v1alpha1.Hooks.poststop:type_name -> nri.pkg.api.v1alpha1.Hook -+ 39, // 42: nri.pkg.api.v1alpha1.Hook.timeout:type_name -> nri.pkg.api.v1alpha1.OptionalInt -+ 24, // 43: nri.pkg.api.v1alpha1.LinuxContainer.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace -+ 25, // 44: nri.pkg.api.v1alpha1.LinuxContainer.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice -+ 27, // 45: nri.pkg.api.v1alpha1.LinuxContainer.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources -+ 39, // 46: nri.pkg.api.v1alpha1.LinuxContainer.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt -+ 45, // 47: nri.pkg.api.v1alpha1.LinuxDevice.file_mode:type_name -> nri.pkg.api.v1alpha1.OptionalFileMode -+ 41, // 48: nri.pkg.api.v1alpha1.LinuxDevice.uid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 -+ 41, // 49: nri.pkg.api.v1alpha1.LinuxDevice.gid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 -+ 42, // 50: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.major:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 42, // 51: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.minor:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 28, // 52: nri.pkg.api.v1alpha1.LinuxResources.memory:type_name -> nri.pkg.api.v1alpha1.LinuxMemory -+ 29, // 53: nri.pkg.api.v1alpha1.LinuxResources.cpu:type_name -> nri.pkg.api.v1alpha1.LinuxCPU -+ 30, // 54: nri.pkg.api.v1alpha1.LinuxResources.hugepage_limits:type_name -> nri.pkg.api.v1alpha1.HugepageLimit -+ 38, // 55: nri.pkg.api.v1alpha1.LinuxResources.blockio_class:type_name -> nri.pkg.api.v1alpha1.OptionalString -+ 38, // 56: nri.pkg.api.v1alpha1.LinuxResources.rdt_class:type_name -> nri.pkg.api.v1alpha1.OptionalString -+ 50, // 57: nri.pkg.api.v1alpha1.LinuxResources.unified:type_name -> nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry -+ 26, // 58: nri.pkg.api.v1alpha1.LinuxResources.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDeviceCgroup -+ 42, // 59: nri.pkg.api.v1alpha1.LinuxMemory.limit:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 42, // 60: nri.pkg.api.v1alpha1.LinuxMemory.reservation:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 42, // 61: nri.pkg.api.v1alpha1.LinuxMemory.swap:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 42, // 62: nri.pkg.api.v1alpha1.LinuxMemory.kernel:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 42, // 63: nri.pkg.api.v1alpha1.LinuxMemory.kernel_tcp:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 43, // 64: nri.pkg.api.v1alpha1.LinuxMemory.swappiness:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 -+ 44, // 65: nri.pkg.api.v1alpha1.LinuxMemory.disable_oom_killer:type_name -> nri.pkg.api.v1alpha1.OptionalBool -+ 44, // 66: nri.pkg.api.v1alpha1.LinuxMemory.use_hierarchy:type_name -> nri.pkg.api.v1alpha1.OptionalBool -+ 43, // 67: nri.pkg.api.v1alpha1.LinuxCPU.shares:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 -+ 42, // 68: nri.pkg.api.v1alpha1.LinuxCPU.quota:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 43, // 69: nri.pkg.api.v1alpha1.LinuxCPU.period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 -+ 42, // 70: nri.pkg.api.v1alpha1.LinuxCPU.realtime_runtime:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 -+ 43, // 71: nri.pkg.api.v1alpha1.LinuxCPU.realtime_period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 -+ 51, // 72: nri.pkg.api.v1alpha1.ContainerAdjustment.annotations:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry -+ 20, // 73: nri.pkg.api.v1alpha1.ContainerAdjustment.mounts:type_name -> nri.pkg.api.v1alpha1.Mount -+ 37, // 74: nri.pkg.api.v1alpha1.ContainerAdjustment.env:type_name -> nri.pkg.api.v1alpha1.KeyValue -+ 21, // 75: nri.pkg.api.v1alpha1.ContainerAdjustment.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks -+ 33, // 76: nri.pkg.api.v1alpha1.ContainerAdjustment.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment -+ 31, // 77: nri.pkg.api.v1alpha1.ContainerAdjustment.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit -+ 25, // 78: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice -+ 27, // 79: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources -+ 35, // 80: nri.pkg.api.v1alpha1.ContainerUpdate.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerUpdate -+ 27, // 81: nri.pkg.api.v1alpha1.LinuxContainerUpdate.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources -+ 2, // 82: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:input_type -> nri.pkg.api.v1alpha1.RegisterPluginRequest -+ 3, // 83: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:input_type -> nri.pkg.api.v1alpha1.UpdateContainersRequest -+ 5, // 84: nri.pkg.api.v1alpha1.Plugin.Configure:input_type -> nri.pkg.api.v1alpha1.ConfigureRequest -+ 7, // 85: nri.pkg.api.v1alpha1.Plugin.Synchronize:input_type -> nri.pkg.api.v1alpha1.SynchronizeRequest -+ 16, // 86: nri.pkg.api.v1alpha1.Plugin.Shutdown:input_type -> nri.pkg.api.v1alpha1.Empty -+ 9, // 87: nri.pkg.api.v1alpha1.Plugin.CreateContainer:input_type -> nri.pkg.api.v1alpha1.CreateContainerRequest -+ 11, // 88: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:input_type -> nri.pkg.api.v1alpha1.UpdateContainerRequest -+ 13, // 89: nri.pkg.api.v1alpha1.Plugin.StopContainer:input_type -> nri.pkg.api.v1alpha1.StopContainerRequest -+ 15, // 90: nri.pkg.api.v1alpha1.Plugin.StateChange:input_type -> nri.pkg.api.v1alpha1.StateChangeEvent -+ 16, // 91: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:output_type -> nri.pkg.api.v1alpha1.Empty -+ 4, // 92: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:output_type -> nri.pkg.api.v1alpha1.UpdateContainersResponse -+ 6, // 93: nri.pkg.api.v1alpha1.Plugin.Configure:output_type -> nri.pkg.api.v1alpha1.ConfigureResponse -+ 8, // 94: nri.pkg.api.v1alpha1.Plugin.Synchronize:output_type -> nri.pkg.api.v1alpha1.SynchronizeResponse -+ 16, // 95: nri.pkg.api.v1alpha1.Plugin.Shutdown:output_type -> nri.pkg.api.v1alpha1.Empty -+ 10, // 96: nri.pkg.api.v1alpha1.Plugin.CreateContainer:output_type -> nri.pkg.api.v1alpha1.CreateContainerResponse -+ 12, // 97: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:output_type -> nri.pkg.api.v1alpha1.UpdateContainerResponse -+ 14, // 98: nri.pkg.api.v1alpha1.Plugin.StopContainer:output_type -> nri.pkg.api.v1alpha1.StopContainerResponse -+ 16, // 99: nri.pkg.api.v1alpha1.Plugin.StateChange:output_type -> nri.pkg.api.v1alpha1.Empty -+ 91, // [91:100] is the sub-list for method output_type -+ 82, // [82:91] is the sub-list for method input_type -+ 82, // [82:82] is the sub-list for extension type_name -+ 82, // [82:82] is the sub-list for extension extendee -+ 0, // [0:82] is the sub-list for field type_name -+} -+ -+func init() { file_pkg_api_api_proto_init() } -+func file_pkg_api_api_proto_init() { -+ if File_pkg_api_api_proto != nil { -+ return -+ } -+ if !protoimpl.UnsafeEnabled { -+ file_pkg_api_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*RegisterPluginRequest); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*UpdateContainersRequest); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*UpdateContainersResponse); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*ConfigureRequest); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*ConfigureResponse); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*SynchronizeRequest); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*SynchronizeResponse); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*CreateContainerRequest); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*CreateContainerResponse); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*UpdateContainerRequest); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*UpdateContainerResponse); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*StopContainerRequest); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*StopContainerResponse); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*StateChangeEvent); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Empty); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*PodSandbox); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxPodSandbox); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Container); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Mount); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Hooks); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Hook); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxContainer); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxNamespace); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxDevice); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxDeviceCgroup); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxResources); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxMemory); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxCPU); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*HugepageLimit); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*POSIXRlimit); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*ContainerAdjustment); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxContainerAdjustment); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*ContainerUpdate); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*LinuxContainerUpdate); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*ContainerEviction); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*KeyValue); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*OptionalString); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*OptionalInt); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*OptionalInt32); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*OptionalUInt32); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*OptionalInt64); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*OptionalUInt64); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*OptionalBool); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_pkg_api_api_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*OptionalFileMode); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ } -+ type x struct{} -+ out := protoimpl.TypeBuilder{ -+ File: protoimpl.DescBuilder{ -+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), -+ RawDescriptor: file_pkg_api_api_proto_rawDesc, -+ NumEnums: 2, -+ NumMessages: 50, -+ NumExtensions: 0, -+ NumServices: 2, -+ }, -+ GoTypes: file_pkg_api_api_proto_goTypes, -+ DependencyIndexes: file_pkg_api_api_proto_depIdxs, -+ EnumInfos: file_pkg_api_api_proto_enumTypes, -+ MessageInfos: file_pkg_api_api_proto_msgTypes, -+ }.Build() -+ File_pkg_api_api_proto = out.File -+ file_pkg_api_api_proto_rawDesc = nil -+ file_pkg_api_api_proto_goTypes = nil -+ file_pkg_api_api_proto_depIdxs = nil -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/api.proto b/vendor/github.com/containerd/nri/pkg/api/api.proto -new file mode 100755 -index 0000000..7c64ade ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/api.proto -@@ -0,0 +1,450 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+syntax = "proto3"; -+ -+package nri.pkg.api.v1alpha1; -+ -+option go_package = "github.com/containerd/nri/pkg/api;api"; -+ -+// Runtime service is the public API runtimes expose for NRI plugins. -+// On this interface RPC requests are initiated by the plugin. This -+// only covers plugin registration and unsolicited container updates. -+// The rest of the API is defined by the Plugin service. -+service Runtime { -+ // RegisterPlugin registers the plugin with the runtime. -+ rpc RegisterPlugin(RegisterPluginRequest) returns (Empty); -+ // UpdateContainers requests unsolicited updates to a set of containers. -+ rpc UpdateContainers(UpdateContainersRequest) returns (UpdateContainersResponse); -+} -+ -+message RegisterPluginRequest { -+ // Name of the plugin to register. -+ string plugin_name = 1; -+ // Plugin invocation index. Plugins are called in ascending index order. -+ string plugin_idx = 2; -+} -+ -+message UpdateContainersRequest { -+ // List of containers to update. -+ repeated ContainerUpdate update = 1; -+ // List of containers to evict. -+ repeated ContainerEviction evict = 2; -+} -+ -+message UpdateContainersResponse { -+ // Containers that the runtime failed to udpate. -+ repeated ContainerUpdate failed = 1; -+} -+ -+ -+// -+// Plugin is the API NRI uses to interact with plugins. It is used to -+// - configure a plugin and subscribe it for lifecycle events -+// - synchronize the state of a plugin with that of the runtime -+// - hook a plugin into the lifecycle events of its interest -+// -+// During configuration the plugin tells the runtime which lifecycle events -+// it wishes to get hooked into. Once configured, the plugin is synchronized -+// with the runtime by receiving the list of pods and containers known to -+// the runtime. The plugin can request changes to any of the containers in -+// response. After initial synchronization the plugin starts receiving the -+// events it subscribed for as they occur in the runtime. For container -+// creation, update, and stop events, the plugin can request changes, both -+// to the container that triggered the event or any other existing container -+// in the runtime. -+// -+// For a subset of the container lifecycle events, NRI defines an additional -+// Post-variant of the event. These variants are defined for CreateContainer, -+// StartContainer, and UpdateContainer. For creation and update, these events -+// can be used by plugins to discover the full extent of changes applied to -+// the container, including any changes made by other active plugins. -+// -+service Plugin { -+ // Configure the plugin and get its event subscription. -+ rpc Configure(ConfigureRequest) returns (ConfigureResponse); -+ -+ // Synchronize the plugin with the state of the runtime. -+ rpc Synchronize(SynchronizeRequest) returns (SynchronizeResponse); -+ -+ // Shutdown a plugin (let it know the runtime is going down). -+ rpc Shutdown(Empty) returns (Empty); -+ -+ // CreateContainer relays the corresponding request to the plugin. In -+ // response, the plugin can adjust the container being created, and -+ // update other containers in the runtime. Container adjustment can -+ // alter labels, annotations, mounts, devices, environment variables, -+ // OCI hooks, and assigned container resources. Updates can alter -+ // assigned container resources. -+ rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse); -+ -+ // UpdateContainer relays the corresponding request to the plugin. -+ // The plugin can alter how the container is updated and request updates -+ // to additional containers in the runtime. -+ rpc UpdateContainer(UpdateContainerRequest) returns (UpdateContainerResponse); -+ -+ // StopContainer relays the corresponding request to the plugin. The plugin -+ // can update any of the remaining containers in the runtime in response. -+ rpc StopContainer(StopContainerRequest) returns (StopContainerResponse); -+ -+ // StateChange relays any remaining pod or container lifecycle/state change -+ // events the plugin has subscribed for. These can be used to trigger any -+ // plugin-specific processing which needs to occur in connection with any of -+ // these events. -+ rpc StateChange(StateChangeEvent) returns (Empty); -+} -+ -+message ConfigureRequest { -+ // Any plugin-specific data, if present among the NRI configuration. -+ string config = 1; -+ // Name of the runtime NRI is running in. -+ string runtime_name = 2; -+ // Version of the runtime NRI is running in. -+ string runtime_version = 3; -+} -+ -+message ConfigureResponse { -+ // Events to subscribe the plugin for. Each bit set corresponds to an -+ // enumerated Event. -+ int32 events = 2; -+} -+ -+message SynchronizeRequest { -+ // Pods known to the runtime. -+ repeated PodSandbox pods = 1; -+ // Containers known to the runtime. -+ repeated Container containers = 2; -+} -+ -+message SynchronizeResponse { -+ // Updates to containers requested by the plugin. -+ repeated ContainerUpdate update = 1; -+} -+ -+message CreateContainerRequest { -+ // Pod of container being created. -+ PodSandbox pod = 1; -+ // Container being created. -+ Container container = 2; -+} -+ -+message CreateContainerResponse { -+ // Requested adjustments to container being created. -+ ContainerAdjustment adjust = 1; -+ // Requested updates to other existing containers. -+ repeated ContainerUpdate update = 2; -+ // Requested eviction of existing containers. -+ repeated ContainerEviction evict = 3; -+} -+ -+message UpdateContainerRequest { -+ // Pod of container being updated. -+ PodSandbox pod = 1; -+ // Container being updated. -+ Container container = 2; -+ // Resources to update. -+ LinuxResources linux_resources = 3; -+} -+ -+message UpdateContainerResponse { -+ // Requested updates to containers. -+ repeated ContainerUpdate update = 1; -+ // Requested eviction of containers. -+ repeated ContainerEviction evict = 2; -+} -+ -+message StopContainerRequest { -+ // Pod of container being stopped. -+ PodSandbox pod = 1; -+ // Container being stopped. -+ Container container = 2; -+} -+ -+message StopContainerResponse { -+ // Requested updates to containers. -+ repeated ContainerUpdate update = 1; -+} -+ -+message StateChangeEvent { -+ // Event type of notification. -+ Event event = 1; -+ // Pod this notification is sent for. If this event is related to a container, -+ // pod is set to the pod of the container. -+ PodSandbox pod = 2; -+ // Container this notification is sent for. If the event is related to a pod, -+ // container is nil. -+ Container container = 3; -+} -+ -+// Empty response for those *Requests that are semantically events. -+message Empty {} -+ -+// Events that plugins can subscribe to in ConfigureResponse. -+enum Event { -+ UNKNOWN = 0; -+ RUN_POD_SANDBOX = 1; -+ STOP_POD_SANDBOX = 2; -+ REMOVE_POD_SANDBOX = 3; -+ CREATE_CONTAINER = 4; -+ POST_CREATE_CONTAINER = 5; -+ START_CONTAINER = 6; -+ POST_START_CONTAINER = 7; -+ UPDATE_CONTAINER = 8; -+ POST_UPDATE_CONTAINER = 9; -+ STOP_CONTAINER = 10; -+ REMOVE_CONTAINER = 11; -+ LAST = 12; -+} -+ -+// Pod metadata that is considered relevant for a plugin. -+message PodSandbox { -+ string id = 1; -+ string name = 2; -+ string uid = 3; -+ string namespace = 4; -+ map labels = 5; -+ map annotations = 6; -+ string runtime_handler = 7; -+ LinuxPodSandbox linux = 8; -+ uint32 pid = 9; // for NRI v1 emulation -+} -+ -+// PodSandbox linux-specific metadata -+message LinuxPodSandbox { -+ LinuxResources pod_overhead = 1; -+ LinuxResources pod_resources = 2; -+ string cgroup_parent = 3; -+ string cgroups_path = 4; // for NRI v1 emulation -+ repeated LinuxNamespace namespaces = 5; // for NRI v1 emulation -+ LinuxResources resources = 6; // for NRI v1 emulation -+} -+ -+// Container metadata that is considered relevant for a plugin. -+message Container { -+ string id = 1; -+ string pod_sandbox_id = 2; -+ string name = 3; -+ ContainerState state = 4; -+ map labels = 5; -+ map annotations = 6; -+ repeated string args = 7; -+ repeated string env = 8; -+ repeated Mount mounts = 9; -+ Hooks hooks = 10; -+ LinuxContainer linux = 11; -+ uint32 pid = 12; // for NRI v1 emulation -+ repeated POSIXRlimit rlimits = 13; -+} -+ -+// Possible container states. -+enum ContainerState { -+ CONTAINER_UNKNOWN = 0; -+ CONTAINER_CREATED = 1; -+ CONTAINER_PAUSED = 2; // is this useful/necessary ? -+ CONTAINER_RUNNING = 3; -+ CONTAINER_STOPPED = 4; -+} -+ -+// A container mount. -+message Mount { -+ string destination = 1; -+ string type = 2; -+ string source = 3; -+ repeated string options = 4; -+} -+ -+// Container OCI hooks. -+message Hooks { -+ repeated Hook prestart = 1; -+ repeated Hook create_runtime = 2; -+ repeated Hook create_container = 3; -+ repeated Hook start_container = 4; -+ repeated Hook poststart = 5; -+ repeated Hook poststop = 6; -+} -+ -+// One OCI hook. -+message Hook { -+ string path = 1; -+ repeated string args = 2; -+ repeated string env = 3; -+ OptionalInt timeout = 4; -+} -+ -+// Container (linux) metadata. -+message LinuxContainer { -+ repeated LinuxNamespace namespaces = 1; -+ repeated LinuxDevice devices = 2; -+ LinuxResources resources = 3; -+ OptionalInt oom_score_adj = 4; -+ string cgroups_path = 5; -+} -+ -+// A linux namespace. -+message LinuxNamespace { -+ string type = 1; -+ string path = 2; -+} -+ -+// A container (linux) device. -+message LinuxDevice { -+ string path = 1; -+ string type = 2; -+ int64 major = 3; -+ int64 minor = 4; -+ OptionalFileMode file_mode = 5; -+ OptionalUInt32 uid = 6; -+ OptionalUInt32 gid = 7; -+} -+ -+// A linux device cgroup controller rule. -+message LinuxDeviceCgroup { -+ bool allow = 1; -+ string type = 2; -+ OptionalInt64 major = 3; -+ OptionalInt64 minor = 4; -+ string access = 5; -+} -+ -+// Container (linux) resources. -+message LinuxResources { -+ LinuxMemory memory = 1; -+ LinuxCPU cpu = 2; -+ repeated HugepageLimit hugepage_limits = 3; -+ OptionalString blockio_class = 4; -+ OptionalString rdt_class = 5; -+ map unified = 6; -+ repeated LinuxDeviceCgroup devices = 7; // for NRI v1 emulation -+} -+ -+// Memory-related parts of (linux) resources. -+message LinuxMemory { -+ OptionalInt64 limit = 1; -+ OptionalInt64 reservation = 2; -+ OptionalInt64 swap = 3; -+ OptionalInt64 kernel = 4; -+ OptionalInt64 kernel_tcp = 5; -+ OptionalUInt64 swappiness = 6; -+ OptionalBool disable_oom_killer = 7; -+ OptionalBool use_hierarchy = 8; -+} -+ -+// CPU-related parts of (linux) resources. -+message LinuxCPU { -+ OptionalUInt64 shares = 1; -+ OptionalInt64 quota = 2; -+ OptionalUInt64 period = 3; -+ OptionalInt64 realtime_runtime = 4; -+ OptionalUInt64 realtime_period = 5; -+ string cpus = 6; -+ string mems = 7; -+} -+ -+// Container huge page limit. -+message HugepageLimit { -+ string page_size = 1; -+ uint64 limit = 2; -+} -+ -+// Container rlimits -+message POSIXRlimit { -+ string type = 1; -+ uint64 hard = 2; -+ uint64 soft = 3; -+} -+ -+// Requested adjustments to a container being created. -+message ContainerAdjustment { -+ map annotations = 2; -+ repeated Mount mounts = 3; -+ repeated KeyValue env = 4; -+ Hooks hooks = 5; -+ LinuxContainerAdjustment linux = 6; -+ repeated POSIXRlimit rlimits = 7; -+} -+ -+// Adjustments to (linux) resources. -+message LinuxContainerAdjustment { -+ repeated LinuxDevice devices = 1; -+ LinuxResources resources = 2; -+ string cgroups_path = 3; -+} -+ -+// Requested update to an already created container. -+message ContainerUpdate { -+ string container_id = 1; -+ LinuxContainerUpdate linux = 2; -+ bool ignore_failure = 3; -+} -+ -+// Updates to (linux) resources. -+message LinuxContainerUpdate { -+ LinuxResources resources = 1; -+} -+ -+// Request to evict (IOW unsolicitedly stop) a container. -+message ContainerEviction { -+ // Container to evict. -+ string container_id = 1; -+ // Human-readable reason for eviction. -+ string reason = 2; -+} -+ -+// KeyValue represents an environment variable. -+message KeyValue { -+ string key = 1; -+ string value = 2; -+} -+ -+// An optional string value. -+message OptionalString { -+ string value = 1; -+} -+ -+// An optional signed integer value. -+message OptionalInt { -+ int64 value = 1; -+} -+ -+// An optional 32-bit signed integer value. -+message OptionalInt32 { -+ int32 value = 1; -+} -+ -+// An optional 32-bit unsigned integer value. -+message OptionalUInt32 { -+ uint32 value = 1; -+} -+ -+// An optional 64-bit signed integer value. -+message OptionalInt64 { -+ int64 value = 1; -+} -+ -+// An optional 64-bit unsigned integer value. -+message OptionalUInt64 { -+ uint64 value = 1; -+} -+ -+// An optional boolean value. -+message OptionalBool { -+ bool value = 1; -+} -+ -+// An optional value of file permissions. -+message OptionalFileMode { -+ uint32 value = 1; -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/api_ttrpc.pb.go b/vendor/github.com/containerd/nri/pkg/api/api_ttrpc.pb.go -new file mode 100755 -index 0000000..c047ec5 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/api_ttrpc.pb.go -@@ -0,0 +1,192 @@ -+// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. -+// source: pkg/api/api.proto -+package api -+ -+import ( -+ context "context" -+ ttrpc "github.com/containerd/ttrpc" -+) -+ -+type RuntimeService interface { -+ RegisterPlugin(context.Context, *RegisterPluginRequest) (*Empty, error) -+ UpdateContainers(context.Context, *UpdateContainersRequest) (*UpdateContainersResponse, error) -+} -+ -+func RegisterRuntimeService(srv *ttrpc.Server, svc RuntimeService) { -+ srv.RegisterService("nri.pkg.api.v1alpha1.Runtime", &ttrpc.ServiceDesc{ -+ Methods: map[string]ttrpc.Method{ -+ "RegisterPlugin": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req RegisterPluginRequest -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.RegisterPlugin(ctx, &req) -+ }, -+ "UpdateContainers": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req UpdateContainersRequest -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.UpdateContainers(ctx, &req) -+ }, -+ }, -+ }) -+} -+ -+type runtimeClient struct { -+ client *ttrpc.Client -+} -+ -+func NewRuntimeClient(client *ttrpc.Client) RuntimeService { -+ return &runtimeClient{ -+ client: client, -+ } -+} -+ -+func (c *runtimeClient) RegisterPlugin(ctx context.Context, req *RegisterPluginRequest) (*Empty, error) { -+ var resp Empty -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Runtime", "RegisterPlugin", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -+ -+func (c *runtimeClient) UpdateContainers(ctx context.Context, req *UpdateContainersRequest) (*UpdateContainersResponse, error) { -+ var resp UpdateContainersResponse -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Runtime", "UpdateContainers", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -+ -+type PluginService interface { -+ Configure(context.Context, *ConfigureRequest) (*ConfigureResponse, error) -+ Synchronize(context.Context, *SynchronizeRequest) (*SynchronizeResponse, error) -+ Shutdown(context.Context, *Empty) (*Empty, error) -+ CreateContainer(context.Context, *CreateContainerRequest) (*CreateContainerResponse, error) -+ UpdateContainer(context.Context, *UpdateContainerRequest) (*UpdateContainerResponse, error) -+ StopContainer(context.Context, *StopContainerRequest) (*StopContainerResponse, error) -+ StateChange(context.Context, *StateChangeEvent) (*Empty, error) -+} -+ -+func RegisterPluginService(srv *ttrpc.Server, svc PluginService) { -+ srv.RegisterService("nri.pkg.api.v1alpha1.Plugin", &ttrpc.ServiceDesc{ -+ Methods: map[string]ttrpc.Method{ -+ "Configure": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req ConfigureRequest -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.Configure(ctx, &req) -+ }, -+ "Synchronize": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req SynchronizeRequest -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.Synchronize(ctx, &req) -+ }, -+ "Shutdown": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req Empty -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.Shutdown(ctx, &req) -+ }, -+ "CreateContainer": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req CreateContainerRequest -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.CreateContainer(ctx, &req) -+ }, -+ "UpdateContainer": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req UpdateContainerRequest -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.UpdateContainer(ctx, &req) -+ }, -+ "StopContainer": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req StopContainerRequest -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.StopContainer(ctx, &req) -+ }, -+ "StateChange": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ var req StateChangeEvent -+ if err := unmarshal(&req); err != nil { -+ return nil, err -+ } -+ return svc.StateChange(ctx, &req) -+ }, -+ }, -+ }) -+} -+ -+type pluginClient struct { -+ client *ttrpc.Client -+} -+ -+func NewPluginClient(client *ttrpc.Client) PluginService { -+ return &pluginClient{ -+ client: client, -+ } -+} -+ -+func (c *pluginClient) Configure(ctx context.Context, req *ConfigureRequest) (*ConfigureResponse, error) { -+ var resp ConfigureResponse -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Plugin", "Configure", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -+ -+func (c *pluginClient) Synchronize(ctx context.Context, req *SynchronizeRequest) (*SynchronizeResponse, error) { -+ var resp SynchronizeResponse -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Plugin", "Synchronize", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -+ -+func (c *pluginClient) Shutdown(ctx context.Context, req *Empty) (*Empty, error) { -+ var resp Empty -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Plugin", "Shutdown", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -+ -+func (c *pluginClient) CreateContainer(ctx context.Context, req *CreateContainerRequest) (*CreateContainerResponse, error) { -+ var resp CreateContainerResponse -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Plugin", "CreateContainer", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -+ -+func (c *pluginClient) UpdateContainer(ctx context.Context, req *UpdateContainerRequest) (*UpdateContainerResponse, error) { -+ var resp UpdateContainerResponse -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Plugin", "UpdateContainer", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -+ -+func (c *pluginClient) StopContainer(ctx context.Context, req *StopContainerRequest) (*StopContainerResponse, error) { -+ var resp StopContainerResponse -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Plugin", "StopContainer", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -+ -+func (c *pluginClient) StateChange(ctx context.Context, req *StateChangeEvent) (*Empty, error) { -+ var resp Empty -+ if err := c.client.Call(ctx, "nri.pkg.api.v1alpha1.Plugin", "StateChange", req, &resp); err != nil { -+ return nil, err -+ } -+ return &resp, nil -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/device.go b/vendor/github.com/containerd/nri/pkg/api/device.go -new file mode 100755 -index 0000000..c7307b1 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/device.go -@@ -0,0 +1,89 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ rspec "github.com/opencontainers/runtime-spec/specs-go" -+) -+ -+// FromOCILinuxDevices returns a device slice from an OCI runtime Spec. -+func FromOCILinuxDevices(o []rspec.LinuxDevice) []*LinuxDevice { -+ var devices []*LinuxDevice -+ for _, d := range o { -+ devices = append(devices, &LinuxDevice{ -+ Path: d.Path, -+ Type: d.Type, -+ Major: d.Major, -+ Minor: d.Minor, -+ FileMode: FileMode(d.FileMode), -+ Uid: UInt32(d.UID), -+ Gid: UInt32(d.GID), -+ }) -+ } -+ return devices -+} -+ -+// ToOCI returns the linux devices for an OCI runtime Spec. -+func (d *LinuxDevice) ToOCI() rspec.LinuxDevice { -+ if d == nil { -+ return rspec.LinuxDevice{} -+ } -+ -+ return rspec.LinuxDevice{ -+ Path: d.Path, -+ Type: d.Type, -+ Major: d.Major, -+ Minor: d.Minor, -+ FileMode: d.FileMode.Get(), -+ UID: d.Uid.Get(), -+ GID: d.Gid.Get(), -+ } -+} -+ -+// AccessString returns an OCI access string for the device. -+func (d *LinuxDevice) AccessString() string { -+ r, w, m := "r", "w", "" -+ -+ if mode := d.FileMode.Get(); mode != nil { -+ perm := mode.Perm() -+ if (perm & 0444) != 0 { -+ r = "r" -+ } -+ if (perm & 0222) != 0 { -+ w = "w" -+ } -+ } -+ if d.Type == "b" { -+ m = "m" -+ } -+ -+ return r + w + m -+} -+ -+// Cmp returns true if the devices are equal. -+func (d *LinuxDevice) Cmp(v *LinuxDevice) bool { -+ if v == nil { -+ return false -+ } -+ return d.Major != v.Major || d.Minor != v.Minor -+} -+ -+// IsMarkedForRemoval checks if a LinuxDevice is marked for removal. -+func (d *LinuxDevice) IsMarkedForRemoval() (string, bool) { -+ key, marked := IsMarkedForRemoval(d.Path) -+ return key, marked -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/doc.go b/vendor/github.com/containerd/nri/pkg/api/doc.go -new file mode 100755 -index 0000000..2413d02 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/doc.go -@@ -0,0 +1,17 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -diff --git a/vendor/github.com/containerd/nri/pkg/api/env.go b/vendor/github.com/containerd/nri/pkg/api/env.go -new file mode 100755 -index 0000000..0f6e711 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/env.go -@@ -0,0 +1,60 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ "strings" -+) -+ -+// ToOCI returns an OCI Env entry for the KeyValue. -+func (e *KeyValue) ToOCI() string { -+ return e.Key + "=" + e.Value -+} -+ -+// FromOCIEnv returns KeyValues from an OCI runtime Spec environment. -+func FromOCIEnv(in []string) []*KeyValue { -+ if in == nil { -+ return nil -+ } -+ out := []*KeyValue{} -+ for _, keyval := range in { -+ var key, val string -+ split := strings.SplitN(keyval, "=", 2) -+ switch len(split) { -+ case 0: -+ continue -+ case 1: -+ key = split[0] -+ case 2: -+ key = split[0] -+ val = split[1] -+ default: -+ val = strings.Join(split[1:], "=") -+ } -+ out = append(out, &KeyValue{ -+ Key: key, -+ Value: val, -+ }) -+ } -+ return out -+} -+ -+// IsMarkedForRemoval checks if an environment variable is marked for removal. -+func (e *KeyValue) IsMarkedForRemoval() (string, bool) { -+ key, marked := IsMarkedForRemoval(e.Key) -+ return key, marked -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/event.go b/vendor/github.com/containerd/nri/pkg/api/event.go -new file mode 100755 -index 0000000..260460a ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/event.go -@@ -0,0 +1,172 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ "fmt" -+ "strings" -+) -+ -+const ( -+ // ValidEvents is the event mask of all valid events. -+ ValidEvents = EventMask((1 << (Event_LAST - 1)) - 1) -+) -+ -+// nolint -+type ( -+ // Define *Request/*Response type aliases for *Event/Empty pairs. -+ -+ StateChangeResponse = Empty -+ RunPodSandboxRequest = StateChangeEvent -+ RunPodSandboxResponse = Empty -+ StopPodSandboxRequest = StateChangeEvent -+ StopPodSandboxResponse = Empty -+ RemovePodSandboxRequest = StateChangeEvent -+ RemovePodSandboxResponse = Empty -+ StartContainerRequest = StateChangeEvent -+ StartContainerResponse = Empty -+ RemoveContainerRequest = StateChangeEvent -+ RemoveContainerResponse = Empty -+ PostCreateContainerRequest = StateChangeEvent -+ PostCreateContainerResponse = Empty -+ PostStartContainerRequest = StateChangeEvent -+ PostStartContainerResponse = Empty -+ PostUpdateContainerRequest = StateChangeEvent -+ PostUpdateContainerResponse = Empty -+ -+ ShutdownRequest = Empty -+ ShutdownResponse = Empty -+) -+ -+// EventMask corresponds to a set of enumerated Events. -+type EventMask int32 -+ -+// ParseEventMask parses a string representation into an EventMask. -+func ParseEventMask(events ...string) (EventMask, error) { -+ var mask EventMask -+ -+ bits := map[string]Event{ -+ "runpodsandbox": Event_RUN_POD_SANDBOX, -+ "stoppodsandbox": Event_STOP_POD_SANDBOX, -+ "removepodsandbox": Event_REMOVE_POD_SANDBOX, -+ "createcontainer": Event_CREATE_CONTAINER, -+ "postcreatecontainer": Event_POST_CREATE_CONTAINER, -+ "startcontainer": Event_START_CONTAINER, -+ "poststartcontainer": Event_POST_START_CONTAINER, -+ "updatecontainer": Event_UPDATE_CONTAINER, -+ "postupdatecontainer": Event_POST_UPDATE_CONTAINER, -+ "stopcontainer": Event_STOP_CONTAINER, -+ "removecontainer": Event_REMOVE_CONTAINER, -+ } -+ -+ for _, event := range events { -+ lcEvents := strings.ToLower(event) -+ for _, name := range strings.Split(lcEvents, ",") { -+ switch name { -+ case "all": -+ mask |= ValidEvents -+ continue -+ case "pod", "podsandbox": -+ for name, bit := range bits { -+ if strings.Contains(name, "pod") { -+ mask.Set(bit) -+ } -+ } -+ continue -+ case "container": -+ for name, bit := range bits { -+ if strings.Contains(name, "container") { -+ mask.Set(bit) -+ } -+ } -+ continue -+ } -+ -+ bit, ok := bits[strings.TrimSpace(name)] -+ if !ok { -+ return 0, fmt.Errorf("unknown event %q", name) -+ } -+ mask.Set(bit) -+ } -+ } -+ -+ return mask, nil -+} -+ -+// MustParseEventMask parses the given events, panic()ing on errors. -+func MustParseEventMask(events ...string) EventMask { -+ mask, err := ParseEventMask(events...) -+ if err != nil { -+ panic(fmt.Sprintf("failed to parse events %s", strings.Join(events, " "))) -+ } -+ return mask -+} -+ -+// PrettyString returns a human-readable string representation of an EventMask. -+func (m *EventMask) PrettyString() string { -+ names := map[Event]string{ -+ Event_RUN_POD_SANDBOX: "RunPodSandbox", -+ Event_STOP_POD_SANDBOX: "StopPodSandbox", -+ Event_REMOVE_POD_SANDBOX: "RemovePodSandbox", -+ Event_CREATE_CONTAINER: "CreateContainer", -+ Event_POST_CREATE_CONTAINER: "PostCreateContainer", -+ Event_START_CONTAINER: "StartContainer", -+ Event_POST_START_CONTAINER: "PostStartContainer", -+ Event_UPDATE_CONTAINER: "UpdateContainer", -+ Event_POST_UPDATE_CONTAINER: "PostUpdateContainer", -+ Event_STOP_CONTAINER: "StopContainer", -+ Event_REMOVE_CONTAINER: "RemoveContainer", -+ } -+ -+ mask := *m -+ events, sep := "", "" -+ -+ for bit := Event_UNKNOWN + 1; bit <= Event_LAST; bit++ { -+ if mask.IsSet(bit) { -+ events += sep + names[bit] -+ sep = "," -+ mask.Clear(bit) -+ } -+ } -+ -+ if mask != 0 { -+ events += sep + fmt.Sprintf("unknown(0x%x)", mask) -+ } -+ -+ return events -+} -+ -+// Set sets the given Events in the mask. -+func (m *EventMask) Set(events ...Event) *EventMask { -+ for _, e := range events { -+ *m |= (1 << (e - 1)) -+ } -+ return m -+} -+ -+// Clear clears the given Events in the mask. -+func (m *EventMask) Clear(events ...Event) *EventMask { -+ for _, e := range events { -+ *m &^= (1 << (e - 1)) -+ } -+ return m -+} -+ -+// IsSet check if the given Event is set in the mask. -+func (m *EventMask) IsSet(e Event) bool { -+ return *m&(1<<(e-1)) != 0 -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/helpers.go b/vendor/github.com/containerd/nri/pkg/api/helpers.go -new file mode 100755 -index 0000000..c721270 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/helpers.go -@@ -0,0 +1,59 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+// DupStringSlice creates a copy of a string slice. -+func DupStringSlice(in []string) []string { -+ if in == nil { -+ return nil -+ } -+ out := make([]string, len(in)) -+ copy(out, in) -+ return out -+} -+ -+// DupStringMap creates a copy of a map with string keys and values. -+func DupStringMap(in map[string]string) map[string]string { -+ if in == nil { -+ return nil -+ } -+ out := map[string]string{} -+ for k, v := range in { -+ out[k] = v -+ } -+ return out -+} -+ -+// IsMarkedForRemoval checks if a key is marked for removal. -+// -+// The key can be an annotation name, a mount container path, a device path, -+// or an environment variable name. These are all marked for removal in -+// adjustments by preceding their corresponding key with a '-'. -+func IsMarkedForRemoval(key string) (string, bool) { -+ if key == "" { -+ return "", false -+ } -+ if key[0] != '-' { -+ return key, false -+ } -+ return key[1:], true -+} -+ -+// MarkForRemoval returns a key marked for removal. -+func MarkForRemoval(key string) string { -+ return "-" + key -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/hooks.go b/vendor/github.com/containerd/nri/pkg/api/hooks.go -new file mode 100755 -index 0000000..47dd96e ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/hooks.go -@@ -0,0 +1,103 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ rspec "github.com/opencontainers/runtime-spec/specs-go" -+) -+ -+// Append appends the given hooks to the existing ones. -+func (hooks *Hooks) Append(h *Hooks) *Hooks { -+ if h == nil { -+ return hooks -+ } -+ hooks.Prestart = append(hooks.Prestart, h.Prestart...) -+ hooks.CreateRuntime = append(hooks.CreateRuntime, h.CreateRuntime...) -+ hooks.CreateContainer = append(hooks.CreateContainer, h.CreateContainer...) -+ hooks.StartContainer = append(hooks.StartContainer, h.StartContainer...) -+ hooks.Poststart = append(hooks.Poststart, h.Poststart...) -+ hooks.Poststop = append(hooks.Poststop, h.Poststop...) -+ -+ return hooks -+} -+ -+// Hooks returns itself it any of its hooks is set. Otherwise it returns nil. -+func (hooks *Hooks) Hooks() *Hooks { -+ if hooks == nil { -+ return nil -+ } -+ -+ if len(hooks.Prestart) > 0 { -+ return hooks -+ } -+ if len(hooks.CreateRuntime) > 0 { -+ return hooks -+ } -+ if len(hooks.CreateContainer) > 0 { -+ return hooks -+ } -+ if len(hooks.StartContainer) > 0 { -+ return hooks -+ } -+ if len(hooks.Poststart) > 0 { -+ return hooks -+ } -+ if len(hooks.Poststop) > 0 { -+ return hooks -+ } -+ -+ return nil -+} -+ -+// ToOCI returns the hook for an OCI runtime Spec. -+func (h *Hook) ToOCI() rspec.Hook { -+ return rspec.Hook{ -+ Path: h.Path, -+ Args: DupStringSlice(h.Args), -+ Env: DupStringSlice(h.Env), -+ Timeout: h.Timeout.Get(), -+ } -+} -+ -+// FromOCIHooks returns hooks from an OCI runtime Spec. -+func FromOCIHooks(o *rspec.Hooks) *Hooks { -+ if o == nil { -+ return nil -+ } -+ return &Hooks{ -+ Prestart: FromOCIHookSlice(o.Prestart), -+ CreateRuntime: FromOCIHookSlice(o.CreateRuntime), -+ CreateContainer: FromOCIHookSlice(o.CreateContainer), -+ StartContainer: FromOCIHookSlice(o.StartContainer), -+ Poststart: FromOCIHookSlice(o.Poststart), -+ Poststop: FromOCIHookSlice(o.Poststop), -+ } -+} -+ -+// FromOCIHookSlice returns a hook slice from an OCI runtime Spec. -+func FromOCIHookSlice(o []rspec.Hook) []*Hook { -+ var hooks []*Hook -+ for _, h := range o { -+ hooks = append(hooks, &Hook{ -+ Path: h.Path, -+ Args: DupStringSlice(h.Args), -+ Env: DupStringSlice(h.Env), -+ Timeout: Int(h.Timeout), -+ }) -+ } -+ return hooks -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/mount.go b/vendor/github.com/containerd/nri/pkg/api/mount.go -new file mode 100755 -index 0000000..e35bf5b ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/mount.go -@@ -0,0 +1,88 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ "sort" -+ -+ rspec "github.com/opencontainers/runtime-spec/specs-go" -+) -+ -+const ( -+ // SELinuxRelabel is a Mount pseudo-option to request relabeling. -+ SELinuxRelabel = "relabel" -+) -+ -+// FromOCIMounts returns a Mount slice for an OCI runtime Spec. -+func FromOCIMounts(o []rspec.Mount) []*Mount { -+ var mounts []*Mount -+ for _, m := range o { -+ mounts = append(mounts, &Mount{ -+ Destination: m.Destination, -+ Type: m.Type, -+ Source: m.Source, -+ Options: DupStringSlice(m.Options), -+ }) -+ } -+ return mounts -+} -+ -+// ToOCI returns a Mount for an OCI runtime Spec. -+func (m *Mount) ToOCI(propagationQuery *string) rspec.Mount { -+ o := rspec.Mount{ -+ Destination: m.Destination, -+ Type: m.Type, -+ Source: m.Source, -+ } -+ for _, opt := range m.Options { -+ o.Options = append(o.Options, opt) -+ if propagationQuery != nil && (opt == "rprivate" || opt == "rshared" || opt == "rslave") { -+ *propagationQuery = opt -+ } -+ } -+ return o -+} -+ -+// Cmp returns true if the mounts are equal. -+func (m *Mount) Cmp(v *Mount) bool { -+ if v == nil { -+ return false -+ } -+ if m.Destination != v.Destination || m.Type != v.Type || m.Source != v.Source || -+ len(m.Options) != len(v.Options) { -+ return false -+ } -+ -+ mOpts := make([]string, len(m.Options)) -+ vOpts := make([]string, len(m.Options)) -+ sort.Strings(mOpts) -+ sort.Strings(vOpts) -+ -+ for i, o := range mOpts { -+ if vOpts[i] != o { -+ return false -+ } -+ } -+ -+ return true -+} -+ -+// IsMarkedForRemoval checks if a Mount is marked for removal. -+func (m *Mount) IsMarkedForRemoval() (string, bool) { -+ key, marked := IsMarkedForRemoval(m.Destination) -+ return key, marked -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/namespace.go b/vendor/github.com/containerd/nri/pkg/api/namespace.go -new file mode 100755 -index 0000000..201106d ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/namespace.go -@@ -0,0 +1,33 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ rspec "github.com/opencontainers/runtime-spec/specs-go" -+) -+ -+// FromOCILinuxNamespaces returns a namespace slice from an OCI runtime Spec. -+func FromOCILinuxNamespaces(o []rspec.LinuxNamespace) []*LinuxNamespace { -+ var namespaces []*LinuxNamespace -+ for _, ns := range o { -+ namespaces = append(namespaces, &LinuxNamespace{ -+ Type: string(ns.Type), -+ Path: ns.Path, -+ }) -+ } -+ return namespaces -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/optional.go b/vendor/github.com/containerd/nri/pkg/api/optional.go -new file mode 100755 -index 0000000..c8020f4 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/optional.go -@@ -0,0 +1,341 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ "os" -+) -+ -+// -+// XXX FIXME: -+// -+// The optional interface constructor should be updated/split up -+// to avoid having to take an interface{} argument. Instead The -+// optional types should have a -+// - constructor taking the underlying native type -+// - a Copy() function for copying them -+// - a FromPointer constructor to create them from an optionally nil -+// pointer to the underlying native type (to help constructing from -+// structures that use a pointer to the native underlying type to -+// denote optionality (OCI Spec mostly)) -+// Creating from any other type should use one of these with any explicit -+// cast for the argument as necessary. -+// -+ -+// String creates an Optional wrapper from its argument. -+func String(v interface{}) *OptionalString { -+ var value string -+ -+ switch o := v.(type) { -+ case string: -+ value = o -+ case *string: -+ if o == nil { -+ return nil -+ } -+ value = *o -+ case *OptionalString: -+ if o == nil { -+ return nil -+ } -+ value = o.Value -+ default: -+ return nil -+ } -+ -+ return &OptionalString{ -+ Value: value, -+ } -+} -+ -+// Get returns nil if its value is unset or a pointer to the value itself. -+func (o *OptionalString) Get() *string { -+ if o == nil { -+ return nil -+ } -+ v := o.Value -+ return &v -+} -+ -+// Int creates an Optional wrapper from its argument. -+func Int(v interface{}) *OptionalInt { -+ var value int64 -+ -+ switch o := v.(type) { -+ case int: -+ value = int64(o) -+ case *int: -+ if o == nil { -+ return nil -+ } -+ value = int64(*o) -+ case *OptionalInt: -+ if o == nil { -+ return nil -+ } -+ value = o.Value -+ default: -+ return nil -+ } -+ -+ return &OptionalInt{ -+ Value: value, -+ } -+} -+ -+// Get returns nil if its value is unset or a pointer to the value itself. -+func (o *OptionalInt) Get() *int { -+ if o == nil { -+ return nil -+ } -+ v := int(o.Value) -+ return &v -+} -+ -+// Int32 creates an Optional wrapper from its argument. -+func Int32(v interface{}) *OptionalInt32 { -+ var value int32 -+ -+ switch o := v.(type) { -+ case int32: -+ value = o -+ case *int32: -+ if o == nil { -+ return nil -+ } -+ value = *o -+ case *OptionalInt32: -+ if o == nil { -+ return nil -+ } -+ value = o.Value -+ default: -+ return nil -+ } -+ -+ return &OptionalInt32{ -+ Value: value, -+ } -+} -+ -+// Get returns nil if its value is unset or a pointer to the value itself. -+func (o *OptionalInt32) Get() *int32 { -+ if o == nil { -+ return nil -+ } -+ v := o.Value -+ return &v -+} -+ -+// UInt32 creates an Optional wrapper from its argument. -+func UInt32(v interface{}) *OptionalUInt32 { -+ var value uint32 -+ -+ switch o := v.(type) { -+ case uint32: -+ value = o -+ case *uint32: -+ if o == nil { -+ return nil -+ } -+ value = *o -+ case *OptionalUInt32: -+ if o == nil { -+ return nil -+ } -+ value = o.Value -+ default: -+ return nil -+ } -+ -+ return &OptionalUInt32{ -+ Value: value, -+ } -+} -+ -+// Get returns nil if its value is unset or a pointer to the value itself. -+func (o *OptionalUInt32) Get() *uint32 { -+ if o == nil { -+ return nil -+ } -+ v := o.Value -+ return &v -+} -+ -+// Int64 creates an Optional wrapper from its argument. -+func Int64(v interface{}) *OptionalInt64 { -+ var value int64 -+ -+ switch o := v.(type) { -+ case int: -+ value = int64(o) -+ case uint: -+ value = int64(o) -+ case uint64: -+ value = int64(o) -+ case int64: -+ value = o -+ case *int64: -+ if o == nil { -+ return nil -+ } -+ value = *o -+ case *uint64: -+ if o == nil { -+ return nil -+ } -+ value = int64(*o) -+ case *OptionalInt64: -+ if o == nil { -+ return nil -+ } -+ value = o.Value -+ default: -+ return nil -+ } -+ -+ return &OptionalInt64{ -+ Value: value, -+ } -+} -+ -+// Get returns nil if its value is unset or a pointer to the value itself. -+func (o *OptionalInt64) Get() *int64 { -+ if o == nil { -+ return nil -+ } -+ v := o.Value -+ return &v -+} -+ -+// UInt64 creates an Optional wrapper from its argument. -+func UInt64(v interface{}) *OptionalUInt64 { -+ var value uint64 -+ -+ switch o := v.(type) { -+ case int: -+ value = uint64(o) -+ case uint: -+ value = uint64(o) -+ case int64: -+ value = uint64(o) -+ case uint64: -+ value = o -+ case *int64: -+ if o == nil { -+ return nil -+ } -+ value = uint64(*o) -+ case *uint64: -+ if o == nil { -+ return nil -+ } -+ value = *o -+ case *OptionalUInt64: -+ if o == nil { -+ return nil -+ } -+ value = o.Value -+ default: -+ return nil -+ } -+ -+ return &OptionalUInt64{ -+ Value: value, -+ } -+} -+ -+// Get returns nil if its value is unset or a pointer to the value itself. -+func (o *OptionalUInt64) Get() *uint64 { -+ if o == nil { -+ return nil -+ } -+ v := o.Value -+ return &v -+} -+ -+// Bool creates an Optional wrapper from its argument. -+func Bool(v interface{}) *OptionalBool { -+ var value bool -+ -+ switch o := v.(type) { -+ case bool: -+ value = o -+ case *bool: -+ if o == nil { -+ return nil -+ } -+ value = *o -+ case *OptionalBool: -+ if o == nil { -+ return nil -+ } -+ value = o.Value -+ default: -+ return nil -+ } -+ -+ return &OptionalBool{ -+ Value: value, -+ } -+} -+ -+// Get returns nil if its value is unset or a pointer to the value itself. -+func (o *OptionalBool) Get() *bool { -+ if o == nil { -+ return nil -+ } -+ v := o.Value -+ return &v -+} -+ -+// FileMode creates an Optional wrapper from its argument. -+func FileMode(v interface{}) *OptionalFileMode { -+ var value os.FileMode -+ -+ switch o := v.(type) { -+ case *os.FileMode: -+ if o == nil { -+ return nil -+ } -+ value = *o -+ case os.FileMode: -+ value = o -+ case *OptionalFileMode: -+ if o == nil { -+ return nil -+ } -+ value = os.FileMode(o.Value) -+ case uint32: -+ value = os.FileMode(o) -+ default: -+ return nil -+ } -+ -+ return &OptionalFileMode{ -+ Value: uint32(value), -+ } -+} -+ -+// Get returns nil if its value is unset or a pointer to the value itself. -+func (o *OptionalFileMode) Get() *os.FileMode { -+ if o == nil { -+ return nil -+ } -+ v := os.FileMode(o.Value) -+ return &v -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/plugin.go b/vendor/github.com/containerd/nri/pkg/api/plugin.go -new file mode 100755 -index 0000000..c4fe8fc ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/plugin.go -@@ -0,0 +1,58 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ "fmt" -+ "strings" -+) -+ -+const ( -+ // DefaultSocketPath is the default socket path for external plugins. -+ DefaultSocketPath = "/var/run/nri/nri.sock" -+ // PluginSocketEnvVar is used to inform plugins about pre-connected sockets. -+ PluginSocketEnvVar = "NRI_PLUGIN_SOCKET" -+ // PluginNameEnvVar is used to inform NRI-launched plugins about their name. -+ PluginNameEnvVar = "NRI_PLUGIN_NAME" -+ // PluginIdxEnvVar is used to inform NRI-launched plugins about their ID. -+ PluginIdxEnvVar = "NRI_PLUGIN_IDX" -+) -+ -+// ParsePluginName parses the (file)name of a plugin into an index and a base. -+func ParsePluginName(name string) (string, string, error) { -+ split := strings.SplitN(name, "-", 2) -+ if len(split) < 2 { -+ return "", "", fmt.Errorf("invalid plugin name %q, idx-pluginname expected", name) -+ } -+ -+ if err := CheckPluginIndex(split[0]); err != nil { -+ return "", "", err -+ } -+ -+ return split[0], split[1], nil -+} -+ -+// CheckPluginIndex checks the validity of a plugin index. -+func CheckPluginIndex(idx string) error { -+ if len(idx) != 2 { -+ return fmt.Errorf("invalid plugin index %q, must be 2 digits", idx) -+ } -+ if !('0' <= idx[0] && idx[0] <= '9') || !('0' <= idx[1] && idx[1] <= '9') { -+ return fmt.Errorf("invalid plugin index %q (not [0-9][0-9])", idx) -+ } -+ return nil -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/resources.go b/vendor/github.com/containerd/nri/pkg/api/resources.go -new file mode 100755 -index 0000000..41acddd ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/resources.go -@@ -0,0 +1,233 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+import ( -+ rspec "github.com/opencontainers/runtime-spec/specs-go" -+ cri "k8s.io/cri-api/pkg/apis/runtime/v1" -+) -+ -+// FromOCILinuxResources returns resources from an OCI runtime Spec. -+func FromOCILinuxResources(o *rspec.LinuxResources, ann map[string]string) *LinuxResources { -+ if o == nil { -+ return nil -+ } -+ l := &LinuxResources{} -+ if m := o.Memory; m != nil { -+ l.Memory = &LinuxMemory{ -+ Limit: Int64(m.Limit), -+ Reservation: Int64(m.Reservation), -+ Swap: Int64(m.Swap), -+ Kernel: Int64(m.Kernel), -+ KernelTcp: Int64(m.KernelTCP), -+ Swappiness: UInt64(m.Swappiness), -+ DisableOomKiller: Bool(m.DisableOOMKiller), -+ UseHierarchy: Bool(m.UseHierarchy), -+ } -+ } -+ if c := o.CPU; c != nil { -+ l.Cpu = &LinuxCPU{ -+ Shares: UInt64(c.Shares), -+ Quota: Int64(c.Quota), -+ Period: UInt64(c.Period), -+ RealtimeRuntime: Int64(c.RealtimeRuntime), -+ RealtimePeriod: UInt64(c.RealtimePeriod), -+ Cpus: c.Cpus, -+ Mems: c.Mems, -+ } -+ } -+ for _, h := range o.HugepageLimits { -+ l.HugepageLimits = append(l.HugepageLimits, &HugepageLimit{ -+ PageSize: h.Pagesize, -+ Limit: h.Limit, -+ }) -+ } -+ for _, d := range o.Devices { -+ l.Devices = append(l.Devices, &LinuxDeviceCgroup{ -+ Allow: d.Allow, -+ Type: d.Type, -+ Major: Int64(d.Major), -+ Minor: Int64(d.Minor), -+ Access: d.Access, -+ }) -+ } -+ return l -+} -+ -+func FromCRILinuxResources(c *cri.LinuxContainerResources) *LinuxResources { -+ if c == nil { -+ return nil -+ } -+ shares, quota, period := uint64(c.CpuShares), c.CpuQuota, uint64(c.CpuPeriod) -+ r := &LinuxResources{ -+ Cpu: &LinuxCPU{ -+ Shares: UInt64(&shares), -+ Quota: Int64("a), -+ Period: UInt64(&period), -+ Cpus: c.CpusetCpus, -+ Mems: c.CpusetMems, -+ }, -+ Memory: &LinuxMemory{ -+ Limit: Int64(&c.MemoryLimitInBytes), -+ }, -+ } -+ for _, l := range c.HugepageLimits { -+ r.HugepageLimits = append(r.HugepageLimits, -+ &HugepageLimit{ -+ PageSize: l.PageSize, -+ Limit: l.Limit, -+ }) -+ } -+ return r -+} -+ -+// ToOCI returns resources for an OCI runtime Spec. -+func (r *LinuxResources) ToOCI() *rspec.LinuxResources { -+ if r == nil { -+ return nil -+ } -+ o := &rspec.LinuxResources{ -+ CPU: &rspec.LinuxCPU{}, -+ Memory: &rspec.LinuxMemory{}, -+ } -+ if r.Memory != nil { -+ o.Memory = &rspec.LinuxMemory{ -+ Limit: r.Memory.Limit.Get(), -+ Reservation: r.Memory.Reservation.Get(), -+ Swap: r.Memory.Swap.Get(), -+ Kernel: r.Memory.Kernel.Get(), -+ KernelTCP: r.Memory.KernelTcp.Get(), -+ Swappiness: r.Memory.Swappiness.Get(), -+ DisableOOMKiller: r.Memory.DisableOomKiller.Get(), -+ UseHierarchy: r.Memory.UseHierarchy.Get(), -+ } -+ } -+ if r.Cpu != nil { -+ o.CPU = &rspec.LinuxCPU{ -+ Shares: r.Cpu.Shares.Get(), -+ Quota: r.Cpu.Quota.Get(), -+ Period: r.Cpu.Period.Get(), -+ RealtimeRuntime: r.Cpu.RealtimeRuntime.Get(), -+ RealtimePeriod: r.Cpu.RealtimePeriod.Get(), -+ Cpus: r.Cpu.Cpus, -+ Mems: r.Cpu.Mems, -+ } -+ } -+ for _, l := range r.HugepageLimits { -+ o.HugepageLimits = append(o.HugepageLimits, rspec.LinuxHugepageLimit{ -+ Pagesize: l.PageSize, -+ Limit: l.Limit, -+ }) -+ } -+ if len(r.Unified) != 0 { -+ o.Unified = make(map[string]string) -+ for k, v := range r.Unified { -+ o.Unified[k] = v -+ } -+ } -+ for _, d := range r.Devices { -+ o.Devices = append(o.Devices, rspec.LinuxDeviceCgroup{ -+ Allow: d.Allow, -+ Type: d.Type, -+ Major: d.Major.Get(), -+ Minor: d.Minor.Get(), -+ Access: d.Access, -+ }) -+ } -+ -+ return o -+} -+ -+// ToCRI returns resources for CRI. -+func (r *LinuxResources) ToCRI(oomScoreAdj int64) *cri.LinuxContainerResources { -+ if r == nil { -+ return nil -+ } -+ o := &cri.LinuxContainerResources{} -+ if r.Memory != nil { -+ o.MemoryLimitInBytes = r.Memory.GetLimit().GetValue() -+ o.OomScoreAdj = oomScoreAdj -+ } -+ if r.Cpu != nil { -+ o.CpuShares = int64(r.Cpu.GetShares().GetValue()) -+ o.CpuPeriod = int64(r.Cpu.GetPeriod().GetValue()) -+ o.CpuQuota = r.Cpu.GetQuota().GetValue() -+ o.CpusetCpus = r.Cpu.Cpus -+ o.CpusetMems = r.Cpu.Mems -+ } -+ for _, l := range r.HugepageLimits { -+ o.HugepageLimits = append(o.HugepageLimits, &cri.HugepageLimit{ -+ PageSize: l.PageSize, -+ Limit: l.Limit, -+ }) -+ } -+ if len(r.Unified) != 0 { -+ o.Unified = make(map[string]string) -+ for k, v := range r.Unified { -+ o.Unified[k] = v -+ } -+ } -+ -+ return o -+} -+ -+// Copy creates a copy of the resources. -+func (r *LinuxResources) Copy() *LinuxResources { -+ if r == nil { -+ return nil -+ } -+ o := &LinuxResources{} -+ if r.Memory != nil { -+ o.Memory = &LinuxMemory{ -+ Limit: Int64(r.Memory.GetLimit()), -+ Reservation: Int64(r.Memory.GetReservation()), -+ Swap: Int64(r.Memory.GetSwap()), -+ Kernel: Int64(r.Memory.GetKernel()), -+ KernelTcp: Int64(r.Memory.GetKernelTcp()), -+ Swappiness: UInt64(r.Memory.GetSwappiness()), -+ DisableOomKiller: Bool(r.Memory.GetDisableOomKiller()), -+ UseHierarchy: Bool(r.Memory.GetUseHierarchy()), -+ } -+ } -+ if r.Cpu != nil { -+ o.Cpu = &LinuxCPU{ -+ Shares: UInt64(r.Cpu.GetShares()), -+ Quota: Int64(r.Cpu.GetQuota()), -+ Period: UInt64(r.Cpu.GetPeriod()), -+ RealtimeRuntime: Int64(r.Cpu.GetRealtimeRuntime()), -+ RealtimePeriod: UInt64(r.Cpu.GetRealtimePeriod()), -+ Cpus: r.Cpu.GetCpus(), -+ Mems: r.Cpu.GetMems(), -+ } -+ } -+ for _, l := range r.HugepageLimits { -+ o.HugepageLimits = append(o.HugepageLimits, &HugepageLimit{ -+ PageSize: l.PageSize, -+ Limit: l.Limit, -+ }) -+ } -+ if len(r.Unified) != 0 { -+ o.Unified = make(map[string]string) -+ for k, v := range r.Unified { -+ o.Unified[k] = v -+ } -+ } -+ o.BlockioClass = String(r.BlockioClass) -+ o.RdtClass = String(r.RdtClass) -+ -+ return o -+} -diff --git a/vendor/github.com/containerd/nri/pkg/api/update.go b/vendor/github.com/containerd/nri/pkg/api/update.go -new file mode 100755 -index 0000000..9bfe1bf ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/api/update.go -@@ -0,0 +1,186 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package api -+ -+//nolint -+// SetContainerId sets the id of the container to update. -+func (u *ContainerUpdate) SetContainerId(id string) { -+ u.ContainerId = id -+} -+ -+// SetLinuxMemoryLimit records setting the memory limit for a container. -+func (u *ContainerUpdate) SetLinuxMemoryLimit(value int64) { -+ u.initLinuxResourcesMemory() -+ u.Linux.Resources.Memory.Limit = Int64(value) -+} -+ -+// SetLinuxMemoryReservation records setting the memory reservation for a container. -+func (u *ContainerUpdate) SetLinuxMemoryReservation(value int64) { -+ u.initLinuxResourcesMemory() -+ u.Linux.Resources.Memory.Reservation = Int64(value) -+} -+ -+// SetLinuxMemorySwap records records setting the memory swap limit for a container. -+func (u *ContainerUpdate) SetLinuxMemorySwap(value int64) { -+ u.initLinuxResourcesMemory() -+ u.Linux.Resources.Memory.Swap = Int64(value) -+} -+ -+// SetLinuxMemoryKernel records setting the memory kernel limit for a container. -+func (u *ContainerUpdate) SetLinuxMemoryKernel(value int64) { -+ u.initLinuxResourcesMemory() -+ u.Linux.Resources.Memory.Kernel = Int64(value) -+} -+ -+// SetLinuxMemoryKernelTCP records setting the memory kernel TCP limit for a container. -+func (u *ContainerUpdate) SetLinuxMemoryKernelTCP(value int64) { -+ u.initLinuxResourcesMemory() -+ u.Linux.Resources.Memory.KernelTcp = Int64(value) -+} -+ -+// SetLinuxMemorySwappiness records setting the memory swappiness for a container. -+func (u *ContainerUpdate) SetLinuxMemorySwappiness(value uint64) { -+ u.initLinuxResourcesMemory() -+ u.Linux.Resources.Memory.Swappiness = UInt64(value) -+} -+ -+// SetLinuxMemoryDisableOomKiller records disabling the OOM killer for a container. -+func (u *ContainerUpdate) SetLinuxMemoryDisableOomKiller() { -+ u.initLinuxResourcesMemory() -+ u.Linux.Resources.Memory.DisableOomKiller = Bool(true) -+} -+ -+// SetLinuxMemoryUseHierarchy records enabling hierarchical memory accounting for a container. -+func (u *ContainerUpdate) SetLinuxMemoryUseHierarchy() { -+ u.initLinuxResourcesMemory() -+ u.Linux.Resources.Memory.UseHierarchy = Bool(true) -+} -+ -+// SetLinuxCPUShares records setting the scheduler's CPU shares for a container. -+func (u *ContainerUpdate) SetLinuxCPUShares(value uint64) { -+ u.initLinuxResourcesCPU() -+ u.Linux.Resources.Cpu.Shares = UInt64(value) -+} -+ -+// SetLinuxCPUQuota records setting the scheduler's CPU quota for a container. -+func (u *ContainerUpdate) SetLinuxCPUQuota(value int64) { -+ u.initLinuxResourcesCPU() -+ u.Linux.Resources.Cpu.Quota = Int64(value) -+} -+ -+// SetLinuxCPUPeriod records setting the scheduler's CPU period for a container. -+func (u *ContainerUpdate) SetLinuxCPUPeriod(value int64) { -+ u.initLinuxResourcesCPU() -+ u.Linux.Resources.Cpu.Period = UInt64(value) -+} -+ -+// SetLinuxCPURealtimeRuntime records setting the scheduler's realtime runtime for a container. -+func (u *ContainerUpdate) SetLinuxCPURealtimeRuntime(value int64) { -+ u.initLinuxResourcesCPU() -+ u.Linux.Resources.Cpu.RealtimeRuntime = Int64(value) -+} -+ -+// SetLinuxCPURealtimePeriod records setting the scheduler's realtime period for a container. -+func (u *ContainerUpdate) SetLinuxCPURealtimePeriod(value uint64) { -+ u.initLinuxResourcesCPU() -+ u.Linux.Resources.Cpu.RealtimePeriod = UInt64(value) -+} -+ -+// SetLinuxCPUSetCPUs records setting the cpuset CPUs for a container. -+func (u *ContainerUpdate) SetLinuxCPUSetCPUs(value string) { -+ u.initLinuxResourcesCPU() -+ u.Linux.Resources.Cpu.Cpus = value -+} -+ -+// SetLinuxCPUSetMems records setting the cpuset memory for a container. -+func (u *ContainerUpdate) SetLinuxCPUSetMems(value string) { -+ u.initLinuxResourcesCPU() -+ u.Linux.Resources.Cpu.Mems = value -+} -+ -+// AddLinuxHugepageLimit records adding a hugepage limit for a container. -+func (u *ContainerUpdate) AddLinuxHugepageLimit(pageSize string, value uint64) { -+ u.initLinuxResources() -+ u.Linux.Resources.HugepageLimits = append(u.Linux.Resources.HugepageLimits, -+ &HugepageLimit{ -+ PageSize: pageSize, -+ Limit: value, -+ }) -+} -+ -+// SetLinuxBlockIOClass records setting the Block I/O class for a container. -+func (u *ContainerUpdate) SetLinuxBlockIOClass(value string) { -+ u.initLinuxResources() -+ u.Linux.Resources.BlockioClass = String(value) -+} -+ -+// SetLinuxRDTClass records setting the RDT class for a container. -+func (u *ContainerUpdate) SetLinuxRDTClass(value string) { -+ u.initLinuxResources() -+ u.Linux.Resources.RdtClass = String(value) -+} -+ -+// AddLinuxUnified sets a cgroupv2 unified resource. -+func (u *ContainerUpdate) AddLinuxUnified(key, value string) { -+ u.initLinuxResourcesUnified() -+ u.Linux.Resources.Unified[key] = value -+} -+ -+// SetIgnoreFailure marks an Update as ignored for failures. -+// Such updates will not prevent the related container operation -+// from succeeding if the update fails. -+func (u *ContainerUpdate) SetIgnoreFailure() { -+ u.IgnoreFailure = true -+} -+ -+// -+// Initializing a container update. -+// -+ -+func (u *ContainerUpdate) initLinux() { -+ if u.Linux == nil { -+ u.Linux = &LinuxContainerUpdate{} -+ } -+} -+ -+func (u *ContainerUpdate) initLinuxResources() { -+ u.initLinux() -+ if u.Linux.Resources == nil { -+ u.Linux.Resources = &LinuxResources{} -+ } -+} -+ -+func (u *ContainerUpdate) initLinuxResourcesMemory() { -+ u.initLinuxResources() -+ if u.Linux.Resources.Memory == nil { -+ u.Linux.Resources.Memory = &LinuxMemory{} -+ } -+} -+ -+func (u *ContainerUpdate) initLinuxResourcesCPU() { -+ u.initLinuxResources() -+ if u.Linux.Resources.Cpu == nil { -+ u.Linux.Resources.Cpu = &LinuxCPU{} -+ } -+} -+ -+func (u *ContainerUpdate) initLinuxResourcesUnified() { -+ u.initLinuxResources() -+ if u.Linux.Resources.Unified == nil { -+ u.Linux.Resources.Unified = make(map[string]string) -+ } -+} -diff --git a/vendor/github.com/containerd/nri/pkg/log/log.go b/vendor/github.com/containerd/nri/pkg/log/log.go -new file mode 100755 -index 0000000..91337b5 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/log/log.go -@@ -0,0 +1,87 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package log -+ -+import ( -+ "context" -+ -+ "github.com/sirupsen/logrus" -+) -+ -+var ( -+ log Logger = &fallbackLogger{} -+) -+ -+// Logger is the interface NRI uses for logging. -+type Logger interface { -+ Debugf(ctx context.Context, format string, args ...interface{}) -+ Infof(ctx context.Context, format string, args ...interface{}) -+ Warnf(ctx context.Context, format string, args ...interface{}) -+ Errorf(ctx context.Context, format string, args ...interface{}) -+} -+ -+// Set the logger used by NRI. -+func Set(l Logger) { -+ log = l -+} -+ -+// Get the logger used by NRI. -+func Get() Logger { -+ return log -+} -+ -+// Debugf logs a formatted debug message. -+func Debugf(ctx context.Context, format string, args ...interface{}) { -+ log.Debugf(ctx, format, args...) -+} -+ -+// Infof logs a formatted informational message. -+func Infof(ctx context.Context, format string, args ...interface{}) { -+ log.Infof(ctx, format, args...) -+} -+ -+// Warnf logs a formatted warning message. -+func Warnf(ctx context.Context, format string, args ...interface{}) { -+ log.Warnf(ctx, format, args...) -+} -+ -+// Errorf logs a formatted error message. -+func Errorf(ctx context.Context, format string, args ...interface{}) { -+ log.Errorf(ctx, format, args...) -+} -+ -+type fallbackLogger struct{} -+ -+// Debugf logs a formatted debug message. -+func (f *fallbackLogger) Debugf(ctx context.Context, format string, args ...interface{}) { -+ logrus.WithContext(ctx).Debugf(format, args...) -+} -+ -+// Infof logs a formatted informational message. -+func (f *fallbackLogger) Infof(ctx context.Context, format string, args ...interface{}) { -+ logrus.WithContext(ctx).Infof(format, args...) -+} -+ -+// Warnf logs a formatted warning message. -+func (f *fallbackLogger) Warnf(ctx context.Context, format string, args ...interface{}) { -+ logrus.WithContext(ctx).Warnf(format, args...) -+} -+ -+// Errorf logs a formatted error message. -+func (f *fallbackLogger) Errorf(ctx context.Context, format string, args ...interface{}) { -+ logrus.WithContext(ctx).Errorf(format, args...) -+} -diff --git a/vendor/github.com/containerd/nri/pkg/net/conn.go b/vendor/github.com/containerd/nri/pkg/net/conn.go -new file mode 100755 -index 0000000..db7d2bc ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/net/conn.go -@@ -0,0 +1,93 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package net -+ -+import ( -+ "fmt" -+ "io" -+ "net" -+ "os" -+ "strconv" -+ "sync" -+) -+ -+// NewFdConn creates a net.Conn for the given (socket) fd. -+func NewFdConn(fd int) (net.Conn, error) { -+ f := os.NewFile(uintptr(fd), "fd #"+strconv.Itoa(fd)) -+ -+ conn, err := net.FileConn(f) -+ if err != nil { -+ return nil, fmt.Errorf("failed to create net.Conn for fd #%d: %w", fd, err) -+ } -+ f.Close() -+ -+ return conn, nil -+} -+ -+// connListener wraps a pre-connected socket in a net.Listener. -+type connListener struct { -+ next chan net.Conn -+ conn net.Conn -+ addr net.Addr -+ lock sync.RWMutex // for Close() -+ closed bool -+} -+ -+// NewConnListener wraps an existing net.Conn in a net.Listener. -+// -+// The first call to Accept() on the listener will return the wrapped -+// connection. Subsequent calls to Accept() block until the listener -+// is closed, then return io.EOF. Close() closes the listener and the -+// wrapped connection. -+func NewConnListener(conn net.Conn) net.Listener { -+ next := make(chan net.Conn, 1) -+ next <- conn -+ -+ return &connListener{ -+ next: next, -+ conn: conn, -+ addr: conn.LocalAddr(), -+ } -+} -+ -+// Accept returns the wrapped connection when it is called the first -+// time. Later calls to Accept block until the listener is closed, then -+// return io.EOF. -+func (l *connListener) Accept() (net.Conn, error) { -+ conn := <-l.next -+ if conn == nil { -+ return nil, io.EOF -+ } -+ return conn, nil -+} -+ -+// Close closes the listener and the wrapped connection. -+func (l *connListener) Close() error { -+ l.lock.Lock() -+ defer l.lock.Unlock() -+ if l.closed { -+ return nil -+ } -+ close(l.next) -+ l.closed = true -+ return l.conn.Close() -+} -+ -+// Addr returns the local address of the wrapped connection. -+func (l *connListener) Addr() net.Addr { -+ return l.addr -+} -diff --git a/vendor/github.com/containerd/nri/pkg/net/multiplex/mux.go b/vendor/github.com/containerd/nri/pkg/net/multiplex/mux.go -new file mode 100755 -index 0000000..fcce69f ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/net/multiplex/mux.go -@@ -0,0 +1,444 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package multiplex -+ -+import ( -+ "encoding/binary" -+ "errors" -+ "fmt" -+ "io" -+ "net" -+ "sync" -+ "syscall" -+ "time" -+ -+ nrinet "github.com/containerd/nri/pkg/net" -+ "github.com/containerd/ttrpc" -+) -+ -+// Mux multiplexes several logical connections over a single net.Conn. -+// -+// Connections are identified within a Mux by ConnIDs which are simple -+// 32-bit unsigned integers. Opening a connection returns a net.Conn -+// corrponding to the ConnID. This can then be used to write and read -+// data through the connection with the Mux performing multiplexing -+// and demultiplexing of data. -+// -+// Writing to a connection is fully synchronous. The caller can safely -+// reuse the buffer once the call returns. Reading from a connection -+// returns the oldest demultiplexed buffer for the connection, blocking -+// if the connections incoming queue is empty. If any incoming queue is -+// ever overflown the underlying trunk and all multiplexed connections -+// are closed and an error is recorded. This error is later returned by -+// any subsequent read from any connection. All connections of the Mux -+// have the same fixed incoming queue length which can be configured -+// using the WithReadQueueLength Option during Mux creation. -+// -+// The Mux interface also provides functions that emulate net.Dial and -+// net.Listen for a connection. Usually these can be used for passing -+// multiplexed connections to packages that insist to Dial or Accept -+// themselves for connection establishment. -+// -+// Note that opening a connection is a virtual operation in the sense -+// that it has no effects outside the Mux. It is performed without any -+// signalling or other communication. It merely acquires the net.Conn -+// corresponding to the connection and blindly assumes that the same -+// ConnID is or will be opened at the other end of the Mux. -+type Mux interface { -+ // Open the connection for the given ConnID. -+ Open(ConnID) (net.Conn, error) -+ -+ // Close the Mux and all connections associated with it. -+ Close() error -+ -+ // Dialer returns a net.Dial-like function for the connection. -+ // -+ // Calling the returned function (with arguments) will return a -+ // net.Conn for the connection. -+ Dialer(ConnID) func(string, string) (net.Conn, error) -+ -+ // Listener returns a net.Listener for the connection. The first -+ // call to Accept() on the listener will return a net.Conn for the -+ // connection. Subsequent calls to Accept() will block until the -+ // connection is closed then return io.EOF. -+ Listen(ConnID) (net.Listener, error) -+ -+ // Trunk returns the trunk connection for the Mux. -+ Trunk() net.Conn -+ -+ // Unblock unblocks the Mux reader. -+ Unblock() -+} -+ -+// ConnID uniquely identifies a logical connection within a Mux. -+type ConnID uint32 -+ -+const ( -+ // ConnID 0 is reserved for future use. -+ reservedConnID ConnID = iota -+ // LowestConnID is the lowest externally usable ConnID. -+ LowestConnID -+) -+ -+// Option to apply to a Mux. -+type Option func(*mux) -+ -+// WithBlockedRead causes the Mux to be blocked for reading until gets Unblock()'ed. -+func WithBlockedRead() Option { -+ return func(m *mux) { -+ if m.blockC == nil { -+ m.blockC = make(chan struct{}) -+ } -+ } -+} -+ -+// WithReadQueueLength overrides the default read queue size. -+func WithReadQueueLength(length int) Option { -+ return func(m *mux) { -+ m.qlen = length -+ } -+} -+ -+// Multiplex returns a multiplexer for the given connection. -+func Multiplex(trunk net.Conn, options ...Option) Mux { -+ return newMux(trunk, options...) -+} -+ -+// mux is our implementation of Mux. -+type mux struct { -+ trunk net.Conn -+ writeLock sync.Mutex -+ conns map[ConnID]*conn -+ connLock sync.RWMutex -+ qlen int -+ errOnce sync.Once -+ err error -+ unblkOnce sync.Once -+ blockC chan struct{} -+ closeOnce sync.Once -+ doneC chan struct{} -+} -+ -+const ( -+ // default read queue length for a single connection -+ readQueueLen = 256 -+ // length of frame header: 4-byte ConnID, 4-byte payload length -+ headerLen = 8 -+ // max. allowed payload size -+ maxPayloadSize = 1 << 24 -+) -+ -+// conn represents a single multiplexed connection. -+type conn struct { -+ id ConnID -+ mux *mux -+ readC chan []byte -+ closeOnce sync.Once -+ doneC chan error -+} -+ -+func newMux(trunk net.Conn, options ...Option) *mux { -+ m := &mux{ -+ trunk: trunk, -+ conns: make(map[ConnID]*conn), -+ qlen: readQueueLen, -+ doneC: make(chan struct{}), -+ } -+ -+ for _, o := range options { -+ o(m) -+ } -+ -+ if m.blockC == nil { -+ WithBlockedRead()(m) -+ m.Unblock() -+ } -+ -+ go m.reader() -+ -+ return m -+} -+ -+func (m *mux) Trunk() net.Conn { -+ return m.trunk -+} -+ -+func (m *mux) Unblock() { -+ m.unblkOnce.Do(func() { -+ close(m.blockC) -+ }) -+} -+ -+func (m *mux) Open(id ConnID) (net.Conn, error) { -+ if id == reservedConnID { -+ return nil, fmt.Errorf("ConnID %d is reserved", id) -+ } -+ -+ m.connLock.Lock() -+ defer m.connLock.Unlock() -+ -+ c, ok := m.conns[id] -+ if !ok { -+ c = &conn{ -+ id: id, -+ mux: m, -+ doneC: make(chan error, 1), -+ readC: make(chan []byte, m.qlen), -+ } -+ m.conns[id] = c -+ } -+ -+ return c, nil -+} -+ -+func (m *mux) Close() error { -+ m.closeOnce.Do(func() { -+ m.connLock.Lock() -+ defer m.connLock.Unlock() -+ for _, conn := range m.conns { -+ conn.close() -+ } -+ close(m.doneC) -+ m.trunk.Close() -+ }) -+ -+ return nil -+} -+ -+func (m *mux) Dialer(id ConnID) func(string, string) (net.Conn, error) { -+ return func(string, string) (net.Conn, error) { -+ return m.Open(id) -+ } -+} -+ -+func (m *mux) Listen(id ConnID) (net.Listener, error) { -+ conn, err := m.Open(id) -+ if err != nil { -+ return nil, err -+ } -+ return nrinet.NewConnListener(conn), nil -+} -+ -+func (m *mux) write(id ConnID, buf []byte) (int, error) { -+ var hdr [headerLen]byte -+ -+ if len(buf) > maxPayloadSize { -+ return 0, syscall.EMSGSIZE -+ } -+ -+ binary.BigEndian.PutUint32(hdr[0:4], uint32(id)) -+ binary.BigEndian.PutUint32(hdr[4:8], uint32(len(buf))) -+ -+ m.writeLock.Lock() -+ defer m.writeLock.Unlock() -+ -+ n, err := m.trunk.Write(hdr[:]) -+ if err != nil { -+ err = fmt.Errorf("failed to write header to trunk: %w", err) -+ if n != 0 { -+ m.setError(err) -+ m.Close() -+ } -+ return 0, err -+ } -+ -+ n, err = m.trunk.Write(buf) -+ if err != nil { -+ err = fmt.Errorf("failed to write payload to trunk: %w", err) -+ if n != 0 { -+ m.setError(err) -+ m.Close() -+ } -+ } -+ -+ return n, err -+} -+ -+func (m *mux) reader() { -+ var ( -+ hdr [headerLen]byte -+ cid uint32 -+ cnt uint32 -+ buf []byte -+ err error -+ ) -+ -+ <-m.blockC -+ -+ for { -+ select { -+ case <-m.doneC: -+ return -+ default: -+ } -+ -+ _, err = io.ReadFull(m.trunk, hdr[:]) -+ if err != nil { -+ switch { -+ case errors.Is(err, io.EOF): -+ case errors.Is(err, ttrpc.ErrClosed): -+ err = io.EOF -+ case errors.Is(err, ttrpc.ErrServerClosed): -+ err = io.EOF -+ case errors.Is(err, net.ErrClosed): -+ err = io.EOF -+ default: -+ err = fmt.Errorf("failed to read header from trunk: %w", err) -+ } -+ m.setError(err) -+ m.Close() -+ return -+ } -+ -+ cid = binary.BigEndian.Uint32(hdr[0:4]) -+ cnt = binary.BigEndian.Uint32(hdr[4:8]) -+ buf = make([]byte, int(cnt)) -+ -+ _, err = io.ReadFull(m.trunk, buf) -+ if err != nil { -+ switch { -+ case errors.Is(err, io.EOF): -+ case errors.Is(err, ttrpc.ErrClosed): -+ err = io.EOF -+ case errors.Is(err, ttrpc.ErrServerClosed): -+ err = io.EOF -+ case errors.Is(err, net.ErrClosed): -+ err = io.EOF -+ default: -+ err = fmt.Errorf("failed to read payload from trunk: %w", err) -+ } -+ m.setError(err) -+ m.Close() -+ return -+ } -+ -+ m.connLock.RLock() -+ conn, ok := m.conns[ConnID(cid)] -+ m.connLock.RUnlock() -+ if ok { -+ select { -+ case conn.readC <- buf: -+ default: -+ m.setError(errors.New("failed to queue payload for reading")) -+ m.Close() -+ return -+ } -+ } -+ } -+} -+ -+func (m *mux) setError(err error) { -+ m.errOnce.Do(func() { -+ m.err = err -+ }) -+} -+ -+// nolint -+func (m *mux) error() error { -+ m.errOnce.Do(func() { -+ if m.err == nil { -+ m.err = io.EOF -+ } -+ }) -+ return m.err -+} -+ -+// -+// multiplexed connections -+// -+ -+// Reads reads the next message from the multiplexed connection. -+func (c *conn) Read(buf []byte) (int, error) { -+ var ( -+ msg []byte -+ err error -+ ok bool -+ ) -+ -+ select { -+ case err, ok = <-c.doneC: -+ if !ok || err == nil { -+ err = c.mux.error() -+ } -+ return 0, err -+ case msg, ok = <-c.readC: -+ if !ok { -+ return 0, c.mux.error() -+ } -+ if cap(buf) < len(msg) { -+ return 0, syscall.ENOMEM -+ } -+ } -+ -+ copy(buf, msg) -+ return len(msg), nil -+} -+ -+// Write writes the given data to the multiplexed connection. -+func (c *conn) Write(b []byte) (int, error) { -+ select { -+ case err := <-c.doneC: -+ if err == nil { -+ err = io.EOF -+ } -+ return 0, err -+ default: -+ } -+ return c.mux.write(c.id, b) -+} -+ -+// Close closes the multiplexed connection. -+func (c *conn) Close() error { -+ c.mux.connLock.Lock() -+ defer c.mux.connLock.Unlock() -+ if c.mux.conns[c.id] == c { -+ delete(c.mux.conns, c.id) -+ } -+ return c.close() -+} -+ -+func (c *conn) close() error { -+ c.closeOnce.Do(func() { -+ close(c.doneC) -+ }) -+ return nil -+} -+ -+// LocalAddr is the unimplemented stub for the corresponding net.Conn function. -+func (c *conn) LocalAddr() net.Addr { -+ return nil -+} -+ -+// RemoteAddr is the unimplemented stub for the corresponding net.Conn function. -+func (c *conn) RemoteAddr() net.Addr { -+ return nil -+} -+ -+// SetDeadline is the unimplemented stub for the corresponding net.Conn function. -+func (c *conn) SetDeadline(t time.Time) error { -+ return nil -+} -+ -+// SetReadDeadline is the unimplemented stub for the corresponding net.Conn function. -+func (c *conn) SetReadDeadline(t time.Time) error { -+ return nil -+} -+ -+// SetWriteDeadline is the unimplemented stub for the corresponding net.Conn function. -+func (c *conn) SetWriteDeadline(t time.Time) error { -+ return nil -+} -diff --git a/vendor/github.com/containerd/nri/pkg/net/multiplex/ttrpc.go b/vendor/github.com/containerd/nri/pkg/net/multiplex/ttrpc.go -new file mode 100755 -index 0000000..c600cb1 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/net/multiplex/ttrpc.go -@@ -0,0 +1,24 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package multiplex -+ -+const ( -+ // PluginServiceConn is the mux connection ID for NRI plugin services. -+ PluginServiceConn ConnID = iota + 1 -+ // RuntimeServiceConn is the mux connection ID for NRI runtime services. -+ RuntimeServiceConn -+) -diff --git a/vendor/github.com/containerd/nri/pkg/net/socketpair.go b/vendor/github.com/containerd/nri/pkg/net/socketpair.go -new file mode 100755 -index 0000000..620887d ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/net/socketpair.go -@@ -0,0 +1,93 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package net -+ -+import ( -+ "fmt" -+ "net" -+ "os" -+) -+ -+// SocketPair contains the os.File of a connected pair of sockets. -+type SocketPair struct { -+ local, peer *os.File -+} -+ -+// NewSocketPair returns a connected pair of sockets. -+func NewSocketPair() (SocketPair, error) { -+ fds, err := newSocketPairCLOEXEC() -+ if err != nil { -+ return SocketPair{nil, nil}, fmt.Errorf("failed to create socketpair: %w", err) -+ } -+ -+ filename := fmt.Sprintf("socketpair-#%d:%d", fds[0], fds[1]) -+ -+ return SocketPair{ -+ os.NewFile(uintptr(fds[0]), filename+"[0]"), -+ os.NewFile(uintptr(fds[1]), filename+"[1]"), -+ }, nil -+} -+ -+// LocalFile returns the local end of the socketpair as an *os.File. -+func (sp SocketPair) LocalFile() *os.File { -+ return sp.local -+} -+ -+// PeerFile returns the peer end of the socketpair as an *os.File. -+func (sp SocketPair) PeerFile() *os.File { -+ return sp.peer -+} -+ -+// LocalConn returns a net.Conn for the local end of the socketpair. -+// This closes LocalFile(). -+func (sp SocketPair) LocalConn() (net.Conn, error) { -+ file := sp.LocalFile() -+ defer file.Close() -+ conn, err := net.FileConn(file) -+ if err != nil { -+ return nil, fmt.Errorf("failed to create net.Conn for %s: %w", file.Name(), err) -+ } -+ return conn, nil -+} -+ -+// PeerConn returns a net.Conn for the peer end of the socketpair. -+// This closes PeerFile(). -+func (sp SocketPair) PeerConn() (net.Conn, error) { -+ file := sp.PeerFile() -+ defer file.Close() -+ conn, err := net.FileConn(file) -+ if err != nil { -+ return nil, fmt.Errorf("failed to create net.Conn for %s: %w", file.Name(), err) -+ } -+ return conn, nil -+} -+ -+// Close closes both ends of the socketpair. -+func (sp SocketPair) Close() { -+ sp.LocalClose() -+ sp.PeerClose() -+} -+ -+// LocalClose closes the local end of the socketpair. -+func (sp SocketPair) LocalClose() { -+ sp.local.Close() -+} -+ -+// PeerClose closes the peer end of the socketpair. -+func (sp SocketPair) PeerClose() { -+ sp.peer.Close() -+} -diff --git a/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_linux.go b/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_linux.go -new file mode 100755 -index 0000000..0ca83f6 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_linux.go -@@ -0,0 +1,27 @@ -+//go:build linux -+ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package net -+ -+import ( -+ "golang.org/x/sys/unix" -+) -+ -+func newSocketPairCLOEXEC() ([2]int, error) { -+ return unix.Socketpair(unix.AF_UNIX, unix.SOCK_STREAM|unix.SOCK_CLOEXEC, 0) -+} -diff --git a/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_unix.go b/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_unix.go -new file mode 100755 -index 0000000..ed3c2f9 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_unix.go -@@ -0,0 +1,38 @@ -+//go:build !linux && !windows -+ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package net -+ -+import ( -+ "syscall" -+ -+ "golang.org/x/sys/unix" -+) -+ -+func newSocketPairCLOEXEC() ([2]int, error) { -+ syscall.ForkLock.RLock() -+ defer syscall.ForkLock.RUnlock() -+ fds, err := unix.Socketpair(unix.AF_UNIX, unix.SOCK_STREAM, 0) -+ if err != nil { -+ return fds, err -+ } -+ unix.CloseOnExec(fds[0]) -+ unix.CloseOnExec(fds[1]) -+ -+ return fds, err -+} -diff --git a/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_windows.go b/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_windows.go -new file mode 100755 -index 0000000..033cf65 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/net/socketpair_cloexec_windows.go -@@ -0,0 +1,30 @@ -+//go:build windows -+ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package net -+ -+import ( -+ "errors" -+ -+ sys "golang.org/x/sys/windows" -+) -+ -+func newSocketPairCLOEXEC() ([2]sys.Handle, error) { -+ // when implementing do use WSA_FLAG_NO_HANDLE_INHERIT to avoid leaking FDs -+ return [2]sys.Handle{sys.InvalidHandle, sys.InvalidHandle}, errors.New("newSocketPairCLOEXEC unimplemented for windows") -+} -diff --git a/vendor/github.com/containerd/nri/pkg/stub/stub.go b/vendor/github.com/containerd/nri/pkg/stub/stub.go -new file mode 100755 -index 0000000..bfe66f1 ---- /dev/null -+++ b/vendor/github.com/containerd/nri/pkg/stub/stub.go -@@ -0,0 +1,779 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package stub -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ stdnet "net" -+ "os" -+ "path/filepath" -+ "strconv" -+ "sync" -+ "time" -+ -+ "github.com/containerd/nri/pkg/api" -+ nrilog "github.com/containerd/nri/pkg/log" -+ "github.com/containerd/nri/pkg/net" -+ "github.com/containerd/nri/pkg/net/multiplex" -+ "github.com/containerd/ttrpc" -+) -+ -+// Plugin can implement a number of interfaces related to Pod and Container -+// lifecycle events. No any single such inteface is mandatory, therefore the -+// Plugin interface itself is empty. Plugins are required to implement at -+// least one of these interfaces and this is verified during stub creation. -+// Trying to create a stub for a plugin violating this requirement will fail -+// with and error. -+type Plugin interface{} -+ -+// ConfigureInterface handles Configure API request. -+type ConfigureInterface interface { -+ // Configure the plugin with the given NRI-supplied configuration. -+ // If a non-zero EventMask is returned, the plugin will be subscribed -+ // to the corresponding. -+ Configure(ctx context.Context, config, runtime, version string) (api.EventMask, error) -+} -+ -+// SynchronizeInterface handles Synchronize API requests. -+type SynchronizeInterface interface { -+ // Synchronize the state of the plugin with the runtime. -+ // The plugin can request updates to containers in response. -+ Synchronize(context.Context, []*api.PodSandbox, []*api.Container) ([]*api.ContainerUpdate, error) -+} -+ -+// ShutdownInterface handles a Shutdown API request. -+type ShutdownInterface interface { -+ // Shutdown notifies the plugin about the runtime shutting down. -+ Shutdown(context.Context) -+} -+ -+// RunPodInterface handles RunPodSandbox API events. -+type RunPodInterface interface { -+ // RunPodSandbox relays a RunPodSandbox event to the plugin. -+ RunPodSandbox(context.Context, *api.PodSandbox) error -+} -+ -+// StopPodInterface handles StopPodSandbox API events. -+type StopPodInterface interface { -+ // StopPodSandbox relays a StopPodSandbox event to the plugin. -+ StopPodSandbox(context.Context, *api.PodSandbox) error -+} -+ -+// RemovePodInterface handles RemovePodSandbox API events. -+type RemovePodInterface interface { -+ // RemovePodSandbox relays a RemovePodSandbox event to the plugin. -+ RemovePodSandbox(context.Context, *api.PodSandbox) error -+} -+ -+// CreateContainerInterface handles CreateContainer API requests. -+type CreateContainerInterface interface { -+ // CreateContainer relays a CreateContainer request to the plugin. -+ // The plugin can request adjustments to the container being created -+ // and updates to other unstopped containers in response. -+ CreateContainer(context.Context, *api.PodSandbox, *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) -+} -+ -+// StartContainerInterface handles StartContainer API requests. -+type StartContainerInterface interface { -+ // StartContainer relays a StartContainer event to the plugin. -+ StartContainer(context.Context, *api.PodSandbox, *api.Container) error -+} -+ -+// UpdateContainerInterface handles UpdateContainer API requests. -+type UpdateContainerInterface interface { -+ // UpdateContainer relays an UpdateContainer request to the plugin. -+ // The plugin can request updates both to the container being updated -+ // (which then supersedes the original update) and to other unstopped -+ // containers in response. -+ UpdateContainer(context.Context, *api.PodSandbox, *api.Container, *api.LinuxResources) ([]*api.ContainerUpdate, error) -+} -+ -+// StopContainerInterface handles StopContainer API requests. -+type StopContainerInterface interface { -+ // StopContainer relays a StopContainer request to the plugin. -+ // The plugin can request updates to unstopped containers in response. -+ StopContainer(context.Context, *api.PodSandbox, *api.Container) ([]*api.ContainerUpdate, error) -+} -+ -+// RemoveContainerInterface handles RemoveContainer API events. -+type RemoveContainerInterface interface { -+ // RemoveContainer relays a RemoveContainer event to the plugin. -+ RemoveContainer(context.Context, *api.PodSandbox, *api.Container) error -+} -+ -+// PostCreateContainerInterface handles PostCreateContainer API events. -+type PostCreateContainerInterface interface { -+ // PostCreateContainer relays a PostCreateContainer event to the plugin. -+ PostCreateContainer(context.Context, *api.PodSandbox, *api.Container) error -+} -+ -+// PostStartContainerInterface handles PostStartContainer API events. -+type PostStartContainerInterface interface { -+ // PostStartContainer relays a PostStartContainer event to the plugin. -+ PostStartContainer(context.Context, *api.PodSandbox, *api.Container) error -+} -+ -+// PostUpdateContainerInterface handles PostUpdateContainer API events. -+type PostUpdateContainerInterface interface { -+ // PostUpdateContainer relays a PostUpdateContainer event to the plugin. -+ PostUpdateContainer(context.Context, *api.PodSandbox, *api.Container) error -+} -+ -+// Stub is the interface the stub provides for the plugin implementation. -+type Stub interface { -+ // Run the plugin. Starts the plugin then waits for an error or the plugin to stop -+ Run(context.Context) error -+ // Start the plugin. -+ Start(context.Context) error -+ // Stop the plugin. -+ Stop() -+ // Wait for the plugin to stop. -+ Wait() -+ -+ // UpdateContainer requests unsolicited updates to containers. -+ UpdateContainers([]*api.ContainerUpdate) ([]*api.ContainerUpdate, error) -+} -+ -+const ( -+ // Plugin registration timeout. -+ registrationTimeout = 2 * time.Second -+) -+ -+var ( -+ // Logger for messages generated internally by the stub itself. -+ log = nrilog.Get() -+ -+ // Used instead of a nil Context in logging. -+ noCtx = context.TODO() -+ -+ // ErrNoService indicates that the stub has no runtime service/connection, -+ // for instance by UpdateContainers on a stub which has not been started. -+ ErrNoService = errors.New("stub: no service/connection") -+) -+ -+// EventMask holds a mask of events for plugin subscription. -+type EventMask = api.EventMask -+ -+// Option to apply to a plugin during its creation. -+type Option func(*stub) error -+ -+// WithOnClose sets a notification function to call if the ttRPC connection goes down. -+func WithOnClose(onClose func()) Option { -+ return func(s *stub) error { -+ s.onClose = onClose -+ return nil -+ } -+} -+ -+// WithPluginName sets the name to use in plugin registration. -+func WithPluginName(name string) Option { -+ return func(s *stub) error { -+ if s.name != "" { -+ return fmt.Errorf("plugin name already set (%q)", s.name) -+ } -+ s.name = name -+ return nil -+ } -+} -+ -+// WithPluginIdx sets the index to use in plugin registration. -+func WithPluginIdx(idx string) Option { -+ return func(s *stub) error { -+ if s.idx != "" { -+ return fmt.Errorf("plugin ID already set (%q)", s.idx) -+ } -+ s.idx = idx -+ return nil -+ } -+} -+ -+// WithSocketPath sets the NRI socket path to connect to. -+func WithSocketPath(path string) Option { -+ return func(s *stub) error { -+ s.socketPath = path -+ return nil -+ } -+} -+ -+// WithConnection sets an existing NRI connection to use. -+func WithConnection(conn stdnet.Conn) Option { -+ return func(s *stub) error { -+ s.conn = conn -+ return nil -+ } -+} -+ -+// WithDialer sets the dialer to use. -+func WithDialer(d func(string) (stdnet.Conn, error)) Option { -+ return func(s *stub) error { -+ s.dialer = d -+ return nil -+ } -+} -+ -+// WithTTRPCOptions sets extra client and server options to use for ttrpc . -+func WithTTRPCOptions(clientOpts []ttrpc.ClientOpts, serverOpts []ttrpc.ServerOpt) Option { -+ return func(s *stub) error { -+ s.clientOpts = append(s.clientOpts, clientOpts...) -+ s.serverOpts = append(s.serverOpts, serverOpts...) -+ return nil -+ } -+} -+ -+// stub implements Stub. -+type stub struct { -+ sync.Mutex -+ plugin interface{} -+ handlers handlers -+ events api.EventMask -+ name string -+ idx string -+ socketPath string -+ dialer func(string) (stdnet.Conn, error) -+ conn stdnet.Conn -+ onClose func() -+ serverOpts []ttrpc.ServerOpt -+ clientOpts []ttrpc.ClientOpts -+ rpcm multiplex.Mux -+ rpcl stdnet.Listener -+ rpcs *ttrpc.Server -+ rpcc *ttrpc.Client -+ runtime api.RuntimeService -+ closeOnce sync.Once -+ started bool -+ doneC chan struct{} -+ srvErrC chan error -+ cfgErrC chan error -+} -+ -+// Handlers for NRI plugin event and request. -+type handlers struct { -+ Configure func(context.Context, string, string, string) (api.EventMask, error) -+ Synchronize func(context.Context, []*api.PodSandbox, []*api.Container) ([]*api.ContainerUpdate, error) -+ Shutdown func(context.Context) -+ RunPodSandbox func(context.Context, *api.PodSandbox) error -+ StopPodSandbox func(context.Context, *api.PodSandbox) error -+ RemovePodSandbox func(context.Context, *api.PodSandbox) error -+ CreateContainer func(context.Context, *api.PodSandbox, *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) -+ StartContainer func(context.Context, *api.PodSandbox, *api.Container) error -+ UpdateContainer func(context.Context, *api.PodSandbox, *api.Container, *api.LinuxResources) ([]*api.ContainerUpdate, error) -+ StopContainer func(context.Context, *api.PodSandbox, *api.Container) ([]*api.ContainerUpdate, error) -+ RemoveContainer func(context.Context, *api.PodSandbox, *api.Container) error -+ PostCreateContainer func(context.Context, *api.PodSandbox, *api.Container) error -+ PostStartContainer func(context.Context, *api.PodSandbox, *api.Container) error -+ PostUpdateContainer func(context.Context, *api.PodSandbox, *api.Container) error -+} -+ -+// New creates a stub with the given plugin and options. -+func New(p interface{}, opts ...Option) (Stub, error) { -+ stub := &stub{ -+ plugin: p, -+ name: os.Getenv(api.PluginNameEnvVar), -+ idx: os.Getenv(api.PluginIdxEnvVar), -+ socketPath: api.DefaultSocketPath, -+ dialer: func(p string) (stdnet.Conn, error) { return stdnet.Dial("unix", p) }, -+ doneC: make(chan struct{}), -+ } -+ -+ for _, o := range opts { -+ if err := o(stub); err != nil { -+ return nil, err -+ } -+ } -+ -+ if err := stub.setupHandlers(); err != nil { -+ return nil, err -+ } -+ -+ if err := stub.ensureIdentity(); err != nil { -+ return nil, err -+ } -+ -+ log.Infof(noCtx, "Created plugin %s (%s, handles %s)", stub.Name(), -+ filepath.Base(os.Args[0]), stub.events.PrettyString()) -+ -+ return stub, nil -+} -+ -+// Start event processing, register to NRI and wait for getting configured. -+func (stub *stub) Start(ctx context.Context) (retErr error) { -+ stub.Lock() -+ defer stub.Unlock() -+ -+ if stub.started { -+ return fmt.Errorf("stub already started") -+ } -+ stub.started = true -+ -+ err := stub.connect() -+ if err != nil { -+ return err -+ } -+ -+ rpcm := multiplex.Multiplex(stub.conn) -+ defer func() { -+ if retErr != nil { -+ rpcm.Close() -+ stub.rpcm = nil -+ } -+ }() -+ -+ rpcl, err := rpcm.Listen(multiplex.PluginServiceConn) -+ if err != nil { -+ return err -+ } -+ defer func() { -+ if retErr != nil { -+ rpcl.Close() -+ stub.rpcl = nil -+ } -+ }() -+ -+ rpcs, err := ttrpc.NewServer(stub.serverOpts...) -+ if err != nil { -+ return fmt.Errorf("failed to create ttrpc server: %w", err) -+ } -+ defer func() { -+ if retErr != nil { -+ rpcs.Close() -+ stub.rpcs = nil -+ } -+ }() -+ -+ api.RegisterPluginService(rpcs, stub) -+ -+ conn, err := rpcm.Open(multiplex.RuntimeServiceConn) -+ if err != nil { -+ return fmt.Errorf("failed to multiplex ttrpc client connection: %w", err) -+ } -+ -+ clientOpts := []ttrpc.ClientOpts{ -+ ttrpc.WithOnClose(func() { -+ stub.connClosed() -+ }), -+ } -+ rpcc := ttrpc.NewClient(conn, append(clientOpts, stub.clientOpts...)...) -+ defer func() { -+ if retErr != nil { -+ rpcc.Close() -+ stub.rpcc = nil -+ } -+ }() -+ -+ stub.srvErrC = make(chan error, 1) -+ stub.cfgErrC = make(chan error, 1) -+ go func() { -+ stub.srvErrC <- rpcs.Serve(ctx, rpcl) -+ close(stub.doneC) -+ }() -+ -+ stub.rpcm = rpcm -+ stub.rpcl = rpcl -+ stub.rpcs = rpcs -+ stub.rpcc = rpcc -+ -+ stub.runtime = api.NewRuntimeClient(rpcc) -+ -+ if err = stub.register(ctx); err != nil { -+ stub.close() -+ return err -+ } -+ -+ if err = <-stub.cfgErrC; err != nil { -+ return err -+ } -+ -+ log.Infof(ctx, "Started plugin %s...", stub.Name()) -+ -+ return nil -+} -+ -+// Stop the plugin. -+func (stub *stub) Stop() { -+ log.Infof(noCtx, "Stopping plugin %s...", stub.Name()) -+ -+ stub.Lock() -+ defer stub.Unlock() -+ stub.close() -+} -+ -+func (stub *stub) close() { -+ stub.closeOnce.Do(func() { -+ if stub.rpcl != nil { -+ stub.rpcl.Close() -+ } -+ if stub.rpcs != nil { -+ stub.rpcs.Close() -+ } -+ if stub.rpcc != nil { -+ stub.rpcc.Close() -+ } -+ if stub.rpcm != nil { -+ stub.rpcm.Close() -+ } -+ if stub.srvErrC != nil { -+ <-stub.doneC -+ } -+ }) -+} -+ -+// Run the plugin. Start event processing then wait for an error or getting stopped. -+func (stub *stub) Run(ctx context.Context) error { -+ var err error -+ -+ if err = stub.Start(ctx); err != nil { -+ return err -+ } -+ -+ err = <-stub.srvErrC -+ if err == ttrpc.ErrServerClosed { -+ return nil -+ } -+ -+ return err -+} -+ -+// Wait for the plugin to stop. -+func (stub *stub) Wait() { -+ stub.Lock() -+ if stub.srvErrC == nil { -+ return -+ } -+ stub.Unlock() -+ <-stub.doneC -+} -+ -+// Name returns the full indexed name of the plugin. -+func (stub *stub) Name() string { -+ return stub.idx + "-" + stub.name -+} -+ -+// Connect the plugin to NRI. -+func (stub *stub) connect() error { -+ if stub.conn != nil { -+ log.Infof(noCtx, "Using given plugin connection...") -+ return nil -+ } -+ -+ if env := os.Getenv(api.PluginSocketEnvVar); env != "" { -+ log.Infof(noCtx, "Using connection %q from environment...", env) -+ -+ fd, err := strconv.Atoi(env) -+ if err != nil { -+ return fmt.Errorf("invalid socket in environment (%s=%q): %w", -+ api.PluginSocketEnvVar, env, err) -+ } -+ -+ stub.conn, err = net.NewFdConn(fd) -+ if err != nil { -+ return fmt.Errorf("invalid socket (%d) in environment: %w", fd, err) -+ } -+ -+ return nil -+ } -+ -+ conn, err := stub.dialer(stub.socketPath) -+ if err != nil { -+ return fmt.Errorf("failed to connect to NRI service: %w", err) -+ } -+ -+ stub.conn = conn -+ -+ return nil -+} -+ -+// Register the plugin with NRI. -+func (stub *stub) register(ctx context.Context) error { -+ log.Infof(ctx, "Registering plugin %s...", stub.Name()) -+ -+ ctx, cancel := context.WithTimeout(ctx, registrationTimeout) -+ defer cancel() -+ -+ req := &api.RegisterPluginRequest{ -+ PluginName: stub.name, -+ PluginIdx: stub.idx, -+ } -+ if _, err := stub.runtime.RegisterPlugin(ctx, req); err != nil { -+ return fmt.Errorf("failed to register with NRI/Runtime: %w", err) -+ } -+ -+ return nil -+} -+ -+// Handle a lost connection. -+func (stub *stub) connClosed() { -+ stub.close() -+ if stub.onClose != nil { -+ stub.onClose() -+ return -+ } -+ -+ os.Exit(0) -+} -+ -+// -+// plugin event and request handlers -+// -+ -+// UpdateContainers requests unsolicited updates to containers. -+func (stub *stub) UpdateContainers(update []*api.ContainerUpdate) ([]*api.ContainerUpdate, error) { -+ if stub.runtime == nil { -+ return nil, ErrNoService -+ } -+ -+ ctx := context.Background() -+ req := &api.UpdateContainersRequest{ -+ Update: update, -+ } -+ rpl, err := stub.runtime.UpdateContainers(ctx, req) -+ if rpl != nil { -+ return rpl.Failed, err -+ } -+ return nil, err -+} -+ -+// Configure the plugin. -+func (stub *stub) Configure(ctx context.Context, req *api.ConfigureRequest) (rpl *api.ConfigureResponse, retErr error) { -+ var ( -+ events api.EventMask -+ err error -+ ) -+ -+ log.Infof(ctx, "Configuring plugin %s for runtime %s/%s...", stub.Name(), -+ req.RuntimeName, req.RuntimeVersion) -+ -+ defer func() { -+ stub.cfgErrC <- retErr -+ }() -+ -+ if handler := stub.handlers.Configure; handler == nil { -+ events = stub.events -+ } else { -+ events, err = handler(ctx, req.Config, req.RuntimeName, req.RuntimeVersion) -+ if err != nil { -+ log.Errorf(ctx, "Plugin configuration failed: %v", err) -+ return nil, err -+ } -+ -+ if events == 0 { -+ events = stub.events -+ } -+ -+ // Only allow plugins to subscribe to events they can handle. -+ if extra := events & ^stub.events; extra != 0 { -+ log.Errorf(ctx, "Plugin subscribed for unhandled events %s (0x%x)", -+ extra.PrettyString(), extra) -+ return nil, fmt.Errorf("internal error: unhandled events %s (0x%x)", -+ extra.PrettyString(), extra) -+ } -+ -+ log.Infof(ctx, "Subscribing plugin %s (%s) for events %s", stub.Name(), -+ filepath.Base(os.Args[0]), events.PrettyString()) -+ } -+ -+ return &api.ConfigureResponse{ -+ Events: int32(events), -+ }, nil -+} -+ -+// Synchronize the state of the plugin with the runtime. -+func (stub *stub) Synchronize(ctx context.Context, req *api.SynchronizeRequest) (*api.SynchronizeResponse, error) { -+ handler := stub.handlers.Synchronize -+ if handler == nil { -+ return &api.SynchronizeResponse{}, nil -+ } -+ update, err := handler(ctx, req.Pods, req.Containers) -+ return &api.SynchronizeResponse{ -+ Update: update, -+ }, err -+} -+ -+// Shutdown the plugin. -+func (stub *stub) Shutdown(ctx context.Context, req *api.ShutdownRequest) (*api.ShutdownResponse, error) { -+ handler := stub.handlers.Shutdown -+ if handler != nil { -+ handler(ctx) -+ } -+ return &api.ShutdownResponse{}, nil -+} -+ -+// CreateContainer request handler. -+func (stub *stub) CreateContainer(ctx context.Context, req *api.CreateContainerRequest) (*api.CreateContainerResponse, error) { -+ handler := stub.handlers.CreateContainer -+ if handler == nil { -+ return nil, nil -+ } -+ adjust, update, err := handler(ctx, req.Pod, req.Container) -+ return &api.CreateContainerResponse{ -+ Adjust: adjust, -+ Update: update, -+ }, err -+} -+ -+// UpdateContainer request handler. -+func (stub *stub) UpdateContainer(ctx context.Context, req *api.UpdateContainerRequest) (*api.UpdateContainerResponse, error) { -+ handler := stub.handlers.UpdateContainer -+ if handler == nil { -+ return nil, nil -+ } -+ update, err := handler(ctx, req.Pod, req.Container, req.LinuxResources) -+ return &api.UpdateContainerResponse{ -+ Update: update, -+ }, err -+} -+ -+// StopContainer request handler. -+func (stub *stub) StopContainer(ctx context.Context, req *api.StopContainerRequest) (*api.StopContainerResponse, error) { -+ handler := stub.handlers.StopContainer -+ if handler == nil { -+ return nil, nil -+ } -+ update, err := handler(ctx, req.Pod, req.Container) -+ return &api.StopContainerResponse{ -+ Update: update, -+ }, err -+} -+ -+// StateChange event handler. -+func (stub *stub) StateChange(ctx context.Context, evt *api.StateChangeEvent) (*api.Empty, error) { -+ var err error -+ switch evt.Event { -+ case api.Event_RUN_POD_SANDBOX: -+ if handler := stub.handlers.RunPodSandbox; handler != nil { -+ err = handler(ctx, evt.Pod) -+ } -+ case api.Event_STOP_POD_SANDBOX: -+ if handler := stub.handlers.StopPodSandbox; handler != nil { -+ err = handler(ctx, evt.Pod) -+ } -+ case api.Event_REMOVE_POD_SANDBOX: -+ if handler := stub.handlers.RemovePodSandbox; handler != nil { -+ err = handler(ctx, evt.Pod) -+ } -+ case api.Event_POST_CREATE_CONTAINER: -+ if handler := stub.handlers.PostCreateContainer; handler != nil { -+ err = handler(ctx, evt.Pod, evt.Container) -+ } -+ case api.Event_START_CONTAINER: -+ if handler := stub.handlers.StartContainer; handler != nil { -+ err = handler(ctx, evt.Pod, evt.Container) -+ } -+ case api.Event_POST_START_CONTAINER: -+ if handler := stub.handlers.PostStartContainer; handler != nil { -+ err = handler(ctx, evt.Pod, evt.Container) -+ } -+ case api.Event_POST_UPDATE_CONTAINER: -+ if handler := stub.handlers.PostUpdateContainer; handler != nil { -+ err = handler(ctx, evt.Pod, evt.Container) -+ } -+ case api.Event_REMOVE_CONTAINER: -+ if handler := stub.handlers.RemoveContainer; handler != nil { -+ err = handler(ctx, evt.Pod, evt.Container) -+ } -+ } -+ -+ return &api.StateChangeResponse{}, err -+} -+ -+// ensureIdentity sets plugin index and name from the binary if those are unset. -+func (stub *stub) ensureIdentity() error { -+ if stub.idx != "" && stub.name != "" { -+ return nil -+ } -+ -+ if stub.idx != "" { -+ stub.name = filepath.Base(os.Args[0]) -+ return nil -+ } -+ -+ idx, name, err := api.ParsePluginName(filepath.Base(os.Args[0])) -+ if err != nil { -+ return err -+ } -+ -+ stub.name = name -+ stub.idx = idx -+ -+ return nil -+} -+ -+// Set up event handlers and the subscription mask for the plugin. -+func (stub *stub) setupHandlers() error { -+ if plugin, ok := stub.plugin.(ConfigureInterface); ok { -+ stub.handlers.Configure = plugin.Configure -+ } -+ if plugin, ok := stub.plugin.(SynchronizeInterface); ok { -+ stub.handlers.Synchronize = plugin.Synchronize -+ } -+ if plugin, ok := stub.plugin.(ShutdownInterface); ok { -+ stub.handlers.Shutdown = plugin.Shutdown -+ } -+ -+ if plugin, ok := stub.plugin.(RunPodInterface); ok { -+ stub.handlers.RunPodSandbox = plugin.RunPodSandbox -+ stub.events.Set(api.Event_RUN_POD_SANDBOX) -+ } -+ if plugin, ok := stub.plugin.(StopPodInterface); ok { -+ stub.handlers.StopPodSandbox = plugin.StopPodSandbox -+ stub.events.Set(api.Event_STOP_POD_SANDBOX) -+ } -+ if plugin, ok := stub.plugin.(RemovePodInterface); ok { -+ stub.handlers.RemovePodSandbox = plugin.RemovePodSandbox -+ stub.events.Set(api.Event_REMOVE_POD_SANDBOX) -+ } -+ if plugin, ok := stub.plugin.(CreateContainerInterface); ok { -+ stub.handlers.CreateContainer = plugin.CreateContainer -+ stub.events.Set(api.Event_CREATE_CONTAINER) -+ } -+ if plugin, ok := stub.plugin.(StartContainerInterface); ok { -+ stub.handlers.StartContainer = plugin.StartContainer -+ stub.events.Set(api.Event_START_CONTAINER) -+ } -+ if plugin, ok := stub.plugin.(UpdateContainerInterface); ok { -+ stub.handlers.UpdateContainer = plugin.UpdateContainer -+ stub.events.Set(api.Event_UPDATE_CONTAINER) -+ } -+ if plugin, ok := stub.plugin.(StopContainerInterface); ok { -+ stub.handlers.StopContainer = plugin.StopContainer -+ stub.events.Set(api.Event_STOP_CONTAINER) -+ } -+ if plugin, ok := stub.plugin.(RemoveContainerInterface); ok { -+ stub.handlers.RemoveContainer = plugin.RemoveContainer -+ stub.events.Set(api.Event_REMOVE_CONTAINER) -+ } -+ if plugin, ok := stub.plugin.(PostCreateContainerInterface); ok { -+ stub.handlers.PostCreateContainer = plugin.PostCreateContainer -+ stub.events.Set(api.Event_POST_CREATE_CONTAINER) -+ } -+ if plugin, ok := stub.plugin.(PostStartContainerInterface); ok { -+ stub.handlers.PostStartContainer = plugin.PostStartContainer -+ stub.events.Set(api.Event_POST_START_CONTAINER) -+ } -+ if plugin, ok := stub.plugin.(PostUpdateContainerInterface); ok { -+ stub.handlers.PostUpdateContainer = plugin.PostUpdateContainer -+ stub.events.Set(api.Event_POST_UPDATE_CONTAINER) -+ } -+ -+ if stub.events == 0 { -+ return fmt.Errorf("internal error: plugin %T does not implement any NRI request handlers", -+ stub.plugin) -+ } -+ -+ return nil -+} -diff --git a/vendor/github.com/containerd/ttrpc/.gitattributes b/vendor/github.com/containerd/ttrpc/.gitattributes -new file mode 100755 -index 0000000..d207b18 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/.gitattributes -@@ -0,0 +1 @@ -+*.go text eol=lf -diff --git a/vendor/github.com/containerd/ttrpc/.gitignore b/vendor/github.com/containerd/ttrpc/.gitignore -new file mode 100755 -index 0000000..88ceb27 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/.gitignore -@@ -0,0 +1,13 @@ -+# Binaries for programs and plugins -+/bin/ -+*.exe -+*.dll -+*.so -+*.dylib -+ -+# Test binary, build with `go test -c` -+*.test -+ -+# Output of the go coverage tool, specifically when used with LiteIDE -+*.out -+coverage.txt -diff --git a/vendor/github.com/containerd/ttrpc/.golangci.yml b/vendor/github.com/containerd/ttrpc/.golangci.yml -new file mode 100755 -index 0000000..6462e52 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/.golangci.yml -@@ -0,0 +1,52 @@ -+linters: -+ enable: -+ - staticcheck -+ - unconvert -+ - gofmt -+ - goimports -+ - revive -+ - ineffassign -+ - vet -+ - unused -+ - misspell -+ disable: -+ - errcheck -+ -+linters-settings: -+ revive: -+ ignore-generated-headers: true -+ rules: -+ - name: blank-imports -+ - name: context-as-argument -+ - name: context-keys-type -+ - name: dot-imports -+ - name: error-return -+ - name: error-strings -+ - name: error-naming -+ - name: exported -+ - name: if-return -+ - name: increment-decrement -+ - name: var-naming -+ arguments: [["UID", "GID"], []] -+ - name: var-declaration -+ - name: package-comments -+ - name: range -+ - name: receiver-naming -+ - name: time-naming -+ - name: unexported-return -+ - name: indent-error-flow -+ - name: errorf -+ - name: empty-block -+ - name: superfluous-else -+ - name: unused-parameter -+ - name: unreachable-code -+ - name: redefines-builtin-id -+ -+issues: -+ include: -+ - EXC0002 -+ -+run: -+ timeout: 8m -+ skip-dirs: -+ - example -diff --git a/vendor/github.com/containerd/ttrpc/LICENSE b/vendor/github.com/containerd/ttrpc/LICENSE -new file mode 100755 -index 0000000..261eeb9 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/LICENSE -@@ -0,0 +1,201 @@ -+ Apache License -+ Version 2.0, January 2004 -+ http://www.apache.org/licenses/ -+ -+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -+ -+ 1. Definitions. -+ -+ "License" shall mean the terms and conditions for use, reproduction, -+ and distribution as defined by Sections 1 through 9 of this document. -+ -+ "Licensor" shall mean the copyright owner or entity authorized by -+ the copyright owner that is granting the License. -+ -+ "Legal Entity" shall mean the union of the acting entity and all -+ other entities that control, are controlled by, or are under common -+ control with that entity. For the purposes of this definition, -+ "control" means (i) the power, direct or indirect, to cause the -+ direction or management of such entity, whether by contract or -+ otherwise, or (ii) ownership of fifty percent (50%) or more of the -+ outstanding shares, or (iii) beneficial ownership of such entity. -+ -+ "You" (or "Your") shall mean an individual or Legal Entity -+ exercising permissions granted by this License. -+ -+ "Source" form shall mean the preferred form for making modifications, -+ including but not limited to software source code, documentation -+ source, and configuration files. -+ -+ "Object" form shall mean any form resulting from mechanical -+ transformation or translation of a Source form, including but -+ not limited to compiled object code, generated documentation, -+ and conversions to other media types. -+ -+ "Work" shall mean the work of authorship, whether in Source or -+ Object form, made available under the License, as indicated by a -+ copyright notice that is included in or attached to the work -+ (an example is provided in the Appendix below). -+ -+ "Derivative Works" shall mean any work, whether in Source or Object -+ form, that is based on (or derived from) the Work and for which the -+ editorial revisions, annotations, elaborations, or other modifications -+ represent, as a whole, an original work of authorship. For the purposes -+ of this License, Derivative Works shall not include works that remain -+ separable from, or merely link (or bind by name) to the interfaces of, -+ the Work and Derivative Works thereof. -+ -+ "Contribution" shall mean any work of authorship, including -+ the original version of the Work and any modifications or additions -+ to that Work or Derivative Works thereof, that is intentionally -+ submitted to Licensor for inclusion in the Work by the copyright owner -+ or by an individual or Legal Entity authorized to submit on behalf of -+ the copyright owner. For the purposes of this definition, "submitted" -+ means any form of electronic, verbal, or written communication sent -+ to the Licensor or its representatives, including but not limited to -+ communication on electronic mailing lists, source code control systems, -+ and issue tracking systems that are managed by, or on behalf of, the -+ Licensor for the purpose of discussing and improving the Work, but -+ excluding communication that is conspicuously marked or otherwise -+ designated in writing by the copyright owner as "Not a Contribution." -+ -+ "Contributor" shall mean Licensor and any individual or Legal Entity -+ on behalf of whom a Contribution has been received by Licensor and -+ subsequently incorporated within the Work. -+ -+ 2. Grant of Copyright License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ copyright license to reproduce, prepare Derivative Works of, -+ publicly display, publicly perform, sublicense, and distribute the -+ Work and such Derivative Works in Source or Object form. -+ -+ 3. Grant of Patent License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ (except as stated in this section) patent license to make, have made, -+ use, offer to sell, sell, import, and otherwise transfer the Work, -+ where such license applies only to those patent claims licensable -+ by such Contributor that are necessarily infringed by their -+ Contribution(s) alone or by combination of their Contribution(s) -+ with the Work to which such Contribution(s) was submitted. If You -+ institute patent litigation against any entity (including a -+ cross-claim or counterclaim in a lawsuit) alleging that the Work -+ or a Contribution incorporated within the Work constitutes direct -+ or contributory patent infringement, then any patent licenses -+ granted to You under this License for that Work shall terminate -+ as of the date such litigation is filed. -+ -+ 4. Redistribution. You may reproduce and distribute copies of the -+ Work or Derivative Works thereof in any medium, with or without -+ modifications, and in Source or Object form, provided that You -+ meet the following conditions: -+ -+ (a) You must give any other recipients of the Work or -+ Derivative Works a copy of this License; and -+ -+ (b) You must cause any modified files to carry prominent notices -+ stating that You changed the files; and -+ -+ (c) You must retain, in the Source form of any Derivative Works -+ that You distribute, all copyright, patent, trademark, and -+ attribution notices from the Source form of the Work, -+ excluding those notices that do not pertain to any part of -+ the Derivative Works; and -+ -+ (d) If the Work includes a "NOTICE" text file as part of its -+ distribution, then any Derivative Works that You distribute must -+ include a readable copy of the attribution notices contained -+ within such NOTICE file, excluding those notices that do not -+ pertain to any part of the Derivative Works, in at least one -+ of the following places: within a NOTICE text file distributed -+ as part of the Derivative Works; within the Source form or -+ documentation, if provided along with the Derivative Works; or, -+ within a display generated by the Derivative Works, if and -+ wherever such third-party notices normally appear. The contents -+ of the NOTICE file are for informational purposes only and -+ do not modify the License. You may add Your own attribution -+ notices within Derivative Works that You distribute, alongside -+ or as an addendum to the NOTICE text from the Work, provided -+ that such additional attribution notices cannot be construed -+ as modifying the License. -+ -+ You may add Your own copyright statement to Your modifications and -+ may provide additional or different license terms and conditions -+ for use, reproduction, or distribution of Your modifications, or -+ for any such Derivative Works as a whole, provided Your use, -+ reproduction, and distribution of the Work otherwise complies with -+ the conditions stated in this License. -+ -+ 5. Submission of Contributions. Unless You explicitly state otherwise, -+ any Contribution intentionally submitted for inclusion in the Work -+ by You to the Licensor shall be under the terms and conditions of -+ this License, without any additional terms or conditions. -+ Notwithstanding the above, nothing herein shall supersede or modify -+ the terms of any separate license agreement you may have executed -+ with Licensor regarding such Contributions. -+ -+ 6. Trademarks. This License does not grant permission to use the trade -+ names, trademarks, service marks, or product names of the Licensor, -+ except as required for reasonable and customary use in describing the -+ origin of the Work and reproducing the content of the NOTICE file. -+ -+ 7. Disclaimer of Warranty. Unless required by applicable law or -+ agreed to in writing, Licensor provides the Work (and each -+ Contributor provides its Contributions) on an "AS IS" BASIS, -+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -+ implied, including, without limitation, any warranties or conditions -+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -+ PARTICULAR PURPOSE. You are solely responsible for determining the -+ appropriateness of using or redistributing the Work and assume any -+ risks associated with Your exercise of permissions under this License. -+ -+ 8. Limitation of Liability. In no event and under no legal theory, -+ whether in tort (including negligence), contract, or otherwise, -+ unless required by applicable law (such as deliberate and grossly -+ negligent acts) or agreed to in writing, shall any Contributor be -+ liable to You for damages, including any direct, indirect, special, -+ incidental, or consequential damages of any character arising as a -+ result of this License or out of the use or inability to use the -+ Work (including but not limited to damages for loss of goodwill, -+ work stoppage, computer failure or malfunction, or any and all -+ other commercial damages or losses), even if such Contributor -+ has been advised of the possibility of such damages. -+ -+ 9. Accepting Warranty or Additional Liability. While redistributing -+ the Work or Derivative Works thereof, You may choose to offer, -+ and charge a fee for, acceptance of support, warranty, indemnity, -+ or other liability obligations and/or rights consistent with this -+ License. However, in accepting such obligations, You may act only -+ on Your own behalf and on Your sole responsibility, not on behalf -+ of any other Contributor, and only if You agree to indemnify, -+ defend, and hold each Contributor harmless for any liability -+ incurred by, or claims asserted against, such Contributor by reason -+ of your accepting any such warranty or additional liability. -+ -+ END OF TERMS AND CONDITIONS -+ -+ APPENDIX: How to apply the Apache License to your work. -+ -+ To apply the Apache License to your work, attach the following -+ boilerplate notice, with the fields enclosed by brackets "[]" -+ replaced with your own identifying information. (Don't include -+ the brackets!) The text should be enclosed in the appropriate -+ comment syntax for the file format. We also recommend that a -+ file or class name and description of purpose be included on the -+ same "printed page" as the copyright notice for easier -+ identification within third-party archives. -+ -+ Copyright [yyyy] [name of copyright owner] -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -diff --git a/vendor/github.com/containerd/ttrpc/Makefile b/vendor/github.com/containerd/ttrpc/Makefile -new file mode 100755 -index 0000000..c3a497d ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/Makefile -@@ -0,0 +1,180 @@ -+# Copyright The containerd Authors. -+ -+# Licensed under the Apache License, Version 2.0 (the "License"); -+# you may not use this file except in compliance with the License. -+# You may obtain a copy of the License at -+ -+# 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. -+ -+ -+# Go command to use for build -+GO ?= go -+INSTALL ?= install -+ -+# Root directory of the project (absolute path). -+ROOTDIR=$(dir $(abspath $(lastword $(MAKEFILE_LIST)))) -+ -+WHALE = "🇩" -+ONI = "👹" -+ -+# Project binaries. -+COMMANDS=protoc-gen-go-ttrpc protoc-gen-gogottrpc -+ -+ifdef BUILDTAGS -+ GO_BUILDTAGS = ${BUILDTAGS} -+endif -+GO_BUILDTAGS ?= -+GO_TAGS=$(if $(GO_BUILDTAGS),-tags "$(strip $(GO_BUILDTAGS))",) -+ -+# Project packages. -+PACKAGES=$(shell $(GO) list ${GO_TAGS} ./... | grep -v /example) -+TESTPACKAGES=$(shell $(GO) list ${GO_TAGS} ./... | grep -v /cmd | grep -v /integration | grep -v /example) -+BINPACKAGES=$(addprefix ./cmd/,$(COMMANDS)) -+ -+#Replaces ":" (*nix), ";" (windows) with newline for easy parsing -+GOPATHS=$(shell echo ${GOPATH} | tr ":" "\n" | tr ";" "\n") -+ -+TESTFLAGS_RACE= -+GO_BUILD_FLAGS= -+# See Golang issue re: '-trimpath': https://github.com/golang/go/issues/13809 -+GO_GCFLAGS=$(shell \ -+ set -- ${GOPATHS}; \ -+ echo "-gcflags=-trimpath=$${1}/src"; \ -+ ) -+ -+BINARIES=$(addprefix bin/,$(COMMANDS)) -+ -+# Flags passed to `go test` -+TESTFLAGS ?= $(TESTFLAGS_RACE) $(EXTRA_TESTFLAGS) -+TESTFLAGS_PARALLEL ?= 8 -+ -+# Use this to replace `go test` with, for instance, `gotestsum` -+GOTEST ?= $(GO) test -+ -+.PHONY: clean all AUTHORS build binaries test integration generate protos check-protos coverage ci check help install vendor install-protobuf install-protobuild -+.DEFAULT: default -+ -+# Forcibly set the default goal to all, in case an include above brought in a rule definition. -+.DEFAULT_GOAL := all -+ -+all: binaries -+ -+check: proto-fmt ## run all linters -+ @echo "$(WHALE) $@" -+ GOGC=75 golangci-lint run -+ -+ci: check binaries check-protos coverage # coverage-integration ## to be used by the CI -+ -+AUTHORS: .mailmap .git/HEAD -+ git log --format='%aN <%aE>' | sort -fu > $@ -+ -+generate: protos -+ @echo "$(WHALE) $@" -+ @PATH="${ROOTDIR}/bin:${PATH}" $(GO) generate -x ${PACKAGES} -+ -+protos: bin/protoc-gen-gogottrpc bin/protoc-gen-go-ttrpc ## generate protobuf -+ @echo "$(WHALE) $@" -+ @(PATH="${ROOTDIR}/bin:${PATH}" protobuild --quiet ${PACKAGES}) -+ -+check-protos: protos ## check if protobufs needs to be generated again -+ @echo "$(WHALE) $@" -+ @test -z "$$(git status --short | grep ".pb.go" | tee /dev/stderr)" || \ -+ ((git diff | cat) && \ -+ (echo "$(ONI) please run 'make protos' when making changes to proto files" && false)) -+ -+check-api-descriptors: protos ## check that protobuf changes aren't present. -+ @echo "$(WHALE) $@" -+ @test -z "$$(git status --short | grep ".pb.txt" | tee /dev/stderr)" || \ -+ ((git diff $$(find . -name '*.pb.txt') | cat) && \ -+ (echo "$(ONI) please run 'make protos' when making changes to proto files and check-in the generated descriptor file changes" && false)) -+ -+proto-fmt: ## check format of proto files -+ @echo "$(WHALE) $@" -+ @test -z "$$(find . -name '*.proto' -type f -exec grep -Hn -e "^ " {} \; | tee /dev/stderr)" || \ -+ (echo "$(ONI) please indent proto files with tabs only" && false) -+ @test -z "$$(find . -name '*.proto' -type f -exec grep -Hn "Meta meta = " {} \; | grep -v '(gogoproto.nullable) = false' | tee /dev/stderr)" || \ -+ (echo "$(ONI) meta fields in proto files must have option (gogoproto.nullable) = false" && false) -+ -+build: ## build the go packages -+ @echo "$(WHALE) $@" -+ @$(GO) build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} ${EXTRA_FLAGS} ${PACKAGES} -+ -+test: ## run tests, except integration tests and tests that require root -+ @echo "$(WHALE) $@" -+ @$(GOTEST) ${TESTFLAGS} ${TESTPACKAGES} -+ -+integration: ## run integration tests -+ @echo "$(WHALE) $@" -+ @cd "${ROOTDIR}/integration" && $(GOTEST) -v ${TESTFLAGS} -parallel ${TESTFLAGS_PARALLEL} . -+ -+benchmark: ## run benchmarks tests -+ @echo "$(WHALE) $@" -+ @$(GO) test ${TESTFLAGS} -bench . -run Benchmark -+ -+FORCE: -+ -+define BUILD_BINARY -+@echo "$(WHALE) $@" -+@$(GO) build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} -o $@ ${GO_TAGS} ./$< -+endef -+ -+# Build a binary from a cmd. -+bin/%: cmd/% FORCE -+ $(call BUILD_BINARY) -+ -+binaries: $(BINARIES) ## build binaries -+ @echo "$(WHALE) $@" -+ -+clean: ## clean up binaries -+ @echo "$(WHALE) $@" -+ @rm -f $(BINARIES) -+ -+install: ## install binaries -+ @echo "$(WHALE) $@ $(BINPACKAGES)" -+ @$(GO) install $(BINPACKAGES) -+ -+install-protobuf: -+ @echo "$(WHALE) $@" -+ @script/install-protobuf -+ -+install-protobuild: -+ @echo "$(WHALE) $@" -+ @$(GO) install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1 -+ @$(GO) install github.com/containerd/protobuild@14832ccc41429f5c4f81028e5af08aa233a219cf -+ -+coverage: ## generate coverprofiles from the unit tests, except tests that require root -+ @echo "$(WHALE) $@" -+ @rm -f coverage.txt -+ @$(GO) test ${TESTFLAGS} ${TESTPACKAGES} 2> /dev/null -+ @( for pkg in ${PACKAGES}; do \ -+ $(GO) test ${TESTFLAGS} \ -+ -cover \ -+ -coverprofile=profile.out \ -+ -covermode=atomic $$pkg || exit; \ -+ if [ -f profile.out ]; then \ -+ cat profile.out >> coverage.txt; \ -+ rm profile.out; \ -+ fi; \ -+ done ) -+ -+vendor: ## ensure all the go.mod/go.sum files are up-to-date -+ @echo "$(WHALE) $@" -+ @$(GO) mod tidy -+ @$(GO) mod verify -+ -+verify-vendor: ## verify if all the go.mod/go.sum files are up-to-date -+ @echo "$(WHALE) $@" -+ @$(GO) mod tidy -+ @$(GO) mod verify -+ @test -z "$$(git status --short | grep "go.sum" | tee /dev/stderr)" || \ -+ ((git diff | cat) && \ -+ (echo "$(ONI) make sure to checkin changes after go mod tidy" && false)) -+ -+help: ## this help -+ @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) | sort -diff --git a/vendor/github.com/containerd/ttrpc/PROTOCOL.md b/vendor/github.com/containerd/ttrpc/PROTOCOL.md -new file mode 100755 -index 0000000..12b43f6 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/PROTOCOL.md -@@ -0,0 +1,240 @@ -+# Protocol Specification -+ -+The ttrpc protocol is client/server protocol to support multiple request streams -+over a single connection with lightweight framing. The client represents the -+process which initiated the underlying connection and the server is the process -+which accepted the connection. The protocol is currently defined as -+asymmetrical, with clients sending requests and servers sending responses. Both -+clients and servers are able to send stream data. The roles are also used in -+determining the stream identifiers, with client initiated streams using odd -+number identifiers and server initiated using even number. The protocol may be -+extended in the future to support server initiated streams, that is not -+supported in the latest version. -+ -+## Purpose -+ -+The ttrpc protocol is designed to be lightweight and optimized for low latency -+and reliable connections between processes on the same host. The protocol does -+not include features for handling unreliable connections such as handshakes, -+resets, pings, or flow control. The protocol is designed to make low-overhead -+implementations as simple as possible. It is not intended as a suitable -+replacement for HTTP2/3 over the network. -+ -+## Message Frame -+ -+Each Message Frame consists of a 10-byte message header followed -+by message data. The data length and stream ID are both big-endian -+4-byte unsigned integers. The message type is an unsigned 1-byte -+integer. The flags are also an unsigned 1-byte integer and -+use is defined by the message type. -+ -+ +---------------------------------------------------------------+ -+ | Data Length (32) | -+ +---------------------------------------------------------------+ -+ | Stream ID (32) | -+ +---------------+-----------------------------------------------+ -+ | Msg Type (8) | -+ +---------------+ -+ | Flags (8) | -+ +---------------+-----------------------------------------------+ -+ | Data (*) | -+ +---------------------------------------------------------------+ -+ -+The Data Length field represents the number of bytes in the Data field. The -+total frame size will always be Data Length + 10 bytes. The maximum data length -+is 4MB and any larger size should be rejected. Due to the maximum data size -+being less than 16MB, the first frame byte should always be zero. This first -+byte should be considered reserved for future use. -+ -+The Stream ID must be odd for client initiated streams and even for server -+initiated streams. Server initiated streams are not currently supported. -+ -+## Mesage Types -+ -+| Message Type | Name | Description | -+|--------------|----------|----------------------------------| -+| 0x01 | Request | Initiates stream | -+| 0x02 | Response | Final stream data and terminates | -+| 0x03 | Data | Stream data | -+ -+### Request -+ -+The request message is used to initiate stream and send along request data for -+properly routing and handling the stream. The stream may indicate unary without -+any inbound or outbound stream data with only a response is expected on the -+stream. The request may also indicate the stream is still open for more data and -+no response is expected until data is finished. If the remote indicates the -+stream is closed, the request may be considered non-unary but without anymore -+stream data sent. In the case of `remote closed`, the remote still expects to -+receive a response or stream data. For compatibility with non streaming clients, -+a request with empty flags indicates a unary request. -+ -+#### Request Flags -+ -+| Flag | Name | Description | -+|------|-----------------|--------------------------------------------------| -+| 0x01 | `remote closed` | Non-unary, but no more data expected from remote | -+| 0x02 | `remote open` | Non-unary, remote is still sending data | -+ -+### Response -+ -+The response message is used to end a stream with data, an empty response, or -+an error. A response message is the only expected message after a unary request. -+A non-unary request does not require a response message if the server is sending -+back stream data. A non-unary stream may return a single response message but no -+other stream data may follow. -+ -+#### Response Flags -+ -+No response flags are defined at this time, flags should be empty. -+ -+### Data -+ -+The data message is used to send data on an already initialized stream. Either -+client or server may send data. A data message is not allowed on a unary stream. -+A data message should not be sent after indicating `remote closed` to the peer. -+The last data message on a stream must set the `remote closed` flag. -+ -+The `no data` flag is used to indicate that the data message does not include -+any data. This is normally used with the `remote closed` flag to indicate the -+stream is now closed without transmitting any data. Since ttrpc normally -+transmits a single object per message, a zero length data message may be -+interpreted as an empty object. For example, transmitting the number zero as a -+protobuf message ends up with a data length of zero, but the message is still -+considered data and should be processed. -+ -+#### Data Flags -+ -+| Flag | Name | Description | -+|------|-----------------|-----------------------------------| -+| 0x01 | `remote closed` | No more data expected from remote | -+| 0x04 | `no data` | This message does not have data | -+ -+## Streaming -+ -+All ttrpc requests use streams to transfer data. Unary streams will only have -+two messages sent per stream, a request from a client and a response from the -+server. Non-unary streams, however, may send any numbers of messages from the -+client and the server. This makes stream management more complicated than unary -+streams since both client and server need to track additional state. To keep -+this management as simple as possible, ttrpc minimizes the number of states and -+uses two flags instead of control frames. Each stream has two states while a -+stream is still alive: `local closed` and `remote closed`. Each peer considers -+local and remote from their own perspective and sets flags from the other peer's -+perspective. For example, if a client sends a data frame with the -+`remote closed` flag, that is indicating that the client is now `local closed` -+and the server will be `remote closed`. A unary operation does not need to send -+these flags since each received message always indicates `remote closed`. Once a -+peer is both `local closed` and `remote closed`, the stream is considered -+finished and may be cleaned up. -+ -+Due to the asymmetric nature of the current protocol, a client should -+always be in the `local closed` state before `remote closed` and a server should -+always be in the `remote closed` state before `local closed`. This happens -+because the client is always initiating requests and a client always expects a -+final response back from a server to indicate the initiated request has been -+fulfilled. This may mean server sends a final empty response to finish a stream -+even after it has already completed sending data before the client. -+ -+### Unary State Diagram -+ -+ +--------+ +--------+ -+ | Client | | Server | -+ +---+----+ +----+---+ -+ | +---------+ | -+ local >---------------+ Request +--------------------> remote -+ closed | +---------+ | closed -+ | | -+ | +----------+ | -+ finished <--------------+ Response +--------------------< finished -+ | +----------+ | -+ | | -+ -+### Non-Unary State Diagrams -+ -+RC: `remote closed` flag -+RO: `remote open` flag -+ -+ +--------+ +--------+ -+ | Client | | Server | -+ +---+----+ +----+---+ -+ | +--------------+ | -+ >-------------+ Request [RO] +-----------------> -+ | +--------------+ | -+ | | -+ | +------+ | -+ >-----------------+ Data +---------------------> -+ | +------+ | -+ | | -+ | +-----------+ | -+ local >---------------+ Data [RC] +------------------> remote -+ closed | +-----------+ | closed -+ | | -+ | +----------+ | -+ finished <--------------+ Response +--------------------< finished -+ | +----------+ | -+ | | -+ -+ +--------+ +--------+ -+ | Client | | Server | -+ +---+----+ +----+---+ -+ | +--------------+ | -+ local >-------------+ Request [RC] +-----------------> remote -+ closed | +--------------+ | closed -+ | | -+ | +------+ | -+ <-----------------+ Data +---------------------< -+ | +------+ | -+ | | -+ | +-----------+ | -+ finished <---------------+ Data [RC] +------------------< finished -+ | +-----------+ | -+ | | -+ -+ +--------+ +--------+ -+ | Client | | Server | -+ +---+----+ +----+---+ -+ | +--------------+ | -+ >-------------+ Request [RO] +-----------------> -+ | +--------------+ | -+ | | -+ | +------+ | -+ >-----------------+ Data +---------------------> -+ | +------+ | -+ | | -+ | +------+ | -+ <-----------------+ Data +---------------------< -+ | +------+ | -+ | | -+ | +------+ | -+ >-----------------+ Data +---------------------> -+ | +------+ | -+ | | -+ | +-----------+ | -+ local >---------------+ Data [RC] +------------------> remote -+ closed | +-----------+ | closed -+ | | -+ | +------+ | -+ <-----------------+ Data +---------------------< -+ | +------+ | -+ | | -+ | +-----------+ | -+ finished <---------------+ Data [RC] +------------------< finished -+ | +-----------+ | -+ | | -+ -+## RPC -+ -+While this protocol is defined primarily to support Remote Procedure Calls, the -+protocol does not define the request and response types beyond the messages -+defined in the protocol. The implementation provides a default protobuf -+definition of request and response which may be used for cross language rpc. -+All implementations should at least define a request type which support -+routing by procedure name and a response type which supports call status. -+ -+## Version History -+ -+| Version | Features | -+|---------|---------------------| -+| 1.0 | Unary requests only | -+| 1.2 | Streaming support | -diff --git a/vendor/github.com/containerd/ttrpc/Protobuild.toml b/vendor/github.com/containerd/ttrpc/Protobuild.toml -new file mode 100755 -index 0000000..0f6ccbd ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/Protobuild.toml -@@ -0,0 +1,28 @@ -+version = "2" -+generators = ["go"] -+ -+# Control protoc include paths. Below are usually some good defaults, but feel -+# free to try it without them if it works for your project. -+[includes] -+ # Include paths that will be added before all others. Typically, you want to -+ # treat the root of the project as an include, but this may not be necessary. -+ before = ["."] -+ -+ # Paths that will be added untouched to the end of the includes. We use -+ # `/usr/local/include` to pickup the common install location of protobuf. -+ # This is the default. -+ after = ["/usr/local/include"] -+ -+# This section maps protobuf imports to Go packages. These will become -+# `-M` directives in the call to the go protobuf generator. -+[packages] -+ "google/protobuf/any.proto" = "github.com/gogo/protobuf/types" -+ "proto/status.proto" = "google.golang.org/genproto/googleapis/rpc/status" -+ -+[[overrides]] -+# enable ttrpc and disable fieldpath and grpc for the shim -+prefixes = ["github.com/containerd/ttrpc/integration/streaming"] -+generators = ["go", "go-ttrpc"] -+ -+[overrides.parameters.go-ttrpc] -+prefix = "TTRPC" -diff --git a/vendor/github.com/containerd/ttrpc/README.md b/vendor/github.com/containerd/ttrpc/README.md -new file mode 100755 -index 0000000..675a517 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/README.md -@@ -0,0 +1,59 @@ -+# ttrpc -+ -+[![Build Status](https://github.com/containerd/ttrpc/workflows/CI/badge.svg)](https://github.com/containerd/ttrpc/actions?query=workflow%3ACI) -+ -+GRPC for low-memory environments. -+ -+The existing grpc-go project requires a lot of memory overhead for importing -+packages and at runtime. While this is great for many services with low density -+requirements, this can be a problem when running a large number of services on -+a single machine or on a machine with a small amount of memory. -+ -+Using the same GRPC definitions, this project reduces the binary size and -+protocol overhead required. We do this by eliding the `net/http`, `net/http2` -+and `grpc` package used by grpc replacing it with a lightweight framing -+protocol. The result are smaller binaries that use less resident memory with -+the same ease of use as GRPC. -+ -+Please note that while this project supports generating either end of the -+protocol, the generated service definitions will be incompatible with regular -+GRPC services, as they do not speak the same protocol. -+ -+# Protocol -+ -+See the [protocol specification](./PROTOCOL.md). -+ -+# Usage -+ -+Create a gogo vanity binary (see -+[`cmd/protoc-gen-gogottrpc/main.go`](cmd/protoc-gen-gogottrpc/main.go) for an -+example with the ttrpc plugin enabled. -+ -+It's recommended to use [`protobuild`](https://github.com/containerd/protobuild) -+to build the protobufs for this project, but this will work with protoc -+directly, if required. -+ -+# Differences from GRPC -+ -+- The protocol stack has been replaced with a lighter protocol that doesn't -+ require http, http2 and tls. -+- The client and server interface are identical whereas in GRPC there is a -+ client and server interface that are different. -+- The Go stdlib context package is used instead. -+ -+# Status -+ -+TODO: -+ -+- [ ] Add testing under concurrent load to ensure -+- [ ] Verify connection error handling -+ -+# Project details -+ -+ttrpc is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE). -+As a containerd sub-project, you will find the: -+ * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md), -+ * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS), -+ * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md) -+ -+information in our [`containerd/project`](https://github.com/containerd/project) repository. -diff --git a/vendor/github.com/containerd/ttrpc/channel.go b/vendor/github.com/containerd/ttrpc/channel.go -new file mode 100755 -index 0000000..feafd9a ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/channel.go -@@ -0,0 +1,182 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "bufio" -+ "encoding/binary" -+ "fmt" -+ "io" -+ "net" -+ "sync" -+ -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/status" -+) -+ -+const ( -+ messageHeaderLength = 10 -+ messageLengthMax = 4 << 20 -+) -+ -+type messageType uint8 -+ -+const ( -+ messageTypeRequest messageType = 0x1 -+ messageTypeResponse messageType = 0x2 -+ messageTypeData messageType = 0x3 -+) -+ -+func (mt messageType) String() string { -+ switch mt { -+ case messageTypeRequest: -+ return "request" -+ case messageTypeResponse: -+ return "response" -+ case messageTypeData: -+ return "data" -+ default: -+ return "unknown" -+ } -+} -+ -+const ( -+ flagRemoteClosed uint8 = 0x1 -+ flagRemoteOpen uint8 = 0x2 -+ flagNoData uint8 = 0x4 -+) -+ -+// messageHeader represents the fixed-length message header of 10 bytes sent -+// with every request. -+type messageHeader struct { -+ Length uint32 // length excluding this header. b[:4] -+ StreamID uint32 // identifies which request stream message is a part of. b[4:8] -+ Type messageType // message type b[8] -+ Flags uint8 // type specific flags b[9] -+} -+ -+func readMessageHeader(p []byte, r io.Reader) (messageHeader, error) { -+ _, err := io.ReadFull(r, p[:messageHeaderLength]) -+ if err != nil { -+ return messageHeader{}, err -+ } -+ -+ return messageHeader{ -+ Length: binary.BigEndian.Uint32(p[:4]), -+ StreamID: binary.BigEndian.Uint32(p[4:8]), -+ Type: messageType(p[8]), -+ Flags: p[9], -+ }, nil -+} -+ -+func writeMessageHeader(w io.Writer, p []byte, mh messageHeader) error { -+ binary.BigEndian.PutUint32(p[:4], mh.Length) -+ binary.BigEndian.PutUint32(p[4:8], mh.StreamID) -+ p[8] = byte(mh.Type) -+ p[9] = mh.Flags -+ -+ _, err := w.Write(p[:]) -+ return err -+} -+ -+var buffers sync.Pool -+ -+type channel struct { -+ conn net.Conn -+ bw *bufio.Writer -+ br *bufio.Reader -+ hrbuf [messageHeaderLength]byte // avoid alloc when reading header -+ hwbuf [messageHeaderLength]byte -+} -+ -+func newChannel(conn net.Conn) *channel { -+ return &channel{ -+ conn: conn, -+ bw: bufio.NewWriter(conn), -+ br: bufio.NewReader(conn), -+ } -+} -+ -+// recv a message from the channel. The returned buffer contains the message. -+// -+// If a valid grpc status is returned, the message header -+// returned will be valid and caller should send that along to -+// the correct consumer. The bytes on the underlying channel -+// will be discarded. -+func (ch *channel) recv() (messageHeader, []byte, error) { -+ mh, err := readMessageHeader(ch.hrbuf[:], ch.br) -+ if err != nil { -+ return messageHeader{}, nil, err -+ } -+ -+ if mh.Length > uint32(messageLengthMax) { -+ if _, err := ch.br.Discard(int(mh.Length)); err != nil { -+ return mh, nil, fmt.Errorf("failed to discard after receiving oversized message: %w", err) -+ } -+ -+ return mh, nil, status.Errorf(codes.ResourceExhausted, "message length %v exceed maximum message size of %v", mh.Length, messageLengthMax) -+ } -+ -+ var p []byte -+ if mh.Length > 0 { -+ p = ch.getmbuf(int(mh.Length)) -+ if _, err := io.ReadFull(ch.br, p); err != nil { -+ return messageHeader{}, nil, fmt.Errorf("failed reading message: %w", err) -+ } -+ } -+ -+ return mh, p, nil -+} -+ -+func (ch *channel) send(streamID uint32, t messageType, flags uint8, p []byte) error { -+ // TODO: Error on send rather than on recv -+ //if len(p) > messageLengthMax { -+ // return status.Errorf(codes.InvalidArgument, "refusing to send, message length %v exceed maximum message size of %v", len(p), messageLengthMax) -+ //} -+ if err := writeMessageHeader(ch.bw, ch.hwbuf[:], messageHeader{Length: uint32(len(p)), StreamID: streamID, Type: t, Flags: flags}); err != nil { -+ return err -+ } -+ -+ if len(p) > 0 { -+ _, err := ch.bw.Write(p) -+ if err != nil { -+ return err -+ } -+ } -+ -+ return ch.bw.Flush() -+} -+ -+func (ch *channel) getmbuf(size int) []byte { -+ // we can't use the standard New method on pool because we want to allocate -+ // based on size. -+ b, ok := buffers.Get().(*[]byte) -+ if !ok || cap(*b) < size { -+ // TODO(stevvooe): It may be better to allocate these in fixed length -+ // buckets to reduce fragmentation but its not clear that would help -+ // with performance. An ilogb approach or similar would work well. -+ bb := make([]byte, size) -+ b = &bb -+ } else { -+ *b = (*b)[:size] -+ } -+ return *b -+} -+ -+func (ch *channel) putmbuf(p []byte) { -+ buffers.Put(&p) -+} -diff --git a/vendor/github.com/containerd/ttrpc/client.go b/vendor/github.com/containerd/ttrpc/client.go -new file mode 100755 -index 0000000..482a68e ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/client.go -@@ -0,0 +1,551 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ "io" -+ "net" -+ "strings" -+ "sync" -+ "syscall" -+ "time" -+ -+ "github.com/sirupsen/logrus" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/status" -+ "google.golang.org/protobuf/proto" -+) -+ -+// Client for a ttrpc server -+type Client struct { -+ codec codec -+ conn net.Conn -+ channel *channel -+ -+ streamLock sync.RWMutex -+ streams map[streamID]*stream -+ nextStreamID streamID -+ sendLock sync.Mutex -+ -+ ctx context.Context -+ closed func() -+ -+ closeOnce sync.Once -+ userCloseFunc func() -+ userCloseWaitCh chan struct{} -+ -+ interceptor UnaryClientInterceptor -+} -+ -+// ClientOpts configures a client -+type ClientOpts func(c *Client) -+ -+// WithOnClose sets the close func whenever the client's Close() method is called -+func WithOnClose(onClose func()) ClientOpts { -+ return func(c *Client) { -+ c.userCloseFunc = onClose -+ } -+} -+ -+// WithUnaryClientInterceptor sets the provided client interceptor -+func WithUnaryClientInterceptor(i UnaryClientInterceptor) ClientOpts { -+ return func(c *Client) { -+ c.interceptor = i -+ } -+} -+ -+// WithChainUnaryClientInterceptor sets the provided chain of client interceptors -+func WithChainUnaryClientInterceptor(interceptors ...UnaryClientInterceptor) ClientOpts { -+ return func(c *Client) { -+ if len(interceptors) == 0 { -+ return -+ } -+ if c.interceptor != nil { -+ interceptors = append([]UnaryClientInterceptor{c.interceptor}, interceptors...) -+ } -+ c.interceptor = func( -+ ctx context.Context, -+ req *Request, -+ reply *Response, -+ info *UnaryClientInfo, -+ final Invoker, -+ ) error { -+ return interceptors[0](ctx, req, reply, info, -+ chainUnaryInterceptors(interceptors[1:], final, info)) -+ } -+ } -+} -+ -+func chainUnaryInterceptors(interceptors []UnaryClientInterceptor, final Invoker, info *UnaryClientInfo) Invoker { -+ if len(interceptors) == 0 { -+ return final -+ } -+ return func( -+ ctx context.Context, -+ req *Request, -+ reply *Response, -+ ) error { -+ return interceptors[0](ctx, req, reply, info, -+ chainUnaryInterceptors(interceptors[1:], final, info)) -+ } -+} -+ -+// NewClient creates a new ttrpc client using the given connection -+func NewClient(conn net.Conn, opts ...ClientOpts) *Client { -+ ctx, cancel := context.WithCancel(context.Background()) -+ channel := newChannel(conn) -+ c := &Client{ -+ codec: codec{}, -+ conn: conn, -+ channel: channel, -+ streams: make(map[streamID]*stream), -+ nextStreamID: 1, -+ closed: cancel, -+ ctx: ctx, -+ userCloseFunc: func() {}, -+ userCloseWaitCh: make(chan struct{}), -+ } -+ -+ for _, o := range opts { -+ o(c) -+ } -+ -+ if c.interceptor == nil { -+ c.interceptor = defaultClientInterceptor -+ } -+ -+ go c.run() -+ return c -+} -+ -+func (c *Client) send(sid uint32, mt messageType, flags uint8, b []byte) error { -+ c.sendLock.Lock() -+ defer c.sendLock.Unlock() -+ return c.channel.send(sid, mt, flags, b) -+} -+ -+// Call makes a unary request and returns with response -+func (c *Client) Call(ctx context.Context, service, method string, req, resp interface{}) error { -+ payload, err := c.codec.Marshal(req) -+ if err != nil { -+ return err -+ } -+ -+ var ( -+ creq = &Request{ -+ Service: service, -+ Method: method, -+ Payload: payload, -+ // TODO: metadata from context -+ } -+ -+ cresp = &Response{} -+ ) -+ -+ if metadata, ok := GetMetadata(ctx); ok { -+ metadata.setRequest(creq) -+ } -+ -+ if dl, ok := ctx.Deadline(); ok { -+ creq.TimeoutNano = time.Until(dl).Nanoseconds() -+ } -+ -+ info := &UnaryClientInfo{ -+ FullMethod: fullPath(service, method), -+ } -+ if err := c.interceptor(ctx, creq, cresp, info, c.dispatch); err != nil { -+ return err -+ } -+ -+ if err := c.codec.Unmarshal(cresp.Payload, resp); err != nil { -+ return err -+ } -+ -+ if cresp.Status != nil && cresp.Status.Code != int32(codes.OK) { -+ return status.ErrorProto(cresp.Status) -+ } -+ return nil -+} -+ -+// StreamDesc describes the stream properties, whether the stream has -+// a streaming client, a streaming server, or both -+type StreamDesc struct { -+ StreamingClient bool -+ StreamingServer bool -+} -+ -+// ClientStream is used to send or recv messages on the underlying stream -+type ClientStream interface { -+ CloseSend() error -+ SendMsg(m interface{}) error -+ RecvMsg(m interface{}) error -+} -+ -+type clientStream struct { -+ ctx context.Context -+ s *stream -+ c *Client -+ desc *StreamDesc -+ localClosed bool -+ remoteClosed bool -+} -+ -+func (cs *clientStream) CloseSend() error { -+ if !cs.desc.StreamingClient { -+ return fmt.Errorf("%w: cannot close non-streaming client", ErrProtocol) -+ } -+ if cs.localClosed { -+ return ErrStreamClosed -+ } -+ err := cs.s.send(messageTypeData, flagRemoteClosed|flagNoData, nil) -+ if err != nil { -+ return filterCloseErr(err) -+ } -+ cs.localClosed = true -+ return nil -+} -+ -+func (cs *clientStream) SendMsg(m interface{}) error { -+ if !cs.desc.StreamingClient { -+ return fmt.Errorf("%w: cannot send data from non-streaming client", ErrProtocol) -+ } -+ if cs.localClosed { -+ return ErrStreamClosed -+ } -+ -+ var ( -+ payload []byte -+ err error -+ ) -+ if m != nil { -+ payload, err = cs.c.codec.Marshal(m) -+ if err != nil { -+ return err -+ } -+ } -+ -+ err = cs.s.send(messageTypeData, 0, payload) -+ if err != nil { -+ return filterCloseErr(err) -+ } -+ -+ return nil -+} -+ -+func (cs *clientStream) RecvMsg(m interface{}) error { -+ if cs.remoteClosed { -+ return io.EOF -+ } -+ -+ var msg *streamMessage -+ select { -+ case <-cs.ctx.Done(): -+ return cs.ctx.Err() -+ case <-cs.s.recvClose: -+ // If recv has a pending message, process that first -+ select { -+ case msg = <-cs.s.recv: -+ default: -+ return cs.s.recvErr -+ } -+ case msg = <-cs.s.recv: -+ } -+ -+ if msg.header.Type == messageTypeResponse { -+ resp := &Response{} -+ err := proto.Unmarshal(msg.payload[:msg.header.Length], resp) -+ // return the payload buffer for reuse -+ cs.c.channel.putmbuf(msg.payload) -+ if err != nil { -+ return err -+ } -+ -+ if err := cs.c.codec.Unmarshal(resp.Payload, m); err != nil { -+ return err -+ } -+ -+ if resp.Status != nil && resp.Status.Code != int32(codes.OK) { -+ return status.ErrorProto(resp.Status) -+ } -+ -+ cs.c.deleteStream(cs.s) -+ cs.remoteClosed = true -+ -+ return nil -+ } else if msg.header.Type == messageTypeData { -+ if !cs.desc.StreamingServer { -+ cs.c.deleteStream(cs.s) -+ cs.remoteClosed = true -+ return fmt.Errorf("received data from non-streaming server: %w", ErrProtocol) -+ } -+ if msg.header.Flags&flagRemoteClosed == flagRemoteClosed { -+ cs.c.deleteStream(cs.s) -+ cs.remoteClosed = true -+ -+ if msg.header.Flags&flagNoData == flagNoData { -+ return io.EOF -+ } -+ } -+ -+ err := cs.c.codec.Unmarshal(msg.payload[:msg.header.Length], m) -+ cs.c.channel.putmbuf(msg.payload) -+ if err != nil { -+ return err -+ } -+ return nil -+ } -+ -+ return fmt.Errorf("unexpected %q message received: %w", msg.header.Type, ErrProtocol) -+} -+ -+// Close closes the ttrpc connection and underlying connection -+func (c *Client) Close() error { -+ c.closeOnce.Do(func() { -+ c.closed() -+ -+ c.conn.Close() -+ }) -+ return nil -+} -+ -+// UserOnCloseWait is used to block until the user's on-close callback -+// finishes. -+func (c *Client) UserOnCloseWait(ctx context.Context) error { -+ select { -+ case <-c.userCloseWaitCh: -+ return nil -+ case <-ctx.Done(): -+ return ctx.Err() -+ } -+} -+ -+func (c *Client) run() { -+ err := c.receiveLoop() -+ c.Close() -+ c.cleanupStreams(err) -+ -+ c.userCloseFunc() -+ close(c.userCloseWaitCh) -+} -+ -+func (c *Client) receiveLoop() error { -+ for { -+ select { -+ case <-c.ctx.Done(): -+ return ErrClosed -+ default: -+ var ( -+ msg = &streamMessage{} -+ err error -+ ) -+ -+ msg.header, msg.payload, err = c.channel.recv() -+ if err != nil { -+ _, ok := status.FromError(err) -+ if !ok { -+ // treat all errors that are not an rpc status as terminal. -+ // all others poison the connection. -+ return filterCloseErr(err) -+ } -+ } -+ sid := streamID(msg.header.StreamID) -+ s := c.getStream(sid) -+ if s == nil { -+ logrus.WithField("stream", sid).Errorf("ttrpc: received message on inactive stream") -+ continue -+ } -+ -+ if err != nil { -+ s.closeWithError(err) -+ } else { -+ if err := s.receive(c.ctx, msg); err != nil { -+ logrus.WithError(err).WithField("stream", sid).Errorf("ttrpc: failed to handle message") -+ } -+ } -+ } -+ } -+} -+ -+// createStream creates a new stream and registers it with the client -+// Introduce stream types for multiple or single response -+func (c *Client) createStream(flags uint8, b []byte) (*stream, error) { -+ c.streamLock.Lock() -+ -+ // Check if closed since lock acquired to prevent adding -+ // anything after cleanup completes -+ select { -+ case <-c.ctx.Done(): -+ c.streamLock.Unlock() -+ return nil, ErrClosed -+ default: -+ } -+ -+ // Stream ID should be allocated at same time -+ s := newStream(c.nextStreamID, c) -+ c.streams[s.id] = s -+ c.nextStreamID = c.nextStreamID + 2 -+ -+ c.sendLock.Lock() -+ defer c.sendLock.Unlock() -+ c.streamLock.Unlock() -+ -+ if err := c.channel.send(uint32(s.id), messageTypeRequest, flags, b); err != nil { -+ return s, filterCloseErr(err) -+ } -+ -+ return s, nil -+} -+ -+func (c *Client) deleteStream(s *stream) { -+ c.streamLock.Lock() -+ delete(c.streams, s.id) -+ c.streamLock.Unlock() -+ s.closeWithError(nil) -+} -+ -+func (c *Client) getStream(sid streamID) *stream { -+ c.streamLock.RLock() -+ s := c.streams[sid] -+ c.streamLock.RUnlock() -+ return s -+} -+ -+func (c *Client) cleanupStreams(err error) { -+ c.streamLock.Lock() -+ defer c.streamLock.Unlock() -+ -+ for sid, s := range c.streams { -+ s.closeWithError(err) -+ delete(c.streams, sid) -+ } -+} -+ -+// filterCloseErr rewrites EOF and EPIPE errors to ErrClosed. Use when -+// returning from call or handling errors from main read loop. -+// -+// This purposely ignores errors with a wrapped cause. -+func filterCloseErr(err error) error { -+ switch { -+ case err == nil: -+ return nil -+ case err == io.EOF: -+ return ErrClosed -+ case errors.Is(err, io.ErrClosedPipe): -+ return ErrClosed -+ case errors.Is(err, io.EOF): -+ return ErrClosed -+ case strings.Contains(err.Error(), "use of closed network connection"): -+ return ErrClosed -+ default: -+ // if we have an epipe on a write or econnreset on a read , we cast to errclosed -+ var oerr *net.OpError -+ if errors.As(err, &oerr) { -+ if (oerr.Op == "write" && errors.Is(err, syscall.EPIPE)) || -+ (oerr.Op == "read" && errors.Is(err, syscall.ECONNRESET)) { -+ return ErrClosed -+ } -+ } -+ } -+ -+ return err -+} -+ -+// NewStream creates a new stream with the given stream descriptor to the -+// specified service and method. If not a streaming client, the request object -+// may be provided. -+func (c *Client) NewStream(ctx context.Context, desc *StreamDesc, service, method string, req interface{}) (ClientStream, error) { -+ var payload []byte -+ if req != nil { -+ var err error -+ payload, err = c.codec.Marshal(req) -+ if err != nil { -+ return nil, err -+ } -+ } -+ -+ request := &Request{ -+ Service: service, -+ Method: method, -+ Payload: payload, -+ // TODO: metadata from context -+ } -+ p, err := c.codec.Marshal(request) -+ if err != nil { -+ return nil, err -+ } -+ -+ var flags uint8 -+ if desc.StreamingClient { -+ flags = flagRemoteOpen -+ } else { -+ flags = flagRemoteClosed -+ } -+ s, err := c.createStream(flags, p) -+ if err != nil { -+ return nil, err -+ } -+ -+ return &clientStream{ -+ ctx: ctx, -+ s: s, -+ c: c, -+ desc: desc, -+ }, nil -+} -+ -+func (c *Client) dispatch(ctx context.Context, req *Request, resp *Response) error { -+ p, err := c.codec.Marshal(req) -+ if err != nil { -+ return err -+ } -+ -+ s, err := c.createStream(0, p) -+ if err != nil { -+ return err -+ } -+ defer c.deleteStream(s) -+ -+ var msg *streamMessage -+ select { -+ case <-ctx.Done(): -+ return ctx.Err() -+ case <-c.ctx.Done(): -+ return ErrClosed -+ case <-s.recvClose: -+ // If recv has a pending message, process that first -+ select { -+ case msg = <-s.recv: -+ default: -+ return s.recvErr -+ } -+ case msg = <-s.recv: -+ } -+ -+ if msg.header.Type == messageTypeResponse { -+ err = proto.Unmarshal(msg.payload[:msg.header.Length], resp) -+ } else { -+ err = fmt.Errorf("unexpected %q message received: %w", msg.header.Type, ErrProtocol) -+ } -+ -+ // return the payload buffer for reuse -+ c.channel.putmbuf(msg.payload) -+ -+ return err -+} -diff --git a/vendor/github.com/containerd/ttrpc/codec.go b/vendor/github.com/containerd/ttrpc/codec.go -new file mode 100755 -index 0000000..3e82722 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/codec.go -@@ -0,0 +1,43 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "fmt" -+ -+ "google.golang.org/protobuf/proto" -+) -+ -+type codec struct{} -+ -+func (c codec) Marshal(msg interface{}) ([]byte, error) { -+ switch v := msg.(type) { -+ case proto.Message: -+ return proto.Marshal(v) -+ default: -+ return nil, fmt.Errorf("ttrpc: cannot marshal unknown type: %T", msg) -+ } -+} -+ -+func (c codec) Unmarshal(p []byte, msg interface{}) error { -+ switch v := msg.(type) { -+ case proto.Message: -+ return proto.Unmarshal(p, v) -+ default: -+ return fmt.Errorf("ttrpc: cannot unmarshal into unknown type: %T", msg) -+ } -+} -diff --git a/vendor/github.com/containerd/ttrpc/config.go b/vendor/github.com/containerd/ttrpc/config.go -new file mode 100755 -index 0000000..f401f67 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/config.go -@@ -0,0 +1,86 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "context" -+ "errors" -+) -+ -+type serverConfig struct { -+ handshaker Handshaker -+ interceptor UnaryServerInterceptor -+} -+ -+// ServerOpt for configuring a ttrpc server -+type ServerOpt func(*serverConfig) error -+ -+// WithServerHandshaker can be passed to NewServer to ensure that the -+// handshaker is called before every connection attempt. -+// -+// Only one handshaker is allowed per server. -+func WithServerHandshaker(handshaker Handshaker) ServerOpt { -+ return func(c *serverConfig) error { -+ if c.handshaker != nil { -+ return errors.New("only one handshaker allowed per server") -+ } -+ c.handshaker = handshaker -+ return nil -+ } -+} -+ -+// WithUnaryServerInterceptor sets the provided interceptor on the server -+func WithUnaryServerInterceptor(i UnaryServerInterceptor) ServerOpt { -+ return func(c *serverConfig) error { -+ if c.interceptor != nil { -+ return errors.New("only one unchained interceptor allowed per server") -+ } -+ c.interceptor = i -+ return nil -+ } -+} -+ -+// WithChainUnaryServerInterceptor sets the provided chain of server interceptors -+func WithChainUnaryServerInterceptor(interceptors ...UnaryServerInterceptor) ServerOpt { -+ return func(c *serverConfig) error { -+ if len(interceptors) == 0 { -+ return nil -+ } -+ if c.interceptor != nil { -+ interceptors = append([]UnaryServerInterceptor{c.interceptor}, interceptors...) -+ } -+ c.interceptor = func( -+ ctx context.Context, -+ unmarshal Unmarshaler, -+ info *UnaryServerInfo, -+ method Method) (interface{}, error) { -+ return interceptors[0](ctx, unmarshal, info, -+ chainUnaryServerInterceptors(info, method, interceptors[1:])) -+ } -+ return nil -+ } -+} -+ -+func chainUnaryServerInterceptors(info *UnaryServerInfo, method Method, interceptors []UnaryServerInterceptor) Method { -+ if len(interceptors) == 0 { -+ return method -+ } -+ return func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { -+ return interceptors[0](ctx, unmarshal, info, -+ chainUnaryServerInterceptors(info, method, interceptors[1:])) -+ } -+} -diff --git a/vendor/github.com/containerd/ttrpc/doc.go b/vendor/github.com/containerd/ttrpc/doc.go -new file mode 100755 -index 0000000..d80cd42 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/doc.go -@@ -0,0 +1,23 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+/* -+package ttrpc defines and implements a low level simple transfer protocol -+optimized for low latency and reliable connections between processes on the same -+host. The protocol uses simple framing for sending requests, responses, and data -+using multiple streams. -+*/ -+package ttrpc -diff --git a/vendor/github.com/containerd/ttrpc/errors.go b/vendor/github.com/containerd/ttrpc/errors.go -new file mode 100755 -index 0000000..ec14b79 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/errors.go -@@ -0,0 +1,34 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import "errors" -+ -+var ( -+ // ErrProtocol is a general error in the handling the protocol. -+ ErrProtocol = errors.New("protocol error") -+ -+ // ErrClosed is returned by client methods when the underlying connection is -+ // closed. -+ ErrClosed = errors.New("ttrpc: closed") -+ -+ // ErrServerClosed is returned when the Server has closed its connection. -+ ErrServerClosed = errors.New("ttrpc: server closed") -+ -+ // ErrStreamClosed is when the streaming connection is closed. -+ ErrStreamClosed = errors.New("ttrpc: stream closed") -+) -diff --git a/vendor/github.com/containerd/ttrpc/handshake.go b/vendor/github.com/containerd/ttrpc/handshake.go -new file mode 100755 -index 0000000..3c6b610 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/handshake.go -@@ -0,0 +1,50 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "context" -+ "net" -+) -+ -+// Handshaker defines the interface for connection handshakes performed on the -+// server or client when first connecting. -+type Handshaker interface { -+ // Handshake should confirm or decorate a connection that may be incoming -+ // to a server or outgoing from a client. -+ // -+ // If this returns without an error, the caller should use the connection -+ // in place of the original connection. -+ // -+ // The second return value can contain credential specific data, such as -+ // unix socket credentials or TLS information. -+ // -+ // While we currently only have implementations on the server-side, this -+ // interface should be sufficient to implement similar handshakes on the -+ // client-side. -+ Handshake(ctx context.Context, conn net.Conn) (net.Conn, interface{}, error) -+} -+ -+type handshakerFunc func(ctx context.Context, conn net.Conn) (net.Conn, interface{}, error) -+ -+func (fn handshakerFunc) Handshake(ctx context.Context, conn net.Conn) (net.Conn, interface{}, error) { -+ return fn(ctx, conn) -+} -+ -+func noopHandshake(_ context.Context, conn net.Conn) (net.Conn, interface{}, error) { -+ return conn, nil, nil -+} -diff --git a/vendor/github.com/containerd/ttrpc/interceptor.go b/vendor/github.com/containerd/ttrpc/interceptor.go -new file mode 100755 -index 0000000..7ff5e9d ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/interceptor.go -@@ -0,0 +1,65 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import "context" -+ -+// UnaryServerInfo provides information about the server request -+type UnaryServerInfo struct { -+ FullMethod string -+} -+ -+// UnaryClientInfo provides information about the client request -+type UnaryClientInfo struct { -+ FullMethod string -+} -+ -+// StreamServerInfo provides information about the server request -+type StreamServerInfo struct { -+ FullMethod string -+ StreamingClient bool -+ StreamingServer bool -+} -+ -+// Unmarshaler contains the server request data and allows it to be unmarshaled -+// into a concrete type -+type Unmarshaler func(interface{}) error -+ -+// Invoker invokes the client's request and response from the ttrpc server -+type Invoker func(context.Context, *Request, *Response) error -+ -+// UnaryServerInterceptor specifies the interceptor function for server request/response -+type UnaryServerInterceptor func(context.Context, Unmarshaler, *UnaryServerInfo, Method) (interface{}, error) -+ -+// UnaryClientInterceptor specifies the interceptor function for client request/response -+type UnaryClientInterceptor func(context.Context, *Request, *Response, *UnaryClientInfo, Invoker) error -+ -+func defaultServerInterceptor(ctx context.Context, unmarshal Unmarshaler, _ *UnaryServerInfo, method Method) (interface{}, error) { -+ return method(ctx, unmarshal) -+} -+ -+func defaultClientInterceptor(ctx context.Context, req *Request, resp *Response, _ *UnaryClientInfo, invoker Invoker) error { -+ return invoker(ctx, req, resp) -+} -+ -+type StreamServerInterceptor func(context.Context, StreamServer, *StreamServerInfo, StreamHandler) (interface{}, error) -+ -+func defaultStreamServerInterceptor(ctx context.Context, ss StreamServer, _ *StreamServerInfo, stream StreamHandler) (interface{}, error) { -+ return stream(ctx, ss) -+} -+ -+type StreamClientInterceptor func(context.Context) -diff --git a/vendor/github.com/containerd/ttrpc/metadata.go b/vendor/github.com/containerd/ttrpc/metadata.go -new file mode 100755 -index 0000000..ce8c0d1 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/metadata.go -@@ -0,0 +1,107 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "context" -+ "strings" -+) -+ -+// MD is the user type for ttrpc metadata -+type MD map[string][]string -+ -+// Get returns the metadata for a given key when they exist. -+// If there is no metadata, a nil slice and false are returned. -+func (m MD) Get(key string) ([]string, bool) { -+ key = strings.ToLower(key) -+ list, ok := m[key] -+ if !ok || len(list) == 0 { -+ return nil, false -+ } -+ -+ return list, true -+} -+ -+// Set sets the provided values for a given key. -+// The values will overwrite any existing values. -+// If no values provided, a key will be deleted. -+func (m MD) Set(key string, values ...string) { -+ key = strings.ToLower(key) -+ if len(values) == 0 { -+ delete(m, key) -+ return -+ } -+ m[key] = values -+} -+ -+// Append appends additional values to the given key. -+func (m MD) Append(key string, values ...string) { -+ key = strings.ToLower(key) -+ if len(values) == 0 { -+ return -+ } -+ current, ok := m[key] -+ if ok { -+ m.Set(key, append(current, values...)...) -+ } else { -+ m.Set(key, values...) -+ } -+} -+ -+func (m MD) setRequest(r *Request) { -+ for k, values := range m { -+ for _, v := range values { -+ r.Metadata = append(r.Metadata, &KeyValue{ -+ Key: k, -+ Value: v, -+ }) -+ } -+ } -+} -+ -+func (m MD) fromRequest(r *Request) { -+ for _, kv := range r.Metadata { -+ m[kv.Key] = append(m[kv.Key], kv.Value) -+ } -+} -+ -+type metadataKey struct{} -+ -+// GetMetadata retrieves metadata from context.Context (previously attached with WithMetadata) -+func GetMetadata(ctx context.Context) (MD, bool) { -+ metadata, ok := ctx.Value(metadataKey{}).(MD) -+ return metadata, ok -+} -+ -+// GetMetadataValue gets a specific metadata value by name from context.Context -+func GetMetadataValue(ctx context.Context, name string) (string, bool) { -+ metadata, ok := GetMetadata(ctx) -+ if !ok { -+ return "", false -+ } -+ -+ if list, ok := metadata.Get(name); ok { -+ return list[0], true -+ } -+ -+ return "", false -+} -+ -+// WithMetadata attaches metadata map to a context.Context -+func WithMetadata(ctx context.Context, md MD) context.Context { -+ return context.WithValue(ctx, metadataKey{}, md) -+} -diff --git a/vendor/github.com/containerd/ttrpc/request.pb.go b/vendor/github.com/containerd/ttrpc/request.pb.go -new file mode 100755 -index 0000000..3921ae5 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/request.pb.go -@@ -0,0 +1,396 @@ -+// Code generated by protoc-gen-go. DO NOT EDIT. -+// versions: -+// protoc-gen-go v1.28.1 -+// protoc v3.20.1 -+// source: github.com/containerd/ttrpc/request.proto -+ -+package ttrpc -+ -+import ( -+ status "google.golang.org/genproto/googleapis/rpc/status" -+ protoreflect "google.golang.org/protobuf/reflect/protoreflect" -+ protoimpl "google.golang.org/protobuf/runtime/protoimpl" -+ reflect "reflect" -+ sync "sync" -+) -+ -+const ( -+ // Verify that this generated code is sufficiently up-to-date. -+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) -+ // Verify that runtime/protoimpl is sufficiently up-to-date. -+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -+) -+ -+type Request struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` -+ Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"` -+ Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` -+ TimeoutNano int64 `protobuf:"varint,4,opt,name=timeout_nano,json=timeoutNano,proto3" json:"timeout_nano,omitempty"` -+ Metadata []*KeyValue `protobuf:"bytes,5,rep,name=metadata,proto3" json:"metadata,omitempty"` -+} -+ -+func (x *Request) Reset() { -+ *x = Request{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_github_com_containerd_ttrpc_request_proto_msgTypes[0] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Request) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Request) ProtoMessage() {} -+ -+func (x *Request) ProtoReflect() protoreflect.Message { -+ mi := &file_github_com_containerd_ttrpc_request_proto_msgTypes[0] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Request.ProtoReflect.Descriptor instead. -+func (*Request) Descriptor() ([]byte, []int) { -+ return file_github_com_containerd_ttrpc_request_proto_rawDescGZIP(), []int{0} -+} -+ -+func (x *Request) GetService() string { -+ if x != nil { -+ return x.Service -+ } -+ return "" -+} -+ -+func (x *Request) GetMethod() string { -+ if x != nil { -+ return x.Method -+ } -+ return "" -+} -+ -+func (x *Request) GetPayload() []byte { -+ if x != nil { -+ return x.Payload -+ } -+ return nil -+} -+ -+func (x *Request) GetTimeoutNano() int64 { -+ if x != nil { -+ return x.TimeoutNano -+ } -+ return 0 -+} -+ -+func (x *Request) GetMetadata() []*KeyValue { -+ if x != nil { -+ return x.Metadata -+ } -+ return nil -+} -+ -+type Response struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` -+ Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` -+} -+ -+func (x *Response) Reset() { -+ *x = Response{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_github_com_containerd_ttrpc_request_proto_msgTypes[1] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Response) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Response) ProtoMessage() {} -+ -+func (x *Response) ProtoReflect() protoreflect.Message { -+ mi := &file_github_com_containerd_ttrpc_request_proto_msgTypes[1] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Response.ProtoReflect.Descriptor instead. -+func (*Response) Descriptor() ([]byte, []int) { -+ return file_github_com_containerd_ttrpc_request_proto_rawDescGZIP(), []int{1} -+} -+ -+func (x *Response) GetStatus() *status.Status { -+ if x != nil { -+ return x.Status -+ } -+ return nil -+} -+ -+func (x *Response) GetPayload() []byte { -+ if x != nil { -+ return x.Payload -+ } -+ return nil -+} -+ -+type StringList struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ List []string `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"` -+} -+ -+func (x *StringList) Reset() { -+ *x = StringList{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_github_com_containerd_ttrpc_request_proto_msgTypes[2] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *StringList) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*StringList) ProtoMessage() {} -+ -+func (x *StringList) ProtoReflect() protoreflect.Message { -+ mi := &file_github_com_containerd_ttrpc_request_proto_msgTypes[2] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use StringList.ProtoReflect.Descriptor instead. -+func (*StringList) Descriptor() ([]byte, []int) { -+ return file_github_com_containerd_ttrpc_request_proto_rawDescGZIP(), []int{2} -+} -+ -+func (x *StringList) GetList() []string { -+ if x != nil { -+ return x.List -+ } -+ return nil -+} -+ -+type KeyValue struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` -+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *KeyValue) Reset() { -+ *x = KeyValue{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_github_com_containerd_ttrpc_request_proto_msgTypes[3] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *KeyValue) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*KeyValue) ProtoMessage() {} -+ -+func (x *KeyValue) ProtoReflect() protoreflect.Message { -+ mi := &file_github_com_containerd_ttrpc_request_proto_msgTypes[3] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use KeyValue.ProtoReflect.Descriptor instead. -+func (*KeyValue) Descriptor() ([]byte, []int) { -+ return file_github_com_containerd_ttrpc_request_proto_rawDescGZIP(), []int{3} -+} -+ -+func (x *KeyValue) GetKey() string { -+ if x != nil { -+ return x.Key -+ } -+ return "" -+} -+ -+func (x *KeyValue) GetValue() string { -+ if x != nil { -+ return x.Value -+ } -+ return "" -+} -+ -+var File_github_com_containerd_ttrpc_request_proto protoreflect.FileDescriptor -+ -+var file_github_com_containerd_ttrpc_request_proto_rawDesc = []byte{ -+ 0x0a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, -+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x74, 0x74, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, -+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x74, 0x74, 0x72, -+ 0x70, 0x63, 0x1a, 0x12, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, -+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa5, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, -+ 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, -+ 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, -+ 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, -+ 0x74, 0x68, 0x6f, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, -+ 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x21, -+ 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x04, -+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x61, 0x6e, -+ 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x4b, 0x65, 0x79, 0x56, -+ 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x45, -+ 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x73, 0x74, -+ 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x53, 0x74, 0x61, -+ 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, -+ 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, -+ 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x20, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, -+ 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, -+ 0x09, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x32, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, -+ 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, -+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1d, 0x5a, 0x1b, 0x67, -+ 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, -+ 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x74, 0x74, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, -+ 0x6f, 0x33, -+} -+ -+var ( -+ file_github_com_containerd_ttrpc_request_proto_rawDescOnce sync.Once -+ file_github_com_containerd_ttrpc_request_proto_rawDescData = file_github_com_containerd_ttrpc_request_proto_rawDesc -+) -+ -+func file_github_com_containerd_ttrpc_request_proto_rawDescGZIP() []byte { -+ file_github_com_containerd_ttrpc_request_proto_rawDescOnce.Do(func() { -+ file_github_com_containerd_ttrpc_request_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_ttrpc_request_proto_rawDescData) -+ }) -+ return file_github_com_containerd_ttrpc_request_proto_rawDescData -+} -+ -+var file_github_com_containerd_ttrpc_request_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -+var file_github_com_containerd_ttrpc_request_proto_goTypes = []interface{}{ -+ (*Request)(nil), // 0: ttrpc.Request -+ (*Response)(nil), // 1: ttrpc.Response -+ (*StringList)(nil), // 2: ttrpc.StringList -+ (*KeyValue)(nil), // 3: ttrpc.KeyValue -+ (*status.Status)(nil), // 4: Status -+} -+var file_github_com_containerd_ttrpc_request_proto_depIdxs = []int32{ -+ 3, // 0: ttrpc.Request.metadata:type_name -> ttrpc.KeyValue -+ 4, // 1: ttrpc.Response.status:type_name -> Status -+ 2, // [2:2] is the sub-list for method output_type -+ 2, // [2:2] is the sub-list for method input_type -+ 2, // [2:2] is the sub-list for extension type_name -+ 2, // [2:2] is the sub-list for extension extendee -+ 0, // [0:2] is the sub-list for field type_name -+} -+ -+func init() { file_github_com_containerd_ttrpc_request_proto_init() } -+func file_github_com_containerd_ttrpc_request_proto_init() { -+ if File_github_com_containerd_ttrpc_request_proto != nil { -+ return -+ } -+ if !protoimpl.UnsafeEnabled { -+ file_github_com_containerd_ttrpc_request_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Request); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_github_com_containerd_ttrpc_request_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Response); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_github_com_containerd_ttrpc_request_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*StringList); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_github_com_containerd_ttrpc_request_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*KeyValue); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ } -+ type x struct{} -+ out := protoimpl.TypeBuilder{ -+ File: protoimpl.DescBuilder{ -+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), -+ RawDescriptor: file_github_com_containerd_ttrpc_request_proto_rawDesc, -+ NumEnums: 0, -+ NumMessages: 4, -+ NumExtensions: 0, -+ NumServices: 0, -+ }, -+ GoTypes: file_github_com_containerd_ttrpc_request_proto_goTypes, -+ DependencyIndexes: file_github_com_containerd_ttrpc_request_proto_depIdxs, -+ MessageInfos: file_github_com_containerd_ttrpc_request_proto_msgTypes, -+ }.Build() -+ File_github_com_containerd_ttrpc_request_proto = out.File -+ file_github_com_containerd_ttrpc_request_proto_rawDesc = nil -+ file_github_com_containerd_ttrpc_request_proto_goTypes = nil -+ file_github_com_containerd_ttrpc_request_proto_depIdxs = nil -+} -diff --git a/vendor/github.com/containerd/ttrpc/request.proto b/vendor/github.com/containerd/ttrpc/request.proto -new file mode 100755 -index 0000000..37da334 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/request.proto -@@ -0,0 +1,29 @@ -+syntax = "proto3"; -+ -+package ttrpc; -+ -+import "proto/status.proto"; -+ -+option go_package = "github.com/containerd/ttrpc"; -+ -+message Request { -+ string service = 1; -+ string method = 2; -+ bytes payload = 3; -+ int64 timeout_nano = 4; -+ repeated KeyValue metadata = 5; -+} -+ -+message Response { -+ Status status = 1; -+ bytes payload = 2; -+} -+ -+message StringList { -+ repeated string list = 1; -+} -+ -+message KeyValue { -+ string key = 1; -+ string value = 2; -+} -diff --git a/vendor/github.com/containerd/ttrpc/server.go b/vendor/github.com/containerd/ttrpc/server.go -new file mode 100755 -index 0000000..7af59f8 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/server.go -@@ -0,0 +1,579 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "context" -+ "errors" -+ "io" -+ "math/rand" -+ "net" -+ "sync" -+ "sync/atomic" -+ "syscall" -+ "time" -+ -+ "github.com/sirupsen/logrus" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/status" -+) -+ -+type Server struct { -+ config *serverConfig -+ services *serviceSet -+ codec codec -+ -+ mu sync.Mutex -+ listeners map[net.Listener]struct{} -+ connections map[*serverConn]struct{} // all connections to current state -+ done chan struct{} // marks point at which we stop serving requests -+} -+ -+func NewServer(opts ...ServerOpt) (*Server, error) { -+ config := &serverConfig{} -+ for _, opt := range opts { -+ if err := opt(config); err != nil { -+ return nil, err -+ } -+ } -+ if config.interceptor == nil { -+ config.interceptor = defaultServerInterceptor -+ } -+ -+ return &Server{ -+ config: config, -+ services: newServiceSet(config.interceptor), -+ done: make(chan struct{}), -+ listeners: make(map[net.Listener]struct{}), -+ connections: make(map[*serverConn]struct{}), -+ }, nil -+} -+ -+// Register registers a map of methods to method handlers -+// TODO: Remove in 2.0, does not support streams -+func (s *Server) Register(name string, methods map[string]Method) { -+ s.services.register(name, &ServiceDesc{Methods: methods}) -+} -+ -+func (s *Server) RegisterService(name string, desc *ServiceDesc) { -+ s.services.register(name, desc) -+} -+ -+func (s *Server) Serve(ctx context.Context, l net.Listener) error { -+ s.addListener(l) -+ defer s.closeListener(l) -+ -+ var ( -+ backoff time.Duration -+ handshaker = s.config.handshaker -+ ) -+ -+ if handshaker == nil { -+ handshaker = handshakerFunc(noopHandshake) -+ } -+ -+ for { -+ conn, err := l.Accept() -+ if err != nil { -+ select { -+ case <-s.done: -+ return ErrServerClosed -+ default: -+ } -+ -+ if terr, ok := err.(interface { -+ Temporary() bool -+ }); ok && terr.Temporary() { -+ if backoff == 0 { -+ backoff = time.Millisecond -+ } else { -+ backoff *= 2 -+ } -+ -+ if max := time.Second; backoff > max { -+ backoff = max -+ } -+ -+ sleep := time.Duration(rand.Int63n(int64(backoff))) -+ logrus.WithError(err).Errorf("ttrpc: failed accept; backoff %v", sleep) -+ time.Sleep(sleep) -+ continue -+ } -+ -+ return err -+ } -+ -+ backoff = 0 -+ -+ approved, handshake, err := handshaker.Handshake(ctx, conn) -+ if err != nil { -+ logrus.WithError(err).Error("ttrpc: refusing connection after handshake") -+ conn.Close() -+ continue -+ } -+ -+ sc, err := s.newConn(approved, handshake) -+ if err != nil { -+ logrus.WithError(err).Error("ttrpc: create connection failed") -+ conn.Close() -+ continue -+ } -+ -+ go sc.run(ctx) -+ } -+} -+ -+func (s *Server) Shutdown(ctx context.Context) error { -+ s.mu.Lock() -+ select { -+ case <-s.done: -+ default: -+ // protected by mutex -+ close(s.done) -+ } -+ lnerr := s.closeListeners() -+ s.mu.Unlock() -+ -+ ticker := time.NewTicker(200 * time.Millisecond) -+ defer ticker.Stop() -+ for { -+ s.closeIdleConns() -+ -+ if s.countConnection() == 0 { -+ break -+ } -+ -+ select { -+ case <-ctx.Done(): -+ return ctx.Err() -+ case <-ticker.C: -+ } -+ } -+ -+ return lnerr -+} -+ -+// Close the server without waiting for active connections. -+func (s *Server) Close() error { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ -+ select { -+ case <-s.done: -+ default: -+ // protected by mutex -+ close(s.done) -+ } -+ -+ err := s.closeListeners() -+ for c := range s.connections { -+ c.close() -+ delete(s.connections, c) -+ } -+ -+ return err -+} -+ -+func (s *Server) addListener(l net.Listener) { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ s.listeners[l] = struct{}{} -+} -+ -+func (s *Server) closeListener(l net.Listener) error { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ -+ return s.closeListenerLocked(l) -+} -+ -+func (s *Server) closeListenerLocked(l net.Listener) error { -+ defer delete(s.listeners, l) -+ return l.Close() -+} -+ -+func (s *Server) closeListeners() error { -+ var err error -+ for l := range s.listeners { -+ if cerr := s.closeListenerLocked(l); cerr != nil && err == nil { -+ err = cerr -+ } -+ } -+ return err -+} -+ -+func (s *Server) addConnection(c *serverConn) error { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ -+ select { -+ case <-s.done: -+ return ErrServerClosed -+ default: -+ } -+ -+ s.connections[c] = struct{}{} -+ return nil -+} -+ -+func (s *Server) delConnection(c *serverConn) { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ -+ delete(s.connections, c) -+} -+ -+func (s *Server) countConnection() int { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ -+ return len(s.connections) -+} -+ -+func (s *Server) closeIdleConns() { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ -+ for c := range s.connections { -+ if st, ok := c.getState(); !ok || st == connStateActive { -+ continue -+ } -+ c.close() -+ delete(s.connections, c) -+ } -+} -+ -+type connState int -+ -+const ( -+ connStateActive = iota + 1 // outstanding requests -+ connStateIdle // no requests -+ connStateClosed // closed connection -+) -+ -+func (cs connState) String() string { -+ switch cs { -+ case connStateActive: -+ return "active" -+ case connStateIdle: -+ return "idle" -+ case connStateClosed: -+ return "closed" -+ default: -+ return "unknown" -+ } -+} -+ -+func (s *Server) newConn(conn net.Conn, handshake interface{}) (*serverConn, error) { -+ c := &serverConn{ -+ server: s, -+ conn: conn, -+ handshake: handshake, -+ shutdown: make(chan struct{}), -+ } -+ c.setState(connStateIdle) -+ if err := s.addConnection(c); err != nil { -+ c.close() -+ return nil, err -+ } -+ return c, nil -+} -+ -+type serverConn struct { -+ server *Server -+ conn net.Conn -+ handshake interface{} // data from handshake, not used for now -+ state atomic.Value -+ -+ shutdownOnce sync.Once -+ shutdown chan struct{} // forced shutdown, used by close -+} -+ -+func (c *serverConn) getState() (connState, bool) { -+ cs, ok := c.state.Load().(connState) -+ return cs, ok -+} -+ -+func (c *serverConn) setState(newstate connState) { -+ c.state.Store(newstate) -+} -+ -+func (c *serverConn) close() error { -+ c.shutdownOnce.Do(func() { -+ close(c.shutdown) -+ }) -+ -+ return nil -+} -+ -+func (c *serverConn) run(sctx context.Context) { -+ type ( -+ response struct { -+ id uint32 -+ status *status.Status -+ data []byte -+ closeStream bool -+ streaming bool -+ } -+ ) -+ -+ var ( -+ ch = newChannel(c.conn) -+ ctx, cancel = context.WithCancel(sctx) -+ state connState = connStateIdle -+ responses = make(chan response) -+ recvErr = make(chan error, 1) -+ done = make(chan struct{}) -+ streams = sync.Map{} -+ active int32 -+ lastStreamID uint32 -+ ) -+ -+ defer c.conn.Close() -+ defer cancel() -+ defer close(done) -+ defer c.server.delConnection(c) -+ -+ sendStatus := func(id uint32, st *status.Status) bool { -+ select { -+ case responses <- response{ -+ // even though we've had an invalid stream id, we send it -+ // back on the same stream id so the client knows which -+ // stream id was bad. -+ id: id, -+ status: st, -+ closeStream: true, -+ }: -+ return true -+ case <-c.shutdown: -+ return false -+ case <-done: -+ return false -+ } -+ } -+ -+ go func(recvErr chan error) { -+ defer close(recvErr) -+ for { -+ select { -+ case <-c.shutdown: -+ return -+ case <-done: -+ return -+ default: // proceed -+ } -+ -+ mh, p, err := ch.recv() -+ if err != nil { -+ status, ok := status.FromError(err) -+ if !ok { -+ recvErr <- err -+ return -+ } -+ -+ // in this case, we send an error for that particular message -+ // when the status is defined. -+ if !sendStatus(mh.StreamID, status) { -+ return -+ } -+ -+ continue -+ } -+ -+ if mh.StreamID%2 != 1 { -+ // enforce odd client initiated identifiers. -+ if !sendStatus(mh.StreamID, status.Newf(codes.InvalidArgument, "StreamID must be odd for client initiated streams")) { -+ return -+ } -+ continue -+ } -+ -+ if mh.Type == messageTypeData { -+ i, ok := streams.Load(mh.StreamID) -+ if !ok { -+ if !sendStatus(mh.StreamID, status.Newf(codes.InvalidArgument, "StreamID is no longer active")) { -+ return -+ } -+ } -+ sh := i.(*streamHandler) -+ if mh.Flags&flagNoData != flagNoData { -+ unmarshal := func(obj interface{}) error { -+ err := protoUnmarshal(p, obj) -+ ch.putmbuf(p) -+ return err -+ } -+ -+ if err := sh.data(unmarshal); err != nil { -+ if !sendStatus(mh.StreamID, status.Newf(codes.InvalidArgument, "data handling error: %v", err)) { -+ return -+ } -+ } -+ } -+ -+ if mh.Flags&flagRemoteClosed == flagRemoteClosed { -+ sh.closeSend() -+ if len(p) > 0 { -+ if !sendStatus(mh.StreamID, status.Newf(codes.InvalidArgument, "data close message cannot include data")) { -+ return -+ } -+ } -+ } -+ } else if mh.Type == messageTypeRequest { -+ if mh.StreamID <= lastStreamID { -+ // enforce odd client initiated identifiers. -+ if !sendStatus(mh.StreamID, status.Newf(codes.InvalidArgument, "StreamID cannot be re-used and must increment")) { -+ return -+ } -+ continue -+ -+ } -+ lastStreamID = mh.StreamID -+ -+ // TODO: Make request type configurable -+ // Unmarshaller which takes in a byte array and returns an interface? -+ var req Request -+ if err := c.server.codec.Unmarshal(p, &req); err != nil { -+ ch.putmbuf(p) -+ if !sendStatus(mh.StreamID, status.Newf(codes.InvalidArgument, "unmarshal request error: %v", err)) { -+ return -+ } -+ continue -+ } -+ ch.putmbuf(p) -+ -+ id := mh.StreamID -+ respond := func(status *status.Status, data []byte, streaming, closeStream bool) error { -+ select { -+ case responses <- response{ -+ id: id, -+ status: status, -+ data: data, -+ closeStream: closeStream, -+ streaming: streaming, -+ }: -+ case <-done: -+ return ErrClosed -+ } -+ return nil -+ } -+ sh, err := c.server.services.handle(ctx, &req, respond) -+ if err != nil { -+ status, _ := status.FromError(err) -+ if !sendStatus(mh.StreamID, status) { -+ return -+ } -+ continue -+ } -+ -+ streams.Store(id, sh) -+ atomic.AddInt32(&active, 1) -+ } -+ // TODO: else we must ignore this for future compat. log this? -+ } -+ }(recvErr) -+ -+ for { -+ var ( -+ newstate connState -+ shutdown chan struct{} -+ ) -+ -+ activeN := atomic.LoadInt32(&active) -+ if activeN > 0 { -+ newstate = connStateActive -+ shutdown = nil -+ } else { -+ newstate = connStateIdle -+ shutdown = c.shutdown // only enable this branch in idle mode -+ } -+ if newstate != state { -+ c.setState(newstate) -+ state = newstate -+ } -+ -+ select { -+ case response := <-responses: -+ if !response.streaming || response.status.Code() != codes.OK { -+ p, err := c.server.codec.Marshal(&Response{ -+ Status: response.status.Proto(), -+ Payload: response.data, -+ }) -+ if err != nil { -+ logrus.WithError(err).Error("failed marshaling response") -+ return -+ } -+ -+ if err := ch.send(response.id, messageTypeResponse, 0, p); err != nil { -+ logrus.WithError(err).Error("failed sending message on channel") -+ return -+ } -+ } else { -+ var flags uint8 -+ if response.closeStream { -+ flags = flagRemoteClosed -+ } -+ if response.data == nil { -+ flags = flags | flagNoData -+ } -+ if err := ch.send(response.id, messageTypeData, flags, response.data); err != nil { -+ logrus.WithError(err).Error("failed sending message on channel") -+ return -+ } -+ } -+ -+ if response.closeStream { -+ // The ttrpc protocol currently does not support the case where -+ // the server is localClosed but not remoteClosed. Once the server -+ // is closing, the whole stream may be considered finished -+ streams.Delete(response.id) -+ atomic.AddInt32(&active, -1) -+ } -+ case err := <-recvErr: -+ // TODO(stevvooe): Not wildly clear what we should do in this -+ // branch. Basically, it means that we are no longer receiving -+ // requests due to a terminal error. -+ recvErr = nil // connection is now "closing" -+ if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) || errors.Is(err, syscall.ECONNRESET) { -+ // The client went away and we should stop processing -+ // requests, so that the client connection is closed -+ return -+ } -+ logrus.WithError(err).Error("error receiving message") -+ // else, initiate shutdown -+ case <-shutdown: -+ return -+ } -+ } -+} -+ -+var noopFunc = func() {} -+ -+func getRequestContext(ctx context.Context, req *Request) (retCtx context.Context, cancel func()) { -+ if len(req.Metadata) > 0 { -+ md := MD{} -+ md.fromRequest(req) -+ ctx = WithMetadata(ctx, md) -+ } -+ -+ cancel = noopFunc -+ if req.TimeoutNano == 0 { -+ return ctx, cancel -+ } -+ -+ ctx, cancel = context.WithTimeout(ctx, time.Duration(req.TimeoutNano)) -+ return ctx, cancel -+} -diff --git a/vendor/github.com/containerd/ttrpc/services.go b/vendor/github.com/containerd/ttrpc/services.go -new file mode 100755 -index 0000000..6d092bf ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/services.go -@@ -0,0 +1,279 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ "io" -+ "os" -+ "path" -+ "unsafe" -+ -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/status" -+ "google.golang.org/protobuf/proto" -+) -+ -+type Method func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) -+ -+type StreamHandler func(context.Context, StreamServer) (interface{}, error) -+ -+type Stream struct { -+ Handler StreamHandler -+ StreamingClient bool -+ StreamingServer bool -+} -+ -+type ServiceDesc struct { -+ Methods map[string]Method -+ Streams map[string]Stream -+} -+ -+type serviceSet struct { -+ services map[string]*ServiceDesc -+ unaryInterceptor UnaryServerInterceptor -+ streamInterceptor StreamServerInterceptor -+} -+ -+func newServiceSet(interceptor UnaryServerInterceptor) *serviceSet { -+ return &serviceSet{ -+ services: make(map[string]*ServiceDesc), -+ unaryInterceptor: interceptor, -+ streamInterceptor: defaultStreamServerInterceptor, -+ } -+} -+ -+func (s *serviceSet) register(name string, desc *ServiceDesc) { -+ if _, ok := s.services[name]; ok { -+ panic(fmt.Errorf("duplicate service %v registered", name)) -+ } -+ -+ s.services[name] = desc -+} -+ -+func (s *serviceSet) unaryCall(ctx context.Context, method Method, info *UnaryServerInfo, data []byte) (p []byte, st *status.Status) { -+ unmarshal := func(obj interface{}) error { -+ return protoUnmarshal(data, obj) -+ } -+ -+ resp, err := s.unaryInterceptor(ctx, unmarshal, info, method) -+ if err == nil { -+ if isNil(resp) { -+ err = errors.New("ttrpc: marshal called with nil") -+ } else { -+ p, err = protoMarshal(resp) -+ } -+ } -+ -+ st, ok := status.FromError(err) -+ if !ok { -+ st = status.New(convertCode(err), err.Error()) -+ } -+ -+ return p, st -+} -+ -+func (s *serviceSet) streamCall(ctx context.Context, stream StreamHandler, info *StreamServerInfo, ss StreamServer) (p []byte, st *status.Status) { -+ resp, err := s.streamInterceptor(ctx, ss, info, stream) -+ if err == nil { -+ p, err = protoMarshal(resp) -+ } -+ st, ok := status.FromError(err) -+ if !ok { -+ st = status.New(convertCode(err), err.Error()) -+ } -+ return -+} -+ -+func (s *serviceSet) handle(ctx context.Context, req *Request, respond func(*status.Status, []byte, bool, bool) error) (*streamHandler, error) { -+ srv, ok := s.services[req.Service] -+ if !ok { -+ return nil, status.Errorf(codes.Unimplemented, "service %v", req.Service) -+ } -+ -+ if method, ok := srv.Methods[req.Method]; ok { -+ go func() { -+ ctx, cancel := getRequestContext(ctx, req) -+ defer cancel() -+ -+ info := &UnaryServerInfo{ -+ FullMethod: fullPath(req.Service, req.Method), -+ } -+ p, st := s.unaryCall(ctx, method, info, req.Payload) -+ -+ respond(st, p, false, true) -+ }() -+ return nil, nil -+ } -+ if stream, ok := srv.Streams[req.Method]; ok { -+ ctx, cancel := getRequestContext(ctx, req) -+ info := &StreamServerInfo{ -+ FullMethod: fullPath(req.Service, req.Method), -+ StreamingClient: stream.StreamingClient, -+ StreamingServer: stream.StreamingServer, -+ } -+ sh := &streamHandler{ -+ ctx: ctx, -+ respond: respond, -+ recv: make(chan Unmarshaler, 5), -+ info: info, -+ } -+ go func() { -+ defer cancel() -+ p, st := s.streamCall(ctx, stream.Handler, info, sh) -+ respond(st, p, stream.StreamingServer, true) -+ }() -+ -+ // Empty proto messages serialized to 0 payloads, -+ // so signatures like: rpc Stream(google.protobuf.Empty) returns (stream Data); -+ // don't get invoked here, which causes hang on client side. -+ // See https://github.com/containerd/ttrpc/issues/126 -+ if req.Payload != nil || !info.StreamingClient { -+ unmarshal := func(obj interface{}) error { -+ return protoUnmarshal(req.Payload, obj) -+ } -+ if err := sh.data(unmarshal); err != nil { -+ return nil, err -+ } -+ } -+ -+ return sh, nil -+ } -+ return nil, status.Errorf(codes.Unimplemented, "method %v", req.Method) -+} -+ -+type streamHandler struct { -+ ctx context.Context -+ respond func(*status.Status, []byte, bool, bool) error -+ recv chan Unmarshaler -+ info *StreamServerInfo -+ -+ remoteClosed bool -+ localClosed bool -+} -+ -+func (s *streamHandler) closeSend() { -+ if !s.remoteClosed { -+ s.remoteClosed = true -+ close(s.recv) -+ } -+} -+ -+func (s *streamHandler) data(unmarshal Unmarshaler) error { -+ if s.remoteClosed { -+ return ErrStreamClosed -+ } -+ select { -+ case s.recv <- unmarshal: -+ return nil -+ case <-s.ctx.Done(): -+ return s.ctx.Err() -+ } -+} -+ -+func (s *streamHandler) SendMsg(m interface{}) error { -+ if s.localClosed { -+ return ErrStreamClosed -+ } -+ p, err := protoMarshal(m) -+ if err != nil { -+ return err -+ } -+ return s.respond(nil, p, true, false) -+} -+ -+func (s *streamHandler) RecvMsg(m interface{}) error { -+ select { -+ case unmarshal, ok := <-s.recv: -+ if !ok { -+ return io.EOF -+ } -+ return unmarshal(m) -+ case <-s.ctx.Done(): -+ return s.ctx.Err() -+ -+ } -+} -+ -+func protoUnmarshal(p []byte, obj interface{}) error { -+ switch v := obj.(type) { -+ case proto.Message: -+ if err := proto.Unmarshal(p, v); err != nil { -+ return status.Errorf(codes.Internal, "ttrpc: error unmarshalling payload: %v", err.Error()) -+ } -+ default: -+ return status.Errorf(codes.Internal, "ttrpc: error unsupported request type: %T", v) -+ } -+ return nil -+} -+ -+func protoMarshal(obj interface{}) ([]byte, error) { -+ if obj == nil { -+ return nil, nil -+ } -+ -+ switch v := obj.(type) { -+ case proto.Message: -+ r, err := proto.Marshal(v) -+ if err != nil { -+ return nil, status.Errorf(codes.Internal, "ttrpc: error marshaling payload: %v", err.Error()) -+ } -+ -+ return r, nil -+ default: -+ return nil, status.Errorf(codes.Internal, "ttrpc: error unsupported response type: %T", v) -+ } -+} -+ -+// convertCode maps stdlib go errors into grpc space. -+// -+// This is ripped from the grpc-go code base. -+func convertCode(err error) codes.Code { -+ switch err { -+ case nil: -+ return codes.OK -+ case io.EOF: -+ return codes.OutOfRange -+ case io.ErrClosedPipe, io.ErrNoProgress, io.ErrShortBuffer, io.ErrShortWrite, io.ErrUnexpectedEOF: -+ return codes.FailedPrecondition -+ case os.ErrInvalid: -+ return codes.InvalidArgument -+ case context.Canceled: -+ return codes.Canceled -+ case context.DeadlineExceeded: -+ return codes.DeadlineExceeded -+ } -+ switch { -+ case os.IsExist(err): -+ return codes.AlreadyExists -+ case os.IsNotExist(err): -+ return codes.NotFound -+ case os.IsPermission(err): -+ return codes.PermissionDenied -+ } -+ return codes.Unknown -+} -+ -+func fullPath(service, method string) string { -+ return "/" + path.Join(service, method) -+} -+ -+func isNil(resp interface{}) bool { -+ return (*[2]uintptr)(unsafe.Pointer(&resp))[1] == 0 -+} -diff --git a/vendor/github.com/containerd/ttrpc/stream.go b/vendor/github.com/containerd/ttrpc/stream.go -new file mode 100755 -index 0000000..739a4c9 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/stream.go -@@ -0,0 +1,84 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "context" -+ "sync" -+) -+ -+type streamID uint32 -+ -+type streamMessage struct { -+ header messageHeader -+ payload []byte -+} -+ -+type stream struct { -+ id streamID -+ sender sender -+ recv chan *streamMessage -+ -+ closeOnce sync.Once -+ recvErr error -+ recvClose chan struct{} -+} -+ -+func newStream(id streamID, send sender) *stream { -+ return &stream{ -+ id: id, -+ sender: send, -+ recv: make(chan *streamMessage, 1), -+ recvClose: make(chan struct{}), -+ } -+} -+ -+func (s *stream) closeWithError(err error) error { -+ s.closeOnce.Do(func() { -+ if err != nil { -+ s.recvErr = err -+ } else { -+ s.recvErr = ErrClosed -+ } -+ close(s.recvClose) -+ }) -+ return nil -+} -+ -+func (s *stream) send(mt messageType, flags uint8, b []byte) error { -+ return s.sender.send(uint32(s.id), mt, flags, b) -+} -+ -+func (s *stream) receive(ctx context.Context, msg *streamMessage) error { -+ select { -+ case <-s.recvClose: -+ return s.recvErr -+ default: -+ } -+ select { -+ case <-s.recvClose: -+ return s.recvErr -+ case s.recv <- msg: -+ return nil -+ case <-ctx.Done(): -+ return ctx.Err() -+ } -+} -+ -+type sender interface { -+ send(uint32, messageType, uint8, []byte) error -+} -diff --git a/vendor/github.com/containerd/ttrpc/stream_server.go b/vendor/github.com/containerd/ttrpc/stream_server.go -new file mode 100755 -index 0000000..b6d1ba7 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/stream_server.go -@@ -0,0 +1,22 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+type StreamServer interface { -+ SendMsg(m interface{}) error -+ RecvMsg(m interface{}) error -+} -diff --git a/vendor/github.com/containerd/ttrpc/test.proto b/vendor/github.com/containerd/ttrpc/test.proto -new file mode 100755 -index 0000000..0e114d5 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/test.proto -@@ -0,0 +1,16 @@ -+syntax = "proto3"; -+ -+package ttrpc; -+ -+option go_package = "github.com/containerd/ttrpc/internal"; -+ -+message TestPayload { -+ string foo = 1; -+ int64 deadline = 2; -+ string metadata = 3; -+} -+ -+message EchoPayload { -+ int64 seq = 1; -+ string msg = 2; -+} -diff --git a/vendor/github.com/containerd/ttrpc/unixcreds_linux.go b/vendor/github.com/containerd/ttrpc/unixcreds_linux.go -new file mode 100755 -index 0000000..c82c9f9 ---- /dev/null -+++ b/vendor/github.com/containerd/ttrpc/unixcreds_linux.go -@@ -0,0 +1,105 @@ -+/* -+ Copyright The containerd Authors. -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package ttrpc -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ "net" -+ "os" -+ "syscall" -+ -+ "golang.org/x/sys/unix" -+) -+ -+type UnixCredentialsFunc func(*unix.Ucred) error -+ -+func (fn UnixCredentialsFunc) Handshake(_ context.Context, conn net.Conn) (net.Conn, interface{}, error) { -+ uc, err := requireUnixSocket(conn) -+ if err != nil { -+ return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: require unix socket: %w", err) -+ } -+ -+ rs, err := uc.SyscallConn() -+ if err != nil { -+ return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: (net.UnixConn).SyscallConn failed: %w", err) -+ } -+ var ( -+ ucred *unix.Ucred -+ ucredErr error -+ ) -+ if err := rs.Control(func(fd uintptr) { -+ ucred, ucredErr = unix.GetsockoptUcred(int(fd), unix.SOL_SOCKET, unix.SO_PEERCRED) -+ }); err != nil { -+ return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: (*syscall.RawConn).Control failed: %w", err) -+ } -+ -+ if ucredErr != nil { -+ return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: failed to retrieve socket peer credentials: %w", ucredErr) -+ } -+ -+ if err := fn(ucred); err != nil { -+ return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: credential check failed: %w", err) -+ } -+ -+ return uc, ucred, nil -+} -+ -+// UnixSocketRequireUidGid requires specific *effective* UID/GID, rather than the real UID/GID. -+// -+// For example, if a daemon binary is owned by the root (UID 0) with SUID bit but running as an -+// unprivileged user (UID 1001), the effective UID becomes 0, and the real UID becomes 1001. -+// So calling this function with uid=0 allows a connection from effective UID 0 but rejects -+// a connection from effective UID 1001. -+// -+// See socket(7), SO_PEERCRED: "The returned credentials are those that were in effect at the time of the call to connect(2) or socketpair(2)." -+func UnixSocketRequireUidGid(uid, gid int) UnixCredentialsFunc { -+ return func(ucred *unix.Ucred) error { -+ return requireUidGid(ucred, uid, gid) -+ } -+} -+ -+func UnixSocketRequireRoot() UnixCredentialsFunc { -+ return UnixSocketRequireUidGid(0, 0) -+} -+ -+// UnixSocketRequireSameUser resolves the current effective unix user and returns a -+// UnixCredentialsFunc that will validate incoming unix connections against the -+// current credentials. -+// -+// This is useful when using abstract sockets that are accessible by all users. -+func UnixSocketRequireSameUser() UnixCredentialsFunc { -+ euid, egid := os.Geteuid(), os.Getegid() -+ return UnixSocketRequireUidGid(euid, egid) -+} -+ -+func requireUidGid(ucred *unix.Ucred, uid, gid int) error { -+ if (uid != -1 && uint32(uid) != ucred.Uid) || (gid != -1 && uint32(gid) != ucred.Gid) { -+ return fmt.Errorf("ttrpc: invalid credentials: %v", syscall.EPERM) -+ } -+ return nil -+} -+ -+func requireUnixSocket(conn net.Conn) (*net.UnixConn, error) { -+ uc, ok := conn.(*net.UnixConn) -+ if !ok { -+ return nil, errors.New("a unix socket connection is required") -+ } -+ -+ return uc, nil -+} -diff --git a/vendor/github.com/coreos/go-systemd/v22/LICENSE b/vendor/github.com/coreos/go-systemd/v22/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/coreos/go-systemd/v22/NOTICE b/vendor/github.com/coreos/go-systemd/v22/NOTICE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/coreos/go-systemd/v22/dbus/dbus.go b/vendor/github.com/coreos/go-systemd/v22/dbus/dbus.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/coreos/go-systemd/v22/dbus/methods.go b/vendor/github.com/coreos/go-systemd/v22/dbus/methods.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/coreos/go-systemd/v22/dbus/properties.go b/vendor/github.com/coreos/go-systemd/v22/dbus/properties.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/coreos/go-systemd/v22/dbus/set.go b/vendor/github.com/coreos/go-systemd/v22/dbus/set.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/coreos/go-systemd/v22/dbus/subscription.go b/vendor/github.com/coreos/go-systemd/v22/dbus/subscription.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/coreos/go-systemd/v22/dbus/subscription_set.go b/vendor/github.com/coreos/go-systemd/v22/dbus/subscription_set.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cyphar/filepath-securejoin/.travis.yml b/vendor/github.com/cyphar/filepath-securejoin/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cyphar/filepath-securejoin/LICENSE b/vendor/github.com/cyphar/filepath-securejoin/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cyphar/filepath-securejoin/README.md b/vendor/github.com/cyphar/filepath-securejoin/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cyphar/filepath-securejoin/VERSION b/vendor/github.com/cyphar/filepath-securejoin/VERSION -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cyphar/filepath-securejoin/join.go b/vendor/github.com/cyphar/filepath-securejoin/join.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cyphar/filepath-securejoin/vendor.conf b/vendor/github.com/cyphar/filepath-securejoin/vendor.conf -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/cyphar/filepath-securejoin/vfs.go b/vendor/github.com/cyphar/filepath-securejoin/vfs.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/LICENSE b/vendor/github.com/davecgh/go-spew/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/spew/bypass.go b/vendor/github.com/davecgh/go-spew/spew/bypass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go b/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/spew/common.go b/vendor/github.com/davecgh/go-spew/spew/common.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/spew/config.go b/vendor/github.com/davecgh/go-spew/spew/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/spew/doc.go b/vendor/github.com/davecgh/go-spew/spew/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/spew/dump.go b/vendor/github.com/davecgh/go-spew/spew/dump.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/spew/format.go b/vendor/github.com/davecgh/go-spew/spew/format.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/davecgh/go-spew/spew/spew.go b/vendor/github.com/davecgh/go-spew/spew/spew.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/docker/go-units/CONTRIBUTING.md b/vendor/github.com/docker/go-units/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/docker/go-units/LICENSE b/vendor/github.com/docker/go-units/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/docker/go-units/MAINTAINERS b/vendor/github.com/docker/go-units/MAINTAINERS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/docker/go-units/README.md b/vendor/github.com/docker/go-units/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/docker/go-units/circle.yml b/vendor/github.com/docker/go-units/circle.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/docker/go-units/duration.go b/vendor/github.com/docker/go-units/duration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/docker/go-units/size.go b/vendor/github.com/docker/go-units/size.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/docker/go-units/ulimit.go b/vendor/github.com/docker/go-units/ulimit.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/euank/go-kmsg-parser/LICENSE b/vendor/github.com/euank/go-kmsg-parser/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/euank/go-kmsg-parser/kmsgparser/kmsgparser.go b/vendor/github.com/euank/go-kmsg-parser/kmsgparser/kmsgparser.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/euank/go-kmsg-parser/kmsgparser/log.go b/vendor/github.com/euank/go-kmsg-parser/kmsgparser/log.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/go-logr/logr/.golangci.yaml b/vendor/github.com/go-logr/logr/.golangci.yaml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/go-logr/logr/CHANGELOG.md b/vendor/github.com/go-logr/logr/CHANGELOG.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/go-logr/logr/CONTRIBUTING.md b/vendor/github.com/go-logr/logr/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/go-logr/logr/LICENSE b/vendor/github.com/go-logr/logr/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/go-logr/logr/README.md b/vendor/github.com/go-logr/logr/README.md -old mode 100644 -new mode 100755 -index ad825f5..ab59311 ---- a/vendor/github.com/go-logr/logr/README.md -+++ b/vendor/github.com/go-logr/logr/README.md -@@ -105,14 +105,18 @@ with higher verbosity means more (and less important) logs will be generated. - There are implementations for the following logging libraries: - - - **a function** (can bridge to non-structured libraries): [funcr](https://github.com/go-logr/logr/tree/master/funcr) -+- **a testing.T** (for use in Go tests, with JSON-like output): [testr](https://github.com/go-logr/logr/tree/master/testr) - - **github.com/google/glog**: [glogr](https://github.com/go-logr/glogr) - - **k8s.io/klog** (for Kubernetes): [klogr](https://git.k8s.io/klog/klogr) -+- **a testing.T** (with klog-like text output): [ktesting](https://git.k8s.io/klog/ktesting) - - **go.uber.org/zap**: [zapr](https://github.com/go-logr/zapr) - - **log** (the Go standard library logger): [stdr](https://github.com/go-logr/stdr) - - **github.com/sirupsen/logrus**: [logrusr](https://github.com/bombsimon/logrusr) - - **github.com/wojas/genericr**: [genericr](https://github.com/wojas/genericr) (makes it easy to implement your own backend) - - **logfmt** (Heroku style [logging](https://www.brandur.org/logfmt)): [logfmtr](https://github.com/iand/logfmtr) - - **github.com/rs/zerolog**: [zerologr](https://github.com/go-logr/zerologr) -+- **github.com/go-kit/log**: [gokitlogr](https://github.com/tonglil/gokitlogr) (also compatible with github.com/go-kit/kit/log since v0.12.0) -+- **bytes.Buffer** (writing to a buffer): [bufrlogr](https://github.com/tonglil/buflogr) (useful for ensuring values were logged, like during testing) - - ## FAQ - -diff --git a/vendor/github.com/go-logr/logr/discard.go b/vendor/github.com/go-logr/logr/discard.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/go-logr/logr/logr.go b/vendor/github.com/go-logr/logr/logr.go -old mode 100644 -new mode 100755 -index 44cd398..c3b56b3 ---- a/vendor/github.com/go-logr/logr/logr.go -+++ b/vendor/github.com/go-logr/logr/logr.go -@@ -43,7 +43,9 @@ limitations under the License. - // - // Info() and Error() are very similar, but they are separate methods so that - // LogSink implementations can choose to do things like attach additional --// information (such as stack traces) on calls to Error(). -+// information (such as stack traces) on calls to Error(). Error() messages are -+// always logged, regardless of the current verbosity. If there is no error -+// instance available, passing nil is valid. - // - // Verbosity - // -@@ -53,6 +55,7 @@ limitations under the License. - // Log-lines with V-levels that are not enabled (as per the LogSink) will not - // be written. Level V(0) is the default, and logger.V(0).Info() has the same - // meaning as logger.Info(). Negative V-levels have the same meaning as V(0). -+// Error messages do not have a verbosity level and are always logged. - // - // Where we might have written: - // if flVerbose >= 2 { -@@ -112,6 +115,15 @@ limitations under the License. - // may be any Go value, but how the value is formatted is determined by the - // LogSink implementation. - // -+// Logger instances are meant to be passed around by value. Code that receives -+// such a value can call its methods without having to check whether the -+// instance is ready for use. -+// -+// Calling methods with the null logger (Logger{}) as instance will crash -+// because it has no LogSink. Therefore this null logger should never be passed -+// around. For cases where passing a logger is optional, a pointer to Logger -+// should be used. -+// - // Key Naming Conventions - // - // Keys are not strictly required to conform to any specification or regex, but -@@ -253,11 +265,13 @@ func (l Logger) Info(msg string, keysAndValues ...interface{}) { - // Error logs an error, with the given message and key/value pairs as context. - // It functions similarly to Info, but may have unique behavior, and should be - // preferred for logging errors (see the package documentations for more --// information). -+// information). The log message will always be emitted, regardless of -+// verbosity level. - // - // The msg argument should be used to add context to any underlying error, - // while the err argument should be used to attach the actual error that --// triggered this log line, if present. -+// triggered this log line, if present. The err parameter is optional -+// and nil may be passed instead of an error instance. - func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) { - if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { - withHelper.GetCallStackHelper()() -diff --git a/vendor/github.com/godbus/dbus/v5/CONTRIBUTING.md b/vendor/github.com/godbus/dbus/v5/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/LICENSE b/vendor/github.com/godbus/dbus/v5/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/MAINTAINERS b/vendor/github.com/godbus/dbus/v5/MAINTAINERS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/README.md b/vendor/github.com/godbus/dbus/v5/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/auth.go b/vendor/github.com/godbus/dbus/v5/auth.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/auth_anonymous.go b/vendor/github.com/godbus/dbus/v5/auth_anonymous.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/auth_external.go b/vendor/github.com/godbus/dbus/v5/auth_external.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/auth_sha1.go b/vendor/github.com/godbus/dbus/v5/auth_sha1.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/call.go b/vendor/github.com/godbus/dbus/v5/call.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/conn.go b/vendor/github.com/godbus/dbus/v5/conn.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/conn_darwin.go b/vendor/github.com/godbus/dbus/v5/conn_darwin.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/conn_other.go b/vendor/github.com/godbus/dbus/v5/conn_other.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/conn_unix.go b/vendor/github.com/godbus/dbus/v5/conn_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/conn_windows.go b/vendor/github.com/godbus/dbus/v5/conn_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/dbus.go b/vendor/github.com/godbus/dbus/v5/dbus.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/decoder.go b/vendor/github.com/godbus/dbus/v5/decoder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/default_handler.go b/vendor/github.com/godbus/dbus/v5/default_handler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/doc.go b/vendor/github.com/godbus/dbus/v5/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/encoder.go b/vendor/github.com/godbus/dbus/v5/encoder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/export.go b/vendor/github.com/godbus/dbus/v5/export.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/homedir.go b/vendor/github.com/godbus/dbus/v5/homedir.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/homedir_dynamic.go b/vendor/github.com/godbus/dbus/v5/homedir_dynamic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/homedir_static.go b/vendor/github.com/godbus/dbus/v5/homedir_static.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/match.go b/vendor/github.com/godbus/dbus/v5/match.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/message.go b/vendor/github.com/godbus/dbus/v5/message.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/object.go b/vendor/github.com/godbus/dbus/v5/object.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/sequence.go b/vendor/github.com/godbus/dbus/v5/sequence.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/sequential_handler.go b/vendor/github.com/godbus/dbus/v5/sequential_handler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/server_interfaces.go b/vendor/github.com/godbus/dbus/v5/server_interfaces.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/sig.go b/vendor/github.com/godbus/dbus/v5/sig.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_darwin.go b/vendor/github.com/godbus/dbus/v5/transport_darwin.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_generic.go b/vendor/github.com/godbus/dbus/v5/transport_generic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_nonce_tcp.go b/vendor/github.com/godbus/dbus/v5/transport_nonce_tcp.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_tcp.go b/vendor/github.com/godbus/dbus/v5/transport_tcp.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_unix.go b/vendor/github.com/godbus/dbus/v5/transport_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_unixcred_dragonfly.go b/vendor/github.com/godbus/dbus/v5/transport_unixcred_dragonfly.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_unixcred_freebsd.go b/vendor/github.com/godbus/dbus/v5/transport_unixcred_freebsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_unixcred_linux.go b/vendor/github.com/godbus/dbus/v5/transport_unixcred_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go b/vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/transport_unixcred_openbsd.go b/vendor/github.com/godbus/dbus/v5/transport_unixcred_openbsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/variant.go b/vendor/github.com/godbus/dbus/v5/variant.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/variant_lexer.go b/vendor/github.com/godbus/dbus/v5/variant_lexer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/godbus/dbus/v5/variant_parser.go b/vendor/github.com/godbus/dbus/v5/variant_parser.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/AUTHORS b/vendor/github.com/gogo/protobuf/AUTHORS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/CONTRIBUTORS b/vendor/github.com/gogo/protobuf/CONTRIBUTORS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/LICENSE b/vendor/github.com/gogo/protobuf/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/gogoproto/Makefile b/vendor/github.com/gogo/protobuf/gogoproto/Makefile -new file mode 100755 -index 0000000..0b4659b ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/gogoproto/Makefile -@@ -0,0 +1,37 @@ -+# Protocol Buffers for Go with Gadgets -+# -+# Copyright (c) 2013, The GoGo Authors. All rights reserved. -+# http://github.com/gogo/protobuf -+# -+# Redistribution and use in source and binary forms, with or without -+# modification, are permitted provided that the following conditions are -+# met: -+# -+# * Redistributions of source code must retain the above copyright -+# notice, this list of conditions and the following disclaimer. -+# * Redistributions in binary form must reproduce the above -+# copyright notice, this list of conditions and the following disclaimer -+# in the documentation and/or other materials provided with the -+# distribution. -+# -+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+regenerate: -+ go install github.com/gogo/protobuf/protoc-gen-gogo -+ protoc --gogo_out=Mgoogle/protobuf/descriptor.proto=github.com/gogo/protobuf/protoc-gen-gogo/descriptor:../../../../ --proto_path=../../../../:../protobuf/:. *.proto -+ -+restore: -+ cp gogo.pb.golden gogo.pb.go -+ -+preserve: -+ cp gogo.pb.go gogo.pb.golden -diff --git a/vendor/github.com/gogo/protobuf/gogoproto/doc.go b/vendor/github.com/gogo/protobuf/gogoproto/doc.go -new file mode 100755 -index 0000000..081c86f ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/gogoproto/doc.go -@@ -0,0 +1,169 @@ -+// Protocol Buffers for Go with Gadgets -+// -+// Copyright (c) 2013, The GoGo Authors. All rights reserved. -+// http://github.com/gogo/protobuf -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+/* -+Package gogoproto provides extensions for protocol buffers to achieve: -+ -+ - fast marshalling and unmarshalling. -+ - peace of mind by optionally generating test and benchmark code. -+ - more canonical Go structures. -+ - less typing by optionally generating extra helper code. -+ - goprotobuf compatibility -+ -+More Canonical Go Structures -+ -+A lot of time working with a goprotobuf struct will lead you to a place where you create another struct that is easier to work with and then have a function to copy the values between the two structs. -+You might also find that basic structs that started their life as part of an API need to be sent over the wire. With gob, you could just send it. With goprotobuf, you need to make a parallel struct. -+Gogoprotobuf tries to fix these problems with the nullable, embed, customtype and customname field extensions. -+ -+ - nullable, if false, a field is generated without a pointer (see warning below). -+ - embed, if true, the field is generated as an embedded field. -+ - customtype, It works with the Marshal and Unmarshal methods, to allow you to have your own types in your struct, but marshal to bytes. For example, custom.Uuid or custom.Fixed128 -+ - customname (beta), Changes the generated fieldname. This is especially useful when generated methods conflict with fieldnames. -+ - casttype (beta), Changes the generated fieldtype. All generated code assumes that this type is castable to the protocol buffer field type. It does not work for structs or enums. -+ - castkey (beta), Changes the generated fieldtype for a map key. All generated code assumes that this type is castable to the protocol buffer field type. Only supported on maps. -+ - castvalue (beta), Changes the generated fieldtype for a map value. All generated code assumes that this type is castable to the protocol buffer field type. Only supported on maps. -+ -+Warning about nullable: According to the Protocol Buffer specification, you should be able to tell whether a field is set or unset. With the option nullable=false this feature is lost, since your non-nullable fields will always be set. It can be seen as a layer on top of Protocol Buffers, where before and after marshalling all non-nullable fields are set and they cannot be unset. -+ -+Let us look at: -+ -+ github.com/gogo/protobuf/test/example/example.proto -+ -+for a quicker overview. -+ -+The following message: -+ -+ package test; -+ -+ import "github.com/gogo/protobuf/gogoproto/gogo.proto"; -+ -+ message A { -+ optional string Description = 1 [(gogoproto.nullable) = false]; -+ optional int64 Number = 2 [(gogoproto.nullable) = false]; -+ optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false]; -+ } -+ -+Will generate a go struct which looks a lot like this: -+ -+ type A struct { -+ Description string -+ Number int64 -+ Id github_com_gogo_protobuf_test_custom.Uuid -+ } -+ -+You will see there are no pointers, since all fields are non-nullable. -+You will also see a custom type which marshals to a string. -+Be warned it is your responsibility to test your custom types thoroughly. -+You should think of every possible empty and nil case for your marshaling, unmarshaling and size methods. -+ -+Next we will embed the message A in message B. -+ -+ message B { -+ optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; -+ repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false]; -+ } -+ -+See below that A is embedded in B. -+ -+ type B struct { -+ A -+ G []github_com_gogo_protobuf_test_custom.Uint128 -+ } -+ -+Also see the repeated custom type. -+ -+ type Uint128 [2]uint64 -+ -+Next we will create a custom name for one of our fields. -+ -+ message C { -+ optional int64 size = 1 [(gogoproto.customname) = "MySize"]; -+ } -+ -+See below that the field's name is MySize and not Size. -+ -+ type C struct { -+ MySize *int64 -+ } -+ -+The is useful when having a protocol buffer message with a field name which conflicts with a generated method. -+As an example, having a field name size and using the sizer plugin to generate a Size method will cause a go compiler error. -+Using customname you can fix this error without changing the field name. -+This is typically useful when working with a protocol buffer that was designed before these methods and/or the go language were avialable. -+ -+Gogoprotobuf also has some more subtle changes, these could be changed back: -+ -+ - the generated package name for imports do not have the extra /filename.pb, -+ but are actually the imports specified in the .proto file. -+ -+Gogoprotobuf also has lost some features which should be brought back with time: -+ -+ - Marshalling and unmarshalling with reflect and without the unsafe package, -+ this requires work in pointer_reflect.go -+ -+Why does nullable break protocol buffer specifications: -+ -+The protocol buffer specification states, somewhere, that you should be able to tell whether a -+field is set or unset. With the option nullable=false this feature is lost, -+since your non-nullable fields will always be set. It can be seen as a layer on top of -+protocol buffers, where before and after marshalling all non-nullable fields are set -+and they cannot be unset. -+ -+Goprotobuf Compatibility: -+ -+Gogoprotobuf is compatible with Goprotobuf, because it is compatible with protocol buffers. -+Gogoprotobuf generates the same code as goprotobuf if no extensions are used. -+The enumprefix, getters and stringer extensions can be used to remove some of the unnecessary code generated by goprotobuf: -+ -+ - gogoproto_import, if false, the generated code imports github.com/golang/protobuf/proto instead of github.com/gogo/protobuf/proto. -+ - goproto_enum_prefix, if false, generates the enum constant names without the messagetype prefix -+ - goproto_enum_stringer (experimental), if false, the enum is generated without the default string method, this is useful for rather using enum_stringer, or allowing you to write your own string method. -+ - goproto_getters, if false, the message is generated without get methods, this is useful when you would rather want to use face -+ - goproto_stringer, if false, the message is generated without the default string method, this is useful for rather using stringer, or allowing you to write your own string method. -+ - goproto_extensions_map (beta), if false, the extensions field is generated as type []byte instead of type map[int32]proto.Extension -+ - goproto_unrecognized (beta), if false, XXX_unrecognized field is not generated. This is useful in conjunction with gogoproto.nullable=false, to generate structures completely devoid of pointers and reduce GC pressure at the cost of losing information about unrecognized fields. -+ - goproto_registration (beta), if true, the generated files will register all messages and types against both gogo/protobuf and golang/protobuf. This is necessary when using third-party packages which read registrations from golang/protobuf (such as the grpc-gateway). -+ -+Less Typing and Peace of Mind is explained in their specific plugin folders godoc: -+ -+ - github.com/gogo/protobuf/plugin/ -+ -+If you do not use any of these extension the code that is generated -+will be the same as if goprotobuf has generated it. -+ -+The most complete way to see examples is to look at -+ -+ github.com/gogo/protobuf/test/thetest.proto -+ -+Gogoprototest is a seperate project, -+because we want to keep gogoprotobuf independent of goprotobuf, -+but we still want to test it thoroughly. -+ -+*/ -+package gogoproto -diff --git a/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go -new file mode 100755 -index 0000000..1e91766 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go -@@ -0,0 +1,874 @@ -+// Code generated by protoc-gen-gogo. DO NOT EDIT. -+// source: gogo.proto -+ -+package gogoproto -+ -+import ( -+ fmt "fmt" -+ proto "github.com/gogo/protobuf/proto" -+ descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" -+ math "math" -+) -+ -+// Reference imports to suppress errors if they are not otherwise used. -+var _ = proto.Marshal -+var _ = fmt.Errorf -+var _ = math.Inf -+ -+// This is a compile-time assertion to ensure that this generated file -+// is compatible with the proto package it is being compiled against. -+// A compilation error at this line likely means your copy of the -+// proto package needs to be updated. -+const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -+ -+var E_GoprotoEnumPrefix = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.EnumOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 62001, -+ Name: "gogoproto.goproto_enum_prefix", -+ Tag: "varint,62001,opt,name=goproto_enum_prefix", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoEnumStringer = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.EnumOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 62021, -+ Name: "gogoproto.goproto_enum_stringer", -+ Tag: "varint,62021,opt,name=goproto_enum_stringer", -+ Filename: "gogo.proto", -+} -+ -+var E_EnumStringer = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.EnumOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 62022, -+ Name: "gogoproto.enum_stringer", -+ Tag: "varint,62022,opt,name=enum_stringer", -+ Filename: "gogo.proto", -+} -+ -+var E_EnumCustomname = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.EnumOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 62023, -+ Name: "gogoproto.enum_customname", -+ Tag: "bytes,62023,opt,name=enum_customname", -+ Filename: "gogo.proto", -+} -+ -+var E_Enumdecl = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.EnumOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 62024, -+ Name: "gogoproto.enumdecl", -+ Tag: "varint,62024,opt,name=enumdecl", -+ Filename: "gogo.proto", -+} -+ -+var E_EnumvalueCustomname = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.EnumValueOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 66001, -+ Name: "gogoproto.enumvalue_customname", -+ Tag: "bytes,66001,opt,name=enumvalue_customname", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoGettersAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63001, -+ Name: "gogoproto.goproto_getters_all", -+ Tag: "varint,63001,opt,name=goproto_getters_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63002, -+ Name: "gogoproto.goproto_enum_prefix_all", -+ Tag: "varint,63002,opt,name=goproto_enum_prefix_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoStringerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63003, -+ Name: "gogoproto.goproto_stringer_all", -+ Tag: "varint,63003,opt,name=goproto_stringer_all", -+ Filename: "gogo.proto", -+} -+ -+var E_VerboseEqualAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63004, -+ Name: "gogoproto.verbose_equal_all", -+ Tag: "varint,63004,opt,name=verbose_equal_all", -+ Filename: "gogo.proto", -+} -+ -+var E_FaceAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63005, -+ Name: "gogoproto.face_all", -+ Tag: "varint,63005,opt,name=face_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GostringAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63006, -+ Name: "gogoproto.gostring_all", -+ Tag: "varint,63006,opt,name=gostring_all", -+ Filename: "gogo.proto", -+} -+ -+var E_PopulateAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63007, -+ Name: "gogoproto.populate_all", -+ Tag: "varint,63007,opt,name=populate_all", -+ Filename: "gogo.proto", -+} -+ -+var E_StringerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63008, -+ Name: "gogoproto.stringer_all", -+ Tag: "varint,63008,opt,name=stringer_all", -+ Filename: "gogo.proto", -+} -+ -+var E_OnlyoneAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63009, -+ Name: "gogoproto.onlyone_all", -+ Tag: "varint,63009,opt,name=onlyone_all", -+ Filename: "gogo.proto", -+} -+ -+var E_EqualAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63013, -+ Name: "gogoproto.equal_all", -+ Tag: "varint,63013,opt,name=equal_all", -+ Filename: "gogo.proto", -+} -+ -+var E_DescriptionAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63014, -+ Name: "gogoproto.description_all", -+ Tag: "varint,63014,opt,name=description_all", -+ Filename: "gogo.proto", -+} -+ -+var E_TestgenAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63015, -+ Name: "gogoproto.testgen_all", -+ Tag: "varint,63015,opt,name=testgen_all", -+ Filename: "gogo.proto", -+} -+ -+var E_BenchgenAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63016, -+ Name: "gogoproto.benchgen_all", -+ Tag: "varint,63016,opt,name=benchgen_all", -+ Filename: "gogo.proto", -+} -+ -+var E_MarshalerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63017, -+ Name: "gogoproto.marshaler_all", -+ Tag: "varint,63017,opt,name=marshaler_all", -+ Filename: "gogo.proto", -+} -+ -+var E_UnmarshalerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63018, -+ Name: "gogoproto.unmarshaler_all", -+ Tag: "varint,63018,opt,name=unmarshaler_all", -+ Filename: "gogo.proto", -+} -+ -+var E_StableMarshalerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63019, -+ Name: "gogoproto.stable_marshaler_all", -+ Tag: "varint,63019,opt,name=stable_marshaler_all", -+ Filename: "gogo.proto", -+} -+ -+var E_SizerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63020, -+ Name: "gogoproto.sizer_all", -+ Tag: "varint,63020,opt,name=sizer_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63021, -+ Name: "gogoproto.goproto_enum_stringer_all", -+ Tag: "varint,63021,opt,name=goproto_enum_stringer_all", -+ Filename: "gogo.proto", -+} -+ -+var E_EnumStringerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63022, -+ Name: "gogoproto.enum_stringer_all", -+ Tag: "varint,63022,opt,name=enum_stringer_all", -+ Filename: "gogo.proto", -+} -+ -+var E_UnsafeMarshalerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63023, -+ Name: "gogoproto.unsafe_marshaler_all", -+ Tag: "varint,63023,opt,name=unsafe_marshaler_all", -+ Filename: "gogo.proto", -+} -+ -+var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63024, -+ Name: "gogoproto.unsafe_unmarshaler_all", -+ Tag: "varint,63024,opt,name=unsafe_unmarshaler_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63025, -+ Name: "gogoproto.goproto_extensions_map_all", -+ Tag: "varint,63025,opt,name=goproto_extensions_map_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63026, -+ Name: "gogoproto.goproto_unrecognized_all", -+ Tag: "varint,63026,opt,name=goproto_unrecognized_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GogoprotoImport = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63027, -+ Name: "gogoproto.gogoproto_import", -+ Tag: "varint,63027,opt,name=gogoproto_import", -+ Filename: "gogo.proto", -+} -+ -+var E_ProtosizerAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63028, -+ Name: "gogoproto.protosizer_all", -+ Tag: "varint,63028,opt,name=protosizer_all", -+ Filename: "gogo.proto", -+} -+ -+var E_CompareAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63029, -+ Name: "gogoproto.compare_all", -+ Tag: "varint,63029,opt,name=compare_all", -+ Filename: "gogo.proto", -+} -+ -+var E_TypedeclAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63030, -+ Name: "gogoproto.typedecl_all", -+ Tag: "varint,63030,opt,name=typedecl_all", -+ Filename: "gogo.proto", -+} -+ -+var E_EnumdeclAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63031, -+ Name: "gogoproto.enumdecl_all", -+ Tag: "varint,63031,opt,name=enumdecl_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoRegistration = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63032, -+ Name: "gogoproto.goproto_registration", -+ Tag: "varint,63032,opt,name=goproto_registration", -+ Filename: "gogo.proto", -+} -+ -+var E_MessagenameAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63033, -+ Name: "gogoproto.messagename_all", -+ Tag: "varint,63033,opt,name=messagename_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoSizecacheAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63034, -+ Name: "gogoproto.goproto_sizecache_all", -+ Tag: "varint,63034,opt,name=goproto_sizecache_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoUnkeyedAll = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FileOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 63035, -+ Name: "gogoproto.goproto_unkeyed_all", -+ Tag: "varint,63035,opt,name=goproto_unkeyed_all", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoGetters = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64001, -+ Name: "gogoproto.goproto_getters", -+ Tag: "varint,64001,opt,name=goproto_getters", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoStringer = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64003, -+ Name: "gogoproto.goproto_stringer", -+ Tag: "varint,64003,opt,name=goproto_stringer", -+ Filename: "gogo.proto", -+} -+ -+var E_VerboseEqual = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64004, -+ Name: "gogoproto.verbose_equal", -+ Tag: "varint,64004,opt,name=verbose_equal", -+ Filename: "gogo.proto", -+} -+ -+var E_Face = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64005, -+ Name: "gogoproto.face", -+ Tag: "varint,64005,opt,name=face", -+ Filename: "gogo.proto", -+} -+ -+var E_Gostring = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64006, -+ Name: "gogoproto.gostring", -+ Tag: "varint,64006,opt,name=gostring", -+ Filename: "gogo.proto", -+} -+ -+var E_Populate = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64007, -+ Name: "gogoproto.populate", -+ Tag: "varint,64007,opt,name=populate", -+ Filename: "gogo.proto", -+} -+ -+var E_Stringer = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 67008, -+ Name: "gogoproto.stringer", -+ Tag: "varint,67008,opt,name=stringer", -+ Filename: "gogo.proto", -+} -+ -+var E_Onlyone = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64009, -+ Name: "gogoproto.onlyone", -+ Tag: "varint,64009,opt,name=onlyone", -+ Filename: "gogo.proto", -+} -+ -+var E_Equal = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64013, -+ Name: "gogoproto.equal", -+ Tag: "varint,64013,opt,name=equal", -+ Filename: "gogo.proto", -+} -+ -+var E_Description = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64014, -+ Name: "gogoproto.description", -+ Tag: "varint,64014,opt,name=description", -+ Filename: "gogo.proto", -+} -+ -+var E_Testgen = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64015, -+ Name: "gogoproto.testgen", -+ Tag: "varint,64015,opt,name=testgen", -+ Filename: "gogo.proto", -+} -+ -+var E_Benchgen = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64016, -+ Name: "gogoproto.benchgen", -+ Tag: "varint,64016,opt,name=benchgen", -+ Filename: "gogo.proto", -+} -+ -+var E_Marshaler = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64017, -+ Name: "gogoproto.marshaler", -+ Tag: "varint,64017,opt,name=marshaler", -+ Filename: "gogo.proto", -+} -+ -+var E_Unmarshaler = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64018, -+ Name: "gogoproto.unmarshaler", -+ Tag: "varint,64018,opt,name=unmarshaler", -+ Filename: "gogo.proto", -+} -+ -+var E_StableMarshaler = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64019, -+ Name: "gogoproto.stable_marshaler", -+ Tag: "varint,64019,opt,name=stable_marshaler", -+ Filename: "gogo.proto", -+} -+ -+var E_Sizer = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64020, -+ Name: "gogoproto.sizer", -+ Tag: "varint,64020,opt,name=sizer", -+ Filename: "gogo.proto", -+} -+ -+var E_UnsafeMarshaler = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64023, -+ Name: "gogoproto.unsafe_marshaler", -+ Tag: "varint,64023,opt,name=unsafe_marshaler", -+ Filename: "gogo.proto", -+} -+ -+var E_UnsafeUnmarshaler = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64024, -+ Name: "gogoproto.unsafe_unmarshaler", -+ Tag: "varint,64024,opt,name=unsafe_unmarshaler", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoExtensionsMap = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64025, -+ Name: "gogoproto.goproto_extensions_map", -+ Tag: "varint,64025,opt,name=goproto_extensions_map", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoUnrecognized = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64026, -+ Name: "gogoproto.goproto_unrecognized", -+ Tag: "varint,64026,opt,name=goproto_unrecognized", -+ Filename: "gogo.proto", -+} -+ -+var E_Protosizer = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64028, -+ Name: "gogoproto.protosizer", -+ Tag: "varint,64028,opt,name=protosizer", -+ Filename: "gogo.proto", -+} -+ -+var E_Compare = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64029, -+ Name: "gogoproto.compare", -+ Tag: "varint,64029,opt,name=compare", -+ Filename: "gogo.proto", -+} -+ -+var E_Typedecl = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64030, -+ Name: "gogoproto.typedecl", -+ Tag: "varint,64030,opt,name=typedecl", -+ Filename: "gogo.proto", -+} -+ -+var E_Messagename = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64033, -+ Name: "gogoproto.messagename", -+ Tag: "varint,64033,opt,name=messagename", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoSizecache = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64034, -+ Name: "gogoproto.goproto_sizecache", -+ Tag: "varint,64034,opt,name=goproto_sizecache", -+ Filename: "gogo.proto", -+} -+ -+var E_GoprotoUnkeyed = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.MessageOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 64035, -+ Name: "gogoproto.goproto_unkeyed", -+ Tag: "varint,64035,opt,name=goproto_unkeyed", -+ Filename: "gogo.proto", -+} -+ -+var E_Nullable = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 65001, -+ Name: "gogoproto.nullable", -+ Tag: "varint,65001,opt,name=nullable", -+ Filename: "gogo.proto", -+} -+ -+var E_Embed = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 65002, -+ Name: "gogoproto.embed", -+ Tag: "varint,65002,opt,name=embed", -+ Filename: "gogo.proto", -+} -+ -+var E_Customtype = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 65003, -+ Name: "gogoproto.customtype", -+ Tag: "bytes,65003,opt,name=customtype", -+ Filename: "gogo.proto", -+} -+ -+var E_Customname = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 65004, -+ Name: "gogoproto.customname", -+ Tag: "bytes,65004,opt,name=customname", -+ Filename: "gogo.proto", -+} -+ -+var E_Jsontag = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 65005, -+ Name: "gogoproto.jsontag", -+ Tag: "bytes,65005,opt,name=jsontag", -+ Filename: "gogo.proto", -+} -+ -+var E_Moretags = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 65006, -+ Name: "gogoproto.moretags", -+ Tag: "bytes,65006,opt,name=moretags", -+ Filename: "gogo.proto", -+} -+ -+var E_Casttype = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 65007, -+ Name: "gogoproto.casttype", -+ Tag: "bytes,65007,opt,name=casttype", -+ Filename: "gogo.proto", -+} -+ -+var E_Castkey = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 65008, -+ Name: "gogoproto.castkey", -+ Tag: "bytes,65008,opt,name=castkey", -+ Filename: "gogo.proto", -+} -+ -+var E_Castvalue = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 65009, -+ Name: "gogoproto.castvalue", -+ Tag: "bytes,65009,opt,name=castvalue", -+ Filename: "gogo.proto", -+} -+ -+var E_Stdtime = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 65010, -+ Name: "gogoproto.stdtime", -+ Tag: "varint,65010,opt,name=stdtime", -+ Filename: "gogo.proto", -+} -+ -+var E_Stdduration = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 65011, -+ Name: "gogoproto.stdduration", -+ Tag: "varint,65011,opt,name=stdduration", -+ Filename: "gogo.proto", -+} -+ -+var E_Wktpointer = &proto.ExtensionDesc{ -+ ExtendedType: (*descriptor.FieldOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 65012, -+ Name: "gogoproto.wktpointer", -+ Tag: "varint,65012,opt,name=wktpointer", -+ Filename: "gogo.proto", -+} -+ -+func init() { -+ proto.RegisterExtension(E_GoprotoEnumPrefix) -+ proto.RegisterExtension(E_GoprotoEnumStringer) -+ proto.RegisterExtension(E_EnumStringer) -+ proto.RegisterExtension(E_EnumCustomname) -+ proto.RegisterExtension(E_Enumdecl) -+ proto.RegisterExtension(E_EnumvalueCustomname) -+ proto.RegisterExtension(E_GoprotoGettersAll) -+ proto.RegisterExtension(E_GoprotoEnumPrefixAll) -+ proto.RegisterExtension(E_GoprotoStringerAll) -+ proto.RegisterExtension(E_VerboseEqualAll) -+ proto.RegisterExtension(E_FaceAll) -+ proto.RegisterExtension(E_GostringAll) -+ proto.RegisterExtension(E_PopulateAll) -+ proto.RegisterExtension(E_StringerAll) -+ proto.RegisterExtension(E_OnlyoneAll) -+ proto.RegisterExtension(E_EqualAll) -+ proto.RegisterExtension(E_DescriptionAll) -+ proto.RegisterExtension(E_TestgenAll) -+ proto.RegisterExtension(E_BenchgenAll) -+ proto.RegisterExtension(E_MarshalerAll) -+ proto.RegisterExtension(E_UnmarshalerAll) -+ proto.RegisterExtension(E_StableMarshalerAll) -+ proto.RegisterExtension(E_SizerAll) -+ proto.RegisterExtension(E_GoprotoEnumStringerAll) -+ proto.RegisterExtension(E_EnumStringerAll) -+ proto.RegisterExtension(E_UnsafeMarshalerAll) -+ proto.RegisterExtension(E_UnsafeUnmarshalerAll) -+ proto.RegisterExtension(E_GoprotoExtensionsMapAll) -+ proto.RegisterExtension(E_GoprotoUnrecognizedAll) -+ proto.RegisterExtension(E_GogoprotoImport) -+ proto.RegisterExtension(E_ProtosizerAll) -+ proto.RegisterExtension(E_CompareAll) -+ proto.RegisterExtension(E_TypedeclAll) -+ proto.RegisterExtension(E_EnumdeclAll) -+ proto.RegisterExtension(E_GoprotoRegistration) -+ proto.RegisterExtension(E_MessagenameAll) -+ proto.RegisterExtension(E_GoprotoSizecacheAll) -+ proto.RegisterExtension(E_GoprotoUnkeyedAll) -+ proto.RegisterExtension(E_GoprotoGetters) -+ proto.RegisterExtension(E_GoprotoStringer) -+ proto.RegisterExtension(E_VerboseEqual) -+ proto.RegisterExtension(E_Face) -+ proto.RegisterExtension(E_Gostring) -+ proto.RegisterExtension(E_Populate) -+ proto.RegisterExtension(E_Stringer) -+ proto.RegisterExtension(E_Onlyone) -+ proto.RegisterExtension(E_Equal) -+ proto.RegisterExtension(E_Description) -+ proto.RegisterExtension(E_Testgen) -+ proto.RegisterExtension(E_Benchgen) -+ proto.RegisterExtension(E_Marshaler) -+ proto.RegisterExtension(E_Unmarshaler) -+ proto.RegisterExtension(E_StableMarshaler) -+ proto.RegisterExtension(E_Sizer) -+ proto.RegisterExtension(E_UnsafeMarshaler) -+ proto.RegisterExtension(E_UnsafeUnmarshaler) -+ proto.RegisterExtension(E_GoprotoExtensionsMap) -+ proto.RegisterExtension(E_GoprotoUnrecognized) -+ proto.RegisterExtension(E_Protosizer) -+ proto.RegisterExtension(E_Compare) -+ proto.RegisterExtension(E_Typedecl) -+ proto.RegisterExtension(E_Messagename) -+ proto.RegisterExtension(E_GoprotoSizecache) -+ proto.RegisterExtension(E_GoprotoUnkeyed) -+ proto.RegisterExtension(E_Nullable) -+ proto.RegisterExtension(E_Embed) -+ proto.RegisterExtension(E_Customtype) -+ proto.RegisterExtension(E_Customname) -+ proto.RegisterExtension(E_Jsontag) -+ proto.RegisterExtension(E_Moretags) -+ proto.RegisterExtension(E_Casttype) -+ proto.RegisterExtension(E_Castkey) -+ proto.RegisterExtension(E_Castvalue) -+ proto.RegisterExtension(E_Stdtime) -+ proto.RegisterExtension(E_Stdduration) -+ proto.RegisterExtension(E_Wktpointer) -+} -+ -+func init() { proto.RegisterFile("gogo.proto", fileDescriptor_592445b5231bc2b9) } -+ -+var fileDescriptor_592445b5231bc2b9 = []byte{ -+ // 1328 bytes of a gzipped FileDescriptorProto -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0x49, 0x6f, 0x1c, 0x45, -+ 0x14, 0x80, 0x85, 0x48, 0x64, 0x4f, 0x79, 0x8b, 0xc7, 0xc6, 0x84, 0x08, 0x44, 0xe0, 0xc4, 0xc9, -+ 0x3e, 0x45, 0x28, 0x65, 0x45, 0x96, 0x63, 0x39, 0x56, 0x10, 0x0e, 0xc6, 0x89, 0xc3, 0x76, 0x18, -+ 0xf5, 0xf4, 0x94, 0xdb, 0x8d, 0xbb, 0xbb, 0x9a, 0xee, 0xea, 0x10, 0xe7, 0x86, 0xc2, 0x22, 0x84, -+ 0xd8, 0x91, 0x20, 0x21, 0x09, 0x04, 0xc4, 0xbe, 0x86, 0x7d, 0xb9, 0x70, 0x61, 0xb9, 0xf2, 0x1f, -+ 0xb8, 0x00, 0x66, 0xf7, 0xcd, 0x17, 0xf4, 0xba, 0xdf, 0xeb, 0xa9, 0x69, 0x8f, 0x54, 0x35, 0xb7, -+ 0xf6, 0xb8, 0xbe, 0x6f, 0xaa, 0xdf, 0xeb, 0x7a, 0xef, 0x4d, 0x33, 0xe6, 0x49, 0x4f, 0x4e, 0xc6, -+ 0x89, 0x54, 0xb2, 0x5e, 0x83, 0xeb, 0xfc, 0x72, 0xdf, 0x7e, 0x4f, 0x4a, 0x2f, 0x10, 0x53, 0xf9, -+ 0x5f, 0xcd, 0x6c, 0x75, 0xaa, 0x25, 0x52, 0x37, 0xf1, 0x63, 0x25, 0x93, 0x62, 0x31, 0x3f, 0xc6, -+ 0xc6, 0x70, 0x71, 0x43, 0x44, 0x59, 0xd8, 0x88, 0x13, 0xb1, 0xea, 0x9f, 0xae, 0x5f, 0x3f, 0x59, -+ 0x90, 0x93, 0x44, 0x4e, 0xce, 0x47, 0x59, 0x78, 0x47, 0xac, 0x7c, 0x19, 0xa5, 0x7b, 0xaf, 0xfc, -+ 0x72, 0xf5, 0xfe, 0xab, 0x6e, 0xe9, 0x5f, 0x1e, 0x45, 0x14, 0xfe, 0xb7, 0x94, 0x83, 0x7c, 0x99, -+ 0x5d, 0xd3, 0xe1, 0x4b, 0x55, 0xe2, 0x47, 0x9e, 0x48, 0x0c, 0xc6, 0xef, 0xd1, 0x38, 0xa6, 0x19, -+ 0x8f, 0x23, 0xca, 0xe7, 0xd8, 0x50, 0x2f, 0xae, 0x1f, 0xd0, 0x35, 0x28, 0x74, 0xc9, 0x02, 0x1b, -+ 0xc9, 0x25, 0x6e, 0x96, 0x2a, 0x19, 0x46, 0x4e, 0x28, 0x0c, 0x9a, 0x1f, 0x73, 0x4d, 0x6d, 0x79, -+ 0x18, 0xb0, 0xb9, 0x92, 0xe2, 0x9c, 0xf5, 0xc3, 0x27, 0x2d, 0xe1, 0x06, 0x06, 0xc3, 0x4f, 0xb8, -+ 0x91, 0x72, 0x3d, 0x3f, 0xc9, 0xc6, 0xe1, 0xfa, 0x94, 0x13, 0x64, 0x42, 0xdf, 0xc9, 0x4d, 0x5d, -+ 0x3d, 0x27, 0x61, 0x19, 0xc9, 0x7e, 0x3e, 0xbb, 0x2b, 0xdf, 0xce, 0x58, 0x29, 0xd0, 0xf6, 0xa4, -+ 0x65, 0xd1, 0x13, 0x4a, 0x89, 0x24, 0x6d, 0x38, 0x41, 0xb7, 0xed, 0x1d, 0xf1, 0x83, 0xd2, 0x78, -+ 0x6e, 0xb3, 0x33, 0x8b, 0x0b, 0x05, 0x39, 0x1b, 0x04, 0x7c, 0x85, 0x5d, 0xdb, 0xe5, 0xa9, 0xb0, -+ 0x70, 0x9e, 0x47, 0xe7, 0xf8, 0x8e, 0x27, 0x03, 0xb4, 0x4b, 0x8c, 0x3e, 0x2f, 0x73, 0x69, 0xe1, -+ 0x7c, 0x19, 0x9d, 0x75, 0x64, 0x29, 0xa5, 0x60, 0xbc, 0x8d, 0x8d, 0x9e, 0x12, 0x49, 0x53, 0xa6, -+ 0xa2, 0x21, 0x1e, 0xc8, 0x9c, 0xc0, 0x42, 0x77, 0x01, 0x75, 0x23, 0x08, 0xce, 0x03, 0x07, 0xae, -+ 0x83, 0xac, 0x7f, 0xd5, 0x71, 0x85, 0x85, 0xe2, 0x22, 0x2a, 0xfa, 0x60, 0x3d, 0xa0, 0xb3, 0x6c, -+ 0xd0, 0x93, 0xc5, 0x2d, 0x59, 0xe0, 0x97, 0x10, 0x1f, 0x20, 0x06, 0x15, 0xb1, 0x8c, 0xb3, 0xc0, -+ 0x51, 0x36, 0x3b, 0x78, 0x85, 0x14, 0xc4, 0xa0, 0xa2, 0x87, 0xb0, 0xbe, 0x4a, 0x8a, 0x54, 0x8b, -+ 0xe7, 0x0c, 0x1b, 0x90, 0x51, 0xb0, 0x21, 0x23, 0x9b, 0x4d, 0x5c, 0x46, 0x03, 0x43, 0x04, 0x04, -+ 0xd3, 0xac, 0x66, 0x9b, 0x88, 0x37, 0x36, 0xe9, 0x78, 0x50, 0x06, 0x16, 0xd8, 0x08, 0x15, 0x28, -+ 0x5f, 0x46, 0x16, 0x8a, 0x37, 0x51, 0x31, 0xac, 0x61, 0x78, 0x1b, 0x4a, 0xa4, 0xca, 0x13, 0x36, -+ 0x92, 0xb7, 0xe8, 0x36, 0x10, 0xc1, 0x50, 0x36, 0x45, 0xe4, 0xae, 0xd9, 0x19, 0xde, 0xa6, 0x50, -+ 0x12, 0x03, 0x8a, 0x39, 0x36, 0x14, 0x3a, 0x49, 0xba, 0xe6, 0x04, 0x56, 0xe9, 0x78, 0x07, 0x1d, -+ 0x83, 0x25, 0x84, 0x11, 0xc9, 0xa2, 0x5e, 0x34, 0xef, 0x52, 0x44, 0x34, 0x0c, 0x8f, 0x5e, 0xaa, -+ 0x9c, 0x66, 0x20, 0x1a, 0xbd, 0xd8, 0xde, 0xa3, 0xa3, 0x57, 0xb0, 0x8b, 0xba, 0x71, 0x9a, 0xd5, -+ 0x52, 0xff, 0x8c, 0x95, 0xe6, 0x7d, 0xca, 0x74, 0x0e, 0x00, 0x7c, 0x0f, 0xbb, 0xae, 0x6b, 0x9b, -+ 0xb0, 0x90, 0x7d, 0x80, 0xb2, 0x89, 0x2e, 0xad, 0x02, 0x4b, 0x42, 0xaf, 0xca, 0x0f, 0xa9, 0x24, -+ 0x88, 0x8a, 0x6b, 0x89, 0x8d, 0x67, 0x51, 0xea, 0xac, 0xf6, 0x16, 0xb5, 0x8f, 0x28, 0x6a, 0x05, -+ 0xdb, 0x11, 0xb5, 0x13, 0x6c, 0x02, 0x8d, 0xbd, 0xe5, 0xf5, 0x63, 0x2a, 0xac, 0x05, 0xbd, 0xd2, -+ 0x99, 0xdd, 0xfb, 0xd8, 0xbe, 0x32, 0x9c, 0xa7, 0x95, 0x88, 0x52, 0x60, 0x1a, 0xa1, 0x13, 0x5b, -+ 0x98, 0xaf, 0xa0, 0x99, 0x2a, 0xfe, 0x7c, 0x29, 0x58, 0x74, 0x62, 0x90, 0xdf, 0xcd, 0xf6, 0x92, -+ 0x3c, 0x8b, 0x12, 0xe1, 0x4a, 0x2f, 0xf2, 0xcf, 0x88, 0x96, 0x85, 0xfa, 0x93, 0x4a, 0xaa, 0x56, -+ 0x34, 0x1c, 0xcc, 0x47, 0xd9, 0x9e, 0x72, 0x56, 0x69, 0xf8, 0x61, 0x2c, 0x13, 0x65, 0x30, 0x7e, -+ 0x4a, 0x99, 0x2a, 0xb9, 0xa3, 0x39, 0xc6, 0xe7, 0xd9, 0x70, 0xfe, 0xa7, 0xed, 0x23, 0xf9, 0x19, -+ 0x8a, 0x86, 0xda, 0x14, 0x16, 0x0e, 0x57, 0x86, 0xb1, 0x93, 0xd8, 0xd4, 0xbf, 0xcf, 0xa9, 0x70, -+ 0x20, 0x82, 0x85, 0x43, 0x6d, 0xc4, 0x02, 0xba, 0xbd, 0x85, 0xe1, 0x0b, 0x2a, 0x1c, 0xc4, 0xa0, -+ 0x82, 0x06, 0x06, 0x0b, 0xc5, 0x97, 0xa4, 0x20, 0x06, 0x14, 0x77, 0xb6, 0x1b, 0x6d, 0x22, 0x3c, -+ 0x3f, 0x55, 0x89, 0x03, 0xab, 0x0d, 0xaa, 0xaf, 0x36, 0x3b, 0x87, 0xb0, 0x65, 0x0d, 0x85, 0x4a, -+ 0x14, 0x8a, 0x34, 0x75, 0x3c, 0x01, 0x13, 0x87, 0xc5, 0xc6, 0xbe, 0xa6, 0x4a, 0xa4, 0x61, 0xb0, -+ 0x37, 0x6d, 0x42, 0x84, 0xb0, 0xbb, 0x8e, 0xbb, 0x66, 0xa3, 0xfb, 0xa6, 0xb2, 0xb9, 0xe3, 0xc4, -+ 0x82, 0x53, 0x9b, 0x7f, 0xb2, 0x68, 0x5d, 0x6c, 0x58, 0x3d, 0x9d, 0xdf, 0x56, 0xe6, 0x9f, 0x95, -+ 0x82, 0x2c, 0x6a, 0xc8, 0x48, 0x65, 0x9e, 0xaa, 0xdf, 0xb8, 0xc3, 0xb5, 0x58, 0xdc, 0x17, 0xe9, -+ 0x1e, 0xda, 0xc2, 0xfb, 0xed, 0x1c, 0xa7, 0xf8, 0xed, 0xf0, 0x90, 0x77, 0x0e, 0x3d, 0x66, 0xd9, -+ 0xd9, 0xad, 0xf2, 0x39, 0xef, 0x98, 0x79, 0xf8, 0x11, 0x36, 0xd4, 0x31, 0xf0, 0x98, 0x55, 0x0f, -+ 0xa3, 0x6a, 0x50, 0x9f, 0x77, 0xf8, 0x01, 0xb6, 0x0b, 0x86, 0x17, 0x33, 0xfe, 0x08, 0xe2, 0xf9, -+ 0x72, 0x7e, 0x88, 0xf5, 0xd3, 0xd0, 0x62, 0x46, 0x1f, 0x45, 0xb4, 0x44, 0x00, 0xa7, 0x81, 0xc5, -+ 0x8c, 0x3f, 0x46, 0x38, 0x21, 0x80, 0xdb, 0x87, 0xf0, 0xbb, 0x27, 0x76, 0x61, 0xd3, 0xa1, 0xd8, -+ 0x4d, 0xb3, 0x3e, 0x9c, 0x54, 0xcc, 0xf4, 0xe3, 0xf8, 0xe5, 0x44, 0xf0, 0x5b, 0xd9, 0x6e, 0xcb, -+ 0x80, 0x3f, 0x89, 0x68, 0xb1, 0x9e, 0xcf, 0xb1, 0x01, 0x6d, 0x3a, 0x31, 0xe3, 0x4f, 0x21, 0xae, -+ 0x53, 0xb0, 0x75, 0x9c, 0x4e, 0xcc, 0x82, 0xa7, 0x69, 0xeb, 0x48, 0x40, 0xd8, 0x68, 0x30, 0x31, -+ 0xd3, 0xcf, 0x50, 0xd4, 0x09, 0xe1, 0x33, 0xac, 0x56, 0x36, 0x1b, 0x33, 0xff, 0x2c, 0xf2, 0x6d, -+ 0x06, 0x22, 0xa0, 0x35, 0x3b, 0xb3, 0xe2, 0x39, 0x8a, 0x80, 0x46, 0xc1, 0x31, 0xaa, 0x0e, 0x30, -+ 0x66, 0xd3, 0xf3, 0x74, 0x8c, 0x2a, 0xf3, 0x0b, 0x64, 0x33, 0xaf, 0xf9, 0x66, 0xc5, 0x0b, 0x94, -+ 0xcd, 0x7c, 0x3d, 0x6c, 0xa3, 0x3a, 0x11, 0x98, 0x1d, 0x2f, 0xd2, 0x36, 0x2a, 0x03, 0x01, 0x5f, -+ 0x62, 0xf5, 0x9d, 0xd3, 0x80, 0xd9, 0xf7, 0x12, 0xfa, 0x46, 0x77, 0x0c, 0x03, 0xfc, 0x2e, 0x36, -+ 0xd1, 0x7d, 0x12, 0x30, 0x5b, 0xcf, 0x6d, 0x55, 0x7e, 0xbb, 0xe9, 0x83, 0x00, 0x3f, 0xd1, 0x6e, -+ 0x29, 0xfa, 0x14, 0x60, 0xd6, 0x9e, 0xdf, 0xea, 0x2c, 0xdc, 0xfa, 0x10, 0xc0, 0x67, 0x19, 0x6b, -+ 0x37, 0x60, 0xb3, 0xeb, 0x02, 0xba, 0x34, 0x08, 0x8e, 0x06, 0xf6, 0x5f, 0x33, 0x7f, 0x91, 0x8e, -+ 0x06, 0x12, 0x70, 0x34, 0xa8, 0xf5, 0x9a, 0xe9, 0x4b, 0x74, 0x34, 0x08, 0x81, 0x27, 0x5b, 0xeb, -+ 0x6e, 0x66, 0xc3, 0x65, 0x7a, 0xb2, 0x35, 0x8a, 0x1f, 0x63, 0xa3, 0x3b, 0x1a, 0xa2, 0x59, 0xf5, -+ 0x1a, 0xaa, 0xf6, 0x54, 0xfb, 0xa1, 0xde, 0xbc, 0xb0, 0x19, 0x9a, 0x6d, 0xaf, 0x57, 0x9a, 0x17, -+ 0xf6, 0x42, 0x3e, 0xcd, 0xfa, 0xa3, 0x2c, 0x08, 0xe0, 0xf0, 0xd4, 0x6f, 0xe8, 0xd2, 0x4d, 0x45, -+ 0xd0, 0x22, 0xc5, 0xaf, 0xdb, 0x18, 0x1d, 0x02, 0xf8, 0x01, 0xb6, 0x5b, 0x84, 0x4d, 0xd1, 0x32, -+ 0x91, 0xbf, 0x6d, 0x53, 0xc1, 0x84, 0xd5, 0x7c, 0x86, 0xb1, 0xe2, 0xd5, 0x08, 0x84, 0xd9, 0xc4, -+ 0xfe, 0xbe, 0x5d, 0xbc, 0xa5, 0xd1, 0x90, 0xb6, 0x20, 0x4f, 0x8a, 0x41, 0xb0, 0xd9, 0x29, 0xc8, -+ 0x33, 0x72, 0x90, 0xf5, 0xdd, 0x9f, 0xca, 0x48, 0x39, 0x9e, 0x89, 0xfe, 0x03, 0x69, 0x5a, 0x0f, -+ 0x01, 0x0b, 0x65, 0x22, 0x94, 0xe3, 0xa5, 0x26, 0xf6, 0x4f, 0x64, 0x4b, 0x00, 0x60, 0xd7, 0x49, -+ 0x95, 0xcd, 0x7d, 0xff, 0x45, 0x30, 0x01, 0xb0, 0x69, 0xb8, 0x5e, 0x17, 0x1b, 0x26, 0xf6, 0x6f, -+ 0xda, 0x34, 0xae, 0xe7, 0x87, 0x58, 0x0d, 0x2e, 0xf3, 0xb7, 0x4a, 0x26, 0xf8, 0x1f, 0x84, 0xdb, -+ 0x04, 0x7c, 0x73, 0xaa, 0x5a, 0xca, 0x37, 0x07, 0xfb, 0x5f, 0xcc, 0x34, 0xad, 0xe7, 0xb3, 0x6c, -+ 0x20, 0x55, 0xad, 0x56, 0x86, 0xf3, 0xa9, 0x01, 0xff, 0x6f, 0xbb, 0x7c, 0x65, 0x51, 0x32, 0x90, -+ 0xed, 0x07, 0xd7, 0x55, 0x2c, 0xfd, 0x48, 0x89, 0xc4, 0x64, 0xd8, 0x42, 0x83, 0x86, 0x1c, 0x9e, -+ 0x67, 0x63, 0xae, 0x0c, 0xab, 0xdc, 0x61, 0xb6, 0x20, 0x17, 0xe4, 0x52, 0x5e, 0x67, 0xee, 0xbd, -+ 0xd9, 0xf3, 0xd5, 0x5a, 0xd6, 0x9c, 0x74, 0x65, 0x38, 0x05, 0xbf, 0x3c, 0xda, 0x2f, 0x54, 0xcb, -+ 0xdf, 0x21, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xaf, 0x70, 0x4e, 0x83, 0x15, 0x00, 0x00, -+} -diff --git a/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden -new file mode 100755 -index 0000000..f6502e4 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden -@@ -0,0 +1,45 @@ -+// Code generated by protoc-gen-go. -+// source: gogo.proto -+// DO NOT EDIT! -+ -+package gogoproto -+ -+import proto "github.com/gogo/protobuf/proto" -+import json "encoding/json" -+import math "math" -+import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" -+ -+// Reference proto, json, and math imports to suppress error if they are not otherwise used. -+var _ = proto.Marshal -+var _ = &json.SyntaxError{} -+var _ = math.Inf -+ -+var E_Nullable = &proto.ExtensionDesc{ -+ ExtendedType: (*google_protobuf.FieldOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 51235, -+ Name: "gogoproto.nullable", -+ Tag: "varint,51235,opt,name=nullable", -+} -+ -+var E_Embed = &proto.ExtensionDesc{ -+ ExtendedType: (*google_protobuf.FieldOptions)(nil), -+ ExtensionType: (*bool)(nil), -+ Field: 51236, -+ Name: "gogoproto.embed", -+ Tag: "varint,51236,opt,name=embed", -+} -+ -+var E_Customtype = &proto.ExtensionDesc{ -+ ExtendedType: (*google_protobuf.FieldOptions)(nil), -+ ExtensionType: (*string)(nil), -+ Field: 51237, -+ Name: "gogoproto.customtype", -+ Tag: "bytes,51237,opt,name=customtype", -+} -+ -+func init() { -+ proto.RegisterExtension(E_Nullable) -+ proto.RegisterExtension(E_Embed) -+ proto.RegisterExtension(E_Customtype) -+} -diff --git a/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto b/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto -new file mode 100755 -index 0000000..b80c856 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto -@@ -0,0 +1,144 @@ -+// Protocol Buffers for Go with Gadgets -+// -+// Copyright (c) 2013, The GoGo Authors. All rights reserved. -+// http://github.com/gogo/protobuf -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+syntax = "proto2"; -+package gogoproto; -+ -+import "google/protobuf/descriptor.proto"; -+ -+option java_package = "com.google.protobuf"; -+option java_outer_classname = "GoGoProtos"; -+option go_package = "github.com/gogo/protobuf/gogoproto"; -+ -+extend google.protobuf.EnumOptions { -+ optional bool goproto_enum_prefix = 62001; -+ optional bool goproto_enum_stringer = 62021; -+ optional bool enum_stringer = 62022; -+ optional string enum_customname = 62023; -+ optional bool enumdecl = 62024; -+} -+ -+extend google.protobuf.EnumValueOptions { -+ optional string enumvalue_customname = 66001; -+} -+ -+extend google.protobuf.FileOptions { -+ optional bool goproto_getters_all = 63001; -+ optional bool goproto_enum_prefix_all = 63002; -+ optional bool goproto_stringer_all = 63003; -+ optional bool verbose_equal_all = 63004; -+ optional bool face_all = 63005; -+ optional bool gostring_all = 63006; -+ optional bool populate_all = 63007; -+ optional bool stringer_all = 63008; -+ optional bool onlyone_all = 63009; -+ -+ optional bool equal_all = 63013; -+ optional bool description_all = 63014; -+ optional bool testgen_all = 63015; -+ optional bool benchgen_all = 63016; -+ optional bool marshaler_all = 63017; -+ optional bool unmarshaler_all = 63018; -+ optional bool stable_marshaler_all = 63019; -+ -+ optional bool sizer_all = 63020; -+ -+ optional bool goproto_enum_stringer_all = 63021; -+ optional bool enum_stringer_all = 63022; -+ -+ optional bool unsafe_marshaler_all = 63023; -+ optional bool unsafe_unmarshaler_all = 63024; -+ -+ optional bool goproto_extensions_map_all = 63025; -+ optional bool goproto_unrecognized_all = 63026; -+ optional bool gogoproto_import = 63027; -+ optional bool protosizer_all = 63028; -+ optional bool compare_all = 63029; -+ optional bool typedecl_all = 63030; -+ optional bool enumdecl_all = 63031; -+ -+ optional bool goproto_registration = 63032; -+ optional bool messagename_all = 63033; -+ -+ optional bool goproto_sizecache_all = 63034; -+ optional bool goproto_unkeyed_all = 63035; -+} -+ -+extend google.protobuf.MessageOptions { -+ optional bool goproto_getters = 64001; -+ optional bool goproto_stringer = 64003; -+ optional bool verbose_equal = 64004; -+ optional bool face = 64005; -+ optional bool gostring = 64006; -+ optional bool populate = 64007; -+ optional bool stringer = 67008; -+ optional bool onlyone = 64009; -+ -+ optional bool equal = 64013; -+ optional bool description = 64014; -+ optional bool testgen = 64015; -+ optional bool benchgen = 64016; -+ optional bool marshaler = 64017; -+ optional bool unmarshaler = 64018; -+ optional bool stable_marshaler = 64019; -+ -+ optional bool sizer = 64020; -+ -+ optional bool unsafe_marshaler = 64023; -+ optional bool unsafe_unmarshaler = 64024; -+ -+ optional bool goproto_extensions_map = 64025; -+ optional bool goproto_unrecognized = 64026; -+ -+ optional bool protosizer = 64028; -+ optional bool compare = 64029; -+ -+ optional bool typedecl = 64030; -+ -+ optional bool messagename = 64033; -+ -+ optional bool goproto_sizecache = 64034; -+ optional bool goproto_unkeyed = 64035; -+} -+ -+extend google.protobuf.FieldOptions { -+ optional bool nullable = 65001; -+ optional bool embed = 65002; -+ optional string customtype = 65003; -+ optional string customname = 65004; -+ optional string jsontag = 65005; -+ optional string moretags = 65006; -+ optional string casttype = 65007; -+ optional string castkey = 65008; -+ optional string castvalue = 65009; -+ -+ optional bool stdtime = 65010; -+ optional bool stdduration = 65011; -+ optional bool wktpointer = 65012; -+ -+} -diff --git a/vendor/github.com/gogo/protobuf/gogoproto/helper.go b/vendor/github.com/gogo/protobuf/gogoproto/helper.go -new file mode 100755 -index 0000000..390d4e4 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/gogoproto/helper.go -@@ -0,0 +1,415 @@ -+// Protocol Buffers for Go with Gadgets -+// -+// Copyright (c) 2013, The GoGo Authors. All rights reserved. -+// http://github.com/gogo/protobuf -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+package gogoproto -+ -+import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" -+import proto "github.com/gogo/protobuf/proto" -+ -+func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Embed, false) -+} -+ -+func IsNullable(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Nullable, true) -+} -+ -+func IsStdTime(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Stdtime, false) -+} -+ -+func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Stdduration, false) -+} -+ -+func IsStdDouble(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.DoubleValue" -+} -+ -+func IsStdFloat(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.FloatValue" -+} -+ -+func IsStdInt64(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int64Value" -+} -+ -+func IsStdUInt64(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt64Value" -+} -+ -+func IsStdInt32(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int32Value" -+} -+ -+func IsStdUInt32(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt32Value" -+} -+ -+func IsStdBool(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BoolValue" -+} -+ -+func IsStdString(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.StringValue" -+} -+ -+func IsStdBytes(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BytesValue" -+} -+ -+func IsStdType(field *google_protobuf.FieldDescriptorProto) bool { -+ return (IsStdTime(field) || IsStdDuration(field) || -+ IsStdDouble(field) || IsStdFloat(field) || -+ IsStdInt64(field) || IsStdUInt64(field) || -+ IsStdInt32(field) || IsStdUInt32(field) || -+ IsStdBool(field) || -+ IsStdString(field) || IsStdBytes(field)) -+} -+ -+func IsWktPtr(field *google_protobuf.FieldDescriptorProto) bool { -+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) -+} -+ -+func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool { -+ nullable := IsNullable(field) -+ if field.IsMessage() || IsCustomType(field) { -+ return nullable -+ } -+ if proto3 { -+ return false -+ } -+ return nullable || *field.Type == google_protobuf.FieldDescriptorProto_TYPE_BYTES -+} -+ -+func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool { -+ typ := GetCustomType(field) -+ if len(typ) > 0 { -+ return true -+ } -+ return false -+} -+ -+func IsCastType(field *google_protobuf.FieldDescriptorProto) bool { -+ typ := GetCastType(field) -+ if len(typ) > 0 { -+ return true -+ } -+ return false -+} -+ -+func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool { -+ typ := GetCastKey(field) -+ if len(typ) > 0 { -+ return true -+ } -+ return false -+} -+ -+func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool { -+ typ := GetCastValue(field) -+ if len(typ) > 0 { -+ return true -+ } -+ return false -+} -+ -+func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { -+ return proto.GetBoolExtension(enum.Options, E_Enumdecl, proto.GetBoolExtension(file.Options, E_EnumdeclAll, true)) -+} -+ -+func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Typedecl, proto.GetBoolExtension(file.Options, E_TypedeclAll, true)) -+} -+ -+func GetCustomType(field *google_protobuf.FieldDescriptorProto) string { -+ if field == nil { -+ return "" -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_Customtype) -+ if err == nil && v.(*string) != nil { -+ return *(v.(*string)) -+ } -+ } -+ return "" -+} -+ -+func GetCastType(field *google_protobuf.FieldDescriptorProto) string { -+ if field == nil { -+ return "" -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_Casttype) -+ if err == nil && v.(*string) != nil { -+ return *(v.(*string)) -+ } -+ } -+ return "" -+} -+ -+func GetCastKey(field *google_protobuf.FieldDescriptorProto) string { -+ if field == nil { -+ return "" -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_Castkey) -+ if err == nil && v.(*string) != nil { -+ return *(v.(*string)) -+ } -+ } -+ return "" -+} -+ -+func GetCastValue(field *google_protobuf.FieldDescriptorProto) string { -+ if field == nil { -+ return "" -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_Castvalue) -+ if err == nil && v.(*string) != nil { -+ return *(v.(*string)) -+ } -+ } -+ return "" -+} -+ -+func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool { -+ name := GetCustomName(field) -+ if len(name) > 0 { -+ return true -+ } -+ return false -+} -+ -+func IsEnumCustomName(field *google_protobuf.EnumDescriptorProto) bool { -+ name := GetEnumCustomName(field) -+ if len(name) > 0 { -+ return true -+ } -+ return false -+} -+ -+func IsEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) bool { -+ name := GetEnumValueCustomName(field) -+ if len(name) > 0 { -+ return true -+ } -+ return false -+} -+ -+func GetCustomName(field *google_protobuf.FieldDescriptorProto) string { -+ if field == nil { -+ return "" -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_Customname) -+ if err == nil && v.(*string) != nil { -+ return *(v.(*string)) -+ } -+ } -+ return "" -+} -+ -+func GetEnumCustomName(field *google_protobuf.EnumDescriptorProto) string { -+ if field == nil { -+ return "" -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_EnumCustomname) -+ if err == nil && v.(*string) != nil { -+ return *(v.(*string)) -+ } -+ } -+ return "" -+} -+ -+func GetEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) string { -+ if field == nil { -+ return "" -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_EnumvalueCustomname) -+ if err == nil && v.(*string) != nil { -+ return *(v.(*string)) -+ } -+ } -+ return "" -+} -+ -+func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string { -+ if field == nil { -+ return nil -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_Jsontag) -+ if err == nil && v.(*string) != nil { -+ return (v.(*string)) -+ } -+ } -+ return nil -+} -+ -+func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string { -+ if field == nil { -+ return nil -+ } -+ if field.Options != nil { -+ v, err := proto.GetExtension(field.Options, E_Moretags) -+ if err == nil && v.(*string) != nil { -+ return (v.(*string)) -+ } -+ } -+ return nil -+} -+ -+type EnableFunc func(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool -+ -+func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { -+ return proto.GetBoolExtension(enum.Options, E_GoprotoEnumPrefix, proto.GetBoolExtension(file.Options, E_GoprotoEnumPrefixAll, true)) -+} -+ -+func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_GoprotoStringer, proto.GetBoolExtension(file.Options, E_GoprotoStringerAll, true)) -+} -+ -+func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_GoprotoGetters, proto.GetBoolExtension(file.Options, E_GoprotoGettersAll, true)) -+} -+ -+func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Onlyone, proto.GetBoolExtension(file.Options, E_OnlyoneAll, false)) -+} -+ -+func HasGoString(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Gostring, proto.GetBoolExtension(file.Options, E_GostringAll, false)) -+} -+ -+func HasEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Equal, proto.GetBoolExtension(file.Options, E_EqualAll, false)) -+} -+ -+func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_VerboseEqual, proto.GetBoolExtension(file.Options, E_VerboseEqualAll, false)) -+} -+ -+func IsStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Stringer, proto.GetBoolExtension(file.Options, E_StringerAll, false)) -+} -+ -+func IsFace(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Face, proto.GetBoolExtension(file.Options, E_FaceAll, false)) -+} -+ -+func HasDescription(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Description, proto.GetBoolExtension(file.Options, E_DescriptionAll, false)) -+} -+ -+func HasPopulate(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Populate, proto.GetBoolExtension(file.Options, E_PopulateAll, false)) -+} -+ -+func HasTestGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Testgen, proto.GetBoolExtension(file.Options, E_TestgenAll, false)) -+} -+ -+func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Benchgen, proto.GetBoolExtension(file.Options, E_BenchgenAll, false)) -+} -+ -+func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Marshaler, proto.GetBoolExtension(file.Options, E_MarshalerAll, false)) -+} -+ -+func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Unmarshaler, proto.GetBoolExtension(file.Options, E_UnmarshalerAll, false)) -+} -+ -+func IsStableMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_StableMarshaler, proto.GetBoolExtension(file.Options, E_StableMarshalerAll, false)) -+} -+ -+func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Sizer, proto.GetBoolExtension(file.Options, E_SizerAll, false)) -+} -+ -+func IsProtoSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Protosizer, proto.GetBoolExtension(file.Options, E_ProtosizerAll, false)) -+} -+ -+func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { -+ return proto.GetBoolExtension(enum.Options, E_GoprotoEnumStringer, proto.GetBoolExtension(file.Options, E_GoprotoEnumStringerAll, true)) -+} -+ -+func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { -+ return proto.GetBoolExtension(enum.Options, E_EnumStringer, proto.GetBoolExtension(file.Options, E_EnumStringerAll, false)) -+} -+ -+func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_UnsafeMarshaler, proto.GetBoolExtension(file.Options, E_UnsafeMarshalerAll, false)) -+} -+ -+func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_UnsafeUnmarshaler, proto.GetBoolExtension(file.Options, E_UnsafeUnmarshalerAll, false)) -+} -+ -+func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_GoprotoExtensionsMap, proto.GetBoolExtension(file.Options, E_GoprotoExtensionsMapAll, true)) -+} -+ -+func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_GoprotoUnrecognized, proto.GetBoolExtension(file.Options, E_GoprotoUnrecognizedAll, true)) -+} -+ -+func IsProto3(file *google_protobuf.FileDescriptorProto) bool { -+ return file.GetSyntax() == "proto3" -+} -+ -+func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool { -+ return proto.GetBoolExtension(file.Options, E_GogoprotoImport, true) -+} -+ -+func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Compare, proto.GetBoolExtension(file.Options, E_CompareAll, false)) -+} -+ -+func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool { -+ return proto.GetBoolExtension(file.Options, E_GoprotoRegistration, false) -+} -+ -+func HasMessageName(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_Messagename, proto.GetBoolExtension(file.Options, E_MessagenameAll, false)) -+} -+ -+func HasSizecache(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_GoprotoSizecache, proto.GetBoolExtension(file.Options, E_GoprotoSizecacheAll, true)) -+} -+ -+func HasUnkeyed(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { -+ return proto.GetBoolExtension(message.Options, E_GoprotoUnkeyed, proto.GetBoolExtension(file.Options, E_GoprotoUnkeyedAll, true)) -+} -diff --git a/vendor/github.com/gogo/protobuf/proto/Makefile b/vendor/github.com/gogo/protobuf/proto/Makefile -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/clone.go b/vendor/github.com/gogo/protobuf/proto/clone.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/custom_gogo.go b/vendor/github.com/gogo/protobuf/proto/custom_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/decode.go b/vendor/github.com/gogo/protobuf/proto/decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/deprecated.go b/vendor/github.com/gogo/protobuf/proto/deprecated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/discard.go b/vendor/github.com/gogo/protobuf/proto/discard.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/duration.go b/vendor/github.com/gogo/protobuf/proto/duration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/duration_gogo.go b/vendor/github.com/gogo/protobuf/proto/duration_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/encode.go b/vendor/github.com/gogo/protobuf/proto/encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/encode_gogo.go b/vendor/github.com/gogo/protobuf/proto/encode_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/equal.go b/vendor/github.com/gogo/protobuf/proto/equal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/extensions.go b/vendor/github.com/gogo/protobuf/proto/extensions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/lib.go b/vendor/github.com/gogo/protobuf/proto/lib.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/lib_gogo.go b/vendor/github.com/gogo/protobuf/proto/lib_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/message_set.go b/vendor/github.com/gogo/protobuf/proto/message_set.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go b/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go b/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/properties.go b/vendor/github.com/gogo/protobuf/proto/properties.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/properties_gogo.go b/vendor/github.com/gogo/protobuf/proto/properties_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/skip_gogo.go b/vendor/github.com/gogo/protobuf/proto/skip_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/table_marshal.go b/vendor/github.com/gogo/protobuf/proto/table_marshal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go b/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/table_merge.go b/vendor/github.com/gogo/protobuf/proto/table_merge.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go b/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go b/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/text.go b/vendor/github.com/gogo/protobuf/proto/text.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/text_gogo.go b/vendor/github.com/gogo/protobuf/proto/text_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/text_parser.go b/vendor/github.com/gogo/protobuf/proto/text_parser.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/timestamp.go b/vendor/github.com/gogo/protobuf/proto/timestamp.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go b/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/wrappers.go b/vendor/github.com/gogo/protobuf/proto/wrappers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go b/vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile -new file mode 100755 -index 0000000..3496dc9 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile -@@ -0,0 +1,36 @@ -+# Go support for Protocol Buffers - Google's data interchange format -+# -+# Copyright 2010 The Go Authors. All rights reserved. -+# https://github.com/golang/protobuf -+# -+# Redistribution and use in source and binary forms, with or without -+# modification, are permitted provided that the following conditions are -+# met: -+# -+# * Redistributions of source code must retain the above copyright -+# notice, this list of conditions and the following disclaimer. -+# * Redistributions in binary form must reproduce the above -+# copyright notice, this list of conditions and the following disclaimer -+# in the documentation and/or other materials provided with the -+# distribution. -+# * Neither the name of Google Inc. nor the names of its -+# contributors may be used to endorse or promote products derived from -+# this software without specific prior written permission. -+# -+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+regenerate: -+ go install github.com/gogo/protobuf/protoc-gen-gogo -+ go install github.com/gogo/protobuf/protoc-gen-gostring -+ protoc --gogo_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto -+ protoc --gostring_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto -diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go -new file mode 100755 -index 0000000..a85bf19 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go -@@ -0,0 +1,118 @@ -+// Go support for Protocol Buffers - Google's data interchange format -+// -+// Copyright 2016 The Go Authors. All rights reserved. -+// https://github.com/golang/protobuf -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+// Package descriptor provides functions for obtaining protocol buffer -+// descriptors for generated Go types. -+// -+// These functions cannot go in package proto because they depend on the -+// generated protobuf descriptor messages, which themselves depend on proto. -+package descriptor -+ -+import ( -+ "bytes" -+ "compress/gzip" -+ "fmt" -+ "io/ioutil" -+ -+ "github.com/gogo/protobuf/proto" -+) -+ -+// extractFile extracts a FileDescriptorProto from a gzip'd buffer. -+func extractFile(gz []byte) (*FileDescriptorProto, error) { -+ r, err := gzip.NewReader(bytes.NewReader(gz)) -+ if err != nil { -+ return nil, fmt.Errorf("failed to open gzip reader: %v", err) -+ } -+ defer r.Close() -+ -+ b, err := ioutil.ReadAll(r) -+ if err != nil { -+ return nil, fmt.Errorf("failed to uncompress descriptor: %v", err) -+ } -+ -+ fd := new(FileDescriptorProto) -+ if err := proto.Unmarshal(b, fd); err != nil { -+ return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err) -+ } -+ -+ return fd, nil -+} -+ -+// Message is a proto.Message with a method to return its descriptor. -+// -+// Message types generated by the protocol compiler always satisfy -+// the Message interface. -+type Message interface { -+ proto.Message -+ Descriptor() ([]byte, []int) -+} -+ -+// ForMessage returns a FileDescriptorProto and a DescriptorProto from within it -+// describing the given message. -+func ForMessage(msg Message) (fd *FileDescriptorProto, md *DescriptorProto) { -+ gz, path := msg.Descriptor() -+ fd, err := extractFile(gz) -+ if err != nil { -+ panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err)) -+ } -+ -+ md = fd.MessageType[path[0]] -+ for _, i := range path[1:] { -+ md = md.NestedType[i] -+ } -+ return fd, md -+} -+ -+// Is this field a scalar numeric type? -+func (field *FieldDescriptorProto) IsScalar() bool { -+ if field.Type == nil { -+ return false -+ } -+ switch *field.Type { -+ case FieldDescriptorProto_TYPE_DOUBLE, -+ FieldDescriptorProto_TYPE_FLOAT, -+ FieldDescriptorProto_TYPE_INT64, -+ FieldDescriptorProto_TYPE_UINT64, -+ FieldDescriptorProto_TYPE_INT32, -+ FieldDescriptorProto_TYPE_FIXED64, -+ FieldDescriptorProto_TYPE_FIXED32, -+ FieldDescriptorProto_TYPE_BOOL, -+ FieldDescriptorProto_TYPE_UINT32, -+ FieldDescriptorProto_TYPE_ENUM, -+ FieldDescriptorProto_TYPE_SFIXED32, -+ FieldDescriptorProto_TYPE_SFIXED64, -+ FieldDescriptorProto_TYPE_SINT32, -+ FieldDescriptorProto_TYPE_SINT64: -+ return true -+ default: -+ return false -+ } -+} -diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go -new file mode 100755 -index 0000000..18b2a33 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go -@@ -0,0 +1,2865 @@ -+// Code generated by protoc-gen-gogo. DO NOT EDIT. -+// source: descriptor.proto -+ -+package descriptor -+ -+import ( -+ fmt "fmt" -+ proto "github.com/gogo/protobuf/proto" -+ math "math" -+) -+ -+// Reference imports to suppress errors if they are not otherwise used. -+var _ = proto.Marshal -+var _ = fmt.Errorf -+var _ = math.Inf -+ -+// This is a compile-time assertion to ensure that this generated file -+// is compatible with the proto package it is being compiled against. -+// A compilation error at this line likely means your copy of the -+// proto package needs to be updated. -+const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -+ -+type FieldDescriptorProto_Type int32 -+ -+const ( -+ // 0 is reserved for errors. -+ // Order is weird for historical reasons. -+ FieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1 -+ FieldDescriptorProto_TYPE_FLOAT FieldDescriptorProto_Type = 2 -+ // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if -+ // negative values are likely. -+ FieldDescriptorProto_TYPE_INT64 FieldDescriptorProto_Type = 3 -+ FieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4 -+ // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if -+ // negative values are likely. -+ FieldDescriptorProto_TYPE_INT32 FieldDescriptorProto_Type = 5 -+ FieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6 -+ FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7 -+ FieldDescriptorProto_TYPE_BOOL FieldDescriptorProto_Type = 8 -+ FieldDescriptorProto_TYPE_STRING FieldDescriptorProto_Type = 9 -+ // Tag-delimited aggregate. -+ // Group type is deprecated and not supported in proto3. However, Proto3 -+ // implementations should still be able to parse the group wire format and -+ // treat group fields as unknown fields. -+ FieldDescriptorProto_TYPE_GROUP FieldDescriptorProto_Type = 10 -+ FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11 -+ // New in version 2. -+ FieldDescriptorProto_TYPE_BYTES FieldDescriptorProto_Type = 12 -+ FieldDescriptorProto_TYPE_UINT32 FieldDescriptorProto_Type = 13 -+ FieldDescriptorProto_TYPE_ENUM FieldDescriptorProto_Type = 14 -+ FieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15 -+ FieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16 -+ FieldDescriptorProto_TYPE_SINT32 FieldDescriptorProto_Type = 17 -+ FieldDescriptorProto_TYPE_SINT64 FieldDescriptorProto_Type = 18 -+) -+ -+var FieldDescriptorProto_Type_name = map[int32]string{ -+ 1: "TYPE_DOUBLE", -+ 2: "TYPE_FLOAT", -+ 3: "TYPE_INT64", -+ 4: "TYPE_UINT64", -+ 5: "TYPE_INT32", -+ 6: "TYPE_FIXED64", -+ 7: "TYPE_FIXED32", -+ 8: "TYPE_BOOL", -+ 9: "TYPE_STRING", -+ 10: "TYPE_GROUP", -+ 11: "TYPE_MESSAGE", -+ 12: "TYPE_BYTES", -+ 13: "TYPE_UINT32", -+ 14: "TYPE_ENUM", -+ 15: "TYPE_SFIXED32", -+ 16: "TYPE_SFIXED64", -+ 17: "TYPE_SINT32", -+ 18: "TYPE_SINT64", -+} -+ -+var FieldDescriptorProto_Type_value = map[string]int32{ -+ "TYPE_DOUBLE": 1, -+ "TYPE_FLOAT": 2, -+ "TYPE_INT64": 3, -+ "TYPE_UINT64": 4, -+ "TYPE_INT32": 5, -+ "TYPE_FIXED64": 6, -+ "TYPE_FIXED32": 7, -+ "TYPE_BOOL": 8, -+ "TYPE_STRING": 9, -+ "TYPE_GROUP": 10, -+ "TYPE_MESSAGE": 11, -+ "TYPE_BYTES": 12, -+ "TYPE_UINT32": 13, -+ "TYPE_ENUM": 14, -+ "TYPE_SFIXED32": 15, -+ "TYPE_SFIXED64": 16, -+ "TYPE_SINT32": 17, -+ "TYPE_SINT64": 18, -+} -+ -+func (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type { -+ p := new(FieldDescriptorProto_Type) -+ *p = x -+ return p -+} -+ -+func (x FieldDescriptorProto_Type) String() string { -+ return proto.EnumName(FieldDescriptorProto_Type_name, int32(x)) -+} -+ -+func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error { -+ value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type") -+ if err != nil { -+ return err -+ } -+ *x = FieldDescriptorProto_Type(value) -+ return nil -+} -+ -+func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{4, 0} -+} -+ -+type FieldDescriptorProto_Label int32 -+ -+const ( -+ // 0 is reserved for errors -+ FieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1 -+ FieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2 -+ FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3 -+) -+ -+var FieldDescriptorProto_Label_name = map[int32]string{ -+ 1: "LABEL_OPTIONAL", -+ 2: "LABEL_REQUIRED", -+ 3: "LABEL_REPEATED", -+} -+ -+var FieldDescriptorProto_Label_value = map[string]int32{ -+ "LABEL_OPTIONAL": 1, -+ "LABEL_REQUIRED": 2, -+ "LABEL_REPEATED": 3, -+} -+ -+func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label { -+ p := new(FieldDescriptorProto_Label) -+ *p = x -+ return p -+} -+ -+func (x FieldDescriptorProto_Label) String() string { -+ return proto.EnumName(FieldDescriptorProto_Label_name, int32(x)) -+} -+ -+func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error { -+ value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label") -+ if err != nil { -+ return err -+ } -+ *x = FieldDescriptorProto_Label(value) -+ return nil -+} -+ -+func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{4, 1} -+} -+ -+// Generated classes can be optimized for speed or code size. -+type FileOptions_OptimizeMode int32 -+ -+const ( -+ FileOptions_SPEED FileOptions_OptimizeMode = 1 -+ // etc. -+ FileOptions_CODE_SIZE FileOptions_OptimizeMode = 2 -+ FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3 -+) -+ -+var FileOptions_OptimizeMode_name = map[int32]string{ -+ 1: "SPEED", -+ 2: "CODE_SIZE", -+ 3: "LITE_RUNTIME", -+} -+ -+var FileOptions_OptimizeMode_value = map[string]int32{ -+ "SPEED": 1, -+ "CODE_SIZE": 2, -+ "LITE_RUNTIME": 3, -+} -+ -+func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode { -+ p := new(FileOptions_OptimizeMode) -+ *p = x -+ return p -+} -+ -+func (x FileOptions_OptimizeMode) String() string { -+ return proto.EnumName(FileOptions_OptimizeMode_name, int32(x)) -+} -+ -+func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error { -+ value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode") -+ if err != nil { -+ return err -+ } -+ *x = FileOptions_OptimizeMode(value) -+ return nil -+} -+ -+func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{10, 0} -+} -+ -+type FieldOptions_CType int32 -+ -+const ( -+ // Default mode. -+ FieldOptions_STRING FieldOptions_CType = 0 -+ FieldOptions_CORD FieldOptions_CType = 1 -+ FieldOptions_STRING_PIECE FieldOptions_CType = 2 -+) -+ -+var FieldOptions_CType_name = map[int32]string{ -+ 0: "STRING", -+ 1: "CORD", -+ 2: "STRING_PIECE", -+} -+ -+var FieldOptions_CType_value = map[string]int32{ -+ "STRING": 0, -+ "CORD": 1, -+ "STRING_PIECE": 2, -+} -+ -+func (x FieldOptions_CType) Enum() *FieldOptions_CType { -+ p := new(FieldOptions_CType) -+ *p = x -+ return p -+} -+ -+func (x FieldOptions_CType) String() string { -+ return proto.EnumName(FieldOptions_CType_name, int32(x)) -+} -+ -+func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error { -+ value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType") -+ if err != nil { -+ return err -+ } -+ *x = FieldOptions_CType(value) -+ return nil -+} -+ -+func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{12, 0} -+} -+ -+type FieldOptions_JSType int32 -+ -+const ( -+ // Use the default type. -+ FieldOptions_JS_NORMAL FieldOptions_JSType = 0 -+ // Use JavaScript strings. -+ FieldOptions_JS_STRING FieldOptions_JSType = 1 -+ // Use JavaScript numbers. -+ FieldOptions_JS_NUMBER FieldOptions_JSType = 2 -+) -+ -+var FieldOptions_JSType_name = map[int32]string{ -+ 0: "JS_NORMAL", -+ 1: "JS_STRING", -+ 2: "JS_NUMBER", -+} -+ -+var FieldOptions_JSType_value = map[string]int32{ -+ "JS_NORMAL": 0, -+ "JS_STRING": 1, -+ "JS_NUMBER": 2, -+} -+ -+func (x FieldOptions_JSType) Enum() *FieldOptions_JSType { -+ p := new(FieldOptions_JSType) -+ *p = x -+ return p -+} -+ -+func (x FieldOptions_JSType) String() string { -+ return proto.EnumName(FieldOptions_JSType_name, int32(x)) -+} -+ -+func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error { -+ value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType") -+ if err != nil { -+ return err -+ } -+ *x = FieldOptions_JSType(value) -+ return nil -+} -+ -+func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{12, 1} -+} -+ -+// Is this method side-effect-free (or safe in HTTP parlance), or idempotent, -+// or neither? HTTP based RPC implementation may choose GET verb for safe -+// methods, and PUT verb for idempotent methods instead of the default POST. -+type MethodOptions_IdempotencyLevel int32 -+ -+const ( -+ MethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0 -+ MethodOptions_NO_SIDE_EFFECTS MethodOptions_IdempotencyLevel = 1 -+ MethodOptions_IDEMPOTENT MethodOptions_IdempotencyLevel = 2 -+) -+ -+var MethodOptions_IdempotencyLevel_name = map[int32]string{ -+ 0: "IDEMPOTENCY_UNKNOWN", -+ 1: "NO_SIDE_EFFECTS", -+ 2: "IDEMPOTENT", -+} -+ -+var MethodOptions_IdempotencyLevel_value = map[string]int32{ -+ "IDEMPOTENCY_UNKNOWN": 0, -+ "NO_SIDE_EFFECTS": 1, -+ "IDEMPOTENT": 2, -+} -+ -+func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel { -+ p := new(MethodOptions_IdempotencyLevel) -+ *p = x -+ return p -+} -+ -+func (x MethodOptions_IdempotencyLevel) String() string { -+ return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x)) -+} -+ -+func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error { -+ value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel") -+ if err != nil { -+ return err -+ } -+ *x = MethodOptions_IdempotencyLevel(value) -+ return nil -+} -+ -+func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{17, 0} -+} -+ -+// The protocol compiler can output a FileDescriptorSet containing the .proto -+// files it parses. -+type FileDescriptorSet struct { -+ File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *FileDescriptorSet) Reset() { *m = FileDescriptorSet{} } -+func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) } -+func (*FileDescriptorSet) ProtoMessage() {} -+func (*FileDescriptorSet) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{0} -+} -+func (m *FileDescriptorSet) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_FileDescriptorSet.Unmarshal(m, b) -+} -+func (m *FileDescriptorSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_FileDescriptorSet.Marshal(b, m, deterministic) -+} -+func (m *FileDescriptorSet) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_FileDescriptorSet.Merge(m, src) -+} -+func (m *FileDescriptorSet) XXX_Size() int { -+ return xxx_messageInfo_FileDescriptorSet.Size(m) -+} -+func (m *FileDescriptorSet) XXX_DiscardUnknown() { -+ xxx_messageInfo_FileDescriptorSet.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_FileDescriptorSet proto.InternalMessageInfo -+ -+func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto { -+ if m != nil { -+ return m.File -+ } -+ return nil -+} -+ -+// Describes a complete .proto file. -+type FileDescriptorProto struct { -+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -+ Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"` -+ // Names of files imported by this file. -+ Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"` -+ // Indexes of the public imported files in the dependency list above. -+ PublicDependency []int32 `protobuf:"varint,10,rep,name=public_dependency,json=publicDependency" json:"public_dependency,omitempty"` -+ // Indexes of the weak imported files in the dependency list. -+ // For Google-internal migration only. Do not use. -+ WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"` -+ // All top-level definitions in this file. -+ MessageType []*DescriptorProto `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"` -+ EnumType []*EnumDescriptorProto `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` -+ Service []*ServiceDescriptorProto `protobuf:"bytes,6,rep,name=service" json:"service,omitempty"` -+ Extension []*FieldDescriptorProto `protobuf:"bytes,7,rep,name=extension" json:"extension,omitempty"` -+ Options *FileOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` -+ // This field contains optional information about the original source code. -+ // You may safely remove this entire field without harming runtime -+ // functionality of the descriptors -- the information is needed only by -+ // development tools. -+ SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"` -+ // The syntax of the proto file. -+ // The supported values are "proto2" and "proto3". -+ Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *FileDescriptorProto) Reset() { *m = FileDescriptorProto{} } -+func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) } -+func (*FileDescriptorProto) ProtoMessage() {} -+func (*FileDescriptorProto) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{1} -+} -+func (m *FileDescriptorProto) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_FileDescriptorProto.Unmarshal(m, b) -+} -+func (m *FileDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_FileDescriptorProto.Marshal(b, m, deterministic) -+} -+func (m *FileDescriptorProto) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_FileDescriptorProto.Merge(m, src) -+} -+func (m *FileDescriptorProto) XXX_Size() int { -+ return xxx_messageInfo_FileDescriptorProto.Size(m) -+} -+func (m *FileDescriptorProto) XXX_DiscardUnknown() { -+ xxx_messageInfo_FileDescriptorProto.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_FileDescriptorProto proto.InternalMessageInfo -+ -+func (m *FileDescriptorProto) GetName() string { -+ if m != nil && m.Name != nil { -+ return *m.Name -+ } -+ return "" -+} -+ -+func (m *FileDescriptorProto) GetPackage() string { -+ if m != nil && m.Package != nil { -+ return *m.Package -+ } -+ return "" -+} -+ -+func (m *FileDescriptorProto) GetDependency() []string { -+ if m != nil { -+ return m.Dependency -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetPublicDependency() []int32 { -+ if m != nil { -+ return m.PublicDependency -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetWeakDependency() []int32 { -+ if m != nil { -+ return m.WeakDependency -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetMessageType() []*DescriptorProto { -+ if m != nil { -+ return m.MessageType -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto { -+ if m != nil { -+ return m.EnumType -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetService() []*ServiceDescriptorProto { -+ if m != nil { -+ return m.Service -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetExtension() []*FieldDescriptorProto { -+ if m != nil { -+ return m.Extension -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetOptions() *FileOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo { -+ if m != nil { -+ return m.SourceCodeInfo -+ } -+ return nil -+} -+ -+func (m *FileDescriptorProto) GetSyntax() string { -+ if m != nil && m.Syntax != nil { -+ return *m.Syntax -+ } -+ return "" -+} -+ -+// Describes a message type. -+type DescriptorProto struct { -+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -+ Field []*FieldDescriptorProto `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"` -+ Extension []*FieldDescriptorProto `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"` -+ NestedType []*DescriptorProto `protobuf:"bytes,3,rep,name=nested_type,json=nestedType" json:"nested_type,omitempty"` -+ EnumType []*EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` -+ ExtensionRange []*DescriptorProto_ExtensionRange `protobuf:"bytes,5,rep,name=extension_range,json=extensionRange" json:"extension_range,omitempty"` -+ OneofDecl []*OneofDescriptorProto `protobuf:"bytes,8,rep,name=oneof_decl,json=oneofDecl" json:"oneof_decl,omitempty"` -+ Options *MessageOptions `protobuf:"bytes,7,opt,name=options" json:"options,omitempty"` -+ ReservedRange []*DescriptorProto_ReservedRange `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` -+ // Reserved field names, which may not be used by fields in the same message. -+ // A given name may only be reserved once. -+ ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *DescriptorProto) Reset() { *m = DescriptorProto{} } -+func (m *DescriptorProto) String() string { return proto.CompactTextString(m) } -+func (*DescriptorProto) ProtoMessage() {} -+func (*DescriptorProto) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{2} -+} -+func (m *DescriptorProto) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_DescriptorProto.Unmarshal(m, b) -+} -+func (m *DescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_DescriptorProto.Marshal(b, m, deterministic) -+} -+func (m *DescriptorProto) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_DescriptorProto.Merge(m, src) -+} -+func (m *DescriptorProto) XXX_Size() int { -+ return xxx_messageInfo_DescriptorProto.Size(m) -+} -+func (m *DescriptorProto) XXX_DiscardUnknown() { -+ xxx_messageInfo_DescriptorProto.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_DescriptorProto proto.InternalMessageInfo -+ -+func (m *DescriptorProto) GetName() string { -+ if m != nil && m.Name != nil { -+ return *m.Name -+ } -+ return "" -+} -+ -+func (m *DescriptorProto) GetField() []*FieldDescriptorProto { -+ if m != nil { -+ return m.Field -+ } -+ return nil -+} -+ -+func (m *DescriptorProto) GetExtension() []*FieldDescriptorProto { -+ if m != nil { -+ return m.Extension -+ } -+ return nil -+} -+ -+func (m *DescriptorProto) GetNestedType() []*DescriptorProto { -+ if m != nil { -+ return m.NestedType -+ } -+ return nil -+} -+ -+func (m *DescriptorProto) GetEnumType() []*EnumDescriptorProto { -+ if m != nil { -+ return m.EnumType -+ } -+ return nil -+} -+ -+func (m *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange { -+ if m != nil { -+ return m.ExtensionRange -+ } -+ return nil -+} -+ -+func (m *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto { -+ if m != nil { -+ return m.OneofDecl -+ } -+ return nil -+} -+ -+func (m *DescriptorProto) GetOptions() *MessageOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+func (m *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange { -+ if m != nil { -+ return m.ReservedRange -+ } -+ return nil -+} -+ -+func (m *DescriptorProto) GetReservedName() []string { -+ if m != nil { -+ return m.ReservedName -+ } -+ return nil -+} -+ -+type DescriptorProto_ExtensionRange struct { -+ Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` -+ End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` -+ Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *DescriptorProto_ExtensionRange) Reset() { *m = DescriptorProto_ExtensionRange{} } -+func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) } -+func (*DescriptorProto_ExtensionRange) ProtoMessage() {} -+func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{2, 0} -+} -+func (m *DescriptorProto_ExtensionRange) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_DescriptorProto_ExtensionRange.Unmarshal(m, b) -+} -+func (m *DescriptorProto_ExtensionRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_DescriptorProto_ExtensionRange.Marshal(b, m, deterministic) -+} -+func (m *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_DescriptorProto_ExtensionRange.Merge(m, src) -+} -+func (m *DescriptorProto_ExtensionRange) XXX_Size() int { -+ return xxx_messageInfo_DescriptorProto_ExtensionRange.Size(m) -+} -+func (m *DescriptorProto_ExtensionRange) XXX_DiscardUnknown() { -+ xxx_messageInfo_DescriptorProto_ExtensionRange.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_DescriptorProto_ExtensionRange proto.InternalMessageInfo -+ -+func (m *DescriptorProto_ExtensionRange) GetStart() int32 { -+ if m != nil && m.Start != nil { -+ return *m.Start -+ } -+ return 0 -+} -+ -+func (m *DescriptorProto_ExtensionRange) GetEnd() int32 { -+ if m != nil && m.End != nil { -+ return *m.End -+ } -+ return 0 -+} -+ -+func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+// Range of reserved tag numbers. Reserved tag numbers may not be used by -+// fields or extension ranges in the same message. Reserved ranges may -+// not overlap. -+type DescriptorProto_ReservedRange struct { -+ Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` -+ End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *DescriptorProto_ReservedRange) Reset() { *m = DescriptorProto_ReservedRange{} } -+func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) } -+func (*DescriptorProto_ReservedRange) ProtoMessage() {} -+func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{2, 1} -+} -+func (m *DescriptorProto_ReservedRange) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_DescriptorProto_ReservedRange.Unmarshal(m, b) -+} -+func (m *DescriptorProto_ReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_DescriptorProto_ReservedRange.Marshal(b, m, deterministic) -+} -+func (m *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_DescriptorProto_ReservedRange.Merge(m, src) -+} -+func (m *DescriptorProto_ReservedRange) XXX_Size() int { -+ return xxx_messageInfo_DescriptorProto_ReservedRange.Size(m) -+} -+func (m *DescriptorProto_ReservedRange) XXX_DiscardUnknown() { -+ xxx_messageInfo_DescriptorProto_ReservedRange.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_DescriptorProto_ReservedRange proto.InternalMessageInfo -+ -+func (m *DescriptorProto_ReservedRange) GetStart() int32 { -+ if m != nil && m.Start != nil { -+ return *m.Start -+ } -+ return 0 -+} -+ -+func (m *DescriptorProto_ReservedRange) GetEnd() int32 { -+ if m != nil && m.End != nil { -+ return *m.End -+ } -+ return 0 -+} -+ -+type ExtensionRangeOptions struct { -+ // The parser stores options it doesn't recognize here. See above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ExtensionRangeOptions) Reset() { *m = ExtensionRangeOptions{} } -+func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) } -+func (*ExtensionRangeOptions) ProtoMessage() {} -+func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{3} -+} -+ -+var extRange_ExtensionRangeOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_ExtensionRangeOptions -+} -+ -+func (m *ExtensionRangeOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_ExtensionRangeOptions.Unmarshal(m, b) -+} -+func (m *ExtensionRangeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_ExtensionRangeOptions.Marshal(b, m, deterministic) -+} -+func (m *ExtensionRangeOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ExtensionRangeOptions.Merge(m, src) -+} -+func (m *ExtensionRangeOptions) XXX_Size() int { -+ return xxx_messageInfo_ExtensionRangeOptions.Size(m) -+} -+func (m *ExtensionRangeOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_ExtensionRangeOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ExtensionRangeOptions proto.InternalMessageInfo -+ -+func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+// Describes a field within a message. -+type FieldDescriptorProto struct { -+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -+ Number *int32 `protobuf:"varint,3,opt,name=number" json:"number,omitempty"` -+ Label *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"` -+ // If type_name is set, this need not be set. If both this and type_name -+ // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. -+ Type *FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type" json:"type,omitempty"` -+ // For message and enum types, this is the name of the type. If the name -+ // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping -+ // rules are used to find the type (i.e. first the nested types within this -+ // message are searched, then within the parent, on up to the root -+ // namespace). -+ TypeName *string `protobuf:"bytes,6,opt,name=type_name,json=typeName" json:"type_name,omitempty"` -+ // For extensions, this is the name of the type being extended. It is -+ // resolved in the same manner as type_name. -+ Extendee *string `protobuf:"bytes,2,opt,name=extendee" json:"extendee,omitempty"` -+ // For numeric types, contains the original text representation of the value. -+ // For booleans, "true" or "false". -+ // For strings, contains the default text contents (not escaped in any way). -+ // For bytes, contains the C escaped value. All bytes >= 128 are escaped. -+ // TODO(kenton): Base-64 encode? -+ DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` -+ // If set, gives the index of a oneof in the containing type's oneof_decl -+ // list. This field is a member of that oneof. -+ OneofIndex *int32 `protobuf:"varint,9,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"` -+ // JSON name of this field. The value is set by protocol compiler. If the -+ // user has set a "json_name" option on this field, that option's value -+ // will be used. Otherwise, it's deduced from the field's name by converting -+ // it to camelCase. -+ JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` -+ Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} } -+func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) } -+func (*FieldDescriptorProto) ProtoMessage() {} -+func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{4} -+} -+func (m *FieldDescriptorProto) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_FieldDescriptorProto.Unmarshal(m, b) -+} -+func (m *FieldDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_FieldDescriptorProto.Marshal(b, m, deterministic) -+} -+func (m *FieldDescriptorProto) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_FieldDescriptorProto.Merge(m, src) -+} -+func (m *FieldDescriptorProto) XXX_Size() int { -+ return xxx_messageInfo_FieldDescriptorProto.Size(m) -+} -+func (m *FieldDescriptorProto) XXX_DiscardUnknown() { -+ xxx_messageInfo_FieldDescriptorProto.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_FieldDescriptorProto proto.InternalMessageInfo -+ -+func (m *FieldDescriptorProto) GetName() string { -+ if m != nil && m.Name != nil { -+ return *m.Name -+ } -+ return "" -+} -+ -+func (m *FieldDescriptorProto) GetNumber() int32 { -+ if m != nil && m.Number != nil { -+ return *m.Number -+ } -+ return 0 -+} -+ -+func (m *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label { -+ if m != nil && m.Label != nil { -+ return *m.Label -+ } -+ return FieldDescriptorProto_LABEL_OPTIONAL -+} -+ -+func (m *FieldDescriptorProto) GetType() FieldDescriptorProto_Type { -+ if m != nil && m.Type != nil { -+ return *m.Type -+ } -+ return FieldDescriptorProto_TYPE_DOUBLE -+} -+ -+func (m *FieldDescriptorProto) GetTypeName() string { -+ if m != nil && m.TypeName != nil { -+ return *m.TypeName -+ } -+ return "" -+} -+ -+func (m *FieldDescriptorProto) GetExtendee() string { -+ if m != nil && m.Extendee != nil { -+ return *m.Extendee -+ } -+ return "" -+} -+ -+func (m *FieldDescriptorProto) GetDefaultValue() string { -+ if m != nil && m.DefaultValue != nil { -+ return *m.DefaultValue -+ } -+ return "" -+} -+ -+func (m *FieldDescriptorProto) GetOneofIndex() int32 { -+ if m != nil && m.OneofIndex != nil { -+ return *m.OneofIndex -+ } -+ return 0 -+} -+ -+func (m *FieldDescriptorProto) GetJsonName() string { -+ if m != nil && m.JsonName != nil { -+ return *m.JsonName -+ } -+ return "" -+} -+ -+func (m *FieldDescriptorProto) GetOptions() *FieldOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+// Describes a oneof. -+type OneofDescriptorProto struct { -+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -+ Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} } -+func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) } -+func (*OneofDescriptorProto) ProtoMessage() {} -+func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{5} -+} -+func (m *OneofDescriptorProto) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_OneofDescriptorProto.Unmarshal(m, b) -+} -+func (m *OneofDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_OneofDescriptorProto.Marshal(b, m, deterministic) -+} -+func (m *OneofDescriptorProto) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_OneofDescriptorProto.Merge(m, src) -+} -+func (m *OneofDescriptorProto) XXX_Size() int { -+ return xxx_messageInfo_OneofDescriptorProto.Size(m) -+} -+func (m *OneofDescriptorProto) XXX_DiscardUnknown() { -+ xxx_messageInfo_OneofDescriptorProto.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_OneofDescriptorProto proto.InternalMessageInfo -+ -+func (m *OneofDescriptorProto) GetName() string { -+ if m != nil && m.Name != nil { -+ return *m.Name -+ } -+ return "" -+} -+ -+func (m *OneofDescriptorProto) GetOptions() *OneofOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+// Describes an enum type. -+type EnumDescriptorProto struct { -+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -+ Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` -+ Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` -+ // Range of reserved numeric values. Reserved numeric values may not be used -+ // by enum values in the same enum declaration. Reserved ranges may not -+ // overlap. -+ ReservedRange []*EnumDescriptorProto_EnumReservedRange `protobuf:"bytes,4,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` -+ // Reserved enum value names, which may not be reused. A given name may only -+ // be reserved once. -+ ReservedName []string `protobuf:"bytes,5,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} } -+func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) } -+func (*EnumDescriptorProto) ProtoMessage() {} -+func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{6} -+} -+func (m *EnumDescriptorProto) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_EnumDescriptorProto.Unmarshal(m, b) -+} -+func (m *EnumDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_EnumDescriptorProto.Marshal(b, m, deterministic) -+} -+func (m *EnumDescriptorProto) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_EnumDescriptorProto.Merge(m, src) -+} -+func (m *EnumDescriptorProto) XXX_Size() int { -+ return xxx_messageInfo_EnumDescriptorProto.Size(m) -+} -+func (m *EnumDescriptorProto) XXX_DiscardUnknown() { -+ xxx_messageInfo_EnumDescriptorProto.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_EnumDescriptorProto proto.InternalMessageInfo -+ -+func (m *EnumDescriptorProto) GetName() string { -+ if m != nil && m.Name != nil { -+ return *m.Name -+ } -+ return "" -+} -+ -+func (m *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto { -+ if m != nil { -+ return m.Value -+ } -+ return nil -+} -+ -+func (m *EnumDescriptorProto) GetOptions() *EnumOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+func (m *EnumDescriptorProto) GetReservedRange() []*EnumDescriptorProto_EnumReservedRange { -+ if m != nil { -+ return m.ReservedRange -+ } -+ return nil -+} -+ -+func (m *EnumDescriptorProto) GetReservedName() []string { -+ if m != nil { -+ return m.ReservedName -+ } -+ return nil -+} -+ -+// Range of reserved numeric values. Reserved values may not be used by -+// entries in the same enum. Reserved ranges may not overlap. -+// -+// Note that this is distinct from DescriptorProto.ReservedRange in that it -+// is inclusive such that it can appropriately represent the entire int32 -+// domain. -+type EnumDescriptorProto_EnumReservedRange struct { -+ Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` -+ End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *EnumDescriptorProto_EnumReservedRange) Reset() { *m = EnumDescriptorProto_EnumReservedRange{} } -+func (m *EnumDescriptorProto_EnumReservedRange) String() string { return proto.CompactTextString(m) } -+func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} -+func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{6, 0} -+} -+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Unmarshal(m, b) -+} -+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Marshal(b, m, deterministic) -+} -+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(m, src) -+} -+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Size() int { -+ return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Size(m) -+} -+func (m *EnumDescriptorProto_EnumReservedRange) XXX_DiscardUnknown() { -+ xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_EnumDescriptorProto_EnumReservedRange proto.InternalMessageInfo -+ -+func (m *EnumDescriptorProto_EnumReservedRange) GetStart() int32 { -+ if m != nil && m.Start != nil { -+ return *m.Start -+ } -+ return 0 -+} -+ -+func (m *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 { -+ if m != nil && m.End != nil { -+ return *m.End -+ } -+ return 0 -+} -+ -+// Describes a value within an enum. -+type EnumValueDescriptorProto struct { -+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -+ Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` -+ Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *EnumValueDescriptorProto) Reset() { *m = EnumValueDescriptorProto{} } -+func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) } -+func (*EnumValueDescriptorProto) ProtoMessage() {} -+func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{7} -+} -+func (m *EnumValueDescriptorProto) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_EnumValueDescriptorProto.Unmarshal(m, b) -+} -+func (m *EnumValueDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_EnumValueDescriptorProto.Marshal(b, m, deterministic) -+} -+func (m *EnumValueDescriptorProto) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_EnumValueDescriptorProto.Merge(m, src) -+} -+func (m *EnumValueDescriptorProto) XXX_Size() int { -+ return xxx_messageInfo_EnumValueDescriptorProto.Size(m) -+} -+func (m *EnumValueDescriptorProto) XXX_DiscardUnknown() { -+ xxx_messageInfo_EnumValueDescriptorProto.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_EnumValueDescriptorProto proto.InternalMessageInfo -+ -+func (m *EnumValueDescriptorProto) GetName() string { -+ if m != nil && m.Name != nil { -+ return *m.Name -+ } -+ return "" -+} -+ -+func (m *EnumValueDescriptorProto) GetNumber() int32 { -+ if m != nil && m.Number != nil { -+ return *m.Number -+ } -+ return 0 -+} -+ -+func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+// Describes a service. -+type ServiceDescriptorProto struct { -+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -+ Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` -+ Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} } -+func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) } -+func (*ServiceDescriptorProto) ProtoMessage() {} -+func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{8} -+} -+func (m *ServiceDescriptorProto) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_ServiceDescriptorProto.Unmarshal(m, b) -+} -+func (m *ServiceDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_ServiceDescriptorProto.Marshal(b, m, deterministic) -+} -+func (m *ServiceDescriptorProto) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ServiceDescriptorProto.Merge(m, src) -+} -+func (m *ServiceDescriptorProto) XXX_Size() int { -+ return xxx_messageInfo_ServiceDescriptorProto.Size(m) -+} -+func (m *ServiceDescriptorProto) XXX_DiscardUnknown() { -+ xxx_messageInfo_ServiceDescriptorProto.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ServiceDescriptorProto proto.InternalMessageInfo -+ -+func (m *ServiceDescriptorProto) GetName() string { -+ if m != nil && m.Name != nil { -+ return *m.Name -+ } -+ return "" -+} -+ -+func (m *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto { -+ if m != nil { -+ return m.Method -+ } -+ return nil -+} -+ -+func (m *ServiceDescriptorProto) GetOptions() *ServiceOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+// Describes a method of a service. -+type MethodDescriptorProto struct { -+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -+ // Input and output type names. These are resolved in the same way as -+ // FieldDescriptorProto.type_name, but must refer to a message type. -+ InputType *string `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"` -+ OutputType *string `protobuf:"bytes,3,opt,name=output_type,json=outputType" json:"output_type,omitempty"` -+ Options *MethodOptions `protobuf:"bytes,4,opt,name=options" json:"options,omitempty"` -+ // Identifies if client streams multiple client messages -+ ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"` -+ // Identifies if server streams multiple server messages -+ ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} } -+func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) } -+func (*MethodDescriptorProto) ProtoMessage() {} -+func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{9} -+} -+func (m *MethodDescriptorProto) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_MethodDescriptorProto.Unmarshal(m, b) -+} -+func (m *MethodDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_MethodDescriptorProto.Marshal(b, m, deterministic) -+} -+func (m *MethodDescriptorProto) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_MethodDescriptorProto.Merge(m, src) -+} -+func (m *MethodDescriptorProto) XXX_Size() int { -+ return xxx_messageInfo_MethodDescriptorProto.Size(m) -+} -+func (m *MethodDescriptorProto) XXX_DiscardUnknown() { -+ xxx_messageInfo_MethodDescriptorProto.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_MethodDescriptorProto proto.InternalMessageInfo -+ -+const Default_MethodDescriptorProto_ClientStreaming bool = false -+const Default_MethodDescriptorProto_ServerStreaming bool = false -+ -+func (m *MethodDescriptorProto) GetName() string { -+ if m != nil && m.Name != nil { -+ return *m.Name -+ } -+ return "" -+} -+ -+func (m *MethodDescriptorProto) GetInputType() string { -+ if m != nil && m.InputType != nil { -+ return *m.InputType -+ } -+ return "" -+} -+ -+func (m *MethodDescriptorProto) GetOutputType() string { -+ if m != nil && m.OutputType != nil { -+ return *m.OutputType -+ } -+ return "" -+} -+ -+func (m *MethodDescriptorProto) GetOptions() *MethodOptions { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+func (m *MethodDescriptorProto) GetClientStreaming() bool { -+ if m != nil && m.ClientStreaming != nil { -+ return *m.ClientStreaming -+ } -+ return Default_MethodDescriptorProto_ClientStreaming -+} -+ -+func (m *MethodDescriptorProto) GetServerStreaming() bool { -+ if m != nil && m.ServerStreaming != nil { -+ return *m.ServerStreaming -+ } -+ return Default_MethodDescriptorProto_ServerStreaming -+} -+ -+type FileOptions struct { -+ // Sets the Java package where classes generated from this .proto will be -+ // placed. By default, the proto package is used, but this is often -+ // inappropriate because proto packages do not normally start with backwards -+ // domain names. -+ JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"` -+ // If set, all the classes from the .proto file are wrapped in a single -+ // outer class with the given name. This applies to both Proto1 -+ // (equivalent to the old "--one_java_file" option) and Proto2 (where -+ // a .proto always translates to a single class, but you may want to -+ // explicitly choose the class name). -+ JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"` -+ // If set true, then the Java code generator will generate a separate .java -+ // file for each top-level message, enum, and service defined in the .proto -+ // file. Thus, these types will *not* be nested inside the outer class -+ // named by java_outer_classname. However, the outer class will still be -+ // generated to contain the file's getDescriptor() method as well as any -+ // top-level extensions defined in the file. -+ JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` -+ // This option does nothing. -+ JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` // Deprecated: Do not use. -+ // If set true, then the Java2 code generator will generate code that -+ // throws an exception whenever an attempt is made to assign a non-UTF-8 -+ // byte sequence to a string field. -+ // Message reflection will do the same. -+ // However, an extension field still accepts non-UTF-8 byte sequences. -+ // This option has no effect on when used with the lite runtime. -+ JavaStringCheckUtf8 *bool `protobuf:"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0" json:"java_string_check_utf8,omitempty"` -+ OptimizeFor *FileOptions_OptimizeMode `protobuf:"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1" json:"optimize_for,omitempty"` -+ // Sets the Go package where structs generated from this .proto will be -+ // placed. If omitted, the Go package will be derived from the following: -+ // - The basename of the package import path, if provided. -+ // - Otherwise, the package statement in the .proto file, if present. -+ // - Otherwise, the basename of the .proto file, without extension. -+ GoPackage *string `protobuf:"bytes,11,opt,name=go_package,json=goPackage" json:"go_package,omitempty"` -+ // Should generic services be generated in each language? "Generic" services -+ // are not specific to any particular RPC system. They are generated by the -+ // main code generators in each language (without additional plugins). -+ // Generic services were the only kind of service generation supported by -+ // early versions of google.protobuf. -+ // -+ // Generic services are now considered deprecated in favor of using plugins -+ // that generate code specific to your particular RPC system. Therefore, -+ // these default to false. Old code which depends on generic services should -+ // explicitly set them to true. -+ CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"` -+ JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"` -+ PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` -+ PhpGenericServices *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"` -+ // Is this file deprecated? -+ // Depending on the target platform, this can emit Deprecated annotations -+ // for everything in the file, or it will be completely ignored; in the very -+ // least, this is a formalization for deprecating files. -+ Deprecated *bool `protobuf:"varint,23,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ // Enables the use of arenas for the proto messages in this file. This applies -+ // only to generated classes for C++. -+ CcEnableArenas *bool `protobuf:"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=0" json:"cc_enable_arenas,omitempty"` -+ // Sets the objective c class prefix which is prepended to all objective c -+ // generated classes from this .proto. There is no default. -+ ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"` -+ // Namespace for generated classes; defaults to the package. -+ CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"` -+ // By default Swift generators will take the proto package and CamelCase it -+ // replacing '.' with underscore and use that to prefix the types/symbols -+ // defined. When this options is provided, they will use this value instead -+ // to prefix the types/symbols defined. -+ SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"` -+ // Sets the php class prefix which is prepended to all php generated classes -+ // from this .proto. Default is empty. -+ PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"` -+ // Use this option to change the namespace of php generated classes. Default -+ // is empty. When this option is empty, the package name will be used for -+ // determining the namespace. -+ PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"` -+ // Use this option to change the namespace of php generated metadata classes. -+ // Default is empty. When this option is empty, the proto file name will be -+ // used for determining the namespace. -+ PhpMetadataNamespace *string `protobuf:"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace" json:"php_metadata_namespace,omitempty"` -+ // Use this option to change the package of ruby generated classes. Default -+ // is empty. When this option is not set, the package name will be used for -+ // determining the ruby package. -+ RubyPackage *string `protobuf:"bytes,45,opt,name=ruby_package,json=rubyPackage" json:"ruby_package,omitempty"` -+ // The parser stores options it doesn't recognize here. -+ // See the documentation for the "Options" section above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *FileOptions) Reset() { *m = FileOptions{} } -+func (m *FileOptions) String() string { return proto.CompactTextString(m) } -+func (*FileOptions) ProtoMessage() {} -+func (*FileOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{10} -+} -+ -+var extRange_FileOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_FileOptions -+} -+ -+func (m *FileOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_FileOptions.Unmarshal(m, b) -+} -+func (m *FileOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_FileOptions.Marshal(b, m, deterministic) -+} -+func (m *FileOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_FileOptions.Merge(m, src) -+} -+func (m *FileOptions) XXX_Size() int { -+ return xxx_messageInfo_FileOptions.Size(m) -+} -+func (m *FileOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_FileOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_FileOptions proto.InternalMessageInfo -+ -+const Default_FileOptions_JavaMultipleFiles bool = false -+const Default_FileOptions_JavaStringCheckUtf8 bool = false -+const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED -+const Default_FileOptions_CcGenericServices bool = false -+const Default_FileOptions_JavaGenericServices bool = false -+const Default_FileOptions_PyGenericServices bool = false -+const Default_FileOptions_PhpGenericServices bool = false -+const Default_FileOptions_Deprecated bool = false -+const Default_FileOptions_CcEnableArenas bool = false -+ -+func (m *FileOptions) GetJavaPackage() string { -+ if m != nil && m.JavaPackage != nil { -+ return *m.JavaPackage -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetJavaOuterClassname() string { -+ if m != nil && m.JavaOuterClassname != nil { -+ return *m.JavaOuterClassname -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetJavaMultipleFiles() bool { -+ if m != nil && m.JavaMultipleFiles != nil { -+ return *m.JavaMultipleFiles -+ } -+ return Default_FileOptions_JavaMultipleFiles -+} -+ -+// Deprecated: Do not use. -+func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool { -+ if m != nil && m.JavaGenerateEqualsAndHash != nil { -+ return *m.JavaGenerateEqualsAndHash -+ } -+ return false -+} -+ -+func (m *FileOptions) GetJavaStringCheckUtf8() bool { -+ if m != nil && m.JavaStringCheckUtf8 != nil { -+ return *m.JavaStringCheckUtf8 -+ } -+ return Default_FileOptions_JavaStringCheckUtf8 -+} -+ -+func (m *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode { -+ if m != nil && m.OptimizeFor != nil { -+ return *m.OptimizeFor -+ } -+ return Default_FileOptions_OptimizeFor -+} -+ -+func (m *FileOptions) GetGoPackage() string { -+ if m != nil && m.GoPackage != nil { -+ return *m.GoPackage -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetCcGenericServices() bool { -+ if m != nil && m.CcGenericServices != nil { -+ return *m.CcGenericServices -+ } -+ return Default_FileOptions_CcGenericServices -+} -+ -+func (m *FileOptions) GetJavaGenericServices() bool { -+ if m != nil && m.JavaGenericServices != nil { -+ return *m.JavaGenericServices -+ } -+ return Default_FileOptions_JavaGenericServices -+} -+ -+func (m *FileOptions) GetPyGenericServices() bool { -+ if m != nil && m.PyGenericServices != nil { -+ return *m.PyGenericServices -+ } -+ return Default_FileOptions_PyGenericServices -+} -+ -+func (m *FileOptions) GetPhpGenericServices() bool { -+ if m != nil && m.PhpGenericServices != nil { -+ return *m.PhpGenericServices -+ } -+ return Default_FileOptions_PhpGenericServices -+} -+ -+func (m *FileOptions) GetDeprecated() bool { -+ if m != nil && m.Deprecated != nil { -+ return *m.Deprecated -+ } -+ return Default_FileOptions_Deprecated -+} -+ -+func (m *FileOptions) GetCcEnableArenas() bool { -+ if m != nil && m.CcEnableArenas != nil { -+ return *m.CcEnableArenas -+ } -+ return Default_FileOptions_CcEnableArenas -+} -+ -+func (m *FileOptions) GetObjcClassPrefix() string { -+ if m != nil && m.ObjcClassPrefix != nil { -+ return *m.ObjcClassPrefix -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetCsharpNamespace() string { -+ if m != nil && m.CsharpNamespace != nil { -+ return *m.CsharpNamespace -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetSwiftPrefix() string { -+ if m != nil && m.SwiftPrefix != nil { -+ return *m.SwiftPrefix -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetPhpClassPrefix() string { -+ if m != nil && m.PhpClassPrefix != nil { -+ return *m.PhpClassPrefix -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetPhpNamespace() string { -+ if m != nil && m.PhpNamespace != nil { -+ return *m.PhpNamespace -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetPhpMetadataNamespace() string { -+ if m != nil && m.PhpMetadataNamespace != nil { -+ return *m.PhpMetadataNamespace -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetRubyPackage() string { -+ if m != nil && m.RubyPackage != nil { -+ return *m.RubyPackage -+ } -+ return "" -+} -+ -+func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+type MessageOptions struct { -+ // Set true to use the old proto1 MessageSet wire format for extensions. -+ // This is provided for backwards-compatibility with the MessageSet wire -+ // format. You should not use this for any other reason: It's less -+ // efficient, has fewer features, and is more complicated. -+ // -+ // The message must be defined exactly as follows: -+ // message Foo { -+ // option message_set_wire_format = true; -+ // extensions 4 to max; -+ // } -+ // Note that the message cannot have any defined fields; MessageSets only -+ // have extensions. -+ // -+ // All extensions of your type must be singular messages; e.g. they cannot -+ // be int32s, enums, or repeated messages. -+ // -+ // Because this is an option, the above two restrictions are not enforced by -+ // the protocol compiler. -+ MessageSetWireFormat *bool `protobuf:"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0" json:"message_set_wire_format,omitempty"` -+ // Disables the generation of the standard "descriptor()" accessor, which can -+ // conflict with a field of the same name. This is meant to make migration -+ // from proto1 easier; new code should avoid fields named "descriptor". -+ NoStandardDescriptorAccessor *bool `protobuf:"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0" json:"no_standard_descriptor_accessor,omitempty"` -+ // Is this message deprecated? -+ // Depending on the target platform, this can emit Deprecated annotations -+ // for the message, or it will be completely ignored; in the very least, -+ // this is a formalization for deprecating messages. -+ Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ // Whether the message is an automatically generated map entry type for the -+ // maps field. -+ // -+ // For maps fields: -+ // map map_field = 1; -+ // The parsed descriptor looks like: -+ // message MapFieldEntry { -+ // option map_entry = true; -+ // optional KeyType key = 1; -+ // optional ValueType value = 2; -+ // } -+ // repeated MapFieldEntry map_field = 1; -+ // -+ // Implementations may choose not to generate the map_entry=true message, but -+ // use a native map in the target language to hold the keys and values. -+ // The reflection APIs in such implementations still need to work as -+ // if the field is a repeated message field. -+ // -+ // NOTE: Do not set the option in .proto files. Always use the maps syntax -+ // instead. The option should only be implicitly set by the proto compiler -+ // parser. -+ MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` -+ // The parser stores options it doesn't recognize here. See above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *MessageOptions) Reset() { *m = MessageOptions{} } -+func (m *MessageOptions) String() string { return proto.CompactTextString(m) } -+func (*MessageOptions) ProtoMessage() {} -+func (*MessageOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{11} -+} -+ -+var extRange_MessageOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_MessageOptions -+} -+ -+func (m *MessageOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_MessageOptions.Unmarshal(m, b) -+} -+func (m *MessageOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_MessageOptions.Marshal(b, m, deterministic) -+} -+func (m *MessageOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_MessageOptions.Merge(m, src) -+} -+func (m *MessageOptions) XXX_Size() int { -+ return xxx_messageInfo_MessageOptions.Size(m) -+} -+func (m *MessageOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_MessageOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_MessageOptions proto.InternalMessageInfo -+ -+const Default_MessageOptions_MessageSetWireFormat bool = false -+const Default_MessageOptions_NoStandardDescriptorAccessor bool = false -+const Default_MessageOptions_Deprecated bool = false -+ -+func (m *MessageOptions) GetMessageSetWireFormat() bool { -+ if m != nil && m.MessageSetWireFormat != nil { -+ return *m.MessageSetWireFormat -+ } -+ return Default_MessageOptions_MessageSetWireFormat -+} -+ -+func (m *MessageOptions) GetNoStandardDescriptorAccessor() bool { -+ if m != nil && m.NoStandardDescriptorAccessor != nil { -+ return *m.NoStandardDescriptorAccessor -+ } -+ return Default_MessageOptions_NoStandardDescriptorAccessor -+} -+ -+func (m *MessageOptions) GetDeprecated() bool { -+ if m != nil && m.Deprecated != nil { -+ return *m.Deprecated -+ } -+ return Default_MessageOptions_Deprecated -+} -+ -+func (m *MessageOptions) GetMapEntry() bool { -+ if m != nil && m.MapEntry != nil { -+ return *m.MapEntry -+ } -+ return false -+} -+ -+func (m *MessageOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+type FieldOptions struct { -+ // The ctype option instructs the C++ code generator to use a different -+ // representation of the field than it normally would. See the specific -+ // options below. This option is not yet implemented in the open source -+ // release -- sorry, we'll try to include it in a future version! -+ Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` -+ // The packed option can be enabled for repeated primitive fields to enable -+ // a more efficient representation on the wire. Rather than repeatedly -+ // writing the tag and type for each element, the entire array is encoded as -+ // a single length-delimited blob. In proto3, only explicit setting it to -+ // false will avoid using packed encoding. -+ Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"` -+ // The jstype option determines the JavaScript type used for values of the -+ // field. The option is permitted only for 64 bit integral and fixed types -+ // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING -+ // is represented as JavaScript string, which avoids loss of precision that -+ // can happen when a large value is converted to a floating point JavaScript. -+ // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to -+ // use the JavaScript "number" type. The behavior of the default option -+ // JS_NORMAL is implementation dependent. -+ // -+ // This option is an enum to permit additional types to be added, e.g. -+ // goog.math.Integer. -+ Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"` -+ // Should this field be parsed lazily? Lazy applies only to message-type -+ // fields. It means that when the outer message is initially parsed, the -+ // inner message's contents will not be parsed but instead stored in encoded -+ // form. The inner message will actually be parsed when it is first accessed. -+ // -+ // This is only a hint. Implementations are free to choose whether to use -+ // eager or lazy parsing regardless of the value of this option. However, -+ // setting this option true suggests that the protocol author believes that -+ // using lazy parsing on this field is worth the additional bookkeeping -+ // overhead typically needed to implement it. -+ // -+ // This option does not affect the public interface of any generated code; -+ // all method signatures remain the same. Furthermore, thread-safety of the -+ // interface is not affected by this option; const methods remain safe to -+ // call from multiple threads concurrently, while non-const methods continue -+ // to require exclusive access. -+ // -+ // -+ // Note that implementations may choose not to check required fields within -+ // a lazy sub-message. That is, calling IsInitialized() on the outer message -+ // may return true even if the inner message has missing required fields. -+ // This is necessary because otherwise the inner message would have to be -+ // parsed in order to perform the check, defeating the purpose of lazy -+ // parsing. An implementation which chooses not to check required fields -+ // must be consistent about it. That is, for any particular sub-message, the -+ // implementation must either *always* check its required fields, or *never* -+ // check its required fields, regardless of whether or not the message has -+ // been parsed. -+ Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"` -+ // Is this field deprecated? -+ // Depending on the target platform, this can emit Deprecated annotations -+ // for accessors, or it will be completely ignored; in the very least, this -+ // is a formalization for deprecating fields. -+ Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ // For Google-internal migration only. Do not use. -+ Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` -+ // The parser stores options it doesn't recognize here. See above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *FieldOptions) Reset() { *m = FieldOptions{} } -+func (m *FieldOptions) String() string { return proto.CompactTextString(m) } -+func (*FieldOptions) ProtoMessage() {} -+func (*FieldOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{12} -+} -+ -+var extRange_FieldOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_FieldOptions -+} -+ -+func (m *FieldOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_FieldOptions.Unmarshal(m, b) -+} -+func (m *FieldOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_FieldOptions.Marshal(b, m, deterministic) -+} -+func (m *FieldOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_FieldOptions.Merge(m, src) -+} -+func (m *FieldOptions) XXX_Size() int { -+ return xxx_messageInfo_FieldOptions.Size(m) -+} -+func (m *FieldOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_FieldOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_FieldOptions proto.InternalMessageInfo -+ -+const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING -+const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL -+const Default_FieldOptions_Lazy bool = false -+const Default_FieldOptions_Deprecated bool = false -+const Default_FieldOptions_Weak bool = false -+ -+func (m *FieldOptions) GetCtype() FieldOptions_CType { -+ if m != nil && m.Ctype != nil { -+ return *m.Ctype -+ } -+ return Default_FieldOptions_Ctype -+} -+ -+func (m *FieldOptions) GetPacked() bool { -+ if m != nil && m.Packed != nil { -+ return *m.Packed -+ } -+ return false -+} -+ -+func (m *FieldOptions) GetJstype() FieldOptions_JSType { -+ if m != nil && m.Jstype != nil { -+ return *m.Jstype -+ } -+ return Default_FieldOptions_Jstype -+} -+ -+func (m *FieldOptions) GetLazy() bool { -+ if m != nil && m.Lazy != nil { -+ return *m.Lazy -+ } -+ return Default_FieldOptions_Lazy -+} -+ -+func (m *FieldOptions) GetDeprecated() bool { -+ if m != nil && m.Deprecated != nil { -+ return *m.Deprecated -+ } -+ return Default_FieldOptions_Deprecated -+} -+ -+func (m *FieldOptions) GetWeak() bool { -+ if m != nil && m.Weak != nil { -+ return *m.Weak -+ } -+ return Default_FieldOptions_Weak -+} -+ -+func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+type OneofOptions struct { -+ // The parser stores options it doesn't recognize here. See above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *OneofOptions) Reset() { *m = OneofOptions{} } -+func (m *OneofOptions) String() string { return proto.CompactTextString(m) } -+func (*OneofOptions) ProtoMessage() {} -+func (*OneofOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{13} -+} -+ -+var extRange_OneofOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_OneofOptions -+} -+ -+func (m *OneofOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_OneofOptions.Unmarshal(m, b) -+} -+func (m *OneofOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_OneofOptions.Marshal(b, m, deterministic) -+} -+func (m *OneofOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_OneofOptions.Merge(m, src) -+} -+func (m *OneofOptions) XXX_Size() int { -+ return xxx_messageInfo_OneofOptions.Size(m) -+} -+func (m *OneofOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_OneofOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_OneofOptions proto.InternalMessageInfo -+ -+func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+type EnumOptions struct { -+ // Set this option to true to allow mapping different tag names to the same -+ // value. -+ AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"` -+ // Is this enum deprecated? -+ // Depending on the target platform, this can emit Deprecated annotations -+ // for the enum, or it will be completely ignored; in the very least, this -+ // is a formalization for deprecating enums. -+ Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ // The parser stores options it doesn't recognize here. See above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *EnumOptions) Reset() { *m = EnumOptions{} } -+func (m *EnumOptions) String() string { return proto.CompactTextString(m) } -+func (*EnumOptions) ProtoMessage() {} -+func (*EnumOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{14} -+} -+ -+var extRange_EnumOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_EnumOptions -+} -+ -+func (m *EnumOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_EnumOptions.Unmarshal(m, b) -+} -+func (m *EnumOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_EnumOptions.Marshal(b, m, deterministic) -+} -+func (m *EnumOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_EnumOptions.Merge(m, src) -+} -+func (m *EnumOptions) XXX_Size() int { -+ return xxx_messageInfo_EnumOptions.Size(m) -+} -+func (m *EnumOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_EnumOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_EnumOptions proto.InternalMessageInfo -+ -+const Default_EnumOptions_Deprecated bool = false -+ -+func (m *EnumOptions) GetAllowAlias() bool { -+ if m != nil && m.AllowAlias != nil { -+ return *m.AllowAlias -+ } -+ return false -+} -+ -+func (m *EnumOptions) GetDeprecated() bool { -+ if m != nil && m.Deprecated != nil { -+ return *m.Deprecated -+ } -+ return Default_EnumOptions_Deprecated -+} -+ -+func (m *EnumOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+type EnumValueOptions struct { -+ // Is this enum value deprecated? -+ // Depending on the target platform, this can emit Deprecated annotations -+ // for the enum value, or it will be completely ignored; in the very least, -+ // this is a formalization for deprecating enum values. -+ Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ // The parser stores options it doesn't recognize here. See above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} } -+func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) } -+func (*EnumValueOptions) ProtoMessage() {} -+func (*EnumValueOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{15} -+} -+ -+var extRange_EnumValueOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_EnumValueOptions -+} -+ -+func (m *EnumValueOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_EnumValueOptions.Unmarshal(m, b) -+} -+func (m *EnumValueOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_EnumValueOptions.Marshal(b, m, deterministic) -+} -+func (m *EnumValueOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_EnumValueOptions.Merge(m, src) -+} -+func (m *EnumValueOptions) XXX_Size() int { -+ return xxx_messageInfo_EnumValueOptions.Size(m) -+} -+func (m *EnumValueOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_EnumValueOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_EnumValueOptions proto.InternalMessageInfo -+ -+const Default_EnumValueOptions_Deprecated bool = false -+ -+func (m *EnumValueOptions) GetDeprecated() bool { -+ if m != nil && m.Deprecated != nil { -+ return *m.Deprecated -+ } -+ return Default_EnumValueOptions_Deprecated -+} -+ -+func (m *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+type ServiceOptions struct { -+ // Is this service deprecated? -+ // Depending on the target platform, this can emit Deprecated annotations -+ // for the service, or it will be completely ignored; in the very least, -+ // this is a formalization for deprecating services. -+ Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ // The parser stores options it doesn't recognize here. See above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ServiceOptions) Reset() { *m = ServiceOptions{} } -+func (m *ServiceOptions) String() string { return proto.CompactTextString(m) } -+func (*ServiceOptions) ProtoMessage() {} -+func (*ServiceOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{16} -+} -+ -+var extRange_ServiceOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_ServiceOptions -+} -+ -+func (m *ServiceOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_ServiceOptions.Unmarshal(m, b) -+} -+func (m *ServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_ServiceOptions.Marshal(b, m, deterministic) -+} -+func (m *ServiceOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ServiceOptions.Merge(m, src) -+} -+func (m *ServiceOptions) XXX_Size() int { -+ return xxx_messageInfo_ServiceOptions.Size(m) -+} -+func (m *ServiceOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_ServiceOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ServiceOptions proto.InternalMessageInfo -+ -+const Default_ServiceOptions_Deprecated bool = false -+ -+func (m *ServiceOptions) GetDeprecated() bool { -+ if m != nil && m.Deprecated != nil { -+ return *m.Deprecated -+ } -+ return Default_ServiceOptions_Deprecated -+} -+ -+func (m *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+type MethodOptions struct { -+ // Is this method deprecated? -+ // Depending on the target platform, this can emit Deprecated annotations -+ // for the method, or it will be completely ignored; in the very least, -+ // this is a formalization for deprecating methods. -+ Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"` -+ // The parser stores options it doesn't recognize here. See above. -+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ proto.XXX_InternalExtensions `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *MethodOptions) Reset() { *m = MethodOptions{} } -+func (m *MethodOptions) String() string { return proto.CompactTextString(m) } -+func (*MethodOptions) ProtoMessage() {} -+func (*MethodOptions) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{17} -+} -+ -+var extRange_MethodOptions = []proto.ExtensionRange{ -+ {Start: 1000, End: 536870911}, -+} -+ -+func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange { -+ return extRange_MethodOptions -+} -+ -+func (m *MethodOptions) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_MethodOptions.Unmarshal(m, b) -+} -+func (m *MethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_MethodOptions.Marshal(b, m, deterministic) -+} -+func (m *MethodOptions) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_MethodOptions.Merge(m, src) -+} -+func (m *MethodOptions) XXX_Size() int { -+ return xxx_messageInfo_MethodOptions.Size(m) -+} -+func (m *MethodOptions) XXX_DiscardUnknown() { -+ xxx_messageInfo_MethodOptions.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_MethodOptions proto.InternalMessageInfo -+ -+const Default_MethodOptions_Deprecated bool = false -+const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN -+ -+func (m *MethodOptions) GetDeprecated() bool { -+ if m != nil && m.Deprecated != nil { -+ return *m.Deprecated -+ } -+ return Default_MethodOptions_Deprecated -+} -+ -+func (m *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel { -+ if m != nil && m.IdempotencyLevel != nil { -+ return *m.IdempotencyLevel -+ } -+ return Default_MethodOptions_IdempotencyLevel -+} -+ -+func (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption { -+ if m != nil { -+ return m.UninterpretedOption -+ } -+ return nil -+} -+ -+// A message representing a option the parser does not recognize. This only -+// appears in options protos created by the compiler::Parser class. -+// DescriptorPool resolves these when building Descriptor objects. Therefore, -+// options protos in descriptor objects (e.g. returned by Descriptor::options(), -+// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions -+// in them. -+type UninterpretedOption struct { -+ Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"` -+ // The value of the uninterpreted option, in whatever type the tokenizer -+ // identified it as during parsing. Exactly one of these should be set. -+ IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"` -+ PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"` -+ NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"` -+ DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` -+ StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` -+ AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} } -+func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) } -+func (*UninterpretedOption) ProtoMessage() {} -+func (*UninterpretedOption) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{18} -+} -+func (m *UninterpretedOption) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_UninterpretedOption.Unmarshal(m, b) -+} -+func (m *UninterpretedOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_UninterpretedOption.Marshal(b, m, deterministic) -+} -+func (m *UninterpretedOption) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_UninterpretedOption.Merge(m, src) -+} -+func (m *UninterpretedOption) XXX_Size() int { -+ return xxx_messageInfo_UninterpretedOption.Size(m) -+} -+func (m *UninterpretedOption) XXX_DiscardUnknown() { -+ xxx_messageInfo_UninterpretedOption.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_UninterpretedOption proto.InternalMessageInfo -+ -+func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart { -+ if m != nil { -+ return m.Name -+ } -+ return nil -+} -+ -+func (m *UninterpretedOption) GetIdentifierValue() string { -+ if m != nil && m.IdentifierValue != nil { -+ return *m.IdentifierValue -+ } -+ return "" -+} -+ -+func (m *UninterpretedOption) GetPositiveIntValue() uint64 { -+ if m != nil && m.PositiveIntValue != nil { -+ return *m.PositiveIntValue -+ } -+ return 0 -+} -+ -+func (m *UninterpretedOption) GetNegativeIntValue() int64 { -+ if m != nil && m.NegativeIntValue != nil { -+ return *m.NegativeIntValue -+ } -+ return 0 -+} -+ -+func (m *UninterpretedOption) GetDoubleValue() float64 { -+ if m != nil && m.DoubleValue != nil { -+ return *m.DoubleValue -+ } -+ return 0 -+} -+ -+func (m *UninterpretedOption) GetStringValue() []byte { -+ if m != nil { -+ return m.StringValue -+ } -+ return nil -+} -+ -+func (m *UninterpretedOption) GetAggregateValue() string { -+ if m != nil && m.AggregateValue != nil { -+ return *m.AggregateValue -+ } -+ return "" -+} -+ -+// The name of the uninterpreted option. Each string represents a segment in -+// a dot-separated name. is_extension is true iff a segment represents an -+// extension (denoted with parentheses in options specs in .proto files). -+// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents -+// "foo.(bar.baz).qux". -+type UninterpretedOption_NamePart struct { -+ NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` -+ IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *UninterpretedOption_NamePart) Reset() { *m = UninterpretedOption_NamePart{} } -+func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) } -+func (*UninterpretedOption_NamePart) ProtoMessage() {} -+func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{18, 0} -+} -+func (m *UninterpretedOption_NamePart) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_UninterpretedOption_NamePart.Unmarshal(m, b) -+} -+func (m *UninterpretedOption_NamePart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_UninterpretedOption_NamePart.Marshal(b, m, deterministic) -+} -+func (m *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_UninterpretedOption_NamePart.Merge(m, src) -+} -+func (m *UninterpretedOption_NamePart) XXX_Size() int { -+ return xxx_messageInfo_UninterpretedOption_NamePart.Size(m) -+} -+func (m *UninterpretedOption_NamePart) XXX_DiscardUnknown() { -+ xxx_messageInfo_UninterpretedOption_NamePart.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_UninterpretedOption_NamePart proto.InternalMessageInfo -+ -+func (m *UninterpretedOption_NamePart) GetNamePart() string { -+ if m != nil && m.NamePart != nil { -+ return *m.NamePart -+ } -+ return "" -+} -+ -+func (m *UninterpretedOption_NamePart) GetIsExtension() bool { -+ if m != nil && m.IsExtension != nil { -+ return *m.IsExtension -+ } -+ return false -+} -+ -+// Encapsulates information about the original source file from which a -+// FileDescriptorProto was generated. -+type SourceCodeInfo struct { -+ // A Location identifies a piece of source code in a .proto file which -+ // corresponds to a particular definition. This information is intended -+ // to be useful to IDEs, code indexers, documentation generators, and similar -+ // tools. -+ // -+ // For example, say we have a file like: -+ // message Foo { -+ // optional string foo = 1; -+ // } -+ // Let's look at just the field definition: -+ // optional string foo = 1; -+ // ^ ^^ ^^ ^ ^^^ -+ // a bc de f ghi -+ // We have the following locations: -+ // span path represents -+ // [a,i) [ 4, 0, 2, 0 ] The whole field definition. -+ // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). -+ // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). -+ // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). -+ // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). -+ // -+ // Notes: -+ // - A location may refer to a repeated field itself (i.e. not to any -+ // particular index within it). This is used whenever a set of elements are -+ // logically enclosed in a single code segment. For example, an entire -+ // extend block (possibly containing multiple extension definitions) will -+ // have an outer location whose path refers to the "extensions" repeated -+ // field without an index. -+ // - Multiple locations may have the same path. This happens when a single -+ // logical declaration is spread out across multiple places. The most -+ // obvious example is the "extend" block again -- there may be multiple -+ // extend blocks in the same scope, each of which will have the same path. -+ // - A location's span is not always a subset of its parent's span. For -+ // example, the "extendee" of an extension declaration appears at the -+ // beginning of the "extend" block and is shared by all extensions within -+ // the block. -+ // - Just because a location's span is a subset of some other location's span -+ // does not mean that it is a descendant. For example, a "group" defines -+ // both a type and a field in a single declaration. Thus, the locations -+ // corresponding to the type and field and their components will overlap. -+ // - Code which tries to interpret locations should probably be designed to -+ // ignore those that it doesn't understand, as more types of locations could -+ // be recorded in the future. -+ Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} } -+func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) } -+func (*SourceCodeInfo) ProtoMessage() {} -+func (*SourceCodeInfo) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{19} -+} -+func (m *SourceCodeInfo) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_SourceCodeInfo.Unmarshal(m, b) -+} -+func (m *SourceCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_SourceCodeInfo.Marshal(b, m, deterministic) -+} -+func (m *SourceCodeInfo) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_SourceCodeInfo.Merge(m, src) -+} -+func (m *SourceCodeInfo) XXX_Size() int { -+ return xxx_messageInfo_SourceCodeInfo.Size(m) -+} -+func (m *SourceCodeInfo) XXX_DiscardUnknown() { -+ xxx_messageInfo_SourceCodeInfo.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_SourceCodeInfo proto.InternalMessageInfo -+ -+func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location { -+ if m != nil { -+ return m.Location -+ } -+ return nil -+} -+ -+type SourceCodeInfo_Location struct { -+ // Identifies which part of the FileDescriptorProto was defined at this -+ // location. -+ // -+ // Each element is a field number or an index. They form a path from -+ // the root FileDescriptorProto to the place where the definition. For -+ // example, this path: -+ // [ 4, 3, 2, 7, 1 ] -+ // refers to: -+ // file.message_type(3) // 4, 3 -+ // .field(7) // 2, 7 -+ // .name() // 1 -+ // This is because FileDescriptorProto.message_type has field number 4: -+ // repeated DescriptorProto message_type = 4; -+ // and DescriptorProto.field has field number 2: -+ // repeated FieldDescriptorProto field = 2; -+ // and FieldDescriptorProto.name has field number 1: -+ // optional string name = 1; -+ // -+ // Thus, the above path gives the location of a field name. If we removed -+ // the last element: -+ // [ 4, 3, 2, 7 ] -+ // this path refers to the whole field declaration (from the beginning -+ // of the label to the terminating semicolon). -+ Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` -+ // Always has exactly three or four elements: start line, start column, -+ // end line (optional, otherwise assumed same as start line), end column. -+ // These are packed into a single field for efficiency. Note that line -+ // and column numbers are zero-based -- typically you will want to add -+ // 1 to each before displaying to a user. -+ Span []int32 `protobuf:"varint,2,rep,packed,name=span" json:"span,omitempty"` -+ // If this SourceCodeInfo represents a complete declaration, these are any -+ // comments appearing before and after the declaration which appear to be -+ // attached to the declaration. -+ // -+ // A series of line comments appearing on consecutive lines, with no other -+ // tokens appearing on those lines, will be treated as a single comment. -+ // -+ // leading_detached_comments will keep paragraphs of comments that appear -+ // before (but not connected to) the current element. Each paragraph, -+ // separated by empty lines, will be one comment element in the repeated -+ // field. -+ // -+ // Only the comment content is provided; comment markers (e.g. //) are -+ // stripped out. For block comments, leading whitespace and an asterisk -+ // will be stripped from the beginning of each line other than the first. -+ // Newlines are included in the output. -+ // -+ // Examples: -+ // -+ // optional int32 foo = 1; // Comment attached to foo. -+ // // Comment attached to bar. -+ // optional int32 bar = 2; -+ // -+ // optional string baz = 3; -+ // // Comment attached to baz. -+ // // Another line attached to baz. -+ // -+ // // Comment attached to qux. -+ // // -+ // // Another line attached to qux. -+ // optional double qux = 4; -+ // -+ // // Detached comment for corge. This is not leading or trailing comments -+ // // to qux or corge because there are blank lines separating it from -+ // // both. -+ // -+ // // Detached comment for corge paragraph 2. -+ // -+ // optional string corge = 5; -+ // /* Block comment attached -+ // * to corge. Leading asterisks -+ // * will be removed. */ -+ // /* Block comment attached to -+ // * grault. */ -+ // optional int32 grault = 6; -+ // -+ // // ignored detached comments. -+ LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` -+ TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` -+ LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *SourceCodeInfo_Location) Reset() { *m = SourceCodeInfo_Location{} } -+func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) } -+func (*SourceCodeInfo_Location) ProtoMessage() {} -+func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{19, 0} -+} -+func (m *SourceCodeInfo_Location) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_SourceCodeInfo_Location.Unmarshal(m, b) -+} -+func (m *SourceCodeInfo_Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_SourceCodeInfo_Location.Marshal(b, m, deterministic) -+} -+func (m *SourceCodeInfo_Location) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_SourceCodeInfo_Location.Merge(m, src) -+} -+func (m *SourceCodeInfo_Location) XXX_Size() int { -+ return xxx_messageInfo_SourceCodeInfo_Location.Size(m) -+} -+func (m *SourceCodeInfo_Location) XXX_DiscardUnknown() { -+ xxx_messageInfo_SourceCodeInfo_Location.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_SourceCodeInfo_Location proto.InternalMessageInfo -+ -+func (m *SourceCodeInfo_Location) GetPath() []int32 { -+ if m != nil { -+ return m.Path -+ } -+ return nil -+} -+ -+func (m *SourceCodeInfo_Location) GetSpan() []int32 { -+ if m != nil { -+ return m.Span -+ } -+ return nil -+} -+ -+func (m *SourceCodeInfo_Location) GetLeadingComments() string { -+ if m != nil && m.LeadingComments != nil { -+ return *m.LeadingComments -+ } -+ return "" -+} -+ -+func (m *SourceCodeInfo_Location) GetTrailingComments() string { -+ if m != nil && m.TrailingComments != nil { -+ return *m.TrailingComments -+ } -+ return "" -+} -+ -+func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string { -+ if m != nil { -+ return m.LeadingDetachedComments -+ } -+ return nil -+} -+ -+// Describes the relationship between generated code and its original source -+// file. A GeneratedCodeInfo message is associated with only one generated -+// source file, but may contain references to different source .proto files. -+type GeneratedCodeInfo struct { -+ // An Annotation connects some span of text in generated code to an element -+ // of its generating .proto file. -+ Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} } -+func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) } -+func (*GeneratedCodeInfo) ProtoMessage() {} -+func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{20} -+} -+func (m *GeneratedCodeInfo) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_GeneratedCodeInfo.Unmarshal(m, b) -+} -+func (m *GeneratedCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_GeneratedCodeInfo.Marshal(b, m, deterministic) -+} -+func (m *GeneratedCodeInfo) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_GeneratedCodeInfo.Merge(m, src) -+} -+func (m *GeneratedCodeInfo) XXX_Size() int { -+ return xxx_messageInfo_GeneratedCodeInfo.Size(m) -+} -+func (m *GeneratedCodeInfo) XXX_DiscardUnknown() { -+ xxx_messageInfo_GeneratedCodeInfo.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_GeneratedCodeInfo proto.InternalMessageInfo -+ -+func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation { -+ if m != nil { -+ return m.Annotation -+ } -+ return nil -+} -+ -+type GeneratedCodeInfo_Annotation struct { -+ // Identifies the element in the original source .proto file. This field -+ // is formatted the same as SourceCodeInfo.Location.path. -+ Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` -+ // Identifies the filesystem path to the original source .proto. -+ SourceFile *string `protobuf:"bytes,2,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"` -+ // Identifies the starting offset in bytes in the generated code -+ // that relates to the identified object. -+ Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"` -+ // Identifies the ending offset in bytes in the generated code that -+ // relates to the identified offset. The end offset should be one past -+ // the last relevant byte (so the length of the text = end - begin). -+ End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_unrecognized []byte `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *GeneratedCodeInfo_Annotation) Reset() { *m = GeneratedCodeInfo_Annotation{} } -+func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) } -+func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} -+func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { -+ return fileDescriptor_308767df5ffe18af, []int{20, 0} -+} -+func (m *GeneratedCodeInfo_Annotation) XXX_Unmarshal(b []byte) error { -+ return xxx_messageInfo_GeneratedCodeInfo_Annotation.Unmarshal(m, b) -+} -+func (m *GeneratedCodeInfo_Annotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ return xxx_messageInfo_GeneratedCodeInfo_Annotation.Marshal(b, m, deterministic) -+} -+func (m *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(m, src) -+} -+func (m *GeneratedCodeInfo_Annotation) XXX_Size() int { -+ return xxx_messageInfo_GeneratedCodeInfo_Annotation.Size(m) -+} -+func (m *GeneratedCodeInfo_Annotation) XXX_DiscardUnknown() { -+ xxx_messageInfo_GeneratedCodeInfo_Annotation.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_GeneratedCodeInfo_Annotation proto.InternalMessageInfo -+ -+func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 { -+ if m != nil { -+ return m.Path -+ } -+ return nil -+} -+ -+func (m *GeneratedCodeInfo_Annotation) GetSourceFile() string { -+ if m != nil && m.SourceFile != nil { -+ return *m.SourceFile -+ } -+ return "" -+} -+ -+func (m *GeneratedCodeInfo_Annotation) GetBegin() int32 { -+ if m != nil && m.Begin != nil { -+ return *m.Begin -+ } -+ return 0 -+} -+ -+func (m *GeneratedCodeInfo_Annotation) GetEnd() int32 { -+ if m != nil && m.End != nil { -+ return *m.End -+ } -+ return 0 -+} -+ -+func init() { -+ proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value) -+ proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value) -+ proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value) -+ proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value) -+ proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) -+ proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value) -+ proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet") -+ proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto") -+ proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto") -+ proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange") -+ proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange") -+ proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions") -+ proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto") -+ proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto") -+ proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto") -+ proto.RegisterType((*EnumDescriptorProto_EnumReservedRange)(nil), "google.protobuf.EnumDescriptorProto.EnumReservedRange") -+ proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto") -+ proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto") -+ proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto") -+ proto.RegisterType((*FileOptions)(nil), "google.protobuf.FileOptions") -+ proto.RegisterType((*MessageOptions)(nil), "google.protobuf.MessageOptions") -+ proto.RegisterType((*FieldOptions)(nil), "google.protobuf.FieldOptions") -+ proto.RegisterType((*OneofOptions)(nil), "google.protobuf.OneofOptions") -+ proto.RegisterType((*EnumOptions)(nil), "google.protobuf.EnumOptions") -+ proto.RegisterType((*EnumValueOptions)(nil), "google.protobuf.EnumValueOptions") -+ proto.RegisterType((*ServiceOptions)(nil), "google.protobuf.ServiceOptions") -+ proto.RegisterType((*MethodOptions)(nil), "google.protobuf.MethodOptions") -+ proto.RegisterType((*UninterpretedOption)(nil), "google.protobuf.UninterpretedOption") -+ proto.RegisterType((*UninterpretedOption_NamePart)(nil), "google.protobuf.UninterpretedOption.NamePart") -+ proto.RegisterType((*SourceCodeInfo)(nil), "google.protobuf.SourceCodeInfo") -+ proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location") -+ proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo") -+ proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation") -+} -+ -+func init() { proto.RegisterFile("descriptor.proto", fileDescriptor_308767df5ffe18af) } -+ -+var fileDescriptor_308767df5ffe18af = []byte{ -+ // 2522 bytes of a gzipped FileDescriptorProto -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xcd, 0x6f, 0xdb, 0xc8, -+ 0x15, 0x5f, 0x7d, 0x5a, 0x7a, 0x92, 0x65, 0x7a, 0xec, 0x75, 0x18, 0xef, 0x47, 0x1c, 0xed, 0x66, -+ 0xe3, 0x24, 0xbb, 0xca, 0xc2, 0x49, 0x9c, 0xac, 0x53, 0x6c, 0x2b, 0x4b, 0x8c, 0x57, 0xa9, 0xbe, -+ 0x4a, 0xc9, 0xdd, 0x64, 0x8b, 0x82, 0x18, 0x93, 0x23, 0x89, 0x09, 0x45, 0x72, 0x49, 0x2a, 0x89, -+ 0x83, 0x1e, 0x02, 0xf4, 0x54, 0xa0, 0x7f, 0x40, 0x51, 0x14, 0x3d, 0xf4, 0xb2, 0x40, 0xff, 0x80, -+ 0x02, 0xed, 0xbd, 0xd7, 0x02, 0xbd, 0xf7, 0x50, 0xa0, 0x05, 0xda, 0x3f, 0xa1, 0xc7, 0x62, 0x66, -+ 0x48, 0x8a, 0xd4, 0x47, 0xe2, 0x5d, 0x20, 0xd9, 0x93, 0x3d, 0xef, 0xfd, 0xde, 0x9b, 0x37, 0x8f, -+ 0xbf, 0x79, 0xf3, 0x66, 0x04, 0x82, 0x46, 0x5c, 0xd5, 0xd1, 0x6d, 0xcf, 0x72, 0x2a, 0xb6, 0x63, -+ 0x79, 0x16, 0x5a, 0x1b, 0x5a, 0xd6, 0xd0, 0x20, 0x7c, 0x74, 0x32, 0x19, 0x94, 0x5b, 0xb0, 0x7e, -+ 0x4f, 0x37, 0x48, 0x3d, 0x04, 0xf6, 0x88, 0x87, 0xee, 0x40, 0x7a, 0xa0, 0x1b, 0x44, 0x4c, 0xec, -+ 0xa4, 0x76, 0x0b, 0x7b, 0x1f, 0x56, 0x66, 0x8c, 0x2a, 0x71, 0x8b, 0x2e, 0x15, 0xcb, 0xcc, 0xa2, -+ 0xfc, 0xef, 0x34, 0x6c, 0x2c, 0xd0, 0x22, 0x04, 0x69, 0x13, 0x8f, 0xa9, 0xc7, 0xc4, 0x6e, 0x5e, -+ 0x66, 0xff, 0x23, 0x11, 0x56, 0x6c, 0xac, 0x3e, 0xc6, 0x43, 0x22, 0x26, 0x99, 0x38, 0x18, 0xa2, -+ 0xf7, 0x01, 0x34, 0x62, 0x13, 0x53, 0x23, 0xa6, 0x7a, 0x2a, 0xa6, 0x76, 0x52, 0xbb, 0x79, 0x39, -+ 0x22, 0x41, 0xd7, 0x60, 0xdd, 0x9e, 0x9c, 0x18, 0xba, 0xaa, 0x44, 0x60, 0xb0, 0x93, 0xda, 0xcd, -+ 0xc8, 0x02, 0x57, 0xd4, 0xa7, 0xe0, 0xcb, 0xb0, 0xf6, 0x94, 0xe0, 0xc7, 0x51, 0x68, 0x81, 0x41, -+ 0x4b, 0x54, 0x1c, 0x01, 0xd6, 0xa0, 0x38, 0x26, 0xae, 0x8b, 0x87, 0x44, 0xf1, 0x4e, 0x6d, 0x22, -+ 0xa6, 0xd9, 0xea, 0x77, 0xe6, 0x56, 0x3f, 0xbb, 0xf2, 0x82, 0x6f, 0xd5, 0x3f, 0xb5, 0x09, 0xaa, -+ 0x42, 0x9e, 0x98, 0x93, 0x31, 0xf7, 0x90, 0x59, 0x92, 0x3f, 0xc9, 0x9c, 0x8c, 0x67, 0xbd, 0xe4, -+ 0xa8, 0x99, 0xef, 0x62, 0xc5, 0x25, 0xce, 0x13, 0x5d, 0x25, 0x62, 0x96, 0x39, 0xb8, 0x3c, 0xe7, -+ 0xa0, 0xc7, 0xf5, 0xb3, 0x3e, 0x02, 0x3b, 0x54, 0x83, 0x3c, 0x79, 0xe6, 0x11, 0xd3, 0xd5, 0x2d, -+ 0x53, 0x5c, 0x61, 0x4e, 0x2e, 0x2d, 0xf8, 0x8a, 0xc4, 0xd0, 0x66, 0x5d, 0x4c, 0xed, 0xd0, 0x3e, -+ 0xac, 0x58, 0xb6, 0xa7, 0x5b, 0xa6, 0x2b, 0xe6, 0x76, 0x12, 0xbb, 0x85, 0xbd, 0x77, 0x17, 0x12, -+ 0xa1, 0xc3, 0x31, 0x72, 0x00, 0x46, 0x0d, 0x10, 0x5c, 0x6b, 0xe2, 0xa8, 0x44, 0x51, 0x2d, 0x8d, -+ 0x28, 0xba, 0x39, 0xb0, 0xc4, 0x3c, 0x73, 0x70, 0x61, 0x7e, 0x21, 0x0c, 0x58, 0xb3, 0x34, 0xd2, -+ 0x30, 0x07, 0x96, 0x5c, 0x72, 0x63, 0x63, 0xb4, 0x05, 0x59, 0xf7, 0xd4, 0xf4, 0xf0, 0x33, 0xb1, -+ 0xc8, 0x18, 0xe2, 0x8f, 0xca, 0x7f, 0xce, 0xc2, 0xda, 0x59, 0x28, 0x76, 0x17, 0x32, 0x03, 0xba, -+ 0x4a, 0x31, 0xf9, 0x6d, 0x72, 0xc0, 0x6d, 0xe2, 0x49, 0xcc, 0x7e, 0xc7, 0x24, 0x56, 0xa1, 0x60, -+ 0x12, 0xd7, 0x23, 0x1a, 0x67, 0x44, 0xea, 0x8c, 0x9c, 0x02, 0x6e, 0x34, 0x4f, 0xa9, 0xf4, 0x77, -+ 0xa2, 0xd4, 0x03, 0x58, 0x0b, 0x43, 0x52, 0x1c, 0x6c, 0x0e, 0x03, 0x6e, 0x5e, 0x7f, 0x55, 0x24, -+ 0x15, 0x29, 0xb0, 0x93, 0xa9, 0x99, 0x5c, 0x22, 0xb1, 0x31, 0xaa, 0x03, 0x58, 0x26, 0xb1, 0x06, -+ 0x8a, 0x46, 0x54, 0x43, 0xcc, 0x2d, 0xc9, 0x52, 0x87, 0x42, 0xe6, 0xb2, 0x64, 0x71, 0xa9, 0x6a, -+ 0xa0, 0xcf, 0xa6, 0x54, 0x5b, 0x59, 0xc2, 0x94, 0x16, 0xdf, 0x64, 0x73, 0x6c, 0x3b, 0x86, 0x92, -+ 0x43, 0x28, 0xef, 0x89, 0xe6, 0xaf, 0x2c, 0xcf, 0x82, 0xa8, 0xbc, 0x72, 0x65, 0xb2, 0x6f, 0xc6, -+ 0x17, 0xb6, 0xea, 0x44, 0x87, 0xe8, 0x03, 0x08, 0x05, 0x0a, 0xa3, 0x15, 0xb0, 0x2a, 0x54, 0x0c, -+ 0x84, 0x6d, 0x3c, 0x26, 0xdb, 0xcf, 0xa1, 0x14, 0x4f, 0x0f, 0xda, 0x84, 0x8c, 0xeb, 0x61, 0xc7, -+ 0x63, 0x2c, 0xcc, 0xc8, 0x7c, 0x80, 0x04, 0x48, 0x11, 0x53, 0x63, 0x55, 0x2e, 0x23, 0xd3, 0x7f, -+ 0xd1, 0x8f, 0xa6, 0x0b, 0x4e, 0xb1, 0x05, 0x7f, 0x34, 0xff, 0x45, 0x63, 0x9e, 0x67, 0xd7, 0xbd, -+ 0x7d, 0x1b, 0x56, 0x63, 0x0b, 0x38, 0xeb, 0xd4, 0xe5, 0x5f, 0xc0, 0xdb, 0x0b, 0x5d, 0xa3, 0x07, -+ 0xb0, 0x39, 0x31, 0x75, 0xd3, 0x23, 0x8e, 0xed, 0x10, 0xca, 0x58, 0x3e, 0x95, 0xf8, 0x9f, 0x95, -+ 0x25, 0x9c, 0x3b, 0x8e, 0xa2, 0xb9, 0x17, 0x79, 0x63, 0x32, 0x2f, 0xbc, 0x9a, 0xcf, 0xfd, 0x77, -+ 0x45, 0x78, 0xf1, 0xe2, 0xc5, 0x8b, 0x64, 0xf9, 0x37, 0x59, 0xd8, 0x5c, 0xb4, 0x67, 0x16, 0x6e, -+ 0xdf, 0x2d, 0xc8, 0x9a, 0x93, 0xf1, 0x09, 0x71, 0x58, 0x92, 0x32, 0xb2, 0x3f, 0x42, 0x55, 0xc8, -+ 0x18, 0xf8, 0x84, 0x18, 0x62, 0x7a, 0x27, 0xb1, 0x5b, 0xda, 0xbb, 0x76, 0xa6, 0x5d, 0x59, 0x69, -+ 0x52, 0x13, 0x99, 0x5b, 0xa2, 0xcf, 0x21, 0xed, 0x97, 0x68, 0xea, 0xe1, 0xea, 0xd9, 0x3c, 0xd0, -+ 0xbd, 0x24, 0x33, 0x3b, 0xf4, 0x0e, 0xe4, 0xe9, 0x5f, 0xce, 0x8d, 0x2c, 0x8b, 0x39, 0x47, 0x05, -+ 0x94, 0x17, 0x68, 0x1b, 0x72, 0x6c, 0x9b, 0x68, 0x24, 0x38, 0xda, 0xc2, 0x31, 0x25, 0x96, 0x46, -+ 0x06, 0x78, 0x62, 0x78, 0xca, 0x13, 0x6c, 0x4c, 0x08, 0x23, 0x7c, 0x5e, 0x2e, 0xfa, 0xc2, 0x9f, -+ 0x52, 0x19, 0xba, 0x00, 0x05, 0xbe, 0xab, 0x74, 0x53, 0x23, 0xcf, 0x58, 0xf5, 0xcc, 0xc8, 0x7c, -+ 0xa3, 0x35, 0xa8, 0x84, 0x4e, 0xff, 0xc8, 0xb5, 0xcc, 0x80, 0x9a, 0x6c, 0x0a, 0x2a, 0x60, 0xd3, -+ 0xdf, 0x9e, 0x2d, 0xdc, 0xef, 0x2d, 0x5e, 0xde, 0x2c, 0xa7, 0xca, 0x7f, 0x4a, 0x42, 0x9a, 0xd5, -+ 0x8b, 0x35, 0x28, 0xf4, 0x1f, 0x76, 0x25, 0xa5, 0xde, 0x39, 0x3e, 0x6c, 0x4a, 0x42, 0x02, 0x95, -+ 0x00, 0x98, 0xe0, 0x5e, 0xb3, 0x53, 0xed, 0x0b, 0xc9, 0x70, 0xdc, 0x68, 0xf7, 0xf7, 0x6f, 0x0a, -+ 0xa9, 0xd0, 0xe0, 0x98, 0x0b, 0xd2, 0x51, 0xc0, 0x8d, 0x3d, 0x21, 0x83, 0x04, 0x28, 0x72, 0x07, -+ 0x8d, 0x07, 0x52, 0x7d, 0xff, 0xa6, 0x90, 0x8d, 0x4b, 0x6e, 0xec, 0x09, 0x2b, 0x68, 0x15, 0xf2, -+ 0x4c, 0x72, 0xd8, 0xe9, 0x34, 0x85, 0x5c, 0xe8, 0xb3, 0xd7, 0x97, 0x1b, 0xed, 0x23, 0x21, 0x1f, -+ 0xfa, 0x3c, 0x92, 0x3b, 0xc7, 0x5d, 0x01, 0x42, 0x0f, 0x2d, 0xa9, 0xd7, 0xab, 0x1e, 0x49, 0x42, -+ 0x21, 0x44, 0x1c, 0x3e, 0xec, 0x4b, 0x3d, 0xa1, 0x18, 0x0b, 0xeb, 0xc6, 0x9e, 0xb0, 0x1a, 0x4e, -+ 0x21, 0xb5, 0x8f, 0x5b, 0x42, 0x09, 0xad, 0xc3, 0x2a, 0x9f, 0x22, 0x08, 0x62, 0x6d, 0x46, 0xb4, -+ 0x7f, 0x53, 0x10, 0xa6, 0x81, 0x70, 0x2f, 0xeb, 0x31, 0xc1, 0xfe, 0x4d, 0x01, 0x95, 0x6b, 0x90, -+ 0x61, 0xec, 0x42, 0x08, 0x4a, 0xcd, 0xea, 0xa1, 0xd4, 0x54, 0x3a, 0xdd, 0x7e, 0xa3, 0xd3, 0xae, -+ 0x36, 0x85, 0xc4, 0x54, 0x26, 0x4b, 0x3f, 0x39, 0x6e, 0xc8, 0x52, 0x5d, 0x48, 0x46, 0x65, 0x5d, -+ 0xa9, 0xda, 0x97, 0xea, 0x42, 0xaa, 0xac, 0xc2, 0xe6, 0xa2, 0x3a, 0xb9, 0x70, 0x67, 0x44, 0x3e, -+ 0x71, 0x72, 0xc9, 0x27, 0x66, 0xbe, 0xe6, 0x3e, 0xf1, 0xbf, 0x92, 0xb0, 0xb1, 0xe0, 0xac, 0x58, -+ 0x38, 0xc9, 0x0f, 0x21, 0xc3, 0x29, 0xca, 0x4f, 0xcf, 0x2b, 0x0b, 0x0f, 0x1d, 0x46, 0xd8, 0xb9, -+ 0x13, 0x94, 0xd9, 0x45, 0x3b, 0x88, 0xd4, 0x92, 0x0e, 0x82, 0xba, 0x98, 0xab, 0xe9, 0x3f, 0x9f, -+ 0xab, 0xe9, 0xfc, 0xd8, 0xdb, 0x3f, 0xcb, 0xb1, 0xc7, 0x64, 0xdf, 0xae, 0xb6, 0x67, 0x16, 0xd4, -+ 0xf6, 0xbb, 0xb0, 0x3e, 0xe7, 0xe8, 0xcc, 0x35, 0xf6, 0x97, 0x09, 0x10, 0x97, 0x25, 0xe7, 0x15, -+ 0x95, 0x2e, 0x19, 0xab, 0x74, 0x77, 0x67, 0x33, 0x78, 0x71, 0xf9, 0x47, 0x98, 0xfb, 0xd6, 0xdf, -+ 0x24, 0x60, 0x6b, 0x71, 0xa7, 0xb8, 0x30, 0x86, 0xcf, 0x21, 0x3b, 0x26, 0xde, 0xc8, 0x0a, 0xba, -+ 0xa5, 0x8f, 0x16, 0x9c, 0xc1, 0x54, 0x3d, 0xfb, 0xb1, 0x7d, 0xab, 0xe8, 0x21, 0x9e, 0x5a, 0xd6, -+ 0xee, 0xf1, 0x68, 0xe6, 0x22, 0xfd, 0x55, 0x12, 0xde, 0x5e, 0xe8, 0x7c, 0x61, 0xa0, 0xef, 0x01, -+ 0xe8, 0xa6, 0x3d, 0xf1, 0x78, 0x47, 0xc4, 0x0b, 0x6c, 0x9e, 0x49, 0x58, 0xf1, 0xa2, 0xc5, 0x73, -+ 0xe2, 0x85, 0xfa, 0x14, 0xd3, 0x03, 0x17, 0x31, 0xc0, 0x9d, 0x69, 0xa0, 0x69, 0x16, 0xe8, 0xfb, -+ 0x4b, 0x56, 0x3a, 0x47, 0xcc, 0x4f, 0x41, 0x50, 0x0d, 0x9d, 0x98, 0x9e, 0xe2, 0x7a, 0x0e, 0xc1, -+ 0x63, 0xdd, 0x1c, 0xb2, 0x13, 0x24, 0x77, 0x90, 0x19, 0x60, 0xc3, 0x25, 0xf2, 0x1a, 0x57, 0xf7, -+ 0x02, 0x2d, 0xb5, 0x60, 0x04, 0x72, 0x22, 0x16, 0xd9, 0x98, 0x05, 0x57, 0x87, 0x16, 0xe5, 0x5f, -+ 0xe7, 0xa1, 0x10, 0xe9, 0xab, 0xd1, 0x45, 0x28, 0x3e, 0xc2, 0x4f, 0xb0, 0x12, 0xdc, 0x95, 0x78, -+ 0x26, 0x0a, 0x54, 0xd6, 0xf5, 0xef, 0x4b, 0x9f, 0xc2, 0x26, 0x83, 0x58, 0x13, 0x8f, 0x38, 0x8a, -+ 0x6a, 0x60, 0xd7, 0x65, 0x49, 0xcb, 0x31, 0x28, 0xa2, 0xba, 0x0e, 0x55, 0xd5, 0x02, 0x0d, 0xba, -+ 0x05, 0x1b, 0xcc, 0x62, 0x3c, 0x31, 0x3c, 0xdd, 0x36, 0x88, 0x42, 0x6f, 0x6f, 0x2e, 0x3b, 0x49, -+ 0xc2, 0xc8, 0xd6, 0x29, 0xa2, 0xe5, 0x03, 0x68, 0x44, 0x2e, 0xaa, 0xc3, 0x7b, 0xcc, 0x6c, 0x48, -+ 0x4c, 0xe2, 0x60, 0x8f, 0x28, 0xe4, 0xeb, 0x09, 0x36, 0x5c, 0x05, 0x9b, 0x9a, 0x32, 0xc2, 0xee, -+ 0x48, 0xdc, 0xa4, 0x0e, 0x0e, 0x93, 0x62, 0x42, 0x3e, 0x4f, 0x81, 0x47, 0x3e, 0x4e, 0x62, 0xb0, -+ 0xaa, 0xa9, 0x7d, 0x81, 0xdd, 0x11, 0x3a, 0x80, 0x2d, 0xe6, 0xc5, 0xf5, 0x1c, 0xdd, 0x1c, 0x2a, -+ 0xea, 0x88, 0xa8, 0x8f, 0x95, 0x89, 0x37, 0xb8, 0x23, 0xbe, 0x13, 0x9d, 0x9f, 0x45, 0xd8, 0x63, -+ 0x98, 0x1a, 0x85, 0x1c, 0x7b, 0x83, 0x3b, 0xa8, 0x07, 0x45, 0xfa, 0x31, 0xc6, 0xfa, 0x73, 0xa2, -+ 0x0c, 0x2c, 0x87, 0x1d, 0x8d, 0xa5, 0x05, 0xa5, 0x29, 0x92, 0xc1, 0x4a, 0xc7, 0x37, 0x68, 0x59, -+ 0x1a, 0x39, 0xc8, 0xf4, 0xba, 0x92, 0x54, 0x97, 0x0b, 0x81, 0x97, 0x7b, 0x96, 0x43, 0x09, 0x35, -+ 0xb4, 0xc2, 0x04, 0x17, 0x38, 0xa1, 0x86, 0x56, 0x90, 0xde, 0x5b, 0xb0, 0xa1, 0xaa, 0x7c, 0xcd, -+ 0xba, 0xaa, 0xf8, 0x77, 0x2c, 0x57, 0x14, 0x62, 0xc9, 0x52, 0xd5, 0x23, 0x0e, 0xf0, 0x39, 0xee, -+ 0xa2, 0xcf, 0xe0, 0xed, 0x69, 0xb2, 0xa2, 0x86, 0xeb, 0x73, 0xab, 0x9c, 0x35, 0xbd, 0x05, 0x1b, -+ 0xf6, 0xe9, 0xbc, 0x21, 0x8a, 0xcd, 0x68, 0x9f, 0xce, 0x9a, 0xdd, 0x86, 0x4d, 0x7b, 0x64, 0xcf, -+ 0xdb, 0x5d, 0x8d, 0xda, 0x21, 0x7b, 0x64, 0xcf, 0x1a, 0x5e, 0x62, 0x17, 0x6e, 0x87, 0xa8, 0xd8, -+ 0x23, 0x9a, 0x78, 0x2e, 0x0a, 0x8f, 0x28, 0xd0, 0x75, 0x10, 0x54, 0x55, 0x21, 0x26, 0x3e, 0x31, -+ 0x88, 0x82, 0x1d, 0x62, 0x62, 0x57, 0xbc, 0x10, 0x05, 0x97, 0x54, 0x55, 0x62, 0xda, 0x2a, 0x53, -+ 0xa2, 0xab, 0xb0, 0x6e, 0x9d, 0x3c, 0x52, 0x39, 0x25, 0x15, 0xdb, 0x21, 0x03, 0xfd, 0x99, 0xf8, -+ 0x21, 0xcb, 0xef, 0x1a, 0x55, 0x30, 0x42, 0x76, 0x99, 0x18, 0x5d, 0x01, 0x41, 0x75, 0x47, 0xd8, -+ 0xb1, 0x59, 0x4d, 0x76, 0x6d, 0xac, 0x12, 0xf1, 0x12, 0x87, 0x72, 0x79, 0x3b, 0x10, 0xd3, 0x2d, -+ 0xe1, 0x3e, 0xd5, 0x07, 0x5e, 0xe0, 0xf1, 0x32, 0xdf, 0x12, 0x4c, 0xe6, 0x7b, 0xdb, 0x05, 0x81, -+ 0xa6, 0x22, 0x36, 0xf1, 0x2e, 0x83, 0x95, 0xec, 0x91, 0x1d, 0x9d, 0xf7, 0x03, 0x58, 0xa5, 0xc8, -+ 0xe9, 0xa4, 0x57, 0x78, 0x43, 0x66, 0x8f, 0x22, 0x33, 0xde, 0x84, 0x2d, 0x0a, 0x1a, 0x13, 0x0f, -+ 0x6b, 0xd8, 0xc3, 0x11, 0xf4, 0xc7, 0x0c, 0x4d, 0xf3, 0xde, 0xf2, 0x95, 0xb1, 0x38, 0x9d, 0xc9, -+ 0xc9, 0x69, 0xc8, 0xac, 0x4f, 0x78, 0x9c, 0x54, 0x16, 0x70, 0xeb, 0xb5, 0x35, 0xdd, 0xe5, 0x03, -+ 0x28, 0x46, 0x89, 0x8f, 0xf2, 0xc0, 0xa9, 0x2f, 0x24, 0x68, 0x17, 0x54, 0xeb, 0xd4, 0x69, 0xff, -+ 0xf2, 0x95, 0x24, 0x24, 0x69, 0x1f, 0xd5, 0x6c, 0xf4, 0x25, 0x45, 0x3e, 0x6e, 0xf7, 0x1b, 0x2d, -+ 0x49, 0x48, 0x45, 0x1b, 0xf6, 0xbf, 0x26, 0xa1, 0x14, 0xbf, 0x7b, 0xa1, 0x1f, 0xc0, 0xb9, 0xe0, -+ 0xa1, 0xc4, 0x25, 0x9e, 0xf2, 0x54, 0x77, 0xd8, 0x5e, 0x1c, 0x63, 0x7e, 0x2e, 0x86, 0x6c, 0xd8, -+ 0xf4, 0x51, 0x3d, 0xe2, 0x7d, 0xa9, 0x3b, 0x74, 0xa7, 0x8d, 0xb1, 0x87, 0x9a, 0x70, 0xc1, 0xb4, -+ 0x14, 0xd7, 0xc3, 0xa6, 0x86, 0x1d, 0x4d, 0x99, 0x3e, 0x51, 0x29, 0x58, 0x55, 0x89, 0xeb, 0x5a, -+ 0xfc, 0x0c, 0x0c, 0xbd, 0xbc, 0x6b, 0x5a, 0x3d, 0x1f, 0x3c, 0x3d, 0x1c, 0xaa, 0x3e, 0x74, 0x86, -+ 0xb9, 0xa9, 0x65, 0xcc, 0x7d, 0x07, 0xf2, 0x63, 0x6c, 0x2b, 0xc4, 0xf4, 0x9c, 0x53, 0xd6, 0x71, -+ 0xe7, 0xe4, 0xdc, 0x18, 0xdb, 0x12, 0x1d, 0xbf, 0x99, 0x8b, 0xcf, 0x3f, 0x52, 0x50, 0x8c, 0x76, -+ 0xdd, 0xf4, 0x12, 0xa3, 0xb2, 0x03, 0x2a, 0xc1, 0x4a, 0xd8, 0x07, 0x2f, 0xed, 0xd1, 0x2b, 0x35, -+ 0x7a, 0x72, 0x1d, 0x64, 0x79, 0x2f, 0x2c, 0x73, 0x4b, 0xda, 0x35, 0x50, 0x6a, 0x11, 0xde, 0x7b, -+ 0xe4, 0x64, 0x7f, 0x84, 0x8e, 0x20, 0xfb, 0xc8, 0x65, 0xbe, 0xb3, 0xcc, 0xf7, 0x87, 0x2f, 0xf7, -+ 0x7d, 0xbf, 0xc7, 0x9c, 0xe7, 0xef, 0xf7, 0x94, 0x76, 0x47, 0x6e, 0x55, 0x9b, 0xb2, 0x6f, 0x8e, -+ 0xce, 0x43, 0xda, 0xc0, 0xcf, 0x4f, 0xe3, 0x67, 0x1c, 0x13, 0x9d, 0x35, 0xf1, 0xe7, 0x21, 0xfd, -+ 0x94, 0xe0, 0xc7, 0xf1, 0x93, 0x85, 0x89, 0x5e, 0x23, 0xf5, 0xaf, 0x43, 0x86, 0xe5, 0x0b, 0x01, -+ 0xf8, 0x19, 0x13, 0xde, 0x42, 0x39, 0x48, 0xd7, 0x3a, 0x32, 0xa5, 0xbf, 0x00, 0x45, 0x2e, 0x55, -+ 0xba, 0x0d, 0xa9, 0x26, 0x09, 0xc9, 0xf2, 0x2d, 0xc8, 0xf2, 0x24, 0xd0, 0xad, 0x11, 0xa6, 0x41, -+ 0x78, 0xcb, 0x1f, 0xfa, 0x3e, 0x12, 0x81, 0xf6, 0xb8, 0x75, 0x28, 0xc9, 0x42, 0x32, 0xfa, 0x79, -+ 0x5d, 0x28, 0x46, 0x1b, 0xee, 0x37, 0xc3, 0xa9, 0xbf, 0x24, 0xa0, 0x10, 0x69, 0xa0, 0x69, 0xe7, -+ 0x83, 0x0d, 0xc3, 0x7a, 0xaa, 0x60, 0x43, 0xc7, 0xae, 0x4f, 0x0a, 0x60, 0xa2, 0x2a, 0x95, 0x9c, -+ 0xf5, 0xa3, 0xbd, 0x91, 0xe0, 0x7f, 0x9f, 0x00, 0x61, 0xb6, 0x77, 0x9d, 0x09, 0x30, 0xf1, 0xbd, -+ 0x06, 0xf8, 0xbb, 0x04, 0x94, 0xe2, 0x0d, 0xeb, 0x4c, 0x78, 0x17, 0xbf, 0xd7, 0xf0, 0xfe, 0x99, -+ 0x84, 0xd5, 0x58, 0x9b, 0x7a, 0xd6, 0xe8, 0xbe, 0x86, 0x75, 0x5d, 0x23, 0x63, 0xdb, 0xf2, 0x88, -+ 0xa9, 0x9e, 0x2a, 0x06, 0x79, 0x42, 0x0c, 0xb1, 0xcc, 0x0a, 0xc5, 0xf5, 0x97, 0x37, 0xc2, 0x95, -+ 0xc6, 0xd4, 0xae, 0x49, 0xcd, 0x0e, 0x36, 0x1a, 0x75, 0xa9, 0xd5, 0xed, 0xf4, 0xa5, 0x76, 0xed, -+ 0xa1, 0x72, 0xdc, 0xfe, 0x71, 0xbb, 0xf3, 0x65, 0x5b, 0x16, 0xf4, 0x19, 0xd8, 0x6b, 0xdc, 0xea, -+ 0x5d, 0x10, 0x66, 0x83, 0x42, 0xe7, 0x60, 0x51, 0x58, 0xc2, 0x5b, 0x68, 0x03, 0xd6, 0xda, 0x1d, -+ 0xa5, 0xd7, 0xa8, 0x4b, 0x8a, 0x74, 0xef, 0x9e, 0x54, 0xeb, 0xf7, 0xf8, 0xd3, 0x46, 0x88, 0xee, -+ 0xc7, 0x37, 0xf5, 0x6f, 0x53, 0xb0, 0xb1, 0x20, 0x12, 0x54, 0xf5, 0x2f, 0x25, 0xfc, 0x9e, 0xf4, -+ 0xc9, 0x59, 0xa2, 0xaf, 0xd0, 0xae, 0xa0, 0x8b, 0x1d, 0xcf, 0xbf, 0xc3, 0x5c, 0x01, 0x9a, 0x25, -+ 0xd3, 0xd3, 0x07, 0x3a, 0x71, 0xfc, 0x97, 0x20, 0x7e, 0x53, 0x59, 0x9b, 0xca, 0xf9, 0x63, 0xd0, -+ 0xc7, 0x80, 0x6c, 0xcb, 0xd5, 0x3d, 0xfd, 0x09, 0x51, 0x74, 0x33, 0x78, 0x36, 0xa2, 0x37, 0x97, -+ 0xb4, 0x2c, 0x04, 0x9a, 0x86, 0xe9, 0x85, 0x68, 0x93, 0x0c, 0xf1, 0x0c, 0x9a, 0x16, 0xf0, 0x94, -+ 0x2c, 0x04, 0x9a, 0x10, 0x7d, 0x11, 0x8a, 0x9a, 0x35, 0xa1, 0xed, 0x1c, 0xc7, 0xd1, 0xf3, 0x22, -+ 0x21, 0x17, 0xb8, 0x2c, 0x84, 0xf8, 0x8d, 0xfa, 0xf4, 0xbd, 0xaa, 0x28, 0x17, 0xb8, 0x8c, 0x43, -+ 0x2e, 0xc3, 0x1a, 0x1e, 0x0e, 0x1d, 0xea, 0x3c, 0x70, 0xc4, 0xaf, 0x1e, 0xa5, 0x50, 0xcc, 0x80, -+ 0xdb, 0xf7, 0x21, 0x17, 0xe4, 0x81, 0x1e, 0xc9, 0x34, 0x13, 0x8a, 0xcd, 0xef, 0xd3, 0xc9, 0xdd, -+ 0xbc, 0x9c, 0x33, 0x03, 0xe5, 0x45, 0x28, 0xea, 0xae, 0x32, 0x7d, 0x7e, 0x4f, 0xee, 0x24, 0x77, -+ 0x73, 0x72, 0x41, 0x77, 0xc3, 0xa7, 0xcb, 0xf2, 0x37, 0x49, 0x28, 0xc5, 0x7f, 0x3e, 0x40, 0x75, -+ 0xc8, 0x19, 0x96, 0x8a, 0x19, 0xb5, 0xf8, 0x6f, 0x57, 0xbb, 0xaf, 0xf8, 0xc5, 0xa1, 0xd2, 0xf4, -+ 0xf1, 0x72, 0x68, 0xb9, 0xfd, 0xb7, 0x04, 0xe4, 0x02, 0x31, 0xda, 0x82, 0xb4, 0x8d, 0xbd, 0x11, -+ 0x73, 0x97, 0x39, 0x4c, 0x0a, 0x09, 0x99, 0x8d, 0xa9, 0xdc, 0xb5, 0xb1, 0xc9, 0x28, 0xe0, 0xcb, -+ 0xe9, 0x98, 0x7e, 0x57, 0x83, 0x60, 0x8d, 0xdd, 0x6b, 0xac, 0xf1, 0x98, 0x98, 0x9e, 0x1b, 0x7c, -+ 0x57, 0x5f, 0x5e, 0xf3, 0xc5, 0xe8, 0x1a, 0xac, 0x7b, 0x0e, 0xd6, 0x8d, 0x18, 0x36, 0xcd, 0xb0, -+ 0x42, 0xa0, 0x08, 0xc1, 0x07, 0x70, 0x3e, 0xf0, 0xab, 0x11, 0x0f, 0xab, 0x23, 0xa2, 0x4d, 0x8d, -+ 0xb2, 0xec, 0xfd, 0xe2, 0x9c, 0x0f, 0xa8, 0xfb, 0xfa, 0xc0, 0xb6, 0xfc, 0xf7, 0x04, 0xac, 0x07, -+ 0x37, 0x31, 0x2d, 0x4c, 0x56, 0x0b, 0x00, 0x9b, 0xa6, 0xe5, 0x45, 0xd3, 0x35, 0x4f, 0xe5, 0x39, -+ 0xbb, 0x4a, 0x35, 0x34, 0x92, 0x23, 0x0e, 0xb6, 0xc7, 0x00, 0x53, 0xcd, 0xd2, 0xb4, 0x5d, 0x80, -+ 0x82, 0xff, 0xdb, 0x10, 0xfb, 0x81, 0x91, 0xdf, 0xdd, 0x81, 0x8b, 0xe8, 0x95, 0x0d, 0x6d, 0x42, -+ 0xe6, 0x84, 0x0c, 0x75, 0xd3, 0x7f, 0xf1, 0xe5, 0x83, 0xe0, 0x85, 0x25, 0x1d, 0xbe, 0xb0, 0x1c, -+ 0xfe, 0x0c, 0x36, 0x54, 0x6b, 0x3c, 0x1b, 0xee, 0xa1, 0x30, 0xf3, 0x7e, 0xe0, 0x7e, 0x91, 0xf8, -+ 0x0a, 0xa6, 0x2d, 0xe6, 0xff, 0x12, 0x89, 0x3f, 0x24, 0x53, 0x47, 0xdd, 0xc3, 0x3f, 0x26, 0xb7, -+ 0x8f, 0xb8, 0x69, 0x37, 0x58, 0xa9, 0x4c, 0x06, 0x06, 0x51, 0x69, 0xf4, 0xff, 0x0f, 0x00, 0x00, -+ 0xff, 0xff, 0x88, 0x17, 0xc1, 0xbe, 0x38, 0x1d, 0x00, 0x00, -+} -diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go -new file mode 100755 -index 0000000..165b211 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go -@@ -0,0 +1,752 @@ -+// Code generated by protoc-gen-gogo. DO NOT EDIT. -+// source: descriptor.proto -+ -+package descriptor -+ -+import ( -+ fmt "fmt" -+ github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" -+ proto "github.com/gogo/protobuf/proto" -+ math "math" -+ reflect "reflect" -+ sort "sort" -+ strconv "strconv" -+ strings "strings" -+) -+ -+// Reference imports to suppress errors if they are not otherwise used. -+var _ = proto.Marshal -+var _ = fmt.Errorf -+var _ = math.Inf -+ -+func (this *FileDescriptorSet) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 5) -+ s = append(s, "&descriptor.FileDescriptorSet{") -+ if this.File != nil { -+ s = append(s, "File: "+fmt.Sprintf("%#v", this.File)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *FileDescriptorProto) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 16) -+ s = append(s, "&descriptor.FileDescriptorProto{") -+ if this.Name != nil { -+ s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") -+ } -+ if this.Package != nil { -+ s = append(s, "Package: "+valueToGoStringDescriptor(this.Package, "string")+",\n") -+ } -+ if this.Dependency != nil { -+ s = append(s, "Dependency: "+fmt.Sprintf("%#v", this.Dependency)+",\n") -+ } -+ if this.PublicDependency != nil { -+ s = append(s, "PublicDependency: "+fmt.Sprintf("%#v", this.PublicDependency)+",\n") -+ } -+ if this.WeakDependency != nil { -+ s = append(s, "WeakDependency: "+fmt.Sprintf("%#v", this.WeakDependency)+",\n") -+ } -+ if this.MessageType != nil { -+ s = append(s, "MessageType: "+fmt.Sprintf("%#v", this.MessageType)+",\n") -+ } -+ if this.EnumType != nil { -+ s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n") -+ } -+ if this.Service != nil { -+ s = append(s, "Service: "+fmt.Sprintf("%#v", this.Service)+",\n") -+ } -+ if this.Extension != nil { -+ s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.SourceCodeInfo != nil { -+ s = append(s, "SourceCodeInfo: "+fmt.Sprintf("%#v", this.SourceCodeInfo)+",\n") -+ } -+ if this.Syntax != nil { -+ s = append(s, "Syntax: "+valueToGoStringDescriptor(this.Syntax, "string")+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *DescriptorProto) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 14) -+ s = append(s, "&descriptor.DescriptorProto{") -+ if this.Name != nil { -+ s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") -+ } -+ if this.Field != nil { -+ s = append(s, "Field: "+fmt.Sprintf("%#v", this.Field)+",\n") -+ } -+ if this.Extension != nil { -+ s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n") -+ } -+ if this.NestedType != nil { -+ s = append(s, "NestedType: "+fmt.Sprintf("%#v", this.NestedType)+",\n") -+ } -+ if this.EnumType != nil { -+ s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n") -+ } -+ if this.ExtensionRange != nil { -+ s = append(s, "ExtensionRange: "+fmt.Sprintf("%#v", this.ExtensionRange)+",\n") -+ } -+ if this.OneofDecl != nil { -+ s = append(s, "OneofDecl: "+fmt.Sprintf("%#v", this.OneofDecl)+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.ReservedRange != nil { -+ s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n") -+ } -+ if this.ReservedName != nil { -+ s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *DescriptorProto_ExtensionRange) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 7) -+ s = append(s, "&descriptor.DescriptorProto_ExtensionRange{") -+ if this.Start != nil { -+ s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n") -+ } -+ if this.End != nil { -+ s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *DescriptorProto_ReservedRange) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 6) -+ s = append(s, "&descriptor.DescriptorProto_ReservedRange{") -+ if this.Start != nil { -+ s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n") -+ } -+ if this.End != nil { -+ s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *ExtensionRangeOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 5) -+ s = append(s, "&descriptor.ExtensionRangeOptions{") -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *FieldDescriptorProto) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 14) -+ s = append(s, "&descriptor.FieldDescriptorProto{") -+ if this.Name != nil { -+ s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") -+ } -+ if this.Number != nil { -+ s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n") -+ } -+ if this.Label != nil { -+ s = append(s, "Label: "+valueToGoStringDescriptor(this.Label, "FieldDescriptorProto_Label")+",\n") -+ } -+ if this.Type != nil { -+ s = append(s, "Type: "+valueToGoStringDescriptor(this.Type, "FieldDescriptorProto_Type")+",\n") -+ } -+ if this.TypeName != nil { -+ s = append(s, "TypeName: "+valueToGoStringDescriptor(this.TypeName, "string")+",\n") -+ } -+ if this.Extendee != nil { -+ s = append(s, "Extendee: "+valueToGoStringDescriptor(this.Extendee, "string")+",\n") -+ } -+ if this.DefaultValue != nil { -+ s = append(s, "DefaultValue: "+valueToGoStringDescriptor(this.DefaultValue, "string")+",\n") -+ } -+ if this.OneofIndex != nil { -+ s = append(s, "OneofIndex: "+valueToGoStringDescriptor(this.OneofIndex, "int32")+",\n") -+ } -+ if this.JsonName != nil { -+ s = append(s, "JsonName: "+valueToGoStringDescriptor(this.JsonName, "string")+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *OneofDescriptorProto) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 6) -+ s = append(s, "&descriptor.OneofDescriptorProto{") -+ if this.Name != nil { -+ s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *EnumDescriptorProto) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 9) -+ s = append(s, "&descriptor.EnumDescriptorProto{") -+ if this.Name != nil { -+ s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") -+ } -+ if this.Value != nil { -+ s = append(s, "Value: "+fmt.Sprintf("%#v", this.Value)+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.ReservedRange != nil { -+ s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n") -+ } -+ if this.ReservedName != nil { -+ s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *EnumDescriptorProto_EnumReservedRange) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 6) -+ s = append(s, "&descriptor.EnumDescriptorProto_EnumReservedRange{") -+ if this.Start != nil { -+ s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n") -+ } -+ if this.End != nil { -+ s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *EnumValueDescriptorProto) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 7) -+ s = append(s, "&descriptor.EnumValueDescriptorProto{") -+ if this.Name != nil { -+ s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") -+ } -+ if this.Number != nil { -+ s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *ServiceDescriptorProto) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 7) -+ s = append(s, "&descriptor.ServiceDescriptorProto{") -+ if this.Name != nil { -+ s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") -+ } -+ if this.Method != nil { -+ s = append(s, "Method: "+fmt.Sprintf("%#v", this.Method)+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *MethodDescriptorProto) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 10) -+ s = append(s, "&descriptor.MethodDescriptorProto{") -+ if this.Name != nil { -+ s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") -+ } -+ if this.InputType != nil { -+ s = append(s, "InputType: "+valueToGoStringDescriptor(this.InputType, "string")+",\n") -+ } -+ if this.OutputType != nil { -+ s = append(s, "OutputType: "+valueToGoStringDescriptor(this.OutputType, "string")+",\n") -+ } -+ if this.Options != nil { -+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") -+ } -+ if this.ClientStreaming != nil { -+ s = append(s, "ClientStreaming: "+valueToGoStringDescriptor(this.ClientStreaming, "bool")+",\n") -+ } -+ if this.ServerStreaming != nil { -+ s = append(s, "ServerStreaming: "+valueToGoStringDescriptor(this.ServerStreaming, "bool")+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *FileOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 25) -+ s = append(s, "&descriptor.FileOptions{") -+ if this.JavaPackage != nil { -+ s = append(s, "JavaPackage: "+valueToGoStringDescriptor(this.JavaPackage, "string")+",\n") -+ } -+ if this.JavaOuterClassname != nil { -+ s = append(s, "JavaOuterClassname: "+valueToGoStringDescriptor(this.JavaOuterClassname, "string")+",\n") -+ } -+ if this.JavaMultipleFiles != nil { -+ s = append(s, "JavaMultipleFiles: "+valueToGoStringDescriptor(this.JavaMultipleFiles, "bool")+",\n") -+ } -+ if this.JavaGenerateEqualsAndHash != nil { -+ s = append(s, "JavaGenerateEqualsAndHash: "+valueToGoStringDescriptor(this.JavaGenerateEqualsAndHash, "bool")+",\n") -+ } -+ if this.JavaStringCheckUtf8 != nil { -+ s = append(s, "JavaStringCheckUtf8: "+valueToGoStringDescriptor(this.JavaStringCheckUtf8, "bool")+",\n") -+ } -+ if this.OptimizeFor != nil { -+ s = append(s, "OptimizeFor: "+valueToGoStringDescriptor(this.OptimizeFor, "FileOptions_OptimizeMode")+",\n") -+ } -+ if this.GoPackage != nil { -+ s = append(s, "GoPackage: "+valueToGoStringDescriptor(this.GoPackage, "string")+",\n") -+ } -+ if this.CcGenericServices != nil { -+ s = append(s, "CcGenericServices: "+valueToGoStringDescriptor(this.CcGenericServices, "bool")+",\n") -+ } -+ if this.JavaGenericServices != nil { -+ s = append(s, "JavaGenericServices: "+valueToGoStringDescriptor(this.JavaGenericServices, "bool")+",\n") -+ } -+ if this.PyGenericServices != nil { -+ s = append(s, "PyGenericServices: "+valueToGoStringDescriptor(this.PyGenericServices, "bool")+",\n") -+ } -+ if this.PhpGenericServices != nil { -+ s = append(s, "PhpGenericServices: "+valueToGoStringDescriptor(this.PhpGenericServices, "bool")+",\n") -+ } -+ if this.Deprecated != nil { -+ s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") -+ } -+ if this.CcEnableArenas != nil { -+ s = append(s, "CcEnableArenas: "+valueToGoStringDescriptor(this.CcEnableArenas, "bool")+",\n") -+ } -+ if this.ObjcClassPrefix != nil { -+ s = append(s, "ObjcClassPrefix: "+valueToGoStringDescriptor(this.ObjcClassPrefix, "string")+",\n") -+ } -+ if this.CsharpNamespace != nil { -+ s = append(s, "CsharpNamespace: "+valueToGoStringDescriptor(this.CsharpNamespace, "string")+",\n") -+ } -+ if this.SwiftPrefix != nil { -+ s = append(s, "SwiftPrefix: "+valueToGoStringDescriptor(this.SwiftPrefix, "string")+",\n") -+ } -+ if this.PhpClassPrefix != nil { -+ s = append(s, "PhpClassPrefix: "+valueToGoStringDescriptor(this.PhpClassPrefix, "string")+",\n") -+ } -+ if this.PhpNamespace != nil { -+ s = append(s, "PhpNamespace: "+valueToGoStringDescriptor(this.PhpNamespace, "string")+",\n") -+ } -+ if this.PhpMetadataNamespace != nil { -+ s = append(s, "PhpMetadataNamespace: "+valueToGoStringDescriptor(this.PhpMetadataNamespace, "string")+",\n") -+ } -+ if this.RubyPackage != nil { -+ s = append(s, "RubyPackage: "+valueToGoStringDescriptor(this.RubyPackage, "string")+",\n") -+ } -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *MessageOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 9) -+ s = append(s, "&descriptor.MessageOptions{") -+ if this.MessageSetWireFormat != nil { -+ s = append(s, "MessageSetWireFormat: "+valueToGoStringDescriptor(this.MessageSetWireFormat, "bool")+",\n") -+ } -+ if this.NoStandardDescriptorAccessor != nil { -+ s = append(s, "NoStandardDescriptorAccessor: "+valueToGoStringDescriptor(this.NoStandardDescriptorAccessor, "bool")+",\n") -+ } -+ if this.Deprecated != nil { -+ s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") -+ } -+ if this.MapEntry != nil { -+ s = append(s, "MapEntry: "+valueToGoStringDescriptor(this.MapEntry, "bool")+",\n") -+ } -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *FieldOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 11) -+ s = append(s, "&descriptor.FieldOptions{") -+ if this.Ctype != nil { -+ s = append(s, "Ctype: "+valueToGoStringDescriptor(this.Ctype, "FieldOptions_CType")+",\n") -+ } -+ if this.Packed != nil { -+ s = append(s, "Packed: "+valueToGoStringDescriptor(this.Packed, "bool")+",\n") -+ } -+ if this.Jstype != nil { -+ s = append(s, "Jstype: "+valueToGoStringDescriptor(this.Jstype, "FieldOptions_JSType")+",\n") -+ } -+ if this.Lazy != nil { -+ s = append(s, "Lazy: "+valueToGoStringDescriptor(this.Lazy, "bool")+",\n") -+ } -+ if this.Deprecated != nil { -+ s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") -+ } -+ if this.Weak != nil { -+ s = append(s, "Weak: "+valueToGoStringDescriptor(this.Weak, "bool")+",\n") -+ } -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *OneofOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 5) -+ s = append(s, "&descriptor.OneofOptions{") -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *EnumOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 7) -+ s = append(s, "&descriptor.EnumOptions{") -+ if this.AllowAlias != nil { -+ s = append(s, "AllowAlias: "+valueToGoStringDescriptor(this.AllowAlias, "bool")+",\n") -+ } -+ if this.Deprecated != nil { -+ s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") -+ } -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *EnumValueOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 6) -+ s = append(s, "&descriptor.EnumValueOptions{") -+ if this.Deprecated != nil { -+ s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") -+ } -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *ServiceOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 6) -+ s = append(s, "&descriptor.ServiceOptions{") -+ if this.Deprecated != nil { -+ s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") -+ } -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *MethodOptions) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 7) -+ s = append(s, "&descriptor.MethodOptions{") -+ if this.Deprecated != nil { -+ s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") -+ } -+ if this.IdempotencyLevel != nil { -+ s = append(s, "IdempotencyLevel: "+valueToGoStringDescriptor(this.IdempotencyLevel, "MethodOptions_IdempotencyLevel")+",\n") -+ } -+ if this.UninterpretedOption != nil { -+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") -+ } -+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *UninterpretedOption) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 11) -+ s = append(s, "&descriptor.UninterpretedOption{") -+ if this.Name != nil { -+ s = append(s, "Name: "+fmt.Sprintf("%#v", this.Name)+",\n") -+ } -+ if this.IdentifierValue != nil { -+ s = append(s, "IdentifierValue: "+valueToGoStringDescriptor(this.IdentifierValue, "string")+",\n") -+ } -+ if this.PositiveIntValue != nil { -+ s = append(s, "PositiveIntValue: "+valueToGoStringDescriptor(this.PositiveIntValue, "uint64")+",\n") -+ } -+ if this.NegativeIntValue != nil { -+ s = append(s, "NegativeIntValue: "+valueToGoStringDescriptor(this.NegativeIntValue, "int64")+",\n") -+ } -+ if this.DoubleValue != nil { -+ s = append(s, "DoubleValue: "+valueToGoStringDescriptor(this.DoubleValue, "float64")+",\n") -+ } -+ if this.StringValue != nil { -+ s = append(s, "StringValue: "+valueToGoStringDescriptor(this.StringValue, "byte")+",\n") -+ } -+ if this.AggregateValue != nil { -+ s = append(s, "AggregateValue: "+valueToGoStringDescriptor(this.AggregateValue, "string")+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *UninterpretedOption_NamePart) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 6) -+ s = append(s, "&descriptor.UninterpretedOption_NamePart{") -+ if this.NamePart != nil { -+ s = append(s, "NamePart: "+valueToGoStringDescriptor(this.NamePart, "string")+",\n") -+ } -+ if this.IsExtension != nil { -+ s = append(s, "IsExtension: "+valueToGoStringDescriptor(this.IsExtension, "bool")+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *SourceCodeInfo) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 5) -+ s = append(s, "&descriptor.SourceCodeInfo{") -+ if this.Location != nil { -+ s = append(s, "Location: "+fmt.Sprintf("%#v", this.Location)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *SourceCodeInfo_Location) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 9) -+ s = append(s, "&descriptor.SourceCodeInfo_Location{") -+ if this.Path != nil { -+ s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n") -+ } -+ if this.Span != nil { -+ s = append(s, "Span: "+fmt.Sprintf("%#v", this.Span)+",\n") -+ } -+ if this.LeadingComments != nil { -+ s = append(s, "LeadingComments: "+valueToGoStringDescriptor(this.LeadingComments, "string")+",\n") -+ } -+ if this.TrailingComments != nil { -+ s = append(s, "TrailingComments: "+valueToGoStringDescriptor(this.TrailingComments, "string")+",\n") -+ } -+ if this.LeadingDetachedComments != nil { -+ s = append(s, "LeadingDetachedComments: "+fmt.Sprintf("%#v", this.LeadingDetachedComments)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *GeneratedCodeInfo) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 5) -+ s = append(s, "&descriptor.GeneratedCodeInfo{") -+ if this.Annotation != nil { -+ s = append(s, "Annotation: "+fmt.Sprintf("%#v", this.Annotation)+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func (this *GeneratedCodeInfo_Annotation) GoString() string { -+ if this == nil { -+ return "nil" -+ } -+ s := make([]string, 0, 8) -+ s = append(s, "&descriptor.GeneratedCodeInfo_Annotation{") -+ if this.Path != nil { -+ s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n") -+ } -+ if this.SourceFile != nil { -+ s = append(s, "SourceFile: "+valueToGoStringDescriptor(this.SourceFile, "string")+",\n") -+ } -+ if this.Begin != nil { -+ s = append(s, "Begin: "+valueToGoStringDescriptor(this.Begin, "int32")+",\n") -+ } -+ if this.End != nil { -+ s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") -+ } -+ if this.XXX_unrecognized != nil { -+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") -+ } -+ s = append(s, "}") -+ return strings.Join(s, "") -+} -+func valueToGoStringDescriptor(v interface{}, typ string) string { -+ rv := reflect.ValueOf(v) -+ if rv.IsNil() { -+ return "nil" -+ } -+ pv := reflect.Indirect(rv).Interface() -+ return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) -+} -+func extensionToGoStringDescriptor(m github_com_gogo_protobuf_proto.Message) string { -+ e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m) -+ if e == nil { -+ return "nil" -+ } -+ s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{" -+ keys := make([]int, 0, len(e)) -+ for k := range e { -+ keys = append(keys, int(k)) -+ } -+ sort.Ints(keys) -+ ss := []string{} -+ for _, k := range keys { -+ ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString()) -+ } -+ s += strings.Join(ss, ",") + "})" -+ return s -+} -diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go -new file mode 100755 -index 0000000..e0846a3 ---- /dev/null -+++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go -@@ -0,0 +1,390 @@ -+// Protocol Buffers for Go with Gadgets -+// -+// Copyright (c) 2013, The GoGo Authors. All rights reserved. -+// http://github.com/gogo/protobuf -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+package descriptor -+ -+import ( -+ "strings" -+) -+ -+func (msg *DescriptorProto) GetMapFields() (*FieldDescriptorProto, *FieldDescriptorProto) { -+ if !msg.GetOptions().GetMapEntry() { -+ return nil, nil -+ } -+ return msg.GetField()[0], msg.GetField()[1] -+} -+ -+func dotToUnderscore(r rune) rune { -+ if r == '.' { -+ return '_' -+ } -+ return r -+} -+ -+func (field *FieldDescriptorProto) WireType() (wire int) { -+ switch *field.Type { -+ case FieldDescriptorProto_TYPE_DOUBLE: -+ return 1 -+ case FieldDescriptorProto_TYPE_FLOAT: -+ return 5 -+ case FieldDescriptorProto_TYPE_INT64: -+ return 0 -+ case FieldDescriptorProto_TYPE_UINT64: -+ return 0 -+ case FieldDescriptorProto_TYPE_INT32: -+ return 0 -+ case FieldDescriptorProto_TYPE_UINT32: -+ return 0 -+ case FieldDescriptorProto_TYPE_FIXED64: -+ return 1 -+ case FieldDescriptorProto_TYPE_FIXED32: -+ return 5 -+ case FieldDescriptorProto_TYPE_BOOL: -+ return 0 -+ case FieldDescriptorProto_TYPE_STRING: -+ return 2 -+ case FieldDescriptorProto_TYPE_GROUP: -+ return 2 -+ case FieldDescriptorProto_TYPE_MESSAGE: -+ return 2 -+ case FieldDescriptorProto_TYPE_BYTES: -+ return 2 -+ case FieldDescriptorProto_TYPE_ENUM: -+ return 0 -+ case FieldDescriptorProto_TYPE_SFIXED32: -+ return 5 -+ case FieldDescriptorProto_TYPE_SFIXED64: -+ return 1 -+ case FieldDescriptorProto_TYPE_SINT32: -+ return 0 -+ case FieldDescriptorProto_TYPE_SINT64: -+ return 0 -+ } -+ panic("unreachable") -+} -+ -+func (field *FieldDescriptorProto) GetKeyUint64() (x uint64) { -+ packed := field.IsPacked() -+ wireType := field.WireType() -+ fieldNumber := field.GetNumber() -+ if packed { -+ wireType = 2 -+ } -+ x = uint64(uint32(fieldNumber)<<3 | uint32(wireType)) -+ return x -+} -+ -+func (field *FieldDescriptorProto) GetKey3Uint64() (x uint64) { -+ packed := field.IsPacked3() -+ wireType := field.WireType() -+ fieldNumber := field.GetNumber() -+ if packed { -+ wireType = 2 -+ } -+ x = uint64(uint32(fieldNumber)<<3 | uint32(wireType)) -+ return x -+} -+ -+func (field *FieldDescriptorProto) GetKey() []byte { -+ x := field.GetKeyUint64() -+ i := 0 -+ keybuf := make([]byte, 0) -+ for i = 0; x > 127; i++ { -+ keybuf = append(keybuf, 0x80|uint8(x&0x7F)) -+ x >>= 7 -+ } -+ keybuf = append(keybuf, uint8(x)) -+ return keybuf -+} -+ -+func (field *FieldDescriptorProto) GetKey3() []byte { -+ x := field.GetKey3Uint64() -+ i := 0 -+ keybuf := make([]byte, 0) -+ for i = 0; x > 127; i++ { -+ keybuf = append(keybuf, 0x80|uint8(x&0x7F)) -+ x >>= 7 -+ } -+ keybuf = append(keybuf, uint8(x)) -+ return keybuf -+} -+ -+func (desc *FileDescriptorSet) GetField(packageName, messageName, fieldName string) *FieldDescriptorProto { -+ msg := desc.GetMessage(packageName, messageName) -+ if msg == nil { -+ return nil -+ } -+ for _, field := range msg.GetField() { -+ if field.GetName() == fieldName { -+ return field -+ } -+ } -+ return nil -+} -+ -+func (file *FileDescriptorProto) GetMessage(typeName string) *DescriptorProto { -+ for _, msg := range file.GetMessageType() { -+ if msg.GetName() == typeName { -+ return msg -+ } -+ nes := file.GetNestedMessage(msg, strings.TrimPrefix(typeName, msg.GetName()+".")) -+ if nes != nil { -+ return nes -+ } -+ } -+ return nil -+} -+ -+func (file *FileDescriptorProto) GetNestedMessage(msg *DescriptorProto, typeName string) *DescriptorProto { -+ for _, nes := range msg.GetNestedType() { -+ if nes.GetName() == typeName { -+ return nes -+ } -+ res := file.GetNestedMessage(nes, strings.TrimPrefix(typeName, nes.GetName()+".")) -+ if res != nil { -+ return res -+ } -+ } -+ return nil -+} -+ -+func (desc *FileDescriptorSet) GetMessage(packageName string, typeName string) *DescriptorProto { -+ for _, file := range desc.GetFile() { -+ if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { -+ continue -+ } -+ for _, msg := range file.GetMessageType() { -+ if msg.GetName() == typeName { -+ return msg -+ } -+ } -+ for _, msg := range file.GetMessageType() { -+ for _, nes := range msg.GetNestedType() { -+ if nes.GetName() == typeName { -+ return nes -+ } -+ if msg.GetName()+"."+nes.GetName() == typeName { -+ return nes -+ } -+ } -+ } -+ } -+ return nil -+} -+ -+func (desc *FileDescriptorSet) IsProto3(packageName string, typeName string) bool { -+ for _, file := range desc.GetFile() { -+ if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { -+ continue -+ } -+ for _, msg := range file.GetMessageType() { -+ if msg.GetName() == typeName { -+ return file.GetSyntax() == "proto3" -+ } -+ } -+ for _, msg := range file.GetMessageType() { -+ for _, nes := range msg.GetNestedType() { -+ if nes.GetName() == typeName { -+ return file.GetSyntax() == "proto3" -+ } -+ if msg.GetName()+"."+nes.GetName() == typeName { -+ return file.GetSyntax() == "proto3" -+ } -+ } -+ } -+ } -+ return false -+} -+ -+func (msg *DescriptorProto) IsExtendable() bool { -+ return len(msg.GetExtensionRange()) > 0 -+} -+ -+func (desc *FileDescriptorSet) FindExtension(packageName string, typeName string, fieldName string) (extPackageName string, field *FieldDescriptorProto) { -+ parent := desc.GetMessage(packageName, typeName) -+ if parent == nil { -+ return "", nil -+ } -+ if !parent.IsExtendable() { -+ return "", nil -+ } -+ extendee := "." + packageName + "." + typeName -+ for _, file := range desc.GetFile() { -+ for _, ext := range file.GetExtension() { -+ if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) { -+ if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) { -+ continue -+ } -+ } else { -+ if ext.GetExtendee() != extendee { -+ continue -+ } -+ } -+ if ext.GetName() == fieldName { -+ return file.GetPackage(), ext -+ } -+ } -+ } -+ return "", nil -+} -+ -+func (desc *FileDescriptorSet) FindExtensionByFieldNumber(packageName string, typeName string, fieldNum int32) (extPackageName string, field *FieldDescriptorProto) { -+ parent := desc.GetMessage(packageName, typeName) -+ if parent == nil { -+ return "", nil -+ } -+ if !parent.IsExtendable() { -+ return "", nil -+ } -+ extendee := "." + packageName + "." + typeName -+ for _, file := range desc.GetFile() { -+ for _, ext := range file.GetExtension() { -+ if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) { -+ if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) { -+ continue -+ } -+ } else { -+ if ext.GetExtendee() != extendee { -+ continue -+ } -+ } -+ if ext.GetNumber() == fieldNum { -+ return file.GetPackage(), ext -+ } -+ } -+ } -+ return "", nil -+} -+ -+func (desc *FileDescriptorSet) FindMessage(packageName string, typeName string, fieldName string) (msgPackageName string, msgName string) { -+ parent := desc.GetMessage(packageName, typeName) -+ if parent == nil { -+ return "", "" -+ } -+ field := parent.GetFieldDescriptor(fieldName) -+ if field == nil { -+ var extPackageName string -+ extPackageName, field = desc.FindExtension(packageName, typeName, fieldName) -+ if field == nil { -+ return "", "" -+ } -+ packageName = extPackageName -+ } -+ typeNames := strings.Split(field.GetTypeName(), ".") -+ if len(typeNames) == 1 { -+ msg := desc.GetMessage(packageName, typeName) -+ if msg == nil { -+ return "", "" -+ } -+ return packageName, msg.GetName() -+ } -+ if len(typeNames) > 2 { -+ for i := 1; i < len(typeNames)-1; i++ { -+ packageName = strings.Join(typeNames[1:len(typeNames)-i], ".") -+ typeName = strings.Join(typeNames[len(typeNames)-i:], ".") -+ msg := desc.GetMessage(packageName, typeName) -+ if msg != nil { -+ typeNames := strings.Split(msg.GetName(), ".") -+ if len(typeNames) == 1 { -+ return packageName, msg.GetName() -+ } -+ return strings.Join(typeNames[1:len(typeNames)-1], "."), typeNames[len(typeNames)-1] -+ } -+ } -+ } -+ return "", "" -+} -+ -+func (msg *DescriptorProto) GetFieldDescriptor(fieldName string) *FieldDescriptorProto { -+ for _, field := range msg.GetField() { -+ if field.GetName() == fieldName { -+ return field -+ } -+ } -+ return nil -+} -+ -+func (desc *FileDescriptorSet) GetEnum(packageName string, typeName string) *EnumDescriptorProto { -+ for _, file := range desc.GetFile() { -+ if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { -+ continue -+ } -+ for _, enum := range file.GetEnumType() { -+ if enum.GetName() == typeName { -+ return enum -+ } -+ } -+ } -+ return nil -+} -+ -+func (f *FieldDescriptorProto) IsEnum() bool { -+ return *f.Type == FieldDescriptorProto_TYPE_ENUM -+} -+ -+func (f *FieldDescriptorProto) IsMessage() bool { -+ return *f.Type == FieldDescriptorProto_TYPE_MESSAGE -+} -+ -+func (f *FieldDescriptorProto) IsBytes() bool { -+ return *f.Type == FieldDescriptorProto_TYPE_BYTES -+} -+ -+func (f *FieldDescriptorProto) IsRepeated() bool { -+ return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REPEATED -+} -+ -+func (f *FieldDescriptorProto) IsString() bool { -+ return *f.Type == FieldDescriptorProto_TYPE_STRING -+} -+ -+func (f *FieldDescriptorProto) IsBool() bool { -+ return *f.Type == FieldDescriptorProto_TYPE_BOOL -+} -+ -+func (f *FieldDescriptorProto) IsRequired() bool { -+ return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REQUIRED -+} -+ -+func (f *FieldDescriptorProto) IsPacked() bool { -+ return f.Options != nil && f.GetOptions().GetPacked() -+} -+ -+func (f *FieldDescriptorProto) IsPacked3() bool { -+ if f.IsRepeated() && f.IsScalar() { -+ if f.Options == nil || f.GetOptions().Packed == nil { -+ return true -+ } -+ return f.Options != nil && f.GetOptions().GetPacked() -+ } -+ return false -+} -+ -+func (m *DescriptorProto) HasExtension() bool { -+ return len(m.ExtensionRange) > 0 -+} -diff --git a/vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go b/vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/AUTHORS b/vendor/github.com/golang/protobuf/AUTHORS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/CONTRIBUTORS b/vendor/github.com/golang/protobuf/CONTRIBUTORS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/golang/protobuf/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/jsonpb/decode.go b/vendor/github.com/golang/protobuf/jsonpb/decode.go -new file mode 100755 -index 0000000..6c16c25 ---- /dev/null -+++ b/vendor/github.com/golang/protobuf/jsonpb/decode.go -@@ -0,0 +1,530 @@ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package jsonpb -+ -+import ( -+ "encoding/json" -+ "errors" -+ "fmt" -+ "io" -+ "math" -+ "reflect" -+ "strconv" -+ "strings" -+ "time" -+ -+ "github.com/golang/protobuf/proto" -+ "google.golang.org/protobuf/encoding/protojson" -+ protoV2 "google.golang.org/protobuf/proto" -+ "google.golang.org/protobuf/reflect/protoreflect" -+ "google.golang.org/protobuf/reflect/protoregistry" -+) -+ -+const wrapJSONUnmarshalV2 = false -+ -+// UnmarshalNext unmarshals the next JSON object from d into m. -+func UnmarshalNext(d *json.Decoder, m proto.Message) error { -+ return new(Unmarshaler).UnmarshalNext(d, m) -+} -+ -+// Unmarshal unmarshals a JSON object from r into m. -+func Unmarshal(r io.Reader, m proto.Message) error { -+ return new(Unmarshaler).Unmarshal(r, m) -+} -+ -+// UnmarshalString unmarshals a JSON object from s into m. -+func UnmarshalString(s string, m proto.Message) error { -+ return new(Unmarshaler).Unmarshal(strings.NewReader(s), m) -+} -+ -+// Unmarshaler is a configurable object for converting from a JSON -+// representation to a protocol buffer object. -+type Unmarshaler struct { -+ // AllowUnknownFields specifies whether to allow messages to contain -+ // unknown JSON fields, as opposed to failing to unmarshal. -+ AllowUnknownFields bool -+ -+ // AnyResolver is used to resolve the google.protobuf.Any well-known type. -+ // If unset, the global registry is used by default. -+ AnyResolver AnyResolver -+} -+ -+// JSONPBUnmarshaler is implemented by protobuf messages that customize the way -+// they are unmarshaled from JSON. Messages that implement this should also -+// implement JSONPBMarshaler so that the custom format can be produced. -+// -+// The JSON unmarshaling must follow the JSON to proto specification: -+// https://developers.google.com/protocol-buffers/docs/proto3#json -+// -+// Deprecated: Custom types should implement protobuf reflection instead. -+type JSONPBUnmarshaler interface { -+ UnmarshalJSONPB(*Unmarshaler, []byte) error -+} -+ -+// Unmarshal unmarshals a JSON object from r into m. -+func (u *Unmarshaler) Unmarshal(r io.Reader, m proto.Message) error { -+ return u.UnmarshalNext(json.NewDecoder(r), m) -+} -+ -+// UnmarshalNext unmarshals the next JSON object from d into m. -+func (u *Unmarshaler) UnmarshalNext(d *json.Decoder, m proto.Message) error { -+ if m == nil { -+ return errors.New("invalid nil message") -+ } -+ -+ // Parse the next JSON object from the stream. -+ raw := json.RawMessage{} -+ if err := d.Decode(&raw); err != nil { -+ return err -+ } -+ -+ // Check for custom unmarshalers first since they may not properly -+ // implement protobuf reflection that the logic below relies on. -+ if jsu, ok := m.(JSONPBUnmarshaler); ok { -+ return jsu.UnmarshalJSONPB(u, raw) -+ } -+ -+ mr := proto.MessageReflect(m) -+ -+ // NOTE: For historical reasons, a top-level null is treated as a noop. -+ // This is incorrect, but kept for compatibility. -+ if string(raw) == "null" && mr.Descriptor().FullName() != "google.protobuf.Value" { -+ return nil -+ } -+ -+ if wrapJSONUnmarshalV2 { -+ // NOTE: If input message is non-empty, we need to preserve merge semantics -+ // of the old jsonpb implementation. These semantics are not supported by -+ // the protobuf JSON specification. -+ isEmpty := true -+ mr.Range(func(protoreflect.FieldDescriptor, protoreflect.Value) bool { -+ isEmpty = false // at least one iteration implies non-empty -+ return false -+ }) -+ if !isEmpty { -+ // Perform unmarshaling into a newly allocated, empty message. -+ mr = mr.New() -+ -+ // Use a defer to copy all unmarshaled fields into the original message. -+ dst := proto.MessageReflect(m) -+ defer mr.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { -+ dst.Set(fd, v) -+ return true -+ }) -+ } -+ -+ // Unmarshal using the v2 JSON unmarshaler. -+ opts := protojson.UnmarshalOptions{ -+ DiscardUnknown: u.AllowUnknownFields, -+ } -+ if u.AnyResolver != nil { -+ opts.Resolver = anyResolver{u.AnyResolver} -+ } -+ return opts.Unmarshal(raw, mr.Interface()) -+ } else { -+ if err := u.unmarshalMessage(mr, raw); err != nil { -+ return err -+ } -+ return protoV2.CheckInitialized(mr.Interface()) -+ } -+} -+ -+func (u *Unmarshaler) unmarshalMessage(m protoreflect.Message, in []byte) error { -+ md := m.Descriptor() -+ fds := md.Fields() -+ -+ if jsu, ok := proto.MessageV1(m.Interface()).(JSONPBUnmarshaler); ok { -+ return jsu.UnmarshalJSONPB(u, in) -+ } -+ -+ if string(in) == "null" && md.FullName() != "google.protobuf.Value" { -+ return nil -+ } -+ -+ switch wellKnownType(md.FullName()) { -+ case "Any": -+ var jsonObject map[string]json.RawMessage -+ if err := json.Unmarshal(in, &jsonObject); err != nil { -+ return err -+ } -+ -+ rawTypeURL, ok := jsonObject["@type"] -+ if !ok { -+ return errors.New("Any JSON doesn't have '@type'") -+ } -+ typeURL, err := unquoteString(string(rawTypeURL)) -+ if err != nil { -+ return fmt.Errorf("can't unmarshal Any's '@type': %q", rawTypeURL) -+ } -+ m.Set(fds.ByNumber(1), protoreflect.ValueOfString(typeURL)) -+ -+ var m2 protoreflect.Message -+ if u.AnyResolver != nil { -+ mi, err := u.AnyResolver.Resolve(typeURL) -+ if err != nil { -+ return err -+ } -+ m2 = proto.MessageReflect(mi) -+ } else { -+ mt, err := protoregistry.GlobalTypes.FindMessageByURL(typeURL) -+ if err != nil { -+ if err == protoregistry.NotFound { -+ return fmt.Errorf("could not resolve Any message type: %v", typeURL) -+ } -+ return err -+ } -+ m2 = mt.New() -+ } -+ -+ if wellKnownType(m2.Descriptor().FullName()) != "" { -+ rawValue, ok := jsonObject["value"] -+ if !ok { -+ return errors.New("Any JSON doesn't have 'value'") -+ } -+ if err := u.unmarshalMessage(m2, rawValue); err != nil { -+ return fmt.Errorf("can't unmarshal Any nested proto %v: %v", typeURL, err) -+ } -+ } else { -+ delete(jsonObject, "@type") -+ rawJSON, err := json.Marshal(jsonObject) -+ if err != nil { -+ return fmt.Errorf("can't generate JSON for Any's nested proto to be unmarshaled: %v", err) -+ } -+ if err = u.unmarshalMessage(m2, rawJSON); err != nil { -+ return fmt.Errorf("can't unmarshal Any nested proto %v: %v", typeURL, err) -+ } -+ } -+ -+ rawWire, err := protoV2.Marshal(m2.Interface()) -+ if err != nil { -+ return fmt.Errorf("can't marshal proto %v into Any.Value: %v", typeURL, err) -+ } -+ m.Set(fds.ByNumber(2), protoreflect.ValueOfBytes(rawWire)) -+ return nil -+ case "BoolValue", "BytesValue", "StringValue", -+ "Int32Value", "UInt32Value", "FloatValue", -+ "Int64Value", "UInt64Value", "DoubleValue": -+ fd := fds.ByNumber(1) -+ v, err := u.unmarshalValue(m.NewField(fd), in, fd) -+ if err != nil { -+ return err -+ } -+ m.Set(fd, v) -+ return nil -+ case "Duration": -+ v, err := unquoteString(string(in)) -+ if err != nil { -+ return err -+ } -+ d, err := time.ParseDuration(v) -+ if err != nil { -+ return fmt.Errorf("bad Duration: %v", err) -+ } -+ -+ sec := d.Nanoseconds() / 1e9 -+ nsec := d.Nanoseconds() % 1e9 -+ m.Set(fds.ByNumber(1), protoreflect.ValueOfInt64(int64(sec))) -+ m.Set(fds.ByNumber(2), protoreflect.ValueOfInt32(int32(nsec))) -+ return nil -+ case "Timestamp": -+ v, err := unquoteString(string(in)) -+ if err != nil { -+ return err -+ } -+ t, err := time.Parse(time.RFC3339Nano, v) -+ if err != nil { -+ return fmt.Errorf("bad Timestamp: %v", err) -+ } -+ -+ sec := t.Unix() -+ nsec := t.Nanosecond() -+ m.Set(fds.ByNumber(1), protoreflect.ValueOfInt64(int64(sec))) -+ m.Set(fds.ByNumber(2), protoreflect.ValueOfInt32(int32(nsec))) -+ return nil -+ case "Value": -+ switch { -+ case string(in) == "null": -+ m.Set(fds.ByNumber(1), protoreflect.ValueOfEnum(0)) -+ case string(in) == "true": -+ m.Set(fds.ByNumber(4), protoreflect.ValueOfBool(true)) -+ case string(in) == "false": -+ m.Set(fds.ByNumber(4), protoreflect.ValueOfBool(false)) -+ case hasPrefixAndSuffix('"', in, '"'): -+ s, err := unquoteString(string(in)) -+ if err != nil { -+ return fmt.Errorf("unrecognized type for Value %q", in) -+ } -+ m.Set(fds.ByNumber(3), protoreflect.ValueOfString(s)) -+ case hasPrefixAndSuffix('[', in, ']'): -+ v := m.Mutable(fds.ByNumber(6)) -+ return u.unmarshalMessage(v.Message(), in) -+ case hasPrefixAndSuffix('{', in, '}'): -+ v := m.Mutable(fds.ByNumber(5)) -+ return u.unmarshalMessage(v.Message(), in) -+ default: -+ f, err := strconv.ParseFloat(string(in), 0) -+ if err != nil { -+ return fmt.Errorf("unrecognized type for Value %q", in) -+ } -+ m.Set(fds.ByNumber(2), protoreflect.ValueOfFloat64(f)) -+ } -+ return nil -+ case "ListValue": -+ var jsonArray []json.RawMessage -+ if err := json.Unmarshal(in, &jsonArray); err != nil { -+ return fmt.Errorf("bad ListValue: %v", err) -+ } -+ -+ lv := m.Mutable(fds.ByNumber(1)).List() -+ for _, raw := range jsonArray { -+ ve := lv.NewElement() -+ if err := u.unmarshalMessage(ve.Message(), raw); err != nil { -+ return err -+ } -+ lv.Append(ve) -+ } -+ return nil -+ case "Struct": -+ var jsonObject map[string]json.RawMessage -+ if err := json.Unmarshal(in, &jsonObject); err != nil { -+ return fmt.Errorf("bad StructValue: %v", err) -+ } -+ -+ mv := m.Mutable(fds.ByNumber(1)).Map() -+ for key, raw := range jsonObject { -+ kv := protoreflect.ValueOf(key).MapKey() -+ vv := mv.NewValue() -+ if err := u.unmarshalMessage(vv.Message(), raw); err != nil { -+ return fmt.Errorf("bad value in StructValue for key %q: %v", key, err) -+ } -+ mv.Set(kv, vv) -+ } -+ return nil -+ } -+ -+ var jsonObject map[string]json.RawMessage -+ if err := json.Unmarshal(in, &jsonObject); err != nil { -+ return err -+ } -+ -+ // Handle known fields. -+ for i := 0; i < fds.Len(); i++ { -+ fd := fds.Get(i) -+ if fd.IsWeak() && fd.Message().IsPlaceholder() { -+ continue // weak reference is not linked in -+ } -+ -+ // Search for any raw JSON value associated with this field. -+ var raw json.RawMessage -+ name := string(fd.Name()) -+ if fd.Kind() == protoreflect.GroupKind { -+ name = string(fd.Message().Name()) -+ } -+ if v, ok := jsonObject[name]; ok { -+ delete(jsonObject, name) -+ raw = v -+ } -+ name = string(fd.JSONName()) -+ if v, ok := jsonObject[name]; ok { -+ delete(jsonObject, name) -+ raw = v -+ } -+ -+ field := m.NewField(fd) -+ // Unmarshal the field value. -+ if raw == nil || (string(raw) == "null" && !isSingularWellKnownValue(fd) && !isSingularJSONPBUnmarshaler(field, fd)) { -+ continue -+ } -+ v, err := u.unmarshalValue(field, raw, fd) -+ if err != nil { -+ return err -+ } -+ m.Set(fd, v) -+ } -+ -+ // Handle extension fields. -+ for name, raw := range jsonObject { -+ if !strings.HasPrefix(name, "[") || !strings.HasSuffix(name, "]") { -+ continue -+ } -+ -+ // Resolve the extension field by name. -+ xname := protoreflect.FullName(name[len("[") : len(name)-len("]")]) -+ xt, _ := protoregistry.GlobalTypes.FindExtensionByName(xname) -+ if xt == nil && isMessageSet(md) { -+ xt, _ = protoregistry.GlobalTypes.FindExtensionByName(xname.Append("message_set_extension")) -+ } -+ if xt == nil { -+ continue -+ } -+ delete(jsonObject, name) -+ fd := xt.TypeDescriptor() -+ if fd.ContainingMessage().FullName() != m.Descriptor().FullName() { -+ return fmt.Errorf("extension field %q does not extend message %q", xname, m.Descriptor().FullName()) -+ } -+ -+ field := m.NewField(fd) -+ // Unmarshal the field value. -+ if raw == nil || (string(raw) == "null" && !isSingularWellKnownValue(fd) && !isSingularJSONPBUnmarshaler(field, fd)) { -+ continue -+ } -+ v, err := u.unmarshalValue(field, raw, fd) -+ if err != nil { -+ return err -+ } -+ m.Set(fd, v) -+ } -+ -+ if !u.AllowUnknownFields && len(jsonObject) > 0 { -+ for name := range jsonObject { -+ return fmt.Errorf("unknown field %q in %v", name, md.FullName()) -+ } -+ } -+ return nil -+} -+ -+func isSingularWellKnownValue(fd protoreflect.FieldDescriptor) bool { -+ if fd.Cardinality() == protoreflect.Repeated { -+ return false -+ } -+ if md := fd.Message(); md != nil { -+ return md.FullName() == "google.protobuf.Value" -+ } -+ if ed := fd.Enum(); ed != nil { -+ return ed.FullName() == "google.protobuf.NullValue" -+ } -+ return false -+} -+ -+func isSingularJSONPBUnmarshaler(v protoreflect.Value, fd protoreflect.FieldDescriptor) bool { -+ if fd.Message() != nil && fd.Cardinality() != protoreflect.Repeated { -+ _, ok := proto.MessageV1(v.Interface()).(JSONPBUnmarshaler) -+ return ok -+ } -+ return false -+} -+ -+func (u *Unmarshaler) unmarshalValue(v protoreflect.Value, in []byte, fd protoreflect.FieldDescriptor) (protoreflect.Value, error) { -+ switch { -+ case fd.IsList(): -+ var jsonArray []json.RawMessage -+ if err := json.Unmarshal(in, &jsonArray); err != nil { -+ return v, err -+ } -+ lv := v.List() -+ for _, raw := range jsonArray { -+ ve, err := u.unmarshalSingularValue(lv.NewElement(), raw, fd) -+ if err != nil { -+ return v, err -+ } -+ lv.Append(ve) -+ } -+ return v, nil -+ case fd.IsMap(): -+ var jsonObject map[string]json.RawMessage -+ if err := json.Unmarshal(in, &jsonObject); err != nil { -+ return v, err -+ } -+ kfd := fd.MapKey() -+ vfd := fd.MapValue() -+ mv := v.Map() -+ for key, raw := range jsonObject { -+ var kv protoreflect.MapKey -+ if kfd.Kind() == protoreflect.StringKind { -+ kv = protoreflect.ValueOf(key).MapKey() -+ } else { -+ v, err := u.unmarshalSingularValue(kfd.Default(), []byte(key), kfd) -+ if err != nil { -+ return v, err -+ } -+ kv = v.MapKey() -+ } -+ -+ vv, err := u.unmarshalSingularValue(mv.NewValue(), raw, vfd) -+ if err != nil { -+ return v, err -+ } -+ mv.Set(kv, vv) -+ } -+ return v, nil -+ default: -+ return u.unmarshalSingularValue(v, in, fd) -+ } -+} -+ -+var nonFinite = map[string]float64{ -+ `"NaN"`: math.NaN(), -+ `"Infinity"`: math.Inf(+1), -+ `"-Infinity"`: math.Inf(-1), -+} -+ -+func (u *Unmarshaler) unmarshalSingularValue(v protoreflect.Value, in []byte, fd protoreflect.FieldDescriptor) (protoreflect.Value, error) { -+ switch fd.Kind() { -+ case protoreflect.BoolKind: -+ return unmarshalValue(in, new(bool)) -+ case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: -+ return unmarshalValue(trimQuote(in), new(int32)) -+ case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: -+ return unmarshalValue(trimQuote(in), new(int64)) -+ case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: -+ return unmarshalValue(trimQuote(in), new(uint32)) -+ case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: -+ return unmarshalValue(trimQuote(in), new(uint64)) -+ case protoreflect.FloatKind: -+ if f, ok := nonFinite[string(in)]; ok { -+ return protoreflect.ValueOfFloat32(float32(f)), nil -+ } -+ return unmarshalValue(trimQuote(in), new(float32)) -+ case protoreflect.DoubleKind: -+ if f, ok := nonFinite[string(in)]; ok { -+ return protoreflect.ValueOfFloat64(float64(f)), nil -+ } -+ return unmarshalValue(trimQuote(in), new(float64)) -+ case protoreflect.StringKind: -+ return unmarshalValue(in, new(string)) -+ case protoreflect.BytesKind: -+ return unmarshalValue(in, new([]byte)) -+ case protoreflect.EnumKind: -+ if hasPrefixAndSuffix('"', in, '"') { -+ vd := fd.Enum().Values().ByName(protoreflect.Name(trimQuote(in))) -+ if vd == nil { -+ return v, fmt.Errorf("unknown value %q for enum %s", in, fd.Enum().FullName()) -+ } -+ return protoreflect.ValueOfEnum(vd.Number()), nil -+ } -+ return unmarshalValue(in, new(protoreflect.EnumNumber)) -+ case protoreflect.MessageKind, protoreflect.GroupKind: -+ err := u.unmarshalMessage(v.Message(), in) -+ return v, err -+ default: -+ panic(fmt.Sprintf("invalid kind %v", fd.Kind())) -+ } -+} -+ -+func unmarshalValue(in []byte, v interface{}) (protoreflect.Value, error) { -+ err := json.Unmarshal(in, v) -+ return protoreflect.ValueOf(reflect.ValueOf(v).Elem().Interface()), err -+} -+ -+func unquoteString(in string) (out string, err error) { -+ err = json.Unmarshal([]byte(in), &out) -+ return out, err -+} -+ -+func hasPrefixAndSuffix(prefix byte, in []byte, suffix byte) bool { -+ if len(in) >= 2 && in[0] == prefix && in[len(in)-1] == suffix { -+ return true -+ } -+ return false -+} -+ -+// trimQuote is like unquoteString but simply strips surrounding quotes. -+// This is incorrect, but is behavior done by the legacy implementation. -+func trimQuote(in []byte) []byte { -+ if len(in) >= 2 && in[0] == '"' && in[len(in)-1] == '"' { -+ in = in[1 : len(in)-1] -+ } -+ return in -+} -diff --git a/vendor/github.com/golang/protobuf/jsonpb/encode.go b/vendor/github.com/golang/protobuf/jsonpb/encode.go -new file mode 100755 -index 0000000..685c80a ---- /dev/null -+++ b/vendor/github.com/golang/protobuf/jsonpb/encode.go -@@ -0,0 +1,559 @@ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package jsonpb -+ -+import ( -+ "encoding/json" -+ "errors" -+ "fmt" -+ "io" -+ "math" -+ "reflect" -+ "sort" -+ "strconv" -+ "strings" -+ "time" -+ -+ "github.com/golang/protobuf/proto" -+ "google.golang.org/protobuf/encoding/protojson" -+ protoV2 "google.golang.org/protobuf/proto" -+ "google.golang.org/protobuf/reflect/protoreflect" -+ "google.golang.org/protobuf/reflect/protoregistry" -+) -+ -+const wrapJSONMarshalV2 = false -+ -+// Marshaler is a configurable object for marshaling protocol buffer messages -+// to the specified JSON representation. -+type Marshaler struct { -+ // OrigName specifies whether to use the original protobuf name for fields. -+ OrigName bool -+ -+ // EnumsAsInts specifies whether to render enum values as integers, -+ // as opposed to string values. -+ EnumsAsInts bool -+ -+ // EmitDefaults specifies whether to render fields with zero values. -+ EmitDefaults bool -+ -+ // Indent controls whether the output is compact or not. -+ // If empty, the output is compact JSON. Otherwise, every JSON object -+ // entry and JSON array value will be on its own line. -+ // Each line will be preceded by repeated copies of Indent, where the -+ // number of copies is the current indentation depth. -+ Indent string -+ -+ // AnyResolver is used to resolve the google.protobuf.Any well-known type. -+ // If unset, the global registry is used by default. -+ AnyResolver AnyResolver -+} -+ -+// JSONPBMarshaler is implemented by protobuf messages that customize the -+// way they are marshaled to JSON. Messages that implement this should also -+// implement JSONPBUnmarshaler so that the custom format can be parsed. -+// -+// The JSON marshaling must follow the proto to JSON specification: -+// https://developers.google.com/protocol-buffers/docs/proto3#json -+// -+// Deprecated: Custom types should implement protobuf reflection instead. -+type JSONPBMarshaler interface { -+ MarshalJSONPB(*Marshaler) ([]byte, error) -+} -+ -+// Marshal serializes a protobuf message as JSON into w. -+func (jm *Marshaler) Marshal(w io.Writer, m proto.Message) error { -+ b, err := jm.marshal(m) -+ if len(b) > 0 { -+ if _, err := w.Write(b); err != nil { -+ return err -+ } -+ } -+ return err -+} -+ -+// MarshalToString serializes a protobuf message as JSON in string form. -+func (jm *Marshaler) MarshalToString(m proto.Message) (string, error) { -+ b, err := jm.marshal(m) -+ if err != nil { -+ return "", err -+ } -+ return string(b), nil -+} -+ -+func (jm *Marshaler) marshal(m proto.Message) ([]byte, error) { -+ v := reflect.ValueOf(m) -+ if m == nil || (v.Kind() == reflect.Ptr && v.IsNil()) { -+ return nil, errors.New("Marshal called with nil") -+ } -+ -+ // Check for custom marshalers first since they may not properly -+ // implement protobuf reflection that the logic below relies on. -+ if jsm, ok := m.(JSONPBMarshaler); ok { -+ return jsm.MarshalJSONPB(jm) -+ } -+ -+ if wrapJSONMarshalV2 { -+ opts := protojson.MarshalOptions{ -+ UseProtoNames: jm.OrigName, -+ UseEnumNumbers: jm.EnumsAsInts, -+ EmitUnpopulated: jm.EmitDefaults, -+ Indent: jm.Indent, -+ } -+ if jm.AnyResolver != nil { -+ opts.Resolver = anyResolver{jm.AnyResolver} -+ } -+ return opts.Marshal(proto.MessageReflect(m).Interface()) -+ } else { -+ // Check for unpopulated required fields first. -+ m2 := proto.MessageReflect(m) -+ if err := protoV2.CheckInitialized(m2.Interface()); err != nil { -+ return nil, err -+ } -+ -+ w := jsonWriter{Marshaler: jm} -+ err := w.marshalMessage(m2, "", "") -+ return w.buf, err -+ } -+} -+ -+type jsonWriter struct { -+ *Marshaler -+ buf []byte -+} -+ -+func (w *jsonWriter) write(s string) { -+ w.buf = append(w.buf, s...) -+} -+ -+func (w *jsonWriter) marshalMessage(m protoreflect.Message, indent, typeURL string) error { -+ if jsm, ok := proto.MessageV1(m.Interface()).(JSONPBMarshaler); ok { -+ b, err := jsm.MarshalJSONPB(w.Marshaler) -+ if err != nil { -+ return err -+ } -+ if typeURL != "" { -+ // we are marshaling this object to an Any type -+ var js map[string]*json.RawMessage -+ if err = json.Unmarshal(b, &js); err != nil { -+ return fmt.Errorf("type %T produced invalid JSON: %v", m.Interface(), err) -+ } -+ turl, err := json.Marshal(typeURL) -+ if err != nil { -+ return fmt.Errorf("failed to marshal type URL %q to JSON: %v", typeURL, err) -+ } -+ js["@type"] = (*json.RawMessage)(&turl) -+ if b, err = json.Marshal(js); err != nil { -+ return err -+ } -+ } -+ w.write(string(b)) -+ return nil -+ } -+ -+ md := m.Descriptor() -+ fds := md.Fields() -+ -+ // Handle well-known types. -+ const secondInNanos = int64(time.Second / time.Nanosecond) -+ switch wellKnownType(md.FullName()) { -+ case "Any": -+ return w.marshalAny(m, indent) -+ case "BoolValue", "BytesValue", "StringValue", -+ "Int32Value", "UInt32Value", "FloatValue", -+ "Int64Value", "UInt64Value", "DoubleValue": -+ fd := fds.ByNumber(1) -+ return w.marshalValue(fd, m.Get(fd), indent) -+ case "Duration": -+ const maxSecondsInDuration = 315576000000 -+ // "Generated output always contains 0, 3, 6, or 9 fractional digits, -+ // depending on required precision." -+ s := m.Get(fds.ByNumber(1)).Int() -+ ns := m.Get(fds.ByNumber(2)).Int() -+ if s < -maxSecondsInDuration || s > maxSecondsInDuration { -+ return fmt.Errorf("seconds out of range %v", s) -+ } -+ if ns <= -secondInNanos || ns >= secondInNanos { -+ return fmt.Errorf("ns out of range (%v, %v)", -secondInNanos, secondInNanos) -+ } -+ if (s > 0 && ns < 0) || (s < 0 && ns > 0) { -+ return errors.New("signs of seconds and nanos do not match") -+ } -+ var sign string -+ if s < 0 || ns < 0 { -+ sign, s, ns = "-", -1*s, -1*ns -+ } -+ x := fmt.Sprintf("%s%d.%09d", sign, s, ns) -+ x = strings.TrimSuffix(x, "000") -+ x = strings.TrimSuffix(x, "000") -+ x = strings.TrimSuffix(x, ".000") -+ w.write(fmt.Sprintf(`"%vs"`, x)) -+ return nil -+ case "Timestamp": -+ // "RFC 3339, where generated output will always be Z-normalized -+ // and uses 0, 3, 6 or 9 fractional digits." -+ s := m.Get(fds.ByNumber(1)).Int() -+ ns := m.Get(fds.ByNumber(2)).Int() -+ if ns < 0 || ns >= secondInNanos { -+ return fmt.Errorf("ns out of range [0, %v)", secondInNanos) -+ } -+ t := time.Unix(s, ns).UTC() -+ // time.RFC3339Nano isn't exactly right (we need to get 3/6/9 fractional digits). -+ x := t.Format("2006-01-02T15:04:05.000000000") -+ x = strings.TrimSuffix(x, "000") -+ x = strings.TrimSuffix(x, "000") -+ x = strings.TrimSuffix(x, ".000") -+ w.write(fmt.Sprintf(`"%vZ"`, x)) -+ return nil -+ case "Value": -+ // JSON value; which is a null, number, string, bool, object, or array. -+ od := md.Oneofs().Get(0) -+ fd := m.WhichOneof(od) -+ if fd == nil { -+ return errors.New("nil Value") -+ } -+ return w.marshalValue(fd, m.Get(fd), indent) -+ case "Struct", "ListValue": -+ // JSON object or array. -+ fd := fds.ByNumber(1) -+ return w.marshalValue(fd, m.Get(fd), indent) -+ } -+ -+ w.write("{") -+ if w.Indent != "" { -+ w.write("\n") -+ } -+ -+ firstField := true -+ if typeURL != "" { -+ if err := w.marshalTypeURL(indent, typeURL); err != nil { -+ return err -+ } -+ firstField = false -+ } -+ -+ for i := 0; i < fds.Len(); { -+ fd := fds.Get(i) -+ if od := fd.ContainingOneof(); od != nil { -+ fd = m.WhichOneof(od) -+ i += od.Fields().Len() -+ if fd == nil { -+ continue -+ } -+ } else { -+ i++ -+ } -+ -+ v := m.Get(fd) -+ -+ if !m.Has(fd) { -+ if !w.EmitDefaults || fd.ContainingOneof() != nil { -+ continue -+ } -+ if fd.Cardinality() != protoreflect.Repeated && (fd.Message() != nil || fd.Syntax() == protoreflect.Proto2) { -+ v = protoreflect.Value{} // use "null" for singular messages or proto2 scalars -+ } -+ } -+ -+ if !firstField { -+ w.writeComma() -+ } -+ if err := w.marshalField(fd, v, indent); err != nil { -+ return err -+ } -+ firstField = false -+ } -+ -+ // Handle proto2 extensions. -+ if md.ExtensionRanges().Len() > 0 { -+ // Collect a sorted list of all extension descriptor and values. -+ type ext struct { -+ desc protoreflect.FieldDescriptor -+ val protoreflect.Value -+ } -+ var exts []ext -+ m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { -+ if fd.IsExtension() { -+ exts = append(exts, ext{fd, v}) -+ } -+ return true -+ }) -+ sort.Slice(exts, func(i, j int) bool { -+ return exts[i].desc.Number() < exts[j].desc.Number() -+ }) -+ -+ for _, ext := range exts { -+ if !firstField { -+ w.writeComma() -+ } -+ if err := w.marshalField(ext.desc, ext.val, indent); err != nil { -+ return err -+ } -+ firstField = false -+ } -+ } -+ -+ if w.Indent != "" { -+ w.write("\n") -+ w.write(indent) -+ } -+ w.write("}") -+ return nil -+} -+ -+func (w *jsonWriter) writeComma() { -+ if w.Indent != "" { -+ w.write(",\n") -+ } else { -+ w.write(",") -+ } -+} -+ -+func (w *jsonWriter) marshalAny(m protoreflect.Message, indent string) error { -+ // "If the Any contains a value that has a special JSON mapping, -+ // it will be converted as follows: {"@type": xxx, "value": yyy}. -+ // Otherwise, the value will be converted into a JSON object, -+ // and the "@type" field will be inserted to indicate the actual data type." -+ md := m.Descriptor() -+ typeURL := m.Get(md.Fields().ByNumber(1)).String() -+ rawVal := m.Get(md.Fields().ByNumber(2)).Bytes() -+ -+ var m2 protoreflect.Message -+ if w.AnyResolver != nil { -+ mi, err := w.AnyResolver.Resolve(typeURL) -+ if err != nil { -+ return err -+ } -+ m2 = proto.MessageReflect(mi) -+ } else { -+ mt, err := protoregistry.GlobalTypes.FindMessageByURL(typeURL) -+ if err != nil { -+ return err -+ } -+ m2 = mt.New() -+ } -+ -+ if err := protoV2.Unmarshal(rawVal, m2.Interface()); err != nil { -+ return err -+ } -+ -+ if wellKnownType(m2.Descriptor().FullName()) == "" { -+ return w.marshalMessage(m2, indent, typeURL) -+ } -+ -+ w.write("{") -+ if w.Indent != "" { -+ w.write("\n") -+ } -+ if err := w.marshalTypeURL(indent, typeURL); err != nil { -+ return err -+ } -+ w.writeComma() -+ if w.Indent != "" { -+ w.write(indent) -+ w.write(w.Indent) -+ w.write(`"value": `) -+ } else { -+ w.write(`"value":`) -+ } -+ if err := w.marshalMessage(m2, indent+w.Indent, ""); err != nil { -+ return err -+ } -+ if w.Indent != "" { -+ w.write("\n") -+ w.write(indent) -+ } -+ w.write("}") -+ return nil -+} -+ -+func (w *jsonWriter) marshalTypeURL(indent, typeURL string) error { -+ if w.Indent != "" { -+ w.write(indent) -+ w.write(w.Indent) -+ } -+ w.write(`"@type":`) -+ if w.Indent != "" { -+ w.write(" ") -+ } -+ b, err := json.Marshal(typeURL) -+ if err != nil { -+ return err -+ } -+ w.write(string(b)) -+ return nil -+} -+ -+// marshalField writes field description and value to the Writer. -+func (w *jsonWriter) marshalField(fd protoreflect.FieldDescriptor, v protoreflect.Value, indent string) error { -+ if w.Indent != "" { -+ w.write(indent) -+ w.write(w.Indent) -+ } -+ w.write(`"`) -+ switch { -+ case fd.IsExtension(): -+ // For message set, use the fname of the message as the extension name. -+ name := string(fd.FullName()) -+ if isMessageSet(fd.ContainingMessage()) { -+ name = strings.TrimSuffix(name, ".message_set_extension") -+ } -+ -+ w.write("[" + name + "]") -+ case w.OrigName: -+ name := string(fd.Name()) -+ if fd.Kind() == protoreflect.GroupKind { -+ name = string(fd.Message().Name()) -+ } -+ w.write(name) -+ default: -+ w.write(string(fd.JSONName())) -+ } -+ w.write(`":`) -+ if w.Indent != "" { -+ w.write(" ") -+ } -+ return w.marshalValue(fd, v, indent) -+} -+ -+func (w *jsonWriter) marshalValue(fd protoreflect.FieldDescriptor, v protoreflect.Value, indent string) error { -+ switch { -+ case fd.IsList(): -+ w.write("[") -+ comma := "" -+ lv := v.List() -+ for i := 0; i < lv.Len(); i++ { -+ w.write(comma) -+ if w.Indent != "" { -+ w.write("\n") -+ w.write(indent) -+ w.write(w.Indent) -+ w.write(w.Indent) -+ } -+ if err := w.marshalSingularValue(fd, lv.Get(i), indent+w.Indent); err != nil { -+ return err -+ } -+ comma = "," -+ } -+ if w.Indent != "" { -+ w.write("\n") -+ w.write(indent) -+ w.write(w.Indent) -+ } -+ w.write("]") -+ return nil -+ case fd.IsMap(): -+ kfd := fd.MapKey() -+ vfd := fd.MapValue() -+ mv := v.Map() -+ -+ // Collect a sorted list of all map keys and values. -+ type entry struct{ key, val protoreflect.Value } -+ var entries []entry -+ mv.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool { -+ entries = append(entries, entry{k.Value(), v}) -+ return true -+ }) -+ sort.Slice(entries, func(i, j int) bool { -+ switch kfd.Kind() { -+ case protoreflect.BoolKind: -+ return !entries[i].key.Bool() && entries[j].key.Bool() -+ case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind, protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: -+ return entries[i].key.Int() < entries[j].key.Int() -+ case protoreflect.Uint32Kind, protoreflect.Fixed32Kind, protoreflect.Uint64Kind, protoreflect.Fixed64Kind: -+ return entries[i].key.Uint() < entries[j].key.Uint() -+ case protoreflect.StringKind: -+ return entries[i].key.String() < entries[j].key.String() -+ default: -+ panic("invalid kind") -+ } -+ }) -+ -+ w.write(`{`) -+ comma := "" -+ for _, entry := range entries { -+ w.write(comma) -+ if w.Indent != "" { -+ w.write("\n") -+ w.write(indent) -+ w.write(w.Indent) -+ w.write(w.Indent) -+ } -+ -+ s := fmt.Sprint(entry.key.Interface()) -+ b, err := json.Marshal(s) -+ if err != nil { -+ return err -+ } -+ w.write(string(b)) -+ -+ w.write(`:`) -+ if w.Indent != "" { -+ w.write(` `) -+ } -+ -+ if err := w.marshalSingularValue(vfd, entry.val, indent+w.Indent); err != nil { -+ return err -+ } -+ comma = "," -+ } -+ if w.Indent != "" { -+ w.write("\n") -+ w.write(indent) -+ w.write(w.Indent) -+ } -+ w.write(`}`) -+ return nil -+ default: -+ return w.marshalSingularValue(fd, v, indent) -+ } -+} -+ -+func (w *jsonWriter) marshalSingularValue(fd protoreflect.FieldDescriptor, v protoreflect.Value, indent string) error { -+ switch { -+ case !v.IsValid(): -+ w.write("null") -+ return nil -+ case fd.Message() != nil: -+ return w.marshalMessage(v.Message(), indent+w.Indent, "") -+ case fd.Enum() != nil: -+ if fd.Enum().FullName() == "google.protobuf.NullValue" { -+ w.write("null") -+ return nil -+ } -+ -+ vd := fd.Enum().Values().ByNumber(v.Enum()) -+ if vd == nil || w.EnumsAsInts { -+ w.write(strconv.Itoa(int(v.Enum()))) -+ } else { -+ w.write(`"` + string(vd.Name()) + `"`) -+ } -+ return nil -+ default: -+ switch v.Interface().(type) { -+ case float32, float64: -+ switch { -+ case math.IsInf(v.Float(), +1): -+ w.write(`"Infinity"`) -+ return nil -+ case math.IsInf(v.Float(), -1): -+ w.write(`"-Infinity"`) -+ return nil -+ case math.IsNaN(v.Float()): -+ w.write(`"NaN"`) -+ return nil -+ } -+ case int64, uint64: -+ w.write(fmt.Sprintf(`"%d"`, v.Interface())) -+ return nil -+ } -+ -+ b, err := json.Marshal(v.Interface()) -+ if err != nil { -+ return err -+ } -+ w.write(string(b)) -+ return nil -+ } -+} -diff --git a/vendor/github.com/golang/protobuf/jsonpb/json.go b/vendor/github.com/golang/protobuf/jsonpb/json.go -new file mode 100755 -index 0000000..480e244 ---- /dev/null -+++ b/vendor/github.com/golang/protobuf/jsonpb/json.go -@@ -0,0 +1,69 @@ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Package jsonpb provides functionality to marshal and unmarshal between a -+// protocol buffer message and JSON. It follows the specification at -+// https://developers.google.com/protocol-buffers/docs/proto3#json. -+// -+// Do not rely on the default behavior of the standard encoding/json package -+// when called on generated message types as it does not operate correctly. -+// -+// Deprecated: Use the "google.golang.org/protobuf/encoding/protojson" -+// package instead. -+package jsonpb -+ -+import ( -+ "github.com/golang/protobuf/proto" -+ "google.golang.org/protobuf/reflect/protoreflect" -+ "google.golang.org/protobuf/reflect/protoregistry" -+ "google.golang.org/protobuf/runtime/protoimpl" -+) -+ -+// AnyResolver takes a type URL, present in an Any message, -+// and resolves it into an instance of the associated message. -+type AnyResolver interface { -+ Resolve(typeURL string) (proto.Message, error) -+} -+ -+type anyResolver struct{ AnyResolver } -+ -+func (r anyResolver) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) { -+ return r.FindMessageByURL(string(message)) -+} -+ -+func (r anyResolver) FindMessageByURL(url string) (protoreflect.MessageType, error) { -+ m, err := r.Resolve(url) -+ if err != nil { -+ return nil, err -+ } -+ return protoimpl.X.MessageTypeOf(m), nil -+} -+ -+func (r anyResolver) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { -+ return protoregistry.GlobalTypes.FindExtensionByName(field) -+} -+ -+func (r anyResolver) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { -+ return protoregistry.GlobalTypes.FindExtensionByNumber(message, field) -+} -+ -+func wellKnownType(s protoreflect.FullName) string { -+ if s.Parent() == "google.protobuf" { -+ switch s.Name() { -+ case "Empty", "Any", -+ "BoolValue", "BytesValue", "StringValue", -+ "Int32Value", "UInt32Value", "FloatValue", -+ "Int64Value", "UInt64Value", "DoubleValue", -+ "Duration", "Timestamp", -+ "NullValue", "Struct", "Value", "ListValue": -+ return string(s.Name()) -+ } -+ } -+ return "" -+} -+ -+func isMessageSet(md protoreflect.MessageDescriptor) bool { -+ ms, ok := md.(interface{ IsMessageSet() bool }) -+ return ok && ms.IsMessageSet() -+} -diff --git a/vendor/github.com/golang/protobuf/proto/buffer.go b/vendor/github.com/golang/protobuf/proto/buffer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/defaults.go b/vendor/github.com/golang/protobuf/proto/defaults.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/deprecated.go b/vendor/github.com/golang/protobuf/proto/deprecated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/proto.go b/vendor/github.com/golang/protobuf/proto/proto.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/registry.go b/vendor/github.com/golang/protobuf/proto/registry.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/text_decode.go b/vendor/github.com/golang/protobuf/proto/text_decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/text_encode.go b/vendor/github.com/golang/protobuf/proto/text_encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/wire.go b/vendor/github.com/golang/protobuf/proto/wire.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/proto/wrappers.go b/vendor/github.com/golang/protobuf/proto/wrappers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/ptypes/any.go b/vendor/github.com/golang/protobuf/ptypes/any.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/ptypes/doc.go b/vendor/github.com/golang/protobuf/ptypes/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/ptypes/duration.go b/vendor/github.com/golang/protobuf/ptypes/duration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp.go b/vendor/github.com/golang/protobuf/ptypes/timestamp.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/AUTHORS b/vendor/github.com/google/cadvisor/AUTHORS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/LICENSE b/vendor/github.com/google/cadvisor/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/cache/memory/memory.go b/vendor/github.com/google/cadvisor/cache/memory/memory.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/collector/collector_manager.go b/vendor/github.com/google/cadvisor/collector/collector_manager.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/collector/config.go b/vendor/github.com/google/cadvisor/collector/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/collector/fakes.go b/vendor/github.com/google/cadvisor/collector/fakes.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/collector/generic_collector.go b/vendor/github.com/google/cadvisor/collector/generic_collector.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/collector/prometheus_collector.go b/vendor/github.com/google/cadvisor/collector/prometheus_collector.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/collector/types.go b/vendor/github.com/google/cadvisor/collector/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/collector/util.go b/vendor/github.com/google/cadvisor/collector/util.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/common/container_hints.go b/vendor/github.com/google/cadvisor/container/common/container_hints.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/common/fsHandler.go b/vendor/github.com/google/cadvisor/container/common/fsHandler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/common/helpers.go b/vendor/github.com/google/cadvisor/container/common/helpers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/common/inotify_watcher.go b/vendor/github.com/google/cadvisor/container/common/inotify_watcher.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/container.go b/vendor/github.com/google/cadvisor/container/container.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/factory.go b/vendor/github.com/google/cadvisor/container/factory.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/libcontainer/handler.go b/vendor/github.com/google/cadvisor/container/libcontainer/handler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/libcontainer/helpers.go b/vendor/github.com/google/cadvisor/container/libcontainer/helpers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/raw/factory.go b/vendor/github.com/google/cadvisor/container/raw/factory.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/raw/handler.go b/vendor/github.com/google/cadvisor/container/raw/handler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/container/raw/watcher.go b/vendor/github.com/google/cadvisor/container/raw/watcher.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/devicemapper/dmsetup_client.go b/vendor/github.com/google/cadvisor/devicemapper/dmsetup_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/devicemapper/doc.go b/vendor/github.com/google/cadvisor/devicemapper/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/devicemapper/thin_ls_client.go b/vendor/github.com/google/cadvisor/devicemapper/thin_ls_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/devicemapper/thin_pool_watcher.go b/vendor/github.com/google/cadvisor/devicemapper/thin_pool_watcher.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/devicemapper/util.go b/vendor/github.com/google/cadvisor/devicemapper/util.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/events/handler.go b/vendor/github.com/google/cadvisor/events/handler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/fs/fs.go b/vendor/github.com/google/cadvisor/fs/fs.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/fs/types.go b/vendor/github.com/google/cadvisor/fs/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/info/v1/container.go b/vendor/github.com/google/cadvisor/info/v1/container.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/info/v1/docker.go b/vendor/github.com/google/cadvisor/info/v1/docker.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/info/v1/machine.go b/vendor/github.com/google/cadvisor/info/v1/machine.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/info/v1/metric.go b/vendor/github.com/google/cadvisor/info/v1/metric.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/info/v2/container.go b/vendor/github.com/google/cadvisor/info/v2/container.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/info/v2/conversion.go b/vendor/github.com/google/cadvisor/info/v2/conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/info/v2/machine.go b/vendor/github.com/google/cadvisor/info/v2/machine.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/machine/info.go b/vendor/github.com/google/cadvisor/machine/info.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/machine/machine.go b/vendor/github.com/google/cadvisor/machine/machine.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/machine/operatingsystem_unix.go b/vendor/github.com/google/cadvisor/machine/operatingsystem_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/machine/operatingsystem_windows.go b/vendor/github.com/google/cadvisor/machine/operatingsystem_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/manager/container.go b/vendor/github.com/google/cadvisor/manager/container.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/manager/manager.go b/vendor/github.com/google/cadvisor/manager/manager.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/nvm/machine_libipmctl.go b/vendor/github.com/google/cadvisor/nvm/machine_libipmctl.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/nvm/machine_no_libipmctl.go b/vendor/github.com/google/cadvisor/nvm/machine_no_libipmctl.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/perf/collector_libpfm.go b/vendor/github.com/google/cadvisor/perf/collector_libpfm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/perf/collector_no_libpfm.go b/vendor/github.com/google/cadvisor/perf/collector_no_libpfm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/perf/config.go b/vendor/github.com/google/cadvisor/perf/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/perf/manager_libpfm.go b/vendor/github.com/google/cadvisor/perf/manager_libpfm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/perf/manager_no_libpfm.go b/vendor/github.com/google/cadvisor/perf/manager_no_libpfm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/perf/types_libpfm.go b/vendor/github.com/google/cadvisor/perf/types_libpfm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/perf/uncore_libpfm.go b/vendor/github.com/google/cadvisor/perf/uncore_libpfm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/resctrl/collector.go b/vendor/github.com/google/cadvisor/resctrl/collector.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/resctrl/manager.go b/vendor/github.com/google/cadvisor/resctrl/manager.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/resctrl/utils.go b/vendor/github.com/google/cadvisor/resctrl/utils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/stats/noop.go b/vendor/github.com/google/cadvisor/stats/noop.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/stats/types.go b/vendor/github.com/google/cadvisor/stats/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/storage/common_flags.go b/vendor/github.com/google/cadvisor/storage/common_flags.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/storage/storage.go b/vendor/github.com/google/cadvisor/storage/storage.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/summary/buffer.go b/vendor/github.com/google/cadvisor/summary/buffer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/summary/percentiles.go b/vendor/github.com/google/cadvisor/summary/percentiles.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/summary/summary.go b/vendor/github.com/google/cadvisor/summary/summary.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/cloudinfo.go b/vendor/github.com/google/cadvisor/utils/cloudinfo/cloudinfo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/cpuload/cpuload.go b/vendor/github.com/google/cadvisor/utils/cpuload/cpuload.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/cpuload/netlink/conn.go b/vendor/github.com/google/cadvisor/utils/cpuload/netlink/conn.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/cpuload/netlink/netlink.go b/vendor/github.com/google/cadvisor/utils/cpuload/netlink/netlink.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/cpuload/netlink/reader.go b/vendor/github.com/google/cadvisor/utils/cpuload/netlink/reader.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/oomparser/oomparser.go b/vendor/github.com/google/cadvisor/utils/oomparser/oomparser.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/path.go b/vendor/github.com/google/cadvisor/utils/path.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/sysfs/sysfs.go b/vendor/github.com/google/cadvisor/utils/sysfs/sysfs.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/sysfs/sysfs_notx86.go b/vendor/github.com/google/cadvisor/utils/sysfs/sysfs_notx86.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/sysfs/sysfs_x86.go b/vendor/github.com/google/cadvisor/utils/sysfs/sysfs_x86.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/sysinfo/sysinfo.go b/vendor/github.com/google/cadvisor/utils/sysinfo/sysinfo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/timed_store.go b/vendor/github.com/google/cadvisor/utils/timed_store.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/utils/utils.go b/vendor/github.com/google/cadvisor/utils/utils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/version/version.go b/vendor/github.com/google/cadvisor/version/version.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/cadvisor/watcher/watcher.go b/vendor/github.com/google/cadvisor/watcher/watcher.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/LICENSE b/vendor/github.com/google/go-cmp/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/compare.go b/vendor/github.com/google/go-cmp/cmp/compare.go -old mode 100644 -new mode 100755 -index fd2b3a4..087320d ---- a/vendor/github.com/google/go-cmp/cmp/compare.go -+++ b/vendor/github.com/google/go-cmp/cmp/compare.go -@@ -13,21 +13,21 @@ - // - // The primary features of cmp are: - // --// • When the default behavior of equality does not suit the needs of the test, --// custom equality functions can override the equality operation. --// For example, an equality function may report floats as equal so long as they --// are within some tolerance of each other. -+// - When the default behavior of equality does not suit the test's needs, -+// custom equality functions can override the equality operation. -+// For example, an equality function may report floats as equal so long as -+// they are within some tolerance of each other. - // --// • Types that have an Equal method may use that method to determine equality. --// This allows package authors to determine the equality operation for the types --// that they define. -+// - Types with an Equal method may use that method to determine equality. -+// This allows package authors to determine the equality operation -+// for the types that they define. - // --// • If no custom equality functions are used and no Equal method is defined, --// equality is determined by recursively comparing the primitive kinds on both --// values, much like reflect.DeepEqual. Unlike reflect.DeepEqual, unexported --// fields are not compared by default; they result in panics unless suppressed --// by using an Ignore option (see cmpopts.IgnoreUnexported) or explicitly --// compared using the Exporter option. -+// - If no custom equality functions are used and no Equal method is defined, -+// equality is determined by recursively comparing the primitive kinds on -+// both values, much like reflect.DeepEqual. Unlike reflect.DeepEqual, -+// unexported fields are not compared by default; they result in panics -+// unless suppressed by using an Ignore option (see cmpopts.IgnoreUnexported) -+// or explicitly compared using the Exporter option. - package cmp - - import ( -@@ -45,25 +45,25 @@ import ( - // Equal reports whether x and y are equal by recursively applying the - // following rules in the given order to x and y and all of their sub-values: - // --// • Let S be the set of all Ignore, Transformer, and Comparer options that --// remain after applying all path filters, value filters, and type filters. --// If at least one Ignore exists in S, then the comparison is ignored. --// If the number of Transformer and Comparer options in S is greater than one, --// then Equal panics because it is ambiguous which option to use. --// If S contains a single Transformer, then use that to transform the current --// values and recursively call Equal on the output values. --// If S contains a single Comparer, then use that to compare the current values. --// Otherwise, evaluation proceeds to the next rule. -+// - Let S be the set of all Ignore, Transformer, and Comparer options that -+// remain after applying all path filters, value filters, and type filters. -+// If at least one Ignore exists in S, then the comparison is ignored. -+// If the number of Transformer and Comparer options in S is non-zero, -+// then Equal panics because it is ambiguous which option to use. -+// If S contains a single Transformer, then use that to transform -+// the current values and recursively call Equal on the output values. -+// If S contains a single Comparer, then use that to compare the current values. -+// Otherwise, evaluation proceeds to the next rule. - // --// • If the values have an Equal method of the form "(T) Equal(T) bool" or --// "(T) Equal(I) bool" where T is assignable to I, then use the result of --// x.Equal(y) even if x or y is nil. Otherwise, no such method exists and --// evaluation proceeds to the next rule. -+// - If the values have an Equal method of the form "(T) Equal(T) bool" or -+// "(T) Equal(I) bool" where T is assignable to I, then use the result of -+// x.Equal(y) even if x or y is nil. Otherwise, no such method exists and -+// evaluation proceeds to the next rule. - // --// • Lastly, try to compare x and y based on their basic kinds. --// Simple kinds like booleans, integers, floats, complex numbers, strings, and --// channels are compared using the equivalent of the == operator in Go. --// Functions are only equal if they are both nil, otherwise they are unequal. -+// - Lastly, try to compare x and y based on their basic kinds. -+// Simple kinds like booleans, integers, floats, complex numbers, strings, -+// and channels are compared using the equivalent of the == operator in Go. -+// Functions are only equal if they are both nil, otherwise they are unequal. - // - // Structs are equal if recursively calling Equal on all fields report equal. - // If a struct contains unexported fields, Equal panics unless an Ignore option -@@ -144,7 +144,7 @@ func rootStep(x, y interface{}) PathStep { - // so that they have the same parent type. - var t reflect.Type - if !vx.IsValid() || !vy.IsValid() || vx.Type() != vy.Type() { -- t = reflect.TypeOf((*interface{})(nil)).Elem() -+ t = anyType - if vx.IsValid() { - vvx := reflect.New(t).Elem() - vvx.Set(vx) -@@ -639,7 +639,9 @@ type dynChecker struct{ curr, next int } - // Next increments the state and reports whether a check should be performed. - // - // Checks occur every Nth function call, where N is a triangular number: -+// - // 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 ... -+// - // See https://en.wikipedia.org/wiki/Triangular_number - // - // This sequence ensures that the cost of checks drops significantly as -diff --git a/vendor/github.com/google/go-cmp/cmp/export_panic.go b/vendor/github.com/google/go-cmp/cmp/export_panic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/export_unsafe.go b/vendor/github.com/google/go-cmp/cmp/export_unsafe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go -old mode 100644 -new mode 100755 -index bc196b1..a248e54 ---- a/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go -+++ b/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go -@@ -127,9 +127,9 @@ var randBool = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) == 0 - // This function returns an edit-script, which is a sequence of operations - // needed to convert one list into the other. The following invariants for - // the edit-script are maintained: --// • eq == (es.Dist()==0) --// • nx == es.LenX() --// • ny == es.LenY() -+// - eq == (es.Dist()==0) -+// - nx == es.LenX() -+// - ny == es.LenY() - // - // This algorithm is not guaranteed to be an optimal solution (i.e., one that - // produces an edit-script with a minimal Levenshtein distance). This algorithm -@@ -169,12 +169,13 @@ func Difference(nx, ny int, f EqualFunc) (es EditScript) { - // A diagonal edge is equivalent to a matching symbol between both X and Y. - - // Invariants: -- // • 0 ≤ fwdPath.X ≤ (fwdFrontier.X, revFrontier.X) ≤ revPath.X ≤ nx -- // • 0 ≤ fwdPath.Y ≤ (fwdFrontier.Y, revFrontier.Y) ≤ revPath.Y ≤ ny -+ // - 0 ≤ fwdPath.X ≤ (fwdFrontier.X, revFrontier.X) ≤ revPath.X ≤ nx -+ // - 0 ≤ fwdPath.Y ≤ (fwdFrontier.Y, revFrontier.Y) ≤ revPath.Y ≤ ny - // - // In general: -- // • fwdFrontier.X < revFrontier.X -- // • fwdFrontier.Y < revFrontier.Y -+ // - fwdFrontier.X < revFrontier.X -+ // - fwdFrontier.Y < revFrontier.Y -+ // - // Unless, it is time for the algorithm to terminate. - fwdPath := path{+1, point{0, 0}, make(EditScript, 0, (nx+ny)/2)} - revPath := path{-1, point{nx, ny}, make(EditScript, 0)} -@@ -195,19 +196,21 @@ func Difference(nx, ny int, f EqualFunc) (es EditScript) { - // computing sub-optimal edit-scripts between two lists. - // - // The algorithm is approximately as follows: -- // • Searching for differences switches back-and-forth between -- // a search that starts at the beginning (the top-left corner), and -- // a search that starts at the end (the bottom-right corner). The goal of -- // the search is connect with the search from the opposite corner. -- // • As we search, we build a path in a greedy manner, where the first -- // match seen is added to the path (this is sub-optimal, but provides a -- // decent result in practice). When matches are found, we try the next pair -- // of symbols in the lists and follow all matches as far as possible. -- // • When searching for matches, we search along a diagonal going through -- // through the "frontier" point. If no matches are found, we advance the -- // frontier towards the opposite corner. -- // • This algorithm terminates when either the X coordinates or the -- // Y coordinates of the forward and reverse frontier points ever intersect. -+ // - Searching for differences switches back-and-forth between -+ // a search that starts at the beginning (the top-left corner), and -+ // a search that starts at the end (the bottom-right corner). -+ // The goal of the search is connect with the search -+ // from the opposite corner. -+ // - As we search, we build a path in a greedy manner, -+ // where the first match seen is added to the path (this is sub-optimal, -+ // but provides a decent result in practice). When matches are found, -+ // we try the next pair of symbols in the lists and follow all matches -+ // as far as possible. -+ // - When searching for matches, we search along a diagonal going through -+ // through the "frontier" point. If no matches are found, -+ // we advance the frontier towards the opposite corner. -+ // - This algorithm terminates when either the X coordinates or the -+ // Y coordinates of the forward and reverse frontier points ever intersect. - - // This algorithm is correct even if searching only in the forward direction - // or in the reverse direction. We do both because it is commonly observed -@@ -389,6 +392,7 @@ type point struct{ X, Y int } - func (p *point) add(dx, dy int) { p.X += dx; p.Y += dy } - - // zigzag maps a consecutive sequence of integers to a zig-zag sequence. -+// - // [0 1 2 3 4 5 ...] => [0 -1 +1 -2 +2 ...] - func zigzag(x int) int { - if x&1 != 0 { -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go b/vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/function/func.go b/vendor/github.com/google/go-cmp/cmp/internal/function/func.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/name.go b/vendor/github.com/google/go-cmp/cmp/internal/value/name.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/sort.go b/vendor/github.com/google/go-cmp/cmp/internal/value/sort.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/zero.go b/vendor/github.com/google/go-cmp/cmp/internal/value/zero.go -deleted file mode 100644 -index 9147a29..0000000 ---- a/vendor/github.com/google/go-cmp/cmp/internal/value/zero.go -+++ /dev/null -@@ -1,48 +0,0 @@ --// Copyright 2017, The Go Authors. All rights reserved. --// Use of this source code is governed by a BSD-style --// license that can be found in the LICENSE file. -- --package value -- --import ( -- "math" -- "reflect" --) -- --// IsZero reports whether v is the zero value. --// This does not rely on Interface and so can be used on unexported fields. --func IsZero(v reflect.Value) bool { -- switch v.Kind() { -- case reflect.Bool: -- return v.Bool() == false -- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: -- return v.Int() == 0 -- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: -- return v.Uint() == 0 -- case reflect.Float32, reflect.Float64: -- return math.Float64bits(v.Float()) == 0 -- case reflect.Complex64, reflect.Complex128: -- return math.Float64bits(real(v.Complex())) == 0 && math.Float64bits(imag(v.Complex())) == 0 -- case reflect.String: -- return v.String() == "" -- case reflect.UnsafePointer: -- return v.Pointer() == 0 -- case reflect.Chan, reflect.Func, reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: -- return v.IsNil() -- case reflect.Array: -- for i := 0; i < v.Len(); i++ { -- if !IsZero(v.Index(i)) { -- return false -- } -- } -- return true -- case reflect.Struct: -- for i := 0; i < v.NumField(); i++ { -- if !IsZero(v.Field(i)) { -- return false -- } -- } -- return true -- } -- return false --} -diff --git a/vendor/github.com/google/go-cmp/cmp/options.go b/vendor/github.com/google/go-cmp/cmp/options.go -old mode 100644 -new mode 100755 -index e57b9eb..1f9ca9c ---- a/vendor/github.com/google/go-cmp/cmp/options.go -+++ b/vendor/github.com/google/go-cmp/cmp/options.go -@@ -33,6 +33,7 @@ type Option interface { - } - - // applicableOption represents the following types: -+// - // Fundamental: ignore | validator | *comparer | *transformer - // Grouping: Options - type applicableOption interface { -@@ -43,6 +44,7 @@ type applicableOption interface { - } - - // coreOption represents the following types: -+// - // Fundamental: ignore | validator | *comparer | *transformer - // Filters: *pathFilter | *valuesFilter - type coreOption interface { -@@ -336,9 +338,9 @@ func (tr transformer) String() string { - // both implement T. - // - // The equality function must be: --// • Symmetric: equal(x, y) == equal(y, x) --// • Deterministic: equal(x, y) == equal(x, y) --// • Pure: equal(x, y) does not modify x or y -+// - Symmetric: equal(x, y) == equal(y, x) -+// - Deterministic: equal(x, y) == equal(x, y) -+// - Pure: equal(x, y) does not modify x or y - func Comparer(f interface{}) Option { - v := reflect.ValueOf(f) - if !function.IsType(v.Type(), function.Equal) || v.IsNil() { -@@ -430,7 +432,7 @@ func AllowUnexported(types ...interface{}) Option { - } - - // Result represents the comparison result for a single node and --// is provided by cmp when calling Result (see Reporter). -+// is provided by cmp when calling Report (see Reporter). - type Result struct { - _ [0]func() // Make Result incomparable - flags resultFlags -diff --git a/vendor/github.com/google/go-cmp/cmp/path.go b/vendor/github.com/google/go-cmp/cmp/path.go -old mode 100644 -new mode 100755 -index c710034..a0a5885 ---- a/vendor/github.com/google/go-cmp/cmp/path.go -+++ b/vendor/github.com/google/go-cmp/cmp/path.go -@@ -41,13 +41,13 @@ type PathStep interface { - // The type of each valid value is guaranteed to be identical to Type. - // - // In some cases, one or both may be invalid or have restrictions: -- // • For StructField, both are not interface-able if the current field -- // is unexported and the struct type is not explicitly permitted by -- // an Exporter to traverse unexported fields. -- // • For SliceIndex, one may be invalid if an element is missing from -- // either the x or y slice. -- // • For MapIndex, one may be invalid if an entry is missing from -- // either the x or y map. -+ // - For StructField, both are not interface-able if the current field -+ // is unexported and the struct type is not explicitly permitted by -+ // an Exporter to traverse unexported fields. -+ // - For SliceIndex, one may be invalid if an element is missing from -+ // either the x or y slice. -+ // - For MapIndex, one may be invalid if an entry is missing from -+ // either the x or y map. - // - // The provided values must not be mutated. - Values() (vx, vy reflect.Value) -@@ -94,6 +94,7 @@ func (pa Path) Index(i int) PathStep { - // The simplified path only contains struct field accesses. - // - // For example: -+// - // MyMap.MySlices.MyField - func (pa Path) String() string { - var ss []string -@@ -108,6 +109,7 @@ func (pa Path) String() string { - // GoString returns the path to a specific node using Go syntax. - // - // For example: -+// - // (*root.MyMap["key"].(*mypkg.MyStruct).MySlices)[2][3].MyField - func (pa Path) GoString() string { - var ssPre, ssPost []string -@@ -159,7 +161,7 @@ func (ps pathStep) String() string { - if ps.typ == nil { - return "" - } -- s := ps.typ.String() -+ s := value.TypeString(ps.typ, false) - if s == "" || strings.ContainsAny(s, "{}\n") { - return "root" // Type too simple or complex to print - } -@@ -282,7 +284,7 @@ type typeAssertion struct { - - func (ta TypeAssertion) Type() reflect.Type { return ta.typ } - func (ta TypeAssertion) Values() (vx, vy reflect.Value) { return ta.vx, ta.vy } --func (ta TypeAssertion) String() string { return fmt.Sprintf(".(%v)", ta.typ) } -+func (ta TypeAssertion) String() string { return fmt.Sprintf(".(%v)", value.TypeString(ta.typ, false)) } - - // Transform is a transformation from the parent type to the current type. - type Transform struct{ *transform } -diff --git a/vendor/github.com/google/go-cmp/cmp/report.go b/vendor/github.com/google/go-cmp/cmp/report.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/report_compare.go b/vendor/github.com/google/go-cmp/cmp/report_compare.go -old mode 100644 -new mode 100755 -index 1ef65ac..2050bf6 ---- a/vendor/github.com/google/go-cmp/cmp/report_compare.go -+++ b/vendor/github.com/google/go-cmp/cmp/report_compare.go -@@ -7,8 +7,6 @@ package cmp - import ( - "fmt" - "reflect" -- -- "github.com/google/go-cmp/cmp/internal/value" - ) - - // numContextRecords is the number of surrounding equal records to print. -@@ -117,7 +115,7 @@ func (opts formatOptions) FormatDiff(v *valueNode, ptrs *pointerReferences) (out - - // For leaf nodes, format the value based on the reflect.Values alone. - // As a special case, treat equal []byte as a leaf nodes. -- isBytes := v.Type.Kind() == reflect.Slice && v.Type.Elem() == reflect.TypeOf(byte(0)) -+ isBytes := v.Type.Kind() == reflect.Slice && v.Type.Elem() == byteType - isEqualBytes := isBytes && v.NumDiff+v.NumIgnored+v.NumTransformed == 0 - if v.MaxDepth == 0 || isEqualBytes { - switch opts.DiffMode { -@@ -248,11 +246,11 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind, pt - var isZero bool - switch opts.DiffMode { - case diffIdentical: -- isZero = value.IsZero(r.Value.ValueX) || value.IsZero(r.Value.ValueY) -+ isZero = r.Value.ValueX.IsZero() || r.Value.ValueY.IsZero() - case diffRemoved: -- isZero = value.IsZero(r.Value.ValueX) -+ isZero = r.Value.ValueX.IsZero() - case diffInserted: -- isZero = value.IsZero(r.Value.ValueY) -+ isZero = r.Value.ValueY.IsZero() - } - if isZero { - continue -diff --git a/vendor/github.com/google/go-cmp/cmp/report_references.go b/vendor/github.com/google/go-cmp/cmp/report_references.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/go-cmp/cmp/report_reflect.go b/vendor/github.com/google/go-cmp/cmp/report_reflect.go -old mode 100644 -new mode 100755 -index 287b893..2ab41fa ---- a/vendor/github.com/google/go-cmp/cmp/report_reflect.go -+++ b/vendor/github.com/google/go-cmp/cmp/report_reflect.go -@@ -16,6 +16,13 @@ import ( - "github.com/google/go-cmp/cmp/internal/value" - ) - -+var ( -+ anyType = reflect.TypeOf((*interface{})(nil)).Elem() -+ stringType = reflect.TypeOf((*string)(nil)).Elem() -+ bytesType = reflect.TypeOf((*[]byte)(nil)).Elem() -+ byteType = reflect.TypeOf((*byte)(nil)).Elem() -+) -+ - type formatValueOptions struct { - // AvoidStringer controls whether to avoid calling custom stringer - // methods like error.Error or fmt.Stringer.String. -@@ -184,7 +191,7 @@ func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, - } - for i := 0; i < v.NumField(); i++ { - vv := v.Field(i) -- if value.IsZero(vv) { -+ if vv.IsZero() { - continue // Elide fields with zero values - } - if len(list) == maxLen { -@@ -205,7 +212,7 @@ func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, - } - - // Check whether this is a []byte of text data. -- if t.Elem() == reflect.TypeOf(byte(0)) { -+ if t.Elem() == byteType { - b := v.Bytes() - isPrintSpace := func(r rune) bool { return unicode.IsPrint(r) || unicode.IsSpace(r) } - if len(b) > 0 && utf8.Valid(b) && len(bytes.TrimFunc(b, isPrintSpace)) == 0 { -diff --git a/vendor/github.com/google/go-cmp/cmp/report_slices.go b/vendor/github.com/google/go-cmp/cmp/report_slices.go -old mode 100644 -new mode 100755 -index 68b5c1a..23e444f ---- a/vendor/github.com/google/go-cmp/cmp/report_slices.go -+++ b/vendor/github.com/google/go-cmp/cmp/report_slices.go -@@ -104,7 +104,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { - case t.Kind() == reflect.String: - sx, sy = vx.String(), vy.String() - isString = true -- case t.Kind() == reflect.Slice && t.Elem() == reflect.TypeOf(byte(0)): -+ case t.Kind() == reflect.Slice && t.Elem() == byteType: - sx, sy = string(vx.Bytes()), string(vy.Bytes()) - isString = true - case t.Kind() == reflect.Array: -@@ -147,7 +147,10 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { - }) - efficiencyLines := float64(esLines.Dist()) / float64(len(esLines)) - efficiencyBytes := float64(esBytes.Dist()) / float64(len(esBytes)) -- isPureLinedText = efficiencyLines < 4*efficiencyBytes -+ quotedLength := len(strconv.Quote(sx + sy)) -+ unquotedLength := len(sx) + len(sy) -+ escapeExpansionRatio := float64(quotedLength) / float64(unquotedLength) -+ isPureLinedText = efficiencyLines < 4*efficiencyBytes || escapeExpansionRatio > 1.1 - } - } - -@@ -171,12 +174,13 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { - // differences in a string literal. This format is more readable, - // but has edge-cases where differences are visually indistinguishable. - // This format is avoided under the following conditions: -- // • A line starts with `"""` -- // • A line starts with "..." -- // • A line contains non-printable characters -- // • Adjacent different lines differ only by whitespace -+ // - A line starts with `"""` -+ // - A line starts with "..." -+ // - A line contains non-printable characters -+ // - Adjacent different lines differ only by whitespace - // - // For example: -+ // - // """ - // ... // 3 identical lines - // foo -@@ -231,7 +235,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { - var out textNode = &textWrap{Prefix: "(", Value: list2, Suffix: ")"} - switch t.Kind() { - case reflect.String: -- if t != reflect.TypeOf(string("")) { -+ if t != stringType { - out = opts.FormatType(t, out) - } - case reflect.Slice: -@@ -326,12 +330,12 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { - switch t.Kind() { - case reflect.String: - out = &textWrap{Prefix: "strings.Join(", Value: out, Suffix: fmt.Sprintf(", %q)", delim)} -- if t != reflect.TypeOf(string("")) { -+ if t != stringType { - out = opts.FormatType(t, out) - } - case reflect.Slice: - out = &textWrap{Prefix: "bytes.Join(", Value: out, Suffix: fmt.Sprintf(", %q)", delim)} -- if t != reflect.TypeOf([]byte(nil)) { -+ if t != bytesType { - out = opts.FormatType(t, out) - } - } -@@ -446,7 +450,6 @@ func (opts formatOptions) formatDiffSlice( - // {NumIdentical: 3}, - // {NumInserted: 1}, - // ] --// - func coalesceAdjacentEdits(name string, es diff.EditScript) (groups []diffStats) { - var prevMode byte - lastStats := func(mode byte) *diffStats { -@@ -503,7 +506,6 @@ func coalesceAdjacentEdits(name string, es diff.EditScript) (groups []diffStats) - // {NumIdentical: 8, NumRemoved: 12, NumInserted: 3}, - // {NumIdentical: 63}, - // ] --// - func coalesceInterveningIdentical(groups []diffStats, windowSize int) []diffStats { - groups, groupsOrig := groups[:0], groups - for i, ds := range groupsOrig { -@@ -548,7 +550,6 @@ func coalesceInterveningIdentical(groups []diffStats, windowSize int) []diffStat - // {NumRemoved: 9}, - // {NumIdentical: 64}, // incremented by 10 - // ] --// - func cleanupSurroundingIdentical(groups []diffStats, eq func(i, j int) bool) []diffStats { - var ix, iy int // indexes into sequence x and y - for i, ds := range groups { -diff --git a/vendor/github.com/google/go-cmp/cmp/report_text.go b/vendor/github.com/google/go-cmp/cmp/report_text.go -old mode 100644 -new mode 100755 -index 0fd46d7..388fcf5 ---- a/vendor/github.com/google/go-cmp/cmp/report_text.go -+++ b/vendor/github.com/google/go-cmp/cmp/report_text.go -@@ -393,6 +393,7 @@ func (s diffStats) Append(ds diffStats) diffStats { - // String prints a humanly-readable summary of coalesced records. - // - // Example: -+// - // diffStats{Name: "Field", NumIgnored: 5}.String() => "5 ignored fields" - func (s diffStats) String() string { - var ss []string -diff --git a/vendor/github.com/google/go-cmp/cmp/report_value.go b/vendor/github.com/google/go-cmp/cmp/report_value.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/gofuzz/.travis.yml b/vendor/github.com/google/gofuzz/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/gofuzz/CONTRIBUTING.md b/vendor/github.com/google/gofuzz/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/gofuzz/LICENSE b/vendor/github.com/google/gofuzz/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/gofuzz/README.md b/vendor/github.com/google/gofuzz/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/gofuzz/doc.go b/vendor/github.com/google/gofuzz/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/gofuzz/fuzz.go b/vendor/github.com/google/gofuzz/fuzz.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/.travis.yml b/vendor/github.com/google/uuid/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/CONTRIBUTING.md b/vendor/github.com/google/uuid/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/CONTRIBUTORS b/vendor/github.com/google/uuid/CONTRIBUTORS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/LICENSE b/vendor/github.com/google/uuid/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/README.md b/vendor/github.com/google/uuid/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/dce.go b/vendor/github.com/google/uuid/dce.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/doc.go b/vendor/github.com/google/uuid/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/hash.go b/vendor/github.com/google/uuid/hash.go -old mode 100644 -new mode 100755 -index b174616..b404f4b ---- a/vendor/github.com/google/uuid/hash.go -+++ b/vendor/github.com/google/uuid/hash.go -@@ -26,8 +26,8 @@ var ( - // NewMD5 and NewSHA1. - func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID { - h.Reset() -- h.Write(space[:]) -- h.Write(data) -+ h.Write(space[:]) //nolint:errcheck -+ h.Write(data) //nolint:errcheck - s := h.Sum(nil) - var uuid UUID - copy(uuid[:], s) -diff --git a/vendor/github.com/google/uuid/marshal.go b/vendor/github.com/google/uuid/marshal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/node.go b/vendor/github.com/google/uuid/node.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/node_js.go b/vendor/github.com/google/uuid/node_js.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/node_net.go b/vendor/github.com/google/uuid/node_net.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/null.go b/vendor/github.com/google/uuid/null.go -new file mode 100755 -index 0000000..d7fcbf2 ---- /dev/null -+++ b/vendor/github.com/google/uuid/null.go -@@ -0,0 +1,118 @@ -+// Copyright 2021 Google Inc. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package uuid -+ -+import ( -+ "bytes" -+ "database/sql/driver" -+ "encoding/json" -+ "fmt" -+) -+ -+var jsonNull = []byte("null") -+ -+// NullUUID represents a UUID that may be null. -+// NullUUID implements the SQL driver.Scanner interface so -+// it can be used as a scan destination: -+// -+// var u uuid.NullUUID -+// err := db.QueryRow("SELECT name FROM foo WHERE id=?", id).Scan(&u) -+// ... -+// if u.Valid { -+// // use u.UUID -+// } else { -+// // NULL value -+// } -+// -+type NullUUID struct { -+ UUID UUID -+ Valid bool // Valid is true if UUID is not NULL -+} -+ -+// Scan implements the SQL driver.Scanner interface. -+func (nu *NullUUID) Scan(value interface{}) error { -+ if value == nil { -+ nu.UUID, nu.Valid = Nil, false -+ return nil -+ } -+ -+ err := nu.UUID.Scan(value) -+ if err != nil { -+ nu.Valid = false -+ return err -+ } -+ -+ nu.Valid = true -+ return nil -+} -+ -+// Value implements the driver Valuer interface. -+func (nu NullUUID) Value() (driver.Value, error) { -+ if !nu.Valid { -+ return nil, nil -+ } -+ // Delegate to UUID Value function -+ return nu.UUID.Value() -+} -+ -+// MarshalBinary implements encoding.BinaryMarshaler. -+func (nu NullUUID) MarshalBinary() ([]byte, error) { -+ if nu.Valid { -+ return nu.UUID[:], nil -+ } -+ -+ return []byte(nil), nil -+} -+ -+// UnmarshalBinary implements encoding.BinaryUnmarshaler. -+func (nu *NullUUID) UnmarshalBinary(data []byte) error { -+ if len(data) != 16 { -+ return fmt.Errorf("invalid UUID (got %d bytes)", len(data)) -+ } -+ copy(nu.UUID[:], data) -+ nu.Valid = true -+ return nil -+} -+ -+// MarshalText implements encoding.TextMarshaler. -+func (nu NullUUID) MarshalText() ([]byte, error) { -+ if nu.Valid { -+ return nu.UUID.MarshalText() -+ } -+ -+ return jsonNull, nil -+} -+ -+// UnmarshalText implements encoding.TextUnmarshaler. -+func (nu *NullUUID) UnmarshalText(data []byte) error { -+ id, err := ParseBytes(data) -+ if err != nil { -+ nu.Valid = false -+ return err -+ } -+ nu.UUID = id -+ nu.Valid = true -+ return nil -+} -+ -+// MarshalJSON implements json.Marshaler. -+func (nu NullUUID) MarshalJSON() ([]byte, error) { -+ if nu.Valid { -+ return json.Marshal(nu.UUID) -+ } -+ -+ return jsonNull, nil -+} -+ -+// UnmarshalJSON implements json.Unmarshaler. -+func (nu *NullUUID) UnmarshalJSON(data []byte) error { -+ if bytes.Equal(data, jsonNull) { -+ *nu = NullUUID{} -+ return nil // valid null UUID -+ } -+ err := json.Unmarshal(data, &nu.UUID) -+ nu.Valid = err == nil -+ return err -+} -diff --git a/vendor/github.com/google/uuid/sql.go b/vendor/github.com/google/uuid/sql.go -old mode 100644 -new mode 100755 -index f326b54..2e02ec0 ---- a/vendor/github.com/google/uuid/sql.go -+++ b/vendor/github.com/google/uuid/sql.go -@@ -9,7 +9,7 @@ import ( - "fmt" - ) - --// Scan implements sql.Scanner so UUIDs can be read from databases transparently -+// Scan implements sql.Scanner so UUIDs can be read from databases transparently. - // Currently, database types that map to string and []byte are supported. Please - // consult database-specific driver documentation for matching types. - func (uuid *UUID) Scan(src interface{}) error { -diff --git a/vendor/github.com/google/uuid/time.go b/vendor/github.com/google/uuid/time.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/util.go b/vendor/github.com/google/uuid/util.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/uuid.go b/vendor/github.com/google/uuid/uuid.go -old mode 100644 -new mode 100755 -index 524404c..a57207a ---- a/vendor/github.com/google/uuid/uuid.go -+++ b/vendor/github.com/google/uuid/uuid.go -@@ -12,6 +12,7 @@ import ( - "fmt" - "io" - "strings" -+ "sync" - ) - - // A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC -@@ -33,7 +34,27 @@ const ( - Future // Reserved for future definition. - ) - --var rander = rand.Reader // random function -+const randPoolSize = 16 * 16 -+ -+var ( -+ rander = rand.Reader // random function -+ poolEnabled = false -+ poolMu sync.Mutex -+ poolPos = randPoolSize // protected with poolMu -+ pool [randPoolSize]byte // protected with poolMu -+) -+ -+type invalidLengthError struct{ len int } -+ -+func (err invalidLengthError) Error() string { -+ return fmt.Sprintf("invalid UUID length: %d", err.len) -+} -+ -+// IsInvalidLengthError is matcher function for custom error invalidLengthError -+func IsInvalidLengthError(err error) bool { -+ _, ok := err.(invalidLengthError) -+ return ok -+} - - // Parse decodes s into a UUID or returns an error. Both the standard UUID - // forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and -@@ -68,7 +89,7 @@ func Parse(s string) (UUID, error) { - } - return uuid, nil - default: -- return uuid, fmt.Errorf("invalid UUID length: %d", len(s)) -+ return uuid, invalidLengthError{len(s)} - } - // s is now at least 36 bytes long - // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -@@ -112,7 +133,7 @@ func ParseBytes(b []byte) (UUID, error) { - } - return uuid, nil - default: -- return uuid, fmt.Errorf("invalid UUID length: %d", len(b)) -+ return uuid, invalidLengthError{len(b)} - } - // s is now at least 36 bytes long - // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -@@ -243,3 +264,31 @@ func SetRand(r io.Reader) { - } - rander = r - } -+ -+// EnableRandPool enables internal randomness pool used for Random -+// (Version 4) UUID generation. The pool contains random bytes read from -+// the random number generator on demand in batches. Enabling the pool -+// may improve the UUID generation throughput significantly. -+// -+// Since the pool is stored on the Go heap, this feature may be a bad fit -+// for security sensitive applications. -+// -+// Both EnableRandPool and DisableRandPool are not thread-safe and should -+// only be called when there is no possibility that New or any other -+// UUID Version 4 generation function will be called concurrently. -+func EnableRandPool() { -+ poolEnabled = true -+} -+ -+// DisableRandPool disables the randomness pool if it was previously -+// enabled with EnableRandPool. -+// -+// Both EnableRandPool and DisableRandPool are not thread-safe and should -+// only be called when there is no possibility that New or any other -+// UUID Version 4 generation function will be called concurrently. -+func DisableRandPool() { -+ poolEnabled = false -+ defer poolMu.Unlock() -+ poolMu.Lock() -+ poolPos = randPoolSize -+} -diff --git a/vendor/github.com/google/uuid/version1.go b/vendor/github.com/google/uuid/version1.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/google/uuid/version4.go b/vendor/github.com/google/uuid/version4.go -old mode 100644 -new mode 100755 -index c110465..7697802 ---- a/vendor/github.com/google/uuid/version4.go -+++ b/vendor/github.com/google/uuid/version4.go -@@ -14,11 +14,21 @@ func New() UUID { - return Must(NewRandom()) - } - -+// NewString creates a new random UUID and returns it as a string or panics. -+// NewString is equivalent to the expression -+// -+// uuid.New().String() -+func NewString() string { -+ return Must(NewRandom()).String() -+} -+ - // NewRandom returns a Random (Version 4) UUID. - // - // The strength of the UUIDs is based on the strength of the crypto/rand - // package. - // -+// Uses the randomness pool if it was enabled with EnableRandPool. -+// - // A note about uniqueness derived from the UUID Wikipedia entry: - // - // Randomly generated UUIDs have 122 random bits. One's annual risk of being -@@ -27,7 +37,10 @@ func New() UUID { - // equivalent to the odds of creating a few tens of trillions of UUIDs in a - // year and having one duplicate. - func NewRandom() (UUID, error) { -- return NewRandomFromReader(rander) -+ if !poolEnabled { -+ return NewRandomFromReader(rander) -+ } -+ return newRandomFromPool() - } - - // NewRandomFromReader returns a UUID based on bytes read from a given io.Reader. -@@ -41,3 +54,23 @@ func NewRandomFromReader(r io.Reader) (UUID, error) { - uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 - return uuid, nil - } -+ -+func newRandomFromPool() (UUID, error) { -+ var uuid UUID -+ poolMu.Lock() -+ if poolPos == randPoolSize { -+ _, err := io.ReadFull(rander, pool[:]) -+ if err != nil { -+ poolMu.Unlock() -+ return Nil, err -+ } -+ poolPos = 0 -+ } -+ copy(uuid[:], pool[poolPos:(poolPos+16)]) -+ poolPos += 16 -+ poolMu.Unlock() -+ -+ uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 -+ uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 -+ return uuid, nil -+} -diff --git a/vendor/github.com/googleapis/gnostic/LICENSE b/vendor/github.com/googleapis/gnostic/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/compiler/README.md b/vendor/github.com/googleapis/gnostic/compiler/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/compiler/context.go b/vendor/github.com/googleapis/gnostic/compiler/context.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/compiler/error.go b/vendor/github.com/googleapis/gnostic/compiler/error.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/compiler/extension-handler.go b/vendor/github.com/googleapis/gnostic/compiler/extension-handler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/compiler/helpers.go b/vendor/github.com/googleapis/gnostic/compiler/helpers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/compiler/main.go b/vendor/github.com/googleapis/gnostic/compiler/main.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/compiler/reader.go b/vendor/github.com/googleapis/gnostic/compiler/reader.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/extensions/README.md b/vendor/github.com/googleapis/gnostic/extensions/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go b/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/extensions/extension.proto b/vendor/github.com/googleapis/gnostic/extensions/extension.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/extensions/extensions.go b/vendor/github.com/googleapis/gnostic/extensions/extensions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/README.md b/vendor/github.com/googleapis/gnostic/openapiv2/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/openapi-2.0.json b/vendor/github.com/googleapis/gnostic/openapiv2/openapi-2.0.json -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/.gitignore b/vendor/github.com/hashicorp/golang-lru/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/2q.go b/vendor/github.com/hashicorp/golang-lru/2q.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/LICENSE b/vendor/github.com/hashicorp/golang-lru/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/README.md b/vendor/github.com/hashicorp/golang-lru/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/arc.go b/vendor/github.com/hashicorp/golang-lru/arc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/doc.go b/vendor/github.com/hashicorp/golang-lru/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/lru.go b/vendor/github.com/hashicorp/golang-lru/lru.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/simplelru/lru.go b/vendor/github.com/hashicorp/golang-lru/simplelru/lru.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go b/vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/.codecov.yml b/vendor/github.com/json-iterator/go/.codecov.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/.gitignore b/vendor/github.com/json-iterator/go/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/.travis.yml b/vendor/github.com/json-iterator/go/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/Gopkg.lock b/vendor/github.com/json-iterator/go/Gopkg.lock -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/Gopkg.toml b/vendor/github.com/json-iterator/go/Gopkg.toml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/LICENSE b/vendor/github.com/json-iterator/go/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/README.md b/vendor/github.com/json-iterator/go/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/adapter.go b/vendor/github.com/json-iterator/go/adapter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any.go b/vendor/github.com/json-iterator/go/any.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_array.go b/vendor/github.com/json-iterator/go/any_array.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_bool.go b/vendor/github.com/json-iterator/go/any_bool.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_float.go b/vendor/github.com/json-iterator/go/any_float.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_int32.go b/vendor/github.com/json-iterator/go/any_int32.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_int64.go b/vendor/github.com/json-iterator/go/any_int64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_invalid.go b/vendor/github.com/json-iterator/go/any_invalid.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_nil.go b/vendor/github.com/json-iterator/go/any_nil.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_number.go b/vendor/github.com/json-iterator/go/any_number.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_object.go b/vendor/github.com/json-iterator/go/any_object.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_str.go b/vendor/github.com/json-iterator/go/any_str.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_uint32.go b/vendor/github.com/json-iterator/go/any_uint32.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/any_uint64.go b/vendor/github.com/json-iterator/go/any_uint64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/build.sh b/vendor/github.com/json-iterator/go/build.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/config.go b/vendor/github.com/json-iterator/go/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md b/vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter.go b/vendor/github.com/json-iterator/go/iter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter_array.go b/vendor/github.com/json-iterator/go/iter_array.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter_float.go b/vendor/github.com/json-iterator/go/iter_float.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter_int.go b/vendor/github.com/json-iterator/go/iter_int.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter_object.go b/vendor/github.com/json-iterator/go/iter_object.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter_skip.go b/vendor/github.com/json-iterator/go/iter_skip.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter_skip_sloppy.go b/vendor/github.com/json-iterator/go/iter_skip_sloppy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter_skip_strict.go b/vendor/github.com/json-iterator/go/iter_skip_strict.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/iter_str.go b/vendor/github.com/json-iterator/go/iter_str.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/jsoniter.go b/vendor/github.com/json-iterator/go/jsoniter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/pool.go b/vendor/github.com/json-iterator/go/pool.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect.go b/vendor/github.com/json-iterator/go/reflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_array.go b/vendor/github.com/json-iterator/go/reflect_array.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_dynamic.go b/vendor/github.com/json-iterator/go/reflect_dynamic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_extension.go b/vendor/github.com/json-iterator/go/reflect_extension.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_json_number.go b/vendor/github.com/json-iterator/go/reflect_json_number.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_json_raw_message.go b/vendor/github.com/json-iterator/go/reflect_json_raw_message.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_map.go b/vendor/github.com/json-iterator/go/reflect_map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_marshaler.go b/vendor/github.com/json-iterator/go/reflect_marshaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_native.go b/vendor/github.com/json-iterator/go/reflect_native.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_optional.go b/vendor/github.com/json-iterator/go/reflect_optional.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_slice.go b/vendor/github.com/json-iterator/go/reflect_slice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_struct_decoder.go b/vendor/github.com/json-iterator/go/reflect_struct_decoder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/reflect_struct_encoder.go b/vendor/github.com/json-iterator/go/reflect_struct_encoder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/stream.go b/vendor/github.com/json-iterator/go/stream.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/stream_float.go b/vendor/github.com/json-iterator/go/stream_float.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/stream_int.go b/vendor/github.com/json-iterator/go/stream_int.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/stream_str.go b/vendor/github.com/json-iterator/go/stream_str.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/json-iterator/go/test.sh b/vendor/github.com/json-iterator/go/test.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/.gitignore b/vendor/github.com/karrick/godirwalk/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/LICENSE b/vendor/github.com/karrick/godirwalk/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/README.md b/vendor/github.com/karrick/godirwalk/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/azure-pipelines.yml b/vendor/github.com/karrick/godirwalk/azure-pipelines.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/bench.sh b/vendor/github.com/karrick/godirwalk/bench.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/debug_development.go b/vendor/github.com/karrick/godirwalk/debug_development.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/debug_release.go b/vendor/github.com/karrick/godirwalk/debug_release.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/dirent.go b/vendor/github.com/karrick/godirwalk/dirent.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/doc.go b/vendor/github.com/karrick/godirwalk/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/inoWithFileno.go b/vendor/github.com/karrick/godirwalk/inoWithFileno.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/inoWithIno.go b/vendor/github.com/karrick/godirwalk/inoWithIno.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/modeType.go b/vendor/github.com/karrick/godirwalk/modeType.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/modeTypeWithType.go b/vendor/github.com/karrick/godirwalk/modeTypeWithType.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/modeTypeWithoutType.go b/vendor/github.com/karrick/godirwalk/modeTypeWithoutType.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/nameWithNamlen.go b/vendor/github.com/karrick/godirwalk/nameWithNamlen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/nameWithoutNamlen.go b/vendor/github.com/karrick/godirwalk/nameWithoutNamlen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/readdir.go b/vendor/github.com/karrick/godirwalk/readdir.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/readdir_unix.go b/vendor/github.com/karrick/godirwalk/readdir_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/readdir_windows.go b/vendor/github.com/karrick/godirwalk/readdir_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/reclenFromNamlen.go b/vendor/github.com/karrick/godirwalk/reclenFromNamlen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/reclenFromReclen.go b/vendor/github.com/karrick/godirwalk/reclenFromReclen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/scandir_unix.go b/vendor/github.com/karrick/godirwalk/scandir_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/scandir_windows.go b/vendor/github.com/karrick/godirwalk/scandir_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/scanner.go b/vendor/github.com/karrick/godirwalk/scanner.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/karrick/godirwalk/walk.go b/vendor/github.com/karrick/godirwalk/walk.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE b/vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE b/vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/.gitignore b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/Makefile b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/Makefile -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/doc.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/.gitignore b/vendor/github.com/mistifyio/go-zfs/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/.travis.yml b/vendor/github.com/mistifyio/go-zfs/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/CONTRIBUTING.md b/vendor/github.com/mistifyio/go-zfs/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/LICENSE b/vendor/github.com/mistifyio/go-zfs/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/README.md b/vendor/github.com/mistifyio/go-zfs/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/Vagrantfile b/vendor/github.com/mistifyio/go-zfs/Vagrantfile -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/error.go b/vendor/github.com/mistifyio/go-zfs/error.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/utils.go b/vendor/github.com/mistifyio/go-zfs/utils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/utils_notsolaris.go b/vendor/github.com/mistifyio/go-zfs/utils_notsolaris.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/utils_solaris.go b/vendor/github.com/mistifyio/go-zfs/utils_solaris.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/zfs.go b/vendor/github.com/mistifyio/go-zfs/zfs.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mistifyio/go-zfs/zpool.go b/vendor/github.com/mistifyio/go-zfs/zpool.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/LICENSE b/vendor/github.com/moby/sys/mountinfo/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/doc.go b/vendor/github.com/moby/sys/mountinfo/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mounted_linux.go b/vendor/github.com/moby/sys/mountinfo/mounted_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mounted_unix.go b/vendor/github.com/moby/sys/mountinfo/mounted_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mountinfo.go b/vendor/github.com/moby/sys/mountinfo/mountinfo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mountinfo_bsd.go b/vendor/github.com/moby/sys/mountinfo/mountinfo_bsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mountinfo_filters.go b/vendor/github.com/moby/sys/mountinfo/mountinfo_filters.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mountinfo_freebsdlike.go b/vendor/github.com/moby/sys/mountinfo/mountinfo_freebsdlike.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mountinfo_linux.go b/vendor/github.com/moby/sys/mountinfo/mountinfo_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mountinfo_openbsd.go b/vendor/github.com/moby/sys/mountinfo/mountinfo_openbsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mountinfo_unsupported.go b/vendor/github.com/moby/sys/mountinfo/mountinfo_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/moby/sys/mountinfo/mountinfo_windows.go b/vendor/github.com/moby/sys/mountinfo/mountinfo_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/.gitignore b/vendor/github.com/modern-go/concurrent/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/.travis.yml b/vendor/github.com/modern-go/concurrent/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/LICENSE b/vendor/github.com/modern-go/concurrent/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/README.md b/vendor/github.com/modern-go/concurrent/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/executor.go b/vendor/github.com/modern-go/concurrent/executor.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/go_above_19.go b/vendor/github.com/modern-go/concurrent/go_above_19.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/go_below_19.go b/vendor/github.com/modern-go/concurrent/go_below_19.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/log.go b/vendor/github.com/modern-go/concurrent/log.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/test.sh b/vendor/github.com/modern-go/concurrent/test.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/concurrent/unbounded_executor.go b/vendor/github.com/modern-go/concurrent/unbounded_executor.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/.gitignore b/vendor/github.com/modern-go/reflect2/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/.travis.yml b/vendor/github.com/modern-go/reflect2/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/Gopkg.lock b/vendor/github.com/modern-go/reflect2/Gopkg.lock -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/Gopkg.toml b/vendor/github.com/modern-go/reflect2/Gopkg.toml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/LICENSE b/vendor/github.com/modern-go/reflect2/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/README.md b/vendor/github.com/modern-go/reflect2/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/go_above_118.go b/vendor/github.com/modern-go/reflect2/go_above_118.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/go_above_19.go b/vendor/github.com/modern-go/reflect2/go_above_19.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/go_below_118.go b/vendor/github.com/modern-go/reflect2/go_below_118.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/reflect2.go b/vendor/github.com/modern-go/reflect2/reflect2.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/reflect2_amd64.s b/vendor/github.com/modern-go/reflect2/reflect2_amd64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/reflect2_kind.go b/vendor/github.com/modern-go/reflect2/reflect2_kind.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/relfect2_386.s b/vendor/github.com/modern-go/reflect2/relfect2_386.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s b/vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/relfect2_arm.s b/vendor/github.com/modern-go/reflect2/relfect2_arm.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/relfect2_arm64.s b/vendor/github.com/modern-go/reflect2/relfect2_arm64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/relfect2_mips64x.s b/vendor/github.com/modern-go/reflect2/relfect2_mips64x.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/relfect2_mipsx.s b/vendor/github.com/modern-go/reflect2/relfect2_mipsx.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s b/vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/relfect2_s390x.s b/vendor/github.com/modern-go/reflect2/relfect2_s390x.s -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/safe_field.go b/vendor/github.com/modern-go/reflect2/safe_field.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/safe_map.go b/vendor/github.com/modern-go/reflect2/safe_map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/safe_slice.go b/vendor/github.com/modern-go/reflect2/safe_slice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/safe_struct.go b/vendor/github.com/modern-go/reflect2/safe_struct.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/safe_type.go b/vendor/github.com/modern-go/reflect2/safe_type.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/type_map.go b/vendor/github.com/modern-go/reflect2/type_map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_array.go b/vendor/github.com/modern-go/reflect2/unsafe_array.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_eface.go b/vendor/github.com/modern-go/reflect2/unsafe_eface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_field.go b/vendor/github.com/modern-go/reflect2/unsafe_field.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_iface.go b/vendor/github.com/modern-go/reflect2/unsafe_iface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_link.go b/vendor/github.com/modern-go/reflect2/unsafe_link.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_map.go b/vendor/github.com/modern-go/reflect2/unsafe_map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_ptr.go b/vendor/github.com/modern-go/reflect2/unsafe_ptr.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_slice.go b/vendor/github.com/modern-go/reflect2/unsafe_slice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_struct.go b/vendor/github.com/modern-go/reflect2/unsafe_struct.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/modern-go/reflect2/unsafe_type.go b/vendor/github.com/modern-go/reflect2/unsafe_type.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mrunalp/fileutils/.gitignore b/vendor/github.com/mrunalp/fileutils/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mrunalp/fileutils/LICENSE b/vendor/github.com/mrunalp/fileutils/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mrunalp/fileutils/MAINTAINERS b/vendor/github.com/mrunalp/fileutils/MAINTAINERS -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mrunalp/fileutils/README.md b/vendor/github.com/mrunalp/fileutils/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mrunalp/fileutils/fileutils.go b/vendor/github.com/mrunalp/fileutils/fileutils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/mrunalp/fileutils/idtools.go b/vendor/github.com/mrunalp/fileutils/idtools.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/LICENSE b/vendor/github.com/opencontainers/runc/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/NOTICE b/vendor/github.com/opencontainers/runc/NOTICE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/README.md b/vendor/github.com/opencontainers/runc/libcontainer/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/SPEC.md b/vendor/github.com/opencontainers/runc/libcontainer/SPEC.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor.go b/vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/capabilities/capabilities.go b/vendor/github.com/opencontainers/runc/libcontainer/capabilities/capabilities.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/capabilities/capabilities_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/capabilities/capabilities_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices/devices_emulator.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices/devices_emulator.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter/devicefilter.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter/devicefilter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/ebpf_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/ebpf_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/file.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/file.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/blkio.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/blkio.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpu.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpu.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuacct.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuacct.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuset.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/devices.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/devices.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/error.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/error.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/freezer.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/freezer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/fs.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/fs.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/hugetlb.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/hugetlb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/memory.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/memory.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/name.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/name.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_cls.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_cls.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_prio.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_prio.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/paths.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/paths.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/perf_event.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/perf_event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/pids.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/pids.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/rdma.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/rdma.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/cpu.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/cpu.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/cpuset.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/cpuset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/create.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/create.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/defaultpath.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/defaultpath.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/devices.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/devices.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/freezer.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/freezer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/fs2.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/fs2.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/hugetlb.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/hugetlb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/io.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/io.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/memory.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/memory.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/pids.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/pids.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/rdma.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/rdma.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/utils.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/utils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/getallpids.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/getallpids.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/manager/new.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/manager/new.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/stats.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/stats.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/cpuset.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/cpuset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/dbus.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/dbus.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/user.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/user.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v2.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v2.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/v1_utils.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/v1_utils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/blkio_device.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/blkio_device.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/config_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/config_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/configs_fuzzer.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/configs_fuzzer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/hugepage_limit.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/hugepage_limit.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/intelrdt.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/intelrdt.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/interface_priority_map.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/interface_priority_map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/mount.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/mount.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/network.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/network.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/rdma.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/rdma.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/validate/rootless.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/validate/rootless.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/validate/validator.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/validate/validator.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/console_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/console_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/container.go b/vendor/github.com/opencontainers/runc/libcontainer/container.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/criu_opts_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/criu_opts_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/devices/device.go b/vendor/github.com/opencontainers/runc/libcontainer/devices/device.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/devices/device_unix.go b/vendor/github.com/opencontainers/runc/libcontainer/devices/device_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/error.go b/vendor/github.com/opencontainers/runc/libcontainer/error.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/factory.go b/vendor/github.com/opencontainers/runc/libcontainer/factory.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/factory_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/factory_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/init_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/init_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/cmt.go b/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/cmt.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/intelrdt.go b/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/intelrdt.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/mbm.go b/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/mbm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/monitoring.go b/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/monitoring.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/stats.go b/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/stats.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/keys/keyctl.go b/vendor/github.com/opencontainers/runc/libcontainer/keys/keyctl.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/logs/logs.go b/vendor/github.com/opencontainers/runc/libcontainer/logs/logs.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/message_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/message_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/mount_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/mount_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/network_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/network_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/notify_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/notify_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/notify_v2_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/notify_v2_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/process.go b/vendor/github.com/opencontainers/runc/libcontainer/process.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/restored_process.go b/vendor/github.com/opencontainers/runc/libcontainer/restored_process.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go b/vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/seccomp/seccomp_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/seccomp/seccomp_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/seccomp/seccomp_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/seccomp/seccomp_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/setns_init_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/setns_init_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/standard_init_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/standard_init_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/state_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/state_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/stats_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/stats_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/sync.go b/vendor/github.com/opencontainers/runc/libcontainer/sync.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/linux.go b/vendor/github.com/opencontainers/runc/libcontainer/system/linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/proc.go b/vendor/github.com/opencontainers/runc/libcontainer/system/proc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_32.go b/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_32.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go b/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go b/vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/user/user.go b/vendor/github.com/opencontainers/runc/libcontainer/user/user.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/user/user_fuzzer.go b/vendor/github.com/opencontainers/runc/libcontainer/user/user_fuzzer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/userns/userns.go b/vendor/github.com/opencontainers/runc/libcontainer/userns/userns.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/userns/userns_fuzzer.go b/vendor/github.com/opencontainers/runc/libcontainer/userns/userns_fuzzer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/userns/userns_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/userns/userns_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/userns/userns_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/userns/userns_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/utils/cmsg.go b/vendor/github.com/opencontainers/runc/libcontainer/utils/cmsg.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go b/vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go b/vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runc/types/events.go b/vendor/github.com/opencontainers/runc/types/events.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runtime-spec/LICENSE b/vendor/github.com/opencontainers/runtime-spec/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go b/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runtime-spec/specs-go/state.go b/vendor/github.com/opencontainers/runtime-spec/specs-go/state.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/runtime-spec/specs-go/version.go b/vendor/github.com/opencontainers/runtime-spec/specs-go/version.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/LICENSE b/vendor/github.com/opencontainers/selinux/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/doc.go b/vendor/github.com/opencontainers/selinux/go-selinux/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go b/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/label/label_linux.go b/vendor/github.com/opencontainers/selinux/go-selinux/label/label_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/label/label_stub.go b/vendor/github.com/opencontainers/selinux/go-selinux/label/label_stub.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go b/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go b/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/selinux.go b/vendor/github.com/opencontainers/selinux/go-selinux/selinux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/xattrs_linux.go b/vendor/github.com/opencontainers/selinux/go-selinux/xattrs_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/pkg/pwalk/README.md b/vendor/github.com/opencontainers/selinux/pkg/pwalk/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/pkg/pwalk/pwalk.go b/vendor/github.com/opencontainers/selinux/pkg/pwalk/pwalk.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/pkg/pwalkdir/README.md b/vendor/github.com/opencontainers/selinux/pkg/pwalkdir/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/opencontainers/selinux/pkg/pwalkdir/pwalkdir.go b/vendor/github.com/opencontainers/selinux/pkg/pwalkdir/pwalkdir.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/.gitignore b/vendor/github.com/pkg/errors/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/.travis.yml b/vendor/github.com/pkg/errors/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/LICENSE b/vendor/github.com/pkg/errors/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/Makefile b/vendor/github.com/pkg/errors/Makefile -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/appveyor.yml b/vendor/github.com/pkg/errors/appveyor.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/go113.go b/vendor/github.com/pkg/errors/go113.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pmezard/go-difflib/LICENSE b/vendor/github.com/pmezard/go-difflib/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/pmezard/go-difflib/difflib/difflib.go b/vendor/github.com/pmezard/go-difflib/difflib/difflib.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/client_golang/LICENSE b/vendor/github.com/prometheus/client_golang/LICENSE -new file mode 100755 -index 0000000..261eeb9 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/LICENSE -@@ -0,0 +1,201 @@ -+ Apache License -+ Version 2.0, January 2004 -+ http://www.apache.org/licenses/ -+ -+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -+ -+ 1. Definitions. -+ -+ "License" shall mean the terms and conditions for use, reproduction, -+ and distribution as defined by Sections 1 through 9 of this document. -+ -+ "Licensor" shall mean the copyright owner or entity authorized by -+ the copyright owner that is granting the License. -+ -+ "Legal Entity" shall mean the union of the acting entity and all -+ other entities that control, are controlled by, or are under common -+ control with that entity. For the purposes of this definition, -+ "control" means (i) the power, direct or indirect, to cause the -+ direction or management of such entity, whether by contract or -+ otherwise, or (ii) ownership of fifty percent (50%) or more of the -+ outstanding shares, or (iii) beneficial ownership of such entity. -+ -+ "You" (or "Your") shall mean an individual or Legal Entity -+ exercising permissions granted by this License. -+ -+ "Source" form shall mean the preferred form for making modifications, -+ including but not limited to software source code, documentation -+ source, and configuration files. -+ -+ "Object" form shall mean any form resulting from mechanical -+ transformation or translation of a Source form, including but -+ not limited to compiled object code, generated documentation, -+ and conversions to other media types. -+ -+ "Work" shall mean the work of authorship, whether in Source or -+ Object form, made available under the License, as indicated by a -+ copyright notice that is included in or attached to the work -+ (an example is provided in the Appendix below). -+ -+ "Derivative Works" shall mean any work, whether in Source or Object -+ form, that is based on (or derived from) the Work and for which the -+ editorial revisions, annotations, elaborations, or other modifications -+ represent, as a whole, an original work of authorship. For the purposes -+ of this License, Derivative Works shall not include works that remain -+ separable from, or merely link (or bind by name) to the interfaces of, -+ the Work and Derivative Works thereof. -+ -+ "Contribution" shall mean any work of authorship, including -+ the original version of the Work and any modifications or additions -+ to that Work or Derivative Works thereof, that is intentionally -+ submitted to Licensor for inclusion in the Work by the copyright owner -+ or by an individual or Legal Entity authorized to submit on behalf of -+ the copyright owner. For the purposes of this definition, "submitted" -+ means any form of electronic, verbal, or written communication sent -+ to the Licensor or its representatives, including but not limited to -+ communication on electronic mailing lists, source code control systems, -+ and issue tracking systems that are managed by, or on behalf of, the -+ Licensor for the purpose of discussing and improving the Work, but -+ excluding communication that is conspicuously marked or otherwise -+ designated in writing by the copyright owner as "Not a Contribution." -+ -+ "Contributor" shall mean Licensor and any individual or Legal Entity -+ on behalf of whom a Contribution has been received by Licensor and -+ subsequently incorporated within the Work. -+ -+ 2. Grant of Copyright License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ copyright license to reproduce, prepare Derivative Works of, -+ publicly display, publicly perform, sublicense, and distribute the -+ Work and such Derivative Works in Source or Object form. -+ -+ 3. Grant of Patent License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ (except as stated in this section) patent license to make, have made, -+ use, offer to sell, sell, import, and otherwise transfer the Work, -+ where such license applies only to those patent claims licensable -+ by such Contributor that are necessarily infringed by their -+ Contribution(s) alone or by combination of their Contribution(s) -+ with the Work to which such Contribution(s) was submitted. If You -+ institute patent litigation against any entity (including a -+ cross-claim or counterclaim in a lawsuit) alleging that the Work -+ or a Contribution incorporated within the Work constitutes direct -+ or contributory patent infringement, then any patent licenses -+ granted to You under this License for that Work shall terminate -+ as of the date such litigation is filed. -+ -+ 4. Redistribution. You may reproduce and distribute copies of the -+ Work or Derivative Works thereof in any medium, with or without -+ modifications, and in Source or Object form, provided that You -+ meet the following conditions: -+ -+ (a) You must give any other recipients of the Work or -+ Derivative Works a copy of this License; and -+ -+ (b) You must cause any modified files to carry prominent notices -+ stating that You changed the files; and -+ -+ (c) You must retain, in the Source form of any Derivative Works -+ that You distribute, all copyright, patent, trademark, and -+ attribution notices from the Source form of the Work, -+ excluding those notices that do not pertain to any part of -+ the Derivative Works; and -+ -+ (d) If the Work includes a "NOTICE" text file as part of its -+ distribution, then any Derivative Works that You distribute must -+ include a readable copy of the attribution notices contained -+ within such NOTICE file, excluding those notices that do not -+ pertain to any part of the Derivative Works, in at least one -+ of the following places: within a NOTICE text file distributed -+ as part of the Derivative Works; within the Source form or -+ documentation, if provided along with the Derivative Works; or, -+ within a display generated by the Derivative Works, if and -+ wherever such third-party notices normally appear. The contents -+ of the NOTICE file are for informational purposes only and -+ do not modify the License. You may add Your own attribution -+ notices within Derivative Works that You distribute, alongside -+ or as an addendum to the NOTICE text from the Work, provided -+ that such additional attribution notices cannot be construed -+ as modifying the License. -+ -+ You may add Your own copyright statement to Your modifications and -+ may provide additional or different license terms and conditions -+ for use, reproduction, or distribution of Your modifications, or -+ for any such Derivative Works as a whole, provided Your use, -+ reproduction, and distribution of the Work otherwise complies with -+ the conditions stated in this License. -+ -+ 5. Submission of Contributions. Unless You explicitly state otherwise, -+ any Contribution intentionally submitted for inclusion in the Work -+ by You to the Licensor shall be under the terms and conditions of -+ this License, without any additional terms or conditions. -+ Notwithstanding the above, nothing herein shall supersede or modify -+ the terms of any separate license agreement you may have executed -+ with Licensor regarding such Contributions. -+ -+ 6. Trademarks. This License does not grant permission to use the trade -+ names, trademarks, service marks, or product names of the Licensor, -+ except as required for reasonable and customary use in describing the -+ origin of the Work and reproducing the content of the NOTICE file. -+ -+ 7. Disclaimer of Warranty. Unless required by applicable law or -+ agreed to in writing, Licensor provides the Work (and each -+ Contributor provides its Contributions) on an "AS IS" BASIS, -+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -+ implied, including, without limitation, any warranties or conditions -+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -+ PARTICULAR PURPOSE. You are solely responsible for determining the -+ appropriateness of using or redistributing the Work and assume any -+ risks associated with Your exercise of permissions under this License. -+ -+ 8. Limitation of Liability. In no event and under no legal theory, -+ whether in tort (including negligence), contract, or otherwise, -+ unless required by applicable law (such as deliberate and grossly -+ negligent acts) or agreed to in writing, shall any Contributor be -+ liable to You for damages, including any direct, indirect, special, -+ incidental, or consequential damages of any character arising as a -+ result of this License or out of the use or inability to use the -+ Work (including but not limited to damages for loss of goodwill, -+ work stoppage, computer failure or malfunction, or any and all -+ other commercial damages or losses), even if such Contributor -+ has been advised of the possibility of such damages. -+ -+ 9. Accepting Warranty or Additional Liability. While redistributing -+ the Work or Derivative Works thereof, You may choose to offer, -+ and charge a fee for, acceptance of support, warranty, indemnity, -+ or other liability obligations and/or rights consistent with this -+ License. However, in accepting such obligations, You may act only -+ on Your own behalf and on Your sole responsibility, not on behalf -+ of any other Contributor, and only if You agree to indemnify, -+ defend, and hold each Contributor harmless for any liability -+ incurred by, or claims asserted against, such Contributor by reason -+ of your accepting any such warranty or additional liability. -+ -+ END OF TERMS AND CONDITIONS -+ -+ APPENDIX: How to apply the Apache License to your work. -+ -+ To apply the Apache License to your work, attach the following -+ boilerplate notice, with the fields enclosed by brackets "[]" -+ replaced with your own identifying information. (Don't include -+ the brackets!) The text should be enclosed in the appropriate -+ comment syntax for the file format. We also recommend that a -+ file or class name and description of purpose be included on the -+ same "printed page" as the copyright notice for easier -+ identification within third-party archives. -+ -+ Copyright [yyyy] [name of copyright owner] -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -diff --git a/vendor/github.com/prometheus/client_golang/NOTICE b/vendor/github.com/prometheus/client_golang/NOTICE -new file mode 100755 -index 0000000..dd878a3 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/NOTICE -@@ -0,0 +1,23 @@ -+Prometheus instrumentation library for Go applications -+Copyright 2012-2015 The Prometheus Authors -+ -+This product includes software developed at -+SoundCloud Ltd. (http://soundcloud.com/). -+ -+ -+The following components are included in this product: -+ -+perks - a fork of https://github.com/bmizerany/perks -+https://github.com/beorn7/perks -+Copyright 2013-2015 Blake Mizerany, Björn Rabenstein -+See https://github.com/beorn7/perks/blob/master/README.md for license details. -+ -+Go support for Protocol Buffers - Google's data interchange format -+http://github.com/golang/protobuf/ -+Copyright 2010 The Go Authors -+See source code for license details. -+ -+Support for streaming Protocol Buffer messages for the Go language (golang). -+https://github.com/matttproud/golang_protobuf_extensions -+Copyright 2013 Matt T. Proud -+Licensed under the Apache License, Version 2.0 -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/.gitignore b/vendor/github.com/prometheus/client_golang/prometheus/.gitignore -new file mode 100755 -index 0000000..3460f03 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/.gitignore -@@ -0,0 +1 @@ -+command-line-arguments.test -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/README.md b/vendor/github.com/prometheus/client_golang/prometheus/README.md -new file mode 100755 -index 0000000..c67ff1b ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/README.md -@@ -0,0 +1 @@ -+See [![Go Reference](https://pkg.go.dev/badge/github.com/prometheus/client_golang/prometheus.svg)](https://pkg.go.dev/github.com/prometheus/client_golang/prometheus). -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/build_info_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/build_info_collector.go -new file mode 100755 -index 0000000..450189f ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/build_info_collector.go -@@ -0,0 +1,38 @@ -+// Copyright 2021 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import "runtime/debug" -+ -+// NewBuildInfoCollector is the obsolete version of collectors.NewBuildInfoCollector. -+// See there for documentation. -+// -+// Deprecated: Use collectors.NewBuildInfoCollector instead. -+func NewBuildInfoCollector() Collector { -+ path, version, sum := "unknown", "unknown", "unknown" -+ if bi, ok := debug.ReadBuildInfo(); ok { -+ path = bi.Main.Path -+ version = bi.Main.Version -+ sum = bi.Main.Sum -+ } -+ c := &selfCollector{MustNewConstMetric( -+ NewDesc( -+ "go_build_info", -+ "Build information about the main Go module.", -+ nil, Labels{"path": path, "version": version, "checksum": sum}, -+ ), -+ GaugeValue, 1)} -+ c.init(c.self) -+ return c -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collector.go -new file mode 100755 -index 0000000..cf05079 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/collector.go -@@ -0,0 +1,128 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+// Collector is the interface implemented by anything that can be used by -+// Prometheus to collect metrics. A Collector has to be registered for -+// collection. See Registerer.Register. -+// -+// The stock metrics provided by this package (Gauge, Counter, Summary, -+// Histogram, Untyped) are also Collectors (which only ever collect one metric, -+// namely itself). An implementer of Collector may, however, collect multiple -+// metrics in a coordinated fashion and/or create metrics on the fly. Examples -+// for collectors already implemented in this library are the metric vectors -+// (i.e. collection of multiple instances of the same Metric but with different -+// label values) like GaugeVec or SummaryVec, and the ExpvarCollector. -+type Collector interface { -+ // Describe sends the super-set of all possible descriptors of metrics -+ // collected by this Collector to the provided channel and returns once -+ // the last descriptor has been sent. The sent descriptors fulfill the -+ // consistency and uniqueness requirements described in the Desc -+ // documentation. -+ // -+ // It is valid if one and the same Collector sends duplicate -+ // descriptors. Those duplicates are simply ignored. However, two -+ // different Collectors must not send duplicate descriptors. -+ // -+ // Sending no descriptor at all marks the Collector as “unchecked”, -+ // i.e. no checks will be performed at registration time, and the -+ // Collector may yield any Metric it sees fit in its Collect method. -+ // -+ // This method idempotently sends the same descriptors throughout the -+ // lifetime of the Collector. It may be called concurrently and -+ // therefore must be implemented in a concurrency safe way. -+ // -+ // If a Collector encounters an error while executing this method, it -+ // must send an invalid descriptor (created with NewInvalidDesc) to -+ // signal the error to the registry. -+ Describe(chan<- *Desc) -+ // Collect is called by the Prometheus registry when collecting -+ // metrics. The implementation sends each collected metric via the -+ // provided channel and returns once the last metric has been sent. The -+ // descriptor of each sent metric is one of those returned by Describe -+ // (unless the Collector is unchecked, see above). Returned metrics that -+ // share the same descriptor must differ in their variable label -+ // values. -+ // -+ // This method may be called concurrently and must therefore be -+ // implemented in a concurrency safe way. Blocking occurs at the expense -+ // of total performance of rendering all registered metrics. Ideally, -+ // Collector implementations support concurrent readers. -+ Collect(chan<- Metric) -+} -+ -+// DescribeByCollect is a helper to implement the Describe method of a custom -+// Collector. It collects the metrics from the provided Collector and sends -+// their descriptors to the provided channel. -+// -+// If a Collector collects the same metrics throughout its lifetime, its -+// Describe method can simply be implemented as: -+// -+// func (c customCollector) Describe(ch chan<- *Desc) { -+// DescribeByCollect(c, ch) -+// } -+// -+// However, this will not work if the metrics collected change dynamically over -+// the lifetime of the Collector in a way that their combined set of descriptors -+// changes as well. The shortcut implementation will then violate the contract -+// of the Describe method. If a Collector sometimes collects no metrics at all -+// (for example vectors like CounterVec, GaugeVec, etc., which only collect -+// metrics after a metric with a fully specified label set has been accessed), -+// it might even get registered as an unchecked Collector (cf. the Register -+// method of the Registerer interface). Hence, only use this shortcut -+// implementation of Describe if you are certain to fulfill the contract. -+// -+// The Collector example demonstrates a use of DescribeByCollect. -+func DescribeByCollect(c Collector, descs chan<- *Desc) { -+ metrics := make(chan Metric) -+ go func() { -+ c.Collect(metrics) -+ close(metrics) -+ }() -+ for m := range metrics { -+ descs <- m.Desc() -+ } -+} -+ -+// selfCollector implements Collector for a single Metric so that the Metric -+// collects itself. Add it as an anonymous field to a struct that implements -+// Metric, and call init with the Metric itself as an argument. -+type selfCollector struct { -+ self Metric -+} -+ -+// init provides the selfCollector with a reference to the metric it is supposed -+// to collect. It is usually called within the factory function to create a -+// metric. See example. -+func (c *selfCollector) init(self Metric) { -+ c.self = self -+} -+ -+// Describe implements Collector. -+func (c *selfCollector) Describe(ch chan<- *Desc) { -+ ch <- c.self.Desc() -+} -+ -+// Collect implements Collector. -+func (c *selfCollector) Collect(ch chan<- Metric) { -+ ch <- c.self -+} -+ -+// collectorMetric is a metric that is also a collector. -+// Because of selfCollector, most (if not all) Metrics in -+// this package are also collectors. -+type collectorMetric interface { -+ Metric -+ Collector -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go -new file mode 100755 -index 0000000..a912b75 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/counter.go -@@ -0,0 +1,328 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "errors" -+ "math" -+ "sync/atomic" -+ "time" -+ -+ dto "github.com/prometheus/client_model/go" -+) -+ -+// Counter is a Metric that represents a single numerical value that only ever -+// goes up. That implies that it cannot be used to count items whose number can -+// also go down, e.g. the number of currently running goroutines. Those -+// "counters" are represented by Gauges. -+// -+// A Counter is typically used to count requests served, tasks completed, errors -+// occurred, etc. -+// -+// To create Counter instances, use NewCounter. -+type Counter interface { -+ Metric -+ Collector -+ -+ // Inc increments the counter by 1. Use Add to increment it by arbitrary -+ // non-negative values. -+ Inc() -+ // Add adds the given value to the counter. It panics if the value is < -+ // 0. -+ Add(float64) -+} -+ -+// ExemplarAdder is implemented by Counters that offer the option of adding a -+// value to the Counter together with an exemplar. Its AddWithExemplar method -+// works like the Add method of the Counter interface but also replaces the -+// currently saved exemplar (if any) with a new one, created from the provided -+// value, the current time as timestamp, and the provided labels. Empty Labels -+// will lead to a valid (label-less) exemplar. But if Labels is nil, the current -+// exemplar is left in place. AddWithExemplar panics if the value is < 0, if any -+// of the provided labels are invalid, or if the provided labels contain more -+// than 128 runes in total. -+type ExemplarAdder interface { -+ AddWithExemplar(value float64, exemplar Labels) -+} -+ -+// CounterOpts is an alias for Opts. See there for doc comments. -+type CounterOpts Opts -+ -+// NewCounter creates a new Counter based on the provided CounterOpts. -+// -+// The returned implementation also implements ExemplarAdder. It is safe to -+// perform the corresponding type assertion. -+// -+// The returned implementation tracks the counter value in two separate -+// variables, a float64 and a uint64. The latter is used to track calls of the -+// Inc method and calls of the Add method with a value that can be represented -+// as a uint64. This allows atomic increments of the counter with optimal -+// performance. (It is common to have an Inc call in very hot execution paths.) -+// Both internal tracking values are added up in the Write method. This has to -+// be taken into account when it comes to precision and overflow behavior. -+func NewCounter(opts CounterOpts) Counter { -+ desc := NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ nil, -+ opts.ConstLabels, -+ ) -+ result := &counter{desc: desc, labelPairs: desc.constLabelPairs, now: time.Now} -+ result.init(result) // Init self-collection. -+ return result -+} -+ -+type counter struct { -+ // valBits contains the bits of the represented float64 value, while -+ // valInt stores values that are exact integers. Both have to go first -+ // in the struct to guarantee alignment for atomic operations. -+ // http://golang.org/pkg/sync/atomic/#pkg-note-BUG -+ valBits uint64 -+ valInt uint64 -+ -+ selfCollector -+ desc *Desc -+ -+ labelPairs []*dto.LabelPair -+ exemplar atomic.Value // Containing nil or a *dto.Exemplar. -+ -+ now func() time.Time // To mock out time.Now() for testing. -+} -+ -+func (c *counter) Desc() *Desc { -+ return c.desc -+} -+ -+func (c *counter) Add(v float64) { -+ if v < 0 { -+ panic(errors.New("counter cannot decrease in value")) -+ } -+ -+ ival := uint64(v) -+ if float64(ival) == v { -+ atomic.AddUint64(&c.valInt, ival) -+ return -+ } -+ -+ for { -+ oldBits := atomic.LoadUint64(&c.valBits) -+ newBits := math.Float64bits(math.Float64frombits(oldBits) + v) -+ if atomic.CompareAndSwapUint64(&c.valBits, oldBits, newBits) { -+ return -+ } -+ } -+} -+ -+func (c *counter) AddWithExemplar(v float64, e Labels) { -+ c.Add(v) -+ c.updateExemplar(v, e) -+} -+ -+func (c *counter) Inc() { -+ atomic.AddUint64(&c.valInt, 1) -+} -+ -+func (c *counter) get() float64 { -+ fval := math.Float64frombits(atomic.LoadUint64(&c.valBits)) -+ ival := atomic.LoadUint64(&c.valInt) -+ return fval + float64(ival) -+} -+ -+func (c *counter) Write(out *dto.Metric) error { -+ // Read the Exemplar first and the value second. This is to avoid a race condition -+ // where users see an exemplar for a not-yet-existing observation. -+ var exemplar *dto.Exemplar -+ if e := c.exemplar.Load(); e != nil { -+ exemplar = e.(*dto.Exemplar) -+ } -+ val := c.get() -+ -+ return populateMetric(CounterValue, val, c.labelPairs, exemplar, out) -+} -+ -+func (c *counter) updateExemplar(v float64, l Labels) { -+ if l == nil { -+ return -+ } -+ e, err := newExemplar(v, c.now(), l) -+ if err != nil { -+ panic(err) -+ } -+ c.exemplar.Store(e) -+} -+ -+// CounterVec is a Collector that bundles a set of Counters that all share the -+// same Desc, but have different values for their variable labels. This is used -+// if you want to count the same thing partitioned by various dimensions -+// (e.g. number of HTTP requests, partitioned by response code and -+// method). Create instances with NewCounterVec. -+type CounterVec struct { -+ *MetricVec -+} -+ -+// NewCounterVec creates a new CounterVec based on the provided CounterOpts and -+// partitioned by the given label names. -+func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec { -+ desc := NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ labelNames, -+ opts.ConstLabels, -+ ) -+ return &CounterVec{ -+ MetricVec: NewMetricVec(desc, func(lvs ...string) Metric { -+ if len(lvs) != len(desc.variableLabels) { -+ panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs)) -+ } -+ result := &counter{desc: desc, labelPairs: MakeLabelPairs(desc, lvs), now: time.Now} -+ result.init(result) // Init self-collection. -+ return result -+ }), -+ } -+} -+ -+// GetMetricWithLabelValues returns the Counter for the given slice of label -+// values (same order as the variable labels in Desc). If that combination of -+// label values is accessed for the first time, a new Counter is created. -+// -+// It is possible to call this method without using the returned Counter to only -+// create the new Counter but leave it at its starting value 0. See also the -+// SummaryVec example. -+// -+// Keeping the Counter for later use is possible (and should be considered if -+// performance is critical), but keep in mind that Reset, DeleteLabelValues and -+// Delete can be used to delete the Counter from the CounterVec. In that case, -+// the Counter will still exist, but it will not be exported anymore, even if a -+// Counter with the same label values is created later. -+// -+// An error is returned if the number of label values is not the same as the -+// number of variable labels in Desc (minus any curried labels). -+// -+// Note that for more than one label value, this method is prone to mistakes -+// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -+// an alternative to avoid that type of mistake. For higher label numbers, the -+// latter has a much more readable (albeit more verbose) syntax, but it comes -+// with a performance overhead (for creating and processing the Labels map). -+// See also the GaugeVec example. -+func (v *CounterVec) GetMetricWithLabelValues(lvs ...string) (Counter, error) { -+ metric, err := v.MetricVec.GetMetricWithLabelValues(lvs...) -+ if metric != nil { -+ return metric.(Counter), err -+ } -+ return nil, err -+} -+ -+// GetMetricWith returns the Counter for the given Labels map (the label names -+// must match those of the variable labels in Desc). If that label map is -+// accessed for the first time, a new Counter is created. Implications of -+// creating a Counter without using it and keeping the Counter for later use are -+// the same as for GetMetricWithLabelValues. -+// -+// An error is returned if the number and names of the Labels are inconsistent -+// with those of the variable labels in Desc (minus any curried labels). -+// -+// This method is used for the same purpose as -+// GetMetricWithLabelValues(...string). See there for pros and cons of the two -+// methods. -+func (v *CounterVec) GetMetricWith(labels Labels) (Counter, error) { -+ metric, err := v.MetricVec.GetMetricWith(labels) -+ if metric != nil { -+ return metric.(Counter), err -+ } -+ return nil, err -+} -+ -+// WithLabelValues works as GetMetricWithLabelValues, but panics where -+// GetMetricWithLabelValues would have returned an error. Not returning an -+// error allows shortcuts like -+// -+// myVec.WithLabelValues("404", "GET").Add(42) -+func (v *CounterVec) WithLabelValues(lvs ...string) Counter { -+ c, err := v.GetMetricWithLabelValues(lvs...) -+ if err != nil { -+ panic(err) -+ } -+ return c -+} -+ -+// With works as GetMetricWith, but panics where GetMetricWithLabels would have -+// returned an error. Not returning an error allows shortcuts like -+// -+// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Add(42) -+func (v *CounterVec) With(labels Labels) Counter { -+ c, err := v.GetMetricWith(labels) -+ if err != nil { -+ panic(err) -+ } -+ return c -+} -+ -+// CurryWith returns a vector curried with the provided labels, i.e. the -+// returned vector has those labels pre-set for all labeled operations performed -+// on it. The cardinality of the curried vector is reduced accordingly. The -+// order of the remaining labels stays the same (just with the curried labels -+// taken out of the sequence – which is relevant for the -+// (GetMetric)WithLabelValues methods). It is possible to curry a curried -+// vector, but only with labels not yet used for currying before. -+// -+// The metrics contained in the CounterVec are shared between the curried and -+// uncurried vectors. They are just accessed differently. Curried and uncurried -+// vectors behave identically in terms of collection. Only one must be -+// registered with a given registry (usually the uncurried version). The Reset -+// method deletes all metrics, even if called on a curried vector. -+func (v *CounterVec) CurryWith(labels Labels) (*CounterVec, error) { -+ vec, err := v.MetricVec.CurryWith(labels) -+ if vec != nil { -+ return &CounterVec{vec}, err -+ } -+ return nil, err -+} -+ -+// MustCurryWith works as CurryWith but panics where CurryWith would have -+// returned an error. -+func (v *CounterVec) MustCurryWith(labels Labels) *CounterVec { -+ vec, err := v.CurryWith(labels) -+ if err != nil { -+ panic(err) -+ } -+ return vec -+} -+ -+// CounterFunc is a Counter whose value is determined at collect time by calling a -+// provided function. -+// -+// To create CounterFunc instances, use NewCounterFunc. -+type CounterFunc interface { -+ Metric -+ Collector -+} -+ -+// NewCounterFunc creates a new CounterFunc based on the provided -+// CounterOpts. The value reported is determined by calling the given function -+// from within the Write method. Take into account that metric collection may -+// happen concurrently. If that results in concurrent calls to Write, like in -+// the case where a CounterFunc is directly registered with Prometheus, the -+// provided function must be concurrency-safe. The function should also honor -+// the contract for a Counter (values only go up, not down), but compliance will -+// not be checked. -+// -+// Check out the ExampleGaugeFunc examples for the similar GaugeFunc. -+func NewCounterFunc(opts CounterOpts, function func() float64) CounterFunc { -+ return newValueFunc(NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ nil, -+ opts.ConstLabels, -+ ), CounterValue, function) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/desc.go b/vendor/github.com/prometheus/client_golang/prometheus/desc.go -new file mode 100755 -index 0000000..8bc5e44 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/desc.go -@@ -0,0 +1,189 @@ -+// Copyright 2016 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "errors" -+ "fmt" -+ "sort" -+ "strings" -+ -+ "github.com/cespare/xxhash/v2" -+ -+ "github.com/prometheus/client_golang/prometheus/internal" -+ -+ //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. -+ "github.com/golang/protobuf/proto" -+ "github.com/prometheus/common/model" -+ -+ dto "github.com/prometheus/client_model/go" -+) -+ -+// Desc is the descriptor used by every Prometheus Metric. It is essentially -+// the immutable meta-data of a Metric. The normal Metric implementations -+// included in this package manage their Desc under the hood. Users only have to -+// deal with Desc if they use advanced features like the ExpvarCollector or -+// custom Collectors and Metrics. -+// -+// Descriptors registered with the same registry have to fulfill certain -+// consistency and uniqueness criteria if they share the same fully-qualified -+// name: They must have the same help string and the same label names (aka label -+// dimensions) in each, constLabels and variableLabels, but they must differ in -+// the values of the constLabels. -+// -+// Descriptors that share the same fully-qualified names and the same label -+// values of their constLabels are considered equal. -+// -+// Use NewDesc to create new Desc instances. -+type Desc struct { -+ // fqName has been built from Namespace, Subsystem, and Name. -+ fqName string -+ // help provides some helpful information about this metric. -+ help string -+ // constLabelPairs contains precalculated DTO label pairs based on -+ // the constant labels. -+ constLabelPairs []*dto.LabelPair -+ // variableLabels contains names of labels for which the metric -+ // maintains variable values. -+ variableLabels []string -+ // id is a hash of the values of the ConstLabels and fqName. This -+ // must be unique among all registered descriptors and can therefore be -+ // used as an identifier of the descriptor. -+ id uint64 -+ // dimHash is a hash of the label names (preset and variable) and the -+ // Help string. Each Desc with the same fqName must have the same -+ // dimHash. -+ dimHash uint64 -+ // err is an error that occurred during construction. It is reported on -+ // registration time. -+ err error -+} -+ -+// NewDesc allocates and initializes a new Desc. Errors are recorded in the Desc -+// and will be reported on registration time. variableLabels and constLabels can -+// be nil if no such labels should be set. fqName must not be empty. -+// -+// variableLabels only contain the label names. Their label values are variable -+// and therefore not part of the Desc. (They are managed within the Metric.) -+// -+// For constLabels, the label values are constant. Therefore, they are fully -+// specified in the Desc. See the Collector example for a usage pattern. -+func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) *Desc { -+ d := &Desc{ -+ fqName: fqName, -+ help: help, -+ variableLabels: variableLabels, -+ } -+ if !model.IsValidMetricName(model.LabelValue(fqName)) { -+ d.err = fmt.Errorf("%q is not a valid metric name", fqName) -+ return d -+ } -+ // labelValues contains the label values of const labels (in order of -+ // their sorted label names) plus the fqName (at position 0). -+ labelValues := make([]string, 1, len(constLabels)+1) -+ labelValues[0] = fqName -+ labelNames := make([]string, 0, len(constLabels)+len(variableLabels)) -+ labelNameSet := map[string]struct{}{} -+ // First add only the const label names and sort them... -+ for labelName := range constLabels { -+ if !checkLabelName(labelName) { -+ d.err = fmt.Errorf("%q is not a valid label name for metric %q", labelName, fqName) -+ return d -+ } -+ labelNames = append(labelNames, labelName) -+ labelNameSet[labelName] = struct{}{} -+ } -+ sort.Strings(labelNames) -+ // ... so that we can now add const label values in the order of their names. -+ for _, labelName := range labelNames { -+ labelValues = append(labelValues, constLabels[labelName]) -+ } -+ // Validate the const label values. They can't have a wrong cardinality, so -+ // use in len(labelValues) as expectedNumberOfValues. -+ if err := validateLabelValues(labelValues, len(labelValues)); err != nil { -+ d.err = err -+ return d -+ } -+ // Now add the variable label names, but prefix them with something that -+ // cannot be in a regular label name. That prevents matching the label -+ // dimension with a different mix between preset and variable labels. -+ for _, labelName := range variableLabels { -+ if !checkLabelName(labelName) { -+ d.err = fmt.Errorf("%q is not a valid label name for metric %q", labelName, fqName) -+ return d -+ } -+ labelNames = append(labelNames, "$"+labelName) -+ labelNameSet[labelName] = struct{}{} -+ } -+ if len(labelNames) != len(labelNameSet) { -+ d.err = errors.New("duplicate label names") -+ return d -+ } -+ -+ xxh := xxhash.New() -+ for _, val := range labelValues { -+ xxh.WriteString(val) -+ xxh.Write(separatorByteSlice) -+ } -+ d.id = xxh.Sum64() -+ // Sort labelNames so that order doesn't matter for the hash. -+ sort.Strings(labelNames) -+ // Now hash together (in this order) the help string and the sorted -+ // label names. -+ xxh.Reset() -+ xxh.WriteString(help) -+ xxh.Write(separatorByteSlice) -+ for _, labelName := range labelNames { -+ xxh.WriteString(labelName) -+ xxh.Write(separatorByteSlice) -+ } -+ d.dimHash = xxh.Sum64() -+ -+ d.constLabelPairs = make([]*dto.LabelPair, 0, len(constLabels)) -+ for n, v := range constLabels { -+ d.constLabelPairs = append(d.constLabelPairs, &dto.LabelPair{ -+ Name: proto.String(n), -+ Value: proto.String(v), -+ }) -+ } -+ sort.Sort(internal.LabelPairSorter(d.constLabelPairs)) -+ return d -+} -+ -+// NewInvalidDesc returns an invalid descriptor, i.e. a descriptor with the -+// provided error set. If a collector returning such a descriptor is registered, -+// registration will fail with the provided error. NewInvalidDesc can be used by -+// a Collector to signal inability to describe itself. -+func NewInvalidDesc(err error) *Desc { -+ return &Desc{ -+ err: err, -+ } -+} -+ -+func (d *Desc) String() string { -+ lpStrings := make([]string, 0, len(d.constLabelPairs)) -+ for _, lp := range d.constLabelPairs { -+ lpStrings = append( -+ lpStrings, -+ fmt.Sprintf("%s=%q", lp.GetName(), lp.GetValue()), -+ ) -+ } -+ return fmt.Sprintf( -+ "Desc{fqName: %q, help: %q, constLabels: {%s}, variableLabels: %v}", -+ d.fqName, -+ d.help, -+ strings.Join(lpStrings, ","), -+ d.variableLabels, -+ ) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/doc.go b/vendor/github.com/prometheus/client_golang/prometheus/doc.go -new file mode 100755 -index 0000000..811072c ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/doc.go -@@ -0,0 +1,210 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+// Package prometheus is the core instrumentation package. It provides metrics -+// primitives to instrument code for monitoring. It also offers a registry for -+// metrics. Sub-packages allow to expose the registered metrics via HTTP -+// (package promhttp) or push them to a Pushgateway (package push). There is -+// also a sub-package promauto, which provides metrics constructors with -+// automatic registration. -+// -+// All exported functions and methods are safe to be used concurrently unless -+// specified otherwise. -+// -+// # A Basic Example -+// -+// As a starting point, a very basic usage example: -+// -+// package main -+// -+// import ( -+// "log" -+// "net/http" -+// -+// "github.com/prometheus/client_golang/prometheus" -+// "github.com/prometheus/client_golang/prometheus/promhttp" -+// ) -+// -+// type metrics struct { -+// cpuTemp prometheus.Gauge -+// hdFailures *prometheus.CounterVec -+// } -+// -+// func NewMetrics(reg prometheus.Registerer) *metrics { -+// m := &metrics{ -+// cpuTemp: prometheus.NewGauge(prometheus.GaugeOpts{ -+// Name: "cpu_temperature_celsius", -+// Help: "Current temperature of the CPU.", -+// }), -+// hdFailures: prometheus.NewCounterVec( -+// prometheus.CounterOpts{ -+// Name: "hd_errors_total", -+// Help: "Number of hard-disk errors.", -+// }, -+// []string{"device"}, -+// ), -+// } -+// reg.MustRegister(m.cpuTemp) -+// reg.MustRegister(m.hdFailures) -+// return m -+// } -+// -+// func main() { -+// // Create a non-global registry. -+// reg := prometheus.NewRegistry() -+// -+// // Create new metrics and register them using the custom registry. -+// m := NewMetrics(reg) -+// // Set values for the new created metrics. -+// m.cpuTemp.Set(65.3) -+// m.hdFailures.With(prometheus.Labels{"device":"/dev/sda"}).Inc() -+// -+// // Expose metrics and custom registry via an HTTP server -+// // using the HandleFor function. "/metrics" is the usual endpoint for that. -+// http.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{Registry: reg})) -+// log.Fatal(http.ListenAndServe(":8080", nil)) -+// } -+// -+// This is a complete program that exports two metrics, a Gauge and a Counter, -+// the latter with a label attached to turn it into a (one-dimensional) vector. -+// It register the metrics using a custom registry and exposes them via an HTTP server -+// on the /metrics endpoint. -+// -+// # Metrics -+// -+// The number of exported identifiers in this package might appear a bit -+// overwhelming. However, in addition to the basic plumbing shown in the example -+// above, you only need to understand the different metric types and their -+// vector versions for basic usage. Furthermore, if you are not concerned with -+// fine-grained control of when and how to register metrics with the registry, -+// have a look at the promauto package, which will effectively allow you to -+// ignore registration altogether in simple cases. -+// -+// Above, you have already touched the Counter and the Gauge. There are two more -+// advanced metric types: the Summary and Histogram. A more thorough description -+// of those four metric types can be found in the Prometheus docs: -+// https://prometheus.io/docs/concepts/metric_types/ -+// -+// In addition to the fundamental metric types Gauge, Counter, Summary, and -+// Histogram, a very important part of the Prometheus data model is the -+// partitioning of samples along dimensions called labels, which results in -+// metric vectors. The fundamental types are GaugeVec, CounterVec, SummaryVec, -+// and HistogramVec. -+// -+// While only the fundamental metric types implement the Metric interface, both -+// the metrics and their vector versions implement the Collector interface. A -+// Collector manages the collection of a number of Metrics, but for convenience, -+// a Metric can also “collect itself”. Note that Gauge, Counter, Summary, and -+// Histogram are interfaces themselves while GaugeVec, CounterVec, SummaryVec, -+// and HistogramVec are not. -+// -+// To create instances of Metrics and their vector versions, you need a suitable -+// …Opts struct, i.e. GaugeOpts, CounterOpts, SummaryOpts, or HistogramOpts. -+// -+// # Custom Collectors and constant Metrics -+// -+// While you could create your own implementations of Metric, most likely you -+// will only ever implement the Collector interface on your own. At a first -+// glance, a custom Collector seems handy to bundle Metrics for common -+// registration (with the prime example of the different metric vectors above, -+// which bundle all the metrics of the same name but with different labels). -+// -+// There is a more involved use case, too: If you already have metrics -+// available, created outside of the Prometheus context, you don't need the -+// interface of the various Metric types. You essentially want to mirror the -+// existing numbers into Prometheus Metrics during collection. An own -+// implementation of the Collector interface is perfect for that. You can create -+// Metric instances “on the fly” using NewConstMetric, NewConstHistogram, and -+// NewConstSummary (and their respective Must… versions). NewConstMetric is used -+// for all metric types with just a float64 as their value: Counter, Gauge, and -+// a special “type” called Untyped. Use the latter if you are not sure if the -+// mirrored metric is a Counter or a Gauge. Creation of the Metric instance -+// happens in the Collect method. The Describe method has to return separate -+// Desc instances, representative of the “throw-away” metrics to be created -+// later. NewDesc comes in handy to create those Desc instances. Alternatively, -+// you could return no Desc at all, which will mark the Collector “unchecked”. -+// No checks are performed at registration time, but metric consistency will -+// still be ensured at scrape time, i.e. any inconsistencies will lead to scrape -+// errors. Thus, with unchecked Collectors, the responsibility to not collect -+// metrics that lead to inconsistencies in the total scrape result lies with the -+// implementer of the Collector. While this is not a desirable state, it is -+// sometimes necessary. The typical use case is a situation where the exact -+// metrics to be returned by a Collector cannot be predicted at registration -+// time, but the implementer has sufficient knowledge of the whole system to -+// guarantee metric consistency. -+// -+// The Collector example illustrates the use case. You can also look at the -+// source code of the processCollector (mirroring process metrics), the -+// goCollector (mirroring Go metrics), or the expvarCollector (mirroring expvar -+// metrics) as examples that are used in this package itself. -+// -+// If you just need to call a function to get a single float value to collect as -+// a metric, GaugeFunc, CounterFunc, or UntypedFunc might be interesting -+// shortcuts. -+// -+// # Advanced Uses of the Registry -+// -+// While MustRegister is the by far most common way of registering a Collector, -+// sometimes you might want to handle the errors the registration might cause. -+// As suggested by the name, MustRegister panics if an error occurs. With the -+// Register function, the error is returned and can be handled. -+// -+// An error is returned if the registered Collector is incompatible or -+// inconsistent with already registered metrics. The registry aims for -+// consistency of the collected metrics according to the Prometheus data model. -+// Inconsistencies are ideally detected at registration time, not at collect -+// time. The former will usually be detected at start-up time of a program, -+// while the latter will only happen at scrape time, possibly not even on the -+// first scrape if the inconsistency only becomes relevant later. That is the -+// main reason why a Collector and a Metric have to describe themselves to the -+// registry. -+// -+// So far, everything we did operated on the so-called default registry, as it -+// can be found in the global DefaultRegisterer variable. With NewRegistry, you -+// can create a custom registry, or you can even implement the Registerer or -+// Gatherer interfaces yourself. The methods Register and Unregister work in the -+// same way on a custom registry as the global functions Register and Unregister -+// on the default registry. -+// -+// There are a number of uses for custom registries: You can use registries with -+// special properties, see NewPedanticRegistry. You can avoid global state, as -+// it is imposed by the DefaultRegisterer. You can use multiple registries at -+// the same time to expose different metrics in different ways. You can use -+// separate registries for testing purposes. -+// -+// Also note that the DefaultRegisterer comes registered with a Collector for Go -+// runtime metrics (via NewGoCollector) and a Collector for process metrics (via -+// NewProcessCollector). With a custom registry, you are in control and decide -+// yourself about the Collectors to register. -+// -+// # HTTP Exposition -+// -+// The Registry implements the Gatherer interface. The caller of the Gather -+// method can then expose the gathered metrics in some way. Usually, the metrics -+// are served via HTTP on the /metrics endpoint. That's happening in the example -+// above. The tools to expose metrics via HTTP are in the promhttp sub-package. -+// -+// # Pushing to the Pushgateway -+// -+// Function for pushing to the Pushgateway can be found in the push sub-package. -+// -+// # Graphite Bridge -+// -+// Functions and examples to push metrics from a Gatherer to Graphite can be -+// found in the graphite sub-package. -+// -+// # Other Means of Exposition -+// -+// More ways of exposing metrics can easily be added by following the approaches -+// of the existing implementations. -+package prometheus -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go -new file mode 100755 -index 0000000..c41ab37 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go -@@ -0,0 +1,86 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "encoding/json" -+ "expvar" -+) -+ -+type expvarCollector struct { -+ exports map[string]*Desc -+} -+ -+// NewExpvarCollector is the obsolete version of collectors.NewExpvarCollector. -+// See there for documentation. -+// -+// Deprecated: Use collectors.NewExpvarCollector instead. -+func NewExpvarCollector(exports map[string]*Desc) Collector { -+ return &expvarCollector{ -+ exports: exports, -+ } -+} -+ -+// Describe implements Collector. -+func (e *expvarCollector) Describe(ch chan<- *Desc) { -+ for _, desc := range e.exports { -+ ch <- desc -+ } -+} -+ -+// Collect implements Collector. -+func (e *expvarCollector) Collect(ch chan<- Metric) { -+ for name, desc := range e.exports { -+ var m Metric -+ expVar := expvar.Get(name) -+ if expVar == nil { -+ continue -+ } -+ var v interface{} -+ labels := make([]string, len(desc.variableLabels)) -+ if err := json.Unmarshal([]byte(expVar.String()), &v); err != nil { -+ ch <- NewInvalidMetric(desc, err) -+ continue -+ } -+ var processValue func(v interface{}, i int) -+ processValue = func(v interface{}, i int) { -+ if i >= len(labels) { -+ copiedLabels := append(make([]string, 0, len(labels)), labels...) -+ switch v := v.(type) { -+ case float64: -+ m = MustNewConstMetric(desc, UntypedValue, v, copiedLabels...) -+ case bool: -+ if v { -+ m = MustNewConstMetric(desc, UntypedValue, 1, copiedLabels...) -+ } else { -+ m = MustNewConstMetric(desc, UntypedValue, 0, copiedLabels...) -+ } -+ default: -+ return -+ } -+ ch <- m -+ return -+ } -+ vm, ok := v.(map[string]interface{}) -+ if !ok { -+ return -+ } -+ for lv, val := range vm { -+ labels[i] = lv -+ processValue(val, i+1) -+ } -+ } -+ processValue(v, 0) -+ } -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/fnv.go b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go -new file mode 100755 -index 0000000..3d383a7 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go -@@ -0,0 +1,42 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+// Inline and byte-free variant of hash/fnv's fnv64a. -+ -+const ( -+ offset64 = 14695981039346656037 -+ prime64 = 1099511628211 -+) -+ -+// hashNew initializies a new fnv64a hash value. -+func hashNew() uint64 { -+ return offset64 -+} -+ -+// hashAdd adds a string to a fnv64a hash value, returning the updated hash. -+func hashAdd(h uint64, s string) uint64 { -+ for i := 0; i < len(s); i++ { -+ h ^= uint64(s[i]) -+ h *= prime64 -+ } -+ return h -+} -+ -+// hashAddByte adds a byte to a fnv64a hash value, returning the updated hash. -+func hashAddByte(h uint64, b byte) uint64 { -+ h ^= uint64(b) -+ h *= prime64 -+ return h -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go -new file mode 100755 -index 0000000..21271a5 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go -@@ -0,0 +1,291 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "math" -+ "sync/atomic" -+ "time" -+ -+ dto "github.com/prometheus/client_model/go" -+) -+ -+// Gauge is a Metric that represents a single numerical value that can -+// arbitrarily go up and down. -+// -+// A Gauge is typically used for measured values like temperatures or current -+// memory usage, but also "counts" that can go up and down, like the number of -+// running goroutines. -+// -+// To create Gauge instances, use NewGauge. -+type Gauge interface { -+ Metric -+ Collector -+ -+ // Set sets the Gauge to an arbitrary value. -+ Set(float64) -+ // Inc increments the Gauge by 1. Use Add to increment it by arbitrary -+ // values. -+ Inc() -+ // Dec decrements the Gauge by 1. Use Sub to decrement it by arbitrary -+ // values. -+ Dec() -+ // Add adds the given value to the Gauge. (The value can be negative, -+ // resulting in a decrease of the Gauge.) -+ Add(float64) -+ // Sub subtracts the given value from the Gauge. (The value can be -+ // negative, resulting in an increase of the Gauge.) -+ Sub(float64) -+ -+ // SetToCurrentTime sets the Gauge to the current Unix time in seconds. -+ SetToCurrentTime() -+} -+ -+// GaugeOpts is an alias for Opts. See there for doc comments. -+type GaugeOpts Opts -+ -+// NewGauge creates a new Gauge based on the provided GaugeOpts. -+// -+// The returned implementation is optimized for a fast Set method. If you have a -+// choice for managing the value of a Gauge via Set vs. Inc/Dec/Add/Sub, pick -+// the former. For example, the Inc method of the returned Gauge is slower than -+// the Inc method of a Counter returned by NewCounter. This matches the typical -+// scenarios for Gauges and Counters, where the former tends to be Set-heavy and -+// the latter Inc-heavy. -+func NewGauge(opts GaugeOpts) Gauge { -+ desc := NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ nil, -+ opts.ConstLabels, -+ ) -+ result := &gauge{desc: desc, labelPairs: desc.constLabelPairs} -+ result.init(result) // Init self-collection. -+ return result -+} -+ -+type gauge struct { -+ // valBits contains the bits of the represented float64 value. It has -+ // to go first in the struct to guarantee alignment for atomic -+ // operations. http://golang.org/pkg/sync/atomic/#pkg-note-BUG -+ valBits uint64 -+ -+ selfCollector -+ -+ desc *Desc -+ labelPairs []*dto.LabelPair -+} -+ -+func (g *gauge) Desc() *Desc { -+ return g.desc -+} -+ -+func (g *gauge) Set(val float64) { -+ atomic.StoreUint64(&g.valBits, math.Float64bits(val)) -+} -+ -+func (g *gauge) SetToCurrentTime() { -+ g.Set(float64(time.Now().UnixNano()) / 1e9) -+} -+ -+func (g *gauge) Inc() { -+ g.Add(1) -+} -+ -+func (g *gauge) Dec() { -+ g.Add(-1) -+} -+ -+func (g *gauge) Add(val float64) { -+ for { -+ oldBits := atomic.LoadUint64(&g.valBits) -+ newBits := math.Float64bits(math.Float64frombits(oldBits) + val) -+ if atomic.CompareAndSwapUint64(&g.valBits, oldBits, newBits) { -+ return -+ } -+ } -+} -+ -+func (g *gauge) Sub(val float64) { -+ g.Add(val * -1) -+} -+ -+func (g *gauge) Write(out *dto.Metric) error { -+ val := math.Float64frombits(atomic.LoadUint64(&g.valBits)) -+ return populateMetric(GaugeValue, val, g.labelPairs, nil, out) -+} -+ -+// GaugeVec is a Collector that bundles a set of Gauges that all share the same -+// Desc, but have different values for their variable labels. This is used if -+// you want to count the same thing partitioned by various dimensions -+// (e.g. number of operations queued, partitioned by user and operation -+// type). Create instances with NewGaugeVec. -+type GaugeVec struct { -+ *MetricVec -+} -+ -+// NewGaugeVec creates a new GaugeVec based on the provided GaugeOpts and -+// partitioned by the given label names. -+func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec { -+ desc := NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ labelNames, -+ opts.ConstLabels, -+ ) -+ return &GaugeVec{ -+ MetricVec: NewMetricVec(desc, func(lvs ...string) Metric { -+ if len(lvs) != len(desc.variableLabels) { -+ panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs)) -+ } -+ result := &gauge{desc: desc, labelPairs: MakeLabelPairs(desc, lvs)} -+ result.init(result) // Init self-collection. -+ return result -+ }), -+ } -+} -+ -+// GetMetricWithLabelValues returns the Gauge for the given slice of label -+// values (same order as the variable labels in Desc). If that combination of -+// label values is accessed for the first time, a new Gauge is created. -+// -+// It is possible to call this method without using the returned Gauge to only -+// create the new Gauge but leave it at its starting value 0. See also the -+// SummaryVec example. -+// -+// Keeping the Gauge for later use is possible (and should be considered if -+// performance is critical), but keep in mind that Reset, DeleteLabelValues and -+// Delete can be used to delete the Gauge from the GaugeVec. In that case, the -+// Gauge will still exist, but it will not be exported anymore, even if a -+// Gauge with the same label values is created later. See also the CounterVec -+// example. -+// -+// An error is returned if the number of label values is not the same as the -+// number of variable labels in Desc (minus any curried labels). -+// -+// Note that for more than one label value, this method is prone to mistakes -+// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -+// an alternative to avoid that type of mistake. For higher label numbers, the -+// latter has a much more readable (albeit more verbose) syntax, but it comes -+// with a performance overhead (for creating and processing the Labels map). -+func (v *GaugeVec) GetMetricWithLabelValues(lvs ...string) (Gauge, error) { -+ metric, err := v.MetricVec.GetMetricWithLabelValues(lvs...) -+ if metric != nil { -+ return metric.(Gauge), err -+ } -+ return nil, err -+} -+ -+// GetMetricWith returns the Gauge for the given Labels map (the label names -+// must match those of the variable labels in Desc). If that label map is -+// accessed for the first time, a new Gauge is created. Implications of -+// creating a Gauge without using it and keeping the Gauge for later use are -+// the same as for GetMetricWithLabelValues. -+// -+// An error is returned if the number and names of the Labels are inconsistent -+// with those of the variable labels in Desc (minus any curried labels). -+// -+// This method is used for the same purpose as -+// GetMetricWithLabelValues(...string). See there for pros and cons of the two -+// methods. -+func (v *GaugeVec) GetMetricWith(labels Labels) (Gauge, error) { -+ metric, err := v.MetricVec.GetMetricWith(labels) -+ if metric != nil { -+ return metric.(Gauge), err -+ } -+ return nil, err -+} -+ -+// WithLabelValues works as GetMetricWithLabelValues, but panics where -+// GetMetricWithLabelValues would have returned an error. Not returning an -+// error allows shortcuts like -+// -+// myVec.WithLabelValues("404", "GET").Add(42) -+func (v *GaugeVec) WithLabelValues(lvs ...string) Gauge { -+ g, err := v.GetMetricWithLabelValues(lvs...) -+ if err != nil { -+ panic(err) -+ } -+ return g -+} -+ -+// With works as GetMetricWith, but panics where GetMetricWithLabels would have -+// returned an error. Not returning an error allows shortcuts like -+// -+// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Add(42) -+func (v *GaugeVec) With(labels Labels) Gauge { -+ g, err := v.GetMetricWith(labels) -+ if err != nil { -+ panic(err) -+ } -+ return g -+} -+ -+// CurryWith returns a vector curried with the provided labels, i.e. the -+// returned vector has those labels pre-set for all labeled operations performed -+// on it. The cardinality of the curried vector is reduced accordingly. The -+// order of the remaining labels stays the same (just with the curried labels -+// taken out of the sequence – which is relevant for the -+// (GetMetric)WithLabelValues methods). It is possible to curry a curried -+// vector, but only with labels not yet used for currying before. -+// -+// The metrics contained in the GaugeVec are shared between the curried and -+// uncurried vectors. They are just accessed differently. Curried and uncurried -+// vectors behave identically in terms of collection. Only one must be -+// registered with a given registry (usually the uncurried version). The Reset -+// method deletes all metrics, even if called on a curried vector. -+func (v *GaugeVec) CurryWith(labels Labels) (*GaugeVec, error) { -+ vec, err := v.MetricVec.CurryWith(labels) -+ if vec != nil { -+ return &GaugeVec{vec}, err -+ } -+ return nil, err -+} -+ -+// MustCurryWith works as CurryWith but panics where CurryWith would have -+// returned an error. -+func (v *GaugeVec) MustCurryWith(labels Labels) *GaugeVec { -+ vec, err := v.CurryWith(labels) -+ if err != nil { -+ panic(err) -+ } -+ return vec -+} -+ -+// GaugeFunc is a Gauge whose value is determined at collect time by calling a -+// provided function. -+// -+// To create GaugeFunc instances, use NewGaugeFunc. -+type GaugeFunc interface { -+ Metric -+ Collector -+} -+ -+// NewGaugeFunc creates a new GaugeFunc based on the provided GaugeOpts. The -+// value reported is determined by calling the given function from within the -+// Write method. Take into account that metric collection may happen -+// concurrently. Therefore, it must be safe to call the provided function -+// concurrently. -+// -+// NewGaugeFunc is a good way to create an “info” style metric with a constant -+// value of 1. Example: -+// https://github.com/prometheus/common/blob/8558a5b7db3c84fa38b4766966059a7bd5bfa2ee/version/info.go#L36-L56 -+func NewGaugeFunc(opts GaugeOpts, function func() float64) GaugeFunc { -+ return newValueFunc(NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ nil, -+ opts.ConstLabels, -+ ), GaugeValue, function) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/get_pid.go b/vendor/github.com/prometheus/client_golang/prometheus/get_pid.go -new file mode 100755 -index 0000000..614fd61 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/get_pid.go -@@ -0,0 +1,26 @@ -+// Copyright 2015 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build !js || wasm -+// +build !js wasm -+ -+package prometheus -+ -+import "os" -+ -+func getPIDFn() func() (int, error) { -+ pid := os.Getpid() -+ return func() (int, error) { -+ return pid, nil -+ } -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/get_pid_gopherjs.go b/vendor/github.com/prometheus/client_golang/prometheus/get_pid_gopherjs.go -new file mode 100755 -index 0000000..eaf8059 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/get_pid_gopherjs.go -@@ -0,0 +1,23 @@ -+// Copyright 2015 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build js && !wasm -+// +build js,!wasm -+ -+package prometheus -+ -+func getPIDFn() func() (int, error) { -+ return func() (int, error) { -+ return 1, nil -+ } -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go -new file mode 100755 -index 0000000..ad9a71a ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go -@@ -0,0 +1,281 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "runtime" -+ "runtime/debug" -+ "time" -+) -+ -+// goRuntimeMemStats provides the metrics initially provided by runtime.ReadMemStats. -+// From Go 1.17 those similar (and better) statistics are provided by runtime/metrics, so -+// while eval closure works on runtime.MemStats, the struct from Go 1.17+ is -+// populated using runtime/metrics. -+func goRuntimeMemStats() memStatsMetrics { -+ return memStatsMetrics{ -+ { -+ desc: NewDesc( -+ memstatNamespace("alloc_bytes"), -+ "Number of bytes allocated and still in use.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.Alloc) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("alloc_bytes_total"), -+ "Total number of bytes allocated, even if freed.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.TotalAlloc) }, -+ valType: CounterValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("sys_bytes"), -+ "Number of bytes obtained from system.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.Sys) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("lookups_total"), -+ "Total number of pointer lookups.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.Lookups) }, -+ valType: CounterValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("mallocs_total"), -+ "Total number of mallocs.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.Mallocs) }, -+ valType: CounterValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("frees_total"), -+ "Total number of frees.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.Frees) }, -+ valType: CounterValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("heap_alloc_bytes"), -+ "Number of heap bytes allocated and still in use.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapAlloc) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("heap_sys_bytes"), -+ "Number of heap bytes obtained from system.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapSys) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("heap_idle_bytes"), -+ "Number of heap bytes waiting to be used.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapIdle) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("heap_inuse_bytes"), -+ "Number of heap bytes that are in use.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapInuse) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("heap_released_bytes"), -+ "Number of heap bytes released to OS.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapReleased) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("heap_objects"), -+ "Number of allocated objects.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapObjects) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("stack_inuse_bytes"), -+ "Number of bytes in use by the stack allocator.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackInuse) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("stack_sys_bytes"), -+ "Number of bytes obtained from system for stack allocator.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackSys) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("mspan_inuse_bytes"), -+ "Number of bytes in use by mspan structures.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanInuse) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("mspan_sys_bytes"), -+ "Number of bytes used for mspan structures obtained from system.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanSys) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("mcache_inuse_bytes"), -+ "Number of bytes in use by mcache structures.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheInuse) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("mcache_sys_bytes"), -+ "Number of bytes used for mcache structures obtained from system.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheSys) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("buck_hash_sys_bytes"), -+ "Number of bytes used by the profiling bucket hash table.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.BuckHashSys) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("gc_sys_bytes"), -+ "Number of bytes used for garbage collection system metadata.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.GCSys) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("other_sys_bytes"), -+ "Number of bytes used for other system allocations.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.OtherSys) }, -+ valType: GaugeValue, -+ }, { -+ desc: NewDesc( -+ memstatNamespace("next_gc_bytes"), -+ "Number of heap bytes when next garbage collection will take place.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return float64(ms.NextGC) }, -+ valType: GaugeValue, -+ }, -+ } -+} -+ -+type baseGoCollector struct { -+ goroutinesDesc *Desc -+ threadsDesc *Desc -+ gcDesc *Desc -+ gcLastTimeDesc *Desc -+ goInfoDesc *Desc -+} -+ -+func newBaseGoCollector() baseGoCollector { -+ return baseGoCollector{ -+ goroutinesDesc: NewDesc( -+ "go_goroutines", -+ "Number of goroutines that currently exist.", -+ nil, nil), -+ threadsDesc: NewDesc( -+ "go_threads", -+ "Number of OS threads created.", -+ nil, nil), -+ gcDesc: NewDesc( -+ "go_gc_duration_seconds", -+ "A summary of the pause duration of garbage collection cycles.", -+ nil, nil), -+ gcLastTimeDesc: NewDesc( -+ "go_memstats_last_gc_time_seconds", -+ "Number of seconds since 1970 of last garbage collection.", -+ nil, nil), -+ goInfoDesc: NewDesc( -+ "go_info", -+ "Information about the Go environment.", -+ nil, Labels{"version": runtime.Version()}), -+ } -+} -+ -+// Describe returns all descriptions of the collector. -+func (c *baseGoCollector) Describe(ch chan<- *Desc) { -+ ch <- c.goroutinesDesc -+ ch <- c.threadsDesc -+ ch <- c.gcDesc -+ ch <- c.gcLastTimeDesc -+ ch <- c.goInfoDesc -+} -+ -+// Collect returns the current state of all metrics of the collector. -+func (c *baseGoCollector) Collect(ch chan<- Metric) { -+ ch <- MustNewConstMetric(c.goroutinesDesc, GaugeValue, float64(runtime.NumGoroutine())) -+ -+ n := getRuntimeNumThreads() -+ ch <- MustNewConstMetric(c.threadsDesc, GaugeValue, n) -+ -+ var stats debug.GCStats -+ stats.PauseQuantiles = make([]time.Duration, 5) -+ debug.ReadGCStats(&stats) -+ -+ quantiles := make(map[float64]float64) -+ for idx, pq := range stats.PauseQuantiles[1:] { -+ quantiles[float64(idx+1)/float64(len(stats.PauseQuantiles)-1)] = pq.Seconds() -+ } -+ quantiles[0.0] = stats.PauseQuantiles[0].Seconds() -+ ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), stats.PauseTotal.Seconds(), quantiles) -+ ch <- MustNewConstMetric(c.gcLastTimeDesc, GaugeValue, float64(stats.LastGC.UnixNano())/1e9) -+ ch <- MustNewConstMetric(c.goInfoDesc, GaugeValue, 1) -+} -+ -+func memstatNamespace(s string) string { -+ return "go_memstats_" + s -+} -+ -+// memStatsMetrics provide description, evaluator, runtime/metrics name, and -+// value type for memstat metrics. -+type memStatsMetrics []struct { -+ desc *Desc -+ eval func(*runtime.MemStats) float64 -+ valType ValueType -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go -new file mode 100755 -index 0000000..897a6e9 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go -@@ -0,0 +1,122 @@ -+// Copyright 2021 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build !go1.17 -+// +build !go1.17 -+ -+package prometheus -+ -+import ( -+ "runtime" -+ "sync" -+ "time" -+) -+ -+type goCollector struct { -+ base baseGoCollector -+ -+ // ms... are memstats related. -+ msLast *runtime.MemStats // Previously collected memstats. -+ msLastTimestamp time.Time -+ msMtx sync.Mutex // Protects msLast and msLastTimestamp. -+ msMetrics memStatsMetrics -+ msRead func(*runtime.MemStats) // For mocking in tests. -+ msMaxWait time.Duration // Wait time for fresh memstats. -+ msMaxAge time.Duration // Maximum allowed age of old memstats. -+} -+ -+// NewGoCollector is the obsolete version of collectors.NewGoCollector. -+// See there for documentation. -+// -+// Deprecated: Use collectors.NewGoCollector instead. -+func NewGoCollector() Collector { -+ msMetrics := goRuntimeMemStats() -+ msMetrics = append(msMetrics, struct { -+ desc *Desc -+ eval func(*runtime.MemStats) float64 -+ valType ValueType -+ }{ -+ // This metric is omitted in Go1.17+, see https://github.com/prometheus/client_golang/issues/842#issuecomment-861812034 -+ desc: NewDesc( -+ memstatNamespace("gc_cpu_fraction"), -+ "The fraction of this program's available CPU time used by the GC since the program started.", -+ nil, nil, -+ ), -+ eval: func(ms *runtime.MemStats) float64 { return ms.GCCPUFraction }, -+ valType: GaugeValue, -+ }) -+ return &goCollector{ -+ base: newBaseGoCollector(), -+ msLast: &runtime.MemStats{}, -+ msRead: runtime.ReadMemStats, -+ msMaxWait: time.Second, -+ msMaxAge: 5 * time.Minute, -+ msMetrics: msMetrics, -+ } -+} -+ -+// Describe returns all descriptions of the collector. -+func (c *goCollector) Describe(ch chan<- *Desc) { -+ c.base.Describe(ch) -+ for _, i := range c.msMetrics { -+ ch <- i.desc -+ } -+} -+ -+// Collect returns the current state of all metrics of the collector. -+func (c *goCollector) Collect(ch chan<- Metric) { -+ var ( -+ ms = &runtime.MemStats{} -+ done = make(chan struct{}) -+ ) -+ // Start reading memstats first as it might take a while. -+ go func() { -+ c.msRead(ms) -+ c.msMtx.Lock() -+ c.msLast = ms -+ c.msLastTimestamp = time.Now() -+ c.msMtx.Unlock() -+ close(done) -+ }() -+ -+ // Collect base non-memory metrics. -+ c.base.Collect(ch) -+ -+ timer := time.NewTimer(c.msMaxWait) -+ select { -+ case <-done: // Our own ReadMemStats succeeded in time. Use it. -+ timer.Stop() // Important for high collection frequencies to not pile up timers. -+ c.msCollect(ch, ms) -+ return -+ case <-timer.C: // Time out, use last memstats if possible. Continue below. -+ } -+ c.msMtx.Lock() -+ if time.Since(c.msLastTimestamp) < c.msMaxAge { -+ // Last memstats are recent enough. Collect from them under the lock. -+ c.msCollect(ch, c.msLast) -+ c.msMtx.Unlock() -+ return -+ } -+ // If we are here, the last memstats are too old or don't exist. We have -+ // to wait until our own ReadMemStats finally completes. For that to -+ // happen, we have to release the lock. -+ c.msMtx.Unlock() -+ <-done -+ c.msCollect(ch, ms) -+} -+ -+func (c *goCollector) msCollect(ch chan<- Metric, ms *runtime.MemStats) { -+ for _, i := range c.msMetrics { -+ ch <- MustNewConstMetric(i.desc, i.valType, i.eval(ms)) -+ } -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go -new file mode 100755 -index 0000000..3a2d55e ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go -@@ -0,0 +1,568 @@ -+// Copyright 2021 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build go1.17 -+// +build go1.17 -+ -+package prometheus -+ -+import ( -+ "math" -+ "runtime" -+ "runtime/metrics" -+ "strings" -+ "sync" -+ -+ //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. -+ "github.com/golang/protobuf/proto" -+ dto "github.com/prometheus/client_model/go" -+ -+ "github.com/prometheus/client_golang/prometheus/internal" -+) -+ -+const ( -+ // constants for strings referenced more than once. -+ goGCHeapTinyAllocsObjects = "/gc/heap/tiny/allocs:objects" -+ goGCHeapAllocsObjects = "/gc/heap/allocs:objects" -+ goGCHeapFreesObjects = "/gc/heap/frees:objects" -+ goGCHeapFreesBytes = "/gc/heap/frees:bytes" -+ goGCHeapAllocsBytes = "/gc/heap/allocs:bytes" -+ goGCHeapObjects = "/gc/heap/objects:objects" -+ goGCHeapGoalBytes = "/gc/heap/goal:bytes" -+ goMemoryClassesTotalBytes = "/memory/classes/total:bytes" -+ goMemoryClassesHeapObjectsBytes = "/memory/classes/heap/objects:bytes" -+ goMemoryClassesHeapUnusedBytes = "/memory/classes/heap/unused:bytes" -+ goMemoryClassesHeapReleasedBytes = "/memory/classes/heap/released:bytes" -+ goMemoryClassesHeapFreeBytes = "/memory/classes/heap/free:bytes" -+ goMemoryClassesHeapStacksBytes = "/memory/classes/heap/stacks:bytes" -+ goMemoryClassesOSStacksBytes = "/memory/classes/os-stacks:bytes" -+ goMemoryClassesMetadataMSpanInuseBytes = "/memory/classes/metadata/mspan/inuse:bytes" -+ goMemoryClassesMetadataMSPanFreeBytes = "/memory/classes/metadata/mspan/free:bytes" -+ goMemoryClassesMetadataMCacheInuseBytes = "/memory/classes/metadata/mcache/inuse:bytes" -+ goMemoryClassesMetadataMCacheFreeBytes = "/memory/classes/metadata/mcache/free:bytes" -+ goMemoryClassesProfilingBucketsBytes = "/memory/classes/profiling/buckets:bytes" -+ goMemoryClassesMetadataOtherBytes = "/memory/classes/metadata/other:bytes" -+ goMemoryClassesOtherBytes = "/memory/classes/other:bytes" -+) -+ -+// rmNamesForMemStatsMetrics represents runtime/metrics names required to populate goRuntimeMemStats from like logic. -+var rmNamesForMemStatsMetrics = []string{ -+ goGCHeapTinyAllocsObjects, -+ goGCHeapAllocsObjects, -+ goGCHeapFreesObjects, -+ goGCHeapAllocsBytes, -+ goGCHeapObjects, -+ goGCHeapGoalBytes, -+ goMemoryClassesTotalBytes, -+ goMemoryClassesHeapObjectsBytes, -+ goMemoryClassesHeapUnusedBytes, -+ goMemoryClassesHeapReleasedBytes, -+ goMemoryClassesHeapFreeBytes, -+ goMemoryClassesHeapStacksBytes, -+ goMemoryClassesOSStacksBytes, -+ goMemoryClassesMetadataMSpanInuseBytes, -+ goMemoryClassesMetadataMSPanFreeBytes, -+ goMemoryClassesMetadataMCacheInuseBytes, -+ goMemoryClassesMetadataMCacheFreeBytes, -+ goMemoryClassesProfilingBucketsBytes, -+ goMemoryClassesMetadataOtherBytes, -+ goMemoryClassesOtherBytes, -+} -+ -+func bestEffortLookupRM(lookup []string) []metrics.Description { -+ ret := make([]metrics.Description, 0, len(lookup)) -+ for _, rm := range metrics.All() { -+ for _, m := range lookup { -+ if m == rm.Name { -+ ret = append(ret, rm) -+ } -+ } -+ } -+ return ret -+} -+ -+type goCollector struct { -+ base baseGoCollector -+ -+ // mu protects updates to all fields ensuring a consistent -+ // snapshot is always produced by Collect. -+ mu sync.Mutex -+ -+ // Contains all samples that has to retrieved from runtime/metrics (not all of them will be exposed). -+ sampleBuf []metrics.Sample -+ // sampleMap allows lookup for MemStats metrics and runtime/metrics histograms for exact sums. -+ sampleMap map[string]*metrics.Sample -+ -+ // rmExposedMetrics represents all runtime/metrics package metrics -+ // that were configured to be exposed. -+ rmExposedMetrics []collectorMetric -+ rmExactSumMapForHist map[string]string -+ -+ // With Go 1.17, the runtime/metrics package was introduced. -+ // From that point on, metric names produced by the runtime/metrics -+ // package could be generated from runtime/metrics names. However, -+ // these differ from the old names for the same values. -+ // -+ // This field exists to export the same values under the old names -+ // as well. -+ msMetrics memStatsMetrics -+ msMetricsEnabled bool -+} -+ -+type rmMetricDesc struct { -+ metrics.Description -+} -+ -+func matchRuntimeMetricsRules(rules []internal.GoCollectorRule) []rmMetricDesc { -+ var descs []rmMetricDesc -+ for _, d := range metrics.All() { -+ var ( -+ deny = true -+ desc rmMetricDesc -+ ) -+ -+ for _, r := range rules { -+ if !r.Matcher.MatchString(d.Name) { -+ continue -+ } -+ deny = r.Deny -+ } -+ if deny { -+ continue -+ } -+ -+ desc.Description = d -+ descs = append(descs, desc) -+ } -+ return descs -+} -+ -+func defaultGoCollectorOptions() internal.GoCollectorOptions { -+ return internal.GoCollectorOptions{ -+ RuntimeMetricSumForHist: map[string]string{ -+ "/gc/heap/allocs-by-size:bytes": goGCHeapAllocsBytes, -+ "/gc/heap/frees-by-size:bytes": goGCHeapFreesBytes, -+ }, -+ RuntimeMetricRules: []internal.GoCollectorRule{ -+ //{Matcher: regexp.MustCompile("")}, -+ }, -+ } -+} -+ -+// NewGoCollector is the obsolete version of collectors.NewGoCollector. -+// See there for documentation. -+// -+// Deprecated: Use collectors.NewGoCollector instead. -+func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { -+ opt := defaultGoCollectorOptions() -+ for _, o := range opts { -+ o(&opt) -+ } -+ -+ exposedDescriptions := matchRuntimeMetricsRules(opt.RuntimeMetricRules) -+ -+ // Collect all histogram samples so that we can get their buckets. -+ // The API guarantees that the buckets are always fixed for the lifetime -+ // of the process. -+ var histograms []metrics.Sample -+ for _, d := range exposedDescriptions { -+ if d.Kind == metrics.KindFloat64Histogram { -+ histograms = append(histograms, metrics.Sample{Name: d.Name}) -+ } -+ } -+ -+ if len(histograms) > 0 { -+ metrics.Read(histograms) -+ } -+ -+ bucketsMap := make(map[string][]float64) -+ for i := range histograms { -+ bucketsMap[histograms[i].Name] = histograms[i].Value.Float64Histogram().Buckets -+ } -+ -+ // Generate a collector for each exposed runtime/metrics metric. -+ metricSet := make([]collectorMetric, 0, len(exposedDescriptions)) -+ // SampleBuf is used for reading from runtime/metrics. -+ // We are assuming the largest case to have stable pointers for sampleMap purposes. -+ sampleBuf := make([]metrics.Sample, 0, len(exposedDescriptions)+len(opt.RuntimeMetricSumForHist)+len(rmNamesForMemStatsMetrics)) -+ sampleMap := make(map[string]*metrics.Sample, len(exposedDescriptions)) -+ for _, d := range exposedDescriptions { -+ namespace, subsystem, name, ok := internal.RuntimeMetricsToProm(&d.Description) -+ if !ok { -+ // Just ignore this metric; we can't do anything with it here. -+ // If a user decides to use the latest version of Go, we don't want -+ // to fail here. This condition is tested in TestExpectedRuntimeMetrics. -+ continue -+ } -+ -+ sampleBuf = append(sampleBuf, metrics.Sample{Name: d.Name}) -+ sampleMap[d.Name] = &sampleBuf[len(sampleBuf)-1] -+ -+ var m collectorMetric -+ if d.Kind == metrics.KindFloat64Histogram { -+ _, hasSum := opt.RuntimeMetricSumForHist[d.Name] -+ unit := d.Name[strings.IndexRune(d.Name, ':')+1:] -+ m = newBatchHistogram( -+ NewDesc( -+ BuildFQName(namespace, subsystem, name), -+ d.Description.Description, -+ nil, -+ nil, -+ ), -+ internal.RuntimeMetricsBucketsForUnit(bucketsMap[d.Name], unit), -+ hasSum, -+ ) -+ } else if d.Cumulative { -+ m = NewCounter(CounterOpts{ -+ Namespace: namespace, -+ Subsystem: subsystem, -+ Name: name, -+ Help: d.Description.Description, -+ }, -+ ) -+ } else { -+ m = NewGauge(GaugeOpts{ -+ Namespace: namespace, -+ Subsystem: subsystem, -+ Name: name, -+ Help: d.Description.Description, -+ }) -+ } -+ metricSet = append(metricSet, m) -+ } -+ -+ // Add exact sum metrics to sampleBuf if not added before. -+ for _, h := range histograms { -+ sumMetric, ok := opt.RuntimeMetricSumForHist[h.Name] -+ if !ok { -+ continue -+ } -+ -+ if _, ok := sampleMap[sumMetric]; ok { -+ continue -+ } -+ sampleBuf = append(sampleBuf, metrics.Sample{Name: sumMetric}) -+ sampleMap[sumMetric] = &sampleBuf[len(sampleBuf)-1] -+ } -+ -+ var ( -+ msMetrics memStatsMetrics -+ msDescriptions []metrics.Description -+ ) -+ -+ if !opt.DisableMemStatsLikeMetrics { -+ msMetrics = goRuntimeMemStats() -+ msDescriptions = bestEffortLookupRM(rmNamesForMemStatsMetrics) -+ -+ // Check if metric was not exposed before and if not, add to sampleBuf. -+ for _, mdDesc := range msDescriptions { -+ if _, ok := sampleMap[mdDesc.Name]; ok { -+ continue -+ } -+ sampleBuf = append(sampleBuf, metrics.Sample{Name: mdDesc.Name}) -+ sampleMap[mdDesc.Name] = &sampleBuf[len(sampleBuf)-1] -+ } -+ } -+ -+ return &goCollector{ -+ base: newBaseGoCollector(), -+ sampleBuf: sampleBuf, -+ sampleMap: sampleMap, -+ rmExposedMetrics: metricSet, -+ rmExactSumMapForHist: opt.RuntimeMetricSumForHist, -+ msMetrics: msMetrics, -+ msMetricsEnabled: !opt.DisableMemStatsLikeMetrics, -+ } -+} -+ -+// Describe returns all descriptions of the collector. -+func (c *goCollector) Describe(ch chan<- *Desc) { -+ c.base.Describe(ch) -+ for _, i := range c.msMetrics { -+ ch <- i.desc -+ } -+ for _, m := range c.rmExposedMetrics { -+ ch <- m.Desc() -+ } -+} -+ -+// Collect returns the current state of all metrics of the collector. -+func (c *goCollector) Collect(ch chan<- Metric) { -+ // Collect base non-memory metrics. -+ c.base.Collect(ch) -+ -+ if len(c.sampleBuf) == 0 { -+ return -+ } -+ -+ // Collect must be thread-safe, so prevent concurrent use of -+ // sampleBuf elements. Just read into sampleBuf but write all the data -+ // we get into our Metrics or MemStats. -+ // -+ // This lock also ensures that the Metrics we send out are all from -+ // the same updates, ensuring their mutual consistency insofar as -+ // is guaranteed by the runtime/metrics package. -+ // -+ // N.B. This locking is heavy-handed, but Collect is expected to be called -+ // relatively infrequently. Also the core operation here, metrics.Read, -+ // is fast (O(tens of microseconds)) so contention should certainly be -+ // low, though channel operations and any allocations may add to that. -+ c.mu.Lock() -+ defer c.mu.Unlock() -+ -+ // Populate runtime/metrics sample buffer. -+ metrics.Read(c.sampleBuf) -+ -+ // Collect all our runtime/metrics user chose to expose from sampleBuf (if any). -+ for i, metric := range c.rmExposedMetrics { -+ // We created samples for exposed metrics first in order, so indexes match. -+ sample := c.sampleBuf[i] -+ -+ // N.B. switch on concrete type because it's significantly more efficient -+ // than checking for the Counter and Gauge interface implementations. In -+ // this case, we control all the types here. -+ switch m := metric.(type) { -+ case *counter: -+ // Guard against decreases. This should never happen, but a failure -+ // to do so will result in a panic, which is a harsh consequence for -+ // a metrics collection bug. -+ v0, v1 := m.get(), unwrapScalarRMValue(sample.Value) -+ if v1 > v0 { -+ m.Add(unwrapScalarRMValue(sample.Value) - m.get()) -+ } -+ m.Collect(ch) -+ case *gauge: -+ m.Set(unwrapScalarRMValue(sample.Value)) -+ m.Collect(ch) -+ case *batchHistogram: -+ m.update(sample.Value.Float64Histogram(), c.exactSumFor(sample.Name)) -+ m.Collect(ch) -+ default: -+ panic("unexpected metric type") -+ } -+ } -+ -+ if c.msMetricsEnabled { -+ // ms is a dummy MemStats that we populate ourselves so that we can -+ // populate the old metrics from it if goMemStatsCollection is enabled. -+ var ms runtime.MemStats -+ memStatsFromRM(&ms, c.sampleMap) -+ for _, i := range c.msMetrics { -+ ch <- MustNewConstMetric(i.desc, i.valType, i.eval(&ms)) -+ } -+ } -+} -+ -+// unwrapScalarRMValue unwraps a runtime/metrics value that is assumed -+// to be scalar and returns the equivalent float64 value. Panics if the -+// value is not scalar. -+func unwrapScalarRMValue(v metrics.Value) float64 { -+ switch v.Kind() { -+ case metrics.KindUint64: -+ return float64(v.Uint64()) -+ case metrics.KindFloat64: -+ return v.Float64() -+ case metrics.KindBad: -+ // Unsupported metric. -+ // -+ // This should never happen because we always populate our metric -+ // set from the runtime/metrics package. -+ panic("unexpected unsupported metric") -+ default: -+ // Unsupported metric kind. -+ // -+ // This should never happen because we check for this during initialization -+ // and flag and filter metrics whose kinds we don't understand. -+ panic("unexpected unsupported metric kind") -+ } -+} -+ -+// exactSumFor takes a runtime/metrics metric name (that is assumed to -+// be of kind KindFloat64Histogram) and returns its exact sum and whether -+// its exact sum exists. -+// -+// The runtime/metrics API for histograms doesn't currently expose exact -+// sums, but some of the other metrics are in fact exact sums of histograms. -+func (c *goCollector) exactSumFor(rmName string) float64 { -+ sumName, ok := c.rmExactSumMapForHist[rmName] -+ if !ok { -+ return 0 -+ } -+ s, ok := c.sampleMap[sumName] -+ if !ok { -+ return 0 -+ } -+ return unwrapScalarRMValue(s.Value) -+} -+ -+func memStatsFromRM(ms *runtime.MemStats, rm map[string]*metrics.Sample) { -+ lookupOrZero := func(name string) uint64 { -+ if s, ok := rm[name]; ok { -+ return s.Value.Uint64() -+ } -+ return 0 -+ } -+ -+ // Currently, MemStats adds tiny alloc count to both Mallocs AND Frees. -+ // The reason for this is because MemStats couldn't be extended at the time -+ // but there was a desire to have Mallocs at least be a little more representative, -+ // while having Mallocs - Frees still represent a live object count. -+ // Unfortunately, MemStats doesn't actually export a large allocation count, -+ // so it's impossible to pull this number out directly. -+ tinyAllocs := lookupOrZero(goGCHeapTinyAllocsObjects) -+ ms.Mallocs = lookupOrZero(goGCHeapAllocsObjects) + tinyAllocs -+ ms.Frees = lookupOrZero(goGCHeapFreesObjects) + tinyAllocs -+ -+ ms.TotalAlloc = lookupOrZero(goGCHeapAllocsBytes) -+ ms.Sys = lookupOrZero(goMemoryClassesTotalBytes) -+ ms.Lookups = 0 // Already always zero. -+ ms.HeapAlloc = lookupOrZero(goMemoryClassesHeapObjectsBytes) -+ ms.Alloc = ms.HeapAlloc -+ ms.HeapInuse = ms.HeapAlloc + lookupOrZero(goMemoryClassesHeapUnusedBytes) -+ ms.HeapReleased = lookupOrZero(goMemoryClassesHeapReleasedBytes) -+ ms.HeapIdle = ms.HeapReleased + lookupOrZero(goMemoryClassesHeapFreeBytes) -+ ms.HeapSys = ms.HeapInuse + ms.HeapIdle -+ ms.HeapObjects = lookupOrZero(goGCHeapObjects) -+ ms.StackInuse = lookupOrZero(goMemoryClassesHeapStacksBytes) -+ ms.StackSys = ms.StackInuse + lookupOrZero(goMemoryClassesOSStacksBytes) -+ ms.MSpanInuse = lookupOrZero(goMemoryClassesMetadataMSpanInuseBytes) -+ ms.MSpanSys = ms.MSpanInuse + lookupOrZero(goMemoryClassesMetadataMSPanFreeBytes) -+ ms.MCacheInuse = lookupOrZero(goMemoryClassesMetadataMCacheInuseBytes) -+ ms.MCacheSys = ms.MCacheInuse + lookupOrZero(goMemoryClassesMetadataMCacheFreeBytes) -+ ms.BuckHashSys = lookupOrZero(goMemoryClassesProfilingBucketsBytes) -+ ms.GCSys = lookupOrZero(goMemoryClassesMetadataOtherBytes) -+ ms.OtherSys = lookupOrZero(goMemoryClassesOtherBytes) -+ ms.NextGC = lookupOrZero(goGCHeapGoalBytes) -+ -+ // N.B. GCCPUFraction is intentionally omitted. This metric is not useful, -+ // and often misleading due to the fact that it's an average over the lifetime -+ // of the process. -+ // See https://github.com/prometheus/client_golang/issues/842#issuecomment-861812034 -+ // for more details. -+ ms.GCCPUFraction = 0 -+} -+ -+// batchHistogram is a mutable histogram that is updated -+// in batches. -+type batchHistogram struct { -+ selfCollector -+ -+ // Static fields updated only once. -+ desc *Desc -+ hasSum bool -+ -+ // Because this histogram operates in batches, it just uses a -+ // single mutex for everything. updates are always serialized -+ // but Write calls may operate concurrently with updates. -+ // Contention between these two sources should be rare. -+ mu sync.Mutex -+ buckets []float64 // Inclusive lower bounds, like runtime/metrics. -+ counts []uint64 -+ sum float64 // Used if hasSum is true. -+} -+ -+// newBatchHistogram creates a new batch histogram value with the given -+// Desc, buckets, and whether or not it has an exact sum available. -+// -+// buckets must always be from the runtime/metrics package, following -+// the same conventions. -+func newBatchHistogram(desc *Desc, buckets []float64, hasSum bool) *batchHistogram { -+ // We need to remove -Inf values. runtime/metrics keeps them around. -+ // But -Inf bucket should not be allowed for prometheus histograms. -+ if buckets[0] == math.Inf(-1) { -+ buckets = buckets[1:] -+ } -+ h := &batchHistogram{ -+ desc: desc, -+ buckets: buckets, -+ // Because buckets follows runtime/metrics conventions, there's -+ // 1 more value in the buckets list than there are buckets represented, -+ // because in runtime/metrics, the bucket values represent *boundaries*, -+ // and non-Inf boundaries are inclusive lower bounds for that bucket. -+ counts: make([]uint64, len(buckets)-1), -+ hasSum: hasSum, -+ } -+ h.init(h) -+ return h -+} -+ -+// update updates the batchHistogram from a runtime/metrics histogram. -+// -+// sum must be provided if the batchHistogram was created to have an exact sum. -+// h.buckets must be a strict subset of his.Buckets. -+func (h *batchHistogram) update(his *metrics.Float64Histogram, sum float64) { -+ counts, buckets := his.Counts, his.Buckets -+ -+ h.mu.Lock() -+ defer h.mu.Unlock() -+ -+ // Clear buckets. -+ for i := range h.counts { -+ h.counts[i] = 0 -+ } -+ // Copy and reduce buckets. -+ var j int -+ for i, count := range counts { -+ h.counts[j] += count -+ if buckets[i+1] == h.buckets[j+1] { -+ j++ -+ } -+ } -+ if h.hasSum { -+ h.sum = sum -+ } -+} -+ -+func (h *batchHistogram) Desc() *Desc { -+ return h.desc -+} -+ -+func (h *batchHistogram) Write(out *dto.Metric) error { -+ h.mu.Lock() -+ defer h.mu.Unlock() -+ -+ sum := float64(0) -+ if h.hasSum { -+ sum = h.sum -+ } -+ dtoBuckets := make([]*dto.Bucket, 0, len(h.counts)) -+ totalCount := uint64(0) -+ for i, count := range h.counts { -+ totalCount += count -+ if !h.hasSum { -+ if count != 0 { -+ // N.B. This computed sum is an underestimate. -+ sum += h.buckets[i] * float64(count) -+ } -+ } -+ -+ // Skip the +Inf bucket, but only for the bucket list. -+ // It must still count for sum and totalCount. -+ if math.IsInf(h.buckets[i+1], 1) { -+ break -+ } -+ // Float64Histogram's upper bound is exclusive, so make it inclusive -+ // by obtaining the next float64 value down, in order. -+ upperBound := math.Nextafter(h.buckets[i+1], h.buckets[i]) -+ dtoBuckets = append(dtoBuckets, &dto.Bucket{ -+ CumulativeCount: proto.Uint64(totalCount), -+ UpperBound: proto.Float64(upperBound), -+ }) -+ } -+ out.Histogram = &dto.Histogram{ -+ Bucket: dtoBuckets, -+ SampleCount: proto.Uint64(totalCount), -+ SampleSum: proto.Float64(sum), -+ } -+ return nil -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go -new file mode 100755 -index 0000000..4c873a0 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go -@@ -0,0 +1,1484 @@ -+// Copyright 2015 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "fmt" -+ "math" -+ "runtime" -+ "sort" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. -+ "github.com/golang/protobuf/proto" -+ -+ dto "github.com/prometheus/client_model/go" -+) -+ -+// nativeHistogramBounds for the frac of observed values. Only relevant for -+// schema > 0. The position in the slice is the schema. (0 is never used, just -+// here for convenience of using the schema directly as the index.) -+// -+// TODO(beorn7): Currently, we do a binary search into these slices. There are -+// ways to turn it into a small number of simple array lookups. It probably only -+// matters for schema 5 and beyond, but should be investigated. See this comment -+// as a starting point: -+// https://github.com/open-telemetry/opentelemetry-specification/issues/1776#issuecomment-870164310 -+var nativeHistogramBounds = [][]float64{ -+ // Schema "0": -+ {0.5}, -+ // Schema 1: -+ {0.5, 0.7071067811865475}, -+ // Schema 2: -+ {0.5, 0.5946035575013605, 0.7071067811865475, 0.8408964152537144}, -+ // Schema 3: -+ { -+ 0.5, 0.5452538663326288, 0.5946035575013605, 0.6484197773255048, -+ 0.7071067811865475, 0.7711054127039704, 0.8408964152537144, 0.9170040432046711, -+ }, -+ // Schema 4: -+ { -+ 0.5, 0.5221368912137069, 0.5452538663326288, 0.5693943173783458, -+ 0.5946035575013605, 0.620928906036742, 0.6484197773255048, 0.6771277734684463, -+ 0.7071067811865475, 0.7384130729697496, 0.7711054127039704, 0.805245165974627, -+ 0.8408964152537144, 0.8781260801866495, 0.9170040432046711, 0.9576032806985735, -+ }, -+ // Schema 5: -+ { -+ 0.5, 0.5109485743270583, 0.5221368912137069, 0.5335702003384117, -+ 0.5452538663326288, 0.5571933712979462, 0.5693943173783458, 0.5818624293887887, -+ 0.5946035575013605, 0.6076236799902344, 0.620928906036742, 0.6345254785958666, -+ 0.6484197773255048, 0.6626183215798706, 0.6771277734684463, 0.6919549409819159, -+ 0.7071067811865475, 0.7225904034885232, 0.7384130729697496, 0.7545822137967112, -+ 0.7711054127039704, 0.7879904225539431, 0.805245165974627, 0.8228777390769823, -+ 0.8408964152537144, 0.8593096490612387, 0.8781260801866495, 0.8973545375015533, -+ 0.9170040432046711, 0.9370838170551498, 0.9576032806985735, 0.9785720620876999, -+ }, -+ // Schema 6: -+ { -+ 0.5, 0.5054446430258502, 0.5109485743270583, 0.5165124395106142, -+ 0.5221368912137069, 0.5278225891802786, 0.5335702003384117, 0.5393803988785598, -+ 0.5452538663326288, 0.5511912916539204, 0.5571933712979462, 0.5632608093041209, -+ 0.5693943173783458, 0.5755946149764913, 0.5818624293887887, 0.5881984958251406, -+ 0.5946035575013605, 0.6010783657263515, 0.6076236799902344, 0.6142402680534349, -+ 0.620928906036742, 0.6276903785123455, 0.6345254785958666, 0.6414350080393891, -+ 0.6484197773255048, 0.6554806057623822, 0.6626183215798706, 0.6698337620266515, -+ 0.6771277734684463, 0.6845012114872953, 0.6919549409819159, 0.6994898362691555, -+ 0.7071067811865475, 0.7148066691959849, 0.7225904034885232, 0.7304588970903234, -+ 0.7384130729697496, 0.7464538641456323, 0.7545822137967112, 0.762799075372269, -+ 0.7711054127039704, 0.7795022001189185, 0.7879904225539431, 0.7965710756711334, -+ 0.805245165974627, 0.8140137109286738, 0.8228777390769823, 0.8318382901633681, -+ 0.8408964152537144, 0.8500531768592616, 0.8593096490612387, 0.8686669176368529, -+ 0.8781260801866495, 0.8876882462632604, 0.8973545375015533, 0.9071260877501991, -+ 0.9170040432046711, 0.9269895625416926, 0.9370838170551498, 0.9472879907934827, -+ 0.9576032806985735, 0.9680308967461471, 0.9785720620876999, 0.9892280131939752, -+ }, -+ // Schema 7: -+ { -+ 0.5, 0.5027149505564014, 0.5054446430258502, 0.5081891574554764, -+ 0.5109485743270583, 0.5137229745593818, 0.5165124395106142, 0.5193170509806894, -+ 0.5221368912137069, 0.5249720429003435, 0.5278225891802786, 0.5306886136446309, -+ 0.5335702003384117, 0.5364674337629877, 0.5393803988785598, 0.5423091811066545, -+ 0.5452538663326288, 0.5482145409081883, 0.5511912916539204, 0.5541842058618393, -+ 0.5571933712979462, 0.5602188762048033, 0.5632608093041209, 0.5663192597993595, -+ 0.5693943173783458, 0.572486072215902, 0.5755946149764913, 0.5787200368168754, -+ 0.5818624293887887, 0.585021884841625, 0.5881984958251406, 0.5913923554921704, -+ 0.5946035575013605, 0.5978321960199137, 0.6010783657263515, 0.6043421618132907, -+ 0.6076236799902344, 0.6109230164863786, 0.6142402680534349, 0.6175755319684665, -+ 0.620928906036742, 0.6243004885946023, 0.6276903785123455, 0.6310986751971253, -+ 0.6345254785958666, 0.637970889198196, 0.6414350080393891, 0.6449179367033329, -+ 0.6484197773255048, 0.6519406325959679, 0.6554806057623822, 0.659039800633032, -+ 0.6626183215798706, 0.6662162735415805, 0.6698337620266515, 0.6734708931164728, -+ 0.6771277734684463, 0.6808045103191123, 0.6845012114872953, 0.688217985377265, -+ 0.6919549409819159, 0.6957121878859629, 0.6994898362691555, 0.7032879969095076, -+ 0.7071067811865475, 0.7109463010845827, 0.7148066691959849, 0.718687998724491, -+ 0.7225904034885232, 0.7265139979245261, 0.7304588970903234, 0.7344252166684908, -+ 0.7384130729697496, 0.7424225829363761, 0.7464538641456323, 0.7505070348132126, -+ 0.7545822137967112, 0.7586795205991071, 0.762799075372269, 0.7669409989204777, -+ 0.7711054127039704, 0.7752924388424999, 0.7795022001189185, 0.7837348199827764, -+ 0.7879904225539431, 0.7922691326262467, 0.7965710756711334, 0.8008963778413465, -+ 0.805245165974627, 0.8096175675974316, 0.8140137109286738, 0.8184337248834821, -+ 0.8228777390769823, 0.8273458838280969, 0.8318382901633681, 0.8363550898207981, -+ 0.8408964152537144, 0.8454623996346523, 0.8500531768592616, 0.8546688815502312, -+ 0.8593096490612387, 0.8639756154809185, 0.8686669176368529, 0.8733836930995842, -+ 0.8781260801866495, 0.8828942179666361, 0.8876882462632604, 0.8925083056594671, -+ 0.8973545375015533, 0.9022270839033115, 0.9071260877501991, 0.9120516927035263, -+ 0.9170040432046711, 0.9219832844793128, 0.9269895625416926, 0.9320230241988943, -+ 0.9370838170551498, 0.9421720895161669, 0.9472879907934827, 0.9524316709088368, -+ 0.9576032806985735, 0.9628029718180622, 0.9680308967461471, 0.9732872087896164, -+ 0.9785720620876999, 0.9838856116165875, 0.9892280131939752, 0.9945994234836328, -+ }, -+ // Schema 8: -+ { -+ 0.5, 0.5013556375251013, 0.5027149505564014, 0.5040779490592088, -+ 0.5054446430258502, 0.5068150424757447, 0.5081891574554764, 0.509566998038869, -+ 0.5109485743270583, 0.5123338964485679, 0.5137229745593818, 0.5151158188430205, -+ 0.5165124395106142, 0.5179128468009786, 0.5193170509806894, 0.520725062344158, -+ 0.5221368912137069, 0.5235525479396449, 0.5249720429003435, 0.526395386502313, -+ 0.5278225891802786, 0.5292536613972564, 0.5306886136446309, 0.5321274564422321, -+ 0.5335702003384117, 0.5350168559101208, 0.5364674337629877, 0.5379219445313954, -+ 0.5393803988785598, 0.5408428074966075, 0.5423091811066545, 0.5437795304588847, -+ 0.5452538663326288, 0.5467321995364429, 0.5482145409081883, 0.549700901315111, -+ 0.5511912916539204, 0.5526857228508706, 0.5541842058618393, 0.5556867516724088, -+ 0.5571933712979462, 0.5587040757836845, 0.5602188762048033, 0.5617377836665098, -+ 0.5632608093041209, 0.564787964283144, 0.5663192597993595, 0.5678547070789026, -+ 0.5693943173783458, 0.5709381019847808, 0.572486072215902, 0.5740382394200894, -+ 0.5755946149764913, 0.5771552102951081, 0.5787200368168754, 0.5802891060137493, -+ 0.5818624293887887, 0.5834400184762408, 0.585021884841625, 0.5866080400818185, -+ 0.5881984958251406, 0.5897932637314379, 0.5913923554921704, 0.5929957828304968, -+ 0.5946035575013605, 0.5962156912915756, 0.5978321960199137, 0.5994530835371903, -+ 0.6010783657263515, 0.6027080545025619, 0.6043421618132907, 0.6059806996384005, -+ 0.6076236799902344, 0.6092711149137041, 0.6109230164863786, 0.6125793968185725, -+ 0.6142402680534349, 0.6159056423670379, 0.6175755319684665, 0.6192499490999082, -+ 0.620928906036742, 0.622612415087629, 0.6243004885946023, 0.6259931389331581, -+ 0.6276903785123455, 0.6293922197748583, 0.6310986751971253, 0.6328097572894031, -+ 0.6345254785958666, 0.6362458516947014, 0.637970889198196, 0.6397006037528346, -+ 0.6414350080393891, 0.6431741147730128, 0.6449179367033329, 0.6466664866145447, -+ 0.6484197773255048, 0.6501778216898253, 0.6519406325959679, 0.6537082229673385, -+ 0.6554806057623822, 0.6572577939746774, 0.659039800633032, 0.6608266388015788, -+ 0.6626183215798706, 0.6644148621029772, 0.6662162735415805, 0.6680225691020727, -+ 0.6698337620266515, 0.6716498655934177, 0.6734708931164728, 0.6752968579460171, -+ 0.6771277734684463, 0.6789636531064505, 0.6808045103191123, 0.6826503586020058, -+ 0.6845012114872953, 0.6863570825438342, 0.688217985377265, 0.690083933630119, -+ 0.6919549409819159, 0.6938310211492645, 0.6957121878859629, 0.6975984549830999, -+ 0.6994898362691555, 0.7013863456101023, 0.7032879969095076, 0.7051948041086352, -+ 0.7071067811865475, 0.7090239421602076, 0.7109463010845827, 0.7128738720527471, -+ 0.7148066691959849, 0.7167447066838943, 0.718687998724491, 0.7206365595643126, -+ 0.7225904034885232, 0.7245495448210174, 0.7265139979245261, 0.7284837772007218, -+ 0.7304588970903234, 0.7324393720732029, 0.7344252166684908, 0.7364164454346837, -+ 0.7384130729697496, 0.7404151139112358, 0.7424225829363761, 0.7444354947621984, -+ 0.7464538641456323, 0.7484777058836176, 0.7505070348132126, 0.7525418658117031, -+ 0.7545822137967112, 0.7566280937263048, 0.7586795205991071, 0.7607365094544071, -+ 0.762799075372269, 0.7648672334736434, 0.7669409989204777, 0.7690203869158282, -+ 0.7711054127039704, 0.7731960915705107, 0.7752924388424999, 0.7773944698885442, -+ 0.7795022001189185, 0.7816156449856788, 0.7837348199827764, 0.7858597406461707, -+ 0.7879904225539431, 0.7901268813264122, 0.7922691326262467, 0.7944171921585818, -+ 0.7965710756711334, 0.7987307989543135, 0.8008963778413465, 0.8030678282083853, -+ 0.805245165974627, 0.8074284071024302, 0.8096175675974316, 0.8118126635086642, -+ 0.8140137109286738, 0.8162207259936375, 0.8184337248834821, 0.820652723822003, -+ 0.8228777390769823, 0.8251087869603088, 0.8273458838280969, 0.8295890460808079, -+ 0.8318382901633681, 0.8340936325652911, 0.8363550898207981, 0.8386226785089391, -+ 0.8408964152537144, 0.8431763167241966, 0.8454623996346523, 0.8477546807446661, -+ 0.8500531768592616, 0.8523579048290255, 0.8546688815502312, 0.8569861239649629, -+ 0.8593096490612387, 0.8616394738731368, 0.8639756154809185, 0.8663180910111553, -+ 0.8686669176368529, 0.871022112577578, 0.8733836930995842, 0.8757516765159389, -+ 0.8781260801866495, 0.8805069215187917, 0.8828942179666361, 0.8852879870317771, -+ 0.8876882462632604, 0.890095013257712, 0.8925083056594671, 0.8949281411607002, -+ 0.8973545375015533, 0.8997875124702672, 0.9022270839033115, 0.9046732696855155, -+ 0.9071260877501991, 0.909585556079304, 0.9120516927035263, 0.9145245157024483, -+ 0.9170040432046711, 0.9194902933879467, 0.9219832844793128, 0.9244830347552253, -+ 0.9269895625416926, 0.92950288621441, 0.9320230241988943, 0.9345499949706191, -+ 0.9370838170551498, 0.93962450902828, 0.9421720895161669, 0.9447265771954693, -+ 0.9472879907934827, 0.9498563490882775, 0.9524316709088368, 0.9550139751351947, -+ 0.9576032806985735, 0.9601996065815236, 0.9628029718180622, 0.9654133954938133, -+ 0.9680308967461471, 0.9706554947643201, 0.9732872087896164, 0.9759260581154889, -+ 0.9785720620876999, 0.9812252401044634, 0.9838856116165875, 0.9865531961276168, -+ 0.9892280131939752, 0.9919100824251095, 0.9945994234836328, 0.9972960560854698, -+ }, -+} -+ -+// The nativeHistogramBounds above can be generated with the code below. -+// -+// TODO(beorn7): It's tempting to actually use `go generate` to generate the -+// code above. However, this could lead to slightly different numbers on -+// different architectures. We still need to come to terms if we are fine with -+// that, or if we might prefer to specify precise numbers in the standard. -+// -+// var nativeHistogramBounds [][]float64 = make([][]float64, 9) -+// -+// func init() { -+// // Populate nativeHistogramBounds. -+// numBuckets := 1 -+// for i := range nativeHistogramBounds { -+// bounds := []float64{0.5} -+// factor := math.Exp2(math.Exp2(float64(-i))) -+// for j := 0; j < numBuckets-1; j++ { -+// var bound float64 -+// if (j+1)%2 == 0 { -+// // Use previously calculated value for increased precision. -+// bound = nativeHistogramBounds[i-1][j/2+1] -+// } else { -+// bound = bounds[j] * factor -+// } -+// bounds = append(bounds, bound) -+// } -+// numBuckets *= 2 -+// nativeHistogramBounds[i] = bounds -+// } -+// } -+ -+// A Histogram counts individual observations from an event or sample stream in -+// configurable static buckets (or in dynamic sparse buckets as part of the -+// experimental Native Histograms, see below for more details). Similar to a -+// Summary, it also provides a sum of observations and an observation count. -+// -+// On the Prometheus server, quantiles can be calculated from a Histogram using -+// the histogram_quantile PromQL function. -+// -+// Note that Histograms, in contrast to Summaries, can be aggregated in PromQL -+// (see the documentation for detailed procedures). However, Histograms require -+// the user to pre-define suitable buckets, and they are in general less -+// accurate. (Both problems are addressed by the experimental Native -+// Histograms. To use them, configure a NativeHistogramBucketFactor in the -+// HistogramOpts. They also require a Prometheus server v2.40+ with the -+// corresponding feature flag enabled.) -+// -+// The Observe method of a Histogram has a very low performance overhead in -+// comparison with the Observe method of a Summary. -+// -+// To create Histogram instances, use NewHistogram. -+type Histogram interface { -+ Metric -+ Collector -+ -+ // Observe adds a single observation to the histogram. Observations are -+ // usually positive or zero. Negative observations are accepted but -+ // prevent current versions of Prometheus from properly detecting -+ // counter resets in the sum of observations. (The experimental Native -+ // Histograms handle negative observations properly.) See -+ // https://prometheus.io/docs/practices/histograms/#count-and-sum-of-observations -+ // for details. -+ Observe(float64) -+} -+ -+// bucketLabel is used for the label that defines the upper bound of a -+// bucket of a histogram ("le" -> "less or equal"). -+const bucketLabel = "le" -+ -+// DefBuckets are the default Histogram buckets. The default buckets are -+// tailored to broadly measure the response time (in seconds) of a network -+// service. Most likely, however, you will be required to define buckets -+// customized to your use case. -+var DefBuckets = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10} -+ -+// DefNativeHistogramZeroThreshold is the default value for -+// NativeHistogramZeroThreshold in the HistogramOpts. -+// -+// The value is 2^-128 (or 0.5*2^-127 in the actual IEEE 754 representation), -+// which is a bucket boundary at all possible resolutions. -+const DefNativeHistogramZeroThreshold = 2.938735877055719e-39 -+ -+// NativeHistogramZeroThresholdZero can be used as NativeHistogramZeroThreshold -+// in the HistogramOpts to create a zero bucket of width zero, i.e. a zero -+// bucket that only receives observations of precisely zero. -+const NativeHistogramZeroThresholdZero = -1 -+ -+var errBucketLabelNotAllowed = fmt.Errorf( -+ "%q is not allowed as label name in histograms", bucketLabel, -+) -+ -+// LinearBuckets creates 'count' regular buckets, each 'width' wide, where the -+// lowest bucket has an upper bound of 'start'. The final +Inf bucket is not -+// counted and not included in the returned slice. The returned slice is meant -+// to be used for the Buckets field of HistogramOpts. -+// -+// The function panics if 'count' is zero or negative. -+func LinearBuckets(start, width float64, count int) []float64 { -+ if count < 1 { -+ panic("LinearBuckets needs a positive count") -+ } -+ buckets := make([]float64, count) -+ for i := range buckets { -+ buckets[i] = start -+ start += width -+ } -+ return buckets -+} -+ -+// ExponentialBuckets creates 'count' regular buckets, where the lowest bucket -+// has an upper bound of 'start' and each following bucket's upper bound is -+// 'factor' times the previous bucket's upper bound. The final +Inf bucket is -+// not counted and not included in the returned slice. The returned slice is -+// meant to be used for the Buckets field of HistogramOpts. -+// -+// The function panics if 'count' is 0 or negative, if 'start' is 0 or negative, -+// or if 'factor' is less than or equal 1. -+func ExponentialBuckets(start, factor float64, count int) []float64 { -+ if count < 1 { -+ panic("ExponentialBuckets needs a positive count") -+ } -+ if start <= 0 { -+ panic("ExponentialBuckets needs a positive start value") -+ } -+ if factor <= 1 { -+ panic("ExponentialBuckets needs a factor greater than 1") -+ } -+ buckets := make([]float64, count) -+ for i := range buckets { -+ buckets[i] = start -+ start *= factor -+ } -+ return buckets -+} -+ -+// ExponentialBucketsRange creates 'count' buckets, where the lowest bucket is -+// 'min' and the highest bucket is 'max'. The final +Inf bucket is not counted -+// and not included in the returned slice. The returned slice is meant to be -+// used for the Buckets field of HistogramOpts. -+// -+// The function panics if 'count' is 0 or negative, if 'min' is 0 or negative. -+func ExponentialBucketsRange(min, max float64, count int) []float64 { -+ if count < 1 { -+ panic("ExponentialBucketsRange count needs a positive count") -+ } -+ if min <= 0 { -+ panic("ExponentialBucketsRange min needs to be greater than 0") -+ } -+ -+ // Formula for exponential buckets. -+ // max = min*growthFactor^(bucketCount-1) -+ -+ // We know max/min and highest bucket. Solve for growthFactor. -+ growthFactor := math.Pow(max/min, 1.0/float64(count-1)) -+ -+ // Now that we know growthFactor, solve for each bucket. -+ buckets := make([]float64, count) -+ for i := 1; i <= count; i++ { -+ buckets[i-1] = min * math.Pow(growthFactor, float64(i-1)) -+ } -+ return buckets -+} -+ -+// HistogramOpts bundles the options for creating a Histogram metric. It is -+// mandatory to set Name to a non-empty string. All other fields are optional -+// and can safely be left at their zero value, although it is strongly -+// encouraged to set a Help string. -+type HistogramOpts struct { -+ // Namespace, Subsystem, and Name are components of the fully-qualified -+ // name of the Histogram (created by joining these components with -+ // "_"). Only Name is mandatory, the others merely help structuring the -+ // name. Note that the fully-qualified name of the Histogram must be a -+ // valid Prometheus metric name. -+ Namespace string -+ Subsystem string -+ Name string -+ -+ // Help provides information about this Histogram. -+ // -+ // Metrics with the same fully-qualified name must have the same Help -+ // string. -+ Help string -+ -+ // ConstLabels are used to attach fixed labels to this metric. Metrics -+ // with the same fully-qualified name must have the same label names in -+ // their ConstLabels. -+ // -+ // ConstLabels are only used rarely. In particular, do not use them to -+ // attach the same labels to all your metrics. Those use cases are -+ // better covered by target labels set by the scraping Prometheus -+ // server, or by one specific metric (e.g. a build_info or a -+ // machine_role metric). See also -+ // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels -+ ConstLabels Labels -+ -+ // Buckets defines the buckets into which observations are counted. Each -+ // element in the slice is the upper inclusive bound of a bucket. The -+ // values must be sorted in strictly increasing order. There is no need -+ // to add a highest bucket with +Inf bound, it will be added -+ // implicitly. If Buckets is left as nil or set to a slice of length -+ // zero, it is replaced by default buckets. The default buckets are -+ // DefBuckets if no buckets for a native histogram (see below) are used, -+ // otherwise the default is no buckets. (In other words, if you want to -+ // use both reguler buckets and buckets for a native histogram, you have -+ // to define the regular buckets here explicitly.) -+ Buckets []float64 -+ -+ // If NativeHistogramBucketFactor is greater than one, so-called sparse -+ // buckets are used (in addition to the regular buckets, if defined -+ // above). A Histogram with sparse buckets will be ingested as a Native -+ // Histogram by a Prometheus server with that feature enabled (requires -+ // Prometheus v2.40+). Sparse buckets are exponential buckets covering -+ // the whole float64 range (with the exception of the “zero” bucket, see -+ // SparseBucketsZeroThreshold below). From any one bucket to the next, -+ // the width of the bucket grows by a constant -+ // factor. NativeHistogramBucketFactor provides an upper bound for this -+ // factor (exception see below). The smaller -+ // NativeHistogramBucketFactor, the more buckets will be used and thus -+ // the more costly the histogram will become. A generally good trade-off -+ // between cost and accuracy is a value of 1.1 (each bucket is at most -+ // 10% wider than the previous one), which will result in each power of -+ // two divided into 8 buckets (e.g. there will be 8 buckets between 1 -+ // and 2, same as between 2 and 4, and 4 and 8, etc.). -+ // -+ // Details about the actually used factor: The factor is calculated as -+ // 2^(2^n), where n is an integer number between (and including) -8 and -+ // 4. n is chosen so that the resulting factor is the largest that is -+ // still smaller or equal to NativeHistogramBucketFactor. Note that the -+ // smallest possible factor is therefore approx. 1.00271 (i.e. 2^(2^-8) -+ // ). If NativeHistogramBucketFactor is greater than 1 but smaller than -+ // 2^(2^-8), then the actually used factor is still 2^(2^-8) even though -+ // it is larger than the provided NativeHistogramBucketFactor. -+ // -+ // NOTE: Native Histograms are still an experimental feature. Their -+ // behavior might still change without a major version -+ // bump. Subsequently, all NativeHistogram... options here might still -+ // change their behavior or name (or might completely disappear) without -+ // a major version bump. -+ NativeHistogramBucketFactor float64 -+ // All observations with an absolute value of less or equal -+ // NativeHistogramZeroThreshold are accumulated into a “zero” -+ // bucket. For best results, this should be close to a bucket -+ // boundary. This is usually the case if picking a power of two. If -+ // NativeHistogramZeroThreshold is left at zero, -+ // DefSparseBucketsZeroThreshold is used as the threshold. To configure -+ // a zero bucket with an actual threshold of zero (i.e. only -+ // observations of precisely zero will go into the zero bucket), set -+ // NativeHistogramZeroThreshold to the NativeHistogramZeroThresholdZero -+ // constant (or any negative float value). -+ NativeHistogramZeroThreshold float64 -+ -+ // The remaining fields define a strategy to limit the number of -+ // populated sparse buckets. If NativeHistogramMaxBucketNumber is left -+ // at zero, the number of buckets is not limited. (Note that this might -+ // lead to unbounded memory consumption if the values observed by the -+ // Histogram are sufficiently wide-spread. In particular, this could be -+ // used as a DoS attack vector. Where the observed values depend on -+ // external inputs, it is highly recommended to set a -+ // NativeHistogramMaxBucketNumber.) Once the set -+ // NativeHistogramMaxBucketNumber is exceeded, the following strategy is -+ // enacted: First, if the last reset (or the creation) of the histogram -+ // is at least NativeHistogramMinResetDuration ago, then the whole -+ // histogram is reset to its initial state (including regular -+ // buckets). If less time has passed, or if -+ // NativeHistogramMinResetDuration is zero, no reset is -+ // performed. Instead, the zero threshold is increased sufficiently to -+ // reduce the number of buckets to or below -+ // NativeHistogramMaxBucketNumber, but not to more than -+ // NativeHistogramMaxZeroThreshold. Thus, if -+ // NativeHistogramMaxZeroThreshold is already at or below the current -+ // zero threshold, nothing happens at this step. After that, if the -+ // number of buckets still exceeds NativeHistogramMaxBucketNumber, the -+ // resolution of the histogram is reduced by doubling the width of the -+ // sparse buckets (up to a growth factor between one bucket to the next -+ // of 2^(2^4) = 65536, see above). -+ NativeHistogramMaxBucketNumber uint32 -+ NativeHistogramMinResetDuration time.Duration -+ NativeHistogramMaxZeroThreshold float64 -+} -+ -+// NewHistogram creates a new Histogram based on the provided HistogramOpts. It -+// panics if the buckets in HistogramOpts are not in strictly increasing order. -+// -+// The returned implementation also implements ExemplarObserver. It is safe to -+// perform the corresponding type assertion. Exemplars are tracked separately -+// for each bucket. -+func NewHistogram(opts HistogramOpts) Histogram { -+ return newHistogram( -+ NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ nil, -+ opts.ConstLabels, -+ ), -+ opts, -+ ) -+} -+ -+func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogram { -+ if len(desc.variableLabels) != len(labelValues) { -+ panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, labelValues)) -+ } -+ -+ for _, n := range desc.variableLabels { -+ if n == bucketLabel { -+ panic(errBucketLabelNotAllowed) -+ } -+ } -+ for _, lp := range desc.constLabelPairs { -+ if lp.GetName() == bucketLabel { -+ panic(errBucketLabelNotAllowed) -+ } -+ } -+ -+ h := &histogram{ -+ desc: desc, -+ upperBounds: opts.Buckets, -+ labelPairs: MakeLabelPairs(desc, labelValues), -+ nativeHistogramMaxBuckets: opts.NativeHistogramMaxBucketNumber, -+ nativeHistogramMaxZeroThreshold: opts.NativeHistogramMaxZeroThreshold, -+ nativeHistogramMinResetDuration: opts.NativeHistogramMinResetDuration, -+ lastResetTime: time.Now(), -+ now: time.Now, -+ } -+ if len(h.upperBounds) == 0 && opts.NativeHistogramBucketFactor <= 1 { -+ h.upperBounds = DefBuckets -+ } -+ if opts.NativeHistogramBucketFactor <= 1 { -+ h.nativeHistogramSchema = math.MinInt32 // To mark that there are no sparse buckets. -+ } else { -+ switch { -+ case opts.NativeHistogramZeroThreshold > 0: -+ h.nativeHistogramZeroThreshold = opts.NativeHistogramZeroThreshold -+ case opts.NativeHistogramZeroThreshold == 0: -+ h.nativeHistogramZeroThreshold = DefNativeHistogramZeroThreshold -+ } // Leave h.nativeHistogramZeroThreshold at 0 otherwise. -+ h.nativeHistogramSchema = pickSchema(opts.NativeHistogramBucketFactor) -+ } -+ for i, upperBound := range h.upperBounds { -+ if i < len(h.upperBounds)-1 { -+ if upperBound >= h.upperBounds[i+1] { -+ panic(fmt.Errorf( -+ "histogram buckets must be in increasing order: %f >= %f", -+ upperBound, h.upperBounds[i+1], -+ )) -+ } -+ } else { -+ if math.IsInf(upperBound, +1) { -+ // The +Inf bucket is implicit. Remove it here. -+ h.upperBounds = h.upperBounds[:i] -+ } -+ } -+ } -+ // Finally we know the final length of h.upperBounds and can make buckets -+ // for both counts as well as exemplars: -+ h.counts[0] = &histogramCounts{ -+ buckets: make([]uint64, len(h.upperBounds)), -+ nativeHistogramZeroThresholdBits: math.Float64bits(h.nativeHistogramZeroThreshold), -+ nativeHistogramSchema: h.nativeHistogramSchema, -+ } -+ h.counts[1] = &histogramCounts{ -+ buckets: make([]uint64, len(h.upperBounds)), -+ nativeHistogramZeroThresholdBits: math.Float64bits(h.nativeHistogramZeroThreshold), -+ nativeHistogramSchema: h.nativeHistogramSchema, -+ } -+ h.exemplars = make([]atomic.Value, len(h.upperBounds)+1) -+ -+ h.init(h) // Init self-collection. -+ return h -+} -+ -+type histogramCounts struct { -+ // Order in this struct matters for the alignment required by atomic -+ // operations, see http://golang.org/pkg/sync/atomic/#pkg-note-BUG -+ -+ // sumBits contains the bits of the float64 representing the sum of all -+ // observations. -+ sumBits uint64 -+ count uint64 -+ -+ // nativeHistogramZeroBucket counts all (positive and negative) -+ // observations in the zero bucket (with an absolute value less or equal -+ // the current threshold, see next field. -+ nativeHistogramZeroBucket uint64 -+ // nativeHistogramZeroThresholdBits is the bit pattern of the current -+ // threshold for the zero bucket. It's initially equal to -+ // nativeHistogramZeroThreshold but may change according to the bucket -+ // count limitation strategy. -+ nativeHistogramZeroThresholdBits uint64 -+ // nativeHistogramSchema may change over time according to the bucket -+ // count limitation strategy and therefore has to be saved here. -+ nativeHistogramSchema int32 -+ // Number of (positive and negative) sparse buckets. -+ nativeHistogramBucketsNumber uint32 -+ -+ // Regular buckets. -+ buckets []uint64 -+ -+ // The sparse buckets for native histograms are implemented with a -+ // sync.Map for now. A dedicated data structure will likely be more -+ // efficient. There are separate maps for negative and positive -+ // observations. The map's value is an *int64, counting observations in -+ // that bucket. (Note that we don't use uint64 as an int64 won't -+ // overflow in practice, and working with signed numbers from the -+ // beginning simplifies the handling of deltas.) The map's key is the -+ // index of the bucket according to the used -+ // nativeHistogramSchema. Index 0 is for an upper bound of 1. -+ nativeHistogramBucketsPositive, nativeHistogramBucketsNegative sync.Map -+} -+ -+// observe manages the parts of observe that only affects -+// histogramCounts. doSparse is true if sparse buckets should be done, -+// too. -+func (hc *histogramCounts) observe(v float64, bucket int, doSparse bool) { -+ if bucket < len(hc.buckets) { -+ atomic.AddUint64(&hc.buckets[bucket], 1) -+ } -+ atomicAddFloat(&hc.sumBits, v) -+ if doSparse && !math.IsNaN(v) { -+ var ( -+ key int -+ schema = atomic.LoadInt32(&hc.nativeHistogramSchema) -+ zeroThreshold = math.Float64frombits(atomic.LoadUint64(&hc.nativeHistogramZeroThresholdBits)) -+ bucketCreated, isInf bool -+ ) -+ if math.IsInf(v, 0) { -+ // Pretend v is MaxFloat64 but later increment key by one. -+ if math.IsInf(v, +1) { -+ v = math.MaxFloat64 -+ } else { -+ v = -math.MaxFloat64 -+ } -+ isInf = true -+ } -+ frac, exp := math.Frexp(math.Abs(v)) -+ if schema > 0 { -+ bounds := nativeHistogramBounds[schema] -+ key = sort.SearchFloat64s(bounds, frac) + (exp-1)*len(bounds) -+ } else { -+ key = exp -+ if frac == 0.5 { -+ key-- -+ } -+ div := 1 << -schema -+ key = (key + div - 1) / div -+ } -+ if isInf { -+ key++ -+ } -+ switch { -+ case v > zeroThreshold: -+ bucketCreated = addToBucket(&hc.nativeHistogramBucketsPositive, key, 1) -+ case v < -zeroThreshold: -+ bucketCreated = addToBucket(&hc.nativeHistogramBucketsNegative, key, 1) -+ default: -+ atomic.AddUint64(&hc.nativeHistogramZeroBucket, 1) -+ } -+ if bucketCreated { -+ atomic.AddUint32(&hc.nativeHistogramBucketsNumber, 1) -+ } -+ } -+ // Increment count last as we take it as a signal that the observation -+ // is complete. -+ atomic.AddUint64(&hc.count, 1) -+} -+ -+type histogram struct { -+ // countAndHotIdx enables lock-free writes with use of atomic updates. -+ // The most significant bit is the hot index [0 or 1] of the count field -+ // below. Observe calls update the hot one. All remaining bits count the -+ // number of Observe calls. Observe starts by incrementing this counter, -+ // and finish by incrementing the count field in the respective -+ // histogramCounts, as a marker for completion. -+ // -+ // Calls of the Write method (which are non-mutating reads from the -+ // perspective of the histogram) swap the hot–cold under the writeMtx -+ // lock. A cooldown is awaited (while locked) by comparing the number of -+ // observations with the initiation count. Once they match, then the -+ // last observation on the now cool one has completed. All cold fields must -+ // be merged into the new hot before releasing writeMtx. -+ // -+ // Fields with atomic access first! See alignment constraint: -+ // http://golang.org/pkg/sync/atomic/#pkg-note-BUG -+ countAndHotIdx uint64 -+ -+ selfCollector -+ desc *Desc -+ -+ // Only used in the Write method and for sparse bucket management. -+ mtx sync.Mutex -+ -+ // Two counts, one is "hot" for lock-free observations, the other is -+ // "cold" for writing out a dto.Metric. It has to be an array of -+ // pointers to guarantee 64bit alignment of the histogramCounts, see -+ // http://golang.org/pkg/sync/atomic/#pkg-note-BUG. -+ counts [2]*histogramCounts -+ -+ upperBounds []float64 -+ labelPairs []*dto.LabelPair -+ exemplars []atomic.Value // One more than buckets (to include +Inf), each a *dto.Exemplar. -+ nativeHistogramSchema int32 // The initial schema. Set to math.MinInt32 if no sparse buckets are used. -+ nativeHistogramZeroThreshold float64 // The initial zero threshold. -+ nativeHistogramMaxZeroThreshold float64 -+ nativeHistogramMaxBuckets uint32 -+ nativeHistogramMinResetDuration time.Duration -+ lastResetTime time.Time // Protected by mtx. -+ -+ now func() time.Time // To mock out time.Now() for testing. -+} -+ -+func (h *histogram) Desc() *Desc { -+ return h.desc -+} -+ -+func (h *histogram) Observe(v float64) { -+ h.observe(v, h.findBucket(v)) -+} -+ -+func (h *histogram) ObserveWithExemplar(v float64, e Labels) { -+ i := h.findBucket(v) -+ h.observe(v, i) -+ h.updateExemplar(v, i, e) -+} -+ -+func (h *histogram) Write(out *dto.Metric) error { -+ // For simplicity, we protect this whole method by a mutex. It is not in -+ // the hot path, i.e. Observe is called much more often than Write. The -+ // complication of making Write lock-free isn't worth it, if possible at -+ // all. -+ h.mtx.Lock() -+ defer h.mtx.Unlock() -+ -+ // Adding 1<<63 switches the hot index (from 0 to 1 or from 1 to 0) -+ // without touching the count bits. See the struct comments for a full -+ // description of the algorithm. -+ n := atomic.AddUint64(&h.countAndHotIdx, 1<<63) -+ // count is contained unchanged in the lower 63 bits. -+ count := n & ((1 << 63) - 1) -+ // The most significant bit tells us which counts is hot. The complement -+ // is thus the cold one. -+ hotCounts := h.counts[n>>63] -+ coldCounts := h.counts[(^n)>>63] -+ -+ waitForCooldown(count, coldCounts) -+ -+ his := &dto.Histogram{ -+ Bucket: make([]*dto.Bucket, len(h.upperBounds)), -+ SampleCount: proto.Uint64(count), -+ SampleSum: proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.sumBits))), -+ } -+ out.Histogram = his -+ out.Label = h.labelPairs -+ -+ var cumCount uint64 -+ for i, upperBound := range h.upperBounds { -+ cumCount += atomic.LoadUint64(&coldCounts.buckets[i]) -+ his.Bucket[i] = &dto.Bucket{ -+ CumulativeCount: proto.Uint64(cumCount), -+ UpperBound: proto.Float64(upperBound), -+ } -+ if e := h.exemplars[i].Load(); e != nil { -+ his.Bucket[i].Exemplar = e.(*dto.Exemplar) -+ } -+ } -+ // If there is an exemplar for the +Inf bucket, we have to add that bucket explicitly. -+ if e := h.exemplars[len(h.upperBounds)].Load(); e != nil { -+ b := &dto.Bucket{ -+ CumulativeCount: proto.Uint64(count), -+ UpperBound: proto.Float64(math.Inf(1)), -+ Exemplar: e.(*dto.Exemplar), -+ } -+ his.Bucket = append(his.Bucket, b) -+ } -+ if h.nativeHistogramSchema > math.MinInt32 { -+ his.ZeroThreshold = proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.nativeHistogramZeroThresholdBits))) -+ his.Schema = proto.Int32(atomic.LoadInt32(&coldCounts.nativeHistogramSchema)) -+ zeroBucket := atomic.LoadUint64(&coldCounts.nativeHistogramZeroBucket) -+ -+ defer func() { -+ coldCounts.nativeHistogramBucketsPositive.Range(addAndReset(&hotCounts.nativeHistogramBucketsPositive, &hotCounts.nativeHistogramBucketsNumber)) -+ coldCounts.nativeHistogramBucketsNegative.Range(addAndReset(&hotCounts.nativeHistogramBucketsNegative, &hotCounts.nativeHistogramBucketsNumber)) -+ }() -+ -+ his.ZeroCount = proto.Uint64(zeroBucket) -+ his.NegativeSpan, his.NegativeDelta = makeBuckets(&coldCounts.nativeHistogramBucketsNegative) -+ his.PositiveSpan, his.PositiveDelta = makeBuckets(&coldCounts.nativeHistogramBucketsPositive) -+ } -+ addAndResetCounts(hotCounts, coldCounts) -+ return nil -+} -+ -+// findBucket returns the index of the bucket for the provided value, or -+// len(h.upperBounds) for the +Inf bucket. -+func (h *histogram) findBucket(v float64) int { -+ // TODO(beorn7): For small numbers of buckets (<30), a linear search is -+ // slightly faster than the binary search. If we really care, we could -+ // switch from one search strategy to the other depending on the number -+ // of buckets. -+ // -+ // Microbenchmarks (BenchmarkHistogramNoLabels): -+ // 11 buckets: 38.3 ns/op linear - binary 48.7 ns/op -+ // 100 buckets: 78.1 ns/op linear - binary 54.9 ns/op -+ // 300 buckets: 154 ns/op linear - binary 61.6 ns/op -+ return sort.SearchFloat64s(h.upperBounds, v) -+} -+ -+// observe is the implementation for Observe without the findBucket part. -+func (h *histogram) observe(v float64, bucket int) { -+ // Do not add to sparse buckets for NaN observations. -+ doSparse := h.nativeHistogramSchema > math.MinInt32 && !math.IsNaN(v) -+ // We increment h.countAndHotIdx so that the counter in the lower -+ // 63 bits gets incremented. At the same time, we get the new value -+ // back, which we can use to find the currently-hot counts. -+ n := atomic.AddUint64(&h.countAndHotIdx, 1) -+ hotCounts := h.counts[n>>63] -+ hotCounts.observe(v, bucket, doSparse) -+ if doSparse { -+ h.limitBuckets(hotCounts, v, bucket) -+ } -+} -+ -+// limitSparsebuckets applies a strategy to limit the number of populated sparse -+// buckets. It's generally best effort, and there are situations where the -+// number can go higher (if even the lowest resolution isn't enough to reduce -+// the number sufficiently, or if the provided counts aren't fully updated yet -+// by a concurrently happening Write call). -+func (h *histogram) limitBuckets(counts *histogramCounts, value float64, bucket int) { -+ if h.nativeHistogramMaxBuckets == 0 { -+ return // No limit configured. -+ } -+ if h.nativeHistogramMaxBuckets >= atomic.LoadUint32(&counts.nativeHistogramBucketsNumber) { -+ return // Bucket limit not exceeded yet. -+ } -+ -+ h.mtx.Lock() -+ defer h.mtx.Unlock() -+ -+ // The hot counts might have been swapped just before we acquired the -+ // lock. Re-fetch the hot counts first... -+ n := atomic.LoadUint64(&h.countAndHotIdx) -+ hotIdx := n >> 63 -+ coldIdx := (^n) >> 63 -+ hotCounts := h.counts[hotIdx] -+ coldCounts := h.counts[coldIdx] -+ // ...and then check again if we really have to reduce the bucket count. -+ if h.nativeHistogramMaxBuckets >= atomic.LoadUint32(&hotCounts.nativeHistogramBucketsNumber) { -+ return // Bucket limit not exceeded after all. -+ } -+ // Try the various strategies in order. -+ if h.maybeReset(hotCounts, coldCounts, coldIdx, value, bucket) { -+ return -+ } -+ if h.maybeWidenZeroBucket(hotCounts, coldCounts) { -+ return -+ } -+ h.doubleBucketWidth(hotCounts, coldCounts) -+} -+ -+// maybeReset resests the whole histogram if at least h.nativeHistogramMinResetDuration -+// has been passed. It returns true if the histogram has been reset. The caller -+// must have locked h.mtx. -+func (h *histogram) maybeReset(hot, cold *histogramCounts, coldIdx uint64, value float64, bucket int) bool { -+ // We are using the possibly mocked h.now() rather than -+ // time.Since(h.lastResetTime) to enable testing. -+ if h.nativeHistogramMinResetDuration == 0 || h.now().Sub(h.lastResetTime) < h.nativeHistogramMinResetDuration { -+ return false -+ } -+ // Completely reset coldCounts. -+ h.resetCounts(cold) -+ // Repeat the latest observation to not lose it completely. -+ cold.observe(value, bucket, true) -+ // Make coldCounts the new hot counts while ressetting countAndHotIdx. -+ n := atomic.SwapUint64(&h.countAndHotIdx, (coldIdx<<63)+1) -+ count := n & ((1 << 63) - 1) -+ waitForCooldown(count, hot) -+ // Finally, reset the formerly hot counts, too. -+ h.resetCounts(hot) -+ h.lastResetTime = h.now() -+ return true -+} -+ -+// maybeWidenZeroBucket widens the zero bucket until it includes the existing -+// buckets closest to the zero bucket (which could be two, if an equidistant -+// negative and a positive bucket exists, but usually it's only one bucket to be -+// merged into the new wider zero bucket). h.nativeHistogramMaxZeroThreshold -+// limits how far the zero bucket can be extended, and if that's not enough to -+// include an existing bucket, the method returns false. The caller must have -+// locked h.mtx. -+func (h *histogram) maybeWidenZeroBucket(hot, cold *histogramCounts) bool { -+ currentZeroThreshold := math.Float64frombits(atomic.LoadUint64(&hot.nativeHistogramZeroThresholdBits)) -+ if currentZeroThreshold >= h.nativeHistogramMaxZeroThreshold { -+ return false -+ } -+ // Find the key of the bucket closest to zero. -+ smallestKey := findSmallestKey(&hot.nativeHistogramBucketsPositive) -+ smallestNegativeKey := findSmallestKey(&hot.nativeHistogramBucketsNegative) -+ if smallestNegativeKey < smallestKey { -+ smallestKey = smallestNegativeKey -+ } -+ if smallestKey == math.MaxInt32 { -+ return false -+ } -+ newZeroThreshold := getLe(smallestKey, atomic.LoadInt32(&hot.nativeHistogramSchema)) -+ if newZeroThreshold > h.nativeHistogramMaxZeroThreshold { -+ return false // New threshold would exceed the max threshold. -+ } -+ atomic.StoreUint64(&cold.nativeHistogramZeroThresholdBits, math.Float64bits(newZeroThreshold)) -+ // Remove applicable buckets. -+ if _, loaded := cold.nativeHistogramBucketsNegative.LoadAndDelete(smallestKey); loaded { -+ atomicDecUint32(&cold.nativeHistogramBucketsNumber) -+ } -+ if _, loaded := cold.nativeHistogramBucketsPositive.LoadAndDelete(smallestKey); loaded { -+ atomicDecUint32(&cold.nativeHistogramBucketsNumber) -+ } -+ // Make cold counts the new hot counts. -+ n := atomic.AddUint64(&h.countAndHotIdx, 1<<63) -+ count := n & ((1 << 63) - 1) -+ // Swap the pointer names to represent the new roles and make -+ // the rest less confusing. -+ hot, cold = cold, hot -+ waitForCooldown(count, cold) -+ // Add all the now cold counts to the new hot counts... -+ addAndResetCounts(hot, cold) -+ // ...adjust the new zero threshold in the cold counts, too... -+ atomic.StoreUint64(&cold.nativeHistogramZeroThresholdBits, math.Float64bits(newZeroThreshold)) -+ // ...and then merge the newly deleted buckets into the wider zero -+ // bucket. -+ mergeAndDeleteOrAddAndReset := func(hotBuckets, coldBuckets *sync.Map) func(k, v interface{}) bool { -+ return func(k, v interface{}) bool { -+ key := k.(int) -+ bucket := v.(*int64) -+ if key == smallestKey { -+ // Merge into hot zero bucket... -+ atomic.AddUint64(&hot.nativeHistogramZeroBucket, uint64(atomic.LoadInt64(bucket))) -+ // ...and delete from cold counts. -+ coldBuckets.Delete(key) -+ atomicDecUint32(&cold.nativeHistogramBucketsNumber) -+ } else { -+ // Add to corresponding hot bucket... -+ if addToBucket(hotBuckets, key, atomic.LoadInt64(bucket)) { -+ atomic.AddUint32(&hot.nativeHistogramBucketsNumber, 1) -+ } -+ // ...and reset cold bucket. -+ atomic.StoreInt64(bucket, 0) -+ } -+ return true -+ } -+ } -+ -+ cold.nativeHistogramBucketsPositive.Range(mergeAndDeleteOrAddAndReset(&hot.nativeHistogramBucketsPositive, &cold.nativeHistogramBucketsPositive)) -+ cold.nativeHistogramBucketsNegative.Range(mergeAndDeleteOrAddAndReset(&hot.nativeHistogramBucketsNegative, &cold.nativeHistogramBucketsNegative)) -+ return true -+} -+ -+// doubleBucketWidth doubles the bucket width (by decrementing the schema -+// number). Note that very sparse buckets could lead to a low reduction of the -+// bucket count (or even no reduction at all). The method does nothing if the -+// schema is already -4. -+func (h *histogram) doubleBucketWidth(hot, cold *histogramCounts) { -+ coldSchema := atomic.LoadInt32(&cold.nativeHistogramSchema) -+ if coldSchema == -4 { -+ return // Already at lowest resolution. -+ } -+ coldSchema-- -+ atomic.StoreInt32(&cold.nativeHistogramSchema, coldSchema) -+ // Play it simple and just delete all cold buckets. -+ atomic.StoreUint32(&cold.nativeHistogramBucketsNumber, 0) -+ deleteSyncMap(&cold.nativeHistogramBucketsNegative) -+ deleteSyncMap(&cold.nativeHistogramBucketsPositive) -+ // Make coldCounts the new hot counts. -+ n := atomic.AddUint64(&h.countAndHotIdx, 1<<63) -+ count := n & ((1 << 63) - 1) -+ // Swap the pointer names to represent the new roles and make -+ // the rest less confusing. -+ hot, cold = cold, hot -+ waitForCooldown(count, cold) -+ // Add all the now cold counts to the new hot counts... -+ addAndResetCounts(hot, cold) -+ // ...adjust the schema in the cold counts, too... -+ atomic.StoreInt32(&cold.nativeHistogramSchema, coldSchema) -+ // ...and then merge the cold buckets into the wider hot buckets. -+ merge := func(hotBuckets *sync.Map) func(k, v interface{}) bool { -+ return func(k, v interface{}) bool { -+ key := k.(int) -+ bucket := v.(*int64) -+ // Adjust key to match the bucket to merge into. -+ if key > 0 { -+ key++ -+ } -+ key /= 2 -+ // Add to corresponding hot bucket. -+ if addToBucket(hotBuckets, key, atomic.LoadInt64(bucket)) { -+ atomic.AddUint32(&hot.nativeHistogramBucketsNumber, 1) -+ } -+ return true -+ } -+ } -+ -+ cold.nativeHistogramBucketsPositive.Range(merge(&hot.nativeHistogramBucketsPositive)) -+ cold.nativeHistogramBucketsNegative.Range(merge(&hot.nativeHistogramBucketsNegative)) -+ // Play it simple again and just delete all cold buckets. -+ atomic.StoreUint32(&cold.nativeHistogramBucketsNumber, 0) -+ deleteSyncMap(&cold.nativeHistogramBucketsNegative) -+ deleteSyncMap(&cold.nativeHistogramBucketsPositive) -+} -+ -+func (h *histogram) resetCounts(counts *histogramCounts) { -+ atomic.StoreUint64(&counts.sumBits, 0) -+ atomic.StoreUint64(&counts.count, 0) -+ atomic.StoreUint64(&counts.nativeHistogramZeroBucket, 0) -+ atomic.StoreUint64(&counts.nativeHistogramZeroThresholdBits, math.Float64bits(h.nativeHistogramZeroThreshold)) -+ atomic.StoreInt32(&counts.nativeHistogramSchema, h.nativeHistogramSchema) -+ atomic.StoreUint32(&counts.nativeHistogramBucketsNumber, 0) -+ for i := range h.upperBounds { -+ atomic.StoreUint64(&counts.buckets[i], 0) -+ } -+ deleteSyncMap(&counts.nativeHistogramBucketsNegative) -+ deleteSyncMap(&counts.nativeHistogramBucketsPositive) -+} -+ -+// updateExemplar replaces the exemplar for the provided bucket. With empty -+// labels, it's a no-op. It panics if any of the labels is invalid. -+func (h *histogram) updateExemplar(v float64, bucket int, l Labels) { -+ if l == nil { -+ return -+ } -+ e, err := newExemplar(v, h.now(), l) -+ if err != nil { -+ panic(err) -+ } -+ h.exemplars[bucket].Store(e) -+} -+ -+// HistogramVec is a Collector that bundles a set of Histograms that all share the -+// same Desc, but have different values for their variable labels. This is used -+// if you want to count the same thing partitioned by various dimensions -+// (e.g. HTTP request latencies, partitioned by status code and method). Create -+// instances with NewHistogramVec. -+type HistogramVec struct { -+ *MetricVec -+} -+ -+// NewHistogramVec creates a new HistogramVec based on the provided HistogramOpts and -+// partitioned by the given label names. -+func NewHistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec { -+ desc := NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ labelNames, -+ opts.ConstLabels, -+ ) -+ return &HistogramVec{ -+ MetricVec: NewMetricVec(desc, func(lvs ...string) Metric { -+ return newHistogram(desc, opts, lvs...) -+ }), -+ } -+} -+ -+// GetMetricWithLabelValues returns the Histogram for the given slice of label -+// values (same order as the variable labels in Desc). If that combination of -+// label values is accessed for the first time, a new Histogram is created. -+// -+// It is possible to call this method without using the returned Histogram to only -+// create the new Histogram but leave it at its starting value, a Histogram without -+// any observations. -+// -+// Keeping the Histogram for later use is possible (and should be considered if -+// performance is critical), but keep in mind that Reset, DeleteLabelValues and -+// Delete can be used to delete the Histogram from the HistogramVec. In that case, the -+// Histogram will still exist, but it will not be exported anymore, even if a -+// Histogram with the same label values is created later. See also the CounterVec -+// example. -+// -+// An error is returned if the number of label values is not the same as the -+// number of variable labels in Desc (minus any curried labels). -+// -+// Note that for more than one label value, this method is prone to mistakes -+// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -+// an alternative to avoid that type of mistake. For higher label numbers, the -+// latter has a much more readable (albeit more verbose) syntax, but it comes -+// with a performance overhead (for creating and processing the Labels map). -+// See also the GaugeVec example. -+func (v *HistogramVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) { -+ metric, err := v.MetricVec.GetMetricWithLabelValues(lvs...) -+ if metric != nil { -+ return metric.(Observer), err -+ } -+ return nil, err -+} -+ -+// GetMetricWith returns the Histogram for the given Labels map (the label names -+// must match those of the variable labels in Desc). If that label map is -+// accessed for the first time, a new Histogram is created. Implications of -+// creating a Histogram without using it and keeping the Histogram for later use -+// are the same as for GetMetricWithLabelValues. -+// -+// An error is returned if the number and names of the Labels are inconsistent -+// with those of the variable labels in Desc (minus any curried labels). -+// -+// This method is used for the same purpose as -+// GetMetricWithLabelValues(...string). See there for pros and cons of the two -+// methods. -+func (v *HistogramVec) GetMetricWith(labels Labels) (Observer, error) { -+ metric, err := v.MetricVec.GetMetricWith(labels) -+ if metric != nil { -+ return metric.(Observer), err -+ } -+ return nil, err -+} -+ -+// WithLabelValues works as GetMetricWithLabelValues, but panics where -+// GetMetricWithLabelValues would have returned an error. Not returning an -+// error allows shortcuts like -+// -+// myVec.WithLabelValues("404", "GET").Observe(42.21) -+func (v *HistogramVec) WithLabelValues(lvs ...string) Observer { -+ h, err := v.GetMetricWithLabelValues(lvs...) -+ if err != nil { -+ panic(err) -+ } -+ return h -+} -+ -+// With works as GetMetricWith but panics where GetMetricWithLabels would have -+// returned an error. Not returning an error allows shortcuts like -+// -+// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Observe(42.21) -+func (v *HistogramVec) With(labels Labels) Observer { -+ h, err := v.GetMetricWith(labels) -+ if err != nil { -+ panic(err) -+ } -+ return h -+} -+ -+// CurryWith returns a vector curried with the provided labels, i.e. the -+// returned vector has those labels pre-set for all labeled operations performed -+// on it. The cardinality of the curried vector is reduced accordingly. The -+// order of the remaining labels stays the same (just with the curried labels -+// taken out of the sequence – which is relevant for the -+// (GetMetric)WithLabelValues methods). It is possible to curry a curried -+// vector, but only with labels not yet used for currying before. -+// -+// The metrics contained in the HistogramVec are shared between the curried and -+// uncurried vectors. They are just accessed differently. Curried and uncurried -+// vectors behave identically in terms of collection. Only one must be -+// registered with a given registry (usually the uncurried version). The Reset -+// method deletes all metrics, even if called on a curried vector. -+func (v *HistogramVec) CurryWith(labels Labels) (ObserverVec, error) { -+ vec, err := v.MetricVec.CurryWith(labels) -+ if vec != nil { -+ return &HistogramVec{vec}, err -+ } -+ return nil, err -+} -+ -+// MustCurryWith works as CurryWith but panics where CurryWith would have -+// returned an error. -+func (v *HistogramVec) MustCurryWith(labels Labels) ObserverVec { -+ vec, err := v.CurryWith(labels) -+ if err != nil { -+ panic(err) -+ } -+ return vec -+} -+ -+type constHistogram struct { -+ desc *Desc -+ count uint64 -+ sum float64 -+ buckets map[float64]uint64 -+ labelPairs []*dto.LabelPair -+} -+ -+func (h *constHistogram) Desc() *Desc { -+ return h.desc -+} -+ -+func (h *constHistogram) Write(out *dto.Metric) error { -+ his := &dto.Histogram{} -+ -+ buckets := make([]*dto.Bucket, 0, len(h.buckets)) -+ -+ his.SampleCount = proto.Uint64(h.count) -+ his.SampleSum = proto.Float64(h.sum) -+ for upperBound, count := range h.buckets { -+ buckets = append(buckets, &dto.Bucket{ -+ CumulativeCount: proto.Uint64(count), -+ UpperBound: proto.Float64(upperBound), -+ }) -+ } -+ -+ if len(buckets) > 0 { -+ sort.Sort(buckSort(buckets)) -+ } -+ his.Bucket = buckets -+ -+ out.Histogram = his -+ out.Label = h.labelPairs -+ -+ return nil -+} -+ -+// NewConstHistogram returns a metric representing a Prometheus histogram with -+// fixed values for the count, sum, and bucket counts. As those parameters -+// cannot be changed, the returned value does not implement the Histogram -+// interface (but only the Metric interface). Users of this package will not -+// have much use for it in regular operations. However, when implementing custom -+// Collectors, it is useful as a throw-away metric that is generated on the fly -+// to send it to Prometheus in the Collect method. -+// -+// buckets is a map of upper bounds to cumulative counts, excluding the +Inf -+// bucket. The +Inf bucket is implicit, and its value is equal to the provided count. -+// -+// NewConstHistogram returns an error if the length of labelValues is not -+// consistent with the variable labels in Desc or if Desc is invalid. -+func NewConstHistogram( -+ desc *Desc, -+ count uint64, -+ sum float64, -+ buckets map[float64]uint64, -+ labelValues ...string, -+) (Metric, error) { -+ if desc.err != nil { -+ return nil, desc.err -+ } -+ if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { -+ return nil, err -+ } -+ return &constHistogram{ -+ desc: desc, -+ count: count, -+ sum: sum, -+ buckets: buckets, -+ labelPairs: MakeLabelPairs(desc, labelValues), -+ }, nil -+} -+ -+// MustNewConstHistogram is a version of NewConstHistogram that panics where -+// NewConstHistogram would have returned an error. -+func MustNewConstHistogram( -+ desc *Desc, -+ count uint64, -+ sum float64, -+ buckets map[float64]uint64, -+ labelValues ...string, -+) Metric { -+ m, err := NewConstHistogram(desc, count, sum, buckets, labelValues...) -+ if err != nil { -+ panic(err) -+ } -+ return m -+} -+ -+type buckSort []*dto.Bucket -+ -+func (s buckSort) Len() int { -+ return len(s) -+} -+ -+func (s buckSort) Swap(i, j int) { -+ s[i], s[j] = s[j], s[i] -+} -+ -+func (s buckSort) Less(i, j int) bool { -+ return s[i].GetUpperBound() < s[j].GetUpperBound() -+} -+ -+// pickSchema returns the largest number n between -4 and 8 such that -+// 2^(2^-n) is less or equal the provided bucketFactor. -+// -+// Special cases: -+// - bucketFactor <= 1: panics. -+// - bucketFactor < 2^(2^-8) (but > 1): still returns 8. -+func pickSchema(bucketFactor float64) int32 { -+ if bucketFactor <= 1 { -+ panic(fmt.Errorf("bucketFactor %f is <=1", bucketFactor)) -+ } -+ floor := math.Floor(math.Log2(math.Log2(bucketFactor))) -+ switch { -+ case floor <= -8: -+ return 8 -+ case floor >= 4: -+ return -4 -+ default: -+ return -int32(floor) -+ } -+} -+ -+func makeBuckets(buckets *sync.Map) ([]*dto.BucketSpan, []int64) { -+ var ii []int -+ buckets.Range(func(k, v interface{}) bool { -+ ii = append(ii, k.(int)) -+ return true -+ }) -+ sort.Ints(ii) -+ -+ if len(ii) == 0 { -+ return nil, nil -+ } -+ -+ var ( -+ spans []*dto.BucketSpan -+ deltas []int64 -+ prevCount int64 -+ nextI int -+ ) -+ -+ appendDelta := func(count int64) { -+ *spans[len(spans)-1].Length++ -+ deltas = append(deltas, count-prevCount) -+ prevCount = count -+ } -+ -+ for n, i := range ii { -+ v, _ := buckets.Load(i) -+ count := atomic.LoadInt64(v.(*int64)) -+ // Multiple spans with only small gaps in between are probably -+ // encoded more efficiently as one larger span with a few empty -+ // buckets. Needs some research to find the sweet spot. For now, -+ // we assume that gaps of one ore two buckets should not create -+ // a new span. -+ iDelta := int32(i - nextI) -+ if n == 0 || iDelta > 2 { -+ // We have to create a new span, either because we are -+ // at the very beginning, or because we have found a gap -+ // of more than two buckets. -+ spans = append(spans, &dto.BucketSpan{ -+ Offset: proto.Int32(iDelta), -+ Length: proto.Uint32(0), -+ }) -+ } else { -+ // We have found a small gap (or no gap at all). -+ // Insert empty buckets as needed. -+ for j := int32(0); j < iDelta; j++ { -+ appendDelta(0) -+ } -+ } -+ appendDelta(count) -+ nextI = i + 1 -+ } -+ return spans, deltas -+} -+ -+// addToBucket increments the sparse bucket at key by the provided amount. It -+// returns true if a new sparse bucket had to be created for that. -+func addToBucket(buckets *sync.Map, key int, increment int64) bool { -+ if existingBucket, ok := buckets.Load(key); ok { -+ // Fast path without allocation. -+ atomic.AddInt64(existingBucket.(*int64), increment) -+ return false -+ } -+ // Bucket doesn't exist yet. Slow path allocating new counter. -+ newBucket := increment // TODO(beorn7): Check if this is sufficient to not let increment escape. -+ if actualBucket, loaded := buckets.LoadOrStore(key, &newBucket); loaded { -+ // The bucket was created concurrently in another goroutine. -+ // Have to increment after all. -+ atomic.AddInt64(actualBucket.(*int64), increment) -+ return false -+ } -+ return true -+} -+ -+// addAndReset returns a function to be used with sync.Map.Range of spare -+// buckets in coldCounts. It increments the buckets in the provided hotBuckets -+// according to the buckets ranged through. It then resets all buckets ranged -+// through to 0 (but leaves them in place so that they don't need to get -+// recreated on the next scrape). -+func addAndReset(hotBuckets *sync.Map, bucketNumber *uint32) func(k, v interface{}) bool { -+ return func(k, v interface{}) bool { -+ bucket := v.(*int64) -+ if addToBucket(hotBuckets, k.(int), atomic.LoadInt64(bucket)) { -+ atomic.AddUint32(bucketNumber, 1) -+ } -+ atomic.StoreInt64(bucket, 0) -+ return true -+ } -+} -+ -+func deleteSyncMap(m *sync.Map) { -+ m.Range(func(k, v interface{}) bool { -+ m.Delete(k) -+ return true -+ }) -+} -+ -+func findSmallestKey(m *sync.Map) int { -+ result := math.MaxInt32 -+ m.Range(func(k, v interface{}) bool { -+ key := k.(int) -+ if key < result { -+ result = key -+ } -+ return true -+ }) -+ return result -+} -+ -+func getLe(key int, schema int32) float64 { -+ // Here a bit of context about the behavior for the last bucket counting -+ // regular numbers (called simply "last bucket" below) and the bucket -+ // counting observations of ±Inf (called "inf bucket" below, with a key -+ // one higher than that of the "last bucket"): -+ // -+ // If we apply the usual formula to the last bucket, its upper bound -+ // would be calculated as +Inf. The reason is that the max possible -+ // regular float64 number (math.MaxFloat64) doesn't coincide with one of -+ // the calculated bucket boundaries. So the calculated boundary has to -+ // be larger than math.MaxFloat64, and the only float64 larger than -+ // math.MaxFloat64 is +Inf. However, we want to count actual -+ // observations of ±Inf in the inf bucket. Therefore, we have to treat -+ // the upper bound of the last bucket specially and set it to -+ // math.MaxFloat64. (The upper bound of the inf bucket, with its key -+ // being one higher than that of the last bucket, naturally comes out as -+ // +Inf by the usual formula. So that's fine.) -+ // -+ // math.MaxFloat64 has a frac of 0.9999999999999999 and an exp of -+ // 1024. If there were a float64 number following math.MaxFloat64, it -+ // would have a frac of 1.0 and an exp of 1024, or equivalently a frac -+ // of 0.5 and an exp of 1025. However, since frac must be smaller than -+ // 1, and exp must be smaller than 1025, either representation overflows -+ // a float64. (Which, in turn, is the reason that math.MaxFloat64 is the -+ // largest possible float64. Q.E.D.) However, the formula for -+ // calculating the upper bound from the idx and schema of the last -+ // bucket results in precisely that. It is either frac=1.0 & exp=1024 -+ // (for schema < 0) or frac=0.5 & exp=1025 (for schema >=0). (This is, -+ // by the way, a power of two where the exponent itself is a power of -+ // two, 2¹⁰ in fact, which coinicides with a bucket boundary in all -+ // schemas.) So these are the special cases we have to catch below. -+ if schema < 0 { -+ exp := key << -schema -+ if exp == 1024 { -+ // This is the last bucket before the overflow bucket -+ // (for ±Inf observations). Return math.MaxFloat64 as -+ // explained above. -+ return math.MaxFloat64 -+ } -+ return math.Ldexp(1, exp) -+ } -+ -+ fracIdx := key & ((1 << schema) - 1) -+ frac := nativeHistogramBounds[schema][fracIdx] -+ exp := (key >> schema) + 1 -+ if frac == 0.5 && exp == 1025 { -+ // This is the last bucket before the overflow bucket (for ±Inf -+ // observations). Return math.MaxFloat64 as explained above. -+ return math.MaxFloat64 -+ } -+ return math.Ldexp(frac, exp) -+} -+ -+// waitForCooldown returns after the count field in the provided histogramCounts -+// has reached the provided count value. -+func waitForCooldown(count uint64, counts *histogramCounts) { -+ for count != atomic.LoadUint64(&counts.count) { -+ runtime.Gosched() // Let observations get work done. -+ } -+} -+ -+// atomicAddFloat adds the provided float atomically to another float -+// represented by the bit pattern the bits pointer is pointing to. -+func atomicAddFloat(bits *uint64, v float64) { -+ for { -+ loadedBits := atomic.LoadUint64(bits) -+ newBits := math.Float64bits(math.Float64frombits(loadedBits) + v) -+ if atomic.CompareAndSwapUint64(bits, loadedBits, newBits) { -+ break -+ } -+ } -+} -+ -+// atomicDecUint32 atomically decrements the uint32 p points to. See -+// https://pkg.go.dev/sync/atomic#AddUint32 to understand how this is done. -+func atomicDecUint32(p *uint32) { -+ atomic.AddUint32(p, ^uint32(0)) -+} -+ -+// addAndResetCounts adds certain fields (count, sum, conventional buckets, zero -+// bucket) from the cold counts to the corresponding fields in the hot -+// counts. Those fields are then reset to 0 in the cold counts. -+func addAndResetCounts(hot, cold *histogramCounts) { -+ atomic.AddUint64(&hot.count, atomic.LoadUint64(&cold.count)) -+ atomic.StoreUint64(&cold.count, 0) -+ coldSum := math.Float64frombits(atomic.LoadUint64(&cold.sumBits)) -+ atomicAddFloat(&hot.sumBits, coldSum) -+ atomic.StoreUint64(&cold.sumBits, 0) -+ for i := range hot.buckets { -+ atomic.AddUint64(&hot.buckets[i], atomic.LoadUint64(&cold.buckets[i])) -+ atomic.StoreUint64(&cold.buckets[i], 0) -+ } -+ atomic.AddUint64(&hot.nativeHistogramZeroBucket, atomic.LoadUint64(&cold.nativeHistogramZeroBucket)) -+ atomic.StoreUint64(&cold.nativeHistogramZeroBucket, 0) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/almost_equal.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/almost_equal.go -new file mode 100755 -index 0000000..1ed5abe ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/almost_equal.go -@@ -0,0 +1,60 @@ -+// Copyright (c) 2015 Björn Rabenstein -+// -+// Permission is hereby granted, free of charge, to any person obtaining a copy -+// of this software and associated documentation files (the "Software"), to deal -+// in the Software without restriction, including without limitation the rights -+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+// copies of the Software, and to permit persons to whom the Software is -+// furnished to do so, subject to the following conditions: -+// -+// The above copyright notice and this permission notice shall be included in all -+// copies or substantial portions of the Software. -+// -+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+// SOFTWARE. -+// -+// The code in this package is copy/paste to avoid a dependency. Hence this file -+// carries the copyright of the original repo. -+// https://github.com/beorn7/floats -+package internal -+ -+import ( -+ "math" -+) -+ -+// minNormalFloat64 is the smallest positive normal value of type float64. -+var minNormalFloat64 = math.Float64frombits(0x0010000000000000) -+ -+// AlmostEqualFloat64 returns true if a and b are equal within a relative error -+// of epsilon. See http://floating-point-gui.de/errors/comparison/ for the -+// details of the applied method. -+func AlmostEqualFloat64(a, b, epsilon float64) bool { -+ if a == b { -+ return true -+ } -+ absA := math.Abs(a) -+ absB := math.Abs(b) -+ diff := math.Abs(a - b) -+ if a == 0 || b == 0 || absA+absB < minNormalFloat64 { -+ return diff < epsilon*minNormalFloat64 -+ } -+ return diff/math.Min(absA+absB, math.MaxFloat64) < epsilon -+} -+ -+// AlmostEqualFloat64s is the slice form of AlmostEqualFloat64. -+func AlmostEqualFloat64s(a, b []float64, epsilon float64) bool { -+ if len(a) != len(b) { -+ return false -+ } -+ for i := range a { -+ if !AlmostEqualFloat64(a[i], b[i], epsilon) { -+ return false -+ } -+ } -+ return true -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go -new file mode 100755 -index 0000000..fd0750f ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go -@@ -0,0 +1,654 @@ -+// Copyright 2022 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+// -+// It provides tools to compare sequences of strings and generate textual diffs. -+// -+// Maintaining `GetUnifiedDiffString` here because original repository -+// (https://github.com/pmezard/go-difflib) is no loger maintained. -+package internal -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strings" -+) -+ -+func min(a, b int) int { -+ if a < b { -+ return a -+ } -+ return b -+} -+ -+func max(a, b int) int { -+ if a > b { -+ return a -+ } -+ return b -+} -+ -+func calculateRatio(matches, length int) float64 { -+ if length > 0 { -+ return 2.0 * float64(matches) / float64(length) -+ } -+ return 1.0 -+} -+ -+type Match struct { -+ A int -+ B int -+ Size int -+} -+ -+type OpCode struct { -+ Tag byte -+ I1 int -+ I2 int -+ J1 int -+ J2 int -+} -+ -+// SequenceMatcher compares sequence of strings. The basic -+// algorithm predates, and is a little fancier than, an algorithm -+// published in the late 1980's by Ratcliff and Obershelp under the -+// hyperbolic name "gestalt pattern matching". The basic idea is to find -+// the longest contiguous matching subsequence that contains no "junk" -+// elements (R-O doesn't address junk). The same idea is then applied -+// recursively to the pieces of the sequences to the left and to the right -+// of the matching subsequence. This does not yield minimal edit -+// sequences, but does tend to yield matches that "look right" to people. -+// -+// SequenceMatcher tries to compute a "human-friendly diff" between two -+// sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the -+// longest *contiguous* & junk-free matching subsequence. That's what -+// catches peoples' eyes. The Windows(tm) windiff has another interesting -+// notion, pairing up elements that appear uniquely in each sequence. -+// That, and the method here, appear to yield more intuitive difference -+// reports than does diff. This method appears to be the least vulnerable -+// to synching up on blocks of "junk lines", though (like blank lines in -+// ordinary text files, or maybe "

" lines in HTML files). That may be -+// because this is the only method of the 3 that has a *concept* of -+// "junk" . -+// -+// Timing: Basic R-O is cubic time worst case and quadratic time expected -+// case. SequenceMatcher is quadratic time for the worst case and has -+// expected-case behavior dependent in a complicated way on how many -+// elements the sequences have in common; best case time is linear. -+type SequenceMatcher struct { -+ a []string -+ b []string -+ b2j map[string][]int -+ IsJunk func(string) bool -+ autoJunk bool -+ bJunk map[string]struct{} -+ matchingBlocks []Match -+ fullBCount map[string]int -+ bPopular map[string]struct{} -+ opCodes []OpCode -+} -+ -+func NewMatcher(a, b []string) *SequenceMatcher { -+ m := SequenceMatcher{autoJunk: true} -+ m.SetSeqs(a, b) -+ return &m -+} -+ -+func NewMatcherWithJunk(a, b []string, autoJunk bool, -+ isJunk func(string) bool, -+) *SequenceMatcher { -+ m := SequenceMatcher{IsJunk: isJunk, autoJunk: autoJunk} -+ m.SetSeqs(a, b) -+ return &m -+} -+ -+// Set two sequences to be compared. -+func (m *SequenceMatcher) SetSeqs(a, b []string) { -+ m.SetSeq1(a) -+ m.SetSeq2(b) -+} -+ -+// Set the first sequence to be compared. The second sequence to be compared is -+// not changed. -+// -+// SequenceMatcher computes and caches detailed information about the second -+// sequence, so if you want to compare one sequence S against many sequences, -+// use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other -+// sequences. -+// -+// See also SetSeqs() and SetSeq2(). -+func (m *SequenceMatcher) SetSeq1(a []string) { -+ if &a == &m.a { -+ return -+ } -+ m.a = a -+ m.matchingBlocks = nil -+ m.opCodes = nil -+} -+ -+// Set the second sequence to be compared. The first sequence to be compared is -+// not changed. -+func (m *SequenceMatcher) SetSeq2(b []string) { -+ if &b == &m.b { -+ return -+ } -+ m.b = b -+ m.matchingBlocks = nil -+ m.opCodes = nil -+ m.fullBCount = nil -+ m.chainB() -+} -+ -+func (m *SequenceMatcher) chainB() { -+ // Populate line -> index mapping -+ b2j := map[string][]int{} -+ for i, s := range m.b { -+ indices := b2j[s] -+ indices = append(indices, i) -+ b2j[s] = indices -+ } -+ -+ // Purge junk elements -+ m.bJunk = map[string]struct{}{} -+ if m.IsJunk != nil { -+ junk := m.bJunk -+ for s := range b2j { -+ if m.IsJunk(s) { -+ junk[s] = struct{}{} -+ } -+ } -+ for s := range junk { -+ delete(b2j, s) -+ } -+ } -+ -+ // Purge remaining popular elements -+ popular := map[string]struct{}{} -+ n := len(m.b) -+ if m.autoJunk && n >= 200 { -+ ntest := n/100 + 1 -+ for s, indices := range b2j { -+ if len(indices) > ntest { -+ popular[s] = struct{}{} -+ } -+ } -+ for s := range popular { -+ delete(b2j, s) -+ } -+ } -+ m.bPopular = popular -+ m.b2j = b2j -+} -+ -+func (m *SequenceMatcher) isBJunk(s string) bool { -+ _, ok := m.bJunk[s] -+ return ok -+} -+ -+// Find longest matching block in a[alo:ahi] and b[blo:bhi]. -+// -+// If IsJunk is not defined: -+// -+// Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where -+// -+// alo <= i <= i+k <= ahi -+// blo <= j <= j+k <= bhi -+// -+// and for all (i',j',k') meeting those conditions, -+// -+// k >= k' -+// i <= i' -+// and if i == i', j <= j' -+// -+// In other words, of all maximal matching blocks, return one that -+// starts earliest in a, and of all those maximal matching blocks that -+// start earliest in a, return the one that starts earliest in b. -+// -+// If IsJunk is defined, first the longest matching block is -+// determined as above, but with the additional restriction that no -+// junk element appears in the block. Then that block is extended as -+// far as possible by matching (only) junk elements on both sides. So -+// the resulting block never matches on junk except as identical junk -+// happens to be adjacent to an "interesting" match. -+// -+// If no blocks match, return (alo, blo, 0). -+func (m *SequenceMatcher) findLongestMatch(alo, ahi, blo, bhi int) Match { -+ // CAUTION: stripping common prefix or suffix would be incorrect. -+ // E.g., -+ // ab -+ // acab -+ // Longest matching block is "ab", but if common prefix is -+ // stripped, it's "a" (tied with "b"). UNIX(tm) diff does so -+ // strip, so ends up claiming that ab is changed to acab by -+ // inserting "ca" in the middle. That's minimal but unintuitive: -+ // "it's obvious" that someone inserted "ac" at the front. -+ // Windiff ends up at the same place as diff, but by pairing up -+ // the unique 'b's and then matching the first two 'a's. -+ besti, bestj, bestsize := alo, blo, 0 -+ -+ // find longest junk-free match -+ // during an iteration of the loop, j2len[j] = length of longest -+ // junk-free match ending with a[i-1] and b[j] -+ j2len := map[int]int{} -+ for i := alo; i != ahi; i++ { -+ // look at all instances of a[i] in b; note that because -+ // b2j has no junk keys, the loop is skipped if a[i] is junk -+ newj2len := map[int]int{} -+ for _, j := range m.b2j[m.a[i]] { -+ // a[i] matches b[j] -+ if j < blo { -+ continue -+ } -+ if j >= bhi { -+ break -+ } -+ k := j2len[j-1] + 1 -+ newj2len[j] = k -+ if k > bestsize { -+ besti, bestj, bestsize = i-k+1, j-k+1, k -+ } -+ } -+ j2len = newj2len -+ } -+ -+ // Extend the best by non-junk elements on each end. In particular, -+ // "popular" non-junk elements aren't in b2j, which greatly speeds -+ // the inner loop above, but also means "the best" match so far -+ // doesn't contain any junk *or* popular non-junk elements. -+ for besti > alo && bestj > blo && !m.isBJunk(m.b[bestj-1]) && -+ m.a[besti-1] == m.b[bestj-1] { -+ besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 -+ } -+ for besti+bestsize < ahi && bestj+bestsize < bhi && -+ !m.isBJunk(m.b[bestj+bestsize]) && -+ m.a[besti+bestsize] == m.b[bestj+bestsize] { -+ bestsize++ -+ } -+ -+ // Now that we have a wholly interesting match (albeit possibly -+ // empty!), we may as well suck up the matching junk on each -+ // side of it too. Can't think of a good reason not to, and it -+ // saves post-processing the (possibly considerable) expense of -+ // figuring out what to do with it. In the case of an empty -+ // interesting match, this is clearly the right thing to do, -+ // because no other kind of match is possible in the regions. -+ for besti > alo && bestj > blo && m.isBJunk(m.b[bestj-1]) && -+ m.a[besti-1] == m.b[bestj-1] { -+ besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 -+ } -+ for besti+bestsize < ahi && bestj+bestsize < bhi && -+ m.isBJunk(m.b[bestj+bestsize]) && -+ m.a[besti+bestsize] == m.b[bestj+bestsize] { -+ bestsize++ -+ } -+ -+ return Match{A: besti, B: bestj, Size: bestsize} -+} -+ -+// Return list of triples describing matching subsequences. -+// -+// Each triple is of the form (i, j, n), and means that -+// a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in -+// i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are -+// adjacent triples in the list, and the second is not the last triple in the -+// list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe -+// adjacent equal blocks. -+// -+// The last triple is a dummy, (len(a), len(b), 0), and is the only -+// triple with n==0. -+func (m *SequenceMatcher) GetMatchingBlocks() []Match { -+ if m.matchingBlocks != nil { -+ return m.matchingBlocks -+ } -+ -+ var matchBlocks func(alo, ahi, blo, bhi int, matched []Match) []Match -+ matchBlocks = func(alo, ahi, blo, bhi int, matched []Match) []Match { -+ match := m.findLongestMatch(alo, ahi, blo, bhi) -+ i, j, k := match.A, match.B, match.Size -+ if match.Size > 0 { -+ if alo < i && blo < j { -+ matched = matchBlocks(alo, i, blo, j, matched) -+ } -+ matched = append(matched, match) -+ if i+k < ahi && j+k < bhi { -+ matched = matchBlocks(i+k, ahi, j+k, bhi, matched) -+ } -+ } -+ return matched -+ } -+ matched := matchBlocks(0, len(m.a), 0, len(m.b), nil) -+ -+ // It's possible that we have adjacent equal blocks in the -+ // matching_blocks list now. -+ nonAdjacent := []Match{} -+ i1, j1, k1 := 0, 0, 0 -+ for _, b := range matched { -+ // Is this block adjacent to i1, j1, k1? -+ i2, j2, k2 := b.A, b.B, b.Size -+ if i1+k1 == i2 && j1+k1 == j2 { -+ // Yes, so collapse them -- this just increases the length of -+ // the first block by the length of the second, and the first -+ // block so lengthened remains the block to compare against. -+ k1 += k2 -+ } else { -+ // Not adjacent. Remember the first block (k1==0 means it's -+ // the dummy we started with), and make the second block the -+ // new block to compare against. -+ if k1 > 0 { -+ nonAdjacent = append(nonAdjacent, Match{i1, j1, k1}) -+ } -+ i1, j1, k1 = i2, j2, k2 -+ } -+ } -+ if k1 > 0 { -+ nonAdjacent = append(nonAdjacent, Match{i1, j1, k1}) -+ } -+ -+ nonAdjacent = append(nonAdjacent, Match{len(m.a), len(m.b), 0}) -+ m.matchingBlocks = nonAdjacent -+ return m.matchingBlocks -+} -+ -+// Return list of 5-tuples describing how to turn a into b. -+// -+// Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple -+// has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the -+// tuple preceding it, and likewise for j1 == the previous j2. -+// -+// The tags are characters, with these meanings: -+// -+// 'r' (replace): a[i1:i2] should be replaced by b[j1:j2] -+// -+// 'd' (delete): a[i1:i2] should be deleted, j1==j2 in this case. -+// -+// 'i' (insert): b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case. -+// -+// 'e' (equal): a[i1:i2] == b[j1:j2] -+func (m *SequenceMatcher) GetOpCodes() []OpCode { -+ if m.opCodes != nil { -+ return m.opCodes -+ } -+ i, j := 0, 0 -+ matching := m.GetMatchingBlocks() -+ opCodes := make([]OpCode, 0, len(matching)) -+ for _, m := range matching { -+ // invariant: we've pumped out correct diffs to change -+ // a[:i] into b[:j], and the next matching block is -+ // a[ai:ai+size] == b[bj:bj+size]. So we need to pump -+ // out a diff to change a[i:ai] into b[j:bj], pump out -+ // the matching block, and move (i,j) beyond the match -+ ai, bj, size := m.A, m.B, m.Size -+ tag := byte(0) -+ if i < ai && j < bj { -+ tag = 'r' -+ } else if i < ai { -+ tag = 'd' -+ } else if j < bj { -+ tag = 'i' -+ } -+ if tag > 0 { -+ opCodes = append(opCodes, OpCode{tag, i, ai, j, bj}) -+ } -+ i, j = ai+size, bj+size -+ // the list of matching blocks is terminated by a -+ // sentinel with size 0 -+ if size > 0 { -+ opCodes = append(opCodes, OpCode{'e', ai, i, bj, j}) -+ } -+ } -+ m.opCodes = opCodes -+ return m.opCodes -+} -+ -+// Isolate change clusters by eliminating ranges with no changes. -+// -+// Return a generator of groups with up to n lines of context. -+// Each group is in the same format as returned by GetOpCodes(). -+func (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode { -+ if n < 0 { -+ n = 3 -+ } -+ codes := m.GetOpCodes() -+ if len(codes) == 0 { -+ codes = []OpCode{{'e', 0, 1, 0, 1}} -+ } -+ // Fixup leading and trailing groups if they show no changes. -+ if codes[0].Tag == 'e' { -+ c := codes[0] -+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 -+ codes[0] = OpCode{c.Tag, max(i1, i2-n), i2, max(j1, j2-n), j2} -+ } -+ if codes[len(codes)-1].Tag == 'e' { -+ c := codes[len(codes)-1] -+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 -+ codes[len(codes)-1] = OpCode{c.Tag, i1, min(i2, i1+n), j1, min(j2, j1+n)} -+ } -+ nn := n + n -+ groups := [][]OpCode{} -+ group := []OpCode{} -+ for _, c := range codes { -+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 -+ // End the current group and start a new one whenever -+ // there is a large range with no changes. -+ if c.Tag == 'e' && i2-i1 > nn { -+ group = append(group, OpCode{ -+ c.Tag, i1, min(i2, i1+n), -+ j1, min(j2, j1+n), -+ }) -+ groups = append(groups, group) -+ group = []OpCode{} -+ i1, j1 = max(i1, i2-n), max(j1, j2-n) -+ } -+ group = append(group, OpCode{c.Tag, i1, i2, j1, j2}) -+ } -+ if len(group) > 0 && !(len(group) == 1 && group[0].Tag == 'e') { -+ groups = append(groups, group) -+ } -+ return groups -+} -+ -+// Return a measure of the sequences' similarity (float in [0,1]). -+// -+// Where T is the total number of elements in both sequences, and -+// M is the number of matches, this is 2.0*M / T. -+// Note that this is 1 if the sequences are identical, and 0 if -+// they have nothing in common. -+// -+// .Ratio() is expensive to compute if you haven't already computed -+// .GetMatchingBlocks() or .GetOpCodes(), in which case you may -+// want to try .QuickRatio() or .RealQuickRation() first to get an -+// upper bound. -+func (m *SequenceMatcher) Ratio() float64 { -+ matches := 0 -+ for _, m := range m.GetMatchingBlocks() { -+ matches += m.Size -+ } -+ return calculateRatio(matches, len(m.a)+len(m.b)) -+} -+ -+// Return an upper bound on ratio() relatively quickly. -+// -+// This isn't defined beyond that it is an upper bound on .Ratio(), and -+// is faster to compute. -+func (m *SequenceMatcher) QuickRatio() float64 { -+ // viewing a and b as multisets, set matches to the cardinality -+ // of their intersection; this counts the number of matches -+ // without regard to order, so is clearly an upper bound -+ if m.fullBCount == nil { -+ m.fullBCount = map[string]int{} -+ for _, s := range m.b { -+ m.fullBCount[s]++ -+ } -+ } -+ -+ // avail[x] is the number of times x appears in 'b' less the -+ // number of times we've seen it in 'a' so far ... kinda -+ avail := map[string]int{} -+ matches := 0 -+ for _, s := range m.a { -+ n, ok := avail[s] -+ if !ok { -+ n = m.fullBCount[s] -+ } -+ avail[s] = n - 1 -+ if n > 0 { -+ matches++ -+ } -+ } -+ return calculateRatio(matches, len(m.a)+len(m.b)) -+} -+ -+// Return an upper bound on ratio() very quickly. -+// -+// This isn't defined beyond that it is an upper bound on .Ratio(), and -+// is faster to compute than either .Ratio() or .QuickRatio(). -+func (m *SequenceMatcher) RealQuickRatio() float64 { -+ la, lb := len(m.a), len(m.b) -+ return calculateRatio(min(la, lb), la+lb) -+} -+ -+// Convert range to the "ed" format -+func formatRangeUnified(start, stop int) string { -+ // Per the diff spec at http://www.unix.org/single_unix_specification/ -+ beginning := start + 1 // lines start numbering with one -+ length := stop - start -+ if length == 1 { -+ return fmt.Sprintf("%d", beginning) -+ } -+ if length == 0 { -+ beginning-- // empty ranges begin at line just before the range -+ } -+ return fmt.Sprintf("%d,%d", beginning, length) -+} -+ -+// Unified diff parameters -+type UnifiedDiff struct { -+ A []string // First sequence lines -+ FromFile string // First file name -+ FromDate string // First file time -+ B []string // Second sequence lines -+ ToFile string // Second file name -+ ToDate string // Second file time -+ Eol string // Headers end of line, defaults to LF -+ Context int // Number of context lines -+} -+ -+// Compare two sequences of lines; generate the delta as a unified diff. -+// -+// Unified diffs are a compact way of showing line changes and a few -+// lines of context. The number of context lines is set by 'n' which -+// defaults to three. -+// -+// By default, the diff control lines (those with ---, +++, or @@) are -+// created with a trailing newline. This is helpful so that inputs -+// created from file.readlines() result in diffs that are suitable for -+// file.writelines() since both the inputs and outputs have trailing -+// newlines. -+// -+// For inputs that do not have trailing newlines, set the lineterm -+// argument to "" so that the output will be uniformly newline free. -+// -+// The unidiff format normally has a header for filenames and modification -+// times. Any or all of these may be specified using strings for -+// 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. -+// The modification times are normally expressed in the ISO 8601 format. -+func WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error { -+ buf := bufio.NewWriter(writer) -+ defer buf.Flush() -+ wf := func(format string, args ...interface{}) error { -+ _, err := buf.WriteString(fmt.Sprintf(format, args...)) -+ return err -+ } -+ ws := func(s string) error { -+ _, err := buf.WriteString(s) -+ return err -+ } -+ -+ if len(diff.Eol) == 0 { -+ diff.Eol = "\n" -+ } -+ -+ started := false -+ m := NewMatcher(diff.A, diff.B) -+ for _, g := range m.GetGroupedOpCodes(diff.Context) { -+ if !started { -+ started = true -+ fromDate := "" -+ if len(diff.FromDate) > 0 { -+ fromDate = "\t" + diff.FromDate -+ } -+ toDate := "" -+ if len(diff.ToDate) > 0 { -+ toDate = "\t" + diff.ToDate -+ } -+ if diff.FromFile != "" || diff.ToFile != "" { -+ err := wf("--- %s%s%s", diff.FromFile, fromDate, diff.Eol) -+ if err != nil { -+ return err -+ } -+ err = wf("+++ %s%s%s", diff.ToFile, toDate, diff.Eol) -+ if err != nil { -+ return err -+ } -+ } -+ } -+ first, last := g[0], g[len(g)-1] -+ range1 := formatRangeUnified(first.I1, last.I2) -+ range2 := formatRangeUnified(first.J1, last.J2) -+ if err := wf("@@ -%s +%s @@%s", range1, range2, diff.Eol); err != nil { -+ return err -+ } -+ for _, c := range g { -+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 -+ if c.Tag == 'e' { -+ for _, line := range diff.A[i1:i2] { -+ if err := ws(" " + line); err != nil { -+ return err -+ } -+ } -+ continue -+ } -+ if c.Tag == 'r' || c.Tag == 'd' { -+ for _, line := range diff.A[i1:i2] { -+ if err := ws("-" + line); err != nil { -+ return err -+ } -+ } -+ } -+ if c.Tag == 'r' || c.Tag == 'i' { -+ for _, line := range diff.B[j1:j2] { -+ if err := ws("+" + line); err != nil { -+ return err -+ } -+ } -+ } -+ } -+ } -+ return nil -+} -+ -+// Like WriteUnifiedDiff but returns the diff a string. -+func GetUnifiedDiffString(diff UnifiedDiff) (string, error) { -+ w := &bytes.Buffer{} -+ err := WriteUnifiedDiff(w, diff) -+ return w.String(), err -+} -+ -+// Split a string on "\n" while preserving them. The output can be used -+// as input for UnifiedDiff and ContextDiff structures. -+func SplitLines(s string) []string { -+ lines := strings.SplitAfter(s, "\n") -+ lines[len(lines)-1] += "\n" -+ return lines -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go -new file mode 100755 -index 0000000..723b45d ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go -@@ -0,0 +1,32 @@ -+// Copyright 2021 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package internal -+ -+import "regexp" -+ -+type GoCollectorRule struct { -+ Matcher *regexp.Regexp -+ Deny bool -+} -+ -+// GoCollectorOptions should not be used be directly by anything, except `collectors` package. -+// Use it via collectors package instead. See issue -+// https://github.com/prometheus/client_golang/issues/1030. -+// -+// This is internal, so external users only can use it via `collector.WithGoCollector*` methods -+type GoCollectorOptions struct { -+ DisableMemStatsLikeMetrics bool -+ RuntimeMetricSumForHist map[string]string -+ RuntimeMetricRules []GoCollectorRule -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.go -new file mode 100755 -index 0000000..97d17d6 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.go -@@ -0,0 +1,142 @@ -+// Copyright 2021 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build go1.17 -+// +build go1.17 -+ -+package internal -+ -+import ( -+ "math" -+ "path" -+ "runtime/metrics" -+ "strings" -+ -+ "github.com/prometheus/common/model" -+) -+ -+// RuntimeMetricsToProm produces a Prometheus metric name from a runtime/metrics -+// metric description and validates whether the metric is suitable for integration -+// with Prometheus. -+// -+// Returns false if a name could not be produced, or if Prometheus does not understand -+// the runtime/metrics Kind. -+// -+// Note that the main reason a name couldn't be produced is if the runtime/metrics -+// package exports a name with characters outside the valid Prometheus metric name -+// character set. This is theoretically possible, but should never happen in practice. -+// Still, don't rely on it. -+func RuntimeMetricsToProm(d *metrics.Description) (string, string, string, bool) { -+ namespace := "go" -+ -+ comp := strings.SplitN(d.Name, ":", 2) -+ key := comp[0] -+ unit := comp[1] -+ -+ // The last path element in the key is the name, -+ // the rest is the subsystem. -+ subsystem := path.Dir(key[1:] /* remove leading / */) -+ name := path.Base(key) -+ -+ // subsystem is translated by replacing all / and - with _. -+ subsystem = strings.ReplaceAll(subsystem, "/", "_") -+ subsystem = strings.ReplaceAll(subsystem, "-", "_") -+ -+ // unit is translated assuming that the unit contains no -+ // non-ASCII characters. -+ unit = strings.ReplaceAll(unit, "-", "_") -+ unit = strings.ReplaceAll(unit, "*", "_") -+ unit = strings.ReplaceAll(unit, "/", "_per_") -+ -+ // name has - replaced with _ and is concatenated with the unit and -+ // other data. -+ name = strings.ReplaceAll(name, "-", "_") -+ name += "_" + unit -+ if d.Cumulative && d.Kind != metrics.KindFloat64Histogram { -+ name += "_total" -+ } -+ -+ valid := model.IsValidMetricName(model.LabelValue(namespace + "_" + subsystem + "_" + name)) -+ switch d.Kind { -+ case metrics.KindUint64: -+ case metrics.KindFloat64: -+ case metrics.KindFloat64Histogram: -+ default: -+ valid = false -+ } -+ return namespace, subsystem, name, valid -+} -+ -+// RuntimeMetricsBucketsForUnit takes a set of buckets obtained for a runtime/metrics histogram -+// type (so, lower-bound inclusive) and a unit from a runtime/metrics name, and produces -+// a reduced set of buckets. This function always removes any -Inf bucket as it's represented -+// as the bottom-most upper-bound inclusive bucket in Prometheus. -+func RuntimeMetricsBucketsForUnit(buckets []float64, unit string) []float64 { -+ switch unit { -+ case "bytes": -+ // Re-bucket as powers of 2. -+ return reBucketExp(buckets, 2) -+ case "seconds": -+ // Re-bucket as powers of 10 and then merge all buckets greater -+ // than 1 second into the +Inf bucket. -+ b := reBucketExp(buckets, 10) -+ for i := range b { -+ if b[i] <= 1 { -+ continue -+ } -+ b[i] = math.Inf(1) -+ b = b[:i+1] -+ break -+ } -+ return b -+ } -+ return buckets -+} -+ -+// reBucketExp takes a list of bucket boundaries (lower bound inclusive) and -+// downsamples the buckets to those a multiple of base apart. The end result -+// is a roughly exponential (in many cases, perfectly exponential) bucketing -+// scheme. -+func reBucketExp(buckets []float64, base float64) []float64 { -+ bucket := buckets[0] -+ var newBuckets []float64 -+ // We may see a -Inf here, in which case, add it and skip it -+ // since we risk producing NaNs otherwise. -+ // -+ // We need to preserve -Inf values to maintain runtime/metrics -+ // conventions. We'll strip it out later. -+ if bucket == math.Inf(-1) { -+ newBuckets = append(newBuckets, bucket) -+ buckets = buckets[1:] -+ bucket = buckets[0] -+ } -+ // From now on, bucket should always have a non-Inf value because -+ // Infs are only ever at the ends of the bucket lists, so -+ // arithmetic operations on it are non-NaN. -+ for i := 1; i < len(buckets); i++ { -+ if bucket >= 0 && buckets[i] < bucket*base { -+ // The next bucket we want to include is at least bucket*base. -+ continue -+ } else if bucket < 0 && buckets[i] < bucket/base { -+ // In this case the bucket we're targeting is negative, and since -+ // we're ascending through buckets here, we need to divide to get -+ // closer to zero exponentially. -+ continue -+ } -+ // The +Inf bucket will always be the last one, and we'll always -+ // end up including it here because bucket -+ newBuckets = append(newBuckets, bucket) -+ bucket = buckets[i] -+ } -+ return append(newBuckets, bucket) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go -new file mode 100755 -index 0000000..6515c11 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go -@@ -0,0 +1,101 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package internal -+ -+import ( -+ "sort" -+ -+ dto "github.com/prometheus/client_model/go" -+) -+ -+// LabelPairSorter implements sort.Interface. It is used to sort a slice of -+// dto.LabelPair pointers. -+type LabelPairSorter []*dto.LabelPair -+ -+func (s LabelPairSorter) Len() int { -+ return len(s) -+} -+ -+func (s LabelPairSorter) Swap(i, j int) { -+ s[i], s[j] = s[j], s[i] -+} -+ -+func (s LabelPairSorter) Less(i, j int) bool { -+ return s[i].GetName() < s[j].GetName() -+} -+ -+// MetricSorter is a sortable slice of *dto.Metric. -+type MetricSorter []*dto.Metric -+ -+func (s MetricSorter) Len() int { -+ return len(s) -+} -+ -+func (s MetricSorter) Swap(i, j int) { -+ s[i], s[j] = s[j], s[i] -+} -+ -+func (s MetricSorter) Less(i, j int) bool { -+ if len(s[i].Label) != len(s[j].Label) { -+ // This should not happen. The metrics are -+ // inconsistent. However, we have to deal with the fact, as -+ // people might use custom collectors or metric family injection -+ // to create inconsistent metrics. So let's simply compare the -+ // number of labels in this case. That will still yield -+ // reproducible sorting. -+ return len(s[i].Label) < len(s[j].Label) -+ } -+ for n, lp := range s[i].Label { -+ vi := lp.GetValue() -+ vj := s[j].Label[n].GetValue() -+ if vi != vj { -+ return vi < vj -+ } -+ } -+ -+ // We should never arrive here. Multiple metrics with the same -+ // label set in the same scrape will lead to undefined ingestion -+ // behavior. However, as above, we have to provide stable sorting -+ // here, even for inconsistent metrics. So sort equal metrics -+ // by their timestamp, with missing timestamps (implying "now") -+ // coming last. -+ if s[i].TimestampMs == nil { -+ return false -+ } -+ if s[j].TimestampMs == nil { -+ return true -+ } -+ return s[i].GetTimestampMs() < s[j].GetTimestampMs() -+} -+ -+// NormalizeMetricFamilies returns a MetricFamily slice with empty -+// MetricFamilies pruned and the remaining MetricFamilies sorted by name within -+// the slice, with the contained Metrics sorted within each MetricFamily. -+func NormalizeMetricFamilies(metricFamiliesByName map[string]*dto.MetricFamily) []*dto.MetricFamily { -+ for _, mf := range metricFamiliesByName { -+ sort.Sort(MetricSorter(mf.Metric)) -+ } -+ names := make([]string, 0, len(metricFamiliesByName)) -+ for name, mf := range metricFamiliesByName { -+ if len(mf.Metric) > 0 { -+ names = append(names, name) -+ } -+ } -+ sort.Strings(names) -+ result := make([]*dto.MetricFamily, 0, len(names)) -+ for _, name := range names { -+ result = append(result, metricFamiliesByName[name]) -+ } -+ return result -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/labels.go b/vendor/github.com/prometheus/client_golang/prometheus/labels.go -new file mode 100755 -index 0000000..c1b8fad ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/labels.go -@@ -0,0 +1,88 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "errors" -+ "fmt" -+ "strings" -+ "unicode/utf8" -+ -+ "github.com/prometheus/common/model" -+) -+ -+// Labels represents a collection of label name -> value mappings. This type is -+// commonly used with the With(Labels) and GetMetricWith(Labels) methods of -+// metric vector Collectors, e.g.: -+// -+// myVec.With(Labels{"code": "404", "method": "GET"}).Add(42) -+// -+// The other use-case is the specification of constant label pairs in Opts or to -+// create a Desc. -+type Labels map[string]string -+ -+// reservedLabelPrefix is a prefix which is not legal in user-supplied -+// label names. -+const reservedLabelPrefix = "__" -+ -+var errInconsistentCardinality = errors.New("inconsistent label cardinality") -+ -+func makeInconsistentCardinalityError(fqName string, labels, labelValues []string) error { -+ return fmt.Errorf( -+ "%w: %q has %d variable labels named %q but %d values %q were provided", -+ errInconsistentCardinality, fqName, -+ len(labels), labels, -+ len(labelValues), labelValues, -+ ) -+} -+ -+func validateValuesInLabels(labels Labels, expectedNumberOfValues int) error { -+ if len(labels) != expectedNumberOfValues { -+ return fmt.Errorf( -+ "%w: expected %d label values but got %d in %#v", -+ errInconsistentCardinality, expectedNumberOfValues, -+ len(labels), labels, -+ ) -+ } -+ -+ for name, val := range labels { -+ if !utf8.ValidString(val) { -+ return fmt.Errorf("label %s: value %q is not valid UTF-8", name, val) -+ } -+ } -+ -+ return nil -+} -+ -+func validateLabelValues(vals []string, expectedNumberOfValues int) error { -+ if len(vals) != expectedNumberOfValues { -+ return fmt.Errorf( -+ "%w: expected %d label values but got %d in %#v", -+ errInconsistentCardinality, expectedNumberOfValues, -+ len(vals), vals, -+ ) -+ } -+ -+ for _, val := range vals { -+ if !utf8.ValidString(val) { -+ return fmt.Errorf("label value %q is not valid UTF-8", val) -+ } -+ } -+ -+ return nil -+} -+ -+func checkLabelName(l string) bool { -+ return model.LabelName(l).IsValid() && !strings.HasPrefix(l, reservedLabelPrefix) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go -new file mode 100755 -index 0000000..b5119c5 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/metric.go -@@ -0,0 +1,256 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "errors" -+ "math" -+ "sort" -+ "strings" -+ "time" -+ -+ //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. -+ "github.com/golang/protobuf/proto" -+ "github.com/prometheus/common/model" -+ -+ dto "github.com/prometheus/client_model/go" -+) -+ -+var separatorByteSlice = []byte{model.SeparatorByte} // For convenient use with xxhash. -+ -+// A Metric models a single sample value with its meta data being exported to -+// Prometheus. Implementations of Metric in this package are Gauge, Counter, -+// Histogram, Summary, and Untyped. -+type Metric interface { -+ // Desc returns the descriptor for the Metric. This method idempotently -+ // returns the same descriptor throughout the lifetime of the -+ // Metric. The returned descriptor is immutable by contract. A Metric -+ // unable to describe itself must return an invalid descriptor (created -+ // with NewInvalidDesc). -+ Desc() *Desc -+ // Write encodes the Metric into a "Metric" Protocol Buffer data -+ // transmission object. -+ // -+ // Metric implementations must observe concurrency safety as reads of -+ // this metric may occur at any time, and any blocking occurs at the -+ // expense of total performance of rendering all registered -+ // metrics. Ideally, Metric implementations should support concurrent -+ // readers. -+ // -+ // While populating dto.Metric, it is the responsibility of the -+ // implementation to ensure validity of the Metric protobuf (like valid -+ // UTF-8 strings or syntactically valid metric and label names). It is -+ // recommended to sort labels lexicographically. Callers of Write should -+ // still make sure of sorting if they depend on it. -+ Write(*dto.Metric) error -+ // TODO(beorn7): The original rationale of passing in a pre-allocated -+ // dto.Metric protobuf to save allocations has disappeared. The -+ // signature of this method should be changed to "Write() (*dto.Metric, -+ // error)". -+} -+ -+// Opts bundles the options for creating most Metric types. Each metric -+// implementation XXX has its own XXXOpts type, but in most cases, it is just -+// an alias of this type (which might change when the requirement arises.) -+// -+// It is mandatory to set Name to a non-empty string. All other fields are -+// optional and can safely be left at their zero value, although it is strongly -+// encouraged to set a Help string. -+type Opts struct { -+ // Namespace, Subsystem, and Name are components of the fully-qualified -+ // name of the Metric (created by joining these components with -+ // "_"). Only Name is mandatory, the others merely help structuring the -+ // name. Note that the fully-qualified name of the metric must be a -+ // valid Prometheus metric name. -+ Namespace string -+ Subsystem string -+ Name string -+ -+ // Help provides information about this metric. -+ // -+ // Metrics with the same fully-qualified name must have the same Help -+ // string. -+ Help string -+ -+ // ConstLabels are used to attach fixed labels to this metric. Metrics -+ // with the same fully-qualified name must have the same label names in -+ // their ConstLabels. -+ // -+ // ConstLabels are only used rarely. In particular, do not use them to -+ // attach the same labels to all your metrics. Those use cases are -+ // better covered by target labels set by the scraping Prometheus -+ // server, or by one specific metric (e.g. a build_info or a -+ // machine_role metric). See also -+ // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels -+ ConstLabels Labels -+} -+ -+// BuildFQName joins the given three name components by "_". Empty name -+// components are ignored. If the name parameter itself is empty, an empty -+// string is returned, no matter what. Metric implementations included in this -+// library use this function internally to generate the fully-qualified metric -+// name from the name component in their Opts. Users of the library will only -+// need this function if they implement their own Metric or instantiate a Desc -+// (with NewDesc) directly. -+func BuildFQName(namespace, subsystem, name string) string { -+ if name == "" { -+ return "" -+ } -+ switch { -+ case namespace != "" && subsystem != "": -+ return strings.Join([]string{namespace, subsystem, name}, "_") -+ case namespace != "": -+ return strings.Join([]string{namespace, name}, "_") -+ case subsystem != "": -+ return strings.Join([]string{subsystem, name}, "_") -+ } -+ return name -+} -+ -+type invalidMetric struct { -+ desc *Desc -+ err error -+} -+ -+// NewInvalidMetric returns a metric whose Write method always returns the -+// provided error. It is useful if a Collector finds itself unable to collect -+// a metric and wishes to report an error to the registry. -+func NewInvalidMetric(desc *Desc, err error) Metric { -+ return &invalidMetric{desc, err} -+} -+ -+func (m *invalidMetric) Desc() *Desc { return m.desc } -+ -+func (m *invalidMetric) Write(*dto.Metric) error { return m.err } -+ -+type timestampedMetric struct { -+ Metric -+ t time.Time -+} -+ -+func (m timestampedMetric) Write(pb *dto.Metric) error { -+ e := m.Metric.Write(pb) -+ pb.TimestampMs = proto.Int64(m.t.Unix()*1000 + int64(m.t.Nanosecond()/1000000)) -+ return e -+} -+ -+// NewMetricWithTimestamp returns a new Metric wrapping the provided Metric in a -+// way that it has an explicit timestamp set to the provided Time. This is only -+// useful in rare cases as the timestamp of a Prometheus metric should usually -+// be set by the Prometheus server during scraping. Exceptions include mirroring -+// metrics with given timestamps from other metric -+// sources. -+// -+// NewMetricWithTimestamp works best with MustNewConstMetric, -+// MustNewConstHistogram, and MustNewConstSummary, see example. -+// -+// Currently, the exposition formats used by Prometheus are limited to -+// millisecond resolution. Thus, the provided time will be rounded down to the -+// next full millisecond value. -+func NewMetricWithTimestamp(t time.Time, m Metric) Metric { -+ return timestampedMetric{Metric: m, t: t} -+} -+ -+type withExemplarsMetric struct { -+ Metric -+ -+ exemplars []*dto.Exemplar -+} -+ -+func (m *withExemplarsMetric) Write(pb *dto.Metric) error { -+ if err := m.Metric.Write(pb); err != nil { -+ return err -+ } -+ -+ switch { -+ case pb.Counter != nil: -+ pb.Counter.Exemplar = m.exemplars[len(m.exemplars)-1] -+ case pb.Histogram != nil: -+ for _, e := range m.exemplars { -+ // pb.Histogram.Bucket are sorted by UpperBound. -+ i := sort.Search(len(pb.Histogram.Bucket), func(i int) bool { -+ return pb.Histogram.Bucket[i].GetUpperBound() >= e.GetValue() -+ }) -+ if i < len(pb.Histogram.Bucket) { -+ pb.Histogram.Bucket[i].Exemplar = e -+ } else { -+ // The +Inf bucket should be explicitly added if there is an exemplar for it, similar to non-const histogram logic in https://github.com/prometheus/client_golang/blob/main/prometheus/histogram.go#L357-L365. -+ b := &dto.Bucket{ -+ CumulativeCount: proto.Uint64(pb.Histogram.GetSampleCount()), -+ UpperBound: proto.Float64(math.Inf(1)), -+ Exemplar: e, -+ } -+ pb.Histogram.Bucket = append(pb.Histogram.Bucket, b) -+ } -+ } -+ default: -+ // TODO(bwplotka): Implement Gauge? -+ return errors.New("cannot inject exemplar into Gauge, Summary or Untyped") -+ } -+ -+ return nil -+} -+ -+// Exemplar is easier to use, user-facing representation of *dto.Exemplar. -+type Exemplar struct { -+ Value float64 -+ Labels Labels -+ // Optional. -+ // Default value (time.Time{}) indicates its empty, which should be -+ // understood as time.Now() time at the moment of creation of metric. -+ Timestamp time.Time -+} -+ -+// NewMetricWithExemplars returns a new Metric wrapping the provided Metric with given -+// exemplars. Exemplars are validated. -+// -+// Only last applicable exemplar is injected from the list. -+// For example for Counter it means last exemplar is injected. -+// For Histogram, it means last applicable exemplar for each bucket is injected. -+// -+// NewMetricWithExemplars works best with MustNewConstMetric and -+// MustNewConstHistogram, see example. -+func NewMetricWithExemplars(m Metric, exemplars ...Exemplar) (Metric, error) { -+ if len(exemplars) == 0 { -+ return nil, errors.New("no exemplar was passed for NewMetricWithExemplars") -+ } -+ -+ var ( -+ now = time.Now() -+ exs = make([]*dto.Exemplar, len(exemplars)) -+ err error -+ ) -+ for i, e := range exemplars { -+ ts := e.Timestamp -+ if ts == (time.Time{}) { -+ ts = now -+ } -+ exs[i], err = newExemplar(e.Value, ts, e.Labels) -+ if err != nil { -+ return nil, err -+ } -+ } -+ -+ return &withExemplarsMetric{Metric: m, exemplars: exs}, nil -+} -+ -+// MustNewMetricWithExemplars is a version of NewMetricWithExemplars that panics where -+// NewMetricWithExemplars would have returned an error. -+func MustNewMetricWithExemplars(m Metric, exemplars ...Exemplar) Metric { -+ ret, err := NewMetricWithExemplars(m, exemplars...) -+ if err != nil { -+ panic(err) -+ } -+ return ret -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/num_threads.go b/vendor/github.com/prometheus/client_golang/prometheus/num_threads.go -new file mode 100755 -index 0000000..7c12b21 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/num_threads.go -@@ -0,0 +1,25 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build !js || wasm -+// +build !js wasm -+ -+package prometheus -+ -+import "runtime" -+ -+// getRuntimeNumThreads returns the number of open OS threads. -+func getRuntimeNumThreads() float64 { -+ n, _ := runtime.ThreadCreateProfile(nil) -+ return float64(n) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/num_threads_gopherjs.go b/vendor/github.com/prometheus/client_golang/prometheus/num_threads_gopherjs.go -new file mode 100755 -index 0000000..7348df0 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/num_threads_gopherjs.go -@@ -0,0 +1,22 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build js && !wasm -+// +build js,!wasm -+ -+package prometheus -+ -+// getRuntimeNumThreads returns the number of open OS threads. -+func getRuntimeNumThreads() float64 { -+ return 1 -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/observer.go b/vendor/github.com/prometheus/client_golang/prometheus/observer.go -new file mode 100755 -index 0000000..03773b2 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/observer.go -@@ -0,0 +1,64 @@ -+// Copyright 2017 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+// Observer is the interface that wraps the Observe method, which is used by -+// Histogram and Summary to add observations. -+type Observer interface { -+ Observe(float64) -+} -+ -+// The ObserverFunc type is an adapter to allow the use of ordinary -+// functions as Observers. If f is a function with the appropriate -+// signature, ObserverFunc(f) is an Observer that calls f. -+// -+// This adapter is usually used in connection with the Timer type, and there are -+// two general use cases: -+// -+// The most common one is to use a Gauge as the Observer for a Timer. -+// See the "Gauge" Timer example. -+// -+// The more advanced use case is to create a function that dynamically decides -+// which Observer to use for observing the duration. See the "Complex" Timer -+// example. -+type ObserverFunc func(float64) -+ -+// Observe calls f(value). It implements Observer. -+func (f ObserverFunc) Observe(value float64) { -+ f(value) -+} -+ -+// ObserverVec is an interface implemented by `HistogramVec` and `SummaryVec`. -+type ObserverVec interface { -+ GetMetricWith(Labels) (Observer, error) -+ GetMetricWithLabelValues(lvs ...string) (Observer, error) -+ With(Labels) Observer -+ WithLabelValues(...string) Observer -+ CurryWith(Labels) (ObserverVec, error) -+ MustCurryWith(Labels) ObserverVec -+ -+ Collector -+} -+ -+// ExemplarObserver is implemented by Observers that offer the option of -+// observing a value together with an exemplar. Its ObserveWithExemplar method -+// works like the Observe method of an Observer but also replaces the currently -+// saved exemplar (if any) with a new one, created from the provided value, the -+// current time as timestamp, and the provided Labels. Empty Labels will lead to -+// a valid (label-less) exemplar. But if Labels is nil, the current exemplar is -+// left in place. ObserveWithExemplar panics if any of the provided labels are -+// invalid or if the provided labels contain more than 128 runes in total. -+type ExemplarObserver interface { -+ ObserveWithExemplar(value float64, exemplar Labels) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go -new file mode 100755 -index 0000000..8548dd1 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go -@@ -0,0 +1,164 @@ -+// Copyright 2015 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "errors" -+ "fmt" -+ "os" -+ "strconv" -+ "strings" -+) -+ -+type processCollector struct { -+ collectFn func(chan<- Metric) -+ pidFn func() (int, error) -+ reportErrors bool -+ cpuTotal *Desc -+ openFDs, maxFDs *Desc -+ vsize, maxVsize *Desc -+ rss *Desc -+ startTime *Desc -+} -+ -+// ProcessCollectorOpts defines the behavior of a process metrics collector -+// created with NewProcessCollector. -+type ProcessCollectorOpts struct { -+ // PidFn returns the PID of the process the collector collects metrics -+ // for. It is called upon each collection. By default, the PID of the -+ // current process is used, as determined on construction time by -+ // calling os.Getpid(). -+ PidFn func() (int, error) -+ // If non-empty, each of the collected metrics is prefixed by the -+ // provided string and an underscore ("_"). -+ Namespace string -+ // If true, any error encountered during collection is reported as an -+ // invalid metric (see NewInvalidMetric). Otherwise, errors are ignored -+ // and the collected metrics will be incomplete. (Possibly, no metrics -+ // will be collected at all.) While that's usually not desired, it is -+ // appropriate for the common "mix-in" of process metrics, where process -+ // metrics are nice to have, but failing to collect them should not -+ // disrupt the collection of the remaining metrics. -+ ReportErrors bool -+} -+ -+// NewProcessCollector is the obsolete version of collectors.NewProcessCollector. -+// See there for documentation. -+// -+// Deprecated: Use collectors.NewProcessCollector instead. -+func NewProcessCollector(opts ProcessCollectorOpts) Collector { -+ ns := "" -+ if len(opts.Namespace) > 0 { -+ ns = opts.Namespace + "_" -+ } -+ -+ c := &processCollector{ -+ reportErrors: opts.ReportErrors, -+ cpuTotal: NewDesc( -+ ns+"process_cpu_seconds_total", -+ "Total user and system CPU time spent in seconds.", -+ nil, nil, -+ ), -+ openFDs: NewDesc( -+ ns+"process_open_fds", -+ "Number of open file descriptors.", -+ nil, nil, -+ ), -+ maxFDs: NewDesc( -+ ns+"process_max_fds", -+ "Maximum number of open file descriptors.", -+ nil, nil, -+ ), -+ vsize: NewDesc( -+ ns+"process_virtual_memory_bytes", -+ "Virtual memory size in bytes.", -+ nil, nil, -+ ), -+ maxVsize: NewDesc( -+ ns+"process_virtual_memory_max_bytes", -+ "Maximum amount of virtual memory available in bytes.", -+ nil, nil, -+ ), -+ rss: NewDesc( -+ ns+"process_resident_memory_bytes", -+ "Resident memory size in bytes.", -+ nil, nil, -+ ), -+ startTime: NewDesc( -+ ns+"process_start_time_seconds", -+ "Start time of the process since unix epoch in seconds.", -+ nil, nil, -+ ), -+ } -+ -+ if opts.PidFn == nil { -+ c.pidFn = getPIDFn() -+ } else { -+ c.pidFn = opts.PidFn -+ } -+ -+ // Set up process metric collection if supported by the runtime. -+ if canCollectProcess() { -+ c.collectFn = c.processCollect -+ } else { -+ c.collectFn = func(ch chan<- Metric) { -+ c.reportError(ch, nil, errors.New("process metrics not supported on this platform")) -+ } -+ } -+ -+ return c -+} -+ -+// Describe returns all descriptions of the collector. -+func (c *processCollector) Describe(ch chan<- *Desc) { -+ ch <- c.cpuTotal -+ ch <- c.openFDs -+ ch <- c.maxFDs -+ ch <- c.vsize -+ ch <- c.maxVsize -+ ch <- c.rss -+ ch <- c.startTime -+} -+ -+// Collect returns the current state of all metrics of the collector. -+func (c *processCollector) Collect(ch chan<- Metric) { -+ c.collectFn(ch) -+} -+ -+func (c *processCollector) reportError(ch chan<- Metric, desc *Desc, err error) { -+ if !c.reportErrors { -+ return -+ } -+ if desc == nil { -+ desc = NewInvalidDesc(err) -+ } -+ ch <- NewInvalidMetric(desc, err) -+} -+ -+// NewPidFileFn returns a function that retrieves a pid from the specified file. -+// It is meant to be used for the PidFn field in ProcessCollectorOpts. -+func NewPidFileFn(pidFilePath string) func() (int, error) { -+ return func() (int, error) { -+ content, err := os.ReadFile(pidFilePath) -+ if err != nil { -+ return 0, fmt.Errorf("can't read pid file %q: %w", pidFilePath, err) -+ } -+ pid, err := strconv.Atoi(strings.TrimSpace(string(content))) -+ if err != nil { -+ return 0, fmt.Errorf("can't parse pid file %q: %w", pidFilePath, err) -+ } -+ -+ return pid, nil -+ } -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_js.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_js.go -new file mode 100755 -index 0000000..b1e363d ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_js.go -@@ -0,0 +1,26 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build js -+// +build js -+ -+package prometheus -+ -+func canCollectProcess() bool { -+ return false -+} -+ -+func (c *processCollector) processCollect(ch chan<- Metric) { -+ // noop on this platform -+ return -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go -new file mode 100755 -index 0000000..c0152cd ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go -@@ -0,0 +1,66 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build !windows && !js -+// +build !windows,!js -+ -+package prometheus -+ -+import ( -+ "github.com/prometheus/procfs" -+) -+ -+func canCollectProcess() bool { -+ _, err := procfs.NewDefaultFS() -+ return err == nil -+} -+ -+func (c *processCollector) processCollect(ch chan<- Metric) { -+ pid, err := c.pidFn() -+ if err != nil { -+ c.reportError(ch, nil, err) -+ return -+ } -+ -+ p, err := procfs.NewProc(pid) -+ if err != nil { -+ c.reportError(ch, nil, err) -+ return -+ } -+ -+ if stat, err := p.Stat(); err == nil { -+ ch <- MustNewConstMetric(c.cpuTotal, CounterValue, stat.CPUTime()) -+ ch <- MustNewConstMetric(c.vsize, GaugeValue, float64(stat.VirtualMemory())) -+ ch <- MustNewConstMetric(c.rss, GaugeValue, float64(stat.ResidentMemory())) -+ if startTime, err := stat.StartTime(); err == nil { -+ ch <- MustNewConstMetric(c.startTime, GaugeValue, startTime) -+ } else { -+ c.reportError(ch, c.startTime, err) -+ } -+ } else { -+ c.reportError(ch, nil, err) -+ } -+ -+ if fds, err := p.FileDescriptorsLen(); err == nil { -+ ch <- MustNewConstMetric(c.openFDs, GaugeValue, float64(fds)) -+ } else { -+ c.reportError(ch, c.openFDs, err) -+ } -+ -+ if limits, err := p.Limits(); err == nil { -+ ch <- MustNewConstMetric(c.maxFDs, GaugeValue, float64(limits.OpenFiles)) -+ ch <- MustNewConstMetric(c.maxVsize, GaugeValue, float64(limits.AddressSpace)) -+ } else { -+ c.reportError(ch, nil, err) -+ } -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go -new file mode 100755 -index 0000000..f973398 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go -@@ -0,0 +1,116 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "syscall" -+ "unsafe" -+ -+ "golang.org/x/sys/windows" -+) -+ -+func canCollectProcess() bool { -+ return true -+} -+ -+var ( -+ modpsapi = syscall.NewLazyDLL("psapi.dll") -+ modkernel32 = syscall.NewLazyDLL("kernel32.dll") -+ -+ procGetProcessMemoryInfo = modpsapi.NewProc("GetProcessMemoryInfo") -+ procGetProcessHandleCount = modkernel32.NewProc("GetProcessHandleCount") -+) -+ -+type processMemoryCounters struct { -+ // System interface description -+ // https://docs.microsoft.com/en-us/windows/desktop/api/psapi/ns-psapi-process_memory_counters_ex -+ -+ // Refer to the Golang internal implementation -+ // https://golang.org/src/internal/syscall/windows/psapi_windows.go -+ _ uint32 -+ PageFaultCount uint32 -+ PeakWorkingSetSize uintptr -+ WorkingSetSize uintptr -+ QuotaPeakPagedPoolUsage uintptr -+ QuotaPagedPoolUsage uintptr -+ QuotaPeakNonPagedPoolUsage uintptr -+ QuotaNonPagedPoolUsage uintptr -+ PagefileUsage uintptr -+ PeakPagefileUsage uintptr -+ PrivateUsage uintptr -+} -+ -+func getProcessMemoryInfo(handle windows.Handle) (processMemoryCounters, error) { -+ mem := processMemoryCounters{} -+ r1, _, err := procGetProcessMemoryInfo.Call( -+ uintptr(handle), -+ uintptr(unsafe.Pointer(&mem)), -+ uintptr(unsafe.Sizeof(mem)), -+ ) -+ if r1 != 1 { -+ return mem, err -+ } else { -+ return mem, nil -+ } -+} -+ -+func getProcessHandleCount(handle windows.Handle) (uint32, error) { -+ var count uint32 -+ r1, _, err := procGetProcessHandleCount.Call( -+ uintptr(handle), -+ uintptr(unsafe.Pointer(&count)), -+ ) -+ if r1 != 1 { -+ return 0, err -+ } else { -+ return count, nil -+ } -+} -+ -+func (c *processCollector) processCollect(ch chan<- Metric) { -+ h, err := windows.GetCurrentProcess() -+ if err != nil { -+ c.reportError(ch, nil, err) -+ return -+ } -+ -+ var startTime, exitTime, kernelTime, userTime windows.Filetime -+ err = windows.GetProcessTimes(h, &startTime, &exitTime, &kernelTime, &userTime) -+ if err != nil { -+ c.reportError(ch, nil, err) -+ return -+ } -+ ch <- MustNewConstMetric(c.startTime, GaugeValue, float64(startTime.Nanoseconds()/1e9)) -+ ch <- MustNewConstMetric(c.cpuTotal, CounterValue, fileTimeToSeconds(kernelTime)+fileTimeToSeconds(userTime)) -+ -+ mem, err := getProcessMemoryInfo(h) -+ if err != nil { -+ c.reportError(ch, nil, err) -+ return -+ } -+ ch <- MustNewConstMetric(c.vsize, GaugeValue, float64(mem.PrivateUsage)) -+ ch <- MustNewConstMetric(c.rss, GaugeValue, float64(mem.WorkingSetSize)) -+ -+ handles, err := getProcessHandleCount(h) -+ if err != nil { -+ c.reportError(ch, nil, err) -+ return -+ } -+ ch <- MustNewConstMetric(c.openFDs, GaugeValue, float64(handles)) -+ ch <- MustNewConstMetric(c.maxFDs, GaugeValue, float64(16*1024*1024)) // Windows has a hard-coded max limit, not per-process. -+} -+ -+func fileTimeToSeconds(ft windows.Filetime) float64 { -+ return float64(uint64(ft.HighDateTime)<<32+uint64(ft.LowDateTime)) / 1e7 -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go -new file mode 100755 -index 0000000..9819917 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go -@@ -0,0 +1,374 @@ -+// Copyright 2017 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package promhttp -+ -+import ( -+ "bufio" -+ "io" -+ "net" -+ "net/http" -+) -+ -+const ( -+ closeNotifier = 1 << iota -+ flusher -+ hijacker -+ readerFrom -+ pusher -+) -+ -+type delegator interface { -+ http.ResponseWriter -+ -+ Status() int -+ Written() int64 -+} -+ -+type responseWriterDelegator struct { -+ http.ResponseWriter -+ -+ status int -+ written int64 -+ wroteHeader bool -+ observeWriteHeader func(int) -+} -+ -+func (r *responseWriterDelegator) Status() int { -+ return r.status -+} -+ -+func (r *responseWriterDelegator) Written() int64 { -+ return r.written -+} -+ -+func (r *responseWriterDelegator) WriteHeader(code int) { -+ if r.observeWriteHeader != nil && !r.wroteHeader { -+ // Only call observeWriteHeader for the 1st time. It's a bug if -+ // WriteHeader is called more than once, but we want to protect -+ // against it here. Note that we still delegate the WriteHeader -+ // to the original ResponseWriter to not mask the bug from it. -+ r.observeWriteHeader(code) -+ } -+ r.status = code -+ r.wroteHeader = true -+ r.ResponseWriter.WriteHeader(code) -+} -+ -+func (r *responseWriterDelegator) Write(b []byte) (int, error) { -+ // If applicable, call WriteHeader here so that observeWriteHeader is -+ // handled appropriately. -+ if !r.wroteHeader { -+ r.WriteHeader(http.StatusOK) -+ } -+ n, err := r.ResponseWriter.Write(b) -+ r.written += int64(n) -+ return n, err -+} -+ -+type ( -+ closeNotifierDelegator struct{ *responseWriterDelegator } -+ flusherDelegator struct{ *responseWriterDelegator } -+ hijackerDelegator struct{ *responseWriterDelegator } -+ readerFromDelegator struct{ *responseWriterDelegator } -+ pusherDelegator struct{ *responseWriterDelegator } -+) -+ -+func (d closeNotifierDelegator) CloseNotify() <-chan bool { -+ //nolint:staticcheck // Ignore SA1019. http.CloseNotifier is deprecated but we keep it here to not break existing users. -+ return d.ResponseWriter.(http.CloseNotifier).CloseNotify() -+} -+ -+func (d flusherDelegator) Flush() { -+ // If applicable, call WriteHeader here so that observeWriteHeader is -+ // handled appropriately. -+ if !d.wroteHeader { -+ d.WriteHeader(http.StatusOK) -+ } -+ d.ResponseWriter.(http.Flusher).Flush() -+} -+ -+func (d hijackerDelegator) Hijack() (net.Conn, *bufio.ReadWriter, error) { -+ return d.ResponseWriter.(http.Hijacker).Hijack() -+} -+ -+func (d readerFromDelegator) ReadFrom(re io.Reader) (int64, error) { -+ // If applicable, call WriteHeader here so that observeWriteHeader is -+ // handled appropriately. -+ if !d.wroteHeader { -+ d.WriteHeader(http.StatusOK) -+ } -+ n, err := d.ResponseWriter.(io.ReaderFrom).ReadFrom(re) -+ d.written += n -+ return n, err -+} -+ -+func (d pusherDelegator) Push(target string, opts *http.PushOptions) error { -+ return d.ResponseWriter.(http.Pusher).Push(target, opts) -+} -+ -+var pickDelegator = make([]func(*responseWriterDelegator) delegator, 32) -+ -+func init() { -+ // TODO(beorn7): Code generation would help here. -+ pickDelegator[0] = func(d *responseWriterDelegator) delegator { // 0 -+ return d -+ } -+ pickDelegator[closeNotifier] = func(d *responseWriterDelegator) delegator { // 1 -+ return closeNotifierDelegator{d} -+ } -+ pickDelegator[flusher] = func(d *responseWriterDelegator) delegator { // 2 -+ return flusherDelegator{d} -+ } -+ pickDelegator[flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 3 -+ return struct { -+ *responseWriterDelegator -+ http.Flusher -+ http.CloseNotifier -+ }{d, flusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[hijacker] = func(d *responseWriterDelegator) delegator { // 4 -+ return hijackerDelegator{d} -+ } -+ pickDelegator[hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 5 -+ return struct { -+ *responseWriterDelegator -+ http.Hijacker -+ http.CloseNotifier -+ }{d, hijackerDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 6 -+ return struct { -+ *responseWriterDelegator -+ http.Hijacker -+ http.Flusher -+ }{d, hijackerDelegator{d}, flusherDelegator{d}} -+ } -+ pickDelegator[hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 7 -+ return struct { -+ *responseWriterDelegator -+ http.Hijacker -+ http.Flusher -+ http.CloseNotifier -+ }{d, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[readerFrom] = func(d *responseWriterDelegator) delegator { // 8 -+ return readerFromDelegator{d} -+ } -+ pickDelegator[readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 9 -+ return struct { -+ *responseWriterDelegator -+ io.ReaderFrom -+ http.CloseNotifier -+ }{d, readerFromDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 10 -+ return struct { -+ *responseWriterDelegator -+ io.ReaderFrom -+ http.Flusher -+ }{d, readerFromDelegator{d}, flusherDelegator{d}} -+ } -+ pickDelegator[readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 11 -+ return struct { -+ *responseWriterDelegator -+ io.ReaderFrom -+ http.Flusher -+ http.CloseNotifier -+ }{d, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 12 -+ return struct { -+ *responseWriterDelegator -+ io.ReaderFrom -+ http.Hijacker -+ }{d, readerFromDelegator{d}, hijackerDelegator{d}} -+ } -+ pickDelegator[readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 13 -+ return struct { -+ *responseWriterDelegator -+ io.ReaderFrom -+ http.Hijacker -+ http.CloseNotifier -+ }{d, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 14 -+ return struct { -+ *responseWriterDelegator -+ io.ReaderFrom -+ http.Hijacker -+ http.Flusher -+ }{d, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} -+ } -+ pickDelegator[readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 15 -+ return struct { -+ *responseWriterDelegator -+ io.ReaderFrom -+ http.Hijacker -+ http.Flusher -+ http.CloseNotifier -+ }{d, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16 -+ return pusherDelegator{d} -+ } -+ pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ http.CloseNotifier -+ }{d, pusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[pusher+flusher] = func(d *responseWriterDelegator) delegator { // 18 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ http.Flusher -+ }{d, pusherDelegator{d}, flusherDelegator{d}} -+ } -+ pickDelegator[pusher+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 19 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ http.Flusher -+ http.CloseNotifier -+ }{d, pusherDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[pusher+hijacker] = func(d *responseWriterDelegator) delegator { // 20 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ http.Hijacker -+ }{d, pusherDelegator{d}, hijackerDelegator{d}} -+ } -+ pickDelegator[pusher+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 21 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ http.Hijacker -+ http.CloseNotifier -+ }{d, pusherDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[pusher+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 22 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ http.Hijacker -+ http.Flusher -+ }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} -+ } -+ pickDelegator[pusher+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 23 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ http.Hijacker -+ http.Flusher -+ http.CloseNotifier -+ }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[pusher+readerFrom] = func(d *responseWriterDelegator) delegator { // 24 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ io.ReaderFrom -+ }{d, pusherDelegator{d}, readerFromDelegator{d}} -+ } -+ pickDelegator[pusher+readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 25 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ io.ReaderFrom -+ http.CloseNotifier -+ }{d, pusherDelegator{d}, readerFromDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[pusher+readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 26 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ io.ReaderFrom -+ http.Flusher -+ }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}} -+ } -+ pickDelegator[pusher+readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 27 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ io.ReaderFrom -+ http.Flusher -+ http.CloseNotifier -+ }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[pusher+readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 28 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ io.ReaderFrom -+ http.Hijacker -+ }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}} -+ } -+ pickDelegator[pusher+readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 29 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ io.ReaderFrom -+ http.Hijacker -+ http.CloseNotifier -+ }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} -+ } -+ pickDelegator[pusher+readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 30 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ io.ReaderFrom -+ http.Hijacker -+ http.Flusher -+ }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} -+ } -+ pickDelegator[pusher+readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 31 -+ return struct { -+ *responseWriterDelegator -+ http.Pusher -+ io.ReaderFrom -+ http.Hijacker -+ http.Flusher -+ http.CloseNotifier -+ }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} -+ } -+} -+ -+func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) delegator { -+ d := &responseWriterDelegator{ -+ ResponseWriter: w, -+ observeWriteHeader: observeWriteHeaderFunc, -+ } -+ -+ id := 0 -+ //nolint:staticcheck // Ignore SA1019. http.CloseNotifier is deprecated but we keep it here to not break existing users. -+ if _, ok := w.(http.CloseNotifier); ok { -+ id += closeNotifier -+ } -+ if _, ok := w.(http.Flusher); ok { -+ id += flusher -+ } -+ if _, ok := w.(http.Hijacker); ok { -+ id += hijacker -+ } -+ if _, ok := w.(io.ReaderFrom); ok { -+ id += readerFrom -+ } -+ if _, ok := w.(http.Pusher); ok { -+ id += pusher -+ } -+ -+ return pickDelegator[id](d) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go -new file mode 100755 -index 0000000..a4cc981 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go -@@ -0,0 +1,395 @@ -+// Copyright 2016 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+// Package promhttp provides tooling around HTTP servers and clients. -+// -+// First, the package allows the creation of http.Handler instances to expose -+// Prometheus metrics via HTTP. promhttp.Handler acts on the -+// prometheus.DefaultGatherer. With HandlerFor, you can create a handler for a -+// custom registry or anything that implements the Gatherer interface. It also -+// allows the creation of handlers that act differently on errors or allow to -+// log errors. -+// -+// Second, the package provides tooling to instrument instances of http.Handler -+// via middleware. Middleware wrappers follow the naming scheme -+// InstrumentHandlerX, where X describes the intended use of the middleware. -+// See each function's doc comment for specific details. -+// -+// Finally, the package allows for an http.RoundTripper to be instrumented via -+// middleware. Middleware wrappers follow the naming scheme -+// InstrumentRoundTripperX, where X describes the intended use of the -+// middleware. See each function's doc comment for specific details. -+package promhttp -+ -+import ( -+ "compress/gzip" -+ "errors" -+ "fmt" -+ "io" -+ "net/http" -+ "strings" -+ "sync" -+ "time" -+ -+ "github.com/prometheus/common/expfmt" -+ -+ "github.com/prometheus/client_golang/prometheus" -+) -+ -+const ( -+ contentTypeHeader = "Content-Type" -+ contentEncodingHeader = "Content-Encoding" -+ acceptEncodingHeader = "Accept-Encoding" -+) -+ -+var gzipPool = sync.Pool{ -+ New: func() interface{} { -+ return gzip.NewWriter(nil) -+ }, -+} -+ -+// Handler returns an http.Handler for the prometheus.DefaultGatherer, using -+// default HandlerOpts, i.e. it reports the first error as an HTTP error, it has -+// no error logging, and it applies compression if requested by the client. -+// -+// The returned http.Handler is already instrumented using the -+// InstrumentMetricHandler function and the prometheus.DefaultRegisterer. If you -+// create multiple http.Handlers by separate calls of the Handler function, the -+// metrics used for instrumentation will be shared between them, providing -+// global scrape counts. -+// -+// This function is meant to cover the bulk of basic use cases. If you are doing -+// anything that requires more customization (including using a non-default -+// Gatherer, different instrumentation, and non-default HandlerOpts), use the -+// HandlerFor function. See there for details. -+func Handler() http.Handler { -+ return InstrumentMetricHandler( -+ prometheus.DefaultRegisterer, HandlerFor(prometheus.DefaultGatherer, HandlerOpts{}), -+ ) -+} -+ -+// HandlerFor returns an uninstrumented http.Handler for the provided -+// Gatherer. The behavior of the Handler is defined by the provided -+// HandlerOpts. Thus, HandlerFor is useful to create http.Handlers for custom -+// Gatherers, with non-default HandlerOpts, and/or with custom (or no) -+// instrumentation. Use the InstrumentMetricHandler function to apply the same -+// kind of instrumentation as it is used by the Handler function. -+func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { -+ return HandlerForTransactional(prometheus.ToTransactionalGatherer(reg), opts) -+} -+ -+// HandlerForTransactional is like HandlerFor, but it uses transactional gather, which -+// can safely change in-place returned *dto.MetricFamily before call to `Gather` and after -+// call to `done` of that `Gather`. -+func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerOpts) http.Handler { -+ var ( -+ inFlightSem chan struct{} -+ errCnt = prometheus.NewCounterVec( -+ prometheus.CounterOpts{ -+ Name: "promhttp_metric_handler_errors_total", -+ Help: "Total number of internal errors encountered by the promhttp metric handler.", -+ }, -+ []string{"cause"}, -+ ) -+ ) -+ -+ if opts.MaxRequestsInFlight > 0 { -+ inFlightSem = make(chan struct{}, opts.MaxRequestsInFlight) -+ } -+ if opts.Registry != nil { -+ // Initialize all possibilities that can occur below. -+ errCnt.WithLabelValues("gathering") -+ errCnt.WithLabelValues("encoding") -+ if err := opts.Registry.Register(errCnt); err != nil { -+ are := &prometheus.AlreadyRegisteredError{} -+ if errors.As(err, are) { -+ errCnt = are.ExistingCollector.(*prometheus.CounterVec) -+ } else { -+ panic(err) -+ } -+ } -+ } -+ -+ h := http.HandlerFunc(func(rsp http.ResponseWriter, req *http.Request) { -+ if inFlightSem != nil { -+ select { -+ case inFlightSem <- struct{}{}: // All good, carry on. -+ defer func() { <-inFlightSem }() -+ default: -+ http.Error(rsp, fmt.Sprintf( -+ "Limit of concurrent requests reached (%d), try again later.", opts.MaxRequestsInFlight, -+ ), http.StatusServiceUnavailable) -+ return -+ } -+ } -+ mfs, done, err := reg.Gather() -+ defer done() -+ if err != nil { -+ if opts.ErrorLog != nil { -+ opts.ErrorLog.Println("error gathering metrics:", err) -+ } -+ errCnt.WithLabelValues("gathering").Inc() -+ switch opts.ErrorHandling { -+ case PanicOnError: -+ panic(err) -+ case ContinueOnError: -+ if len(mfs) == 0 { -+ // Still report the error if no metrics have been gathered. -+ httpError(rsp, err) -+ return -+ } -+ case HTTPErrorOnError: -+ httpError(rsp, err) -+ return -+ } -+ } -+ -+ var contentType expfmt.Format -+ if opts.EnableOpenMetrics { -+ contentType = expfmt.NegotiateIncludingOpenMetrics(req.Header) -+ } else { -+ contentType = expfmt.Negotiate(req.Header) -+ } -+ header := rsp.Header() -+ header.Set(contentTypeHeader, string(contentType)) -+ -+ w := io.Writer(rsp) -+ if !opts.DisableCompression && gzipAccepted(req.Header) { -+ header.Set(contentEncodingHeader, "gzip") -+ gz := gzipPool.Get().(*gzip.Writer) -+ defer gzipPool.Put(gz) -+ -+ gz.Reset(w) -+ defer gz.Close() -+ -+ w = gz -+ } -+ -+ enc := expfmt.NewEncoder(w, contentType) -+ -+ // handleError handles the error according to opts.ErrorHandling -+ // and returns true if we have to abort after the handling. -+ handleError := func(err error) bool { -+ if err == nil { -+ return false -+ } -+ if opts.ErrorLog != nil { -+ opts.ErrorLog.Println("error encoding and sending metric family:", err) -+ } -+ errCnt.WithLabelValues("encoding").Inc() -+ switch opts.ErrorHandling { -+ case PanicOnError: -+ panic(err) -+ case HTTPErrorOnError: -+ // We cannot really send an HTTP error at this -+ // point because we most likely have written -+ // something to rsp already. But at least we can -+ // stop sending. -+ return true -+ } -+ // Do nothing in all other cases, including ContinueOnError. -+ return false -+ } -+ -+ for _, mf := range mfs { -+ if handleError(enc.Encode(mf)) { -+ return -+ } -+ } -+ if closer, ok := enc.(expfmt.Closer); ok { -+ // This in particular takes care of the final "# EOF\n" line for OpenMetrics. -+ if handleError(closer.Close()) { -+ return -+ } -+ } -+ }) -+ -+ if opts.Timeout <= 0 { -+ return h -+ } -+ return http.TimeoutHandler(h, opts.Timeout, fmt.Sprintf( -+ "Exceeded configured timeout of %v.\n", -+ opts.Timeout, -+ )) -+} -+ -+// InstrumentMetricHandler is usually used with an http.Handler returned by the -+// HandlerFor function. It instruments the provided http.Handler with two -+// metrics: A counter vector "promhttp_metric_handler_requests_total" to count -+// scrapes partitioned by HTTP status code, and a gauge -+// "promhttp_metric_handler_requests_in_flight" to track the number of -+// simultaneous scrapes. This function idempotently registers collectors for -+// both metrics with the provided Registerer. It panics if the registration -+// fails. The provided metrics are useful to see how many scrapes hit the -+// monitored target (which could be from different Prometheus servers or other -+// scrapers), and how often they overlap (which would result in more than one -+// scrape in flight at the same time). Note that the scrapes-in-flight gauge -+// will contain the scrape by which it is exposed, while the scrape counter will -+// only get incremented after the scrape is complete (as only then the status -+// code is known). For tracking scrape durations, use the -+// "scrape_duration_seconds" gauge created by the Prometheus server upon each -+// scrape. -+func InstrumentMetricHandler(reg prometheus.Registerer, handler http.Handler) http.Handler { -+ cnt := prometheus.NewCounterVec( -+ prometheus.CounterOpts{ -+ Name: "promhttp_metric_handler_requests_total", -+ Help: "Total number of scrapes by HTTP status code.", -+ }, -+ []string{"code"}, -+ ) -+ // Initialize the most likely HTTP status codes. -+ cnt.WithLabelValues("200") -+ cnt.WithLabelValues("500") -+ cnt.WithLabelValues("503") -+ if err := reg.Register(cnt); err != nil { -+ are := &prometheus.AlreadyRegisteredError{} -+ if errors.As(err, are) { -+ cnt = are.ExistingCollector.(*prometheus.CounterVec) -+ } else { -+ panic(err) -+ } -+ } -+ -+ gge := prometheus.NewGauge(prometheus.GaugeOpts{ -+ Name: "promhttp_metric_handler_requests_in_flight", -+ Help: "Current number of scrapes being served.", -+ }) -+ if err := reg.Register(gge); err != nil { -+ are := &prometheus.AlreadyRegisteredError{} -+ if errors.As(err, are) { -+ gge = are.ExistingCollector.(prometheus.Gauge) -+ } else { -+ panic(err) -+ } -+ } -+ -+ return InstrumentHandlerCounter(cnt, InstrumentHandlerInFlight(gge, handler)) -+} -+ -+// HandlerErrorHandling defines how a Handler serving metrics will handle -+// errors. -+type HandlerErrorHandling int -+ -+// These constants cause handlers serving metrics to behave as described if -+// errors are encountered. -+const ( -+ // Serve an HTTP status code 500 upon the first error -+ // encountered. Report the error message in the body. Note that HTTP -+ // errors cannot be served anymore once the beginning of a regular -+ // payload has been sent. Thus, in the (unlikely) case that encoding the -+ // payload into the negotiated wire format fails, serving the response -+ // will simply be aborted. Set an ErrorLog in HandlerOpts to detect -+ // those errors. -+ HTTPErrorOnError HandlerErrorHandling = iota -+ // Ignore errors and try to serve as many metrics as possible. However, -+ // if no metrics can be served, serve an HTTP status code 500 and the -+ // last error message in the body. Only use this in deliberate "best -+ // effort" metrics collection scenarios. In this case, it is highly -+ // recommended to provide other means of detecting errors: By setting an -+ // ErrorLog in HandlerOpts, the errors are logged. By providing a -+ // Registry in HandlerOpts, the exposed metrics include an error counter -+ // "promhttp_metric_handler_errors_total", which can be used for -+ // alerts. -+ ContinueOnError -+ // Panic upon the first error encountered (useful for "crash only" apps). -+ PanicOnError -+) -+ -+// Logger is the minimal interface HandlerOpts needs for logging. Note that -+// log.Logger from the standard library implements this interface, and it is -+// easy to implement by custom loggers, if they don't do so already anyway. -+type Logger interface { -+ Println(v ...interface{}) -+} -+ -+// HandlerOpts specifies options how to serve metrics via an http.Handler. The -+// zero value of HandlerOpts is a reasonable default. -+type HandlerOpts struct { -+ // ErrorLog specifies an optional Logger for errors collecting and -+ // serving metrics. If nil, errors are not logged at all. Note that the -+ // type of a reported error is often prometheus.MultiError, which -+ // formats into a multi-line error string. If you want to avoid the -+ // latter, create a Logger implementation that detects a -+ // prometheus.MultiError and formats the contained errors into one line. -+ ErrorLog Logger -+ // ErrorHandling defines how errors are handled. Note that errors are -+ // logged regardless of the configured ErrorHandling provided ErrorLog -+ // is not nil. -+ ErrorHandling HandlerErrorHandling -+ // If Registry is not nil, it is used to register a metric -+ // "promhttp_metric_handler_errors_total", partitioned by "cause". A -+ // failed registration causes a panic. Note that this error counter is -+ // different from the instrumentation you get from the various -+ // InstrumentHandler... helpers. It counts errors that don't necessarily -+ // result in a non-2xx HTTP status code. There are two typical cases: -+ // (1) Encoding errors that only happen after streaming of the HTTP body -+ // has already started (and the status code 200 has been sent). This -+ // should only happen with custom collectors. (2) Collection errors with -+ // no effect on the HTTP status code because ErrorHandling is set to -+ // ContinueOnError. -+ Registry prometheus.Registerer -+ // If DisableCompression is true, the handler will never compress the -+ // response, even if requested by the client. -+ DisableCompression bool -+ // The number of concurrent HTTP requests is limited to -+ // MaxRequestsInFlight. Additional requests are responded to with 503 -+ // Service Unavailable and a suitable message in the body. If -+ // MaxRequestsInFlight is 0 or negative, no limit is applied. -+ MaxRequestsInFlight int -+ // If handling a request takes longer than Timeout, it is responded to -+ // with 503 ServiceUnavailable and a suitable Message. No timeout is -+ // applied if Timeout is 0 or negative. Note that with the current -+ // implementation, reaching the timeout simply ends the HTTP requests as -+ // described above (and even that only if sending of the body hasn't -+ // started yet), while the bulk work of gathering all the metrics keeps -+ // running in the background (with the eventual result to be thrown -+ // away). Until the implementation is improved, it is recommended to -+ // implement a separate timeout in potentially slow Collectors. -+ Timeout time.Duration -+ // If true, the experimental OpenMetrics encoding is added to the -+ // possible options during content negotiation. Note that Prometheus -+ // 2.5.0+ will negotiate OpenMetrics as first priority. OpenMetrics is -+ // the only way to transmit exemplars. However, the move to OpenMetrics -+ // is not completely transparent. Most notably, the values of "quantile" -+ // labels of Summaries and "le" labels of Histograms are formatted with -+ // a trailing ".0" if they would otherwise look like integer numbers -+ // (which changes the identity of the resulting series on the Prometheus -+ // server). -+ EnableOpenMetrics bool -+} -+ -+// gzipAccepted returns whether the client will accept gzip-encoded content. -+func gzipAccepted(header http.Header) bool { -+ a := header.Get(acceptEncodingHeader) -+ parts := strings.Split(a, ",") -+ for _, part := range parts { -+ part = strings.TrimSpace(part) -+ if part == "gzip" || strings.HasPrefix(part, "gzip;") { -+ return true -+ } -+ } -+ return false -+} -+ -+// httpError removes any content-encoding header and then calls http.Error with -+// the provided error and http.StatusInternalServerError. Error contents is -+// supposed to be uncompressed plain text. Same as with a plain http.Error, this -+// must not be called if the header or any payload has already been sent. -+func httpError(rsp http.ResponseWriter, err error) { -+ rsp.Header().Del(contentEncodingHeader) -+ http.Error( -+ rsp, -+ "An error has occurred while serving metrics:\n\n"+err.Error(), -+ http.StatusInternalServerError, -+ ) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go -new file mode 100755 -index 0000000..2108678 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go -@@ -0,0 +1,247 @@ -+// Copyright 2017 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package promhttp -+ -+import ( -+ "crypto/tls" -+ "net/http" -+ "net/http/httptrace" -+ "time" -+ -+ "github.com/prometheus/client_golang/prometheus" -+) -+ -+// The RoundTripperFunc type is an adapter to allow the use of ordinary -+// functions as RoundTrippers. If f is a function with the appropriate -+// signature, RountTripperFunc(f) is a RoundTripper that calls f. -+type RoundTripperFunc func(req *http.Request) (*http.Response, error) -+ -+// RoundTrip implements the RoundTripper interface. -+func (rt RoundTripperFunc) RoundTrip(r *http.Request) (*http.Response, error) { -+ return rt(r) -+} -+ -+// InstrumentRoundTripperInFlight is a middleware that wraps the provided -+// http.RoundTripper. It sets the provided prometheus.Gauge to the number of -+// requests currently handled by the wrapped http.RoundTripper. -+// -+// See the example for ExampleInstrumentRoundTripperDuration for example usage. -+func InstrumentRoundTripperInFlight(gauge prometheus.Gauge, next http.RoundTripper) RoundTripperFunc { -+ return func(r *http.Request) (*http.Response, error) { -+ gauge.Inc() -+ defer gauge.Dec() -+ return next.RoundTrip(r) -+ } -+} -+ -+// InstrumentRoundTripperCounter is a middleware that wraps the provided -+// http.RoundTripper to observe the request result with the provided CounterVec. -+// The CounterVec must have zero, one, or two non-const non-curried labels. For -+// those, the only allowed label names are "code" and "method". The function -+// panics otherwise. For the "method" label a predefined default label value set -+// is used to filter given values. Values besides predefined values will count -+// as `unknown` method.`WithExtraMethods` can be used to add more -+// methods to the set. Partitioning of the CounterVec happens by HTTP status code -+// and/or HTTP method if the respective instance label names are present in the -+// CounterVec. For unpartitioned counting, use a CounterVec with zero labels. -+// -+// If the wrapped RoundTripper panics or returns a non-nil error, the Counter -+// is not incremented. -+// -+// Use with WithExemplarFromContext to instrument the exemplars on the counter of requests. -+// -+// See the example for ExampleInstrumentRoundTripperDuration for example usage. -+func InstrumentRoundTripperCounter(counter *prometheus.CounterVec, next http.RoundTripper, opts ...Option) RoundTripperFunc { -+ rtOpts := defaultOptions() -+ for _, o := range opts { -+ o.apply(rtOpts) -+ } -+ -+ code, method := checkLabels(counter) -+ -+ return func(r *http.Request) (*http.Response, error) { -+ resp, err := next.RoundTrip(r) -+ if err == nil { -+ addWithExemplar( -+ counter.With(labels(code, method, r.Method, resp.StatusCode, rtOpts.extraMethods...)), -+ 1, -+ rtOpts.getExemplarFn(r.Context()), -+ ) -+ } -+ return resp, err -+ } -+} -+ -+// InstrumentRoundTripperDuration is a middleware that wraps the provided -+// http.RoundTripper to observe the request duration with the provided -+// ObserverVec. The ObserverVec must have zero, one, or two non-const -+// non-curried labels. For those, the only allowed label names are "code" and -+// "method". The function panics otherwise. For the "method" label a predefined -+// default label value set is used to filter given values. Values besides -+// predefined values will count as `unknown` method. `WithExtraMethods` -+// can be used to add more methods to the set. The Observe method of the Observer -+// in the ObserverVec is called with the request duration in -+// seconds. Partitioning happens by HTTP status code and/or HTTP method if the -+// respective instance label names are present in the ObserverVec. For -+// unpartitioned observations, use an ObserverVec with zero labels. Note that -+// partitioning of Histograms is expensive and should be used judiciously. -+// -+// If the wrapped RoundTripper panics or returns a non-nil error, no values are -+// reported. -+// -+// Use with WithExemplarFromContext to instrument the exemplars on the duration histograms. -+// -+// Note that this method is only guaranteed to never observe negative durations -+// if used with Go1.9+. -+func InstrumentRoundTripperDuration(obs prometheus.ObserverVec, next http.RoundTripper, opts ...Option) RoundTripperFunc { -+ rtOpts := defaultOptions() -+ for _, o := range opts { -+ o.apply(rtOpts) -+ } -+ -+ code, method := checkLabels(obs) -+ -+ return func(r *http.Request) (*http.Response, error) { -+ start := time.Now() -+ resp, err := next.RoundTrip(r) -+ if err == nil { -+ observeWithExemplar( -+ obs.With(labels(code, method, r.Method, resp.StatusCode, rtOpts.extraMethods...)), -+ time.Since(start).Seconds(), -+ rtOpts.getExemplarFn(r.Context()), -+ ) -+ } -+ return resp, err -+ } -+} -+ -+// InstrumentTrace is used to offer flexibility in instrumenting the available -+// httptrace.ClientTrace hook functions. Each function is passed a float64 -+// representing the time in seconds since the start of the http request. A user -+// may choose to use separately buckets Histograms, or implement custom -+// instance labels on a per function basis. -+type InstrumentTrace struct { -+ GotConn func(float64) -+ PutIdleConn func(float64) -+ GotFirstResponseByte func(float64) -+ Got100Continue func(float64) -+ DNSStart func(float64) -+ DNSDone func(float64) -+ ConnectStart func(float64) -+ ConnectDone func(float64) -+ TLSHandshakeStart func(float64) -+ TLSHandshakeDone func(float64) -+ WroteHeaders func(float64) -+ Wait100Continue func(float64) -+ WroteRequest func(float64) -+} -+ -+// InstrumentRoundTripperTrace is a middleware that wraps the provided -+// RoundTripper and reports times to hook functions provided in the -+// InstrumentTrace struct. Hook functions that are not present in the provided -+// InstrumentTrace struct are ignored. Times reported to the hook functions are -+// time since the start of the request. Only with Go1.9+, those times are -+// guaranteed to never be negative. (Earlier Go versions are not using a -+// monotonic clock.) Note that partitioning of Histograms is expensive and -+// should be used judiciously. -+// -+// For hook functions that receive an error as an argument, no observations are -+// made in the event of a non-nil error value. -+// -+// See the example for ExampleInstrumentRoundTripperDuration for example usage. -+func InstrumentRoundTripperTrace(it *InstrumentTrace, next http.RoundTripper) RoundTripperFunc { -+ return func(r *http.Request) (*http.Response, error) { -+ start := time.Now() -+ -+ trace := &httptrace.ClientTrace{ -+ GotConn: func(_ httptrace.GotConnInfo) { -+ if it.GotConn != nil { -+ it.GotConn(time.Since(start).Seconds()) -+ } -+ }, -+ PutIdleConn: func(err error) { -+ if err != nil { -+ return -+ } -+ if it.PutIdleConn != nil { -+ it.PutIdleConn(time.Since(start).Seconds()) -+ } -+ }, -+ DNSStart: func(_ httptrace.DNSStartInfo) { -+ if it.DNSStart != nil { -+ it.DNSStart(time.Since(start).Seconds()) -+ } -+ }, -+ DNSDone: func(_ httptrace.DNSDoneInfo) { -+ if it.DNSDone != nil { -+ it.DNSDone(time.Since(start).Seconds()) -+ } -+ }, -+ ConnectStart: func(_, _ string) { -+ if it.ConnectStart != nil { -+ it.ConnectStart(time.Since(start).Seconds()) -+ } -+ }, -+ ConnectDone: func(_, _ string, err error) { -+ if err != nil { -+ return -+ } -+ if it.ConnectDone != nil { -+ it.ConnectDone(time.Since(start).Seconds()) -+ } -+ }, -+ GotFirstResponseByte: func() { -+ if it.GotFirstResponseByte != nil { -+ it.GotFirstResponseByte(time.Since(start).Seconds()) -+ } -+ }, -+ Got100Continue: func() { -+ if it.Got100Continue != nil { -+ it.Got100Continue(time.Since(start).Seconds()) -+ } -+ }, -+ TLSHandshakeStart: func() { -+ if it.TLSHandshakeStart != nil { -+ it.TLSHandshakeStart(time.Since(start).Seconds()) -+ } -+ }, -+ TLSHandshakeDone: func(_ tls.ConnectionState, err error) { -+ if err != nil { -+ return -+ } -+ if it.TLSHandshakeDone != nil { -+ it.TLSHandshakeDone(time.Since(start).Seconds()) -+ } -+ }, -+ WroteHeaders: func() { -+ if it.WroteHeaders != nil { -+ it.WroteHeaders(time.Since(start).Seconds()) -+ } -+ }, -+ Wait100Continue: func() { -+ if it.Wait100Continue != nil { -+ it.Wait100Continue(time.Since(start).Seconds()) -+ } -+ }, -+ WroteRequest: func(_ httptrace.WroteRequestInfo) { -+ if it.WroteRequest != nil { -+ it.WroteRequest(time.Since(start).Seconds()) -+ } -+ }, -+ } -+ r = r.WithContext(httptrace.WithClientTrace(r.Context(), trace)) -+ -+ return next.RoundTrip(r) -+ } -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go -new file mode 100755 -index 0000000..cca67a7 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go -@@ -0,0 +1,570 @@ -+// Copyright 2017 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package promhttp -+ -+import ( -+ "errors" -+ "net/http" -+ "strconv" -+ "strings" -+ "time" -+ -+ dto "github.com/prometheus/client_model/go" -+ -+ "github.com/prometheus/client_golang/prometheus" -+) -+ -+// magicString is used for the hacky label test in checkLabels. Remove once fixed. -+const magicString = "zZgWfBxLqvG8kc8IMv3POi2Bb0tZI3vAnBx+gBaFi9FyPzB/CzKUer1yufDa" -+ -+// observeWithExemplar is a wrapper for [prometheus.ExemplarAdder.ExemplarObserver], -+// which falls back to [prometheus.Observer.Observe] if no labels are provided. -+func observeWithExemplar(obs prometheus.Observer, val float64, labels map[string]string) { -+ if labels == nil { -+ obs.Observe(val) -+ return -+ } -+ obs.(prometheus.ExemplarObserver).ObserveWithExemplar(val, labels) -+} -+ -+// addWithExemplar is a wrapper for [prometheus.ExemplarAdder.AddWithExemplar], -+// which falls back to [prometheus.Counter.Add] if no labels are provided. -+func addWithExemplar(obs prometheus.Counter, val float64, labels map[string]string) { -+ if labels == nil { -+ obs.Add(val) -+ return -+ } -+ obs.(prometheus.ExemplarAdder).AddWithExemplar(val, labels) -+} -+ -+// InstrumentHandlerInFlight is a middleware that wraps the provided -+// http.Handler. It sets the provided prometheus.Gauge to the number of -+// requests currently handled by the wrapped http.Handler. -+// -+// See the example for InstrumentHandlerDuration for example usage. -+func InstrumentHandlerInFlight(g prometheus.Gauge, next http.Handler) http.Handler { -+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { -+ g.Inc() -+ defer g.Dec() -+ next.ServeHTTP(w, r) -+ }) -+} -+ -+// InstrumentHandlerDuration is a middleware that wraps the provided -+// http.Handler to observe the request duration with the provided ObserverVec. -+// The ObserverVec must have valid metric and label names and must have zero, -+// one, or two non-const non-curried labels. For those, the only allowed label -+// names are "code" and "method". The function panics otherwise. For the "method" -+// label a predefined default label value set is used to filter given values. -+// Values besides predefined values will count as `unknown` method. -+// `WithExtraMethods` can be used to add more methods to the set. The Observe -+// method of the Observer in the ObserverVec is called with the request duration -+// in seconds. Partitioning happens by HTTP status code and/or HTTP method if -+// the respective instance label names are present in the ObserverVec. For -+// unpartitioned observations, use an ObserverVec with zero labels. Note that -+// partitioning of Histograms is expensive and should be used judiciously. -+// -+// If the wrapped Handler does not set a status code, a status code of 200 is assumed. -+// -+// If the wrapped Handler panics, no values are reported. -+// -+// Note that this method is only guaranteed to never observe negative durations -+// if used with Go1.9+. -+func InstrumentHandlerDuration(obs prometheus.ObserverVec, next http.Handler, opts ...Option) http.HandlerFunc { -+ hOpts := defaultOptions() -+ for _, o := range opts { -+ o.apply(hOpts) -+ } -+ -+ code, method := checkLabels(obs) -+ -+ if code { -+ return func(w http.ResponseWriter, r *http.Request) { -+ now := time.Now() -+ d := newDelegator(w, nil) -+ next.ServeHTTP(d, r) -+ -+ observeWithExemplar( -+ obs.With(labels(code, method, r.Method, d.Status(), hOpts.extraMethods...)), -+ time.Since(now).Seconds(), -+ hOpts.getExemplarFn(r.Context()), -+ ) -+ } -+ } -+ -+ return func(w http.ResponseWriter, r *http.Request) { -+ now := time.Now() -+ next.ServeHTTP(w, r) -+ -+ observeWithExemplar( -+ obs.With(labels(code, method, r.Method, 0, hOpts.extraMethods...)), -+ time.Since(now).Seconds(), -+ hOpts.getExemplarFn(r.Context()), -+ ) -+ } -+} -+ -+// InstrumentHandlerCounter is a middleware that wraps the provided http.Handler -+// to observe the request result with the provided CounterVec. The CounterVec -+// must have valid metric and label names and must have zero, one, or two -+// non-const non-curried labels. For those, the only allowed label names are -+// "code" and "method". The function panics otherwise. For the "method" -+// label a predefined default label value set is used to filter given values. -+// Values besides predefined values will count as `unknown` method. -+// `WithExtraMethods` can be used to add more methods to the set. Partitioning of the -+// CounterVec happens by HTTP status code and/or HTTP method if the respective -+// instance label names are present in the CounterVec. For unpartitioned -+// counting, use a CounterVec with zero labels. -+// -+// If the wrapped Handler does not set a status code, a status code of 200 is assumed. -+// -+// If the wrapped Handler panics, the Counter is not incremented. -+// -+// See the example for InstrumentHandlerDuration for example usage. -+func InstrumentHandlerCounter(counter *prometheus.CounterVec, next http.Handler, opts ...Option) http.HandlerFunc { -+ hOpts := defaultOptions() -+ for _, o := range opts { -+ o.apply(hOpts) -+ } -+ -+ code, method := checkLabels(counter) -+ -+ if code { -+ return func(w http.ResponseWriter, r *http.Request) { -+ d := newDelegator(w, nil) -+ next.ServeHTTP(d, r) -+ -+ addWithExemplar( -+ counter.With(labels(code, method, r.Method, d.Status(), hOpts.extraMethods...)), -+ 1, -+ hOpts.getExemplarFn(r.Context()), -+ ) -+ } -+ } -+ -+ return func(w http.ResponseWriter, r *http.Request) { -+ next.ServeHTTP(w, r) -+ addWithExemplar( -+ counter.With(labels(code, method, r.Method, 0, hOpts.extraMethods...)), -+ 1, -+ hOpts.getExemplarFn(r.Context()), -+ ) -+ } -+} -+ -+// InstrumentHandlerTimeToWriteHeader is a middleware that wraps the provided -+// http.Handler to observe with the provided ObserverVec the request duration -+// until the response headers are written. The ObserverVec must have valid -+// metric and label names and must have zero, one, or two non-const non-curried -+// labels. For those, the only allowed label names are "code" and "method". The -+// function panics otherwise. For the "method" label a predefined default label -+// value set is used to filter given values. Values besides predefined values -+// will count as `unknown` method.`WithExtraMethods` can be used to add more -+// methods to the set. The Observe method of the Observer in the -+// ObserverVec is called with the request duration in seconds. Partitioning -+// happens by HTTP status code and/or HTTP method if the respective instance -+// label names are present in the ObserverVec. For unpartitioned observations, -+// use an ObserverVec with zero labels. Note that partitioning of Histograms is -+// expensive and should be used judiciously. -+// -+// If the wrapped Handler panics before calling WriteHeader, no value is -+// reported. -+// -+// Note that this method is only guaranteed to never observe negative durations -+// if used with Go1.9+. -+// -+// See the example for InstrumentHandlerDuration for example usage. -+func InstrumentHandlerTimeToWriteHeader(obs prometheus.ObserverVec, next http.Handler, opts ...Option) http.HandlerFunc { -+ hOpts := defaultOptions() -+ for _, o := range opts { -+ o.apply(hOpts) -+ } -+ -+ code, method := checkLabels(obs) -+ -+ return func(w http.ResponseWriter, r *http.Request) { -+ now := time.Now() -+ d := newDelegator(w, func(status int) { -+ observeWithExemplar( -+ obs.With(labels(code, method, r.Method, status, hOpts.extraMethods...)), -+ time.Since(now).Seconds(), -+ hOpts.getExemplarFn(r.Context()), -+ ) -+ }) -+ next.ServeHTTP(d, r) -+ } -+} -+ -+// InstrumentHandlerRequestSize is a middleware that wraps the provided -+// http.Handler to observe the request size with the provided ObserverVec. The -+// ObserverVec must have valid metric and label names and must have zero, one, -+// or two non-const non-curried labels. For those, the only allowed label names -+// are "code" and "method". The function panics otherwise. For the "method" -+// label a predefined default label value set is used to filter given values. -+// Values besides predefined values will count as `unknown` method. -+// `WithExtraMethods` can be used to add more methods to the set. The Observe -+// method of the Observer in the ObserverVec is called with the request size in -+// bytes. Partitioning happens by HTTP status code and/or HTTP method if the -+// respective instance label names are present in the ObserverVec. For -+// unpartitioned observations, use an ObserverVec with zero labels. Note that -+// partitioning of Histograms is expensive and should be used judiciously. -+// -+// If the wrapped Handler does not set a status code, a status code of 200 is assumed. -+// -+// If the wrapped Handler panics, no values are reported. -+// -+// See the example for InstrumentHandlerDuration for example usage. -+func InstrumentHandlerRequestSize(obs prometheus.ObserverVec, next http.Handler, opts ...Option) http.HandlerFunc { -+ hOpts := defaultOptions() -+ for _, o := range opts { -+ o.apply(hOpts) -+ } -+ -+ code, method := checkLabels(obs) -+ if code { -+ return func(w http.ResponseWriter, r *http.Request) { -+ d := newDelegator(w, nil) -+ next.ServeHTTP(d, r) -+ size := computeApproximateRequestSize(r) -+ observeWithExemplar( -+ obs.With(labels(code, method, r.Method, d.Status(), hOpts.extraMethods...)), -+ float64(size), -+ hOpts.getExemplarFn(r.Context()), -+ ) -+ } -+ } -+ -+ return func(w http.ResponseWriter, r *http.Request) { -+ next.ServeHTTP(w, r) -+ size := computeApproximateRequestSize(r) -+ observeWithExemplar( -+ obs.With(labels(code, method, r.Method, 0, hOpts.extraMethods...)), -+ float64(size), -+ hOpts.getExemplarFn(r.Context()), -+ ) -+ } -+} -+ -+// InstrumentHandlerResponseSize is a middleware that wraps the provided -+// http.Handler to observe the response size with the provided ObserverVec. The -+// ObserverVec must have valid metric and label names and must have zero, one, -+// or two non-const non-curried labels. For those, the only allowed label names -+// are "code" and "method". The function panics otherwise. For the "method" -+// label a predefined default label value set is used to filter given values. -+// Values besides predefined values will count as `unknown` method. -+// `WithExtraMethods` can be used to add more methods to the set. The Observe -+// method of the Observer in the ObserverVec is called with the response size in -+// bytes. Partitioning happens by HTTP status code and/or HTTP method if the -+// respective instance label names are present in the ObserverVec. For -+// unpartitioned observations, use an ObserverVec with zero labels. Note that -+// partitioning of Histograms is expensive and should be used judiciously. -+// -+// If the wrapped Handler does not set a status code, a status code of 200 is assumed. -+// -+// If the wrapped Handler panics, no values are reported. -+// -+// See the example for InstrumentHandlerDuration for example usage. -+func InstrumentHandlerResponseSize(obs prometheus.ObserverVec, next http.Handler, opts ...Option) http.Handler { -+ hOpts := defaultOptions() -+ for _, o := range opts { -+ o.apply(hOpts) -+ } -+ -+ code, method := checkLabels(obs) -+ -+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { -+ d := newDelegator(w, nil) -+ next.ServeHTTP(d, r) -+ observeWithExemplar( -+ obs.With(labels(code, method, r.Method, d.Status(), hOpts.extraMethods...)), -+ float64(d.Written()), -+ hOpts.getExemplarFn(r.Context()), -+ ) -+ }) -+} -+ -+// checkLabels returns whether the provided Collector has a non-const, -+// non-curried label named "code" and/or "method". It panics if the provided -+// Collector does not have a Desc or has more than one Desc or its Desc is -+// invalid. It also panics if the Collector has any non-const, non-curried -+// labels that are not named "code" or "method". -+func checkLabels(c prometheus.Collector) (code, method bool) { -+ // TODO(beorn7): Remove this hacky way to check for instance labels -+ // once Descriptors can have their dimensionality queried. -+ var ( -+ desc *prometheus.Desc -+ m prometheus.Metric -+ pm dto.Metric -+ lvs []string -+ ) -+ -+ // Get the Desc from the Collector. -+ descc := make(chan *prometheus.Desc, 1) -+ c.Describe(descc) -+ -+ select { -+ case desc = <-descc: -+ default: -+ panic("no description provided by collector") -+ } -+ select { -+ case <-descc: -+ panic("more than one description provided by collector") -+ default: -+ } -+ -+ close(descc) -+ -+ // Make sure the Collector has a valid Desc by registering it with a -+ // temporary registry. -+ prometheus.NewRegistry().MustRegister(c) -+ -+ // Create a ConstMetric with the Desc. Since we don't know how many -+ // variable labels there are, try for as long as it needs. -+ for err := errors.New("dummy"); err != nil; lvs = append(lvs, magicString) { -+ m, err = prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, lvs...) -+ } -+ -+ // Write out the metric into a proto message and look at the labels. -+ // If the value is not the magicString, it is a constLabel, which doesn't interest us. -+ // If the label is curried, it doesn't interest us. -+ // In all other cases, only "code" or "method" is allowed. -+ if err := m.Write(&pm); err != nil { -+ panic("error checking metric for labels") -+ } -+ for _, label := range pm.Label { -+ name, value := label.GetName(), label.GetValue() -+ if value != magicString || isLabelCurried(c, name) { -+ continue -+ } -+ switch name { -+ case "code": -+ code = true -+ case "method": -+ method = true -+ default: -+ panic("metric partitioned with non-supported labels") -+ } -+ } -+ return -+} -+ -+func isLabelCurried(c prometheus.Collector, label string) bool { -+ // This is even hackier than the label test above. -+ // We essentially try to curry again and see if it works. -+ // But for that, we need to type-convert to the two -+ // types we use here, ObserverVec or *CounterVec. -+ switch v := c.(type) { -+ case *prometheus.CounterVec: -+ if _, err := v.CurryWith(prometheus.Labels{label: "dummy"}); err == nil { -+ return false -+ } -+ case prometheus.ObserverVec: -+ if _, err := v.CurryWith(prometheus.Labels{label: "dummy"}); err == nil { -+ return false -+ } -+ default: -+ panic("unsupported metric vec type") -+ } -+ return true -+} -+ -+// emptyLabels is a one-time allocation for non-partitioned metrics to avoid -+// unnecessary allocations on each request. -+var emptyLabels = prometheus.Labels{} -+ -+func labels(code, method bool, reqMethod string, status int, extraMethods ...string) prometheus.Labels { -+ if !(code || method) { -+ return emptyLabels -+ } -+ labels := prometheus.Labels{} -+ -+ if code { -+ labels["code"] = sanitizeCode(status) -+ } -+ if method { -+ labels["method"] = sanitizeMethod(reqMethod, extraMethods...) -+ } -+ -+ return labels -+} -+ -+func computeApproximateRequestSize(r *http.Request) int { -+ s := 0 -+ if r.URL != nil { -+ s += len(r.URL.String()) -+ } -+ -+ s += len(r.Method) -+ s += len(r.Proto) -+ for name, values := range r.Header { -+ s += len(name) -+ for _, value := range values { -+ s += len(value) -+ } -+ } -+ s += len(r.Host) -+ -+ // N.B. r.Form and r.MultipartForm are assumed to be included in r.URL. -+ -+ if r.ContentLength != -1 { -+ s += int(r.ContentLength) -+ } -+ return s -+} -+ -+// If the wrapped http.Handler has a known method, it will be sanitized and returned. -+// Otherwise, "unknown" will be returned. The known method list can be extended -+// as needed by using extraMethods parameter. -+func sanitizeMethod(m string, extraMethods ...string) string { -+ // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods for -+ // the methods chosen as default. -+ switch m { -+ case "GET", "get": -+ return "get" -+ case "PUT", "put": -+ return "put" -+ case "HEAD", "head": -+ return "head" -+ case "POST", "post": -+ return "post" -+ case "DELETE", "delete": -+ return "delete" -+ case "CONNECT", "connect": -+ return "connect" -+ case "OPTIONS", "options": -+ return "options" -+ case "NOTIFY", "notify": -+ return "notify" -+ case "TRACE", "trace": -+ return "trace" -+ case "PATCH", "patch": -+ return "patch" -+ default: -+ for _, method := range extraMethods { -+ if strings.EqualFold(m, method) { -+ return strings.ToLower(m) -+ } -+ } -+ return "unknown" -+ } -+} -+ -+// If the wrapped http.Handler has not set a status code, i.e. the value is -+// currently 0, sanitizeCode will return 200, for consistency with behavior in -+// the stdlib. -+func sanitizeCode(s int) string { -+ // See for accepted codes https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml -+ switch s { -+ case 100: -+ return "100" -+ case 101: -+ return "101" -+ -+ case 200, 0: -+ return "200" -+ case 201: -+ return "201" -+ case 202: -+ return "202" -+ case 203: -+ return "203" -+ case 204: -+ return "204" -+ case 205: -+ return "205" -+ case 206: -+ return "206" -+ -+ case 300: -+ return "300" -+ case 301: -+ return "301" -+ case 302: -+ return "302" -+ case 304: -+ return "304" -+ case 305: -+ return "305" -+ case 307: -+ return "307" -+ -+ case 400: -+ return "400" -+ case 401: -+ return "401" -+ case 402: -+ return "402" -+ case 403: -+ return "403" -+ case 404: -+ return "404" -+ case 405: -+ return "405" -+ case 406: -+ return "406" -+ case 407: -+ return "407" -+ case 408: -+ return "408" -+ case 409: -+ return "409" -+ case 410: -+ return "410" -+ case 411: -+ return "411" -+ case 412: -+ return "412" -+ case 413: -+ return "413" -+ case 414: -+ return "414" -+ case 415: -+ return "415" -+ case 416: -+ return "416" -+ case 417: -+ return "417" -+ case 418: -+ return "418" -+ -+ case 500: -+ return "500" -+ case 501: -+ return "501" -+ case 502: -+ return "502" -+ case 503: -+ return "503" -+ case 504: -+ return "504" -+ case 505: -+ return "505" -+ -+ case 428: -+ return "428" -+ case 429: -+ return "429" -+ case 431: -+ return "431" -+ case 511: -+ return "511" -+ -+ default: -+ if s >= 100 && s <= 599 { -+ return strconv.Itoa(s) -+ } -+ return "unknown" -+ } -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go -new file mode 100755 -index 0000000..c590d91 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go -@@ -0,0 +1,58 @@ -+// Copyright 2022 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package promhttp -+ -+import ( -+ "context" -+ -+ "github.com/prometheus/client_golang/prometheus" -+) -+ -+// Option are used to configure both handler (middleware) or round tripper. -+type Option interface { -+ apply(*options) -+} -+ -+// options store options for both a handler or round tripper. -+type options struct { -+ extraMethods []string -+ getExemplarFn func(requestCtx context.Context) prometheus.Labels -+} -+ -+func defaultOptions() *options { -+ return &options{getExemplarFn: func(ctx context.Context) prometheus.Labels { return nil }} -+} -+ -+type optionApplyFunc func(*options) -+ -+func (o optionApplyFunc) apply(opt *options) { o(opt) } -+ -+// WithExtraMethods adds additional HTTP methods to the list of allowed methods. -+// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods for the default list. -+// -+// See the example for ExampleInstrumentHandlerWithExtraMethods for example usage. -+func WithExtraMethods(methods ...string) Option { -+ return optionApplyFunc(func(o *options) { -+ o.extraMethods = methods -+ }) -+} -+ -+// WithExemplarFromContext adds allows to put a hook to all counter and histogram metrics. -+// If the hook function returns non-nil labels, exemplars will be added for that request, otherwise metric -+// will get instrumented without exemplar. -+func WithExemplarFromContext(getExemplarFn func(requestCtx context.Context) prometheus.Labels) Option { -+ return optionApplyFunc(func(o *options) { -+ o.getExemplarFn = getExemplarFn -+ }) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go -new file mode 100755 -index 0000000..09e34d3 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/registry.go -@@ -0,0 +1,1072 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "bytes" -+ "errors" -+ "fmt" -+ "os" -+ "path/filepath" -+ "runtime" -+ "sort" -+ "strings" -+ "sync" -+ "unicode/utf8" -+ -+ "github.com/cespare/xxhash/v2" -+ //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. -+ "github.com/golang/protobuf/proto" -+ "github.com/prometheus/common/expfmt" -+ -+ dto "github.com/prometheus/client_model/go" -+ -+ "github.com/prometheus/client_golang/prometheus/internal" -+) -+ -+const ( -+ // Capacity for the channel to collect metrics and descriptors. -+ capMetricChan = 1000 -+ capDescChan = 10 -+) -+ -+// DefaultRegisterer and DefaultGatherer are the implementations of the -+// Registerer and Gatherer interface a number of convenience functions in this -+// package act on. Initially, both variables point to the same Registry, which -+// has a process collector (currently on Linux only, see NewProcessCollector) -+// and a Go collector (see NewGoCollector, in particular the note about -+// stop-the-world implication with Go versions older than 1.9) already -+// registered. This approach to keep default instances as global state mirrors -+// the approach of other packages in the Go standard library. Note that there -+// are caveats. Change the variables with caution and only if you understand the -+// consequences. Users who want to avoid global state altogether should not use -+// the convenience functions and act on custom instances instead. -+var ( -+ defaultRegistry = NewRegistry() -+ DefaultRegisterer Registerer = defaultRegistry -+ DefaultGatherer Gatherer = defaultRegistry -+) -+ -+func init() { -+ MustRegister(NewProcessCollector(ProcessCollectorOpts{})) -+ MustRegister(NewGoCollector()) -+} -+ -+// NewRegistry creates a new vanilla Registry without any Collectors -+// pre-registered. -+func NewRegistry() *Registry { -+ return &Registry{ -+ collectorsByID: map[uint64]Collector{}, -+ descIDs: map[uint64]struct{}{}, -+ dimHashesByName: map[string]uint64{}, -+ } -+} -+ -+// NewPedanticRegistry returns a registry that checks during collection if each -+// collected Metric is consistent with its reported Desc, and if the Desc has -+// actually been registered with the registry. Unchecked Collectors (those whose -+// Describe method does not yield any descriptors) are excluded from the check. -+// -+// Usually, a Registry will be happy as long as the union of all collected -+// Metrics is consistent and valid even if some metrics are not consistent with -+// their own Desc or a Desc provided by their registered Collector. Well-behaved -+// Collectors and Metrics will only provide consistent Descs. This Registry is -+// useful to test the implementation of Collectors and Metrics. -+func NewPedanticRegistry() *Registry { -+ r := NewRegistry() -+ r.pedanticChecksEnabled = true -+ return r -+} -+ -+// Registerer is the interface for the part of a registry in charge of -+// registering and unregistering. Users of custom registries should use -+// Registerer as type for registration purposes (rather than the Registry type -+// directly). In that way, they are free to use custom Registerer implementation -+// (e.g. for testing purposes). -+type Registerer interface { -+ // Register registers a new Collector to be included in metrics -+ // collection. It returns an error if the descriptors provided by the -+ // Collector are invalid or if they — in combination with descriptors of -+ // already registered Collectors — do not fulfill the consistency and -+ // uniqueness criteria described in the documentation of metric.Desc. -+ // -+ // If the provided Collector is equal to a Collector already registered -+ // (which includes the case of re-registering the same Collector), the -+ // returned error is an instance of AlreadyRegisteredError, which -+ // contains the previously registered Collector. -+ // -+ // A Collector whose Describe method does not yield any Desc is treated -+ // as unchecked. Registration will always succeed. No check for -+ // re-registering (see previous paragraph) is performed. Thus, the -+ // caller is responsible for not double-registering the same unchecked -+ // Collector, and for providing a Collector that will not cause -+ // inconsistent metrics on collection. (This would lead to scrape -+ // errors.) -+ Register(Collector) error -+ // MustRegister works like Register but registers any number of -+ // Collectors and panics upon the first registration that causes an -+ // error. -+ MustRegister(...Collector) -+ // Unregister unregisters the Collector that equals the Collector passed -+ // in as an argument. (Two Collectors are considered equal if their -+ // Describe method yields the same set of descriptors.) The function -+ // returns whether a Collector was unregistered. Note that an unchecked -+ // Collector cannot be unregistered (as its Describe method does not -+ // yield any descriptor). -+ // -+ // Note that even after unregistering, it will not be possible to -+ // register a new Collector that is inconsistent with the unregistered -+ // Collector, e.g. a Collector collecting metrics with the same name but -+ // a different help string. The rationale here is that the same registry -+ // instance must only collect consistent metrics throughout its -+ // lifetime. -+ Unregister(Collector) bool -+} -+ -+// Gatherer is the interface for the part of a registry in charge of gathering -+// the collected metrics into a number of MetricFamilies. The Gatherer interface -+// comes with the same general implication as described for the Registerer -+// interface. -+type Gatherer interface { -+ // Gather calls the Collect method of the registered Collectors and then -+ // gathers the collected metrics into a lexicographically sorted slice -+ // of uniquely named MetricFamily protobufs. Gather ensures that the -+ // returned slice is valid and self-consistent so that it can be used -+ // for valid exposition. As an exception to the strict consistency -+ // requirements described for metric.Desc, Gather will tolerate -+ // different sets of label names for metrics of the same metric family. -+ // -+ // Even if an error occurs, Gather attempts to gather as many metrics as -+ // possible. Hence, if a non-nil error is returned, the returned -+ // MetricFamily slice could be nil (in case of a fatal error that -+ // prevented any meaningful metric collection) or contain a number of -+ // MetricFamily protobufs, some of which might be incomplete, and some -+ // might be missing altogether. The returned error (which might be a -+ // MultiError) explains the details. Note that this is mostly useful for -+ // debugging purposes. If the gathered protobufs are to be used for -+ // exposition in actual monitoring, it is almost always better to not -+ // expose an incomplete result and instead disregard the returned -+ // MetricFamily protobufs in case the returned error is non-nil. -+ Gather() ([]*dto.MetricFamily, error) -+} -+ -+// Register registers the provided Collector with the DefaultRegisterer. -+// -+// Register is a shortcut for DefaultRegisterer.Register(c). See there for more -+// details. -+func Register(c Collector) error { -+ return DefaultRegisterer.Register(c) -+} -+ -+// MustRegister registers the provided Collectors with the DefaultRegisterer and -+// panics if any error occurs. -+// -+// MustRegister is a shortcut for DefaultRegisterer.MustRegister(cs...). See -+// there for more details. -+func MustRegister(cs ...Collector) { -+ DefaultRegisterer.MustRegister(cs...) -+} -+ -+// Unregister removes the registration of the provided Collector from the -+// DefaultRegisterer. -+// -+// Unregister is a shortcut for DefaultRegisterer.Unregister(c). See there for -+// more details. -+func Unregister(c Collector) bool { -+ return DefaultRegisterer.Unregister(c) -+} -+ -+// GathererFunc turns a function into a Gatherer. -+type GathererFunc func() ([]*dto.MetricFamily, error) -+ -+// Gather implements Gatherer. -+func (gf GathererFunc) Gather() ([]*dto.MetricFamily, error) { -+ return gf() -+} -+ -+// AlreadyRegisteredError is returned by the Register method if the Collector to -+// be registered has already been registered before, or a different Collector -+// that collects the same metrics has been registered before. Registration fails -+// in that case, but you can detect from the kind of error what has -+// happened. The error contains fields for the existing Collector and the -+// (rejected) new Collector that equals the existing one. This can be used to -+// find out if an equal Collector has been registered before and switch over to -+// using the old one, as demonstrated in the example. -+type AlreadyRegisteredError struct { -+ ExistingCollector, NewCollector Collector -+} -+ -+func (err AlreadyRegisteredError) Error() string { -+ return "duplicate metrics collector registration attempted" -+} -+ -+// MultiError is a slice of errors implementing the error interface. It is used -+// by a Gatherer to report multiple errors during MetricFamily gathering. -+type MultiError []error -+ -+// Error formats the contained errors as a bullet point list, preceded by the -+// total number of errors. Note that this results in a multi-line string. -+func (errs MultiError) Error() string { -+ if len(errs) == 0 { -+ return "" -+ } -+ buf := &bytes.Buffer{} -+ fmt.Fprintf(buf, "%d error(s) occurred:", len(errs)) -+ for _, err := range errs { -+ fmt.Fprintf(buf, "\n* %s", err) -+ } -+ return buf.String() -+} -+ -+// Append appends the provided error if it is not nil. -+func (errs *MultiError) Append(err error) { -+ if err != nil { -+ *errs = append(*errs, err) -+ } -+} -+ -+// MaybeUnwrap returns nil if len(errs) is 0. It returns the first and only -+// contained error as error if len(errs is 1). In all other cases, it returns -+// the MultiError directly. This is helpful for returning a MultiError in a way -+// that only uses the MultiError if needed. -+func (errs MultiError) MaybeUnwrap() error { -+ switch len(errs) { -+ case 0: -+ return nil -+ case 1: -+ return errs[0] -+ default: -+ return errs -+ } -+} -+ -+// Registry registers Prometheus collectors, collects their metrics, and gathers -+// them into MetricFamilies for exposition. It implements Registerer, Gatherer, -+// and Collector. The zero value is not usable. Create instances with -+// NewRegistry or NewPedanticRegistry. -+// -+// Registry implements Collector to allow it to be used for creating groups of -+// metrics. See the Grouping example for how this can be done. -+type Registry struct { -+ mtx sync.RWMutex -+ collectorsByID map[uint64]Collector // ID is a hash of the descIDs. -+ descIDs map[uint64]struct{} -+ dimHashesByName map[string]uint64 -+ uncheckedCollectors []Collector -+ pedanticChecksEnabled bool -+} -+ -+// Register implements Registerer. -+func (r *Registry) Register(c Collector) error { -+ var ( -+ descChan = make(chan *Desc, capDescChan) -+ newDescIDs = map[uint64]struct{}{} -+ newDimHashesByName = map[string]uint64{} -+ collectorID uint64 // All desc IDs XOR'd together. -+ duplicateDescErr error -+ ) -+ go func() { -+ c.Describe(descChan) -+ close(descChan) -+ }() -+ r.mtx.Lock() -+ defer func() { -+ // Drain channel in case of premature return to not leak a goroutine. -+ for range descChan { -+ } -+ r.mtx.Unlock() -+ }() -+ // Conduct various tests... -+ for desc := range descChan { -+ -+ // Is the descriptor valid at all? -+ if desc.err != nil { -+ return fmt.Errorf("descriptor %s is invalid: %w", desc, desc.err) -+ } -+ -+ // Is the descID unique? -+ // (In other words: Is the fqName + constLabel combination unique?) -+ if _, exists := r.descIDs[desc.id]; exists { -+ duplicateDescErr = fmt.Errorf("descriptor %s already exists with the same fully-qualified name and const label values", desc) -+ } -+ // If it is not a duplicate desc in this collector, XOR it to -+ // the collectorID. (We allow duplicate descs within the same -+ // collector, but their existence must be a no-op.) -+ if _, exists := newDescIDs[desc.id]; !exists { -+ newDescIDs[desc.id] = struct{}{} -+ collectorID ^= desc.id -+ } -+ -+ // Are all the label names and the help string consistent with -+ // previous descriptors of the same name? -+ // First check existing descriptors... -+ if dimHash, exists := r.dimHashesByName[desc.fqName]; exists { -+ if dimHash != desc.dimHash { -+ return fmt.Errorf("a previously registered descriptor with the same fully-qualified name as %s has different label names or a different help string", desc) -+ } -+ } else { -+ // ...then check the new descriptors already seen. -+ if dimHash, exists := newDimHashesByName[desc.fqName]; exists { -+ if dimHash != desc.dimHash { -+ return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc) -+ } -+ } else { -+ newDimHashesByName[desc.fqName] = desc.dimHash -+ } -+ } -+ } -+ // A Collector yielding no Desc at all is considered unchecked. -+ if len(newDescIDs) == 0 { -+ r.uncheckedCollectors = append(r.uncheckedCollectors, c) -+ return nil -+ } -+ if existing, exists := r.collectorsByID[collectorID]; exists { -+ switch e := existing.(type) { -+ case *wrappingCollector: -+ return AlreadyRegisteredError{ -+ ExistingCollector: e.unwrapRecursively(), -+ NewCollector: c, -+ } -+ default: -+ return AlreadyRegisteredError{ -+ ExistingCollector: e, -+ NewCollector: c, -+ } -+ } -+ } -+ // If the collectorID is new, but at least one of the descs existed -+ // before, we are in trouble. -+ if duplicateDescErr != nil { -+ return duplicateDescErr -+ } -+ -+ // Only after all tests have passed, actually register. -+ r.collectorsByID[collectorID] = c -+ for hash := range newDescIDs { -+ r.descIDs[hash] = struct{}{} -+ } -+ for name, dimHash := range newDimHashesByName { -+ r.dimHashesByName[name] = dimHash -+ } -+ return nil -+} -+ -+// Unregister implements Registerer. -+func (r *Registry) Unregister(c Collector) bool { -+ var ( -+ descChan = make(chan *Desc, capDescChan) -+ descIDs = map[uint64]struct{}{} -+ collectorID uint64 // All desc IDs XOR'd together. -+ ) -+ go func() { -+ c.Describe(descChan) -+ close(descChan) -+ }() -+ for desc := range descChan { -+ if _, exists := descIDs[desc.id]; !exists { -+ collectorID ^= desc.id -+ descIDs[desc.id] = struct{}{} -+ } -+ } -+ -+ r.mtx.RLock() -+ if _, exists := r.collectorsByID[collectorID]; !exists { -+ r.mtx.RUnlock() -+ return false -+ } -+ r.mtx.RUnlock() -+ -+ r.mtx.Lock() -+ defer r.mtx.Unlock() -+ -+ delete(r.collectorsByID, collectorID) -+ for id := range descIDs { -+ delete(r.descIDs, id) -+ } -+ // dimHashesByName is left untouched as those must be consistent -+ // throughout the lifetime of a program. -+ return true -+} -+ -+// MustRegister implements Registerer. -+func (r *Registry) MustRegister(cs ...Collector) { -+ for _, c := range cs { -+ if err := r.Register(c); err != nil { -+ panic(err) -+ } -+ } -+} -+ -+// Gather implements Gatherer. -+func (r *Registry) Gather() ([]*dto.MetricFamily, error) { -+ r.mtx.RLock() -+ -+ if len(r.collectorsByID) == 0 && len(r.uncheckedCollectors) == 0 { -+ // Fast path. -+ r.mtx.RUnlock() -+ return nil, nil -+ } -+ -+ var ( -+ checkedMetricChan = make(chan Metric, capMetricChan) -+ uncheckedMetricChan = make(chan Metric, capMetricChan) -+ metricHashes = map[uint64]struct{}{} -+ wg sync.WaitGroup -+ errs MultiError // The collected errors to return in the end. -+ registeredDescIDs map[uint64]struct{} // Only used for pedantic checks -+ ) -+ -+ goroutineBudget := len(r.collectorsByID) + len(r.uncheckedCollectors) -+ metricFamiliesByName := make(map[string]*dto.MetricFamily, len(r.dimHashesByName)) -+ checkedCollectors := make(chan Collector, len(r.collectorsByID)) -+ uncheckedCollectors := make(chan Collector, len(r.uncheckedCollectors)) -+ for _, collector := range r.collectorsByID { -+ checkedCollectors <- collector -+ } -+ for _, collector := range r.uncheckedCollectors { -+ uncheckedCollectors <- collector -+ } -+ // In case pedantic checks are enabled, we have to copy the map before -+ // giving up the RLock. -+ if r.pedanticChecksEnabled { -+ registeredDescIDs = make(map[uint64]struct{}, len(r.descIDs)) -+ for id := range r.descIDs { -+ registeredDescIDs[id] = struct{}{} -+ } -+ } -+ r.mtx.RUnlock() -+ -+ wg.Add(goroutineBudget) -+ -+ collectWorker := func() { -+ for { -+ select { -+ case collector := <-checkedCollectors: -+ collector.Collect(checkedMetricChan) -+ case collector := <-uncheckedCollectors: -+ collector.Collect(uncheckedMetricChan) -+ default: -+ return -+ } -+ wg.Done() -+ } -+ } -+ -+ // Start the first worker now to make sure at least one is running. -+ go collectWorker() -+ goroutineBudget-- -+ -+ // Close checkedMetricChan and uncheckedMetricChan once all collectors -+ // are collected. -+ go func() { -+ wg.Wait() -+ close(checkedMetricChan) -+ close(uncheckedMetricChan) -+ }() -+ -+ // Drain checkedMetricChan and uncheckedMetricChan in case of premature return. -+ defer func() { -+ if checkedMetricChan != nil { -+ for range checkedMetricChan { -+ } -+ } -+ if uncheckedMetricChan != nil { -+ for range uncheckedMetricChan { -+ } -+ } -+ }() -+ -+ // Copy the channel references so we can nil them out later to remove -+ // them from the select statements below. -+ cmc := checkedMetricChan -+ umc := uncheckedMetricChan -+ -+ for { -+ select { -+ case metric, ok := <-cmc: -+ if !ok { -+ cmc = nil -+ break -+ } -+ errs.Append(processMetric( -+ metric, metricFamiliesByName, -+ metricHashes, -+ registeredDescIDs, -+ )) -+ case metric, ok := <-umc: -+ if !ok { -+ umc = nil -+ break -+ } -+ errs.Append(processMetric( -+ metric, metricFamiliesByName, -+ metricHashes, -+ nil, -+ )) -+ default: -+ if goroutineBudget <= 0 || len(checkedCollectors)+len(uncheckedCollectors) == 0 { -+ // All collectors are already being worked on or -+ // we have already as many goroutines started as -+ // there are collectors. Do the same as above, -+ // just without the default. -+ select { -+ case metric, ok := <-cmc: -+ if !ok { -+ cmc = nil -+ break -+ } -+ errs.Append(processMetric( -+ metric, metricFamiliesByName, -+ metricHashes, -+ registeredDescIDs, -+ )) -+ case metric, ok := <-umc: -+ if !ok { -+ umc = nil -+ break -+ } -+ errs.Append(processMetric( -+ metric, metricFamiliesByName, -+ metricHashes, -+ nil, -+ )) -+ } -+ break -+ } -+ // Start more workers. -+ go collectWorker() -+ goroutineBudget-- -+ runtime.Gosched() -+ } -+ // Once both checkedMetricChan and uncheckdMetricChan are closed -+ // and drained, the contraption above will nil out cmc and umc, -+ // and then we can leave the collect loop here. -+ if cmc == nil && umc == nil { -+ break -+ } -+ } -+ return internal.NormalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() -+} -+ -+// Describe implements Collector. -+func (r *Registry) Describe(ch chan<- *Desc) { -+ r.mtx.RLock() -+ defer r.mtx.RUnlock() -+ -+ // Only report the checked Collectors; unchecked collectors don't report any -+ // Desc. -+ for _, c := range r.collectorsByID { -+ c.Describe(ch) -+ } -+} -+ -+// Collect implements Collector. -+func (r *Registry) Collect(ch chan<- Metric) { -+ r.mtx.RLock() -+ defer r.mtx.RUnlock() -+ -+ for _, c := range r.collectorsByID { -+ c.Collect(ch) -+ } -+ for _, c := range r.uncheckedCollectors { -+ c.Collect(ch) -+ } -+} -+ -+// WriteToTextfile calls Gather on the provided Gatherer, encodes the result in the -+// Prometheus text format, and writes it to a temporary file. Upon success, the -+// temporary file is renamed to the provided filename. -+// -+// This is intended for use with the textfile collector of the node exporter. -+// Note that the node exporter expects the filename to be suffixed with ".prom". -+func WriteToTextfile(filename string, g Gatherer) error { -+ tmp, err := os.CreateTemp(filepath.Dir(filename), filepath.Base(filename)) -+ if err != nil { -+ return err -+ } -+ defer os.Remove(tmp.Name()) -+ -+ mfs, err := g.Gather() -+ if err != nil { -+ return err -+ } -+ for _, mf := range mfs { -+ if _, err := expfmt.MetricFamilyToText(tmp, mf); err != nil { -+ return err -+ } -+ } -+ if err := tmp.Close(); err != nil { -+ return err -+ } -+ -+ if err := os.Chmod(tmp.Name(), 0o644); err != nil { -+ return err -+ } -+ return os.Rename(tmp.Name(), filename) -+} -+ -+// processMetric is an internal helper method only used by the Gather method. -+func processMetric( -+ metric Metric, -+ metricFamiliesByName map[string]*dto.MetricFamily, -+ metricHashes map[uint64]struct{}, -+ registeredDescIDs map[uint64]struct{}, -+) error { -+ desc := metric.Desc() -+ // Wrapped metrics collected by an unchecked Collector can have an -+ // invalid Desc. -+ if desc.err != nil { -+ return desc.err -+ } -+ dtoMetric := &dto.Metric{} -+ if err := metric.Write(dtoMetric); err != nil { -+ return fmt.Errorf("error collecting metric %v: %w", desc, err) -+ } -+ metricFamily, ok := metricFamiliesByName[desc.fqName] -+ if ok { // Existing name. -+ if metricFamily.GetHelp() != desc.help { -+ return fmt.Errorf( -+ "collected metric %s %s has help %q but should have %q", -+ desc.fqName, dtoMetric, desc.help, metricFamily.GetHelp(), -+ ) -+ } -+ // TODO(beorn7): Simplify switch once Desc has type. -+ switch metricFamily.GetType() { -+ case dto.MetricType_COUNTER: -+ if dtoMetric.Counter == nil { -+ return fmt.Errorf( -+ "collected metric %s %s should be a Counter", -+ desc.fqName, dtoMetric, -+ ) -+ } -+ case dto.MetricType_GAUGE: -+ if dtoMetric.Gauge == nil { -+ return fmt.Errorf( -+ "collected metric %s %s should be a Gauge", -+ desc.fqName, dtoMetric, -+ ) -+ } -+ case dto.MetricType_SUMMARY: -+ if dtoMetric.Summary == nil { -+ return fmt.Errorf( -+ "collected metric %s %s should be a Summary", -+ desc.fqName, dtoMetric, -+ ) -+ } -+ case dto.MetricType_UNTYPED: -+ if dtoMetric.Untyped == nil { -+ return fmt.Errorf( -+ "collected metric %s %s should be Untyped", -+ desc.fqName, dtoMetric, -+ ) -+ } -+ case dto.MetricType_HISTOGRAM: -+ if dtoMetric.Histogram == nil { -+ return fmt.Errorf( -+ "collected metric %s %s should be a Histogram", -+ desc.fqName, dtoMetric, -+ ) -+ } -+ default: -+ panic("encountered MetricFamily with invalid type") -+ } -+ } else { // New name. -+ metricFamily = &dto.MetricFamily{} -+ metricFamily.Name = proto.String(desc.fqName) -+ metricFamily.Help = proto.String(desc.help) -+ // TODO(beorn7): Simplify switch once Desc has type. -+ switch { -+ case dtoMetric.Gauge != nil: -+ metricFamily.Type = dto.MetricType_GAUGE.Enum() -+ case dtoMetric.Counter != nil: -+ metricFamily.Type = dto.MetricType_COUNTER.Enum() -+ case dtoMetric.Summary != nil: -+ metricFamily.Type = dto.MetricType_SUMMARY.Enum() -+ case dtoMetric.Untyped != nil: -+ metricFamily.Type = dto.MetricType_UNTYPED.Enum() -+ case dtoMetric.Histogram != nil: -+ metricFamily.Type = dto.MetricType_HISTOGRAM.Enum() -+ default: -+ return fmt.Errorf("empty metric collected: %s", dtoMetric) -+ } -+ if err := checkSuffixCollisions(metricFamily, metricFamiliesByName); err != nil { -+ return err -+ } -+ metricFamiliesByName[desc.fqName] = metricFamily -+ } -+ if err := checkMetricConsistency(metricFamily, dtoMetric, metricHashes); err != nil { -+ return err -+ } -+ if registeredDescIDs != nil { -+ // Is the desc registered at all? -+ if _, exist := registeredDescIDs[desc.id]; !exist { -+ return fmt.Errorf( -+ "collected metric %s %s with unregistered descriptor %s", -+ metricFamily.GetName(), dtoMetric, desc, -+ ) -+ } -+ if err := checkDescConsistency(metricFamily, dtoMetric, desc); err != nil { -+ return err -+ } -+ } -+ metricFamily.Metric = append(metricFamily.Metric, dtoMetric) -+ return nil -+} -+ -+// Gatherers is a slice of Gatherer instances that implements the Gatherer -+// interface itself. Its Gather method calls Gather on all Gatherers in the -+// slice in order and returns the merged results. Errors returned from the -+// Gather calls are all returned in a flattened MultiError. Duplicate and -+// inconsistent Metrics are skipped (first occurrence in slice order wins) and -+// reported in the returned error. -+// -+// Gatherers can be used to merge the Gather results from multiple -+// Registries. It also provides a way to directly inject existing MetricFamily -+// protobufs into the gathering by creating a custom Gatherer with a Gather -+// method that simply returns the existing MetricFamily protobufs. Note that no -+// registration is involved (in contrast to Collector registration), so -+// obviously registration-time checks cannot happen. Any inconsistencies between -+// the gathered MetricFamilies are reported as errors by the Gather method, and -+// inconsistent Metrics are dropped. Invalid parts of the MetricFamilies -+// (e.g. syntactically invalid metric or label names) will go undetected. -+type Gatherers []Gatherer -+ -+// Gather implements Gatherer. -+func (gs Gatherers) Gather() ([]*dto.MetricFamily, error) { -+ var ( -+ metricFamiliesByName = map[string]*dto.MetricFamily{} -+ metricHashes = map[uint64]struct{}{} -+ errs MultiError // The collected errors to return in the end. -+ ) -+ -+ for i, g := range gs { -+ mfs, err := g.Gather() -+ if err != nil { -+ multiErr := MultiError{} -+ if errors.As(err, &multiErr) { -+ for _, err := range multiErr { -+ errs = append(errs, fmt.Errorf("[from Gatherer #%d] %w", i+1, err)) -+ } -+ } else { -+ errs = append(errs, fmt.Errorf("[from Gatherer #%d] %w", i+1, err)) -+ } -+ } -+ for _, mf := range mfs { -+ existingMF, exists := metricFamiliesByName[mf.GetName()] -+ if exists { -+ if existingMF.GetHelp() != mf.GetHelp() { -+ errs = append(errs, fmt.Errorf( -+ "gathered metric family %s has help %q but should have %q", -+ mf.GetName(), mf.GetHelp(), existingMF.GetHelp(), -+ )) -+ continue -+ } -+ if existingMF.GetType() != mf.GetType() { -+ errs = append(errs, fmt.Errorf( -+ "gathered metric family %s has type %s but should have %s", -+ mf.GetName(), mf.GetType(), existingMF.GetType(), -+ )) -+ continue -+ } -+ } else { -+ existingMF = &dto.MetricFamily{} -+ existingMF.Name = mf.Name -+ existingMF.Help = mf.Help -+ existingMF.Type = mf.Type -+ if err := checkSuffixCollisions(existingMF, metricFamiliesByName); err != nil { -+ errs = append(errs, err) -+ continue -+ } -+ metricFamiliesByName[mf.GetName()] = existingMF -+ } -+ for _, m := range mf.Metric { -+ if err := checkMetricConsistency(existingMF, m, metricHashes); err != nil { -+ errs = append(errs, err) -+ continue -+ } -+ existingMF.Metric = append(existingMF.Metric, m) -+ } -+ } -+ } -+ return internal.NormalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() -+} -+ -+// checkSuffixCollisions checks for collisions with the “magic” suffixes the -+// Prometheus text format and the internal metric representation of the -+// Prometheus server add while flattening Summaries and Histograms. -+func checkSuffixCollisions(mf *dto.MetricFamily, mfs map[string]*dto.MetricFamily) error { -+ var ( -+ newName = mf.GetName() -+ newType = mf.GetType() -+ newNameWithoutSuffix = "" -+ ) -+ switch { -+ case strings.HasSuffix(newName, "_count"): -+ newNameWithoutSuffix = newName[:len(newName)-6] -+ case strings.HasSuffix(newName, "_sum"): -+ newNameWithoutSuffix = newName[:len(newName)-4] -+ case strings.HasSuffix(newName, "_bucket"): -+ newNameWithoutSuffix = newName[:len(newName)-7] -+ } -+ if newNameWithoutSuffix != "" { -+ if existingMF, ok := mfs[newNameWithoutSuffix]; ok { -+ switch existingMF.GetType() { -+ case dto.MetricType_SUMMARY: -+ if !strings.HasSuffix(newName, "_bucket") { -+ return fmt.Errorf( -+ "collected metric named %q collides with previously collected summary named %q", -+ newName, newNameWithoutSuffix, -+ ) -+ } -+ case dto.MetricType_HISTOGRAM: -+ return fmt.Errorf( -+ "collected metric named %q collides with previously collected histogram named %q", -+ newName, newNameWithoutSuffix, -+ ) -+ } -+ } -+ } -+ if newType == dto.MetricType_SUMMARY || newType == dto.MetricType_HISTOGRAM { -+ if _, ok := mfs[newName+"_count"]; ok { -+ return fmt.Errorf( -+ "collected histogram or summary named %q collides with previously collected metric named %q", -+ newName, newName+"_count", -+ ) -+ } -+ if _, ok := mfs[newName+"_sum"]; ok { -+ return fmt.Errorf( -+ "collected histogram or summary named %q collides with previously collected metric named %q", -+ newName, newName+"_sum", -+ ) -+ } -+ } -+ if newType == dto.MetricType_HISTOGRAM { -+ if _, ok := mfs[newName+"_bucket"]; ok { -+ return fmt.Errorf( -+ "collected histogram named %q collides with previously collected metric named %q", -+ newName, newName+"_bucket", -+ ) -+ } -+ } -+ return nil -+} -+ -+// checkMetricConsistency checks if the provided Metric is consistent with the -+// provided MetricFamily. It also hashes the Metric labels and the MetricFamily -+// name. If the resulting hash is already in the provided metricHashes, an error -+// is returned. If not, it is added to metricHashes. -+func checkMetricConsistency( -+ metricFamily *dto.MetricFamily, -+ dtoMetric *dto.Metric, -+ metricHashes map[uint64]struct{}, -+) error { -+ name := metricFamily.GetName() -+ -+ // Type consistency with metric family. -+ if metricFamily.GetType() == dto.MetricType_GAUGE && dtoMetric.Gauge == nil || -+ metricFamily.GetType() == dto.MetricType_COUNTER && dtoMetric.Counter == nil || -+ metricFamily.GetType() == dto.MetricType_SUMMARY && dtoMetric.Summary == nil || -+ metricFamily.GetType() == dto.MetricType_HISTOGRAM && dtoMetric.Histogram == nil || -+ metricFamily.GetType() == dto.MetricType_UNTYPED && dtoMetric.Untyped == nil { -+ return fmt.Errorf( -+ "collected metric %q { %s} is not a %s", -+ name, dtoMetric, metricFamily.GetType(), -+ ) -+ } -+ -+ previousLabelName := "" -+ for _, labelPair := range dtoMetric.GetLabel() { -+ labelName := labelPair.GetName() -+ if labelName == previousLabelName { -+ return fmt.Errorf( -+ "collected metric %q { %s} has two or more labels with the same name: %s", -+ name, dtoMetric, labelName, -+ ) -+ } -+ if !checkLabelName(labelName) { -+ return fmt.Errorf( -+ "collected metric %q { %s} has a label with an invalid name: %s", -+ name, dtoMetric, labelName, -+ ) -+ } -+ if dtoMetric.Summary != nil && labelName == quantileLabel { -+ return fmt.Errorf( -+ "collected metric %q { %s} must not have an explicit %q label", -+ name, dtoMetric, quantileLabel, -+ ) -+ } -+ if !utf8.ValidString(labelPair.GetValue()) { -+ return fmt.Errorf( -+ "collected metric %q { %s} has a label named %q whose value is not utf8: %#v", -+ name, dtoMetric, labelName, labelPair.GetValue()) -+ } -+ previousLabelName = labelName -+ } -+ -+ // Is the metric unique (i.e. no other metric with the same name and the same labels)? -+ h := xxhash.New() -+ h.WriteString(name) -+ h.Write(separatorByteSlice) -+ // Make sure label pairs are sorted. We depend on it for the consistency -+ // check. -+ if !sort.IsSorted(internal.LabelPairSorter(dtoMetric.Label)) { -+ // We cannot sort dtoMetric.Label in place as it is immutable by contract. -+ copiedLabels := make([]*dto.LabelPair, len(dtoMetric.Label)) -+ copy(copiedLabels, dtoMetric.Label) -+ sort.Sort(internal.LabelPairSorter(copiedLabels)) -+ dtoMetric.Label = copiedLabels -+ } -+ for _, lp := range dtoMetric.Label { -+ h.WriteString(lp.GetName()) -+ h.Write(separatorByteSlice) -+ h.WriteString(lp.GetValue()) -+ h.Write(separatorByteSlice) -+ } -+ hSum := h.Sum64() -+ if _, exists := metricHashes[hSum]; exists { -+ return fmt.Errorf( -+ "collected metric %q { %s} was collected before with the same name and label values", -+ name, dtoMetric, -+ ) -+ } -+ metricHashes[hSum] = struct{}{} -+ return nil -+} -+ -+func checkDescConsistency( -+ metricFamily *dto.MetricFamily, -+ dtoMetric *dto.Metric, -+ desc *Desc, -+) error { -+ // Desc help consistency with metric family help. -+ if metricFamily.GetHelp() != desc.help { -+ return fmt.Errorf( -+ "collected metric %s %s has help %q but should have %q", -+ metricFamily.GetName(), dtoMetric, metricFamily.GetHelp(), desc.help, -+ ) -+ } -+ -+ // Is the desc consistent with the content of the metric? -+ lpsFromDesc := make([]*dto.LabelPair, len(desc.constLabelPairs), len(dtoMetric.Label)) -+ copy(lpsFromDesc, desc.constLabelPairs) -+ for _, l := range desc.variableLabels { -+ lpsFromDesc = append(lpsFromDesc, &dto.LabelPair{ -+ Name: proto.String(l), -+ }) -+ } -+ if len(lpsFromDesc) != len(dtoMetric.Label) { -+ return fmt.Errorf( -+ "labels in collected metric %s %s are inconsistent with descriptor %s", -+ metricFamily.GetName(), dtoMetric, desc, -+ ) -+ } -+ sort.Sort(internal.LabelPairSorter(lpsFromDesc)) -+ for i, lpFromDesc := range lpsFromDesc { -+ lpFromMetric := dtoMetric.Label[i] -+ if lpFromDesc.GetName() != lpFromMetric.GetName() || -+ lpFromDesc.Value != nil && lpFromDesc.GetValue() != lpFromMetric.GetValue() { -+ return fmt.Errorf( -+ "labels in collected metric %s %s are inconsistent with descriptor %s", -+ metricFamily.GetName(), dtoMetric, desc, -+ ) -+ } -+ } -+ return nil -+} -+ -+var _ TransactionalGatherer = &MultiTRegistry{} -+ -+// MultiTRegistry is a TransactionalGatherer that joins gathered metrics from multiple -+// transactional gatherers. -+// -+// It is caller responsibility to ensure two registries have mutually exclusive metric families, -+// no deduplication will happen. -+type MultiTRegistry struct { -+ tGatherers []TransactionalGatherer -+} -+ -+// NewMultiTRegistry creates MultiTRegistry. -+func NewMultiTRegistry(tGatherers ...TransactionalGatherer) *MultiTRegistry { -+ return &MultiTRegistry{ -+ tGatherers: tGatherers, -+ } -+} -+ -+// Gather implements TransactionalGatherer interface. -+func (r *MultiTRegistry) Gather() (mfs []*dto.MetricFamily, done func(), err error) { -+ errs := MultiError{} -+ -+ dFns := make([]func(), 0, len(r.tGatherers)) -+ // TODO(bwplotka): Implement concurrency for those? -+ for _, g := range r.tGatherers { -+ // TODO(bwplotka): Check for duplicates? -+ m, d, err := g.Gather() -+ errs.Append(err) -+ -+ mfs = append(mfs, m...) -+ dFns = append(dFns, d) -+ } -+ -+ // TODO(bwplotka): Consider sort in place, given metric family in gather is sorted already. -+ sort.Slice(mfs, func(i, j int) bool { -+ return *mfs[i].Name < *mfs[j].Name -+ }) -+ return mfs, func() { -+ for _, d := range dFns { -+ d() -+ } -+ }, errs.MaybeUnwrap() -+} -+ -+// TransactionalGatherer represents transactional gatherer that can be triggered to notify gatherer that memory -+// used by metric family is no longer used by a caller. This allows implementations with cache. -+type TransactionalGatherer interface { -+ // Gather returns metrics in a lexicographically sorted slice -+ // of uniquely named MetricFamily protobufs. Gather ensures that the -+ // returned slice is valid and self-consistent so that it can be used -+ // for valid exposition. As an exception to the strict consistency -+ // requirements described for metric.Desc, Gather will tolerate -+ // different sets of label names for metrics of the same metric family. -+ // -+ // Even if an error occurs, Gather attempts to gather as many metrics as -+ // possible. Hence, if a non-nil error is returned, the returned -+ // MetricFamily slice could be nil (in case of a fatal error that -+ // prevented any meaningful metric collection) or contain a number of -+ // MetricFamily protobufs, some of which might be incomplete, and some -+ // might be missing altogether. The returned error (which might be a -+ // MultiError) explains the details. Note that this is mostly useful for -+ // debugging purposes. If the gathered protobufs are to be used for -+ // exposition in actual monitoring, it is almost always better to not -+ // expose an incomplete result and instead disregard the returned -+ // MetricFamily protobufs in case the returned error is non-nil. -+ // -+ // Important: done is expected to be triggered (even if the error occurs!) -+ // once caller does not need returned slice of dto.MetricFamily. -+ Gather() (_ []*dto.MetricFamily, done func(), err error) -+} -+ -+// ToTransactionalGatherer transforms Gatherer to transactional one with noop as done function. -+func ToTransactionalGatherer(g Gatherer) TransactionalGatherer { -+ return &noTransactionGatherer{g: g} -+} -+ -+type noTransactionGatherer struct { -+ g Gatherer -+} -+ -+// Gather implements TransactionalGatherer interface. -+func (g *noTransactionGatherer) Gather() (_ []*dto.MetricFamily, done func(), err error) { -+ mfs, err := g.g.Gather() -+ return mfs, func() {}, err -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go -new file mode 100755 -index 0000000..7bc448a ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go -@@ -0,0 +1,747 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "fmt" -+ "math" -+ "runtime" -+ "sort" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "github.com/beorn7/perks/quantile" -+ //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. -+ "github.com/golang/protobuf/proto" -+ -+ dto "github.com/prometheus/client_model/go" -+) -+ -+// quantileLabel is used for the label that defines the quantile in a -+// summary. -+const quantileLabel = "quantile" -+ -+// A Summary captures individual observations from an event or sample stream and -+// summarizes them in a manner similar to traditional summary statistics: 1. sum -+// of observations, 2. observation count, 3. rank estimations. -+// -+// A typical use-case is the observation of request latencies. By default, a -+// Summary provides the median, the 90th and the 99th percentile of the latency -+// as rank estimations. However, the default behavior will change in the -+// upcoming v1.0.0 of the library. There will be no rank estimations at all by -+// default. For a sane transition, it is recommended to set the desired rank -+// estimations explicitly. -+// -+// Note that the rank estimations cannot be aggregated in a meaningful way with -+// the Prometheus query language (i.e. you cannot average or add them). If you -+// need aggregatable quantiles (e.g. you want the 99th percentile latency of all -+// queries served across all instances of a service), consider the Histogram -+// metric type. See the Prometheus documentation for more details. -+// -+// To create Summary instances, use NewSummary. -+type Summary interface { -+ Metric -+ Collector -+ -+ // Observe adds a single observation to the summary. Observations are -+ // usually positive or zero. Negative observations are accepted but -+ // prevent current versions of Prometheus from properly detecting -+ // counter resets in the sum of observations. See -+ // https://prometheus.io/docs/practices/histograms/#count-and-sum-of-observations -+ // for details. -+ Observe(float64) -+} -+ -+var errQuantileLabelNotAllowed = fmt.Errorf( -+ "%q is not allowed as label name in summaries", quantileLabel, -+) -+ -+// Default values for SummaryOpts. -+const ( -+ // DefMaxAge is the default duration for which observations stay -+ // relevant. -+ DefMaxAge time.Duration = 10 * time.Minute -+ // DefAgeBuckets is the default number of buckets used to calculate the -+ // age of observations. -+ DefAgeBuckets = 5 -+ // DefBufCap is the standard buffer size for collecting Summary observations. -+ DefBufCap = 500 -+) -+ -+// SummaryOpts bundles the options for creating a Summary metric. It is -+// mandatory to set Name to a non-empty string. While all other fields are -+// optional and can safely be left at their zero value, it is recommended to set -+// a help string and to explicitly set the Objectives field to the desired value -+// as the default value will change in the upcoming v1.0.0 of the library. -+type SummaryOpts struct { -+ // Namespace, Subsystem, and Name are components of the fully-qualified -+ // name of the Summary (created by joining these components with -+ // "_"). Only Name is mandatory, the others merely help structuring the -+ // name. Note that the fully-qualified name of the Summary must be a -+ // valid Prometheus metric name. -+ Namespace string -+ Subsystem string -+ Name string -+ -+ // Help provides information about this Summary. -+ // -+ // Metrics with the same fully-qualified name must have the same Help -+ // string. -+ Help string -+ -+ // ConstLabels are used to attach fixed labels to this metric. Metrics -+ // with the same fully-qualified name must have the same label names in -+ // their ConstLabels. -+ // -+ // Due to the way a Summary is represented in the Prometheus text format -+ // and how it is handled by the Prometheus server internally, “quantile” -+ // is an illegal label name. Construction of a Summary or SummaryVec -+ // will panic if this label name is used in ConstLabels. -+ // -+ // ConstLabels are only used rarely. In particular, do not use them to -+ // attach the same labels to all your metrics. Those use cases are -+ // better covered by target labels set by the scraping Prometheus -+ // server, or by one specific metric (e.g. a build_info or a -+ // machine_role metric). See also -+ // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels -+ ConstLabels Labels -+ -+ // Objectives defines the quantile rank estimates with their respective -+ // absolute error. If Objectives[q] = e, then the value reported for q -+ // will be the φ-quantile value for some φ between q-e and q+e. The -+ // default value is an empty map, resulting in a summary without -+ // quantiles. -+ Objectives map[float64]float64 -+ -+ // MaxAge defines the duration for which an observation stays relevant -+ // for the summary. Only applies to pre-calculated quantiles, does not -+ // apply to _sum and _count. Must be positive. The default value is -+ // DefMaxAge. -+ MaxAge time.Duration -+ -+ // AgeBuckets is the number of buckets used to exclude observations that -+ // are older than MaxAge from the summary. A higher number has a -+ // resource penalty, so only increase it if the higher resolution is -+ // really required. For very high observation rates, you might want to -+ // reduce the number of age buckets. With only one age bucket, you will -+ // effectively see a complete reset of the summary each time MaxAge has -+ // passed. The default value is DefAgeBuckets. -+ AgeBuckets uint32 -+ -+ // BufCap defines the default sample stream buffer size. The default -+ // value of DefBufCap should suffice for most uses. If there is a need -+ // to increase the value, a multiple of 500 is recommended (because that -+ // is the internal buffer size of the underlying package -+ // "github.com/bmizerany/perks/quantile"). -+ BufCap uint32 -+} -+ -+// Problem with the sliding-window decay algorithm... The Merge method of -+// perk/quantile is actually not working as advertised - and it might be -+// unfixable, as the underlying algorithm is apparently not capable of merging -+// summaries in the first place. To avoid using Merge, we are currently adding -+// observations to _each_ age bucket, i.e. the effort to add a sample is -+// essentially multiplied by the number of age buckets. When rotating age -+// buckets, we empty the previous head stream. On scrape time, we simply take -+// the quantiles from the head stream (no merging required). Result: More effort -+// on observation time, less effort on scrape time, which is exactly the -+// opposite of what we try to accomplish, but at least the results are correct. -+// -+// The quite elegant previous contraption to merge the age buckets efficiently -+// on scrape time (see code up commit 6b9530d72ea715f0ba612c0120e6e09fbf1d49d0) -+// can't be used anymore. -+ -+// NewSummary creates a new Summary based on the provided SummaryOpts. -+func NewSummary(opts SummaryOpts) Summary { -+ return newSummary( -+ NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ nil, -+ opts.ConstLabels, -+ ), -+ opts, -+ ) -+} -+ -+func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { -+ if len(desc.variableLabels) != len(labelValues) { -+ panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, labelValues)) -+ } -+ -+ for _, n := range desc.variableLabels { -+ if n == quantileLabel { -+ panic(errQuantileLabelNotAllowed) -+ } -+ } -+ for _, lp := range desc.constLabelPairs { -+ if lp.GetName() == quantileLabel { -+ panic(errQuantileLabelNotAllowed) -+ } -+ } -+ -+ if opts.Objectives == nil { -+ opts.Objectives = map[float64]float64{} -+ } -+ -+ if opts.MaxAge < 0 { -+ panic(fmt.Errorf("illegal max age MaxAge=%v", opts.MaxAge)) -+ } -+ if opts.MaxAge == 0 { -+ opts.MaxAge = DefMaxAge -+ } -+ -+ if opts.AgeBuckets == 0 { -+ opts.AgeBuckets = DefAgeBuckets -+ } -+ -+ if opts.BufCap == 0 { -+ opts.BufCap = DefBufCap -+ } -+ -+ if len(opts.Objectives) == 0 { -+ // Use the lock-free implementation of a Summary without objectives. -+ s := &noObjectivesSummary{ -+ desc: desc, -+ labelPairs: MakeLabelPairs(desc, labelValues), -+ counts: [2]*summaryCounts{{}, {}}, -+ } -+ s.init(s) // Init self-collection. -+ return s -+ } -+ -+ s := &summary{ -+ desc: desc, -+ -+ objectives: opts.Objectives, -+ sortedObjectives: make([]float64, 0, len(opts.Objectives)), -+ -+ labelPairs: MakeLabelPairs(desc, labelValues), -+ -+ hotBuf: make([]float64, 0, opts.BufCap), -+ coldBuf: make([]float64, 0, opts.BufCap), -+ streamDuration: opts.MaxAge / time.Duration(opts.AgeBuckets), -+ } -+ s.headStreamExpTime = time.Now().Add(s.streamDuration) -+ s.hotBufExpTime = s.headStreamExpTime -+ -+ for i := uint32(0); i < opts.AgeBuckets; i++ { -+ s.streams = append(s.streams, s.newStream()) -+ } -+ s.headStream = s.streams[0] -+ -+ for qu := range s.objectives { -+ s.sortedObjectives = append(s.sortedObjectives, qu) -+ } -+ sort.Float64s(s.sortedObjectives) -+ -+ s.init(s) // Init self-collection. -+ return s -+} -+ -+type summary struct { -+ selfCollector -+ -+ bufMtx sync.Mutex // Protects hotBuf and hotBufExpTime. -+ mtx sync.Mutex // Protects every other moving part. -+ // Lock bufMtx before mtx if both are needed. -+ -+ desc *Desc -+ -+ objectives map[float64]float64 -+ sortedObjectives []float64 -+ -+ labelPairs []*dto.LabelPair -+ -+ sum float64 -+ cnt uint64 -+ -+ hotBuf, coldBuf []float64 -+ -+ streams []*quantile.Stream -+ streamDuration time.Duration -+ headStream *quantile.Stream -+ headStreamIdx int -+ headStreamExpTime, hotBufExpTime time.Time -+} -+ -+func (s *summary) Desc() *Desc { -+ return s.desc -+} -+ -+func (s *summary) Observe(v float64) { -+ s.bufMtx.Lock() -+ defer s.bufMtx.Unlock() -+ -+ now := time.Now() -+ if now.After(s.hotBufExpTime) { -+ s.asyncFlush(now) -+ } -+ s.hotBuf = append(s.hotBuf, v) -+ if len(s.hotBuf) == cap(s.hotBuf) { -+ s.asyncFlush(now) -+ } -+} -+ -+func (s *summary) Write(out *dto.Metric) error { -+ sum := &dto.Summary{} -+ qs := make([]*dto.Quantile, 0, len(s.objectives)) -+ -+ s.bufMtx.Lock() -+ s.mtx.Lock() -+ // Swap bufs even if hotBuf is empty to set new hotBufExpTime. -+ s.swapBufs(time.Now()) -+ s.bufMtx.Unlock() -+ -+ s.flushColdBuf() -+ sum.SampleCount = proto.Uint64(s.cnt) -+ sum.SampleSum = proto.Float64(s.sum) -+ -+ for _, rank := range s.sortedObjectives { -+ var q float64 -+ if s.headStream.Count() == 0 { -+ q = math.NaN() -+ } else { -+ q = s.headStream.Query(rank) -+ } -+ qs = append(qs, &dto.Quantile{ -+ Quantile: proto.Float64(rank), -+ Value: proto.Float64(q), -+ }) -+ } -+ -+ s.mtx.Unlock() -+ -+ if len(qs) > 0 { -+ sort.Sort(quantSort(qs)) -+ } -+ sum.Quantile = qs -+ -+ out.Summary = sum -+ out.Label = s.labelPairs -+ return nil -+} -+ -+func (s *summary) newStream() *quantile.Stream { -+ return quantile.NewTargeted(s.objectives) -+} -+ -+// asyncFlush needs bufMtx locked. -+func (s *summary) asyncFlush(now time.Time) { -+ s.mtx.Lock() -+ s.swapBufs(now) -+ -+ // Unblock the original goroutine that was responsible for the mutation -+ // that triggered the compaction. But hold onto the global non-buffer -+ // state mutex until the operation finishes. -+ go func() { -+ s.flushColdBuf() -+ s.mtx.Unlock() -+ }() -+} -+ -+// rotateStreams needs mtx AND bufMtx locked. -+func (s *summary) maybeRotateStreams() { -+ for !s.hotBufExpTime.Equal(s.headStreamExpTime) { -+ s.headStream.Reset() -+ s.headStreamIdx++ -+ if s.headStreamIdx >= len(s.streams) { -+ s.headStreamIdx = 0 -+ } -+ s.headStream = s.streams[s.headStreamIdx] -+ s.headStreamExpTime = s.headStreamExpTime.Add(s.streamDuration) -+ } -+} -+ -+// flushColdBuf needs mtx locked. -+func (s *summary) flushColdBuf() { -+ for _, v := range s.coldBuf { -+ for _, stream := range s.streams { -+ stream.Insert(v) -+ } -+ s.cnt++ -+ s.sum += v -+ } -+ s.coldBuf = s.coldBuf[0:0] -+ s.maybeRotateStreams() -+} -+ -+// swapBufs needs mtx AND bufMtx locked, coldBuf must be empty. -+func (s *summary) swapBufs(now time.Time) { -+ if len(s.coldBuf) != 0 { -+ panic("coldBuf is not empty") -+ } -+ s.hotBuf, s.coldBuf = s.coldBuf, s.hotBuf -+ // hotBuf is now empty and gets new expiration set. -+ for now.After(s.hotBufExpTime) { -+ s.hotBufExpTime = s.hotBufExpTime.Add(s.streamDuration) -+ } -+} -+ -+type summaryCounts struct { -+ // sumBits contains the bits of the float64 representing the sum of all -+ // observations. sumBits and count have to go first in the struct to -+ // guarantee alignment for atomic operations. -+ // http://golang.org/pkg/sync/atomic/#pkg-note-BUG -+ sumBits uint64 -+ count uint64 -+} -+ -+type noObjectivesSummary struct { -+ // countAndHotIdx enables lock-free writes with use of atomic updates. -+ // The most significant bit is the hot index [0 or 1] of the count field -+ // below. Observe calls update the hot one. All remaining bits count the -+ // number of Observe calls. Observe starts by incrementing this counter, -+ // and finish by incrementing the count field in the respective -+ // summaryCounts, as a marker for completion. -+ // -+ // Calls of the Write method (which are non-mutating reads from the -+ // perspective of the summary) swap the hot–cold under the writeMtx -+ // lock. A cooldown is awaited (while locked) by comparing the number of -+ // observations with the initiation count. Once they match, then the -+ // last observation on the now cool one has completed. All cool fields must -+ // be merged into the new hot before releasing writeMtx. -+ -+ // Fields with atomic access first! See alignment constraint: -+ // http://golang.org/pkg/sync/atomic/#pkg-note-BUG -+ countAndHotIdx uint64 -+ -+ selfCollector -+ desc *Desc -+ writeMtx sync.Mutex // Only used in the Write method. -+ -+ // Two counts, one is "hot" for lock-free observations, the other is -+ // "cold" for writing out a dto.Metric. It has to be an array of -+ // pointers to guarantee 64bit alignment of the histogramCounts, see -+ // http://golang.org/pkg/sync/atomic/#pkg-note-BUG. -+ counts [2]*summaryCounts -+ -+ labelPairs []*dto.LabelPair -+} -+ -+func (s *noObjectivesSummary) Desc() *Desc { -+ return s.desc -+} -+ -+func (s *noObjectivesSummary) Observe(v float64) { -+ // We increment h.countAndHotIdx so that the counter in the lower -+ // 63 bits gets incremented. At the same time, we get the new value -+ // back, which we can use to find the currently-hot counts. -+ n := atomic.AddUint64(&s.countAndHotIdx, 1) -+ hotCounts := s.counts[n>>63] -+ -+ for { -+ oldBits := atomic.LoadUint64(&hotCounts.sumBits) -+ newBits := math.Float64bits(math.Float64frombits(oldBits) + v) -+ if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { -+ break -+ } -+ } -+ // Increment count last as we take it as a signal that the observation -+ // is complete. -+ atomic.AddUint64(&hotCounts.count, 1) -+} -+ -+func (s *noObjectivesSummary) Write(out *dto.Metric) error { -+ // For simplicity, we protect this whole method by a mutex. It is not in -+ // the hot path, i.e. Observe is called much more often than Write. The -+ // complication of making Write lock-free isn't worth it, if possible at -+ // all. -+ s.writeMtx.Lock() -+ defer s.writeMtx.Unlock() -+ -+ // Adding 1<<63 switches the hot index (from 0 to 1 or from 1 to 0) -+ // without touching the count bits. See the struct comments for a full -+ // description of the algorithm. -+ n := atomic.AddUint64(&s.countAndHotIdx, 1<<63) -+ // count is contained unchanged in the lower 63 bits. -+ count := n & ((1 << 63) - 1) -+ // The most significant bit tells us which counts is hot. The complement -+ // is thus the cold one. -+ hotCounts := s.counts[n>>63] -+ coldCounts := s.counts[(^n)>>63] -+ -+ // Await cooldown. -+ for count != atomic.LoadUint64(&coldCounts.count) { -+ runtime.Gosched() // Let observations get work done. -+ } -+ -+ sum := &dto.Summary{ -+ SampleCount: proto.Uint64(count), -+ SampleSum: proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.sumBits))), -+ } -+ -+ out.Summary = sum -+ out.Label = s.labelPairs -+ -+ // Finally add all the cold counts to the new hot counts and reset the cold counts. -+ atomic.AddUint64(&hotCounts.count, count) -+ atomic.StoreUint64(&coldCounts.count, 0) -+ for { -+ oldBits := atomic.LoadUint64(&hotCounts.sumBits) -+ newBits := math.Float64bits(math.Float64frombits(oldBits) + sum.GetSampleSum()) -+ if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { -+ atomic.StoreUint64(&coldCounts.sumBits, 0) -+ break -+ } -+ } -+ return nil -+} -+ -+type quantSort []*dto.Quantile -+ -+func (s quantSort) Len() int { -+ return len(s) -+} -+ -+func (s quantSort) Swap(i, j int) { -+ s[i], s[j] = s[j], s[i] -+} -+ -+func (s quantSort) Less(i, j int) bool { -+ return s[i].GetQuantile() < s[j].GetQuantile() -+} -+ -+// SummaryVec is a Collector that bundles a set of Summaries that all share the -+// same Desc, but have different values for their variable labels. This is used -+// if you want to count the same thing partitioned by various dimensions -+// (e.g. HTTP request latencies, partitioned by status code and method). Create -+// instances with NewSummaryVec. -+type SummaryVec struct { -+ *MetricVec -+} -+ -+// NewSummaryVec creates a new SummaryVec based on the provided SummaryOpts and -+// partitioned by the given label names. -+// -+// Due to the way a Summary is represented in the Prometheus text format and how -+// it is handled by the Prometheus server internally, “quantile” is an illegal -+// label name. NewSummaryVec will panic if this label name is used. -+func NewSummaryVec(opts SummaryOpts, labelNames []string) *SummaryVec { -+ for _, ln := range labelNames { -+ if ln == quantileLabel { -+ panic(errQuantileLabelNotAllowed) -+ } -+ } -+ desc := NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ labelNames, -+ opts.ConstLabels, -+ ) -+ return &SummaryVec{ -+ MetricVec: NewMetricVec(desc, func(lvs ...string) Metric { -+ return newSummary(desc, opts, lvs...) -+ }), -+ } -+} -+ -+// GetMetricWithLabelValues returns the Summary for the given slice of label -+// values (same order as the variable labels in Desc). If that combination of -+// label values is accessed for the first time, a new Summary is created. -+// -+// It is possible to call this method without using the returned Summary to only -+// create the new Summary but leave it at its starting value, a Summary without -+// any observations. -+// -+// Keeping the Summary for later use is possible (and should be considered if -+// performance is critical), but keep in mind that Reset, DeleteLabelValues and -+// Delete can be used to delete the Summary from the SummaryVec. In that case, -+// the Summary will still exist, but it will not be exported anymore, even if a -+// Summary with the same label values is created later. See also the CounterVec -+// example. -+// -+// An error is returned if the number of label values is not the same as the -+// number of variable labels in Desc (minus any curried labels). -+// -+// Note that for more than one label value, this method is prone to mistakes -+// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -+// an alternative to avoid that type of mistake. For higher label numbers, the -+// latter has a much more readable (albeit more verbose) syntax, but it comes -+// with a performance overhead (for creating and processing the Labels map). -+// See also the GaugeVec example. -+func (v *SummaryVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) { -+ metric, err := v.MetricVec.GetMetricWithLabelValues(lvs...) -+ if metric != nil { -+ return metric.(Observer), err -+ } -+ return nil, err -+} -+ -+// GetMetricWith returns the Summary for the given Labels map (the label names -+// must match those of the variable labels in Desc). If that label map is -+// accessed for the first time, a new Summary is created. Implications of -+// creating a Summary without using it and keeping the Summary for later use are -+// the same as for GetMetricWithLabelValues. -+// -+// An error is returned if the number and names of the Labels are inconsistent -+// with those of the variable labels in Desc (minus any curried labels). -+// -+// This method is used for the same purpose as -+// GetMetricWithLabelValues(...string). See there for pros and cons of the two -+// methods. -+func (v *SummaryVec) GetMetricWith(labels Labels) (Observer, error) { -+ metric, err := v.MetricVec.GetMetricWith(labels) -+ if metric != nil { -+ return metric.(Observer), err -+ } -+ return nil, err -+} -+ -+// WithLabelValues works as GetMetricWithLabelValues, but panics where -+// GetMetricWithLabelValues would have returned an error. Not returning an -+// error allows shortcuts like -+// -+// myVec.WithLabelValues("404", "GET").Observe(42.21) -+func (v *SummaryVec) WithLabelValues(lvs ...string) Observer { -+ s, err := v.GetMetricWithLabelValues(lvs...) -+ if err != nil { -+ panic(err) -+ } -+ return s -+} -+ -+// With works as GetMetricWith, but panics where GetMetricWithLabels would have -+// returned an error. Not returning an error allows shortcuts like -+// -+// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Observe(42.21) -+func (v *SummaryVec) With(labels Labels) Observer { -+ s, err := v.GetMetricWith(labels) -+ if err != nil { -+ panic(err) -+ } -+ return s -+} -+ -+// CurryWith returns a vector curried with the provided labels, i.e. the -+// returned vector has those labels pre-set for all labeled operations performed -+// on it. The cardinality of the curried vector is reduced accordingly. The -+// order of the remaining labels stays the same (just with the curried labels -+// taken out of the sequence – which is relevant for the -+// (GetMetric)WithLabelValues methods). It is possible to curry a curried -+// vector, but only with labels not yet used for currying before. -+// -+// The metrics contained in the SummaryVec are shared between the curried and -+// uncurried vectors. They are just accessed differently. Curried and uncurried -+// vectors behave identically in terms of collection. Only one must be -+// registered with a given registry (usually the uncurried version). The Reset -+// method deletes all metrics, even if called on a curried vector. -+func (v *SummaryVec) CurryWith(labels Labels) (ObserverVec, error) { -+ vec, err := v.MetricVec.CurryWith(labels) -+ if vec != nil { -+ return &SummaryVec{vec}, err -+ } -+ return nil, err -+} -+ -+// MustCurryWith works as CurryWith but panics where CurryWith would have -+// returned an error. -+func (v *SummaryVec) MustCurryWith(labels Labels) ObserverVec { -+ vec, err := v.CurryWith(labels) -+ if err != nil { -+ panic(err) -+ } -+ return vec -+} -+ -+type constSummary struct { -+ desc *Desc -+ count uint64 -+ sum float64 -+ quantiles map[float64]float64 -+ labelPairs []*dto.LabelPair -+} -+ -+func (s *constSummary) Desc() *Desc { -+ return s.desc -+} -+ -+func (s *constSummary) Write(out *dto.Metric) error { -+ sum := &dto.Summary{} -+ qs := make([]*dto.Quantile, 0, len(s.quantiles)) -+ -+ sum.SampleCount = proto.Uint64(s.count) -+ sum.SampleSum = proto.Float64(s.sum) -+ -+ for rank, q := range s.quantiles { -+ qs = append(qs, &dto.Quantile{ -+ Quantile: proto.Float64(rank), -+ Value: proto.Float64(q), -+ }) -+ } -+ -+ if len(qs) > 0 { -+ sort.Sort(quantSort(qs)) -+ } -+ sum.Quantile = qs -+ -+ out.Summary = sum -+ out.Label = s.labelPairs -+ -+ return nil -+} -+ -+// NewConstSummary returns a metric representing a Prometheus summary with fixed -+// values for the count, sum, and quantiles. As those parameters cannot be -+// changed, the returned value does not implement the Summary interface (but -+// only the Metric interface). Users of this package will not have much use for -+// it in regular operations. However, when implementing custom Collectors, it is -+// useful as a throw-away metric that is generated on the fly to send it to -+// Prometheus in the Collect method. -+// -+// quantiles maps ranks to quantile values. For example, a median latency of -+// 0.23s and a 99th percentile latency of 0.56s would be expressed as: -+// -+// map[float64]float64{0.5: 0.23, 0.99: 0.56} -+// -+// NewConstSummary returns an error if the length of labelValues is not -+// consistent with the variable labels in Desc or if Desc is invalid. -+func NewConstSummary( -+ desc *Desc, -+ count uint64, -+ sum float64, -+ quantiles map[float64]float64, -+ labelValues ...string, -+) (Metric, error) { -+ if desc.err != nil { -+ return nil, desc.err -+ } -+ if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { -+ return nil, err -+ } -+ return &constSummary{ -+ desc: desc, -+ count: count, -+ sum: sum, -+ quantiles: quantiles, -+ labelPairs: MakeLabelPairs(desc, labelValues), -+ }, nil -+} -+ -+// MustNewConstSummary is a version of NewConstSummary that panics where -+// NewConstMetric would have returned an error. -+func MustNewConstSummary( -+ desc *Desc, -+ count uint64, -+ sum float64, -+ quantiles map[float64]float64, -+ labelValues ...string, -+) Metric { -+ m, err := NewConstSummary(desc, count, sum, quantiles, labelValues...) -+ if err != nil { -+ panic(err) -+ } -+ return m -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/timer.go b/vendor/github.com/prometheus/client_golang/prometheus/timer.go -new file mode 100755 -index 0000000..f28a76f ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/timer.go -@@ -0,0 +1,55 @@ -+// Copyright 2016 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import "time" -+ -+// Timer is a helper type to time functions. Use NewTimer to create new -+// instances. -+type Timer struct { -+ begin time.Time -+ observer Observer -+} -+ -+// NewTimer creates a new Timer. The provided Observer is used to observe a -+// duration in seconds. Timer is usually used to time a function call in the -+// following way: -+// -+// func TimeMe() { -+// timer := NewTimer(myHistogram) -+// defer timer.ObserveDuration() -+// // Do actual work. -+// } -+func NewTimer(o Observer) *Timer { -+ return &Timer{ -+ begin: time.Now(), -+ observer: o, -+ } -+} -+ -+// ObserveDuration records the duration passed since the Timer was created with -+// NewTimer. It calls the Observe method of the Observer provided during -+// construction with the duration in seconds as an argument. The observed -+// duration is also returned. ObserveDuration is usually called with a defer -+// statement. -+// -+// Note that this method is only guaranteed to never observe negative durations -+// if used with Go1.9+. -+func (t *Timer) ObserveDuration() time.Duration { -+ d := time.Since(t.begin) -+ if t.observer != nil { -+ t.observer.Observe(d.Seconds()) -+ } -+ return d -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/untyped.go b/vendor/github.com/prometheus/client_golang/prometheus/untyped.go -new file mode 100755 -index 0000000..0f9ce63 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/untyped.go -@@ -0,0 +1,42 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+// UntypedOpts is an alias for Opts. See there for doc comments. -+type UntypedOpts Opts -+ -+// UntypedFunc works like GaugeFunc but the collected metric is of type -+// "Untyped". UntypedFunc is useful to mirror an external metric of unknown -+// type. -+// -+// To create UntypedFunc instances, use NewUntypedFunc. -+type UntypedFunc interface { -+ Metric -+ Collector -+} -+ -+// NewUntypedFunc creates a new UntypedFunc based on the provided -+// UntypedOpts. The value reported is determined by calling the given function -+// from within the Write method. Take into account that metric collection may -+// happen concurrently. If that results in concurrent calls to Write, like in -+// the case where an UntypedFunc is directly registered with Prometheus, the -+// provided function must be concurrency-safe. -+func NewUntypedFunc(opts UntypedOpts, function func() float64) UntypedFunc { -+ return newValueFunc(NewDesc( -+ BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), -+ opts.Help, -+ nil, -+ opts.ConstLabels, -+ ), UntypedValue, function) -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/value.go b/vendor/github.com/prometheus/client_golang/prometheus/value.go -new file mode 100755 -index 0000000..2d3abc1 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/value.go -@@ -0,0 +1,237 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "fmt" -+ "sort" -+ "time" -+ "unicode/utf8" -+ -+ //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. -+ "github.com/golang/protobuf/proto" -+ "google.golang.org/protobuf/types/known/timestamppb" -+ -+ "github.com/prometheus/client_golang/prometheus/internal" -+ -+ dto "github.com/prometheus/client_model/go" -+) -+ -+// ValueType is an enumeration of metric types that represent a simple value. -+type ValueType int -+ -+// Possible values for the ValueType enum. Use UntypedValue to mark a metric -+// with an unknown type. -+const ( -+ _ ValueType = iota -+ CounterValue -+ GaugeValue -+ UntypedValue -+) -+ -+var ( -+ CounterMetricTypePtr = func() *dto.MetricType { d := dto.MetricType_COUNTER; return &d }() -+ GaugeMetricTypePtr = func() *dto.MetricType { d := dto.MetricType_GAUGE; return &d }() -+ UntypedMetricTypePtr = func() *dto.MetricType { d := dto.MetricType_UNTYPED; return &d }() -+) -+ -+func (v ValueType) ToDTO() *dto.MetricType { -+ switch v { -+ case CounterValue: -+ return CounterMetricTypePtr -+ case GaugeValue: -+ return GaugeMetricTypePtr -+ default: -+ return UntypedMetricTypePtr -+ } -+} -+ -+// valueFunc is a generic metric for simple values retrieved on collect time -+// from a function. It implements Metric and Collector. Its effective type is -+// determined by ValueType. This is a low-level building block used by the -+// library to back the implementations of CounterFunc, GaugeFunc, and -+// UntypedFunc. -+type valueFunc struct { -+ selfCollector -+ -+ desc *Desc -+ valType ValueType -+ function func() float64 -+ labelPairs []*dto.LabelPair -+} -+ -+// newValueFunc returns a newly allocated valueFunc with the given Desc and -+// ValueType. The value reported is determined by calling the given function -+// from within the Write method. Take into account that metric collection may -+// happen concurrently. If that results in concurrent calls to Write, like in -+// the case where a valueFunc is directly registered with Prometheus, the -+// provided function must be concurrency-safe. -+func newValueFunc(desc *Desc, valueType ValueType, function func() float64) *valueFunc { -+ result := &valueFunc{ -+ desc: desc, -+ valType: valueType, -+ function: function, -+ labelPairs: MakeLabelPairs(desc, nil), -+ } -+ result.init(result) -+ return result -+} -+ -+func (v *valueFunc) Desc() *Desc { -+ return v.desc -+} -+ -+func (v *valueFunc) Write(out *dto.Metric) error { -+ return populateMetric(v.valType, v.function(), v.labelPairs, nil, out) -+} -+ -+// NewConstMetric returns a metric with one fixed value that cannot be -+// changed. Users of this package will not have much use for it in regular -+// operations. However, when implementing custom Collectors, it is useful as a -+// throw-away metric that is generated on the fly to send it to Prometheus in -+// the Collect method. NewConstMetric returns an error if the length of -+// labelValues is not consistent with the variable labels in Desc or if Desc is -+// invalid. -+func NewConstMetric(desc *Desc, valueType ValueType, value float64, labelValues ...string) (Metric, error) { -+ if desc.err != nil { -+ return nil, desc.err -+ } -+ if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { -+ return nil, err -+ } -+ -+ metric := &dto.Metric{} -+ if err := populateMetric(valueType, value, MakeLabelPairs(desc, labelValues), nil, metric); err != nil { -+ return nil, err -+ } -+ -+ return &constMetric{ -+ desc: desc, -+ metric: metric, -+ }, nil -+} -+ -+// MustNewConstMetric is a version of NewConstMetric that panics where -+// NewConstMetric would have returned an error. -+func MustNewConstMetric(desc *Desc, valueType ValueType, value float64, labelValues ...string) Metric { -+ m, err := NewConstMetric(desc, valueType, value, labelValues...) -+ if err != nil { -+ panic(err) -+ } -+ return m -+} -+ -+type constMetric struct { -+ desc *Desc -+ metric *dto.Metric -+} -+ -+func (m *constMetric) Desc() *Desc { -+ return m.desc -+} -+ -+func (m *constMetric) Write(out *dto.Metric) error { -+ out.Label = m.metric.Label -+ out.Counter = m.metric.Counter -+ out.Gauge = m.metric.Gauge -+ out.Untyped = m.metric.Untyped -+ return nil -+} -+ -+func populateMetric( -+ t ValueType, -+ v float64, -+ labelPairs []*dto.LabelPair, -+ e *dto.Exemplar, -+ m *dto.Metric, -+) error { -+ m.Label = labelPairs -+ switch t { -+ case CounterValue: -+ m.Counter = &dto.Counter{Value: proto.Float64(v), Exemplar: e} -+ case GaugeValue: -+ m.Gauge = &dto.Gauge{Value: proto.Float64(v)} -+ case UntypedValue: -+ m.Untyped = &dto.Untyped{Value: proto.Float64(v)} -+ default: -+ return fmt.Errorf("encountered unknown type %v", t) -+ } -+ return nil -+} -+ -+// MakeLabelPairs is a helper function to create protobuf LabelPairs from the -+// variable and constant labels in the provided Desc. The values for the -+// variable labels are defined by the labelValues slice, which must be in the -+// same order as the corresponding variable labels in the Desc. -+// -+// This function is only needed for custom Metric implementations. See MetricVec -+// example. -+func MakeLabelPairs(desc *Desc, labelValues []string) []*dto.LabelPair { -+ totalLen := len(desc.variableLabels) + len(desc.constLabelPairs) -+ if totalLen == 0 { -+ // Super fast path. -+ return nil -+ } -+ if len(desc.variableLabels) == 0 { -+ // Moderately fast path. -+ return desc.constLabelPairs -+ } -+ labelPairs := make([]*dto.LabelPair, 0, totalLen) -+ for i, n := range desc.variableLabels { -+ labelPairs = append(labelPairs, &dto.LabelPair{ -+ Name: proto.String(n), -+ Value: proto.String(labelValues[i]), -+ }) -+ } -+ labelPairs = append(labelPairs, desc.constLabelPairs...) -+ sort.Sort(internal.LabelPairSorter(labelPairs)) -+ return labelPairs -+} -+ -+// ExemplarMaxRunes is the max total number of runes allowed in exemplar labels. -+const ExemplarMaxRunes = 128 -+ -+// newExemplar creates a new dto.Exemplar from the provided values. An error is -+// returned if any of the label names or values are invalid or if the total -+// number of runes in the label names and values exceeds ExemplarMaxRunes. -+func newExemplar(value float64, ts time.Time, l Labels) (*dto.Exemplar, error) { -+ e := &dto.Exemplar{} -+ e.Value = proto.Float64(value) -+ tsProto := timestamppb.New(ts) -+ if err := tsProto.CheckValid(); err != nil { -+ return nil, err -+ } -+ e.Timestamp = tsProto -+ labelPairs := make([]*dto.LabelPair, 0, len(l)) -+ var runes int -+ for name, value := range l { -+ if !checkLabelName(name) { -+ return nil, fmt.Errorf("exemplar label name %q is invalid", name) -+ } -+ runes += utf8.RuneCountInString(name) -+ if !utf8.ValidString(value) { -+ return nil, fmt.Errorf("exemplar label value %q is not valid UTF-8", value) -+ } -+ runes += utf8.RuneCountInString(value) -+ labelPairs = append(labelPairs, &dto.LabelPair{ -+ Name: proto.String(name), -+ Value: proto.String(value), -+ }) -+ } -+ if runes > ExemplarMaxRunes { -+ return nil, fmt.Errorf("exemplar labels have %d runes, exceeding the limit of %d", runes, ExemplarMaxRunes) -+ } -+ e.Label = labelPairs -+ return e, nil -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go -new file mode 100755 -index 0000000..7ae3225 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/vec.go -@@ -0,0 +1,642 @@ -+// Copyright 2014 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "fmt" -+ "sync" -+ -+ "github.com/prometheus/common/model" -+) -+ -+// MetricVec is a Collector to bundle metrics of the same name that differ in -+// their label values. MetricVec is not used directly but as a building block -+// for implementations of vectors of a given metric type, like GaugeVec, -+// CounterVec, SummaryVec, and HistogramVec. It is exported so that it can be -+// used for custom Metric implementations. -+// -+// To create a FooVec for custom Metric Foo, embed a pointer to MetricVec in -+// FooVec and initialize it with NewMetricVec. Implement wrappers for -+// GetMetricWithLabelValues and GetMetricWith that return (Foo, error) rather -+// than (Metric, error). Similarly, create a wrapper for CurryWith that returns -+// (*FooVec, error) rather than (*MetricVec, error). It is recommended to also -+// add the convenience methods WithLabelValues, With, and MustCurryWith, which -+// panic instead of returning errors. See also the MetricVec example. -+type MetricVec struct { -+ *metricMap -+ -+ curry []curriedLabelValue -+ -+ // hashAdd and hashAddByte can be replaced for testing collision handling. -+ hashAdd func(h uint64, s string) uint64 -+ hashAddByte func(h uint64, b byte) uint64 -+} -+ -+// NewMetricVec returns an initialized metricVec. -+func NewMetricVec(desc *Desc, newMetric func(lvs ...string) Metric) *MetricVec { -+ return &MetricVec{ -+ metricMap: &metricMap{ -+ metrics: map[uint64][]metricWithLabelValues{}, -+ desc: desc, -+ newMetric: newMetric, -+ }, -+ hashAdd: hashAdd, -+ hashAddByte: hashAddByte, -+ } -+} -+ -+// DeleteLabelValues removes the metric where the variable labels are the same -+// as those passed in as labels (same order as the VariableLabels in Desc). It -+// returns true if a metric was deleted. -+// -+// It is not an error if the number of label values is not the same as the -+// number of VariableLabels in Desc. However, such inconsistent label count can -+// never match an actual metric, so the method will always return false in that -+// case. -+// -+// Note that for more than one label value, this method is prone to mistakes -+// caused by an incorrect order of arguments. Consider Delete(Labels) as an -+// alternative to avoid that type of mistake. For higher label numbers, the -+// latter has a much more readable (albeit more verbose) syntax, but it comes -+// with a performance overhead (for creating and processing the Labels map). -+// See also the CounterVec example. -+func (m *MetricVec) DeleteLabelValues(lvs ...string) bool { -+ h, err := m.hashLabelValues(lvs) -+ if err != nil { -+ return false -+ } -+ -+ return m.metricMap.deleteByHashWithLabelValues(h, lvs, m.curry) -+} -+ -+// Delete deletes the metric where the variable labels are the same as those -+// passed in as labels. It returns true if a metric was deleted. -+// -+// It is not an error if the number and names of the Labels are inconsistent -+// with those of the VariableLabels in Desc. However, such inconsistent Labels -+// can never match an actual metric, so the method will always return false in -+// that case. -+// -+// This method is used for the same purpose as DeleteLabelValues(...string). See -+// there for pros and cons of the two methods. -+func (m *MetricVec) Delete(labels Labels) bool { -+ h, err := m.hashLabels(labels) -+ if err != nil { -+ return false -+ } -+ -+ return m.metricMap.deleteByHashWithLabels(h, labels, m.curry) -+} -+ -+// DeletePartialMatch deletes all metrics where the variable labels contain all of those -+// passed in as labels. The order of the labels does not matter. -+// It returns the number of metrics deleted. -+// -+// Note that curried labels will never be matched if deleting from the curried vector. -+// To match curried labels with DeletePartialMatch, it must be called on the base vector. -+func (m *MetricVec) DeletePartialMatch(labels Labels) int { -+ return m.metricMap.deleteByLabels(labels, m.curry) -+} -+ -+// Without explicit forwarding of Describe, Collect, Reset, those methods won't -+// show up in GoDoc. -+ -+// Describe implements Collector. -+func (m *MetricVec) Describe(ch chan<- *Desc) { m.metricMap.Describe(ch) } -+ -+// Collect implements Collector. -+func (m *MetricVec) Collect(ch chan<- Metric) { m.metricMap.Collect(ch) } -+ -+// Reset deletes all metrics in this vector. -+func (m *MetricVec) Reset() { m.metricMap.Reset() } -+ -+// CurryWith returns a vector curried with the provided labels, i.e. the -+// returned vector has those labels pre-set for all labeled operations performed -+// on it. The cardinality of the curried vector is reduced accordingly. The -+// order of the remaining labels stays the same (just with the curried labels -+// taken out of the sequence – which is relevant for the -+// (GetMetric)WithLabelValues methods). It is possible to curry a curried -+// vector, but only with labels not yet used for currying before. -+// -+// The metrics contained in the MetricVec are shared between the curried and -+// uncurried vectors. They are just accessed differently. Curried and uncurried -+// vectors behave identically in terms of collection. Only one must be -+// registered with a given registry (usually the uncurried version). The Reset -+// method deletes all metrics, even if called on a curried vector. -+// -+// Note that CurryWith is usually not called directly but through a wrapper -+// around MetricVec, implementing a vector for a specific Metric -+// implementation, for example GaugeVec. -+func (m *MetricVec) CurryWith(labels Labels) (*MetricVec, error) { -+ var ( -+ newCurry []curriedLabelValue -+ oldCurry = m.curry -+ iCurry int -+ ) -+ for i, label := range m.desc.variableLabels { -+ val, ok := labels[label] -+ if iCurry < len(oldCurry) && oldCurry[iCurry].index == i { -+ if ok { -+ return nil, fmt.Errorf("label name %q is already curried", label) -+ } -+ newCurry = append(newCurry, oldCurry[iCurry]) -+ iCurry++ -+ } else { -+ if !ok { -+ continue // Label stays uncurried. -+ } -+ newCurry = append(newCurry, curriedLabelValue{i, val}) -+ } -+ } -+ if l := len(oldCurry) + len(labels) - len(newCurry); l > 0 { -+ return nil, fmt.Errorf("%d unknown label(s) found during currying", l) -+ } -+ -+ return &MetricVec{ -+ metricMap: m.metricMap, -+ curry: newCurry, -+ hashAdd: m.hashAdd, -+ hashAddByte: m.hashAddByte, -+ }, nil -+} -+ -+// GetMetricWithLabelValues returns the Metric for the given slice of label -+// values (same order as the variable labels in Desc). If that combination of -+// label values is accessed for the first time, a new Metric is created (by -+// calling the newMetric function provided during construction of the -+// MetricVec). -+// -+// It is possible to call this method without using the returned Metric to only -+// create the new Metric but leave it in its initial state. -+// -+// Keeping the Metric for later use is possible (and should be considered if -+// performance is critical), but keep in mind that Reset, DeleteLabelValues and -+// Delete can be used to delete the Metric from the MetricVec. In that case, the -+// Metric will still exist, but it will not be exported anymore, even if a -+// Metric with the same label values is created later. -+// -+// An error is returned if the number of label values is not the same as the -+// number of variable labels in Desc (minus any curried labels). -+// -+// Note that for more than one label value, this method is prone to mistakes -+// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -+// an alternative to avoid that type of mistake. For higher label numbers, the -+// latter has a much more readable (albeit more verbose) syntax, but it comes -+// with a performance overhead (for creating and processing the Labels map). -+// -+// Note that GetMetricWithLabelValues is usually not called directly but through -+// a wrapper around MetricVec, implementing a vector for a specific Metric -+// implementation, for example GaugeVec. -+func (m *MetricVec) GetMetricWithLabelValues(lvs ...string) (Metric, error) { -+ h, err := m.hashLabelValues(lvs) -+ if err != nil { -+ return nil, err -+ } -+ -+ return m.metricMap.getOrCreateMetricWithLabelValues(h, lvs, m.curry), nil -+} -+ -+// GetMetricWith returns the Metric for the given Labels map (the label names -+// must match those of the variable labels in Desc). If that label map is -+// accessed for the first time, a new Metric is created. Implications of -+// creating a Metric without using it and keeping the Metric for later use -+// are the same as for GetMetricWithLabelValues. -+// -+// An error is returned if the number and names of the Labels are inconsistent -+// with those of the variable labels in Desc (minus any curried labels). -+// -+// This method is used for the same purpose as -+// GetMetricWithLabelValues(...string). See there for pros and cons of the two -+// methods. -+// -+// Note that GetMetricWith is usually not called directly but through a wrapper -+// around MetricVec, implementing a vector for a specific Metric implementation, -+// for example GaugeVec. -+func (m *MetricVec) GetMetricWith(labels Labels) (Metric, error) { -+ h, err := m.hashLabels(labels) -+ if err != nil { -+ return nil, err -+ } -+ -+ return m.metricMap.getOrCreateMetricWithLabels(h, labels, m.curry), nil -+} -+ -+func (m *MetricVec) hashLabelValues(vals []string) (uint64, error) { -+ if err := validateLabelValues(vals, len(m.desc.variableLabels)-len(m.curry)); err != nil { -+ return 0, err -+ } -+ -+ var ( -+ h = hashNew() -+ curry = m.curry -+ iVals, iCurry int -+ ) -+ for i := 0; i < len(m.desc.variableLabels); i++ { -+ if iCurry < len(curry) && curry[iCurry].index == i { -+ h = m.hashAdd(h, curry[iCurry].value) -+ iCurry++ -+ } else { -+ h = m.hashAdd(h, vals[iVals]) -+ iVals++ -+ } -+ h = m.hashAddByte(h, model.SeparatorByte) -+ } -+ return h, nil -+} -+ -+func (m *MetricVec) hashLabels(labels Labels) (uint64, error) { -+ if err := validateValuesInLabels(labels, len(m.desc.variableLabels)-len(m.curry)); err != nil { -+ return 0, err -+ } -+ -+ var ( -+ h = hashNew() -+ curry = m.curry -+ iCurry int -+ ) -+ for i, label := range m.desc.variableLabels { -+ val, ok := labels[label] -+ if iCurry < len(curry) && curry[iCurry].index == i { -+ if ok { -+ return 0, fmt.Errorf("label name %q is already curried", label) -+ } -+ h = m.hashAdd(h, curry[iCurry].value) -+ iCurry++ -+ } else { -+ if !ok { -+ return 0, fmt.Errorf("label name %q missing in label map", label) -+ } -+ h = m.hashAdd(h, val) -+ } -+ h = m.hashAddByte(h, model.SeparatorByte) -+ } -+ return h, nil -+} -+ -+// metricWithLabelValues provides the metric and its label values for -+// disambiguation on hash collision. -+type metricWithLabelValues struct { -+ values []string -+ metric Metric -+} -+ -+// curriedLabelValue sets the curried value for a label at the given index. -+type curriedLabelValue struct { -+ index int -+ value string -+} -+ -+// metricMap is a helper for metricVec and shared between differently curried -+// metricVecs. -+type metricMap struct { -+ mtx sync.RWMutex // Protects metrics. -+ metrics map[uint64][]metricWithLabelValues -+ desc *Desc -+ newMetric func(labelValues ...string) Metric -+} -+ -+// Describe implements Collector. It will send exactly one Desc to the provided -+// channel. -+func (m *metricMap) Describe(ch chan<- *Desc) { -+ ch <- m.desc -+} -+ -+// Collect implements Collector. -+func (m *metricMap) Collect(ch chan<- Metric) { -+ m.mtx.RLock() -+ defer m.mtx.RUnlock() -+ -+ for _, metrics := range m.metrics { -+ for _, metric := range metrics { -+ ch <- metric.metric -+ } -+ } -+} -+ -+// Reset deletes all metrics in this vector. -+func (m *metricMap) Reset() { -+ m.mtx.Lock() -+ defer m.mtx.Unlock() -+ -+ for h := range m.metrics { -+ delete(m.metrics, h) -+ } -+} -+ -+// deleteByHashWithLabelValues removes the metric from the hash bucket h. If -+// there are multiple matches in the bucket, use lvs to select a metric and -+// remove only that metric. -+func (m *metricMap) deleteByHashWithLabelValues( -+ h uint64, lvs []string, curry []curriedLabelValue, -+) bool { -+ m.mtx.Lock() -+ defer m.mtx.Unlock() -+ -+ metrics, ok := m.metrics[h] -+ if !ok { -+ return false -+ } -+ -+ i := findMetricWithLabelValues(metrics, lvs, curry) -+ if i >= len(metrics) { -+ return false -+ } -+ -+ if len(metrics) > 1 { -+ old := metrics -+ m.metrics[h] = append(metrics[:i], metrics[i+1:]...) -+ old[len(old)-1] = metricWithLabelValues{} -+ } else { -+ delete(m.metrics, h) -+ } -+ return true -+} -+ -+// deleteByHashWithLabels removes the metric from the hash bucket h. If there -+// are multiple matches in the bucket, use lvs to select a metric and remove -+// only that metric. -+func (m *metricMap) deleteByHashWithLabels( -+ h uint64, labels Labels, curry []curriedLabelValue, -+) bool { -+ m.mtx.Lock() -+ defer m.mtx.Unlock() -+ -+ metrics, ok := m.metrics[h] -+ if !ok { -+ return false -+ } -+ i := findMetricWithLabels(m.desc, metrics, labels, curry) -+ if i >= len(metrics) { -+ return false -+ } -+ -+ if len(metrics) > 1 { -+ old := metrics -+ m.metrics[h] = append(metrics[:i], metrics[i+1:]...) -+ old[len(old)-1] = metricWithLabelValues{} -+ } else { -+ delete(m.metrics, h) -+ } -+ return true -+} -+ -+// deleteByLabels deletes a metric if the given labels are present in the metric. -+func (m *metricMap) deleteByLabels(labels Labels, curry []curriedLabelValue) int { -+ m.mtx.Lock() -+ defer m.mtx.Unlock() -+ -+ var numDeleted int -+ -+ for h, metrics := range m.metrics { -+ i := findMetricWithPartialLabels(m.desc, metrics, labels, curry) -+ if i >= len(metrics) { -+ // Didn't find matching labels in this metric slice. -+ continue -+ } -+ delete(m.metrics, h) -+ numDeleted++ -+ } -+ -+ return numDeleted -+} -+ -+// findMetricWithPartialLabel returns the index of the matching metric or -+// len(metrics) if not found. -+func findMetricWithPartialLabels( -+ desc *Desc, metrics []metricWithLabelValues, labels Labels, curry []curriedLabelValue, -+) int { -+ for i, metric := range metrics { -+ if matchPartialLabels(desc, metric.values, labels, curry) { -+ return i -+ } -+ } -+ return len(metrics) -+} -+ -+// indexOf searches the given slice of strings for the target string and returns -+// the index or len(items) as well as a boolean whether the search succeeded. -+func indexOf(target string, items []string) (int, bool) { -+ for i, l := range items { -+ if l == target { -+ return i, true -+ } -+ } -+ return len(items), false -+} -+ -+// valueMatchesVariableOrCurriedValue determines if a value was previously curried, -+// and returns whether it matches either the "base" value or the curried value accordingly. -+// It also indicates whether the match is against a curried or uncurried value. -+func valueMatchesVariableOrCurriedValue(targetValue string, index int, values []string, curry []curriedLabelValue) (bool, bool) { -+ for _, curriedValue := range curry { -+ if curriedValue.index == index { -+ // This label was curried. See if the curried value matches our target. -+ return curriedValue.value == targetValue, true -+ } -+ } -+ // This label was not curried. See if the current value matches our target label. -+ return values[index] == targetValue, false -+} -+ -+// matchPartialLabels searches the current metric and returns whether all of the target label:value pairs are present. -+func matchPartialLabels(desc *Desc, values []string, labels Labels, curry []curriedLabelValue) bool { -+ for l, v := range labels { -+ // Check if the target label exists in our metrics and get the index. -+ varLabelIndex, validLabel := indexOf(l, desc.variableLabels) -+ if validLabel { -+ // Check the value of that label against the target value. -+ // We don't consider curried values in partial matches. -+ matches, curried := valueMatchesVariableOrCurriedValue(v, varLabelIndex, values, curry) -+ if matches && !curried { -+ continue -+ } -+ } -+ return false -+ } -+ return true -+} -+ -+// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value -+// or creates it and returns the new one. -+// -+// This function holds the mutex. -+func (m *metricMap) getOrCreateMetricWithLabelValues( -+ hash uint64, lvs []string, curry []curriedLabelValue, -+) Metric { -+ m.mtx.RLock() -+ metric, ok := m.getMetricWithHashAndLabelValues(hash, lvs, curry) -+ m.mtx.RUnlock() -+ if ok { -+ return metric -+ } -+ -+ m.mtx.Lock() -+ defer m.mtx.Unlock() -+ metric, ok = m.getMetricWithHashAndLabelValues(hash, lvs, curry) -+ if !ok { -+ inlinedLVs := inlineLabelValues(lvs, curry) -+ metric = m.newMetric(inlinedLVs...) -+ m.metrics[hash] = append(m.metrics[hash], metricWithLabelValues{values: inlinedLVs, metric: metric}) -+ } -+ return metric -+} -+ -+// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value -+// or creates it and returns the new one. -+// -+// This function holds the mutex. -+func (m *metricMap) getOrCreateMetricWithLabels( -+ hash uint64, labels Labels, curry []curriedLabelValue, -+) Metric { -+ m.mtx.RLock() -+ metric, ok := m.getMetricWithHashAndLabels(hash, labels, curry) -+ m.mtx.RUnlock() -+ if ok { -+ return metric -+ } -+ -+ m.mtx.Lock() -+ defer m.mtx.Unlock() -+ metric, ok = m.getMetricWithHashAndLabels(hash, labels, curry) -+ if !ok { -+ lvs := extractLabelValues(m.desc, labels, curry) -+ metric = m.newMetric(lvs...) -+ m.metrics[hash] = append(m.metrics[hash], metricWithLabelValues{values: lvs, metric: metric}) -+ } -+ return metric -+} -+ -+// getMetricWithHashAndLabelValues gets a metric while handling possible -+// collisions in the hash space. Must be called while holding the read mutex. -+func (m *metricMap) getMetricWithHashAndLabelValues( -+ h uint64, lvs []string, curry []curriedLabelValue, -+) (Metric, bool) { -+ metrics, ok := m.metrics[h] -+ if ok { -+ if i := findMetricWithLabelValues(metrics, lvs, curry); i < len(metrics) { -+ return metrics[i].metric, true -+ } -+ } -+ return nil, false -+} -+ -+// getMetricWithHashAndLabels gets a metric while handling possible collisions in -+// the hash space. Must be called while holding read mutex. -+func (m *metricMap) getMetricWithHashAndLabels( -+ h uint64, labels Labels, curry []curriedLabelValue, -+) (Metric, bool) { -+ metrics, ok := m.metrics[h] -+ if ok { -+ if i := findMetricWithLabels(m.desc, metrics, labels, curry); i < len(metrics) { -+ return metrics[i].metric, true -+ } -+ } -+ return nil, false -+} -+ -+// findMetricWithLabelValues returns the index of the matching metric or -+// len(metrics) if not found. -+func findMetricWithLabelValues( -+ metrics []metricWithLabelValues, lvs []string, curry []curriedLabelValue, -+) int { -+ for i, metric := range metrics { -+ if matchLabelValues(metric.values, lvs, curry) { -+ return i -+ } -+ } -+ return len(metrics) -+} -+ -+// findMetricWithLabels returns the index of the matching metric or len(metrics) -+// if not found. -+func findMetricWithLabels( -+ desc *Desc, metrics []metricWithLabelValues, labels Labels, curry []curriedLabelValue, -+) int { -+ for i, metric := range metrics { -+ if matchLabels(desc, metric.values, labels, curry) { -+ return i -+ } -+ } -+ return len(metrics) -+} -+ -+func matchLabelValues(values, lvs []string, curry []curriedLabelValue) bool { -+ if len(values) != len(lvs)+len(curry) { -+ return false -+ } -+ var iLVs, iCurry int -+ for i, v := range values { -+ if iCurry < len(curry) && curry[iCurry].index == i { -+ if v != curry[iCurry].value { -+ return false -+ } -+ iCurry++ -+ continue -+ } -+ if v != lvs[iLVs] { -+ return false -+ } -+ iLVs++ -+ } -+ return true -+} -+ -+func matchLabels(desc *Desc, values []string, labels Labels, curry []curriedLabelValue) bool { -+ if len(values) != len(labels)+len(curry) { -+ return false -+ } -+ iCurry := 0 -+ for i, k := range desc.variableLabels { -+ if iCurry < len(curry) && curry[iCurry].index == i { -+ if values[i] != curry[iCurry].value { -+ return false -+ } -+ iCurry++ -+ continue -+ } -+ if values[i] != labels[k] { -+ return false -+ } -+ } -+ return true -+} -+ -+func extractLabelValues(desc *Desc, labels Labels, curry []curriedLabelValue) []string { -+ labelValues := make([]string, len(labels)+len(curry)) -+ iCurry := 0 -+ for i, k := range desc.variableLabels { -+ if iCurry < len(curry) && curry[iCurry].index == i { -+ labelValues[i] = curry[iCurry].value -+ iCurry++ -+ continue -+ } -+ labelValues[i] = labels[k] -+ } -+ return labelValues -+} -+ -+func inlineLabelValues(lvs []string, curry []curriedLabelValue) []string { -+ labelValues := make([]string, len(lvs)+len(curry)) -+ var iCurry, iLVs int -+ for i := range labelValues { -+ if iCurry < len(curry) && curry[iCurry].index == i { -+ labelValues[i] = curry[iCurry].value -+ iCurry++ -+ continue -+ } -+ labelValues[i] = lvs[iLVs] -+ iLVs++ -+ } -+ return labelValues -+} -diff --git a/vendor/github.com/prometheus/client_golang/prometheus/wrap.go b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go -new file mode 100755 -index 0000000..1498ee1 ---- /dev/null -+++ b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go -@@ -0,0 +1,216 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package prometheus -+ -+import ( -+ "fmt" -+ "sort" -+ -+ //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. -+ "github.com/golang/protobuf/proto" -+ -+ dto "github.com/prometheus/client_model/go" -+ -+ "github.com/prometheus/client_golang/prometheus/internal" -+) -+ -+// WrapRegistererWith returns a Registerer wrapping the provided -+// Registerer. Collectors registered with the returned Registerer will be -+// registered with the wrapped Registerer in a modified way. The modified -+// Collector adds the provided Labels to all Metrics it collects (as -+// ConstLabels). The Metrics collected by the unmodified Collector must not -+// duplicate any of those labels. Wrapping a nil value is valid, resulting -+// in a no-op Registerer. -+// -+// WrapRegistererWith provides a way to add fixed labels to a subset of -+// Collectors. It should not be used to add fixed labels to all metrics -+// exposed. See also -+// https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels -+// -+// Conflicts between Collectors registered through the original Registerer with -+// Collectors registered through the wrapping Registerer will still be -+// detected. Any AlreadyRegisteredError returned by the Register method of -+// either Registerer will contain the ExistingCollector in the form it was -+// provided to the respective registry. -+// -+// The Collector example demonstrates a use of WrapRegistererWith. -+func WrapRegistererWith(labels Labels, reg Registerer) Registerer { -+ return &wrappingRegisterer{ -+ wrappedRegisterer: reg, -+ labels: labels, -+ } -+} -+ -+// WrapRegistererWithPrefix returns a Registerer wrapping the provided -+// Registerer. Collectors registered with the returned Registerer will be -+// registered with the wrapped Registerer in a modified way. The modified -+// Collector adds the provided prefix to the name of all Metrics it collects. -+// Wrapping a nil value is valid, resulting in a no-op Registerer. -+// -+// WrapRegistererWithPrefix is useful to have one place to prefix all metrics of -+// a sub-system. To make this work, register metrics of the sub-system with the -+// wrapping Registerer returned by WrapRegistererWithPrefix. It is rarely useful -+// to use the same prefix for all metrics exposed. In particular, do not prefix -+// metric names that are standardized across applications, as that would break -+// horizontal monitoring, for example the metrics provided by the Go collector -+// (see NewGoCollector) and the process collector (see NewProcessCollector). (In -+// fact, those metrics are already prefixed with “go_” or “process_”, -+// respectively.) -+// -+// Conflicts between Collectors registered through the original Registerer with -+// Collectors registered through the wrapping Registerer will still be -+// detected. Any AlreadyRegisteredError returned by the Register method of -+// either Registerer will contain the ExistingCollector in the form it was -+// provided to the respective registry. -+func WrapRegistererWithPrefix(prefix string, reg Registerer) Registerer { -+ return &wrappingRegisterer{ -+ wrappedRegisterer: reg, -+ prefix: prefix, -+ } -+} -+ -+type wrappingRegisterer struct { -+ wrappedRegisterer Registerer -+ prefix string -+ labels Labels -+} -+ -+func (r *wrappingRegisterer) Register(c Collector) error { -+ if r.wrappedRegisterer == nil { -+ return nil -+ } -+ return r.wrappedRegisterer.Register(&wrappingCollector{ -+ wrappedCollector: c, -+ prefix: r.prefix, -+ labels: r.labels, -+ }) -+} -+ -+func (r *wrappingRegisterer) MustRegister(cs ...Collector) { -+ if r.wrappedRegisterer == nil { -+ return -+ } -+ for _, c := range cs { -+ if err := r.Register(c); err != nil { -+ panic(err) -+ } -+ } -+} -+ -+func (r *wrappingRegisterer) Unregister(c Collector) bool { -+ if r.wrappedRegisterer == nil { -+ return false -+ } -+ return r.wrappedRegisterer.Unregister(&wrappingCollector{ -+ wrappedCollector: c, -+ prefix: r.prefix, -+ labels: r.labels, -+ }) -+} -+ -+type wrappingCollector struct { -+ wrappedCollector Collector -+ prefix string -+ labels Labels -+} -+ -+func (c *wrappingCollector) Collect(ch chan<- Metric) { -+ wrappedCh := make(chan Metric) -+ go func() { -+ c.wrappedCollector.Collect(wrappedCh) -+ close(wrappedCh) -+ }() -+ for m := range wrappedCh { -+ ch <- &wrappingMetric{ -+ wrappedMetric: m, -+ prefix: c.prefix, -+ labels: c.labels, -+ } -+ } -+} -+ -+func (c *wrappingCollector) Describe(ch chan<- *Desc) { -+ wrappedCh := make(chan *Desc) -+ go func() { -+ c.wrappedCollector.Describe(wrappedCh) -+ close(wrappedCh) -+ }() -+ for desc := range wrappedCh { -+ ch <- wrapDesc(desc, c.prefix, c.labels) -+ } -+} -+ -+func (c *wrappingCollector) unwrapRecursively() Collector { -+ switch wc := c.wrappedCollector.(type) { -+ case *wrappingCollector: -+ return wc.unwrapRecursively() -+ default: -+ return wc -+ } -+} -+ -+type wrappingMetric struct { -+ wrappedMetric Metric -+ prefix string -+ labels Labels -+} -+ -+func (m *wrappingMetric) Desc() *Desc { -+ return wrapDesc(m.wrappedMetric.Desc(), m.prefix, m.labels) -+} -+ -+func (m *wrappingMetric) Write(out *dto.Metric) error { -+ if err := m.wrappedMetric.Write(out); err != nil { -+ return err -+ } -+ if len(m.labels) == 0 { -+ // No wrapping labels. -+ return nil -+ } -+ for ln, lv := range m.labels { -+ out.Label = append(out.Label, &dto.LabelPair{ -+ Name: proto.String(ln), -+ Value: proto.String(lv), -+ }) -+ } -+ sort.Sort(internal.LabelPairSorter(out.Label)) -+ return nil -+} -+ -+func wrapDesc(desc *Desc, prefix string, labels Labels) *Desc { -+ constLabels := Labels{} -+ for _, lp := range desc.constLabelPairs { -+ constLabels[*lp.Name] = *lp.Value -+ } -+ for ln, lv := range labels { -+ if _, alreadyUsed := constLabels[ln]; alreadyUsed { -+ return &Desc{ -+ fqName: desc.fqName, -+ help: desc.help, -+ variableLabels: desc.variableLabels, -+ constLabelPairs: desc.constLabelPairs, -+ err: fmt.Errorf("attempted wrapping with already existing label name %q", ln), -+ } -+ } -+ constLabels[ln] = lv -+ } -+ // NewDesc will do remaining validations. -+ newDesc := NewDesc(prefix+desc.fqName, desc.help, desc.variableLabels, constLabels) -+ // Propagate errors if there was any. This will override any errer -+ // created by NewDesc above, i.e. earlier errors get precedence. -+ if desc.err != nil { -+ newDesc.err = desc.err -+ } -+ return newDesc -+} -diff --git a/vendor/github.com/prometheus/client_model/LICENSE b/vendor/github.com/prometheus/client_model/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/client_model/NOTICE b/vendor/github.com/prometheus/client_model/NOTICE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/client_model/go/metrics.pb.go b/vendor/github.com/prometheus/client_model/go/metrics.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/LICENSE b/vendor/github.com/prometheus/common/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/NOTICE b/vendor/github.com/prometheus/common/NOTICE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/expfmt/decode.go b/vendor/github.com/prometheus/common/expfmt/decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/expfmt/encode.go b/vendor/github.com/prometheus/common/expfmt/encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/expfmt/expfmt.go b/vendor/github.com/prometheus/common/expfmt/expfmt.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz.go b/vendor/github.com/prometheus/common/expfmt/fuzz.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/expfmt/text_create.go b/vendor/github.com/prometheus/common/expfmt/text_create.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/expfmt/text_parse.go b/vendor/github.com/prometheus/common/expfmt/text_parse.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt b/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go b/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/alert.go b/vendor/github.com/prometheus/common/model/alert.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/fingerprinting.go b/vendor/github.com/prometheus/common/model/fingerprinting.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/fnv.go b/vendor/github.com/prometheus/common/model/fnv.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/labels.go b/vendor/github.com/prometheus/common/model/labels.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/labelset.go b/vendor/github.com/prometheus/common/model/labelset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/metric.go b/vendor/github.com/prometheus/common/model/metric.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/model.go b/vendor/github.com/prometheus/common/model/model.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/signature.go b/vendor/github.com/prometheus/common/model/signature.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/silence.go b/vendor/github.com/prometheus/common/model/silence.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/time.go b/vendor/github.com/prometheus/common/model/time.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/common/model/value.go b/vendor/github.com/prometheus/common/model/value.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/prometheus/procfs/.gitignore b/vendor/github.com/prometheus/procfs/.gitignore -new file mode 100755 -index 0000000..7cc33ae ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/.gitignore -@@ -0,0 +1,2 @@ -+/testdata/fixtures/ -+/fixtures -diff --git a/vendor/github.com/prometheus/procfs/.golangci.yml b/vendor/github.com/prometheus/procfs/.golangci.yml -new file mode 100755 -index 0000000..a197699 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/.golangci.yml -@@ -0,0 +1,12 @@ -+--- -+linters: -+ enable: -+ - godot -+ - revive -+ -+linter-settings: -+ godot: -+ capital: true -+ exclude: -+ # Ignore "See: URL" -+ - 'See:' -diff --git a/vendor/github.com/prometheus/procfs/CODE_OF_CONDUCT.md b/vendor/github.com/prometheus/procfs/CODE_OF_CONDUCT.md -new file mode 100755 -index 0000000..d325872 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/CODE_OF_CONDUCT.md -@@ -0,0 +1,3 @@ -+# Prometheus Community Code of Conduct -+ -+Prometheus follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md). -diff --git a/vendor/github.com/prometheus/procfs/CONTRIBUTING.md b/vendor/github.com/prometheus/procfs/CONTRIBUTING.md -new file mode 100755 -index 0000000..853eb9d ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/CONTRIBUTING.md -@@ -0,0 +1,121 @@ -+# Contributing -+ -+Prometheus uses GitHub to manage reviews of pull requests. -+ -+* If you are a new contributor see: [Steps to Contribute](#steps-to-contribute) -+ -+* If you have a trivial fix or improvement, go ahead and create a pull request, -+ addressing (with `@...`) a suitable maintainer of this repository (see -+ [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request. -+ -+* If you plan to do something more involved, first discuss your ideas -+ on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). -+ This will avoid unnecessary work and surely give you and us a good deal -+ of inspiration. Also please see our [non-goals issue](https://github.com/prometheus/docs/issues/149) on areas that the Prometheus community doesn't plan to work on. -+ -+* Relevant coding style guidelines are the [Go Code Review -+ Comments](https://code.google.com/p/go-wiki/wiki/CodeReviewComments) -+ and the _Formatting and style_ section of Peter Bourgon's [Go: Best -+ Practices for Production -+ Environments](https://peter.bourgon.org/go-in-production/#formatting-and-style). -+ -+* Be sure to sign off on the [DCO](https://github.com/probot/dco#how-it-works) -+ -+## Steps to Contribute -+ -+Should you wish to work on an issue, please claim it first by commenting on the GitHub issue that you want to work on it. This is to prevent duplicated efforts from contributors on the same issue. -+ -+Please check the [`help-wanted`](https://github.com/prometheus/procfs/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) label to find issues that are good for getting started. If you have questions about one of the issues, with or without the tag, please comment on them and one of the maintainers will clarify it. For a quicker response, contact us over [IRC](https://prometheus.io/community). -+ -+For quickly compiling and testing your changes do: -+``` -+make test # Make sure all the tests pass before you commit and push :) -+``` -+ -+We use [`golangci-lint`](https://github.com/golangci/golangci-lint) for linting the code. If it reports an issue and you think that the warning needs to be disregarded or is a false-positive, you can add a special comment `//nolint:linter1[,linter2,...]` before the offending line. Use this sparingly though, fixing the code to comply with the linter's recommendation is in general the preferred course of action. -+ -+## Pull Request Checklist -+ -+* Branch from the master branch and, if needed, rebase to the current master branch before submitting your pull request. If it doesn't merge cleanly with master you may be asked to rebase your changes. -+ -+* Commits should be as small as possible, while ensuring that each commit is correct independently (i.e., each commit should compile and pass tests). -+ -+* If your patch is not getting reviewed or you need a specific person to review it, you can @-reply a reviewer asking for a review in the pull request or a comment, or you can ask for a review on IRC channel [#prometheus](https://webchat.freenode.net/?channels=#prometheus) on irc.freenode.net (for the easiest start, [join via Riot](https://riot.im/app/#/room/#prometheus:matrix.org)). -+ -+* Add tests relevant to the fixed bug or new feature. -+ -+## Dependency management -+ -+The Prometheus project uses [Go modules](https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more) to manage dependencies on external packages. This requires a working Go environment with version 1.12 or greater installed. -+ -+All dependencies are vendored in the `vendor/` directory. -+ -+To add or update a new dependency, use the `go get` command: -+ -+```bash -+# Pick the latest tagged release. -+go get example.com/some/module/pkg -+ -+# Pick a specific version. -+go get example.com/some/module/pkg@vX.Y.Z -+``` -+ -+Tidy up the `go.mod` and `go.sum` files and copy the new/updated dependency to the `vendor/` directory: -+ -+ -+```bash -+# The GO111MODULE variable can be omitted when the code isn't located in GOPATH. -+GO111MODULE=on go mod tidy -+ -+GO111MODULE=on go mod vendor -+``` -+ -+You have to commit the changes to `go.mod`, `go.sum` and the `vendor/` directory before submitting the pull request. -+ -+ -+## API Implementation Guidelines -+ -+### Naming and Documentation -+ -+Public functions and structs should normally be named according to the file(s) being read and parsed. For example, -+the `fs.BuddyInfo()` function reads the file `/proc/buddyinfo`. In addition, the godoc for each public function -+should contain the path to the file(s) being read and a URL of the linux kernel documentation describing the file(s). -+ -+### Reading vs. Parsing -+ -+Most functionality in this library consists of reading files and then parsing the text into structured data. In most -+cases reading and parsing should be separated into different functions/methods with a public `fs.Thing()` method and -+a private `parseThing(r Reader)` function. This provides a logical separation and allows parsing to be tested -+directly without the need to read from the filesystem. Using a `Reader` argument is preferred over other data types -+such as `string` or `*File` because it provides the most flexibility regarding the data source. When a set of files -+in a directory needs to be parsed, then a `path` string parameter to the parse function can be used instead. -+ -+### /proc and /sys filesystem I/O -+ -+The `proc` and `sys` filesystems are pseudo file systems and work a bit differently from standard disk I/O. -+Many of the files are changing continuously and the data being read can in some cases change between subsequent -+reads in the same file. Also, most of the files are relatively small (less than a few KBs), and system calls -+to the `stat` function will often return the wrong size. Therefore, for most files it's recommended to read the -+full file in a single operation using an internal utility function called `util.ReadFileNoStat`. -+This function is similar to `os.ReadFile`, but it avoids the system call to `stat` to get the current size of -+the file. -+ -+Note that parsing the file's contents can still be performed one line at a time. This is done by first reading -+the full file, and then using a scanner on the `[]byte` or `string` containing the data. -+ -+``` -+ data, err := util.ReadFileNoStat("/proc/cpuinfo") -+ if err != nil { -+ return err -+ } -+ reader := bytes.NewReader(data) -+ scanner := bufio.NewScanner(reader) -+``` -+ -+The `/sys` filesystem contains many very small files which contain only a single numeric or text value. These files -+can be read using an internal function called `util.SysReadFile` which is similar to `os.ReadFile` but does -+not bother to check the size of the file before reading. -+``` -+ data, err := util.SysReadFile("/sys/class/power_supply/BAT0/capacity") -+``` -+ -diff --git a/vendor/github.com/prometheus/procfs/LICENSE b/vendor/github.com/prometheus/procfs/LICENSE -new file mode 100755 -index 0000000..261eeb9 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/LICENSE -@@ -0,0 +1,201 @@ -+ Apache License -+ Version 2.0, January 2004 -+ http://www.apache.org/licenses/ -+ -+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -+ -+ 1. Definitions. -+ -+ "License" shall mean the terms and conditions for use, reproduction, -+ and distribution as defined by Sections 1 through 9 of this document. -+ -+ "Licensor" shall mean the copyright owner or entity authorized by -+ the copyright owner that is granting the License. -+ -+ "Legal Entity" shall mean the union of the acting entity and all -+ other entities that control, are controlled by, or are under common -+ control with that entity. For the purposes of this definition, -+ "control" means (i) the power, direct or indirect, to cause the -+ direction or management of such entity, whether by contract or -+ otherwise, or (ii) ownership of fifty percent (50%) or more of the -+ outstanding shares, or (iii) beneficial ownership of such entity. -+ -+ "You" (or "Your") shall mean an individual or Legal Entity -+ exercising permissions granted by this License. -+ -+ "Source" form shall mean the preferred form for making modifications, -+ including but not limited to software source code, documentation -+ source, and configuration files. -+ -+ "Object" form shall mean any form resulting from mechanical -+ transformation or translation of a Source form, including but -+ not limited to compiled object code, generated documentation, -+ and conversions to other media types. -+ -+ "Work" shall mean the work of authorship, whether in Source or -+ Object form, made available under the License, as indicated by a -+ copyright notice that is included in or attached to the work -+ (an example is provided in the Appendix below). -+ -+ "Derivative Works" shall mean any work, whether in Source or Object -+ form, that is based on (or derived from) the Work and for which the -+ editorial revisions, annotations, elaborations, or other modifications -+ represent, as a whole, an original work of authorship. For the purposes -+ of this License, Derivative Works shall not include works that remain -+ separable from, or merely link (or bind by name) to the interfaces of, -+ the Work and Derivative Works thereof. -+ -+ "Contribution" shall mean any work of authorship, including -+ the original version of the Work and any modifications or additions -+ to that Work or Derivative Works thereof, that is intentionally -+ submitted to Licensor for inclusion in the Work by the copyright owner -+ or by an individual or Legal Entity authorized to submit on behalf of -+ the copyright owner. For the purposes of this definition, "submitted" -+ means any form of electronic, verbal, or written communication sent -+ to the Licensor or its representatives, including but not limited to -+ communication on electronic mailing lists, source code control systems, -+ and issue tracking systems that are managed by, or on behalf of, the -+ Licensor for the purpose of discussing and improving the Work, but -+ excluding communication that is conspicuously marked or otherwise -+ designated in writing by the copyright owner as "Not a Contribution." -+ -+ "Contributor" shall mean Licensor and any individual or Legal Entity -+ on behalf of whom a Contribution has been received by Licensor and -+ subsequently incorporated within the Work. -+ -+ 2. Grant of Copyright License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ copyright license to reproduce, prepare Derivative Works of, -+ publicly display, publicly perform, sublicense, and distribute the -+ Work and such Derivative Works in Source or Object form. -+ -+ 3. Grant of Patent License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ (except as stated in this section) patent license to make, have made, -+ use, offer to sell, sell, import, and otherwise transfer the Work, -+ where such license applies only to those patent claims licensable -+ by such Contributor that are necessarily infringed by their -+ Contribution(s) alone or by combination of their Contribution(s) -+ with the Work to which such Contribution(s) was submitted. If You -+ institute patent litigation against any entity (including a -+ cross-claim or counterclaim in a lawsuit) alleging that the Work -+ or a Contribution incorporated within the Work constitutes direct -+ or contributory patent infringement, then any patent licenses -+ granted to You under this License for that Work shall terminate -+ as of the date such litigation is filed. -+ -+ 4. Redistribution. You may reproduce and distribute copies of the -+ Work or Derivative Works thereof in any medium, with or without -+ modifications, and in Source or Object form, provided that You -+ meet the following conditions: -+ -+ (a) You must give any other recipients of the Work or -+ Derivative Works a copy of this License; and -+ -+ (b) You must cause any modified files to carry prominent notices -+ stating that You changed the files; and -+ -+ (c) You must retain, in the Source form of any Derivative Works -+ that You distribute, all copyright, patent, trademark, and -+ attribution notices from the Source form of the Work, -+ excluding those notices that do not pertain to any part of -+ the Derivative Works; and -+ -+ (d) If the Work includes a "NOTICE" text file as part of its -+ distribution, then any Derivative Works that You distribute must -+ include a readable copy of the attribution notices contained -+ within such NOTICE file, excluding those notices that do not -+ pertain to any part of the Derivative Works, in at least one -+ of the following places: within a NOTICE text file distributed -+ as part of the Derivative Works; within the Source form or -+ documentation, if provided along with the Derivative Works; or, -+ within a display generated by the Derivative Works, if and -+ wherever such third-party notices normally appear. The contents -+ of the NOTICE file are for informational purposes only and -+ do not modify the License. You may add Your own attribution -+ notices within Derivative Works that You distribute, alongside -+ or as an addendum to the NOTICE text from the Work, provided -+ that such additional attribution notices cannot be construed -+ as modifying the License. -+ -+ You may add Your own copyright statement to Your modifications and -+ may provide additional or different license terms and conditions -+ for use, reproduction, or distribution of Your modifications, or -+ for any such Derivative Works as a whole, provided Your use, -+ reproduction, and distribution of the Work otherwise complies with -+ the conditions stated in this License. -+ -+ 5. Submission of Contributions. Unless You explicitly state otherwise, -+ any Contribution intentionally submitted for inclusion in the Work -+ by You to the Licensor shall be under the terms and conditions of -+ this License, without any additional terms or conditions. -+ Notwithstanding the above, nothing herein shall supersede or modify -+ the terms of any separate license agreement you may have executed -+ with Licensor regarding such Contributions. -+ -+ 6. Trademarks. This License does not grant permission to use the trade -+ names, trademarks, service marks, or product names of the Licensor, -+ except as required for reasonable and customary use in describing the -+ origin of the Work and reproducing the content of the NOTICE file. -+ -+ 7. Disclaimer of Warranty. Unless required by applicable law or -+ agreed to in writing, Licensor provides the Work (and each -+ Contributor provides its Contributions) on an "AS IS" BASIS, -+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -+ implied, including, without limitation, any warranties or conditions -+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -+ PARTICULAR PURPOSE. You are solely responsible for determining the -+ appropriateness of using or redistributing the Work and assume any -+ risks associated with Your exercise of permissions under this License. -+ -+ 8. Limitation of Liability. In no event and under no legal theory, -+ whether in tort (including negligence), contract, or otherwise, -+ unless required by applicable law (such as deliberate and grossly -+ negligent acts) or agreed to in writing, shall any Contributor be -+ liable to You for damages, including any direct, indirect, special, -+ incidental, or consequential damages of any character arising as a -+ result of this License or out of the use or inability to use the -+ Work (including but not limited to damages for loss of goodwill, -+ work stoppage, computer failure or malfunction, or any and all -+ other commercial damages or losses), even if such Contributor -+ has been advised of the possibility of such damages. -+ -+ 9. Accepting Warranty or Additional Liability. While redistributing -+ the Work or Derivative Works thereof, You may choose to offer, -+ and charge a fee for, acceptance of support, warranty, indemnity, -+ or other liability obligations and/or rights consistent with this -+ License. However, in accepting such obligations, You may act only -+ on Your own behalf and on Your sole responsibility, not on behalf -+ of any other Contributor, and only if You agree to indemnify, -+ defend, and hold each Contributor harmless for any liability -+ incurred by, or claims asserted against, such Contributor by reason -+ of your accepting any such warranty or additional liability. -+ -+ END OF TERMS AND CONDITIONS -+ -+ APPENDIX: How to apply the Apache License to your work. -+ -+ To apply the Apache License to your work, attach the following -+ boilerplate notice, with the fields enclosed by brackets "[]" -+ replaced with your own identifying information. (Don't include -+ the brackets!) The text should be enclosed in the appropriate -+ comment syntax for the file format. We also recommend that a -+ file or class name and description of purpose be included on the -+ same "printed page" as the copyright notice for easier -+ identification within third-party archives. -+ -+ Copyright [yyyy] [name of copyright owner] -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -diff --git a/vendor/github.com/prometheus/procfs/MAINTAINERS.md b/vendor/github.com/prometheus/procfs/MAINTAINERS.md -new file mode 100755 -index 0000000..56ba67d ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/MAINTAINERS.md -@@ -0,0 +1,2 @@ -+* Johannes 'fish' Ziemke @discordianfish -+* Paul Gier @pgier -diff --git a/vendor/github.com/prometheus/procfs/Makefile b/vendor/github.com/prometheus/procfs/Makefile -new file mode 100755 -index 0000000..7edfe4d ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/Makefile -@@ -0,0 +1,31 @@ -+# Copyright 2018 The Prometheus Authors -+# Licensed under the Apache License, Version 2.0 (the "License"); -+# you may not use this file except in compliance with the License. -+# You may obtain a copy of the License at -+# -+# 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. -+ -+include Makefile.common -+ -+%/.unpacked: %.ttar -+ @echo ">> extracting fixtures $*" -+ ./ttar -C $(dir $*) -x -f $*.ttar -+ touch $@ -+ -+fixtures: testdata/fixtures/.unpacked -+ -+update_fixtures: -+ rm -vf testdata/fixtures/.unpacked -+ ./ttar -c -f testdata/fixtures.ttar -C testdata/ fixtures/ -+ -+.PHONY: build -+build: -+ -+.PHONY: test -+test: testdata/fixtures/.unpacked common-test -diff --git a/vendor/github.com/prometheus/procfs/Makefile.common b/vendor/github.com/prometheus/procfs/Makefile.common -new file mode 100755 -index 0000000..6c8e3e2 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/Makefile.common -@@ -0,0 +1,264 @@ -+# Copyright 2018 The Prometheus Authors -+# Licensed under the Apache License, Version 2.0 (the "License"); -+# you may not use this file except in compliance with the License. -+# You may obtain a copy of the License at -+# -+# 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. -+ -+ -+# A common Makefile that includes rules to be reused in different prometheus projects. -+# !!! Open PRs only against the prometheus/prometheus/Makefile.common repository! -+ -+# Example usage : -+# Create the main Makefile in the root project directory. -+# include Makefile.common -+# customTarget: -+# @echo ">> Running customTarget" -+# -+ -+# Ensure GOBIN is not set during build so that promu is installed to the correct path -+unexport GOBIN -+ -+GO ?= go -+GOFMT ?= $(GO)fmt -+FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) -+GOOPTS ?= -+GOHOSTOS ?= $(shell $(GO) env GOHOSTOS) -+GOHOSTARCH ?= $(shell $(GO) env GOHOSTARCH) -+ -+GO_VERSION ?= $(shell $(GO) version) -+GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION)) -+PRE_GO_111 ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.') -+ -+PROMU := $(FIRST_GOPATH)/bin/promu -+pkgs = ./... -+ -+ifeq (arm, $(GOHOSTARCH)) -+ GOHOSTARM ?= $(shell GOARM= $(GO) env GOARM) -+ GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH)v$(GOHOSTARM) -+else -+ GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH) -+endif -+ -+GOTEST := $(GO) test -+GOTEST_DIR := -+ifneq ($(CIRCLE_JOB),) -+ifneq ($(shell which gotestsum),) -+ GOTEST_DIR := test-results -+ GOTEST := gotestsum --junitfile $(GOTEST_DIR)/unit-tests.xml -- -+endif -+endif -+ -+PROMU_VERSION ?= 0.13.0 -+PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz -+ -+GOLANGCI_LINT := -+GOLANGCI_LINT_OPTS ?= -+GOLANGCI_LINT_VERSION ?= v1.45.2 -+# golangci-lint only supports linux, darwin and windows platforms on i386/amd64. -+# windows isn't included here because of the path separator being different. -+ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) -+ ifeq ($(GOHOSTARCH),$(filter $(GOHOSTARCH),amd64 i386)) -+ # If we're in CI and there is an Actions file, that means the linter -+ # is being run in Actions, so we don't need to run it here. -+ ifeq (,$(CIRCLE_JOB)) -+ GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint -+ else ifeq (,$(wildcard .github/workflows/golangci-lint.yml)) -+ GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint -+ endif -+ endif -+endif -+ -+PREFIX ?= $(shell pwd) -+BIN_DIR ?= $(shell pwd) -+DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) -+DOCKERFILE_PATH ?= ./Dockerfile -+DOCKERBUILD_CONTEXT ?= ./ -+DOCKER_REPO ?= prom -+ -+DOCKER_ARCHS ?= amd64 -+ -+BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS)) -+PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS)) -+TAG_DOCKER_ARCHS = $(addprefix common-docker-tag-latest-,$(DOCKER_ARCHS)) -+ -+ifeq ($(GOHOSTARCH),amd64) -+ ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows)) -+ # Only supported on amd64 -+ test-flags := -race -+ endif -+endif -+ -+# This rule is used to forward a target like "build" to "common-build". This -+# allows a new "build" target to be defined in a Makefile which includes this -+# one and override "common-build" without override warnings. -+%: common-% ; -+ -+.PHONY: common-all -+common-all: precheck style check_license lint yamllint unused build test -+ -+.PHONY: common-style -+common-style: -+ @echo ">> checking code style" -+ @fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \ -+ if [ -n "$${fmtRes}" ]; then \ -+ echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ -+ echo "Please ensure you are using $$($(GO) version) for formatting code."; \ -+ exit 1; \ -+ fi -+ -+.PHONY: common-check_license -+common-check_license: -+ @echo ">> checking license header" -+ @licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \ -+ awk 'NR<=3' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \ -+ done); \ -+ if [ -n "$${licRes}" ]; then \ -+ echo "license header checking failed:"; echo "$${licRes}"; \ -+ exit 1; \ -+ fi -+ -+.PHONY: common-deps -+common-deps: -+ @echo ">> getting dependencies" -+ $(GO) mod download -+ -+.PHONY: update-go-deps -+update-go-deps: -+ @echo ">> updating Go dependencies" -+ @for m in $$($(GO) list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \ -+ $(GO) get -d $$m; \ -+ done -+ $(GO) mod tidy -+ -+.PHONY: common-test-short -+common-test-short: $(GOTEST_DIR) -+ @echo ">> running short tests" -+ $(GOTEST) -short $(GOOPTS) $(pkgs) -+ -+.PHONY: common-test -+common-test: $(GOTEST_DIR) -+ @echo ">> running all tests" -+ $(GOTEST) $(test-flags) $(GOOPTS) $(pkgs) -+ -+$(GOTEST_DIR): -+ @mkdir -p $@ -+ -+.PHONY: common-format -+common-format: -+ @echo ">> formatting code" -+ $(GO) fmt $(pkgs) -+ -+.PHONY: common-vet -+common-vet: -+ @echo ">> vetting code" -+ $(GO) vet $(GOOPTS) $(pkgs) -+ -+.PHONY: common-lint -+common-lint: $(GOLANGCI_LINT) -+ifdef GOLANGCI_LINT -+ @echo ">> running golangci-lint" -+# 'go list' needs to be executed before staticcheck to prepopulate the modules cache. -+# Otherwise staticcheck might fail randomly for some reason not yet explained. -+ $(GO) list -e -compiled -test=true -export=false -deps=true -find=false -tags= -- ./... > /dev/null -+ $(GOLANGCI_LINT) run $(GOLANGCI_LINT_OPTS) $(pkgs) -+endif -+ -+.PHONY: common-yamllint -+common-yamllint: -+ @echo ">> running yamllint on all YAML files in the repository" -+ifeq (, $(shell which yamllint)) -+ @echo "yamllint not installed so skipping" -+else -+ yamllint . -+endif -+ -+# For backward-compatibility. -+.PHONY: common-staticcheck -+common-staticcheck: lint -+ -+.PHONY: common-unused -+common-unused: -+ @echo ">> running check for unused/missing packages in go.mod" -+ $(GO) mod tidy -+ @git diff --exit-code -- go.sum go.mod -+ -+.PHONY: common-build -+common-build: promu -+ @echo ">> building binaries" -+ $(PROMU) build --prefix $(PREFIX) $(PROMU_BINARIES) -+ -+.PHONY: common-tarball -+common-tarball: promu -+ @echo ">> building release tarball" -+ $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) -+ -+.PHONY: common-docker $(BUILD_DOCKER_ARCHS) -+common-docker: $(BUILD_DOCKER_ARCHS) -+$(BUILD_DOCKER_ARCHS): common-docker-%: -+ docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" \ -+ -f $(DOCKERFILE_PATH) \ -+ --build-arg ARCH="$*" \ -+ --build-arg OS="linux" \ -+ $(DOCKERBUILD_CONTEXT) -+ -+.PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS) -+common-docker-publish: $(PUBLISH_DOCKER_ARCHS) -+$(PUBLISH_DOCKER_ARCHS): common-docker-publish-%: -+ docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" -+ -+DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION))) -+.PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS) -+common-docker-tag-latest: $(TAG_DOCKER_ARCHS) -+$(TAG_DOCKER_ARCHS): common-docker-tag-latest-%: -+ docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest" -+ docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)" -+ -+.PHONY: common-docker-manifest -+common-docker-manifest: -+ DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(DOCKER_IMAGE_TAG)) -+ DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" -+ -+.PHONY: promu -+promu: $(PROMU) -+ -+$(PROMU): -+ $(eval PROMU_TMP := $(shell mktemp -d)) -+ curl -s -L $(PROMU_URL) | tar -xvzf - -C $(PROMU_TMP) -+ mkdir -p $(FIRST_GOPATH)/bin -+ cp $(PROMU_TMP)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(FIRST_GOPATH)/bin/promu -+ rm -r $(PROMU_TMP) -+ -+.PHONY: proto -+proto: -+ @echo ">> generating code from proto files" -+ @./scripts/genproto.sh -+ -+ifdef GOLANGCI_LINT -+$(GOLANGCI_LINT): -+ mkdir -p $(FIRST_GOPATH)/bin -+ curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/$(GOLANGCI_LINT_VERSION)/install.sh \ -+ | sed -e '/install -d/d' \ -+ | sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION) -+endif -+ -+.PHONY: precheck -+precheck:: -+ -+define PRECHECK_COMMAND_template = -+precheck:: $(1)_precheck -+ -+PRECHECK_COMMAND_$(1) ?= $(1) $$(strip $$(PRECHECK_OPTIONS_$(1))) -+.PHONY: $(1)_precheck -+$(1)_precheck: -+ @if ! $$(PRECHECK_COMMAND_$(1)) 1>/dev/null 2>&1; then \ -+ echo "Execution of '$$(PRECHECK_COMMAND_$(1))' command failed. Is $(1) installed?"; \ -+ exit 1; \ -+ fi -+endef -diff --git a/vendor/github.com/prometheus/procfs/NOTICE b/vendor/github.com/prometheus/procfs/NOTICE -new file mode 100755 -index 0000000..53c5e9a ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/NOTICE -@@ -0,0 +1,7 @@ -+procfs provides functions to retrieve system, kernel and process -+metrics from the pseudo-filesystem proc. -+ -+Copyright 2014-2015 The Prometheus Authors -+ -+This product includes software developed at -+SoundCloud Ltd. (http://soundcloud.com/). -diff --git a/vendor/github.com/prometheus/procfs/README.md b/vendor/github.com/prometheus/procfs/README.md -new file mode 100755 -index 0000000..43c3773 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/README.md -@@ -0,0 +1,61 @@ -+# procfs -+ -+This package provides functions to retrieve system, kernel, and process -+metrics from the pseudo-filesystems /proc and /sys. -+ -+*WARNING*: This package is a work in progress. Its API may still break in -+backwards-incompatible ways without warnings. Use it at your own risk. -+ -+[![Go Reference](https://pkg.go.dev/badge/github.com/prometheus/procfs.svg)](https://pkg.go.dev/github.com/prometheus/procfs) -+[![CircleCI](https://circleci.com/gh/prometheus/procfs/tree/master.svg?style=svg)](https://circleci.com/gh/prometheus/procfs/tree/master) -+[![Go Report Card](https://goreportcard.com/badge/github.com/prometheus/procfs)](https://goreportcard.com/report/github.com/prometheus/procfs) -+ -+## Usage -+ -+The procfs library is organized by packages based on whether the gathered data is coming from -+/proc, /sys, or both. Each package contains an `FS` type which represents the path to either /proc, -+/sys, or both. For example, cpu statistics are gathered from -+`/proc/stat` and are available via the root procfs package. First, the proc filesystem mount -+point is initialized, and then the stat information is read. -+ -+```go -+fs, err := procfs.NewFS("/proc") -+stats, err := fs.Stat() -+``` -+ -+Some sub-packages such as `blockdevice`, require access to both the proc and sys filesystems. -+ -+```go -+ fs, err := blockdevice.NewFS("/proc", "/sys") -+ stats, err := fs.ProcDiskstats() -+``` -+ -+## Package Organization -+ -+The packages in this project are organized according to (1) whether the data comes from the `/proc` or -+`/sys` filesystem and (2) the type of information being retrieved. For example, most process information -+can be gathered from the functions in the root `procfs` package. Information about block devices such as disk drives -+is available in the `blockdevices` sub-package. -+ -+## Building and Testing -+ -+The procfs library is intended to be built as part of another application, so there are no distributable binaries. -+However, most of the API includes unit tests which can be run with `make test`. -+ -+### Updating Test Fixtures -+ -+The procfs library includes a set of test fixtures which include many example files from -+the `/proc` and `/sys` filesystems. These fixtures are included as a [ttar](https://github.com/ideaship/ttar) file -+which is extracted automatically during testing. To add/update the test fixtures, first -+ensure the `fixtures` directory is up to date by removing the existing directory and then -+extracting the ttar file using `make fixtures/.unpacked` or just `make test`. -+ -+```bash -+rm -rf fixtures -+make test -+``` -+ -+Next, make the required changes to the extracted files in the `fixtures` directory. When -+the changes are complete, run `make update_fixtures` to create a new `fixtures.ttar` file -+based on the updated `fixtures` directory. And finally, verify the changes using -+`git diff fixtures.ttar`. -diff --git a/vendor/github.com/prometheus/procfs/SECURITY.md b/vendor/github.com/prometheus/procfs/SECURITY.md -new file mode 100755 -index 0000000..fed02d8 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/SECURITY.md -@@ -0,0 +1,6 @@ -+# Reporting a security issue -+ -+The Prometheus security policy, including how to report vulnerabilities, can be -+found here: -+ -+ -diff --git a/vendor/github.com/prometheus/procfs/arp.go b/vendor/github.com/prometheus/procfs/arp.go -new file mode 100755 -index 0000000..68f36e8 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/arp.go -@@ -0,0 +1,116 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "fmt" -+ "net" -+ "os" -+ "strconv" -+ "strings" -+) -+ -+// Learned from include/uapi/linux/if_arp.h. -+const ( -+ // completed entry (ha valid). -+ ATFComplete = 0x02 -+ // permanent entry. -+ ATFPermanent = 0x04 -+ // Publish entry. -+ ATFPublish = 0x08 -+ // Has requested trailers. -+ ATFUseTrailers = 0x10 -+ // Obsoleted: Want to use a netmask (only for proxy entries). -+ ATFNetmask = 0x20 -+ // Don't answer this addresses. -+ ATFDontPublish = 0x40 -+) -+ -+// ARPEntry contains a single row of the columnar data represented in -+// /proc/net/arp. -+type ARPEntry struct { -+ // IP address -+ IPAddr net.IP -+ // MAC address -+ HWAddr net.HardwareAddr -+ // Name of the device -+ Device string -+ // Flags -+ Flags byte -+} -+ -+// GatherARPEntries retrieves all the ARP entries, parse the relevant columns, -+// and then return a slice of ARPEntry's. -+func (fs FS) GatherARPEntries() ([]ARPEntry, error) { -+ data, err := os.ReadFile(fs.proc.Path("net/arp")) -+ if err != nil { -+ return nil, fmt.Errorf("error reading arp %q: %w", fs.proc.Path("net/arp"), err) -+ } -+ -+ return parseARPEntries(data) -+} -+ -+func parseARPEntries(data []byte) ([]ARPEntry, error) { -+ lines := strings.Split(string(data), "\n") -+ entries := make([]ARPEntry, 0) -+ var err error -+ const ( -+ expectedDataWidth = 6 -+ expectedHeaderWidth = 9 -+ ) -+ for _, line := range lines { -+ columns := strings.Fields(line) -+ width := len(columns) -+ -+ if width == expectedHeaderWidth || width == 0 { -+ continue -+ } else if width == expectedDataWidth { -+ entry, err := parseARPEntry(columns) -+ if err != nil { -+ return []ARPEntry{}, fmt.Errorf("failed to parse ARP entry: %w", err) -+ } -+ entries = append(entries, entry) -+ } else { -+ return []ARPEntry{}, fmt.Errorf("%d columns were detected, but %d were expected", width, expectedDataWidth) -+ } -+ -+ } -+ -+ return entries, err -+} -+ -+func parseARPEntry(columns []string) (ARPEntry, error) { -+ entry := ARPEntry{Device: columns[5]} -+ ip := net.ParseIP(columns[0]) -+ entry.IPAddr = ip -+ -+ if mac, err := net.ParseMAC(columns[3]); err == nil { -+ entry.HWAddr = mac -+ } else { -+ return ARPEntry{}, err -+ } -+ -+ if flags, err := strconv.ParseUint(columns[2], 0, 8); err == nil { -+ entry.Flags = byte(flags) -+ } else { -+ return ARPEntry{}, err -+ } -+ -+ return entry, nil -+} -+ -+// IsComplete returns true if ARP entry is marked with complete flag. -+func (entry *ARPEntry) IsComplete() bool { -+ return entry.Flags&ATFComplete != 0 -+} -diff --git a/vendor/github.com/prometheus/procfs/buddyinfo.go b/vendor/github.com/prometheus/procfs/buddyinfo.go -new file mode 100755 -index 0000000..f5b7939 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/buddyinfo.go -@@ -0,0 +1,85 @@ -+// Copyright 2017 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "fmt" -+ "io" -+ "os" -+ "strconv" -+ "strings" -+) -+ -+// A BuddyInfo is the details parsed from /proc/buddyinfo. -+// The data is comprised of an array of free fragments of each size. -+// The sizes are 2^n*PAGE_SIZE, where n is the array index. -+type BuddyInfo struct { -+ Node string -+ Zone string -+ Sizes []float64 -+} -+ -+// BuddyInfo reads the buddyinfo statistics from the specified `proc` filesystem. -+func (fs FS) BuddyInfo() ([]BuddyInfo, error) { -+ file, err := os.Open(fs.proc.Path("buddyinfo")) -+ if err != nil { -+ return nil, err -+ } -+ defer file.Close() -+ -+ return parseBuddyInfo(file) -+} -+ -+func parseBuddyInfo(r io.Reader) ([]BuddyInfo, error) { -+ var ( -+ buddyInfo = []BuddyInfo{} -+ scanner = bufio.NewScanner(r) -+ bucketCount = -1 -+ ) -+ -+ for scanner.Scan() { -+ var err error -+ line := scanner.Text() -+ parts := strings.Fields(line) -+ -+ if len(parts) < 4 { -+ return nil, fmt.Errorf("invalid number of fields when parsing buddyinfo") -+ } -+ -+ node := strings.TrimRight(parts[1], ",") -+ zone := strings.TrimRight(parts[3], ",") -+ arraySize := len(parts[4:]) -+ -+ if bucketCount == -1 { -+ bucketCount = arraySize -+ } else { -+ if bucketCount != arraySize { -+ return nil, fmt.Errorf("mismatch in number of buddyinfo buckets, previous count %d, new count %d", bucketCount, arraySize) -+ } -+ } -+ -+ sizes := make([]float64, arraySize) -+ for i := 0; i < arraySize; i++ { -+ sizes[i], err = strconv.ParseFloat(parts[i+4], 64) -+ if err != nil { -+ return nil, fmt.Errorf("invalid value in buddyinfo: %w", err) -+ } -+ } -+ -+ buddyInfo = append(buddyInfo, BuddyInfo{node, zone, sizes}) -+ } -+ -+ return buddyInfo, scanner.Err() -+} -diff --git a/vendor/github.com/prometheus/procfs/cmdline.go b/vendor/github.com/prometheus/procfs/cmdline.go -new file mode 100755 -index 0000000..bf4f3b4 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cmdline.go -@@ -0,0 +1,30 @@ -+// Copyright 2021 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// CmdLine returns the command line of the kernel. -+func (fs FS) CmdLine() ([]string, error) { -+ data, err := util.ReadFileNoStat(fs.proc.Path("cmdline")) -+ if err != nil { -+ return nil, err -+ } -+ -+ return strings.Fields(string(data)), nil -+} -diff --git a/vendor/github.com/prometheus/procfs/cpuinfo.go b/vendor/github.com/prometheus/procfs/cpuinfo.go -new file mode 100755 -index 0000000..ff6b927 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cpuinfo.go -@@ -0,0 +1,482 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build linux -+// +build linux -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "errors" -+ "fmt" -+ "regexp" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// CPUInfo contains general information about a system CPU found in /proc/cpuinfo. -+type CPUInfo struct { -+ Processor uint -+ VendorID string -+ CPUFamily string -+ Model string -+ ModelName string -+ Stepping string -+ Microcode string -+ CPUMHz float64 -+ CacheSize string -+ PhysicalID string -+ Siblings uint -+ CoreID string -+ CPUCores uint -+ APICID string -+ InitialAPICID string -+ FPU string -+ FPUException string -+ CPUIDLevel uint -+ WP string -+ Flags []string -+ Bugs []string -+ BogoMips float64 -+ CLFlushSize uint -+ CacheAlignment uint -+ AddressSizes string -+ PowerManagement string -+} -+ -+var ( -+ cpuinfoClockRegexp = regexp.MustCompile(`([\d.]+)`) -+ cpuinfoS390XProcessorRegexp = regexp.MustCompile(`^processor\s+(\d+):.*`) -+) -+ -+// CPUInfo returns information about current system CPUs. -+// See https://www.kernel.org/doc/Documentation/filesystems/proc.txt -+func (fs FS) CPUInfo() ([]CPUInfo, error) { -+ data, err := util.ReadFileNoStat(fs.proc.Path("cpuinfo")) -+ if err != nil { -+ return nil, err -+ } -+ return parseCPUInfo(data) -+} -+ -+func parseCPUInfoX86(info []byte) ([]CPUInfo, error) { -+ scanner := bufio.NewScanner(bytes.NewReader(info)) -+ -+ // find the first "processor" line -+ firstLine := firstNonEmptyLine(scanner) -+ if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { -+ return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) -+ } -+ field := strings.SplitN(firstLine, ": ", 2) -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ firstcpu := CPUInfo{Processor: uint(v)} -+ cpuinfo := []CPUInfo{firstcpu} -+ i := 0 -+ -+ for scanner.Scan() { -+ line := scanner.Text() -+ if !strings.Contains(line, ":") { -+ continue -+ } -+ field := strings.SplitN(line, ": ", 2) -+ switch strings.TrimSpace(field[0]) { -+ case "processor": -+ cpuinfo = append(cpuinfo, CPUInfo{}) // start of the next processor -+ i++ -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].Processor = uint(v) -+ case "vendor", "vendor_id": -+ cpuinfo[i].VendorID = field[1] -+ case "cpu family": -+ cpuinfo[i].CPUFamily = field[1] -+ case "model": -+ cpuinfo[i].Model = field[1] -+ case "model name": -+ cpuinfo[i].ModelName = field[1] -+ case "stepping": -+ cpuinfo[i].Stepping = field[1] -+ case "microcode": -+ cpuinfo[i].Microcode = field[1] -+ case "cpu MHz": -+ v, err := strconv.ParseFloat(field[1], 64) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].CPUMHz = v -+ case "cache size": -+ cpuinfo[i].CacheSize = field[1] -+ case "physical id": -+ cpuinfo[i].PhysicalID = field[1] -+ case "siblings": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].Siblings = uint(v) -+ case "core id": -+ cpuinfo[i].CoreID = field[1] -+ case "cpu cores": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].CPUCores = uint(v) -+ case "apicid": -+ cpuinfo[i].APICID = field[1] -+ case "initial apicid": -+ cpuinfo[i].InitialAPICID = field[1] -+ case "fpu": -+ cpuinfo[i].FPU = field[1] -+ case "fpu_exception": -+ cpuinfo[i].FPUException = field[1] -+ case "cpuid level": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].CPUIDLevel = uint(v) -+ case "wp": -+ cpuinfo[i].WP = field[1] -+ case "flags": -+ cpuinfo[i].Flags = strings.Fields(field[1]) -+ case "bugs": -+ cpuinfo[i].Bugs = strings.Fields(field[1]) -+ case "bogomips": -+ v, err := strconv.ParseFloat(field[1], 64) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].BogoMips = v -+ case "clflush size": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].CLFlushSize = uint(v) -+ case "cache_alignment": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].CacheAlignment = uint(v) -+ case "address sizes": -+ cpuinfo[i].AddressSizes = field[1] -+ case "power management": -+ cpuinfo[i].PowerManagement = field[1] -+ } -+ } -+ return cpuinfo, nil -+} -+ -+func parseCPUInfoARM(info []byte) ([]CPUInfo, error) { -+ scanner := bufio.NewScanner(bytes.NewReader(info)) -+ -+ firstLine := firstNonEmptyLine(scanner) -+ match, _ := regexp.MatchString("^[Pp]rocessor", firstLine) -+ if !match || !strings.Contains(firstLine, ":") { -+ return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) -+ } -+ field := strings.SplitN(firstLine, ": ", 2) -+ cpuinfo := []CPUInfo{} -+ featuresLine := "" -+ commonCPUInfo := CPUInfo{} -+ i := 0 -+ if strings.TrimSpace(field[0]) == "Processor" { -+ commonCPUInfo = CPUInfo{ModelName: field[1]} -+ i = -1 -+ } else { -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ firstcpu := CPUInfo{Processor: uint(v)} -+ cpuinfo = []CPUInfo{firstcpu} -+ } -+ -+ for scanner.Scan() { -+ line := scanner.Text() -+ if !strings.Contains(line, ":") { -+ continue -+ } -+ field := strings.SplitN(line, ": ", 2) -+ switch strings.TrimSpace(field[0]) { -+ case "processor": -+ cpuinfo = append(cpuinfo, commonCPUInfo) // start of the next processor -+ i++ -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].Processor = uint(v) -+ case "BogoMIPS": -+ if i == -1 { -+ cpuinfo = append(cpuinfo, commonCPUInfo) // There is only one processor -+ i++ -+ cpuinfo[i].Processor = 0 -+ } -+ v, err := strconv.ParseFloat(field[1], 64) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].BogoMips = v -+ case "Features": -+ featuresLine = line -+ case "model name": -+ cpuinfo[i].ModelName = field[1] -+ } -+ } -+ fields := strings.SplitN(featuresLine, ": ", 2) -+ for i := range cpuinfo { -+ cpuinfo[i].Flags = strings.Fields(fields[1]) -+ } -+ return cpuinfo, nil -+ -+} -+ -+func parseCPUInfoS390X(info []byte) ([]CPUInfo, error) { -+ scanner := bufio.NewScanner(bytes.NewReader(info)) -+ -+ firstLine := firstNonEmptyLine(scanner) -+ if !strings.HasPrefix(firstLine, "vendor_id") || !strings.Contains(firstLine, ":") { -+ return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) -+ } -+ field := strings.SplitN(firstLine, ": ", 2) -+ cpuinfo := []CPUInfo{} -+ commonCPUInfo := CPUInfo{VendorID: field[1]} -+ -+ for scanner.Scan() { -+ line := scanner.Text() -+ if !strings.Contains(line, ":") { -+ continue -+ } -+ field := strings.SplitN(line, ": ", 2) -+ switch strings.TrimSpace(field[0]) { -+ case "bogomips per cpu": -+ v, err := strconv.ParseFloat(field[1], 64) -+ if err != nil { -+ return nil, err -+ } -+ commonCPUInfo.BogoMips = v -+ case "features": -+ commonCPUInfo.Flags = strings.Fields(field[1]) -+ } -+ if strings.HasPrefix(line, "processor") { -+ match := cpuinfoS390XProcessorRegexp.FindStringSubmatch(line) -+ if len(match) < 2 { -+ return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) -+ } -+ cpu := commonCPUInfo -+ v, err := strconv.ParseUint(match[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpu.Processor = uint(v) -+ cpuinfo = append(cpuinfo, cpu) -+ } -+ if strings.HasPrefix(line, "cpu number") { -+ break -+ } -+ } -+ -+ i := 0 -+ for scanner.Scan() { -+ line := scanner.Text() -+ if !strings.Contains(line, ":") { -+ continue -+ } -+ field := strings.SplitN(line, ": ", 2) -+ switch strings.TrimSpace(field[0]) { -+ case "cpu number": -+ i++ -+ case "cpu MHz dynamic": -+ clock := cpuinfoClockRegexp.FindString(strings.TrimSpace(field[1])) -+ v, err := strconv.ParseFloat(clock, 64) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].CPUMHz = v -+ case "physical id": -+ cpuinfo[i].PhysicalID = field[1] -+ case "core id": -+ cpuinfo[i].CoreID = field[1] -+ case "cpu cores": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].CPUCores = uint(v) -+ case "siblings": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].Siblings = uint(v) -+ } -+ } -+ -+ return cpuinfo, nil -+} -+ -+func parseCPUInfoMips(info []byte) ([]CPUInfo, error) { -+ scanner := bufio.NewScanner(bytes.NewReader(info)) -+ -+ // find the first "processor" line -+ firstLine := firstNonEmptyLine(scanner) -+ if !strings.HasPrefix(firstLine, "system type") || !strings.Contains(firstLine, ":") { -+ return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) -+ } -+ field := strings.SplitN(firstLine, ": ", 2) -+ cpuinfo := []CPUInfo{} -+ systemType := field[1] -+ -+ i := 0 -+ -+ for scanner.Scan() { -+ line := scanner.Text() -+ if !strings.Contains(line, ":") { -+ continue -+ } -+ field := strings.SplitN(line, ": ", 2) -+ switch strings.TrimSpace(field[0]) { -+ case "processor": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ i = int(v) -+ cpuinfo = append(cpuinfo, CPUInfo{}) // start of the next processor -+ cpuinfo[i].Processor = uint(v) -+ cpuinfo[i].VendorID = systemType -+ case "cpu model": -+ cpuinfo[i].ModelName = field[1] -+ case "BogoMIPS": -+ v, err := strconv.ParseFloat(field[1], 64) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].BogoMips = v -+ } -+ } -+ return cpuinfo, nil -+} -+ -+func parseCPUInfoPPC(info []byte) ([]CPUInfo, error) { -+ scanner := bufio.NewScanner(bytes.NewReader(info)) -+ -+ firstLine := firstNonEmptyLine(scanner) -+ if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { -+ return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) -+ } -+ field := strings.SplitN(firstLine, ": ", 2) -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ firstcpu := CPUInfo{Processor: uint(v)} -+ cpuinfo := []CPUInfo{firstcpu} -+ i := 0 -+ -+ for scanner.Scan() { -+ line := scanner.Text() -+ if !strings.Contains(line, ":") { -+ continue -+ } -+ field := strings.SplitN(line, ": ", 2) -+ switch strings.TrimSpace(field[0]) { -+ case "processor": -+ cpuinfo = append(cpuinfo, CPUInfo{}) // start of the next processor -+ i++ -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].Processor = uint(v) -+ case "cpu": -+ cpuinfo[i].VendorID = field[1] -+ case "clock": -+ clock := cpuinfoClockRegexp.FindString(strings.TrimSpace(field[1])) -+ v, err := strconv.ParseFloat(clock, 64) -+ if err != nil { -+ return nil, err -+ } -+ cpuinfo[i].CPUMHz = v -+ } -+ } -+ return cpuinfo, nil -+} -+ -+func parseCPUInfoRISCV(info []byte) ([]CPUInfo, error) { -+ scanner := bufio.NewScanner(bytes.NewReader(info)) -+ -+ firstLine := firstNonEmptyLine(scanner) -+ if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { -+ return nil, fmt.Errorf("invalid cpuinfo file: %q", firstLine) -+ } -+ field := strings.SplitN(firstLine, ": ", 2) -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ firstcpu := CPUInfo{Processor: uint(v)} -+ cpuinfo := []CPUInfo{firstcpu} -+ i := 0 -+ -+ for scanner.Scan() { -+ line := scanner.Text() -+ if !strings.Contains(line, ":") { -+ continue -+ } -+ field := strings.SplitN(line, ": ", 2) -+ switch strings.TrimSpace(field[0]) { -+ case "processor": -+ v, err := strconv.ParseUint(field[1], 0, 32) -+ if err != nil { -+ return nil, err -+ } -+ i = int(v) -+ cpuinfo = append(cpuinfo, CPUInfo{}) // start of the next processor -+ cpuinfo[i].Processor = uint(v) -+ case "hart": -+ cpuinfo[i].CoreID = field[1] -+ case "isa": -+ cpuinfo[i].ModelName = field[1] -+ } -+ } -+ return cpuinfo, nil -+} -+ -+func parseCPUInfoDummy(_ []byte) ([]CPUInfo, error) { // nolint:unused,deadcode -+ return nil, errors.New("not implemented") -+} -+ -+// firstNonEmptyLine advances the scanner to the first non-empty line -+// and returns the contents of that line. -+func firstNonEmptyLine(scanner *bufio.Scanner) string { -+ for scanner.Scan() { -+ line := scanner.Text() -+ if strings.TrimSpace(line) != "" { -+ return line -+ } -+ } -+ return "" -+} -diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_armx.go b/vendor/github.com/prometheus/procfs/cpuinfo_armx.go -new file mode 100755 -index 0000000..64cfd53 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cpuinfo_armx.go -@@ -0,0 +1,20 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build linux && (arm || arm64) -+// +build linux -+// +build arm arm64 -+ -+package procfs -+ -+var parseCPUInfo = parseCPUInfoARM -diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mipsx.go b/vendor/github.com/prometheus/procfs/cpuinfo_mipsx.go -new file mode 100755 -index 0000000..c11207f ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cpuinfo_mipsx.go -@@ -0,0 +1,20 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build linux && (mips || mipsle || mips64 || mips64le) -+// +build linux -+// +build mips mipsle mips64 mips64le -+ -+package procfs -+ -+var parseCPUInfo = parseCPUInfoMips -diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_others.go b/vendor/github.com/prometheus/procfs/cpuinfo_others.go -new file mode 100755 -index 0000000..ea41bf2 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cpuinfo_others.go -@@ -0,0 +1,19 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build linux && !386 && !amd64 && !arm && !arm64 && !mips && !mips64 && !mips64le && !mipsle && !ppc64 && !ppc64le && !riscv64 && !s390x -+// +build linux,!386,!amd64,!arm,!arm64,!mips,!mips64,!mips64le,!mipsle,!ppc64,!ppc64le,!riscv64,!s390x -+ -+package procfs -+ -+var parseCPUInfo = parseCPUInfoDummy -diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_ppcx.go b/vendor/github.com/prometheus/procfs/cpuinfo_ppcx.go -new file mode 100755 -index 0000000..003bc2a ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cpuinfo_ppcx.go -@@ -0,0 +1,20 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build linux && (ppc64 || ppc64le) -+// +build linux -+// +build ppc64 ppc64le -+ -+package procfs -+ -+var parseCPUInfo = parseCPUInfoPPC -diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_riscvx.go b/vendor/github.com/prometheus/procfs/cpuinfo_riscvx.go -new file mode 100755 -index 0000000..1c9b731 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cpuinfo_riscvx.go -@@ -0,0 +1,20 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build linux && (riscv || riscv64) -+// +build linux -+// +build riscv riscv64 -+ -+package procfs -+ -+var parseCPUInfo = parseCPUInfoRISCV -diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_s390x.go b/vendor/github.com/prometheus/procfs/cpuinfo_s390x.go -new file mode 100755 -index 0000000..fa3686b ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cpuinfo_s390x.go -@@ -0,0 +1,19 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build linux -+// +build linux -+ -+package procfs -+ -+var parseCPUInfo = parseCPUInfoS390X -diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_x86.go b/vendor/github.com/prometheus/procfs/cpuinfo_x86.go -new file mode 100755 -index 0000000..a0ef555 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/cpuinfo_x86.go -@@ -0,0 +1,20 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build linux && (386 || amd64) -+// +build linux -+// +build 386 amd64 -+ -+package procfs -+ -+var parseCPUInfo = parseCPUInfoX86 -diff --git a/vendor/github.com/prometheus/procfs/crypto.go b/vendor/github.com/prometheus/procfs/crypto.go -new file mode 100755 -index 0000000..5048ad1 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/crypto.go -@@ -0,0 +1,153 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Crypto holds info parsed from /proc/crypto. -+type Crypto struct { -+ Alignmask *uint64 -+ Async bool -+ Blocksize *uint64 -+ Chunksize *uint64 -+ Ctxsize *uint64 -+ Digestsize *uint64 -+ Driver string -+ Geniv string -+ Internal string -+ Ivsize *uint64 -+ Maxauthsize *uint64 -+ MaxKeysize *uint64 -+ MinKeysize *uint64 -+ Module string -+ Name string -+ Priority *int64 -+ Refcnt *int64 -+ Seedsize *uint64 -+ Selftest string -+ Type string -+ Walksize *uint64 -+} -+ -+// Crypto parses an crypto-file (/proc/crypto) and returns a slice of -+// structs containing the relevant info. More information available here: -+// https://kernel.readthedocs.io/en/sphinx-samples/crypto-API.html -+func (fs FS) Crypto() ([]Crypto, error) { -+ path := fs.proc.Path("crypto") -+ b, err := util.ReadFileNoStat(path) -+ if err != nil { -+ return nil, fmt.Errorf("error reading crypto %q: %w", path, err) -+ } -+ -+ crypto, err := parseCrypto(bytes.NewReader(b)) -+ if err != nil { -+ return nil, fmt.Errorf("error parsing crypto %q: %w", path, err) -+ } -+ -+ return crypto, nil -+} -+ -+// parseCrypto parses a /proc/crypto stream into Crypto elements. -+func parseCrypto(r io.Reader) ([]Crypto, error) { -+ var out []Crypto -+ -+ s := bufio.NewScanner(r) -+ for s.Scan() { -+ text := s.Text() -+ switch { -+ case strings.HasPrefix(text, "name"): -+ // Each crypto element begins with its name. -+ out = append(out, Crypto{}) -+ case text == "": -+ continue -+ } -+ -+ kv := strings.Split(text, ":") -+ if len(kv) != 2 { -+ return nil, fmt.Errorf("malformed crypto line: %q", text) -+ } -+ -+ k := strings.TrimSpace(kv[0]) -+ v := strings.TrimSpace(kv[1]) -+ -+ // Parse the key/value pair into the currently focused element. -+ c := &out[len(out)-1] -+ if err := c.parseKV(k, v); err != nil { -+ return nil, err -+ } -+ } -+ -+ if err := s.Err(); err != nil { -+ return nil, err -+ } -+ -+ return out, nil -+} -+ -+// parseKV parses a key/value pair into the appropriate field of c. -+func (c *Crypto) parseKV(k, v string) error { -+ vp := util.NewValueParser(v) -+ -+ switch k { -+ case "async": -+ // Interpret literal yes as true. -+ c.Async = v == "yes" -+ case "blocksize": -+ c.Blocksize = vp.PUInt64() -+ case "chunksize": -+ c.Chunksize = vp.PUInt64() -+ case "digestsize": -+ c.Digestsize = vp.PUInt64() -+ case "driver": -+ c.Driver = v -+ case "geniv": -+ c.Geniv = v -+ case "internal": -+ c.Internal = v -+ case "ivsize": -+ c.Ivsize = vp.PUInt64() -+ case "maxauthsize": -+ c.Maxauthsize = vp.PUInt64() -+ case "max keysize": -+ c.MaxKeysize = vp.PUInt64() -+ case "min keysize": -+ c.MinKeysize = vp.PUInt64() -+ case "module": -+ c.Module = v -+ case "name": -+ c.Name = v -+ case "priority": -+ c.Priority = vp.PInt64() -+ case "refcnt": -+ c.Refcnt = vp.PInt64() -+ case "seedsize": -+ c.Seedsize = vp.PUInt64() -+ case "selftest": -+ c.Selftest = v -+ case "type": -+ c.Type = v -+ case "walksize": -+ c.Walksize = vp.PUInt64() -+ } -+ -+ return vp.Err() -+} -diff --git a/vendor/github.com/prometheus/procfs/doc.go b/vendor/github.com/prometheus/procfs/doc.go -new file mode 100755 -index 0000000..d31a826 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/doc.go -@@ -0,0 +1,45 @@ -+// Copyright 2014 Prometheus Team -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+// Package procfs provides functions to retrieve system, kernel and process -+// metrics from the pseudo-filesystem proc. -+// -+// Example: -+// -+// package main -+// -+// import ( -+// "fmt" -+// "log" -+// -+// "github.com/prometheus/procfs" -+// ) -+// -+// func main() { -+// p, err := procfs.Self() -+// if err != nil { -+// log.Fatalf("could not get process: %s", err) -+// } -+// -+// stat, err := p.Stat() -+// if err != nil { -+// log.Fatalf("could not get process stat: %s", err) -+// } -+// -+// fmt.Printf("command: %s\n", stat.Comm) -+// fmt.Printf("cpu time: %fs\n", stat.CPUTime()) -+// fmt.Printf("vsize: %dB\n", stat.VirtualMemory()) -+// fmt.Printf("rss: %dB\n", stat.ResidentMemory()) -+// } -+// -+package procfs -diff --git a/vendor/github.com/prometheus/procfs/fs.go b/vendor/github.com/prometheus/procfs/fs.go -new file mode 100755 -index 0000000..0102ab0 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/fs.go -@@ -0,0 +1,43 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "github.com/prometheus/procfs/internal/fs" -+) -+ -+// FS represents the pseudo-filesystem sys, which provides an interface to -+// kernel data structures. -+type FS struct { -+ proc fs.FS -+} -+ -+// DefaultMountPoint is the common mount point of the proc filesystem. -+const DefaultMountPoint = fs.DefaultProcMountPoint -+ -+// NewDefaultFS returns a new proc FS mounted under the default proc mountPoint. -+// It will error if the mount point directory can't be read or is a file. -+func NewDefaultFS() (FS, error) { -+ return NewFS(DefaultMountPoint) -+} -+ -+// NewFS returns a new proc FS mounted under the given proc mountPoint. It will error -+// if the mount point directory can't be read or is a file. -+func NewFS(mountPoint string) (FS, error) { -+ fs, err := fs.NewFS(mountPoint) -+ if err != nil { -+ return FS{}, err -+ } -+ return FS{fs}, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/fscache.go b/vendor/github.com/prometheus/procfs/fscache.go -new file mode 100755 -index 0000000..f8070e6 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/fscache.go -@@ -0,0 +1,422 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Fscacheinfo represents fscache statistics. -+type Fscacheinfo struct { -+ // Number of index cookies allocated -+ IndexCookiesAllocated uint64 -+ // data storage cookies allocated -+ DataStorageCookiesAllocated uint64 -+ // Number of special cookies allocated -+ SpecialCookiesAllocated uint64 -+ // Number of objects allocated -+ ObjectsAllocated uint64 -+ // Number of object allocation failures -+ ObjectAllocationsFailure uint64 -+ // Number of objects that reached the available state -+ ObjectsAvailable uint64 -+ // Number of objects that reached the dead state -+ ObjectsDead uint64 -+ // Number of objects that didn't have a coherency check -+ ObjectsWithoutCoherencyCheck uint64 -+ // Number of objects that passed a coherency check -+ ObjectsWithCoherencyCheck uint64 -+ // Number of objects that needed a coherency data update -+ ObjectsNeedCoherencyCheckUpdate uint64 -+ // Number of objects that were declared obsolete -+ ObjectsDeclaredObsolete uint64 -+ // Number of pages marked as being cached -+ PagesMarkedAsBeingCached uint64 -+ // Number of uncache page requests seen -+ UncachePagesRequestSeen uint64 -+ // Number of acquire cookie requests seen -+ AcquireCookiesRequestSeen uint64 -+ // Number of acq reqs given a NULL parent -+ AcquireRequestsWithNullParent uint64 -+ // Number of acq reqs rejected due to no cache available -+ AcquireRequestsRejectedNoCacheAvailable uint64 -+ // Number of acq reqs succeeded -+ AcquireRequestsSucceeded uint64 -+ // Number of acq reqs rejected due to error -+ AcquireRequestsRejectedDueToError uint64 -+ // Number of acq reqs failed on ENOMEM -+ AcquireRequestsFailedDueToEnomem uint64 -+ // Number of lookup calls made on cache backends -+ LookupsNumber uint64 -+ // Number of negative lookups made -+ LookupsNegative uint64 -+ // Number of positive lookups made -+ LookupsPositive uint64 -+ // Number of objects created by lookup -+ ObjectsCreatedByLookup uint64 -+ // Number of lookups timed out and requeued -+ LookupsTimedOutAndRequed uint64 -+ InvalidationsNumber uint64 -+ InvalidationsRunning uint64 -+ // Number of update cookie requests seen -+ UpdateCookieRequestSeen uint64 -+ // Number of upd reqs given a NULL parent -+ UpdateRequestsWithNullParent uint64 -+ // Number of upd reqs granted CPU time -+ UpdateRequestsRunning uint64 -+ // Number of relinquish cookie requests seen -+ RelinquishCookiesRequestSeen uint64 -+ // Number of rlq reqs given a NULL parent -+ RelinquishCookiesWithNullParent uint64 -+ // Number of rlq reqs waited on completion of creation -+ RelinquishRequestsWaitingCompleteCreation uint64 -+ // Relinqs rtr -+ RelinquishRetries uint64 -+ // Number of attribute changed requests seen -+ AttributeChangedRequestsSeen uint64 -+ // Number of attr changed requests queued -+ AttributeChangedRequestsQueued uint64 -+ // Number of attr changed rejected -ENOBUFS -+ AttributeChangedRejectDueToEnobufs uint64 -+ // Number of attr changed failed -ENOMEM -+ AttributeChangedFailedDueToEnomem uint64 -+ // Number of attr changed ops given CPU time -+ AttributeChangedOps uint64 -+ // Number of allocation requests seen -+ AllocationRequestsSeen uint64 -+ // Number of successful alloc reqs -+ AllocationOkRequests uint64 -+ // Number of alloc reqs that waited on lookup completion -+ AllocationWaitingOnLookup uint64 -+ // Number of alloc reqs rejected -ENOBUFS -+ AllocationsRejectedDueToEnobufs uint64 -+ // Number of alloc reqs aborted -ERESTARTSYS -+ AllocationsAbortedDueToErestartsys uint64 -+ // Number of alloc reqs submitted -+ AllocationOperationsSubmitted uint64 -+ // Number of alloc reqs waited for CPU time -+ AllocationsWaitedForCPU uint64 -+ // Number of alloc reqs aborted due to object death -+ AllocationsAbortedDueToObjectDeath uint64 -+ // Number of retrieval (read) requests seen -+ RetrievalsReadRequests uint64 -+ // Number of successful retr reqs -+ RetrievalsOk uint64 -+ // Number of retr reqs that waited on lookup completion -+ RetrievalsWaitingLookupCompletion uint64 -+ // Number of retr reqs returned -ENODATA -+ RetrievalsReturnedEnodata uint64 -+ // Number of retr reqs rejected -ENOBUFS -+ RetrievalsRejectedDueToEnobufs uint64 -+ // Number of retr reqs aborted -ERESTARTSYS -+ RetrievalsAbortedDueToErestartsys uint64 -+ // Number of retr reqs failed -ENOMEM -+ RetrievalsFailedDueToEnomem uint64 -+ // Number of retr reqs submitted -+ RetrievalsRequests uint64 -+ // Number of retr reqs waited for CPU time -+ RetrievalsWaitingCPU uint64 -+ // Number of retr reqs aborted due to object death -+ RetrievalsAbortedDueToObjectDeath uint64 -+ // Number of storage (write) requests seen -+ StoreWriteRequests uint64 -+ // Number of successful store reqs -+ StoreSuccessfulRequests uint64 -+ // Number of store reqs on a page already pending storage -+ StoreRequestsOnPendingStorage uint64 -+ // Number of store reqs rejected -ENOBUFS -+ StoreRequestsRejectedDueToEnobufs uint64 -+ // Number of store reqs failed -ENOMEM -+ StoreRequestsFailedDueToEnomem uint64 -+ // Number of store reqs submitted -+ StoreRequestsSubmitted uint64 -+ // Number of store reqs granted CPU time -+ StoreRequestsRunning uint64 -+ // Number of pages given store req processing time -+ StorePagesWithRequestsProcessing uint64 -+ // Number of store reqs deleted from tracking tree -+ StoreRequestsDeleted uint64 -+ // Number of store reqs over store limit -+ StoreRequestsOverStoreLimit uint64 -+ // Number of release reqs against pages with no pending store -+ ReleaseRequestsAgainstPagesWithNoPendingStorage uint64 -+ // Number of release reqs against pages stored by time lock granted -+ ReleaseRequestsAgainstPagesStoredByTimeLockGranted uint64 -+ // Number of release reqs ignored due to in-progress store -+ ReleaseRequestsIgnoredDueToInProgressStore uint64 -+ // Number of page stores cancelled due to release req -+ PageStoresCancelledByReleaseRequests uint64 -+ VmscanWaiting uint64 -+ // Number of times async ops added to pending queues -+ OpsPending uint64 -+ // Number of times async ops given CPU time -+ OpsRunning uint64 -+ // Number of times async ops queued for processing -+ OpsEnqueued uint64 -+ // Number of async ops cancelled -+ OpsCancelled uint64 -+ // Number of async ops rejected due to object lookup/create failure -+ OpsRejected uint64 -+ // Number of async ops initialised -+ OpsInitialised uint64 -+ // Number of async ops queued for deferred release -+ OpsDeferred uint64 -+ // Number of async ops released (should equal ini=N when idle) -+ OpsReleased uint64 -+ // Number of deferred-release async ops garbage collected -+ OpsGarbageCollected uint64 -+ // Number of in-progress alloc_object() cache ops -+ CacheopAllocationsinProgress uint64 -+ // Number of in-progress lookup_object() cache ops -+ CacheopLookupObjectInProgress uint64 -+ // Number of in-progress lookup_complete() cache ops -+ CacheopLookupCompleteInPorgress uint64 -+ // Number of in-progress grab_object() cache ops -+ CacheopGrabObjectInProgress uint64 -+ CacheopInvalidations uint64 -+ // Number of in-progress update_object() cache ops -+ CacheopUpdateObjectInProgress uint64 -+ // Number of in-progress drop_object() cache ops -+ CacheopDropObjectInProgress uint64 -+ // Number of in-progress put_object() cache ops -+ CacheopPutObjectInProgress uint64 -+ // Number of in-progress attr_changed() cache ops -+ CacheopAttributeChangeInProgress uint64 -+ // Number of in-progress sync_cache() cache ops -+ CacheopSyncCacheInProgress uint64 -+ // Number of in-progress read_or_alloc_page() cache ops -+ CacheopReadOrAllocPageInProgress uint64 -+ // Number of in-progress read_or_alloc_pages() cache ops -+ CacheopReadOrAllocPagesInProgress uint64 -+ // Number of in-progress allocate_page() cache ops -+ CacheopAllocatePageInProgress uint64 -+ // Number of in-progress allocate_pages() cache ops -+ CacheopAllocatePagesInProgress uint64 -+ // Number of in-progress write_page() cache ops -+ CacheopWritePagesInProgress uint64 -+ // Number of in-progress uncache_page() cache ops -+ CacheopUncachePagesInProgress uint64 -+ // Number of in-progress dissociate_pages() cache ops -+ CacheopDissociatePagesInProgress uint64 -+ // Number of object lookups/creations rejected due to lack of space -+ CacheevLookupsAndCreationsRejectedLackSpace uint64 -+ // Number of stale objects deleted -+ CacheevStaleObjectsDeleted uint64 -+ // Number of objects retired when relinquished -+ CacheevRetiredWhenReliquished uint64 -+ // Number of objects culled -+ CacheevObjectsCulled uint64 -+} -+ -+// Fscacheinfo returns information about current fscache statistics. -+// See https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt -+func (fs FS) Fscacheinfo() (Fscacheinfo, error) { -+ b, err := util.ReadFileNoStat(fs.proc.Path("fs/fscache/stats")) -+ if err != nil { -+ return Fscacheinfo{}, err -+ } -+ -+ m, err := parseFscacheinfo(bytes.NewReader(b)) -+ if err != nil { -+ return Fscacheinfo{}, fmt.Errorf("failed to parse Fscacheinfo: %w", err) -+ } -+ -+ return *m, nil -+} -+ -+func setFSCacheFields(fields []string, setFields ...*uint64) error { -+ var err error -+ if len(fields) < len(setFields) { -+ return fmt.Errorf("Insufficient number of fields, expected %v, got %v", len(setFields), len(fields)) -+ } -+ -+ for i := range setFields { -+ *setFields[i], err = strconv.ParseUint(strings.Split(fields[i], "=")[1], 0, 64) -+ if err != nil { -+ return err -+ } -+ } -+ return nil -+} -+ -+func parseFscacheinfo(r io.Reader) (*Fscacheinfo, error) { -+ var m Fscacheinfo -+ s := bufio.NewScanner(r) -+ for s.Scan() { -+ fields := strings.Fields(s.Text()) -+ if len(fields) < 2 { -+ return nil, fmt.Errorf("malformed Fscacheinfo line: %q", s.Text()) -+ } -+ -+ switch fields[0] { -+ case "Cookies:": -+ err := setFSCacheFields(fields[1:], &m.IndexCookiesAllocated, &m.DataStorageCookiesAllocated, -+ &m.SpecialCookiesAllocated) -+ if err != nil { -+ return &m, err -+ } -+ case "Objects:": -+ err := setFSCacheFields(fields[1:], &m.ObjectsAllocated, &m.ObjectAllocationsFailure, -+ &m.ObjectsAvailable, &m.ObjectsDead) -+ if err != nil { -+ return &m, err -+ } -+ case "ChkAux": -+ err := setFSCacheFields(fields[2:], &m.ObjectsWithoutCoherencyCheck, &m.ObjectsWithCoherencyCheck, -+ &m.ObjectsNeedCoherencyCheckUpdate, &m.ObjectsDeclaredObsolete) -+ if err != nil { -+ return &m, err -+ } -+ case "Pages": -+ err := setFSCacheFields(fields[2:], &m.PagesMarkedAsBeingCached, &m.UncachePagesRequestSeen) -+ if err != nil { -+ return &m, err -+ } -+ case "Acquire:": -+ err := setFSCacheFields(fields[1:], &m.AcquireCookiesRequestSeen, &m.AcquireRequestsWithNullParent, -+ &m.AcquireRequestsRejectedNoCacheAvailable, &m.AcquireRequestsSucceeded, &m.AcquireRequestsRejectedDueToError, -+ &m.AcquireRequestsFailedDueToEnomem) -+ if err != nil { -+ return &m, err -+ } -+ case "Lookups:": -+ err := setFSCacheFields(fields[1:], &m.LookupsNumber, &m.LookupsNegative, &m.LookupsPositive, -+ &m.ObjectsCreatedByLookup, &m.LookupsTimedOutAndRequed) -+ if err != nil { -+ return &m, err -+ } -+ case "Invals": -+ err := setFSCacheFields(fields[2:], &m.InvalidationsNumber, &m.InvalidationsRunning) -+ if err != nil { -+ return &m, err -+ } -+ case "Updates:": -+ err := setFSCacheFields(fields[1:], &m.UpdateCookieRequestSeen, &m.UpdateRequestsWithNullParent, -+ &m.UpdateRequestsRunning) -+ if err != nil { -+ return &m, err -+ } -+ case "Relinqs:": -+ err := setFSCacheFields(fields[1:], &m.RelinquishCookiesRequestSeen, &m.RelinquishCookiesWithNullParent, -+ &m.RelinquishRequestsWaitingCompleteCreation, &m.RelinquishRetries) -+ if err != nil { -+ return &m, err -+ } -+ case "AttrChg:": -+ err := setFSCacheFields(fields[1:], &m.AttributeChangedRequestsSeen, &m.AttributeChangedRequestsQueued, -+ &m.AttributeChangedRejectDueToEnobufs, &m.AttributeChangedFailedDueToEnomem, &m.AttributeChangedOps) -+ if err != nil { -+ return &m, err -+ } -+ case "Allocs": -+ if strings.Split(fields[2], "=")[0] == "n" { -+ err := setFSCacheFields(fields[2:], &m.AllocationRequestsSeen, &m.AllocationOkRequests, -+ &m.AllocationWaitingOnLookup, &m.AllocationsRejectedDueToEnobufs, &m.AllocationsAbortedDueToErestartsys) -+ if err != nil { -+ return &m, err -+ } -+ } else { -+ err := setFSCacheFields(fields[2:], &m.AllocationOperationsSubmitted, &m.AllocationsWaitedForCPU, -+ &m.AllocationsAbortedDueToObjectDeath) -+ if err != nil { -+ return &m, err -+ } -+ } -+ case "Retrvls:": -+ if strings.Split(fields[1], "=")[0] == "n" { -+ err := setFSCacheFields(fields[1:], &m.RetrievalsReadRequests, &m.RetrievalsOk, &m.RetrievalsWaitingLookupCompletion, -+ &m.RetrievalsReturnedEnodata, &m.RetrievalsRejectedDueToEnobufs, &m.RetrievalsAbortedDueToErestartsys, -+ &m.RetrievalsFailedDueToEnomem) -+ if err != nil { -+ return &m, err -+ } -+ } else { -+ err := setFSCacheFields(fields[1:], &m.RetrievalsRequests, &m.RetrievalsWaitingCPU, &m.RetrievalsAbortedDueToObjectDeath) -+ if err != nil { -+ return &m, err -+ } -+ } -+ case "Stores": -+ if strings.Split(fields[2], "=")[0] == "n" { -+ err := setFSCacheFields(fields[2:], &m.StoreWriteRequests, &m.StoreSuccessfulRequests, -+ &m.StoreRequestsOnPendingStorage, &m.StoreRequestsRejectedDueToEnobufs, &m.StoreRequestsFailedDueToEnomem) -+ if err != nil { -+ return &m, err -+ } -+ } else { -+ err := setFSCacheFields(fields[2:], &m.StoreRequestsSubmitted, &m.StoreRequestsRunning, -+ &m.StorePagesWithRequestsProcessing, &m.StoreRequestsDeleted, &m.StoreRequestsOverStoreLimit) -+ if err != nil { -+ return &m, err -+ } -+ } -+ case "VmScan": -+ err := setFSCacheFields(fields[2:], &m.ReleaseRequestsAgainstPagesWithNoPendingStorage, -+ &m.ReleaseRequestsAgainstPagesStoredByTimeLockGranted, &m.ReleaseRequestsIgnoredDueToInProgressStore, -+ &m.PageStoresCancelledByReleaseRequests, &m.VmscanWaiting) -+ if err != nil { -+ return &m, err -+ } -+ case "Ops": -+ if strings.Split(fields[2], "=")[0] == "pend" { -+ err := setFSCacheFields(fields[2:], &m.OpsPending, &m.OpsRunning, &m.OpsEnqueued, &m.OpsCancelled, &m.OpsRejected) -+ if err != nil { -+ return &m, err -+ } -+ } else { -+ err := setFSCacheFields(fields[2:], &m.OpsInitialised, &m.OpsDeferred, &m.OpsReleased, &m.OpsGarbageCollected) -+ if err != nil { -+ return &m, err -+ } -+ } -+ case "CacheOp:": -+ if strings.Split(fields[1], "=")[0] == "alo" { -+ err := setFSCacheFields(fields[1:], &m.CacheopAllocationsinProgress, &m.CacheopLookupObjectInProgress, -+ &m.CacheopLookupCompleteInPorgress, &m.CacheopGrabObjectInProgress) -+ if err != nil { -+ return &m, err -+ } -+ } else if strings.Split(fields[1], "=")[0] == "inv" { -+ err := setFSCacheFields(fields[1:], &m.CacheopInvalidations, &m.CacheopUpdateObjectInProgress, -+ &m.CacheopDropObjectInProgress, &m.CacheopPutObjectInProgress, &m.CacheopAttributeChangeInProgress, -+ &m.CacheopSyncCacheInProgress) -+ if err != nil { -+ return &m, err -+ } -+ } else { -+ err := setFSCacheFields(fields[1:], &m.CacheopReadOrAllocPageInProgress, &m.CacheopReadOrAllocPagesInProgress, -+ &m.CacheopAllocatePageInProgress, &m.CacheopAllocatePagesInProgress, &m.CacheopWritePagesInProgress, -+ &m.CacheopUncachePagesInProgress, &m.CacheopDissociatePagesInProgress) -+ if err != nil { -+ return &m, err -+ } -+ } -+ case "CacheEv:": -+ err := setFSCacheFields(fields[1:], &m.CacheevLookupsAndCreationsRejectedLackSpace, &m.CacheevStaleObjectsDeleted, -+ &m.CacheevRetiredWhenReliquished, &m.CacheevObjectsCulled) -+ if err != nil { -+ return &m, err -+ } -+ } -+ } -+ -+ return &m, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/internal/fs/fs.go b/vendor/github.com/prometheus/procfs/internal/fs/fs.go -new file mode 100755 -index 0000000..3c18c76 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/internal/fs/fs.go -@@ -0,0 +1,55 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package fs -+ -+import ( -+ "fmt" -+ "os" -+ "path/filepath" -+) -+ -+const ( -+ // DefaultProcMountPoint is the common mount point of the proc filesystem. -+ DefaultProcMountPoint = "/proc" -+ -+ // DefaultSysMountPoint is the common mount point of the sys filesystem. -+ DefaultSysMountPoint = "/sys" -+ -+ // DefaultConfigfsMountPoint is the common mount point of the configfs. -+ DefaultConfigfsMountPoint = "/sys/kernel/config" -+) -+ -+// FS represents a pseudo-filesystem, normally /proc or /sys, which provides an -+// interface to kernel data structures. -+type FS string -+ -+// NewFS returns a new FS mounted under the given mountPoint. It will error -+// if the mount point can't be read. -+func NewFS(mountPoint string) (FS, error) { -+ info, err := os.Stat(mountPoint) -+ if err != nil { -+ return "", fmt.Errorf("could not read %q: %w", mountPoint, err) -+ } -+ if !info.IsDir() { -+ return "", fmt.Errorf("mount point %q is not a directory", mountPoint) -+ } -+ -+ return FS(mountPoint), nil -+} -+ -+// Path appends the given path elements to the filesystem path, adding separators -+// as necessary. -+func (fs FS) Path(p ...string) string { -+ return filepath.Join(append([]string{string(fs)}, p...)...) -+} -diff --git a/vendor/github.com/prometheus/procfs/internal/util/parse.go b/vendor/github.com/prometheus/procfs/internal/util/parse.go -new file mode 100755 -index 0000000..b030951 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/internal/util/parse.go -@@ -0,0 +1,97 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package util -+ -+import ( -+ "os" -+ "strconv" -+ "strings" -+) -+ -+// ParseUint32s parses a slice of strings into a slice of uint32s. -+func ParseUint32s(ss []string) ([]uint32, error) { -+ us := make([]uint32, 0, len(ss)) -+ for _, s := range ss { -+ u, err := strconv.ParseUint(s, 10, 32) -+ if err != nil { -+ return nil, err -+ } -+ -+ us = append(us, uint32(u)) -+ } -+ -+ return us, nil -+} -+ -+// ParseUint64s parses a slice of strings into a slice of uint64s. -+func ParseUint64s(ss []string) ([]uint64, error) { -+ us := make([]uint64, 0, len(ss)) -+ for _, s := range ss { -+ u, err := strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ us = append(us, u) -+ } -+ -+ return us, nil -+} -+ -+// ParsePInt64s parses a slice of strings into a slice of int64 pointers. -+func ParsePInt64s(ss []string) ([]*int64, error) { -+ us := make([]*int64, 0, len(ss)) -+ for _, s := range ss { -+ u, err := strconv.ParseInt(s, 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ us = append(us, &u) -+ } -+ -+ return us, nil -+} -+ -+// ReadUintFromFile reads a file and attempts to parse a uint64 from it. -+func ReadUintFromFile(path string) (uint64, error) { -+ data, err := os.ReadFile(path) -+ if err != nil { -+ return 0, err -+ } -+ return strconv.ParseUint(strings.TrimSpace(string(data)), 10, 64) -+} -+ -+// ReadIntFromFile reads a file and attempts to parse a int64 from it. -+func ReadIntFromFile(path string) (int64, error) { -+ data, err := os.ReadFile(path) -+ if err != nil { -+ return 0, err -+ } -+ return strconv.ParseInt(strings.TrimSpace(string(data)), 10, 64) -+} -+ -+// ParseBool parses a string into a boolean pointer. -+func ParseBool(b string) *bool { -+ var truth bool -+ switch b { -+ case "enabled": -+ truth = true -+ case "disabled": -+ truth = false -+ default: -+ return nil -+ } -+ return &truth -+} -diff --git a/vendor/github.com/prometheus/procfs/internal/util/readfile.go b/vendor/github.com/prometheus/procfs/internal/util/readfile.go -new file mode 100755 -index 0000000..71b7a70 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/internal/util/readfile.go -@@ -0,0 +1,37 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package util -+ -+import ( -+ "io" -+ "os" -+) -+ -+// ReadFileNoStat uses io.ReadAll to read contents of entire file. -+// This is similar to os.ReadFile but without the call to os.Stat, because -+// many files in /proc and /sys report incorrect file sizes (either 0 or 4096). -+// Reads a max file size of 1024kB. For files larger than this, a scanner -+// should be used. -+func ReadFileNoStat(filename string) ([]byte, error) { -+ const maxBufferSize = 1024 * 1024 -+ -+ f, err := os.Open(filename) -+ if err != nil { -+ return nil, err -+ } -+ defer f.Close() -+ -+ reader := io.LimitReader(f, maxBufferSize) -+ return io.ReadAll(reader) -+} -diff --git a/vendor/github.com/prometheus/procfs/internal/util/sysreadfile.go b/vendor/github.com/prometheus/procfs/internal/util/sysreadfile.go -new file mode 100755 -index 0000000..1ab875c ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/internal/util/sysreadfile.go -@@ -0,0 +1,50 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build (linux || darwin) && !appengine -+// +build linux darwin -+// +build !appengine -+ -+package util -+ -+import ( -+ "bytes" -+ "os" -+ "syscall" -+) -+ -+// SysReadFile is a simplified os.ReadFile that invokes syscall.Read directly. -+// https://github.com/prometheus/node_exporter/pull/728/files -+// -+// Note that this function will not read files larger than 128 bytes. -+func SysReadFile(file string) (string, error) { -+ f, err := os.Open(file) -+ if err != nil { -+ return "", err -+ } -+ defer f.Close() -+ -+ // On some machines, hwmon drivers are broken and return EAGAIN. This causes -+ // Go's os.ReadFile implementation to poll forever. -+ // -+ // Since we either want to read data or bail immediately, do the simplest -+ // possible read using syscall directly. -+ const sysFileBufferSize = 128 -+ b := make([]byte, sysFileBufferSize) -+ n, err := syscall.Read(int(f.Fd()), b) -+ if err != nil { -+ return "", err -+ } -+ -+ return string(bytes.TrimSpace(b[:n])), nil -+} -diff --git a/vendor/github.com/prometheus/procfs/internal/util/sysreadfile_compat.go b/vendor/github.com/prometheus/procfs/internal/util/sysreadfile_compat.go -new file mode 100755 -index 0000000..1d86f5e ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/internal/util/sysreadfile_compat.go -@@ -0,0 +1,27 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build (linux && appengine) || (!linux && !darwin) -+// +build linux,appengine !linux,!darwin -+ -+package util -+ -+import ( -+ "fmt" -+) -+ -+// SysReadFile is here implemented as a noop for builds that do not support -+// the read syscall. For example Windows, or Linux on Google App Engine. -+func SysReadFile(file string) (string, error) { -+ return "", fmt.Errorf("not supported on this platform") -+} -diff --git a/vendor/github.com/prometheus/procfs/internal/util/valueparser.go b/vendor/github.com/prometheus/procfs/internal/util/valueparser.go -new file mode 100755 -index 0000000..fe2355d ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/internal/util/valueparser.go -@@ -0,0 +1,91 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package util -+ -+import ( -+ "strconv" -+) -+ -+// TODO(mdlayher): util packages are an anti-pattern and this should be moved -+// somewhere else that is more focused in the future. -+ -+// A ValueParser enables parsing a single string into a variety of data types -+// in a concise and safe way. The Err method must be invoked after invoking -+// any other methods to ensure a value was successfully parsed. -+type ValueParser struct { -+ v string -+ err error -+} -+ -+// NewValueParser creates a ValueParser using the input string. -+func NewValueParser(v string) *ValueParser { -+ return &ValueParser{v: v} -+} -+ -+// Int interprets the underlying value as an int and returns that value. -+func (vp *ValueParser) Int() int { return int(vp.int64()) } -+ -+// PInt64 interprets the underlying value as an int64 and returns a pointer to -+// that value. -+func (vp *ValueParser) PInt64() *int64 { -+ if vp.err != nil { -+ return nil -+ } -+ -+ v := vp.int64() -+ return &v -+} -+ -+// int64 interprets the underlying value as an int64 and returns that value. -+// TODO: export if/when necessary. -+func (vp *ValueParser) int64() int64 { -+ if vp.err != nil { -+ return 0 -+ } -+ -+ // A base value of zero makes ParseInt infer the correct base using the -+ // string's prefix, if any. -+ const base = 0 -+ v, err := strconv.ParseInt(vp.v, base, 64) -+ if err != nil { -+ vp.err = err -+ return 0 -+ } -+ -+ return v -+} -+ -+// PUInt64 interprets the underlying value as an uint64 and returns a pointer to -+// that value. -+func (vp *ValueParser) PUInt64() *uint64 { -+ if vp.err != nil { -+ return nil -+ } -+ -+ // A base value of zero makes ParseInt infer the correct base using the -+ // string's prefix, if any. -+ const base = 0 -+ v, err := strconv.ParseUint(vp.v, base, 64) -+ if err != nil { -+ vp.err = err -+ return nil -+ } -+ -+ return &v -+} -+ -+// Err returns the last error, if any, encountered by the ValueParser. -+func (vp *ValueParser) Err() error { -+ return vp.err -+} -diff --git a/vendor/github.com/prometheus/procfs/ipvs.go b/vendor/github.com/prometheus/procfs/ipvs.go -new file mode 100755 -index 0000000..391c079 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/ipvs.go -@@ -0,0 +1,240 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "encoding/hex" -+ "errors" -+ "fmt" -+ "io" -+ "net" -+ "os" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// IPVSStats holds IPVS statistics, as exposed by the kernel in `/proc/net/ip_vs_stats`. -+type IPVSStats struct { -+ // Total count of connections. -+ Connections uint64 -+ // Total incoming packages processed. -+ IncomingPackets uint64 -+ // Total outgoing packages processed. -+ OutgoingPackets uint64 -+ // Total incoming traffic. -+ IncomingBytes uint64 -+ // Total outgoing traffic. -+ OutgoingBytes uint64 -+} -+ -+// IPVSBackendStatus holds current metrics of one virtual / real address pair. -+type IPVSBackendStatus struct { -+ // The local (virtual) IP address. -+ LocalAddress net.IP -+ // The remote (real) IP address. -+ RemoteAddress net.IP -+ // The local (virtual) port. -+ LocalPort uint16 -+ // The remote (real) port. -+ RemotePort uint16 -+ // The local firewall mark -+ LocalMark string -+ // The transport protocol (TCP, UDP). -+ Proto string -+ // The current number of active connections for this virtual/real address pair. -+ ActiveConn uint64 -+ // The current number of inactive connections for this virtual/real address pair. -+ InactConn uint64 -+ // The current weight of this virtual/real address pair. -+ Weight uint64 -+} -+ -+// IPVSStats reads the IPVS statistics from the specified `proc` filesystem. -+func (fs FS) IPVSStats() (IPVSStats, error) { -+ data, err := util.ReadFileNoStat(fs.proc.Path("net/ip_vs_stats")) -+ if err != nil { -+ return IPVSStats{}, err -+ } -+ -+ return parseIPVSStats(bytes.NewReader(data)) -+} -+ -+// parseIPVSStats performs the actual parsing of `ip_vs_stats`. -+func parseIPVSStats(r io.Reader) (IPVSStats, error) { -+ var ( -+ statContent []byte -+ statLines []string -+ statFields []string -+ stats IPVSStats -+ ) -+ -+ statContent, err := io.ReadAll(r) -+ if err != nil { -+ return IPVSStats{}, err -+ } -+ -+ statLines = strings.SplitN(string(statContent), "\n", 4) -+ if len(statLines) != 4 { -+ return IPVSStats{}, errors.New("ip_vs_stats corrupt: too short") -+ } -+ -+ statFields = strings.Fields(statLines[2]) -+ if len(statFields) != 5 { -+ return IPVSStats{}, errors.New("ip_vs_stats corrupt: unexpected number of fields") -+ } -+ -+ stats.Connections, err = strconv.ParseUint(statFields[0], 16, 64) -+ if err != nil { -+ return IPVSStats{}, err -+ } -+ stats.IncomingPackets, err = strconv.ParseUint(statFields[1], 16, 64) -+ if err != nil { -+ return IPVSStats{}, err -+ } -+ stats.OutgoingPackets, err = strconv.ParseUint(statFields[2], 16, 64) -+ if err != nil { -+ return IPVSStats{}, err -+ } -+ stats.IncomingBytes, err = strconv.ParseUint(statFields[3], 16, 64) -+ if err != nil { -+ return IPVSStats{}, err -+ } -+ stats.OutgoingBytes, err = strconv.ParseUint(statFields[4], 16, 64) -+ if err != nil { -+ return IPVSStats{}, err -+ } -+ -+ return stats, nil -+} -+ -+// IPVSBackendStatus reads and returns the status of all (virtual,real) server pairs from the specified `proc` filesystem. -+func (fs FS) IPVSBackendStatus() ([]IPVSBackendStatus, error) { -+ file, err := os.Open(fs.proc.Path("net/ip_vs")) -+ if err != nil { -+ return nil, err -+ } -+ defer file.Close() -+ -+ return parseIPVSBackendStatus(file) -+} -+ -+func parseIPVSBackendStatus(file io.Reader) ([]IPVSBackendStatus, error) { -+ var ( -+ status []IPVSBackendStatus -+ scanner = bufio.NewScanner(file) -+ proto string -+ localMark string -+ localAddress net.IP -+ localPort uint16 -+ err error -+ ) -+ -+ for scanner.Scan() { -+ fields := strings.Fields(scanner.Text()) -+ if len(fields) == 0 { -+ continue -+ } -+ switch { -+ case fields[0] == "IP" || fields[0] == "Prot" || fields[1] == "RemoteAddress:Port": -+ continue -+ case fields[0] == "TCP" || fields[0] == "UDP": -+ if len(fields) < 2 { -+ continue -+ } -+ proto = fields[0] -+ localMark = "" -+ localAddress, localPort, err = parseIPPort(fields[1]) -+ if err != nil { -+ return nil, err -+ } -+ case fields[0] == "FWM": -+ if len(fields) < 2 { -+ continue -+ } -+ proto = fields[0] -+ localMark = fields[1] -+ localAddress = nil -+ localPort = 0 -+ case fields[0] == "->": -+ if len(fields) < 6 { -+ continue -+ } -+ remoteAddress, remotePort, err := parseIPPort(fields[1]) -+ if err != nil { -+ return nil, err -+ } -+ weight, err := strconv.ParseUint(fields[3], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ activeConn, err := strconv.ParseUint(fields[4], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ inactConn, err := strconv.ParseUint(fields[5], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ status = append(status, IPVSBackendStatus{ -+ LocalAddress: localAddress, -+ LocalPort: localPort, -+ LocalMark: localMark, -+ RemoteAddress: remoteAddress, -+ RemotePort: remotePort, -+ Proto: proto, -+ Weight: weight, -+ ActiveConn: activeConn, -+ InactConn: inactConn, -+ }) -+ } -+ } -+ return status, nil -+} -+ -+func parseIPPort(s string) (net.IP, uint16, error) { -+ var ( -+ ip net.IP -+ err error -+ ) -+ -+ switch len(s) { -+ case 13: -+ ip, err = hex.DecodeString(s[0:8]) -+ if err != nil { -+ return nil, 0, err -+ } -+ case 46: -+ ip = net.ParseIP(s[1:40]) -+ if ip == nil { -+ return nil, 0, fmt.Errorf("invalid IPv6 address: %s", s[1:40]) -+ } -+ default: -+ return nil, 0, fmt.Errorf("unexpected IP:Port: %s", s) -+ } -+ -+ portString := s[len(s)-4:] -+ if len(portString) != 4 { -+ return nil, 0, fmt.Errorf("unexpected port string format: %s", portString) -+ } -+ port, err := strconv.ParseUint(portString, 16, 16) -+ if err != nil { -+ return nil, 0, err -+ } -+ -+ return ip, uint16(port), nil -+} -diff --git a/vendor/github.com/prometheus/procfs/kernel_random.go b/vendor/github.com/prometheus/procfs/kernel_random.go -new file mode 100755 -index 0000000..db88566 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/kernel_random.go -@@ -0,0 +1,63 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build !windows -+// +build !windows -+ -+package procfs -+ -+import ( -+ "os" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// KernelRandom contains information about to the kernel's random number generator. -+type KernelRandom struct { -+ // EntropyAvaliable gives the available entropy, in bits. -+ EntropyAvaliable *uint64 -+ // PoolSize gives the size of the entropy pool, in bits. -+ PoolSize *uint64 -+ // URandomMinReseedSeconds is the number of seconds after which the DRNG will be reseeded. -+ URandomMinReseedSeconds *uint64 -+ // WriteWakeupThreshold the number of bits of entropy below which we wake up processes -+ // that do a select(2) or poll(2) for write access to /dev/random. -+ WriteWakeupThreshold *uint64 -+ // ReadWakeupThreshold is the number of bits of entropy required for waking up processes that sleep -+ // waiting for entropy from /dev/random. -+ ReadWakeupThreshold *uint64 -+} -+ -+// KernelRandom returns values from /proc/sys/kernel/random. -+func (fs FS) KernelRandom() (KernelRandom, error) { -+ random := KernelRandom{} -+ -+ for file, p := range map[string]**uint64{ -+ "entropy_avail": &random.EntropyAvaliable, -+ "poolsize": &random.PoolSize, -+ "urandom_min_reseed_secs": &random.URandomMinReseedSeconds, -+ "write_wakeup_threshold": &random.WriteWakeupThreshold, -+ "read_wakeup_threshold": &random.ReadWakeupThreshold, -+ } { -+ val, err := util.ReadUintFromFile(fs.proc.Path("sys", "kernel", "random", file)) -+ if os.IsNotExist(err) { -+ continue -+ } -+ if err != nil { -+ return random, err -+ } -+ *p = &val -+ } -+ -+ return random, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/loadavg.go b/vendor/github.com/prometheus/procfs/loadavg.go -new file mode 100755 -index 0000000..0096caf ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/loadavg.go -@@ -0,0 +1,62 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "fmt" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// LoadAvg represents an entry in /proc/loadavg. -+type LoadAvg struct { -+ Load1 float64 -+ Load5 float64 -+ Load15 float64 -+} -+ -+// LoadAvg returns loadavg from /proc. -+func (fs FS) LoadAvg() (*LoadAvg, error) { -+ path := fs.proc.Path("loadavg") -+ -+ data, err := util.ReadFileNoStat(path) -+ if err != nil { -+ return nil, err -+ } -+ return parseLoad(data) -+} -+ -+// Parse /proc loadavg and return 1m, 5m and 15m. -+func parseLoad(loadavgBytes []byte) (*LoadAvg, error) { -+ loads := make([]float64, 3) -+ parts := strings.Fields(string(loadavgBytes)) -+ if len(parts) < 3 { -+ return nil, fmt.Errorf("malformed loadavg line: too few fields in loadavg string: %q", string(loadavgBytes)) -+ } -+ -+ var err error -+ for i, load := range parts[0:3] { -+ loads[i], err = strconv.ParseFloat(load, 64) -+ if err != nil { -+ return nil, fmt.Errorf("could not parse load %q: %w", load, err) -+ } -+ } -+ return &LoadAvg{ -+ Load1: loads[0], -+ Load5: loads[1], -+ Load15: loads[2], -+ }, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/mdstat.go b/vendor/github.com/prometheus/procfs/mdstat.go -new file mode 100755 -index 0000000..a95c889 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/mdstat.go -@@ -0,0 +1,266 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "fmt" -+ "os" -+ "regexp" -+ "strconv" -+ "strings" -+) -+ -+var ( -+ statusLineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[([U_]+)\]`) -+ recoveryLineBlocksRE = regexp.MustCompile(`\((\d+)/\d+\)`) -+ recoveryLinePctRE = regexp.MustCompile(`= (.+)%`) -+ recoveryLineFinishRE = regexp.MustCompile(`finish=(.+)min`) -+ recoveryLineSpeedRE = regexp.MustCompile(`speed=(.+)[A-Z]`) -+ componentDeviceRE = regexp.MustCompile(`(.*)\[\d+\]`) -+) -+ -+// MDStat holds info parsed from /proc/mdstat. -+type MDStat struct { -+ // Name of the device. -+ Name string -+ // activity-state of the device. -+ ActivityState string -+ // Number of active disks. -+ DisksActive int64 -+ // Total number of disks the device requires. -+ DisksTotal int64 -+ // Number of failed disks. -+ DisksFailed int64 -+ // Number of "down" disks. (the _ indicator in the status line) -+ DisksDown int64 -+ // Spare disks in the device. -+ DisksSpare int64 -+ // Number of blocks the device holds. -+ BlocksTotal int64 -+ // Number of blocks on the device that are in sync. -+ BlocksSynced int64 -+ // progress percentage of current sync -+ BlocksSyncedPct float64 -+ // estimated finishing time for current sync (in minutes) -+ BlocksSyncedFinishTime float64 -+ // current sync speed (in Kilobytes/sec) -+ BlocksSyncedSpeed float64 -+ // Name of md component devices -+ Devices []string -+} -+ -+// MDStat parses an mdstat-file (/proc/mdstat) and returns a slice of -+// structs containing the relevant info. More information available here: -+// https://raid.wiki.kernel.org/index.php/Mdstat -+func (fs FS) MDStat() ([]MDStat, error) { -+ data, err := os.ReadFile(fs.proc.Path("mdstat")) -+ if err != nil { -+ return nil, err -+ } -+ mdstat, err := parseMDStat(data) -+ if err != nil { -+ return nil, fmt.Errorf("error parsing mdstat %q: %w", fs.proc.Path("mdstat"), err) -+ } -+ return mdstat, nil -+} -+ -+// parseMDStat parses data from mdstat file (/proc/mdstat) and returns a slice of -+// structs containing the relevant info. -+func parseMDStat(mdStatData []byte) ([]MDStat, error) { -+ mdStats := []MDStat{} -+ lines := strings.Split(string(mdStatData), "\n") -+ -+ for i, line := range lines { -+ if strings.TrimSpace(line) == "" || line[0] == ' ' || -+ strings.HasPrefix(line, "Personalities") || -+ strings.HasPrefix(line, "unused") { -+ continue -+ } -+ -+ deviceFields := strings.Fields(line) -+ if len(deviceFields) < 3 { -+ return nil, fmt.Errorf("not enough fields in mdline (expected at least 3): %s", line) -+ } -+ mdName := deviceFields[0] // mdx -+ state := deviceFields[2] // active or inactive -+ -+ if len(lines) <= i+3 { -+ return nil, fmt.Errorf("error parsing %q: too few lines for md device", mdName) -+ } -+ -+ // Failed disks have the suffix (F) & Spare disks have the suffix (S). -+ fail := int64(strings.Count(line, "(F)")) -+ spare := int64(strings.Count(line, "(S)")) -+ active, total, down, size, err := evalStatusLine(lines[i], lines[i+1]) -+ -+ if err != nil { -+ return nil, fmt.Errorf("error parsing md device lines: %w", err) -+ } -+ -+ syncLineIdx := i + 2 -+ if strings.Contains(lines[i+2], "bitmap") { // skip bitmap line -+ syncLineIdx++ -+ } -+ -+ // If device is syncing at the moment, get the number of currently -+ // synced bytes, otherwise that number equals the size of the device. -+ syncedBlocks := size -+ speed := float64(0) -+ finish := float64(0) -+ pct := float64(0) -+ recovering := strings.Contains(lines[syncLineIdx], "recovery") -+ resyncing := strings.Contains(lines[syncLineIdx], "resync") -+ checking := strings.Contains(lines[syncLineIdx], "check") -+ -+ // Append recovery and resyncing state info. -+ if recovering || resyncing || checking { -+ if recovering { -+ state = "recovering" -+ } else if checking { -+ state = "checking" -+ } else { -+ state = "resyncing" -+ } -+ -+ // Handle case when resync=PENDING or resync=DELAYED. -+ if strings.Contains(lines[syncLineIdx], "PENDING") || -+ strings.Contains(lines[syncLineIdx], "DELAYED") { -+ syncedBlocks = 0 -+ } else { -+ syncedBlocks, pct, finish, speed, err = evalRecoveryLine(lines[syncLineIdx]) -+ if err != nil { -+ return nil, fmt.Errorf("error parsing sync line in md device %q: %w", mdName, err) -+ } -+ } -+ } -+ -+ mdStats = append(mdStats, MDStat{ -+ Name: mdName, -+ ActivityState: state, -+ DisksActive: active, -+ DisksFailed: fail, -+ DisksDown: down, -+ DisksSpare: spare, -+ DisksTotal: total, -+ BlocksTotal: size, -+ BlocksSynced: syncedBlocks, -+ BlocksSyncedPct: pct, -+ BlocksSyncedFinishTime: finish, -+ BlocksSyncedSpeed: speed, -+ Devices: evalComponentDevices(deviceFields), -+ }) -+ } -+ -+ return mdStats, nil -+} -+ -+func evalStatusLine(deviceLine, statusLine string) (active, total, down, size int64, err error) { -+ statusFields := strings.Fields(statusLine) -+ if len(statusFields) < 1 { -+ return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q", statusLine) -+ } -+ -+ sizeStr := statusFields[0] -+ size, err = strconv.ParseInt(sizeStr, 10, 64) -+ if err != nil { -+ return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) -+ } -+ -+ if strings.Contains(deviceLine, "raid0") || strings.Contains(deviceLine, "linear") { -+ // In the device deviceLine, only disks have a number associated with them in []. -+ total = int64(strings.Count(deviceLine, "[")) -+ return total, total, 0, size, nil -+ } -+ -+ if strings.Contains(deviceLine, "inactive") { -+ return 0, 0, 0, size, nil -+ } -+ -+ matches := statusLineRE.FindStringSubmatch(statusLine) -+ if len(matches) != 5 { -+ return 0, 0, 0, 0, fmt.Errorf("couldn't find all the substring matches: %s", statusLine) -+ } -+ -+ total, err = strconv.ParseInt(matches[2], 10, 64) -+ if err != nil { -+ return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) -+ } -+ -+ active, err = strconv.ParseInt(matches[3], 10, 64) -+ if err != nil { -+ return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) -+ } -+ down = int64(strings.Count(matches[4], "_")) -+ -+ return active, total, down, size, nil -+} -+ -+func evalRecoveryLine(recoveryLine string) (syncedBlocks int64, pct float64, finish float64, speed float64, err error) { -+ matches := recoveryLineBlocksRE.FindStringSubmatch(recoveryLine) -+ if len(matches) != 2 { -+ return 0, 0, 0, 0, fmt.Errorf("unexpected recoveryLine: %s", recoveryLine) -+ } -+ -+ syncedBlocks, err = strconv.ParseInt(matches[1], 10, 64) -+ if err != nil { -+ return 0, 0, 0, 0, fmt.Errorf("error parsing int from recoveryLine %q: %w", recoveryLine, err) -+ } -+ -+ // Get percentage complete -+ matches = recoveryLinePctRE.FindStringSubmatch(recoveryLine) -+ if len(matches) != 2 { -+ return syncedBlocks, 0, 0, 0, fmt.Errorf("unexpected recoveryLine matching percentage: %s", recoveryLine) -+ } -+ pct, err = strconv.ParseFloat(strings.TrimSpace(matches[1]), 64) -+ if err != nil { -+ return syncedBlocks, 0, 0, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) -+ } -+ -+ // Get time expected left to complete -+ matches = recoveryLineFinishRE.FindStringSubmatch(recoveryLine) -+ if len(matches) != 2 { -+ return syncedBlocks, pct, 0, 0, fmt.Errorf("unexpected recoveryLine matching est. finish time: %s", recoveryLine) -+ } -+ finish, err = strconv.ParseFloat(matches[1], 64) -+ if err != nil { -+ return syncedBlocks, pct, 0, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) -+ } -+ -+ // Get recovery speed -+ matches = recoveryLineSpeedRE.FindStringSubmatch(recoveryLine) -+ if len(matches) != 2 { -+ return syncedBlocks, pct, finish, 0, fmt.Errorf("unexpected recoveryLine matching speed: %s", recoveryLine) -+ } -+ speed, err = strconv.ParseFloat(matches[1], 64) -+ if err != nil { -+ return syncedBlocks, pct, finish, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) -+ } -+ -+ return syncedBlocks, pct, finish, speed, nil -+} -+ -+func evalComponentDevices(deviceFields []string) []string { -+ mdComponentDevices := make([]string, 0) -+ if len(deviceFields) > 3 { -+ for _, field := range deviceFields[4:] { -+ match := componentDeviceRE.FindStringSubmatch(field) -+ if match == nil { -+ continue -+ } -+ mdComponentDevices = append(mdComponentDevices, match[1]) -+ } -+ } -+ -+ return mdComponentDevices -+} -diff --git a/vendor/github.com/prometheus/procfs/meminfo.go b/vendor/github.com/prometheus/procfs/meminfo.go -new file mode 100755 -index 0000000..f65e174 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/meminfo.go -@@ -0,0 +1,277 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Meminfo represents memory statistics. -+type Meminfo struct { -+ // Total usable ram (i.e. physical ram minus a few reserved -+ // bits and the kernel binary code) -+ MemTotal *uint64 -+ // The sum of LowFree+HighFree -+ MemFree *uint64 -+ // An estimate of how much memory is available for starting -+ // new applications, without swapping. Calculated from -+ // MemFree, SReclaimable, the size of the file LRU lists, and -+ // the low watermarks in each zone. The estimate takes into -+ // account that the system needs some page cache to function -+ // well, and that not all reclaimable slab will be -+ // reclaimable, due to items being in use. The impact of those -+ // factors will vary from system to system. -+ MemAvailable *uint64 -+ // Relatively temporary storage for raw disk blocks shouldn't -+ // get tremendously large (20MB or so) -+ Buffers *uint64 -+ Cached *uint64 -+ // Memory that once was swapped out, is swapped back in but -+ // still also is in the swapfile (if memory is needed it -+ // doesn't need to be swapped out AGAIN because it is already -+ // in the swapfile. This saves I/O) -+ SwapCached *uint64 -+ // Memory that has been used more recently and usually not -+ // reclaimed unless absolutely necessary. -+ Active *uint64 -+ // Memory which has been less recently used. It is more -+ // eligible to be reclaimed for other purposes -+ Inactive *uint64 -+ ActiveAnon *uint64 -+ InactiveAnon *uint64 -+ ActiveFile *uint64 -+ InactiveFile *uint64 -+ Unevictable *uint64 -+ Mlocked *uint64 -+ // total amount of swap space available -+ SwapTotal *uint64 -+ // Memory which has been evicted from RAM, and is temporarily -+ // on the disk -+ SwapFree *uint64 -+ // Memory which is waiting to get written back to the disk -+ Dirty *uint64 -+ // Memory which is actively being written back to the disk -+ Writeback *uint64 -+ // Non-file backed pages mapped into userspace page tables -+ AnonPages *uint64 -+ // files which have been mapped, such as libraries -+ Mapped *uint64 -+ Shmem *uint64 -+ // in-kernel data structures cache -+ Slab *uint64 -+ // Part of Slab, that might be reclaimed, such as caches -+ SReclaimable *uint64 -+ // Part of Slab, that cannot be reclaimed on memory pressure -+ SUnreclaim *uint64 -+ KernelStack *uint64 -+ // amount of memory dedicated to the lowest level of page -+ // tables. -+ PageTables *uint64 -+ // NFS pages sent to the server, but not yet committed to -+ // stable storage -+ NFSUnstable *uint64 -+ // Memory used for block device "bounce buffers" -+ Bounce *uint64 -+ // Memory used by FUSE for temporary writeback buffers -+ WritebackTmp *uint64 -+ // Based on the overcommit ratio ('vm.overcommit_ratio'), -+ // this is the total amount of memory currently available to -+ // be allocated on the system. This limit is only adhered to -+ // if strict overcommit accounting is enabled (mode 2 in -+ // 'vm.overcommit_memory'). -+ // The CommitLimit is calculated with the following formula: -+ // CommitLimit = ([total RAM pages] - [total huge TLB pages]) * -+ // overcommit_ratio / 100 + [total swap pages] -+ // For example, on a system with 1G of physical RAM and 7G -+ // of swap with a `vm.overcommit_ratio` of 30 it would -+ // yield a CommitLimit of 7.3G. -+ // For more details, see the memory overcommit documentation -+ // in vm/overcommit-accounting. -+ CommitLimit *uint64 -+ // The amount of memory presently allocated on the system. -+ // The committed memory is a sum of all of the memory which -+ // has been allocated by processes, even if it has not been -+ // "used" by them as of yet. A process which malloc()'s 1G -+ // of memory, but only touches 300M of it will show up as -+ // using 1G. This 1G is memory which has been "committed" to -+ // by the VM and can be used at any time by the allocating -+ // application. With strict overcommit enabled on the system -+ // (mode 2 in 'vm.overcommit_memory'),allocations which would -+ // exceed the CommitLimit (detailed above) will not be permitted. -+ // This is useful if one needs to guarantee that processes will -+ // not fail due to lack of memory once that memory has been -+ // successfully allocated. -+ CommittedAS *uint64 -+ // total size of vmalloc memory area -+ VmallocTotal *uint64 -+ // amount of vmalloc area which is used -+ VmallocUsed *uint64 -+ // largest contiguous block of vmalloc area which is free -+ VmallocChunk *uint64 -+ HardwareCorrupted *uint64 -+ AnonHugePages *uint64 -+ ShmemHugePages *uint64 -+ ShmemPmdMapped *uint64 -+ CmaTotal *uint64 -+ CmaFree *uint64 -+ HugePagesTotal *uint64 -+ HugePagesFree *uint64 -+ HugePagesRsvd *uint64 -+ HugePagesSurp *uint64 -+ Hugepagesize *uint64 -+ DirectMap4k *uint64 -+ DirectMap2M *uint64 -+ DirectMap1G *uint64 -+} -+ -+// Meminfo returns an information about current kernel/system memory statistics. -+// See https://www.kernel.org/doc/Documentation/filesystems/proc.txt -+func (fs FS) Meminfo() (Meminfo, error) { -+ b, err := util.ReadFileNoStat(fs.proc.Path("meminfo")) -+ if err != nil { -+ return Meminfo{}, err -+ } -+ -+ m, err := parseMemInfo(bytes.NewReader(b)) -+ if err != nil { -+ return Meminfo{}, fmt.Errorf("failed to parse meminfo: %w", err) -+ } -+ -+ return *m, nil -+} -+ -+func parseMemInfo(r io.Reader) (*Meminfo, error) { -+ var m Meminfo -+ s := bufio.NewScanner(r) -+ for s.Scan() { -+ // Each line has at least a name and value; we ignore the unit. -+ fields := strings.Fields(s.Text()) -+ if len(fields) < 2 { -+ return nil, fmt.Errorf("malformed meminfo line: %q", s.Text()) -+ } -+ -+ v, err := strconv.ParseUint(fields[1], 0, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ switch fields[0] { -+ case "MemTotal:": -+ m.MemTotal = &v -+ case "MemFree:": -+ m.MemFree = &v -+ case "MemAvailable:": -+ m.MemAvailable = &v -+ case "Buffers:": -+ m.Buffers = &v -+ case "Cached:": -+ m.Cached = &v -+ case "SwapCached:": -+ m.SwapCached = &v -+ case "Active:": -+ m.Active = &v -+ case "Inactive:": -+ m.Inactive = &v -+ case "Active(anon):": -+ m.ActiveAnon = &v -+ case "Inactive(anon):": -+ m.InactiveAnon = &v -+ case "Active(file):": -+ m.ActiveFile = &v -+ case "Inactive(file):": -+ m.InactiveFile = &v -+ case "Unevictable:": -+ m.Unevictable = &v -+ case "Mlocked:": -+ m.Mlocked = &v -+ case "SwapTotal:": -+ m.SwapTotal = &v -+ case "SwapFree:": -+ m.SwapFree = &v -+ case "Dirty:": -+ m.Dirty = &v -+ case "Writeback:": -+ m.Writeback = &v -+ case "AnonPages:": -+ m.AnonPages = &v -+ case "Mapped:": -+ m.Mapped = &v -+ case "Shmem:": -+ m.Shmem = &v -+ case "Slab:": -+ m.Slab = &v -+ case "SReclaimable:": -+ m.SReclaimable = &v -+ case "SUnreclaim:": -+ m.SUnreclaim = &v -+ case "KernelStack:": -+ m.KernelStack = &v -+ case "PageTables:": -+ m.PageTables = &v -+ case "NFS_Unstable:": -+ m.NFSUnstable = &v -+ case "Bounce:": -+ m.Bounce = &v -+ case "WritebackTmp:": -+ m.WritebackTmp = &v -+ case "CommitLimit:": -+ m.CommitLimit = &v -+ case "Committed_AS:": -+ m.CommittedAS = &v -+ case "VmallocTotal:": -+ m.VmallocTotal = &v -+ case "VmallocUsed:": -+ m.VmallocUsed = &v -+ case "VmallocChunk:": -+ m.VmallocChunk = &v -+ case "HardwareCorrupted:": -+ m.HardwareCorrupted = &v -+ case "AnonHugePages:": -+ m.AnonHugePages = &v -+ case "ShmemHugePages:": -+ m.ShmemHugePages = &v -+ case "ShmemPmdMapped:": -+ m.ShmemPmdMapped = &v -+ case "CmaTotal:": -+ m.CmaTotal = &v -+ case "CmaFree:": -+ m.CmaFree = &v -+ case "HugePages_Total:": -+ m.HugePagesTotal = &v -+ case "HugePages_Free:": -+ m.HugePagesFree = &v -+ case "HugePages_Rsvd:": -+ m.HugePagesRsvd = &v -+ case "HugePages_Surp:": -+ m.HugePagesSurp = &v -+ case "Hugepagesize:": -+ m.Hugepagesize = &v -+ case "DirectMap4k:": -+ m.DirectMap4k = &v -+ case "DirectMap2M:": -+ m.DirectMap2M = &v -+ case "DirectMap1G:": -+ m.DirectMap1G = &v -+ } -+ } -+ -+ return &m, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/mountinfo.go b/vendor/github.com/prometheus/procfs/mountinfo.go -new file mode 100755 -index 0000000..59f4d50 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/mountinfo.go -@@ -0,0 +1,180 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// A MountInfo is a type that describes the details, options -+// for each mount, parsed from /proc/self/mountinfo. -+// The fields described in each entry of /proc/self/mountinfo -+// is described in the following man page. -+// http://man7.org/linux/man-pages/man5/proc.5.html -+type MountInfo struct { -+ // Unique ID for the mount -+ MountID int -+ // The ID of the parent mount -+ ParentID int -+ // The value of `st_dev` for the files on this FS -+ MajorMinorVer string -+ // The pathname of the directory in the FS that forms -+ // the root for this mount -+ Root string -+ // The pathname of the mount point relative to the root -+ MountPoint string -+ // Mount options -+ Options map[string]string -+ // Zero or more optional fields -+ OptionalFields map[string]string -+ // The Filesystem type -+ FSType string -+ // FS specific information or "none" -+ Source string -+ // Superblock options -+ SuperOptions map[string]string -+} -+ -+// Reads each line of the mountinfo file, and returns a list of formatted MountInfo structs. -+func parseMountInfo(info []byte) ([]*MountInfo, error) { -+ mounts := []*MountInfo{} -+ scanner := bufio.NewScanner(bytes.NewReader(info)) -+ for scanner.Scan() { -+ mountString := scanner.Text() -+ parsedMounts, err := parseMountInfoString(mountString) -+ if err != nil { -+ return nil, err -+ } -+ mounts = append(mounts, parsedMounts) -+ } -+ -+ err := scanner.Err() -+ return mounts, err -+} -+ -+// Parses a mountinfo file line, and converts it to a MountInfo struct. -+// An important check here is to see if the hyphen separator, as if it does not exist, -+// it means that the line is malformed. -+func parseMountInfoString(mountString string) (*MountInfo, error) { -+ var err error -+ -+ mountInfo := strings.Split(mountString, " ") -+ mountInfoLength := len(mountInfo) -+ if mountInfoLength < 10 { -+ return nil, fmt.Errorf("couldn't find enough fields in mount string: %s", mountString) -+ } -+ -+ if mountInfo[mountInfoLength-4] != "-" { -+ return nil, fmt.Errorf("couldn't find separator in expected field: %s", mountInfo[mountInfoLength-4]) -+ } -+ -+ mount := &MountInfo{ -+ MajorMinorVer: mountInfo[2], -+ Root: mountInfo[3], -+ MountPoint: mountInfo[4], -+ Options: mountOptionsParser(mountInfo[5]), -+ OptionalFields: nil, -+ FSType: mountInfo[mountInfoLength-3], -+ Source: mountInfo[mountInfoLength-2], -+ SuperOptions: mountOptionsParser(mountInfo[mountInfoLength-1]), -+ } -+ -+ mount.MountID, err = strconv.Atoi(mountInfo[0]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse mount ID") -+ } -+ mount.ParentID, err = strconv.Atoi(mountInfo[1]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse parent ID") -+ } -+ // Has optional fields, which is a space separated list of values. -+ // Example: shared:2 master:7 -+ if mountInfo[6] != "" { -+ mount.OptionalFields, err = mountOptionsParseOptionalFields(mountInfo[6 : mountInfoLength-4]) -+ if err != nil { -+ return nil, err -+ } -+ } -+ return mount, nil -+} -+ -+// mountOptionsIsValidField checks a string against a valid list of optional fields keys. -+func mountOptionsIsValidField(s string) bool { -+ switch s { -+ case -+ "shared", -+ "master", -+ "propagate_from", -+ "unbindable": -+ return true -+ } -+ return false -+} -+ -+// mountOptionsParseOptionalFields parses a list of optional fields strings into a double map of strings. -+func mountOptionsParseOptionalFields(o []string) (map[string]string, error) { -+ optionalFields := make(map[string]string) -+ for _, field := range o { -+ optionSplit := strings.SplitN(field, ":", 2) -+ value := "" -+ if len(optionSplit) == 2 { -+ value = optionSplit[1] -+ } -+ if mountOptionsIsValidField(optionSplit[0]) { -+ optionalFields[optionSplit[0]] = value -+ } -+ } -+ return optionalFields, nil -+} -+ -+// mountOptionsParser parses the mount options, superblock options. -+func mountOptionsParser(mountOptions string) map[string]string { -+ opts := make(map[string]string) -+ options := strings.Split(mountOptions, ",") -+ for _, opt := range options { -+ splitOption := strings.Split(opt, "=") -+ if len(splitOption) < 2 { -+ key := splitOption[0] -+ opts[key] = "" -+ } else { -+ key, value := splitOption[0], splitOption[1] -+ opts[key] = value -+ } -+ } -+ return opts -+} -+ -+// GetMounts retrieves mountinfo information from `/proc/self/mountinfo`. -+func GetMounts() ([]*MountInfo, error) { -+ data, err := util.ReadFileNoStat("/proc/self/mountinfo") -+ if err != nil { -+ return nil, err -+ } -+ return parseMountInfo(data) -+} -+ -+// GetProcMounts retrieves mountinfo information from a processes' `/proc//mountinfo`. -+func GetProcMounts(pid int) ([]*MountInfo, error) { -+ data, err := util.ReadFileNoStat(fmt.Sprintf("/proc/%d/mountinfo", pid)) -+ if err != nil { -+ return nil, err -+ } -+ return parseMountInfo(data) -+} -diff --git a/vendor/github.com/prometheus/procfs/mountstats.go b/vendor/github.com/prometheus/procfs/mountstats.go -new file mode 100755 -index 0000000..f7a828b ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/mountstats.go -@@ -0,0 +1,638 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+// While implementing parsing of /proc/[pid]/mountstats, this blog was used -+// heavily as a reference: -+// https://utcc.utoronto.ca/~cks/space/blog/linux/NFSMountstatsIndex -+// -+// Special thanks to Chris Siebenmann for all of his posts explaining the -+// various statistics available for NFS. -+ -+import ( -+ "bufio" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ "time" -+) -+ -+// Constants shared between multiple functions. -+const ( -+ deviceEntryLen = 8 -+ -+ fieldBytesLen = 8 -+ fieldEventsLen = 27 -+ -+ statVersion10 = "1.0" -+ statVersion11 = "1.1" -+ -+ fieldTransport10TCPLen = 10 -+ fieldTransport10UDPLen = 7 -+ -+ fieldTransport11TCPLen = 13 -+ fieldTransport11UDPLen = 10 -+) -+ -+// A Mount is a device mount parsed from /proc/[pid]/mountstats. -+type Mount struct { -+ // Name of the device. -+ Device string -+ // The mount point of the device. -+ Mount string -+ // The filesystem type used by the device. -+ Type string -+ // If available additional statistics related to this Mount. -+ // Use a type assertion to determine if additional statistics are available. -+ Stats MountStats -+} -+ -+// A MountStats is a type which contains detailed statistics for a specific -+// type of Mount. -+type MountStats interface { -+ mountStats() -+} -+ -+// A MountStatsNFS is a MountStats implementation for NFSv3 and v4 mounts. -+type MountStatsNFS struct { -+ // The version of statistics provided. -+ StatVersion string -+ // The mount options of the NFS mount. -+ Opts map[string]string -+ // The age of the NFS mount. -+ Age time.Duration -+ // Statistics related to byte counters for various operations. -+ Bytes NFSBytesStats -+ // Statistics related to various NFS event occurrences. -+ Events NFSEventsStats -+ // Statistics broken down by filesystem operation. -+ Operations []NFSOperationStats -+ // Statistics about the NFS RPC transport. -+ Transport NFSTransportStats -+} -+ -+// mountStats implements MountStats. -+func (m MountStatsNFS) mountStats() {} -+ -+// A NFSBytesStats contains statistics about the number of bytes read and written -+// by an NFS client to and from an NFS server. -+type NFSBytesStats struct { -+ // Number of bytes read using the read() syscall. -+ Read uint64 -+ // Number of bytes written using the write() syscall. -+ Write uint64 -+ // Number of bytes read using the read() syscall in O_DIRECT mode. -+ DirectRead uint64 -+ // Number of bytes written using the write() syscall in O_DIRECT mode. -+ DirectWrite uint64 -+ // Number of bytes read from the NFS server, in total. -+ ReadTotal uint64 -+ // Number of bytes written to the NFS server, in total. -+ WriteTotal uint64 -+ // Number of pages read directly via mmap()'d files. -+ ReadPages uint64 -+ // Number of pages written directly via mmap()'d files. -+ WritePages uint64 -+} -+ -+// A NFSEventsStats contains statistics about NFS event occurrences. -+type NFSEventsStats struct { -+ // Number of times cached inode attributes are re-validated from the server. -+ InodeRevalidate uint64 -+ // Number of times cached dentry nodes are re-validated from the server. -+ DnodeRevalidate uint64 -+ // Number of times an inode cache is cleared. -+ DataInvalidate uint64 -+ // Number of times cached inode attributes are invalidated. -+ AttributeInvalidate uint64 -+ // Number of times files or directories have been open()'d. -+ VFSOpen uint64 -+ // Number of times a directory lookup has occurred. -+ VFSLookup uint64 -+ // Number of times permissions have been checked. -+ VFSAccess uint64 -+ // Number of updates (and potential writes) to pages. -+ VFSUpdatePage uint64 -+ // Number of pages read directly via mmap()'d files. -+ VFSReadPage uint64 -+ // Number of times a group of pages have been read. -+ VFSReadPages uint64 -+ // Number of pages written directly via mmap()'d files. -+ VFSWritePage uint64 -+ // Number of times a group of pages have been written. -+ VFSWritePages uint64 -+ // Number of times directory entries have been read with getdents(). -+ VFSGetdents uint64 -+ // Number of times attributes have been set on inodes. -+ VFSSetattr uint64 -+ // Number of pending writes that have been forcefully flushed to the server. -+ VFSFlush uint64 -+ // Number of times fsync() has been called on directories and files. -+ VFSFsync uint64 -+ // Number of times locking has been attempted on a file. -+ VFSLock uint64 -+ // Number of times files have been closed and released. -+ VFSFileRelease uint64 -+ // Unknown. Possibly unused. -+ CongestionWait uint64 -+ // Number of times files have been truncated. -+ Truncation uint64 -+ // Number of times a file has been grown due to writes beyond its existing end. -+ WriteExtension uint64 -+ // Number of times a file was removed while still open by another process. -+ SillyRename uint64 -+ // Number of times the NFS server gave less data than expected while reading. -+ ShortRead uint64 -+ // Number of times the NFS server wrote less data than expected while writing. -+ ShortWrite uint64 -+ // Number of times the NFS server indicated EJUKEBOX; retrieving data from -+ // offline storage. -+ JukeboxDelay uint64 -+ // Number of NFS v4.1+ pNFS reads. -+ PNFSRead uint64 -+ // Number of NFS v4.1+ pNFS writes. -+ PNFSWrite uint64 -+} -+ -+// A NFSOperationStats contains statistics for a single operation. -+type NFSOperationStats struct { -+ // The name of the operation. -+ Operation string -+ // Number of requests performed for this operation. -+ Requests uint64 -+ // Number of times an actual RPC request has been transmitted for this operation. -+ Transmissions uint64 -+ // Number of times a request has had a major timeout. -+ MajorTimeouts uint64 -+ // Number of bytes sent for this operation, including RPC headers and payload. -+ BytesSent uint64 -+ // Number of bytes received for this operation, including RPC headers and payload. -+ BytesReceived uint64 -+ // Duration all requests spent queued for transmission before they were sent. -+ CumulativeQueueMilliseconds uint64 -+ // Duration it took to get a reply back after the request was transmitted. -+ CumulativeTotalResponseMilliseconds uint64 -+ // Duration from when a request was enqueued to when it was completely handled. -+ CumulativeTotalRequestMilliseconds uint64 -+ // The count of operations that complete with tk_status < 0. These statuses usually indicate error conditions. -+ Errors uint64 -+} -+ -+// A NFSTransportStats contains statistics for the NFS mount RPC requests and -+// responses. -+type NFSTransportStats struct { -+ // The transport protocol used for the NFS mount. -+ Protocol string -+ // The local port used for the NFS mount. -+ Port uint64 -+ // Number of times the client has had to establish a connection from scratch -+ // to the NFS server. -+ Bind uint64 -+ // Number of times the client has made a TCP connection to the NFS server. -+ Connect uint64 -+ // Duration (in jiffies, a kernel internal unit of time) the NFS mount has -+ // spent waiting for connections to the server to be established. -+ ConnectIdleTime uint64 -+ // Duration since the NFS mount last saw any RPC traffic. -+ IdleTimeSeconds uint64 -+ // Number of RPC requests for this mount sent to the NFS server. -+ Sends uint64 -+ // Number of RPC responses for this mount received from the NFS server. -+ Receives uint64 -+ // Number of times the NFS server sent a response with a transaction ID -+ // unknown to this client. -+ BadTransactionIDs uint64 -+ // A running counter, incremented on each request as the current difference -+ // ebetween sends and receives. -+ CumulativeActiveRequests uint64 -+ // A running counter, incremented on each request by the current backlog -+ // queue size. -+ CumulativeBacklog uint64 -+ -+ // Stats below only available with stat version 1.1. -+ -+ // Maximum number of simultaneously active RPC requests ever used. -+ MaximumRPCSlotsUsed uint64 -+ // A running counter, incremented on each request as the current size of the -+ // sending queue. -+ CumulativeSendingQueue uint64 -+ // A running counter, incremented on each request as the current size of the -+ // pending queue. -+ CumulativePendingQueue uint64 -+} -+ -+// parseMountStats parses a /proc/[pid]/mountstats file and returns a slice -+// of Mount structures containing detailed information about each mount. -+// If available, statistics for each mount are parsed as well. -+func parseMountStats(r io.Reader) ([]*Mount, error) { -+ const ( -+ device = "device" -+ statVersionPrefix = "statvers=" -+ -+ nfs3Type = "nfs" -+ nfs4Type = "nfs4" -+ ) -+ -+ var mounts []*Mount -+ -+ s := bufio.NewScanner(r) -+ for s.Scan() { -+ // Only look for device entries in this function -+ ss := strings.Fields(string(s.Bytes())) -+ if len(ss) == 0 || ss[0] != device { -+ continue -+ } -+ -+ m, err := parseMount(ss) -+ if err != nil { -+ return nil, err -+ } -+ -+ // Does this mount also possess statistics information? -+ if len(ss) > deviceEntryLen { -+ // Only NFSv3 and v4 are supported for parsing statistics -+ if m.Type != nfs3Type && m.Type != nfs4Type { -+ return nil, fmt.Errorf("cannot parse MountStats for fstype %q", m.Type) -+ } -+ -+ statVersion := strings.TrimPrefix(ss[8], statVersionPrefix) -+ -+ stats, err := parseMountStatsNFS(s, statVersion) -+ if err != nil { -+ return nil, err -+ } -+ -+ m.Stats = stats -+ } -+ -+ mounts = append(mounts, m) -+ } -+ -+ return mounts, s.Err() -+} -+ -+// parseMount parses an entry in /proc/[pid]/mountstats in the format: -+// device [device] mounted on [mount] with fstype [type] -+func parseMount(ss []string) (*Mount, error) { -+ if len(ss) < deviceEntryLen { -+ return nil, fmt.Errorf("invalid device entry: %v", ss) -+ } -+ -+ // Check for specific words appearing at specific indices to ensure -+ // the format is consistent with what we expect -+ format := []struct { -+ i int -+ s string -+ }{ -+ {i: 0, s: "device"}, -+ {i: 2, s: "mounted"}, -+ {i: 3, s: "on"}, -+ {i: 5, s: "with"}, -+ {i: 6, s: "fstype"}, -+ } -+ -+ for _, f := range format { -+ if ss[f.i] != f.s { -+ return nil, fmt.Errorf("invalid device entry: %v", ss) -+ } -+ } -+ -+ return &Mount{ -+ Device: ss[1], -+ Mount: ss[4], -+ Type: ss[7], -+ }, nil -+} -+ -+// parseMountStatsNFS parses a MountStatsNFS by scanning additional information -+// related to NFS statistics. -+func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, error) { -+ // Field indicators for parsing specific types of data -+ const ( -+ fieldOpts = "opts:" -+ fieldAge = "age:" -+ fieldBytes = "bytes:" -+ fieldEvents = "events:" -+ fieldPerOpStats = "per-op" -+ fieldTransport = "xprt:" -+ ) -+ -+ stats := &MountStatsNFS{ -+ StatVersion: statVersion, -+ } -+ -+ for s.Scan() { -+ ss := strings.Fields(string(s.Bytes())) -+ if len(ss) == 0 { -+ break -+ } -+ -+ switch ss[0] { -+ case fieldOpts: -+ if len(ss) < 2 { -+ return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) -+ } -+ if stats.Opts == nil { -+ stats.Opts = map[string]string{} -+ } -+ for _, opt := range strings.Split(ss[1], ",") { -+ split := strings.Split(opt, "=") -+ if len(split) == 2 { -+ stats.Opts[split[0]] = split[1] -+ } else { -+ stats.Opts[opt] = "" -+ } -+ } -+ case fieldAge: -+ if len(ss) < 2 { -+ return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) -+ } -+ // Age integer is in seconds -+ d, err := time.ParseDuration(ss[1] + "s") -+ if err != nil { -+ return nil, err -+ } -+ -+ stats.Age = d -+ case fieldBytes: -+ if len(ss) < 2 { -+ return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) -+ } -+ bstats, err := parseNFSBytesStats(ss[1:]) -+ if err != nil { -+ return nil, err -+ } -+ -+ stats.Bytes = *bstats -+ case fieldEvents: -+ if len(ss) < 2 { -+ return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) -+ } -+ estats, err := parseNFSEventsStats(ss[1:]) -+ if err != nil { -+ return nil, err -+ } -+ -+ stats.Events = *estats -+ case fieldTransport: -+ if len(ss) < 3 { -+ return nil, fmt.Errorf("not enough information for NFS transport stats: %v", ss) -+ } -+ -+ tstats, err := parseNFSTransportStats(ss[1:], statVersion) -+ if err != nil { -+ return nil, err -+ } -+ -+ stats.Transport = *tstats -+ } -+ -+ // When encountering "per-operation statistics", we must break this -+ // loop and parse them separately to ensure we can terminate parsing -+ // before reaching another device entry; hence why this 'if' statement -+ // is not just another switch case -+ if ss[0] == fieldPerOpStats { -+ break -+ } -+ } -+ -+ if err := s.Err(); err != nil { -+ return nil, err -+ } -+ -+ // NFS per-operation stats appear last before the next device entry -+ perOpStats, err := parseNFSOperationStats(s) -+ if err != nil { -+ return nil, err -+ } -+ -+ stats.Operations = perOpStats -+ -+ return stats, nil -+} -+ -+// parseNFSBytesStats parses a NFSBytesStats line using an input set of -+// integer fields. -+func parseNFSBytesStats(ss []string) (*NFSBytesStats, error) { -+ if len(ss) != fieldBytesLen { -+ return nil, fmt.Errorf("invalid NFS bytes stats: %v", ss) -+ } -+ -+ ns := make([]uint64, 0, fieldBytesLen) -+ for _, s := range ss { -+ n, err := strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ ns = append(ns, n) -+ } -+ -+ return &NFSBytesStats{ -+ Read: ns[0], -+ Write: ns[1], -+ DirectRead: ns[2], -+ DirectWrite: ns[3], -+ ReadTotal: ns[4], -+ WriteTotal: ns[5], -+ ReadPages: ns[6], -+ WritePages: ns[7], -+ }, nil -+} -+ -+// parseNFSEventsStats parses a NFSEventsStats line using an input set of -+// integer fields. -+func parseNFSEventsStats(ss []string) (*NFSEventsStats, error) { -+ if len(ss) != fieldEventsLen { -+ return nil, fmt.Errorf("invalid NFS events stats: %v", ss) -+ } -+ -+ ns := make([]uint64, 0, fieldEventsLen) -+ for _, s := range ss { -+ n, err := strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ ns = append(ns, n) -+ } -+ -+ return &NFSEventsStats{ -+ InodeRevalidate: ns[0], -+ DnodeRevalidate: ns[1], -+ DataInvalidate: ns[2], -+ AttributeInvalidate: ns[3], -+ VFSOpen: ns[4], -+ VFSLookup: ns[5], -+ VFSAccess: ns[6], -+ VFSUpdatePage: ns[7], -+ VFSReadPage: ns[8], -+ VFSReadPages: ns[9], -+ VFSWritePage: ns[10], -+ VFSWritePages: ns[11], -+ VFSGetdents: ns[12], -+ VFSSetattr: ns[13], -+ VFSFlush: ns[14], -+ VFSFsync: ns[15], -+ VFSLock: ns[16], -+ VFSFileRelease: ns[17], -+ CongestionWait: ns[18], -+ Truncation: ns[19], -+ WriteExtension: ns[20], -+ SillyRename: ns[21], -+ ShortRead: ns[22], -+ ShortWrite: ns[23], -+ JukeboxDelay: ns[24], -+ PNFSRead: ns[25], -+ PNFSWrite: ns[26], -+ }, nil -+} -+ -+// parseNFSOperationStats parses a slice of NFSOperationStats by scanning -+// additional information about per-operation statistics until an empty -+// line is reached. -+func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { -+ const ( -+ // Minimum number of expected fields in each per-operation statistics set -+ minFields = 9 -+ ) -+ -+ var ops []NFSOperationStats -+ -+ for s.Scan() { -+ ss := strings.Fields(string(s.Bytes())) -+ if len(ss) == 0 { -+ // Must break when reading a blank line after per-operation stats to -+ // enable top-level function to parse the next device entry -+ break -+ } -+ -+ if len(ss) < minFields { -+ return nil, fmt.Errorf("invalid NFS per-operations stats: %v", ss) -+ } -+ -+ // Skip string operation name for integers -+ ns := make([]uint64, 0, minFields-1) -+ for _, st := range ss[1:] { -+ n, err := strconv.ParseUint(st, 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ ns = append(ns, n) -+ } -+ -+ opStats := NFSOperationStats{ -+ Operation: strings.TrimSuffix(ss[0], ":"), -+ Requests: ns[0], -+ Transmissions: ns[1], -+ MajorTimeouts: ns[2], -+ BytesSent: ns[3], -+ BytesReceived: ns[4], -+ CumulativeQueueMilliseconds: ns[5], -+ CumulativeTotalResponseMilliseconds: ns[6], -+ CumulativeTotalRequestMilliseconds: ns[7], -+ } -+ -+ if len(ns) > 8 { -+ opStats.Errors = ns[8] -+ } -+ -+ ops = append(ops, opStats) -+ } -+ -+ return ops, s.Err() -+} -+ -+// parseNFSTransportStats parses a NFSTransportStats line using an input set of -+// integer fields matched to a specific stats version. -+func parseNFSTransportStats(ss []string, statVersion string) (*NFSTransportStats, error) { -+ // Extract the protocol field. It is the only string value in the line -+ protocol := ss[0] -+ ss = ss[1:] -+ -+ switch statVersion { -+ case statVersion10: -+ var expectedLength int -+ if protocol == "tcp" { -+ expectedLength = fieldTransport10TCPLen -+ } else if protocol == "udp" { -+ expectedLength = fieldTransport10UDPLen -+ } else { -+ return nil, fmt.Errorf("invalid NFS protocol \"%s\" in stats 1.0 statement: %v", protocol, ss) -+ } -+ if len(ss) != expectedLength { -+ return nil, fmt.Errorf("invalid NFS transport stats 1.0 statement: %v", ss) -+ } -+ case statVersion11: -+ var expectedLength int -+ if protocol == "tcp" { -+ expectedLength = fieldTransport11TCPLen -+ } else if protocol == "udp" { -+ expectedLength = fieldTransport11UDPLen -+ } else { -+ return nil, fmt.Errorf("invalid NFS protocol \"%s\" in stats 1.1 statement: %v", protocol, ss) -+ } -+ if len(ss) != expectedLength { -+ return nil, fmt.Errorf("invalid NFS transport stats 1.1 statement: %v", ss) -+ } -+ default: -+ return nil, fmt.Errorf("unrecognized NFS transport stats version: %q", statVersion) -+ } -+ -+ // Allocate enough for v1.1 stats since zero value for v1.1 stats will be okay -+ // in a v1.0 response. Since the stat length is bigger for TCP stats, we use -+ // the TCP length here. -+ // -+ // Note: slice length must be set to length of v1.1 stats to avoid a panic when -+ // only v1.0 stats are present. -+ // See: https://github.com/prometheus/node_exporter/issues/571. -+ ns := make([]uint64, fieldTransport11TCPLen) -+ for i, s := range ss { -+ n, err := strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ ns[i] = n -+ } -+ -+ // The fields differ depending on the transport protocol (TCP or UDP) -+ // From https://utcc.utoronto.ca/%7Ecks/space/blog/linux/NFSMountstatsXprt -+ // -+ // For the udp RPC transport there is no connection count, connect idle time, -+ // or idle time (fields #3, #4, and #5); all other fields are the same. So -+ // we set them to 0 here. -+ if protocol == "udp" { -+ ns = append(ns[:2], append(make([]uint64, 3), ns[2:]...)...) -+ } -+ -+ return &NFSTransportStats{ -+ Protocol: protocol, -+ Port: ns[0], -+ Bind: ns[1], -+ Connect: ns[2], -+ ConnectIdleTime: ns[3], -+ IdleTimeSeconds: ns[4], -+ Sends: ns[5], -+ Receives: ns[6], -+ BadTransactionIDs: ns[7], -+ CumulativeActiveRequests: ns[8], -+ CumulativeBacklog: ns[9], -+ MaximumRPCSlotsUsed: ns[10], -+ CumulativeSendingQueue: ns[11], -+ CumulativePendingQueue: ns[12], -+ }, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/net_conntrackstat.go b/vendor/github.com/prometheus/procfs/net_conntrackstat.go -new file mode 100755 -index 0000000..8300dac ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_conntrackstat.go -@@ -0,0 +1,153 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// A ConntrackStatEntry represents one line from net/stat/nf_conntrack -+// and contains netfilter conntrack statistics at one CPU core. -+type ConntrackStatEntry struct { -+ Entries uint64 -+ Found uint64 -+ Invalid uint64 -+ Ignore uint64 -+ Insert uint64 -+ InsertFailed uint64 -+ Drop uint64 -+ EarlyDrop uint64 -+ SearchRestart uint64 -+} -+ -+// ConntrackStat retrieves netfilter's conntrack statistics, split by CPU cores. -+func (fs FS) ConntrackStat() ([]ConntrackStatEntry, error) { -+ return readConntrackStat(fs.proc.Path("net", "stat", "nf_conntrack")) -+} -+ -+// Parses a slice of ConntrackStatEntries from the given filepath. -+func readConntrackStat(path string) ([]ConntrackStatEntry, error) { -+ // This file is small and can be read with one syscall. -+ b, err := util.ReadFileNoStat(path) -+ if err != nil { -+ // Do not wrap this error so the caller can detect os.IsNotExist and -+ // similar conditions. -+ return nil, err -+ } -+ -+ stat, err := parseConntrackStat(bytes.NewReader(b)) -+ if err != nil { -+ return nil, fmt.Errorf("failed to read conntrack stats from %q: %w", path, err) -+ } -+ -+ return stat, nil -+} -+ -+// Reads the contents of a conntrack statistics file and parses a slice of ConntrackStatEntries. -+func parseConntrackStat(r io.Reader) ([]ConntrackStatEntry, error) { -+ var entries []ConntrackStatEntry -+ -+ scanner := bufio.NewScanner(r) -+ scanner.Scan() -+ for scanner.Scan() { -+ fields := strings.Fields(scanner.Text()) -+ conntrackEntry, err := parseConntrackStatEntry(fields) -+ if err != nil { -+ return nil, err -+ } -+ entries = append(entries, *conntrackEntry) -+ } -+ -+ return entries, nil -+} -+ -+// Parses a ConntrackStatEntry from given array of fields. -+func parseConntrackStatEntry(fields []string) (*ConntrackStatEntry, error) { -+ if len(fields) != 17 { -+ return nil, fmt.Errorf("invalid conntrackstat entry, missing fields") -+ } -+ entry := &ConntrackStatEntry{} -+ -+ entries, err := parseConntrackStatField(fields[0]) -+ if err != nil { -+ return nil, err -+ } -+ entry.Entries = entries -+ -+ found, err := parseConntrackStatField(fields[2]) -+ if err != nil { -+ return nil, err -+ } -+ entry.Found = found -+ -+ invalid, err := parseConntrackStatField(fields[4]) -+ if err != nil { -+ return nil, err -+ } -+ entry.Invalid = invalid -+ -+ ignore, err := parseConntrackStatField(fields[5]) -+ if err != nil { -+ return nil, err -+ } -+ entry.Ignore = ignore -+ -+ insert, err := parseConntrackStatField(fields[8]) -+ if err != nil { -+ return nil, err -+ } -+ entry.Insert = insert -+ -+ insertFailed, err := parseConntrackStatField(fields[9]) -+ if err != nil { -+ return nil, err -+ } -+ entry.InsertFailed = insertFailed -+ -+ drop, err := parseConntrackStatField(fields[10]) -+ if err != nil { -+ return nil, err -+ } -+ entry.Drop = drop -+ -+ earlyDrop, err := parseConntrackStatField(fields[11]) -+ if err != nil { -+ return nil, err -+ } -+ entry.EarlyDrop = earlyDrop -+ -+ searchRestart, err := parseConntrackStatField(fields[16]) -+ if err != nil { -+ return nil, err -+ } -+ entry.SearchRestart = searchRestart -+ -+ return entry, nil -+} -+ -+// Parses a uint64 from given hex in string. -+func parseConntrackStatField(field string) (uint64, error) { -+ val, err := strconv.ParseUint(field, 16, 64) -+ if err != nil { -+ return 0, fmt.Errorf("couldn't parse %q field: %w", field, err) -+ } -+ return val, err -+} -diff --git a/vendor/github.com/prometheus/procfs/net_dev.go b/vendor/github.com/prometheus/procfs/net_dev.go -new file mode 100755 -index 0000000..e66208a ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_dev.go -@@ -0,0 +1,205 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "errors" -+ "os" -+ "sort" -+ "strconv" -+ "strings" -+) -+ -+// NetDevLine is single line parsed from /proc/net/dev or /proc/[pid]/net/dev. -+type NetDevLine struct { -+ Name string `json:"name"` // The name of the interface. -+ RxBytes uint64 `json:"rx_bytes"` // Cumulative count of bytes received. -+ RxPackets uint64 `json:"rx_packets"` // Cumulative count of packets received. -+ RxErrors uint64 `json:"rx_errors"` // Cumulative count of receive errors encountered. -+ RxDropped uint64 `json:"rx_dropped"` // Cumulative count of packets dropped while receiving. -+ RxFIFO uint64 `json:"rx_fifo"` // Cumulative count of FIFO buffer errors. -+ RxFrame uint64 `json:"rx_frame"` // Cumulative count of packet framing errors. -+ RxCompressed uint64 `json:"rx_compressed"` // Cumulative count of compressed packets received by the device driver. -+ RxMulticast uint64 `json:"rx_multicast"` // Cumulative count of multicast frames received by the device driver. -+ TxBytes uint64 `json:"tx_bytes"` // Cumulative count of bytes transmitted. -+ TxPackets uint64 `json:"tx_packets"` // Cumulative count of packets transmitted. -+ TxErrors uint64 `json:"tx_errors"` // Cumulative count of transmit errors encountered. -+ TxDropped uint64 `json:"tx_dropped"` // Cumulative count of packets dropped while transmitting. -+ TxFIFO uint64 `json:"tx_fifo"` // Cumulative count of FIFO buffer errors. -+ TxCollisions uint64 `json:"tx_collisions"` // Cumulative count of collisions detected on the interface. -+ TxCarrier uint64 `json:"tx_carrier"` // Cumulative count of carrier losses detected by the device driver. -+ TxCompressed uint64 `json:"tx_compressed"` // Cumulative count of compressed packets transmitted by the device driver. -+} -+ -+// NetDev is parsed from /proc/net/dev or /proc/[pid]/net/dev. The map keys -+// are interface names. -+type NetDev map[string]NetDevLine -+ -+// NetDev returns kernel/system statistics read from /proc/net/dev. -+func (fs FS) NetDev() (NetDev, error) { -+ return newNetDev(fs.proc.Path("net/dev")) -+} -+ -+// NetDev returns kernel/system statistics read from /proc/[pid]/net/dev. -+func (p Proc) NetDev() (NetDev, error) { -+ return newNetDev(p.path("net/dev")) -+} -+ -+// newNetDev creates a new NetDev from the contents of the given file. -+func newNetDev(file string) (NetDev, error) { -+ f, err := os.Open(file) -+ if err != nil { -+ return NetDev{}, err -+ } -+ defer f.Close() -+ -+ netDev := NetDev{} -+ s := bufio.NewScanner(f) -+ for n := 0; s.Scan(); n++ { -+ // Skip the 2 header lines. -+ if n < 2 { -+ continue -+ } -+ -+ line, err := netDev.parseLine(s.Text()) -+ if err != nil { -+ return netDev, err -+ } -+ -+ netDev[line.Name] = *line -+ } -+ -+ return netDev, s.Err() -+} -+ -+// parseLine parses a single line from the /proc/net/dev file. Header lines -+// must be filtered prior to calling this method. -+func (netDev NetDev) parseLine(rawLine string) (*NetDevLine, error) { -+ idx := strings.LastIndex(rawLine, ":") -+ if idx == -1 { -+ return nil, errors.New("invalid net/dev line, missing colon") -+ } -+ fields := strings.Fields(strings.TrimSpace(rawLine[idx+1:])) -+ -+ var err error -+ line := &NetDevLine{} -+ -+ // Interface Name -+ line.Name = strings.TrimSpace(rawLine[:idx]) -+ if line.Name == "" { -+ return nil, errors.New("invalid net/dev line, empty interface name") -+ } -+ -+ // RX -+ line.RxBytes, err = strconv.ParseUint(fields[0], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.RxPackets, err = strconv.ParseUint(fields[1], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.RxErrors, err = strconv.ParseUint(fields[2], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.RxDropped, err = strconv.ParseUint(fields[3], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.RxFIFO, err = strconv.ParseUint(fields[4], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.RxFrame, err = strconv.ParseUint(fields[5], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.RxCompressed, err = strconv.ParseUint(fields[6], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.RxMulticast, err = strconv.ParseUint(fields[7], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ // TX -+ line.TxBytes, err = strconv.ParseUint(fields[8], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.TxPackets, err = strconv.ParseUint(fields[9], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.TxErrors, err = strconv.ParseUint(fields[10], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.TxDropped, err = strconv.ParseUint(fields[11], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.TxFIFO, err = strconv.ParseUint(fields[12], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.TxCollisions, err = strconv.ParseUint(fields[13], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.TxCarrier, err = strconv.ParseUint(fields[14], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.TxCompressed, err = strconv.ParseUint(fields[15], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ -+ return line, nil -+} -+ -+// Total aggregates the values across interfaces and returns a new NetDevLine. -+// The Name field will be a sorted comma separated list of interface names. -+func (netDev NetDev) Total() NetDevLine { -+ total := NetDevLine{} -+ -+ names := make([]string, 0, len(netDev)) -+ for _, ifc := range netDev { -+ names = append(names, ifc.Name) -+ total.RxBytes += ifc.RxBytes -+ total.RxPackets += ifc.RxPackets -+ total.RxErrors += ifc.RxErrors -+ total.RxDropped += ifc.RxDropped -+ total.RxFIFO += ifc.RxFIFO -+ total.RxFrame += ifc.RxFrame -+ total.RxCompressed += ifc.RxCompressed -+ total.RxMulticast += ifc.RxMulticast -+ total.TxBytes += ifc.TxBytes -+ total.TxPackets += ifc.TxPackets -+ total.TxErrors += ifc.TxErrors -+ total.TxDropped += ifc.TxDropped -+ total.TxFIFO += ifc.TxFIFO -+ total.TxCollisions += ifc.TxCollisions -+ total.TxCarrier += ifc.TxCarrier -+ total.TxCompressed += ifc.TxCompressed -+ } -+ sort.Strings(names) -+ total.Name = strings.Join(names, ", ") -+ -+ return total -+} -diff --git a/vendor/github.com/prometheus/procfs/net_ip_socket.go b/vendor/github.com/prometheus/procfs/net_ip_socket.go -new file mode 100755 -index 0000000..7fd57d7 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_ip_socket.go -@@ -0,0 +1,226 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "encoding/hex" -+ "fmt" -+ "io" -+ "net" -+ "os" -+ "strconv" -+ "strings" -+) -+ -+const ( -+ // readLimit is used by io.LimitReader while reading the content of the -+ // /proc/net/udp{,6} files. The number of lines inside such a file is dynamic -+ // as each line represents a single used socket. -+ // In theory, the number of available sockets is 65535 (2^16 - 1) per IP. -+ // With e.g. 150 Byte per line and the maximum number of 65535, -+ // the reader needs to handle 150 Byte * 65535 =~ 10 MB for a single IP. -+ readLimit = 4294967296 // Byte -> 4 GiB -+) -+ -+// This contains generic data structures for both udp and tcp sockets. -+type ( -+ // NetIPSocket represents the contents of /proc/net/{t,u}dp{,6} file without the header. -+ NetIPSocket []*netIPSocketLine -+ -+ // NetIPSocketSummary provides already computed values like the total queue lengths or -+ // the total number of used sockets. In contrast to NetIPSocket it does not collect -+ // the parsed lines into a slice. -+ NetIPSocketSummary struct { -+ // TxQueueLength shows the total queue length of all parsed tx_queue lengths. -+ TxQueueLength uint64 -+ // RxQueueLength shows the total queue length of all parsed rx_queue lengths. -+ RxQueueLength uint64 -+ // UsedSockets shows the total number of parsed lines representing the -+ // number of used sockets. -+ UsedSockets uint64 -+ } -+ -+ // netIPSocketLine represents the fields parsed from a single line -+ // in /proc/net/{t,u}dp{,6}. Fields which are not used by IPSocket are skipped. -+ // For the proc file format details, see https://linux.die.net/man/5/proc. -+ netIPSocketLine struct { -+ Sl uint64 -+ LocalAddr net.IP -+ LocalPort uint64 -+ RemAddr net.IP -+ RemPort uint64 -+ St uint64 -+ TxQueue uint64 -+ RxQueue uint64 -+ UID uint64 -+ Inode uint64 -+ } -+) -+ -+func newNetIPSocket(file string) (NetIPSocket, error) { -+ f, err := os.Open(file) -+ if err != nil { -+ return nil, err -+ } -+ defer f.Close() -+ -+ var netIPSocket NetIPSocket -+ -+ lr := io.LimitReader(f, readLimit) -+ s := bufio.NewScanner(lr) -+ s.Scan() // skip first line with headers -+ for s.Scan() { -+ fields := strings.Fields(s.Text()) -+ line, err := parseNetIPSocketLine(fields) -+ if err != nil { -+ return nil, err -+ } -+ netIPSocket = append(netIPSocket, line) -+ } -+ if err := s.Err(); err != nil { -+ return nil, err -+ } -+ return netIPSocket, nil -+} -+ -+// newNetIPSocketSummary creates a new NetIPSocket{,6} from the contents of the given file. -+func newNetIPSocketSummary(file string) (*NetIPSocketSummary, error) { -+ f, err := os.Open(file) -+ if err != nil { -+ return nil, err -+ } -+ defer f.Close() -+ -+ var netIPSocketSummary NetIPSocketSummary -+ -+ lr := io.LimitReader(f, readLimit) -+ s := bufio.NewScanner(lr) -+ s.Scan() // skip first line with headers -+ for s.Scan() { -+ fields := strings.Fields(s.Text()) -+ line, err := parseNetIPSocketLine(fields) -+ if err != nil { -+ return nil, err -+ } -+ netIPSocketSummary.TxQueueLength += line.TxQueue -+ netIPSocketSummary.RxQueueLength += line.RxQueue -+ netIPSocketSummary.UsedSockets++ -+ } -+ if err := s.Err(); err != nil { -+ return nil, err -+ } -+ return &netIPSocketSummary, nil -+} -+ -+// the /proc/net/{t,u}dp{,6} files are network byte order for ipv4 and for ipv6 the address is four words consisting of four bytes each. In each of those four words the four bytes are written in reverse order. -+ -+func parseIP(hexIP string) (net.IP, error) { -+ var byteIP []byte -+ byteIP, err := hex.DecodeString(hexIP) -+ if err != nil { -+ return nil, fmt.Errorf("cannot parse address field in socket line %q", hexIP) -+ } -+ switch len(byteIP) { -+ case 4: -+ return net.IP{byteIP[3], byteIP[2], byteIP[1], byteIP[0]}, nil -+ case 16: -+ i := net.IP{ -+ byteIP[3], byteIP[2], byteIP[1], byteIP[0], -+ byteIP[7], byteIP[6], byteIP[5], byteIP[4], -+ byteIP[11], byteIP[10], byteIP[9], byteIP[8], -+ byteIP[15], byteIP[14], byteIP[13], byteIP[12], -+ } -+ return i, nil -+ default: -+ return nil, fmt.Errorf("Unable to parse IP %s", hexIP) -+ } -+} -+ -+// parseNetIPSocketLine parses a single line, represented by a list of fields. -+func parseNetIPSocketLine(fields []string) (*netIPSocketLine, error) { -+ line := &netIPSocketLine{} -+ if len(fields) < 10 { -+ return nil, fmt.Errorf( -+ "cannot parse net socket line as it has less then 10 columns %q", -+ strings.Join(fields, " "), -+ ) -+ } -+ var err error // parse error -+ -+ // sl -+ s := strings.Split(fields[0], ":") -+ if len(s) != 2 { -+ return nil, fmt.Errorf("cannot parse sl field in socket line %q", fields[0]) -+ } -+ -+ if line.Sl, err = strconv.ParseUint(s[0], 0, 64); err != nil { -+ return nil, fmt.Errorf("cannot parse sl value in socket line: %w", err) -+ } -+ // local_address -+ l := strings.Split(fields[1], ":") -+ if len(l) != 2 { -+ return nil, fmt.Errorf("cannot parse local_address field in socket line %q", fields[1]) -+ } -+ if line.LocalAddr, err = parseIP(l[0]); err != nil { -+ return nil, err -+ } -+ if line.LocalPort, err = strconv.ParseUint(l[1], 16, 64); err != nil { -+ return nil, fmt.Errorf("cannot parse local_address port value in socket line: %w", err) -+ } -+ -+ // remote_address -+ r := strings.Split(fields[2], ":") -+ if len(r) != 2 { -+ return nil, fmt.Errorf("cannot parse rem_address field in socket line %q", fields[1]) -+ } -+ if line.RemAddr, err = parseIP(r[0]); err != nil { -+ return nil, err -+ } -+ if line.RemPort, err = strconv.ParseUint(r[1], 16, 64); err != nil { -+ return nil, fmt.Errorf("cannot parse rem_address port value in socket line: %w", err) -+ } -+ -+ // st -+ if line.St, err = strconv.ParseUint(fields[3], 16, 64); err != nil { -+ return nil, fmt.Errorf("cannot parse st value in socket line: %w", err) -+ } -+ -+ // tx_queue and rx_queue -+ q := strings.Split(fields[4], ":") -+ if len(q) != 2 { -+ return nil, fmt.Errorf( -+ "cannot parse tx/rx queues in socket line as it has a missing colon %q", -+ fields[4], -+ ) -+ } -+ if line.TxQueue, err = strconv.ParseUint(q[0], 16, 64); err != nil { -+ return nil, fmt.Errorf("cannot parse tx_queue value in socket line: %w", err) -+ } -+ if line.RxQueue, err = strconv.ParseUint(q[1], 16, 64); err != nil { -+ return nil, fmt.Errorf("cannot parse rx_queue value in socket line: %w", err) -+ } -+ -+ // uid -+ if line.UID, err = strconv.ParseUint(fields[7], 0, 64); err != nil { -+ return nil, fmt.Errorf("cannot parse uid value in socket line: %w", err) -+ } -+ -+ // inode -+ if line.Inode, err = strconv.ParseUint(fields[9], 0, 64); err != nil { -+ return nil, fmt.Errorf("cannot parse inode value in socket line: %w", err) -+ } -+ -+ return line, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/net_protocols.go b/vendor/github.com/prometheus/procfs/net_protocols.go -new file mode 100755 -index 0000000..374b6f7 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_protocols.go -@@ -0,0 +1,180 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// NetProtocolStats stores the contents from /proc/net/protocols. -+type NetProtocolStats map[string]NetProtocolStatLine -+ -+// NetProtocolStatLine contains a single line parsed from /proc/net/protocols. We -+// only care about the first six columns as the rest are not likely to change -+// and only serve to provide a set of capabilities for each protocol. -+type NetProtocolStatLine struct { -+ Name string // 0 The name of the protocol -+ Size uint64 // 1 The size, in bytes, of a given protocol structure. e.g. sizeof(struct tcp_sock) or sizeof(struct unix_sock) -+ Sockets int64 // 2 Number of sockets in use by this protocol -+ Memory int64 // 3 Number of 4KB pages allocated by all sockets of this protocol -+ Pressure int // 4 This is either yes, no, or NI (not implemented). For the sake of simplicity we treat NI as not experiencing memory pressure. -+ MaxHeader uint64 // 5 Protocol specific max header size -+ Slab bool // 6 Indicates whether or not memory is allocated from the SLAB -+ ModuleName string // 7 The name of the module that implemented this protocol or "kernel" if not from a module -+ Capabilities NetProtocolCapabilities -+} -+ -+// NetProtocolCapabilities contains a list of capabilities for each protocol. -+type NetProtocolCapabilities struct { -+ Close bool // 8 -+ Connect bool // 9 -+ Disconnect bool // 10 -+ Accept bool // 11 -+ IoCtl bool // 12 -+ Init bool // 13 -+ Destroy bool // 14 -+ Shutdown bool // 15 -+ SetSockOpt bool // 16 -+ GetSockOpt bool // 17 -+ SendMsg bool // 18 -+ RecvMsg bool // 19 -+ SendPage bool // 20 -+ Bind bool // 21 -+ BacklogRcv bool // 22 -+ Hash bool // 23 -+ UnHash bool // 24 -+ GetPort bool // 25 -+ EnterMemoryPressure bool // 26 -+} -+ -+// NetProtocols reads stats from /proc/net/protocols and returns a map of -+// PortocolStatLine entries. As of this writing no official Linux Documentation -+// exists, however the source is fairly self-explanatory and the format seems -+// stable since its introduction in 2.6.12-rc2 -+// Linux 2.6.12-rc2 - https://elixir.bootlin.com/linux/v2.6.12-rc2/source/net/core/sock.c#L1452 -+// Linux 5.10 - https://elixir.bootlin.com/linux/v5.10.4/source/net/core/sock.c#L3586 -+func (fs FS) NetProtocols() (NetProtocolStats, error) { -+ data, err := util.ReadFileNoStat(fs.proc.Path("net/protocols")) -+ if err != nil { -+ return NetProtocolStats{}, err -+ } -+ return parseNetProtocols(bufio.NewScanner(bytes.NewReader(data))) -+} -+ -+func parseNetProtocols(s *bufio.Scanner) (NetProtocolStats, error) { -+ nps := NetProtocolStats{} -+ -+ // Skip the header line -+ s.Scan() -+ -+ for s.Scan() { -+ line, err := nps.parseLine(s.Text()) -+ if err != nil { -+ return NetProtocolStats{}, err -+ } -+ -+ nps[line.Name] = *line -+ } -+ return nps, nil -+} -+ -+func (ps NetProtocolStats) parseLine(rawLine string) (*NetProtocolStatLine, error) { -+ line := &NetProtocolStatLine{Capabilities: NetProtocolCapabilities{}} -+ var err error -+ const enabled = "yes" -+ const disabled = "no" -+ -+ fields := strings.Fields(rawLine) -+ line.Name = fields[0] -+ line.Size, err = strconv.ParseUint(fields[1], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.Sockets, err = strconv.ParseInt(fields[2], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ line.Memory, err = strconv.ParseInt(fields[3], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ if fields[4] == enabled { -+ line.Pressure = 1 -+ } else if fields[4] == disabled { -+ line.Pressure = 0 -+ } else { -+ line.Pressure = -1 -+ } -+ line.MaxHeader, err = strconv.ParseUint(fields[5], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ if fields[6] == enabled { -+ line.Slab = true -+ } else if fields[6] == disabled { -+ line.Slab = false -+ } else { -+ return nil, fmt.Errorf("unable to parse capability for protocol: %s", line.Name) -+ } -+ line.ModuleName = fields[7] -+ -+ err = line.Capabilities.parseCapabilities(fields[8:]) -+ if err != nil { -+ return nil, err -+ } -+ -+ return line, nil -+} -+ -+func (pc *NetProtocolCapabilities) parseCapabilities(capabilities []string) error { -+ // The capabilities are all bools so we can loop over to map them -+ capabilityFields := [...]*bool{ -+ &pc.Close, -+ &pc.Connect, -+ &pc.Disconnect, -+ &pc.Accept, -+ &pc.IoCtl, -+ &pc.Init, -+ &pc.Destroy, -+ &pc.Shutdown, -+ &pc.SetSockOpt, -+ &pc.GetSockOpt, -+ &pc.SendMsg, -+ &pc.RecvMsg, -+ &pc.SendPage, -+ &pc.Bind, -+ &pc.BacklogRcv, -+ &pc.Hash, -+ &pc.UnHash, -+ &pc.GetPort, -+ &pc.EnterMemoryPressure, -+ } -+ -+ for i := 0; i < len(capabilities); i++ { -+ if capabilities[i] == "y" { -+ *capabilityFields[i] = true -+ } else if capabilities[i] == "n" { -+ *capabilityFields[i] = false -+ } else { -+ return fmt.Errorf("unable to parse capability block for protocol: position %d", i) -+ } -+ } -+ return nil -+} -diff --git a/vendor/github.com/prometheus/procfs/net_sockstat.go b/vendor/github.com/prometheus/procfs/net_sockstat.go -new file mode 100755 -index 0000000..e36f487 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_sockstat.go -@@ -0,0 +1,163 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "errors" -+ "fmt" -+ "io" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// A NetSockstat contains the output of /proc/net/sockstat{,6} for IPv4 or IPv6, -+// respectively. -+type NetSockstat struct { -+ // Used is non-nil for IPv4 sockstat results, but nil for IPv6. -+ Used *int -+ Protocols []NetSockstatProtocol -+} -+ -+// A NetSockstatProtocol contains statistics about a given socket protocol. -+// Pointer fields indicate that the value may or may not be present on any -+// given protocol. -+type NetSockstatProtocol struct { -+ Protocol string -+ InUse int -+ Orphan *int -+ TW *int -+ Alloc *int -+ Mem *int -+ Memory *int -+} -+ -+// NetSockstat retrieves IPv4 socket statistics. -+func (fs FS) NetSockstat() (*NetSockstat, error) { -+ return readSockstat(fs.proc.Path("net", "sockstat")) -+} -+ -+// NetSockstat6 retrieves IPv6 socket statistics. -+// -+// If IPv6 is disabled on this kernel, the returned error can be checked with -+// os.IsNotExist. -+func (fs FS) NetSockstat6() (*NetSockstat, error) { -+ return readSockstat(fs.proc.Path("net", "sockstat6")) -+} -+ -+// readSockstat opens and parses a NetSockstat from the input file. -+func readSockstat(name string) (*NetSockstat, error) { -+ // This file is small and can be read with one syscall. -+ b, err := util.ReadFileNoStat(name) -+ if err != nil { -+ // Do not wrap this error so the caller can detect os.IsNotExist and -+ // similar conditions. -+ return nil, err -+ } -+ -+ stat, err := parseSockstat(bytes.NewReader(b)) -+ if err != nil { -+ return nil, fmt.Errorf("failed to read sockstats from %q: %w", name, err) -+ } -+ -+ return stat, nil -+} -+ -+// parseSockstat reads the contents of a sockstat file and parses a NetSockstat. -+func parseSockstat(r io.Reader) (*NetSockstat, error) { -+ var stat NetSockstat -+ s := bufio.NewScanner(r) -+ for s.Scan() { -+ // Expect a minimum of a protocol and one key/value pair. -+ fields := strings.Split(s.Text(), " ") -+ if len(fields) < 3 { -+ return nil, fmt.Errorf("malformed sockstat line: %q", s.Text()) -+ } -+ -+ // The remaining fields are key/value pairs. -+ kvs, err := parseSockstatKVs(fields[1:]) -+ if err != nil { -+ return nil, fmt.Errorf("error parsing sockstat key/value pairs from %q: %w", s.Text(), err) -+ } -+ -+ // The first field is the protocol. We must trim its colon suffix. -+ proto := strings.TrimSuffix(fields[0], ":") -+ switch proto { -+ case "sockets": -+ // Special case: IPv4 has a sockets "used" key/value pair that we -+ // embed at the top level of the structure. -+ used := kvs["used"] -+ stat.Used = &used -+ default: -+ // Parse all other lines as individual protocols. -+ nsp := parseSockstatProtocol(kvs) -+ nsp.Protocol = proto -+ stat.Protocols = append(stat.Protocols, nsp) -+ } -+ } -+ -+ if err := s.Err(); err != nil { -+ return nil, err -+ } -+ -+ return &stat, nil -+} -+ -+// parseSockstatKVs parses a string slice into a map of key/value pairs. -+func parseSockstatKVs(kvs []string) (map[string]int, error) { -+ if len(kvs)%2 != 0 { -+ return nil, errors.New("odd number of fields in key/value pairs") -+ } -+ -+ // Iterate two values at a time to gather key/value pairs. -+ out := make(map[string]int, len(kvs)/2) -+ for i := 0; i < len(kvs); i += 2 { -+ vp := util.NewValueParser(kvs[i+1]) -+ out[kvs[i]] = vp.Int() -+ -+ if err := vp.Err(); err != nil { -+ return nil, err -+ } -+ } -+ -+ return out, nil -+} -+ -+// parseSockstatProtocol parses a NetSockstatProtocol from the input kvs map. -+func parseSockstatProtocol(kvs map[string]int) NetSockstatProtocol { -+ var nsp NetSockstatProtocol -+ for k, v := range kvs { -+ // Capture the range variable to ensure we get unique pointers for -+ // each of the optional fields. -+ v := v -+ switch k { -+ case "inuse": -+ nsp.InUse = v -+ case "orphan": -+ nsp.Orphan = &v -+ case "tw": -+ nsp.TW = &v -+ case "alloc": -+ nsp.Alloc = &v -+ case "mem": -+ nsp.Mem = &v -+ case "memory": -+ nsp.Memory = &v -+ } -+ } -+ -+ return nsp -+} -diff --git a/vendor/github.com/prometheus/procfs/net_softnet.go b/vendor/github.com/prometheus/procfs/net_softnet.go -new file mode 100755 -index 0000000..a94f86d ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_softnet.go -@@ -0,0 +1,102 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// For the proc file format details, -+// See: -+// * Linux 2.6.23 https://elixir.bootlin.com/linux/v2.6.23/source/net/core/dev.c#L2343 -+// * Linux 4.17 https://elixir.bootlin.com/linux/v4.17/source/net/core/net-procfs.c#L162 -+// and https://elixir.bootlin.com/linux/v4.17/source/include/linux/netdevice.h#L2810. -+ -+// SoftnetStat contains a single row of data from /proc/net/softnet_stat. -+type SoftnetStat struct { -+ // Number of processed packets. -+ Processed uint32 -+ // Number of dropped packets. -+ Dropped uint32 -+ // Number of times processing packets ran out of quota. -+ TimeSqueezed uint32 -+} -+ -+var softNetProcFile = "net/softnet_stat" -+ -+// NetSoftnetStat reads data from /proc/net/softnet_stat. -+func (fs FS) NetSoftnetStat() ([]SoftnetStat, error) { -+ b, err := util.ReadFileNoStat(fs.proc.Path(softNetProcFile)) -+ if err != nil { -+ return nil, err -+ } -+ -+ entries, err := parseSoftnet(bytes.NewReader(b)) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse /proc/net/softnet_stat: %w", err) -+ } -+ -+ return entries, nil -+} -+ -+func parseSoftnet(r io.Reader) ([]SoftnetStat, error) { -+ const minColumns = 9 -+ -+ s := bufio.NewScanner(r) -+ -+ var stats []SoftnetStat -+ for s.Scan() { -+ columns := strings.Fields(s.Text()) -+ width := len(columns) -+ -+ if width < minColumns { -+ return nil, fmt.Errorf("%d columns were detected, but at least %d were expected", width, minColumns) -+ } -+ -+ // We only parse the first three columns at the moment. -+ us, err := parseHexUint32s(columns[0:3]) -+ if err != nil { -+ return nil, err -+ } -+ -+ stats = append(stats, SoftnetStat{ -+ Processed: us[0], -+ Dropped: us[1], -+ TimeSqueezed: us[2], -+ }) -+ } -+ -+ return stats, nil -+} -+ -+func parseHexUint32s(ss []string) ([]uint32, error) { -+ us := make([]uint32, 0, len(ss)) -+ for _, s := range ss { -+ u, err := strconv.ParseUint(s, 16, 32) -+ if err != nil { -+ return nil, err -+ } -+ -+ us = append(us, uint32(u)) -+ } -+ -+ return us, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/net_tcp.go b/vendor/github.com/prometheus/procfs/net_tcp.go -new file mode 100755 -index 0000000..5277629 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_tcp.go -@@ -0,0 +1,64 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+type ( -+ // NetTCP represents the contents of /proc/net/tcp{,6} file without the header. -+ NetTCP []*netIPSocketLine -+ -+ // NetTCPSummary provides already computed values like the total queue lengths or -+ // the total number of used sockets. In contrast to NetTCP it does not collect -+ // the parsed lines into a slice. -+ NetTCPSummary NetIPSocketSummary -+) -+ -+// NetTCP returns the IPv4 kernel/networking statistics for TCP datagrams -+// read from /proc/net/tcp. -+func (fs FS) NetTCP() (NetTCP, error) { -+ return newNetTCP(fs.proc.Path("net/tcp")) -+} -+ -+// NetTCP6 returns the IPv6 kernel/networking statistics for TCP datagrams -+// read from /proc/net/tcp6. -+func (fs FS) NetTCP6() (NetTCP, error) { -+ return newNetTCP(fs.proc.Path("net/tcp6")) -+} -+ -+// NetTCPSummary returns already computed statistics like the total queue lengths -+// for TCP datagrams read from /proc/net/tcp. -+func (fs FS) NetTCPSummary() (*NetTCPSummary, error) { -+ return newNetTCPSummary(fs.proc.Path("net/tcp")) -+} -+ -+// NetTCP6Summary returns already computed statistics like the total queue lengths -+// for TCP datagrams read from /proc/net/tcp6. -+func (fs FS) NetTCP6Summary() (*NetTCPSummary, error) { -+ return newNetTCPSummary(fs.proc.Path("net/tcp6")) -+} -+ -+// newNetTCP creates a new NetTCP{,6} from the contents of the given file. -+func newNetTCP(file string) (NetTCP, error) { -+ n, err := newNetIPSocket(file) -+ n1 := NetTCP(n) -+ return n1, err -+} -+ -+func newNetTCPSummary(file string) (*NetTCPSummary, error) { -+ n, err := newNetIPSocketSummary(file) -+ if n == nil { -+ return nil, err -+ } -+ n1 := NetTCPSummary(*n) -+ return &n1, err -+} -diff --git a/vendor/github.com/prometheus/procfs/net_udp.go b/vendor/github.com/prometheus/procfs/net_udp.go -new file mode 100755 -index 0000000..9ac3daf ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_udp.go -@@ -0,0 +1,64 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+type ( -+ // NetUDP represents the contents of /proc/net/udp{,6} file without the header. -+ NetUDP []*netIPSocketLine -+ -+ // NetUDPSummary provides already computed values like the total queue lengths or -+ // the total number of used sockets. In contrast to NetUDP it does not collect -+ // the parsed lines into a slice. -+ NetUDPSummary NetIPSocketSummary -+) -+ -+// NetUDP returns the IPv4 kernel/networking statistics for UDP datagrams -+// read from /proc/net/udp. -+func (fs FS) NetUDP() (NetUDP, error) { -+ return newNetUDP(fs.proc.Path("net/udp")) -+} -+ -+// NetUDP6 returns the IPv6 kernel/networking statistics for UDP datagrams -+// read from /proc/net/udp6. -+func (fs FS) NetUDP6() (NetUDP, error) { -+ return newNetUDP(fs.proc.Path("net/udp6")) -+} -+ -+// NetUDPSummary returns already computed statistics like the total queue lengths -+// for UDP datagrams read from /proc/net/udp. -+func (fs FS) NetUDPSummary() (*NetUDPSummary, error) { -+ return newNetUDPSummary(fs.proc.Path("net/udp")) -+} -+ -+// NetUDP6Summary returns already computed statistics like the total queue lengths -+// for UDP datagrams read from /proc/net/udp6. -+func (fs FS) NetUDP6Summary() (*NetUDPSummary, error) { -+ return newNetUDPSummary(fs.proc.Path("net/udp6")) -+} -+ -+// newNetUDP creates a new NetUDP{,6} from the contents of the given file. -+func newNetUDP(file string) (NetUDP, error) { -+ n, err := newNetIPSocket(file) -+ n1 := NetUDP(n) -+ return n1, err -+} -+ -+func newNetUDPSummary(file string) (*NetUDPSummary, error) { -+ n, err := newNetIPSocketSummary(file) -+ if n == nil { -+ return nil, err -+ } -+ n1 := NetUDPSummary(*n) -+ return &n1, err -+} -diff --git a/vendor/github.com/prometheus/procfs/net_unix.go b/vendor/github.com/prometheus/procfs/net_unix.go -new file mode 100755 -index 0000000..98aa8e1 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_unix.go -@@ -0,0 +1,257 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "fmt" -+ "io" -+ "os" -+ "strconv" -+ "strings" -+) -+ -+// For the proc file format details, -+// see https://elixir.bootlin.com/linux/v4.17/source/net/unix/af_unix.c#L2815 -+// and https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/net.h#L48. -+ -+// Constants for the various /proc/net/unix enumerations. -+// TODO: match against x/sys/unix or similar? -+const ( -+ netUnixTypeStream = 1 -+ netUnixTypeDgram = 2 -+ netUnixTypeSeqpacket = 5 -+ -+ netUnixFlagDefault = 0 -+ netUnixFlagListen = 1 << 16 -+ -+ netUnixStateUnconnected = 1 -+ netUnixStateConnecting = 2 -+ netUnixStateConnected = 3 -+ netUnixStateDisconnected = 4 -+) -+ -+// NetUNIXType is the type of the type field. -+type NetUNIXType uint64 -+ -+// NetUNIXFlags is the type of the flags field. -+type NetUNIXFlags uint64 -+ -+// NetUNIXState is the type of the state field. -+type NetUNIXState uint64 -+ -+// NetUNIXLine represents a line of /proc/net/unix. -+type NetUNIXLine struct { -+ KernelPtr string -+ RefCount uint64 -+ Protocol uint64 -+ Flags NetUNIXFlags -+ Type NetUNIXType -+ State NetUNIXState -+ Inode uint64 -+ Path string -+} -+ -+// NetUNIX holds the data read from /proc/net/unix. -+type NetUNIX struct { -+ Rows []*NetUNIXLine -+} -+ -+// NetUNIX returns data read from /proc/net/unix. -+func (fs FS) NetUNIX() (*NetUNIX, error) { -+ return readNetUNIX(fs.proc.Path("net/unix")) -+} -+ -+// readNetUNIX reads data in /proc/net/unix format from the specified file. -+func readNetUNIX(file string) (*NetUNIX, error) { -+ // This file could be quite large and a streaming read is desirable versus -+ // reading the entire contents at once. -+ f, err := os.Open(file) -+ if err != nil { -+ return nil, err -+ } -+ defer f.Close() -+ -+ return parseNetUNIX(f) -+} -+ -+// parseNetUNIX creates a NetUnix structure from the incoming stream. -+func parseNetUNIX(r io.Reader) (*NetUNIX, error) { -+ // Begin scanning by checking for the existence of Inode. -+ s := bufio.NewScanner(r) -+ s.Scan() -+ -+ // From the man page of proc(5), it does not contain an Inode field, -+ // but in actually it exists. This code works for both cases. -+ hasInode := strings.Contains(s.Text(), "Inode") -+ -+ // Expect a minimum number of fields, but Inode and Path are optional: -+ // Num RefCount Protocol Flags Type St Inode Path -+ minFields := 6 -+ if hasInode { -+ minFields++ -+ } -+ -+ var nu NetUNIX -+ for s.Scan() { -+ line := s.Text() -+ item, err := nu.parseLine(line, hasInode, minFields) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse /proc/net/unix data %q: %w", line, err) -+ } -+ -+ nu.Rows = append(nu.Rows, item) -+ } -+ -+ if err := s.Err(); err != nil { -+ return nil, fmt.Errorf("failed to scan /proc/net/unix data: %w", err) -+ } -+ -+ return &nu, nil -+} -+ -+func (u *NetUNIX) parseLine(line string, hasInode bool, min int) (*NetUNIXLine, error) { -+ fields := strings.Fields(line) -+ -+ l := len(fields) -+ if l < min { -+ return nil, fmt.Errorf("expected at least %d fields but got %d", min, l) -+ } -+ -+ // Field offsets are as follows: -+ // Num RefCount Protocol Flags Type St Inode Path -+ -+ kernelPtr := strings.TrimSuffix(fields[0], ":") -+ -+ users, err := u.parseUsers(fields[1]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse ref count %q: %w", fields[1], err) -+ } -+ -+ flags, err := u.parseFlags(fields[3]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse flags %q: %w", fields[3], err) -+ } -+ -+ typ, err := u.parseType(fields[4]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse type %q: %w", fields[4], err) -+ } -+ -+ state, err := u.parseState(fields[5]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse state %q: %w", fields[5], err) -+ } -+ -+ var inode uint64 -+ if hasInode { -+ inode, err = u.parseInode(fields[6]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse inode %q: %w", fields[6], err) -+ } -+ } -+ -+ n := &NetUNIXLine{ -+ KernelPtr: kernelPtr, -+ RefCount: users, -+ Type: typ, -+ Flags: flags, -+ State: state, -+ Inode: inode, -+ } -+ -+ // Path field is optional. -+ if l > min { -+ // Path occurs at either index 6 or 7 depending on whether inode is -+ // already present. -+ pathIdx := 7 -+ if !hasInode { -+ pathIdx-- -+ } -+ -+ n.Path = fields[pathIdx] -+ } -+ -+ return n, nil -+} -+ -+func (u NetUNIX) parseUsers(s string) (uint64, error) { -+ return strconv.ParseUint(s, 16, 32) -+} -+ -+func (u NetUNIX) parseType(s string) (NetUNIXType, error) { -+ typ, err := strconv.ParseUint(s, 16, 16) -+ if err != nil { -+ return 0, err -+ } -+ -+ return NetUNIXType(typ), nil -+} -+ -+func (u NetUNIX) parseFlags(s string) (NetUNIXFlags, error) { -+ flags, err := strconv.ParseUint(s, 16, 32) -+ if err != nil { -+ return 0, err -+ } -+ -+ return NetUNIXFlags(flags), nil -+} -+ -+func (u NetUNIX) parseState(s string) (NetUNIXState, error) { -+ st, err := strconv.ParseInt(s, 16, 8) -+ if err != nil { -+ return 0, err -+ } -+ -+ return NetUNIXState(st), nil -+} -+ -+func (u NetUNIX) parseInode(s string) (uint64, error) { -+ return strconv.ParseUint(s, 10, 64) -+} -+ -+func (t NetUNIXType) String() string { -+ switch t { -+ case netUnixTypeStream: -+ return "stream" -+ case netUnixTypeDgram: -+ return "dgram" -+ case netUnixTypeSeqpacket: -+ return "seqpacket" -+ } -+ return "unknown" -+} -+ -+func (f NetUNIXFlags) String() string { -+ switch f { -+ case netUnixFlagListen: -+ return "listen" -+ default: -+ return "default" -+ } -+} -+ -+func (s NetUNIXState) String() string { -+ switch s { -+ case netUnixStateUnconnected: -+ return "unconnected" -+ case netUnixStateConnecting: -+ return "connecting" -+ case netUnixStateConnected: -+ return "connected" -+ case netUnixStateDisconnected: -+ return "disconnected" -+ } -+ return "unknown" -+} -diff --git a/vendor/github.com/prometheus/procfs/net_xfrm.go b/vendor/github.com/prometheus/procfs/net_xfrm.go -new file mode 100755 -index 0000000..f9d9d24 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/net_xfrm.go -@@ -0,0 +1,189 @@ -+// Copyright 2017 Prometheus Team -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "fmt" -+ "os" -+ "strconv" -+ "strings" -+) -+ -+// XfrmStat models the contents of /proc/net/xfrm_stat. -+type XfrmStat struct { -+ // All errors which are not matched by other -+ XfrmInError int -+ // No buffer is left -+ XfrmInBufferError int -+ // Header Error -+ XfrmInHdrError int -+ // No state found -+ // i.e. either inbound SPI, address, or IPSEC protocol at SA is wrong -+ XfrmInNoStates int -+ // Transformation protocol specific error -+ // e.g. SA Key is wrong -+ XfrmInStateProtoError int -+ // Transformation mode specific error -+ XfrmInStateModeError int -+ // Sequence error -+ // e.g. sequence number is out of window -+ XfrmInStateSeqError int -+ // State is expired -+ XfrmInStateExpired int -+ // State has mismatch option -+ // e.g. UDP encapsulation type is mismatched -+ XfrmInStateMismatch int -+ // State is invalid -+ XfrmInStateInvalid int -+ // No matching template for states -+ // e.g. Inbound SAs are correct but SP rule is wrong -+ XfrmInTmplMismatch int -+ // No policy is found for states -+ // e.g. Inbound SAs are correct but no SP is found -+ XfrmInNoPols int -+ // Policy discards -+ XfrmInPolBlock int -+ // Policy error -+ XfrmInPolError int -+ // All errors which are not matched by others -+ XfrmOutError int -+ // Bundle generation error -+ XfrmOutBundleGenError int -+ // Bundle check error -+ XfrmOutBundleCheckError int -+ // No state was found -+ XfrmOutNoStates int -+ // Transformation protocol specific error -+ XfrmOutStateProtoError int -+ // Transportation mode specific error -+ XfrmOutStateModeError int -+ // Sequence error -+ // i.e sequence number overflow -+ XfrmOutStateSeqError int -+ // State is expired -+ XfrmOutStateExpired int -+ // Policy discads -+ XfrmOutPolBlock int -+ // Policy is dead -+ XfrmOutPolDead int -+ // Policy Error -+ XfrmOutPolError int -+ // Forward routing of a packet is not allowed -+ XfrmFwdHdrError int -+ // State is invalid, perhaps expired -+ XfrmOutStateInvalid int -+ // State hasn’t been fully acquired before use -+ XfrmAcquireError int -+} -+ -+// NewXfrmStat reads the xfrm_stat statistics. -+func NewXfrmStat() (XfrmStat, error) { -+ fs, err := NewFS(DefaultMountPoint) -+ if err != nil { -+ return XfrmStat{}, err -+ } -+ -+ return fs.NewXfrmStat() -+} -+ -+// NewXfrmStat reads the xfrm_stat statistics from the 'proc' filesystem. -+func (fs FS) NewXfrmStat() (XfrmStat, error) { -+ file, err := os.Open(fs.proc.Path("net/xfrm_stat")) -+ if err != nil { -+ return XfrmStat{}, err -+ } -+ defer file.Close() -+ -+ var ( -+ x = XfrmStat{} -+ s = bufio.NewScanner(file) -+ ) -+ -+ for s.Scan() { -+ fields := strings.Fields(s.Text()) -+ -+ if len(fields) != 2 { -+ return XfrmStat{}, fmt.Errorf("couldn't parse %q line %q", file.Name(), s.Text()) -+ } -+ -+ name := fields[0] -+ value, err := strconv.Atoi(fields[1]) -+ if err != nil { -+ return XfrmStat{}, err -+ } -+ -+ switch name { -+ case "XfrmInError": -+ x.XfrmInError = value -+ case "XfrmInBufferError": -+ x.XfrmInBufferError = value -+ case "XfrmInHdrError": -+ x.XfrmInHdrError = value -+ case "XfrmInNoStates": -+ x.XfrmInNoStates = value -+ case "XfrmInStateProtoError": -+ x.XfrmInStateProtoError = value -+ case "XfrmInStateModeError": -+ x.XfrmInStateModeError = value -+ case "XfrmInStateSeqError": -+ x.XfrmInStateSeqError = value -+ case "XfrmInStateExpired": -+ x.XfrmInStateExpired = value -+ case "XfrmInStateInvalid": -+ x.XfrmInStateInvalid = value -+ case "XfrmInTmplMismatch": -+ x.XfrmInTmplMismatch = value -+ case "XfrmInNoPols": -+ x.XfrmInNoPols = value -+ case "XfrmInPolBlock": -+ x.XfrmInPolBlock = value -+ case "XfrmInPolError": -+ x.XfrmInPolError = value -+ case "XfrmOutError": -+ x.XfrmOutError = value -+ case "XfrmInStateMismatch": -+ x.XfrmInStateMismatch = value -+ case "XfrmOutBundleGenError": -+ x.XfrmOutBundleGenError = value -+ case "XfrmOutBundleCheckError": -+ x.XfrmOutBundleCheckError = value -+ case "XfrmOutNoStates": -+ x.XfrmOutNoStates = value -+ case "XfrmOutStateProtoError": -+ x.XfrmOutStateProtoError = value -+ case "XfrmOutStateModeError": -+ x.XfrmOutStateModeError = value -+ case "XfrmOutStateSeqError": -+ x.XfrmOutStateSeqError = value -+ case "XfrmOutStateExpired": -+ x.XfrmOutStateExpired = value -+ case "XfrmOutPolBlock": -+ x.XfrmOutPolBlock = value -+ case "XfrmOutPolDead": -+ x.XfrmOutPolDead = value -+ case "XfrmOutPolError": -+ x.XfrmOutPolError = value -+ case "XfrmFwdHdrError": -+ x.XfrmFwdHdrError = value -+ case "XfrmOutStateInvalid": -+ x.XfrmOutStateInvalid = value -+ case "XfrmAcquireError": -+ x.XfrmAcquireError = value -+ } -+ -+ } -+ -+ return x, s.Err() -+} -diff --git a/vendor/github.com/prometheus/procfs/netstat.go b/vendor/github.com/prometheus/procfs/netstat.go -new file mode 100755 -index 0000000..dcea9c5 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/netstat.go -@@ -0,0 +1,68 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "os" -+ "path/filepath" -+ "strconv" -+ "strings" -+) -+ -+// NetStat contains statistics for all the counters from one file. -+type NetStat struct { -+ Stats map[string][]uint64 -+ Filename string -+} -+ -+// NetStat retrieves stats from `/proc/net/stat/`. -+func (fs FS) NetStat() ([]NetStat, error) { -+ statFiles, err := filepath.Glob(fs.proc.Path("net/stat/*")) -+ if err != nil { -+ return nil, err -+ } -+ -+ var netStatsTotal []NetStat -+ -+ for _, filePath := range statFiles { -+ file, err := os.Open(filePath) -+ if err != nil { -+ return nil, err -+ } -+ -+ netStatFile := NetStat{ -+ Filename: filepath.Base(filePath), -+ Stats: make(map[string][]uint64), -+ } -+ scanner := bufio.NewScanner(file) -+ scanner.Scan() -+ // First string is always a header for stats -+ var headers []string -+ headers = append(headers, strings.Fields(scanner.Text())...) -+ -+ // Other strings represent per-CPU counters -+ for scanner.Scan() { -+ for num, counter := range strings.Fields(scanner.Text()) { -+ value, err := strconv.ParseUint(counter, 16, 64) -+ if err != nil { -+ return nil, err -+ } -+ netStatFile.Stats[headers[num]] = append(netStatFile.Stats[headers[num]], value) -+ } -+ } -+ netStatsTotal = append(netStatsTotal, netStatFile) -+ } -+ return netStatsTotal, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/proc.go b/vendor/github.com/prometheus/procfs/proc.go -new file mode 100755 -index 0000000..c30223a ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc.go -@@ -0,0 +1,319 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bytes" -+ "fmt" -+ "io" -+ "os" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/fs" -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Proc provides information about a running process. -+type Proc struct { -+ // The process ID. -+ PID int -+ -+ fs fs.FS -+} -+ -+// Procs represents a list of Proc structs. -+type Procs []Proc -+ -+func (p Procs) Len() int { return len(p) } -+func (p Procs) Swap(i, j int) { p[i], p[j] = p[j], p[i] } -+func (p Procs) Less(i, j int) bool { return p[i].PID < p[j].PID } -+ -+// Self returns a process for the current process read via /proc/self. -+func Self() (Proc, error) { -+ fs, err := NewFS(DefaultMountPoint) -+ if err != nil { -+ return Proc{}, err -+ } -+ return fs.Self() -+} -+ -+// NewProc returns a process for the given pid under /proc. -+func NewProc(pid int) (Proc, error) { -+ fs, err := NewFS(DefaultMountPoint) -+ if err != nil { -+ return Proc{}, err -+ } -+ return fs.Proc(pid) -+} -+ -+// AllProcs returns a list of all currently available processes under /proc. -+func AllProcs() (Procs, error) { -+ fs, err := NewFS(DefaultMountPoint) -+ if err != nil { -+ return Procs{}, err -+ } -+ return fs.AllProcs() -+} -+ -+// Self returns a process for the current process. -+func (fs FS) Self() (Proc, error) { -+ p, err := os.Readlink(fs.proc.Path("self")) -+ if err != nil { -+ return Proc{}, err -+ } -+ pid, err := strconv.Atoi(strings.Replace(p, string(fs.proc), "", -1)) -+ if err != nil { -+ return Proc{}, err -+ } -+ return fs.Proc(pid) -+} -+ -+// NewProc returns a process for the given pid. -+// -+// Deprecated: Use fs.Proc() instead. -+func (fs FS) NewProc(pid int) (Proc, error) { -+ return fs.Proc(pid) -+} -+ -+// Proc returns a process for the given pid. -+func (fs FS) Proc(pid int) (Proc, error) { -+ if _, err := os.Stat(fs.proc.Path(strconv.Itoa(pid))); err != nil { -+ return Proc{}, err -+ } -+ return Proc{PID: pid, fs: fs.proc}, nil -+} -+ -+// AllProcs returns a list of all currently available processes. -+func (fs FS) AllProcs() (Procs, error) { -+ d, err := os.Open(fs.proc.Path()) -+ if err != nil { -+ return Procs{}, err -+ } -+ defer d.Close() -+ -+ names, err := d.Readdirnames(-1) -+ if err != nil { -+ return Procs{}, fmt.Errorf("could not read %q: %w", d.Name(), err) -+ } -+ -+ p := Procs{} -+ for _, n := range names { -+ pid, err := strconv.ParseInt(n, 10, 64) -+ if err != nil { -+ continue -+ } -+ p = append(p, Proc{PID: int(pid), fs: fs.proc}) -+ } -+ -+ return p, nil -+} -+ -+// CmdLine returns the command line of a process. -+func (p Proc) CmdLine() ([]string, error) { -+ data, err := util.ReadFileNoStat(p.path("cmdline")) -+ if err != nil { -+ return nil, err -+ } -+ -+ if len(data) < 1 { -+ return []string{}, nil -+ } -+ -+ return strings.Split(string(bytes.TrimRight(data, string("\x00"))), string(byte(0))), nil -+} -+ -+// Wchan returns the wchan (wait channel) of a process. -+func (p Proc) Wchan() (string, error) { -+ f, err := os.Open(p.path("wchan")) -+ if err != nil { -+ return "", err -+ } -+ defer f.Close() -+ -+ data, err := io.ReadAll(f) -+ if err != nil { -+ return "", err -+ } -+ -+ wchan := string(data) -+ if wchan == "" || wchan == "0" { -+ return "", nil -+ } -+ -+ return wchan, nil -+} -+ -+// Comm returns the command name of a process. -+func (p Proc) Comm() (string, error) { -+ data, err := util.ReadFileNoStat(p.path("comm")) -+ if err != nil { -+ return "", err -+ } -+ -+ return strings.TrimSpace(string(data)), nil -+} -+ -+// Executable returns the absolute path of the executable command of a process. -+func (p Proc) Executable() (string, error) { -+ exe, err := os.Readlink(p.path("exe")) -+ if os.IsNotExist(err) { -+ return "", nil -+ } -+ -+ return exe, err -+} -+ -+// Cwd returns the absolute path to the current working directory of the process. -+func (p Proc) Cwd() (string, error) { -+ wd, err := os.Readlink(p.path("cwd")) -+ if os.IsNotExist(err) { -+ return "", nil -+ } -+ -+ return wd, err -+} -+ -+// RootDir returns the absolute path to the process's root directory (as set by chroot). -+func (p Proc) RootDir() (string, error) { -+ rdir, err := os.Readlink(p.path("root")) -+ if os.IsNotExist(err) { -+ return "", nil -+ } -+ -+ return rdir, err -+} -+ -+// FileDescriptors returns the currently open file descriptors of a process. -+func (p Proc) FileDescriptors() ([]uintptr, error) { -+ names, err := p.fileDescriptors() -+ if err != nil { -+ return nil, err -+ } -+ -+ fds := make([]uintptr, len(names)) -+ for i, n := range names { -+ fd, err := strconv.ParseInt(n, 10, 32) -+ if err != nil { -+ return nil, fmt.Errorf("could not parse fd %q: %w", n, err) -+ } -+ fds[i] = uintptr(fd) -+ } -+ -+ return fds, nil -+} -+ -+// FileDescriptorTargets returns the targets of all file descriptors of a process. -+// If a file descriptor is not a symlink to a file (like a socket), that value will be the empty string. -+func (p Proc) FileDescriptorTargets() ([]string, error) { -+ names, err := p.fileDescriptors() -+ if err != nil { -+ return nil, err -+ } -+ -+ targets := make([]string, len(names)) -+ -+ for i, name := range names { -+ target, err := os.Readlink(p.path("fd", name)) -+ if err == nil { -+ targets[i] = target -+ } -+ } -+ -+ return targets, nil -+} -+ -+// FileDescriptorsLen returns the number of currently open file descriptors of -+// a process. -+func (p Proc) FileDescriptorsLen() (int, error) { -+ fds, err := p.fileDescriptors() -+ if err != nil { -+ return 0, err -+ } -+ -+ return len(fds), nil -+} -+ -+// MountStats retrieves statistics and configuration for mount points in a -+// process's namespace. -+func (p Proc) MountStats() ([]*Mount, error) { -+ f, err := os.Open(p.path("mountstats")) -+ if err != nil { -+ return nil, err -+ } -+ defer f.Close() -+ -+ return parseMountStats(f) -+} -+ -+// MountInfo retrieves mount information for mount points in a -+// process's namespace. -+// It supplies information missing in `/proc/self/mounts` and -+// fixes various other problems with that file too. -+func (p Proc) MountInfo() ([]*MountInfo, error) { -+ data, err := util.ReadFileNoStat(p.path("mountinfo")) -+ if err != nil { -+ return nil, err -+ } -+ return parseMountInfo(data) -+} -+ -+func (p Proc) fileDescriptors() ([]string, error) { -+ d, err := os.Open(p.path("fd")) -+ if err != nil { -+ return nil, err -+ } -+ defer d.Close() -+ -+ names, err := d.Readdirnames(-1) -+ if err != nil { -+ return nil, fmt.Errorf("could not read %q: %w", d.Name(), err) -+ } -+ -+ return names, nil -+} -+ -+func (p Proc) path(pa ...string) string { -+ return p.fs.Path(append([]string{strconv.Itoa(p.PID)}, pa...)...) -+} -+ -+// FileDescriptorsInfo retrieves information about all file descriptors of -+// the process. -+func (p Proc) FileDescriptorsInfo() (ProcFDInfos, error) { -+ names, err := p.fileDescriptors() -+ if err != nil { -+ return nil, err -+ } -+ -+ var fdinfos ProcFDInfos -+ -+ for _, n := range names { -+ fdinfo, err := p.FDInfo(n) -+ if err != nil { -+ continue -+ } -+ fdinfos = append(fdinfos, *fdinfo) -+ } -+ -+ return fdinfos, nil -+} -+ -+// Schedstat returns task scheduling information for the process. -+func (p Proc) Schedstat() (ProcSchedstat, error) { -+ contents, err := os.ReadFile(p.path("schedstat")) -+ if err != nil { -+ return ProcSchedstat{}, err -+ } -+ return parseProcSchedstat(string(contents)) -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_cgroup.go b/vendor/github.com/prometheus/procfs/proc_cgroup.go -new file mode 100755 -index 0000000..cca0332 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_cgroup.go -@@ -0,0 +1,98 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Cgroup models one line from /proc/[pid]/cgroup. Each Cgroup struct describes the the placement of a PID inside a -+// specific control hierarchy. The kernel has two cgroup APIs, v1 and v2. v1 has one hierarchy per available resource -+// controller, while v2 has one unified hierarchy shared by all controllers. Regardless of v1 or v2, all hierarchies -+// contain all running processes, so the question answerable with a Cgroup struct is 'where is this process in -+// this hierarchy' (where==what path on the specific cgroupfs). By prefixing this path with the mount point of -+// *this specific* hierarchy, you can locate the relevant pseudo-files needed to read/set the data for this PID -+// in this hierarchy -+// -+// Also see http://man7.org/linux/man-pages/man7/cgroups.7.html -+type Cgroup struct { -+ // HierarchyID that can be matched to a named hierarchy using /proc/cgroups. Cgroups V2 only has one -+ // hierarchy, so HierarchyID is always 0. For cgroups v1 this is a unique ID number -+ HierarchyID int -+ // Controllers using this hierarchy of processes. Controllers are also known as subsystems. For -+ // Cgroups V2 this may be empty, as all active controllers use the same hierarchy -+ Controllers []string -+ // Path of this control group, relative to the mount point of the cgroupfs representing this specific -+ // hierarchy -+ Path string -+} -+ -+// parseCgroupString parses each line of the /proc/[pid]/cgroup file -+// Line format is hierarchyID:[controller1,controller2]:path. -+func parseCgroupString(cgroupStr string) (*Cgroup, error) { -+ var err error -+ -+ fields := strings.SplitN(cgroupStr, ":", 3) -+ if len(fields) < 3 { -+ return nil, fmt.Errorf("at least 3 fields required, found %d fields in cgroup string: %s", len(fields), cgroupStr) -+ } -+ -+ cgroup := &Cgroup{ -+ Path: fields[2], -+ Controllers: nil, -+ } -+ cgroup.HierarchyID, err = strconv.Atoi(fields[0]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse hierarchy ID") -+ } -+ if fields[1] != "" { -+ ssNames := strings.Split(fields[1], ",") -+ cgroup.Controllers = append(cgroup.Controllers, ssNames...) -+ } -+ return cgroup, nil -+} -+ -+// parseCgroups reads each line of the /proc/[pid]/cgroup file. -+func parseCgroups(data []byte) ([]Cgroup, error) { -+ var cgroups []Cgroup -+ scanner := bufio.NewScanner(bytes.NewReader(data)) -+ for scanner.Scan() { -+ mountString := scanner.Text() -+ parsedMounts, err := parseCgroupString(mountString) -+ if err != nil { -+ return nil, err -+ } -+ cgroups = append(cgroups, *parsedMounts) -+ } -+ -+ err := scanner.Err() -+ return cgroups, err -+} -+ -+// Cgroups reads from /proc//cgroups and returns a []*Cgroup struct locating this PID in each process -+// control hierarchy running on this system. On every system (v1 and v2), all hierarchies contain all processes, -+// so the len of the returned struct is equal to the number of active hierarchies on this system. -+func (p Proc) Cgroups() ([]Cgroup, error) { -+ data, err := util.ReadFileNoStat(p.path("cgroup")) -+ if err != nil { -+ return nil, err -+ } -+ return parseCgroups(data) -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_cgroups.go b/vendor/github.com/prometheus/procfs/proc_cgroups.go -new file mode 100755 -index 0000000..24d4dce ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_cgroups.go -@@ -0,0 +1,98 @@ -+// Copyright 2021 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// CgroupSummary models one line from /proc/cgroups. -+// This file contains information about the controllers that are compiled into the kernel. -+// -+// Also see http://man7.org/linux/man-pages/man7/cgroups.7.html -+type CgroupSummary struct { -+ // The name of the controller. controller is also known as subsystem. -+ SubsysName string -+ // The unique ID of the cgroup hierarchy on which this controller is mounted. -+ Hierarchy int -+ // The number of control groups in this hierarchy using this controller. -+ Cgroups int -+ // This field contains the value 1 if this controller is enabled, or 0 if it has been disabled -+ Enabled int -+} -+ -+// parseCgroupSummary parses each line of the /proc/cgroup file -+// Line format is `subsys_name hierarchy num_cgroups enabled`. -+func parseCgroupSummaryString(CgroupSummaryStr string) (*CgroupSummary, error) { -+ var err error -+ -+ fields := strings.Fields(CgroupSummaryStr) -+ // require at least 4 fields -+ if len(fields) < 4 { -+ return nil, fmt.Errorf("at least 4 fields required, found %d fields in cgroup info string: %s", len(fields), CgroupSummaryStr) -+ } -+ -+ CgroupSummary := &CgroupSummary{ -+ SubsysName: fields[0], -+ } -+ CgroupSummary.Hierarchy, err = strconv.Atoi(fields[1]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse hierarchy ID") -+ } -+ CgroupSummary.Cgroups, err = strconv.Atoi(fields[2]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse Cgroup Num") -+ } -+ CgroupSummary.Enabled, err = strconv.Atoi(fields[3]) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse Enabled") -+ } -+ return CgroupSummary, nil -+} -+ -+// parseCgroupSummary reads each line of the /proc/cgroup file. -+func parseCgroupSummary(data []byte) ([]CgroupSummary, error) { -+ var CgroupSummarys []CgroupSummary -+ scanner := bufio.NewScanner(bytes.NewReader(data)) -+ for scanner.Scan() { -+ CgroupSummaryString := scanner.Text() -+ // ignore comment lines -+ if strings.HasPrefix(CgroupSummaryString, "#") { -+ continue -+ } -+ CgroupSummary, err := parseCgroupSummaryString(CgroupSummaryString) -+ if err != nil { -+ return nil, err -+ } -+ CgroupSummarys = append(CgroupSummarys, *CgroupSummary) -+ } -+ -+ err := scanner.Err() -+ return CgroupSummarys, err -+} -+ -+// CgroupSummarys returns information about current /proc/cgroups. -+func (fs FS) CgroupSummarys() ([]CgroupSummary, error) { -+ data, err := util.ReadFileNoStat(fs.proc.Path("cgroups")) -+ if err != nil { -+ return nil, err -+ } -+ return parseCgroupSummary(data) -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_environ.go b/vendor/github.com/prometheus/procfs/proc_environ.go -new file mode 100755 -index 0000000..57a8989 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_environ.go -@@ -0,0 +1,37 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Environ reads process environments from `/proc//environ`. -+func (p Proc) Environ() ([]string, error) { -+ environments := make([]string, 0) -+ -+ data, err := util.ReadFileNoStat(p.path("environ")) -+ if err != nil { -+ return environments, err -+ } -+ -+ environments = strings.Split(string(data), "\000") -+ if len(environments) > 0 { -+ environments = environments[:len(environments)-1] -+ } -+ -+ return environments, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_fdinfo.go b/vendor/github.com/prometheus/procfs/proc_fdinfo.go -new file mode 100755 -index 0000000..1bbdd4a ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_fdinfo.go -@@ -0,0 +1,132 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "regexp" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+var ( -+ rPos = regexp.MustCompile(`^pos:\s+(\d+)$`) -+ rFlags = regexp.MustCompile(`^flags:\s+(\d+)$`) -+ rMntID = regexp.MustCompile(`^mnt_id:\s+(\d+)$`) -+ rInotify = regexp.MustCompile(`^inotify`) -+ rInotifyParts = regexp.MustCompile(`^inotify\s+wd:([0-9a-f]+)\s+ino:([0-9a-f]+)\s+sdev:([0-9a-f]+)(?:\s+mask:([0-9a-f]+))?`) -+) -+ -+// ProcFDInfo contains represents file descriptor information. -+type ProcFDInfo struct { -+ // File descriptor -+ FD string -+ // File offset -+ Pos string -+ // File access mode and status flags -+ Flags string -+ // Mount point ID -+ MntID string -+ // List of inotify lines (structured) in the fdinfo file (kernel 3.8+ only) -+ InotifyInfos []InotifyInfo -+} -+ -+// FDInfo constructor. On kernels older than 3.8, InotifyInfos will always be empty. -+func (p Proc) FDInfo(fd string) (*ProcFDInfo, error) { -+ data, err := util.ReadFileNoStat(p.path("fdinfo", fd)) -+ if err != nil { -+ return nil, err -+ } -+ -+ var text, pos, flags, mntid string -+ var inotify []InotifyInfo -+ -+ scanner := bufio.NewScanner(bytes.NewReader(data)) -+ for scanner.Scan() { -+ text = scanner.Text() -+ if rPos.MatchString(text) { -+ pos = rPos.FindStringSubmatch(text)[1] -+ } else if rFlags.MatchString(text) { -+ flags = rFlags.FindStringSubmatch(text)[1] -+ } else if rMntID.MatchString(text) { -+ mntid = rMntID.FindStringSubmatch(text)[1] -+ } else if rInotify.MatchString(text) { -+ newInotify, err := parseInotifyInfo(text) -+ if err != nil { -+ return nil, err -+ } -+ inotify = append(inotify, *newInotify) -+ } -+ } -+ -+ i := &ProcFDInfo{ -+ FD: fd, -+ Pos: pos, -+ Flags: flags, -+ MntID: mntid, -+ InotifyInfos: inotify, -+ } -+ -+ return i, nil -+} -+ -+// InotifyInfo represents a single inotify line in the fdinfo file. -+type InotifyInfo struct { -+ // Watch descriptor number -+ WD string -+ // Inode number -+ Ino string -+ // Device ID -+ Sdev string -+ // Mask of events being monitored -+ Mask string -+} -+ -+// InotifyInfo constructor. Only available on kernel 3.8+. -+func parseInotifyInfo(line string) (*InotifyInfo, error) { -+ m := rInotifyParts.FindStringSubmatch(line) -+ if len(m) >= 4 { -+ var mask string -+ if len(m) == 5 { -+ mask = m[4] -+ } -+ i := &InotifyInfo{ -+ WD: m[1], -+ Ino: m[2], -+ Sdev: m[3], -+ Mask: mask, -+ } -+ return i, nil -+ } -+ return nil, fmt.Errorf("invalid inode entry: %q", line) -+} -+ -+// ProcFDInfos represents a list of ProcFDInfo structs. -+type ProcFDInfos []ProcFDInfo -+ -+func (p ProcFDInfos) Len() int { return len(p) } -+func (p ProcFDInfos) Swap(i, j int) { p[i], p[j] = p[j], p[i] } -+func (p ProcFDInfos) Less(i, j int) bool { return p[i].FD < p[j].FD } -+ -+// InotifyWatchLen returns the total number of inotify watches. -+func (p ProcFDInfos) InotifyWatchLen() (int, error) { -+ length := 0 -+ for _, f := range p { -+ length += len(f.InotifyInfos) -+ } -+ -+ return length, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_io.go b/vendor/github.com/prometheus/procfs/proc_io.go -new file mode 100755 -index 0000000..776f349 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_io.go -@@ -0,0 +1,59 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "fmt" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// ProcIO models the content of /proc//io. -+type ProcIO struct { -+ // Chars read. -+ RChar uint64 -+ // Chars written. -+ WChar uint64 -+ // Read syscalls. -+ SyscR uint64 -+ // Write syscalls. -+ SyscW uint64 -+ // Bytes read. -+ ReadBytes uint64 -+ // Bytes written. -+ WriteBytes uint64 -+ // Bytes written, but taking into account truncation. See -+ // Documentation/filesystems/proc.txt in the kernel sources for -+ // detailed explanation. -+ CancelledWriteBytes int64 -+} -+ -+// IO creates a new ProcIO instance from a given Proc instance. -+func (p Proc) IO() (ProcIO, error) { -+ pio := ProcIO{} -+ -+ data, err := util.ReadFileNoStat(p.path("io")) -+ if err != nil { -+ return pio, err -+ } -+ -+ ioFormat := "rchar: %d\nwchar: %d\nsyscr: %d\nsyscw: %d\n" + -+ "read_bytes: %d\nwrite_bytes: %d\n" + -+ "cancelled_write_bytes: %d\n" -+ -+ _, err = fmt.Sscanf(string(data), ioFormat, &pio.RChar, &pio.WChar, &pio.SyscR, -+ &pio.SyscW, &pio.ReadBytes, &pio.WriteBytes, &pio.CancelledWriteBytes) -+ -+ return pio, err -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_limits.go b/vendor/github.com/prometheus/procfs/proc_limits.go -new file mode 100755 -index 0000000..7a13881 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_limits.go -@@ -0,0 +1,160 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "fmt" -+ "os" -+ "regexp" -+ "strconv" -+) -+ -+// ProcLimits represents the soft limits for each of the process's resource -+// limits. For more information see getrlimit(2): -+// http://man7.org/linux/man-pages/man2/getrlimit.2.html. -+type ProcLimits struct { -+ // CPU time limit in seconds. -+ CPUTime uint64 -+ // Maximum size of files that the process may create. -+ FileSize uint64 -+ // Maximum size of the process's data segment (initialized data, -+ // uninitialized data, and heap). -+ DataSize uint64 -+ // Maximum size of the process stack in bytes. -+ StackSize uint64 -+ // Maximum size of a core file. -+ CoreFileSize uint64 -+ // Limit of the process's resident set in pages. -+ ResidentSet uint64 -+ // Maximum number of processes that can be created for the real user ID of -+ // the calling process. -+ Processes uint64 -+ // Value one greater than the maximum file descriptor number that can be -+ // opened by this process. -+ OpenFiles uint64 -+ // Maximum number of bytes of memory that may be locked into RAM. -+ LockedMemory uint64 -+ // Maximum size of the process's virtual memory address space in bytes. -+ AddressSpace uint64 -+ // Limit on the combined number of flock(2) locks and fcntl(2) leases that -+ // this process may establish. -+ FileLocks uint64 -+ // Limit of signals that may be queued for the real user ID of the calling -+ // process. -+ PendingSignals uint64 -+ // Limit on the number of bytes that can be allocated for POSIX message -+ // queues for the real user ID of the calling process. -+ MsqqueueSize uint64 -+ // Limit of the nice priority set using setpriority(2) or nice(2). -+ NicePriority uint64 -+ // Limit of the real-time priority set using sched_setscheduler(2) or -+ // sched_setparam(2). -+ RealtimePriority uint64 -+ // Limit (in microseconds) on the amount of CPU time that a process -+ // scheduled under a real-time scheduling policy may consume without making -+ // a blocking system call. -+ RealtimeTimeout uint64 -+} -+ -+const ( -+ limitsFields = 4 -+ limitsUnlimited = "unlimited" -+) -+ -+var ( -+ limitsMatch = regexp.MustCompile(`(Max \w+\s{0,1}?\w*\s{0,1}\w*)\s{2,}(\w+)\s+(\w+)`) -+) -+ -+// NewLimits returns the current soft limits of the process. -+// -+// Deprecated: Use p.Limits() instead. -+func (p Proc) NewLimits() (ProcLimits, error) { -+ return p.Limits() -+} -+ -+// Limits returns the current soft limits of the process. -+func (p Proc) Limits() (ProcLimits, error) { -+ f, err := os.Open(p.path("limits")) -+ if err != nil { -+ return ProcLimits{}, err -+ } -+ defer f.Close() -+ -+ var ( -+ l = ProcLimits{} -+ s = bufio.NewScanner(f) -+ ) -+ -+ s.Scan() // Skip limits header -+ -+ for s.Scan() { -+ //fields := limitsMatch.Split(s.Text(), limitsFields) -+ fields := limitsMatch.FindStringSubmatch(s.Text()) -+ if len(fields) != limitsFields { -+ return ProcLimits{}, fmt.Errorf("couldn't parse %q line %q", f.Name(), s.Text()) -+ } -+ -+ switch fields[1] { -+ case "Max cpu time": -+ l.CPUTime, err = parseUint(fields[2]) -+ case "Max file size": -+ l.FileSize, err = parseUint(fields[2]) -+ case "Max data size": -+ l.DataSize, err = parseUint(fields[2]) -+ case "Max stack size": -+ l.StackSize, err = parseUint(fields[2]) -+ case "Max core file size": -+ l.CoreFileSize, err = parseUint(fields[2]) -+ case "Max resident set": -+ l.ResidentSet, err = parseUint(fields[2]) -+ case "Max processes": -+ l.Processes, err = parseUint(fields[2]) -+ case "Max open files": -+ l.OpenFiles, err = parseUint(fields[2]) -+ case "Max locked memory": -+ l.LockedMemory, err = parseUint(fields[2]) -+ case "Max address space": -+ l.AddressSpace, err = parseUint(fields[2]) -+ case "Max file locks": -+ l.FileLocks, err = parseUint(fields[2]) -+ case "Max pending signals": -+ l.PendingSignals, err = parseUint(fields[2]) -+ case "Max msgqueue size": -+ l.MsqqueueSize, err = parseUint(fields[2]) -+ case "Max nice priority": -+ l.NicePriority, err = parseUint(fields[2]) -+ case "Max realtime priority": -+ l.RealtimePriority, err = parseUint(fields[2]) -+ case "Max realtime timeout": -+ l.RealtimeTimeout, err = parseUint(fields[2]) -+ } -+ if err != nil { -+ return ProcLimits{}, err -+ } -+ } -+ -+ return l, s.Err() -+} -+ -+func parseUint(s string) (uint64, error) { -+ if s == limitsUnlimited { -+ return 18446744073709551615, nil -+ } -+ i, err := strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return 0, fmt.Errorf("couldn't parse value %q: %w", s, err) -+ } -+ return i, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_maps.go b/vendor/github.com/prometheus/procfs/proc_maps.go -new file mode 100755 -index 0000000..f1bcbf3 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_maps.go -@@ -0,0 +1,211 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) && !js -+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris -+// +build !js -+ -+package procfs -+ -+import ( -+ "bufio" -+ "fmt" -+ "os" -+ "strconv" -+ "strings" -+ -+ "golang.org/x/sys/unix" -+) -+ -+// ProcMapPermissions contains permission settings read from `/proc/[pid]/maps`. -+type ProcMapPermissions struct { -+ // mapping has the [R]ead flag set -+ Read bool -+ // mapping has the [W]rite flag set -+ Write bool -+ // mapping has the [X]ecutable flag set -+ Execute bool -+ // mapping has the [S]hared flag set -+ Shared bool -+ // mapping is marked as [P]rivate (copy on write) -+ Private bool -+} -+ -+// ProcMap contains the process memory-mappings of the process -+// read from `/proc/[pid]/maps`. -+type ProcMap struct { -+ // The start address of current mapping. -+ StartAddr uintptr -+ // The end address of the current mapping -+ EndAddr uintptr -+ // The permissions for this mapping -+ Perms *ProcMapPermissions -+ // The current offset into the file/fd (e.g., shared libs) -+ Offset int64 -+ // Device owner of this mapping (major:minor) in Mkdev format. -+ Dev uint64 -+ // The inode of the device above -+ Inode uint64 -+ // The file or psuedofile (or empty==anonymous) -+ Pathname string -+} -+ -+// parseDevice parses the device token of a line and converts it to a dev_t -+// (mkdev) like structure. -+func parseDevice(s string) (uint64, error) { -+ toks := strings.Split(s, ":") -+ if len(toks) < 2 { -+ return 0, fmt.Errorf("unexpected number of fields") -+ } -+ -+ major, err := strconv.ParseUint(toks[0], 16, 0) -+ if err != nil { -+ return 0, err -+ } -+ -+ minor, err := strconv.ParseUint(toks[1], 16, 0) -+ if err != nil { -+ return 0, err -+ } -+ -+ return unix.Mkdev(uint32(major), uint32(minor)), nil -+} -+ -+// parseAddress converts a hex-string to a uintptr. -+func parseAddress(s string) (uintptr, error) { -+ a, err := strconv.ParseUint(s, 16, 0) -+ if err != nil { -+ return 0, err -+ } -+ -+ return uintptr(a), nil -+} -+ -+// parseAddresses parses the start-end address. -+func parseAddresses(s string) (uintptr, uintptr, error) { -+ toks := strings.Split(s, "-") -+ if len(toks) < 2 { -+ return 0, 0, fmt.Errorf("invalid address") -+ } -+ -+ saddr, err := parseAddress(toks[0]) -+ if err != nil { -+ return 0, 0, err -+ } -+ -+ eaddr, err := parseAddress(toks[1]) -+ if err != nil { -+ return 0, 0, err -+ } -+ -+ return saddr, eaddr, nil -+} -+ -+// parsePermissions parses a token and returns any that are set. -+func parsePermissions(s string) (*ProcMapPermissions, error) { -+ if len(s) < 4 { -+ return nil, fmt.Errorf("invalid permissions token") -+ } -+ -+ perms := ProcMapPermissions{} -+ for _, ch := range s { -+ switch ch { -+ case 'r': -+ perms.Read = true -+ case 'w': -+ perms.Write = true -+ case 'x': -+ perms.Execute = true -+ case 'p': -+ perms.Private = true -+ case 's': -+ perms.Shared = true -+ } -+ } -+ -+ return &perms, nil -+} -+ -+// parseProcMap will attempt to parse a single line within a proc/[pid]/maps -+// buffer. -+func parseProcMap(text string) (*ProcMap, error) { -+ fields := strings.Fields(text) -+ if len(fields) < 5 { -+ return nil, fmt.Errorf("truncated procmap entry") -+ } -+ -+ saddr, eaddr, err := parseAddresses(fields[0]) -+ if err != nil { -+ return nil, err -+ } -+ -+ perms, err := parsePermissions(fields[1]) -+ if err != nil { -+ return nil, err -+ } -+ -+ offset, err := strconv.ParseInt(fields[2], 16, 0) -+ if err != nil { -+ return nil, err -+ } -+ -+ device, err := parseDevice(fields[3]) -+ if err != nil { -+ return nil, err -+ } -+ -+ inode, err := strconv.ParseUint(fields[4], 10, 0) -+ if err != nil { -+ return nil, err -+ } -+ -+ pathname := "" -+ -+ if len(fields) >= 5 { -+ pathname = strings.Join(fields[5:], " ") -+ } -+ -+ return &ProcMap{ -+ StartAddr: saddr, -+ EndAddr: eaddr, -+ Perms: perms, -+ Offset: offset, -+ Dev: device, -+ Inode: inode, -+ Pathname: pathname, -+ }, nil -+} -+ -+// ProcMaps reads from /proc/[pid]/maps to get the memory-mappings of the -+// process. -+func (p Proc) ProcMaps() ([]*ProcMap, error) { -+ file, err := os.Open(p.path("maps")) -+ if err != nil { -+ return nil, err -+ } -+ defer file.Close() -+ -+ maps := []*ProcMap{} -+ scan := bufio.NewScanner(file) -+ -+ for scan.Scan() { -+ m, err := parseProcMap(scan.Text()) -+ if err != nil { -+ return nil, err -+ } -+ -+ maps = append(maps, m) -+ } -+ -+ return maps, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_netstat.go b/vendor/github.com/prometheus/procfs/proc_netstat.go -new file mode 100755 -index 0000000..48b5238 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_netstat.go -@@ -0,0 +1,440 @@ -+// Copyright 2022 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// ProcNetstat models the content of /proc//net/netstat. -+type ProcNetstat struct { -+ // The process ID. -+ PID int -+ TcpExt -+ IpExt -+} -+ -+type TcpExt struct { // nolint:revive -+ SyncookiesSent float64 -+ SyncookiesRecv float64 -+ SyncookiesFailed float64 -+ EmbryonicRsts float64 -+ PruneCalled float64 -+ RcvPruned float64 -+ OfoPruned float64 -+ OutOfWindowIcmps float64 -+ LockDroppedIcmps float64 -+ ArpFilter float64 -+ TW float64 -+ TWRecycled float64 -+ TWKilled float64 -+ PAWSActive float64 -+ PAWSEstab float64 -+ DelayedACKs float64 -+ DelayedACKLocked float64 -+ DelayedACKLost float64 -+ ListenOverflows float64 -+ ListenDrops float64 -+ TCPHPHits float64 -+ TCPPureAcks float64 -+ TCPHPAcks float64 -+ TCPRenoRecovery float64 -+ TCPSackRecovery float64 -+ TCPSACKReneging float64 -+ TCPSACKReorder float64 -+ TCPRenoReorder float64 -+ TCPTSReorder float64 -+ TCPFullUndo float64 -+ TCPPartialUndo float64 -+ TCPDSACKUndo float64 -+ TCPLossUndo float64 -+ TCPLostRetransmit float64 -+ TCPRenoFailures float64 -+ TCPSackFailures float64 -+ TCPLossFailures float64 -+ TCPFastRetrans float64 -+ TCPSlowStartRetrans float64 -+ TCPTimeouts float64 -+ TCPLossProbes float64 -+ TCPLossProbeRecovery float64 -+ TCPRenoRecoveryFail float64 -+ TCPSackRecoveryFail float64 -+ TCPRcvCollapsed float64 -+ TCPDSACKOldSent float64 -+ TCPDSACKOfoSent float64 -+ TCPDSACKRecv float64 -+ TCPDSACKOfoRecv float64 -+ TCPAbortOnData float64 -+ TCPAbortOnClose float64 -+ TCPAbortOnMemory float64 -+ TCPAbortOnTimeout float64 -+ TCPAbortOnLinger float64 -+ TCPAbortFailed float64 -+ TCPMemoryPressures float64 -+ TCPMemoryPressuresChrono float64 -+ TCPSACKDiscard float64 -+ TCPDSACKIgnoredOld float64 -+ TCPDSACKIgnoredNoUndo float64 -+ TCPSpuriousRTOs float64 -+ TCPMD5NotFound float64 -+ TCPMD5Unexpected float64 -+ TCPMD5Failure float64 -+ TCPSackShifted float64 -+ TCPSackMerged float64 -+ TCPSackShiftFallback float64 -+ TCPBacklogDrop float64 -+ PFMemallocDrop float64 -+ TCPMinTTLDrop float64 -+ TCPDeferAcceptDrop float64 -+ IPReversePathFilter float64 -+ TCPTimeWaitOverflow float64 -+ TCPReqQFullDoCookies float64 -+ TCPReqQFullDrop float64 -+ TCPRetransFail float64 -+ TCPRcvCoalesce float64 -+ TCPOFOQueue float64 -+ TCPOFODrop float64 -+ TCPOFOMerge float64 -+ TCPChallengeACK float64 -+ TCPSYNChallenge float64 -+ TCPFastOpenActive float64 -+ TCPFastOpenActiveFail float64 -+ TCPFastOpenPassive float64 -+ TCPFastOpenPassiveFail float64 -+ TCPFastOpenListenOverflow float64 -+ TCPFastOpenCookieReqd float64 -+ TCPFastOpenBlackhole float64 -+ TCPSpuriousRtxHostQueues float64 -+ BusyPollRxPackets float64 -+ TCPAutoCorking float64 -+ TCPFromZeroWindowAdv float64 -+ TCPToZeroWindowAdv float64 -+ TCPWantZeroWindowAdv float64 -+ TCPSynRetrans float64 -+ TCPOrigDataSent float64 -+ TCPHystartTrainDetect float64 -+ TCPHystartTrainCwnd float64 -+ TCPHystartDelayDetect float64 -+ TCPHystartDelayCwnd float64 -+ TCPACKSkippedSynRecv float64 -+ TCPACKSkippedPAWS float64 -+ TCPACKSkippedSeq float64 -+ TCPACKSkippedFinWait2 float64 -+ TCPACKSkippedTimeWait float64 -+ TCPACKSkippedChallenge float64 -+ TCPWinProbe float64 -+ TCPKeepAlive float64 -+ TCPMTUPFail float64 -+ TCPMTUPSuccess float64 -+ TCPWqueueTooBig float64 -+} -+ -+type IpExt struct { // nolint:revive -+ InNoRoutes float64 -+ InTruncatedPkts float64 -+ InMcastPkts float64 -+ OutMcastPkts float64 -+ InBcastPkts float64 -+ OutBcastPkts float64 -+ InOctets float64 -+ OutOctets float64 -+ InMcastOctets float64 -+ OutMcastOctets float64 -+ InBcastOctets float64 -+ OutBcastOctets float64 -+ InCsumErrors float64 -+ InNoECTPkts float64 -+ InECT1Pkts float64 -+ InECT0Pkts float64 -+ InCEPkts float64 -+ ReasmOverlaps float64 -+} -+ -+func (p Proc) Netstat() (ProcNetstat, error) { -+ filename := p.path("net/netstat") -+ data, err := util.ReadFileNoStat(filename) -+ if err != nil { -+ return ProcNetstat{PID: p.PID}, err -+ } -+ procNetstat, err := parseNetstat(bytes.NewReader(data), filename) -+ procNetstat.PID = p.PID -+ return procNetstat, err -+} -+ -+// parseNetstat parses the metrics from proc//net/netstat file -+// and returns a ProcNetstat structure. -+func parseNetstat(r io.Reader, fileName string) (ProcNetstat, error) { -+ var ( -+ scanner = bufio.NewScanner(r) -+ procNetstat = ProcNetstat{} -+ ) -+ -+ for scanner.Scan() { -+ nameParts := strings.Split(scanner.Text(), " ") -+ scanner.Scan() -+ valueParts := strings.Split(scanner.Text(), " ") -+ // Remove trailing :. -+ protocol := strings.TrimSuffix(nameParts[0], ":") -+ if len(nameParts) != len(valueParts) { -+ return procNetstat, fmt.Errorf("mismatch field count mismatch in %s: %s", -+ fileName, protocol) -+ } -+ for i := 1; i < len(nameParts); i++ { -+ value, err := strconv.ParseFloat(valueParts[i], 64) -+ if err != nil { -+ return procNetstat, err -+ } -+ key := nameParts[i] -+ -+ switch protocol { -+ case "TcpExt": -+ switch key { -+ case "SyncookiesSent": -+ procNetstat.TcpExt.SyncookiesSent = value -+ case "SyncookiesRecv": -+ procNetstat.TcpExt.SyncookiesRecv = value -+ case "SyncookiesFailed": -+ procNetstat.TcpExt.SyncookiesFailed = value -+ case "EmbryonicRsts": -+ procNetstat.TcpExt.EmbryonicRsts = value -+ case "PruneCalled": -+ procNetstat.TcpExt.PruneCalled = value -+ case "RcvPruned": -+ procNetstat.TcpExt.RcvPruned = value -+ case "OfoPruned": -+ procNetstat.TcpExt.OfoPruned = value -+ case "OutOfWindowIcmps": -+ procNetstat.TcpExt.OutOfWindowIcmps = value -+ case "LockDroppedIcmps": -+ procNetstat.TcpExt.LockDroppedIcmps = value -+ case "ArpFilter": -+ procNetstat.TcpExt.ArpFilter = value -+ case "TW": -+ procNetstat.TcpExt.TW = value -+ case "TWRecycled": -+ procNetstat.TcpExt.TWRecycled = value -+ case "TWKilled": -+ procNetstat.TcpExt.TWKilled = value -+ case "PAWSActive": -+ procNetstat.TcpExt.PAWSActive = value -+ case "PAWSEstab": -+ procNetstat.TcpExt.PAWSEstab = value -+ case "DelayedACKs": -+ procNetstat.TcpExt.DelayedACKs = value -+ case "DelayedACKLocked": -+ procNetstat.TcpExt.DelayedACKLocked = value -+ case "DelayedACKLost": -+ procNetstat.TcpExt.DelayedACKLost = value -+ case "ListenOverflows": -+ procNetstat.TcpExt.ListenOverflows = value -+ case "ListenDrops": -+ procNetstat.TcpExt.ListenDrops = value -+ case "TCPHPHits": -+ procNetstat.TcpExt.TCPHPHits = value -+ case "TCPPureAcks": -+ procNetstat.TcpExt.TCPPureAcks = value -+ case "TCPHPAcks": -+ procNetstat.TcpExt.TCPHPAcks = value -+ case "TCPRenoRecovery": -+ procNetstat.TcpExt.TCPRenoRecovery = value -+ case "TCPSackRecovery": -+ procNetstat.TcpExt.TCPSackRecovery = value -+ case "TCPSACKReneging": -+ procNetstat.TcpExt.TCPSACKReneging = value -+ case "TCPSACKReorder": -+ procNetstat.TcpExt.TCPSACKReorder = value -+ case "TCPRenoReorder": -+ procNetstat.TcpExt.TCPRenoReorder = value -+ case "TCPTSReorder": -+ procNetstat.TcpExt.TCPTSReorder = value -+ case "TCPFullUndo": -+ procNetstat.TcpExt.TCPFullUndo = value -+ case "TCPPartialUndo": -+ procNetstat.TcpExt.TCPPartialUndo = value -+ case "TCPDSACKUndo": -+ procNetstat.TcpExt.TCPDSACKUndo = value -+ case "TCPLossUndo": -+ procNetstat.TcpExt.TCPLossUndo = value -+ case "TCPLostRetransmit": -+ procNetstat.TcpExt.TCPLostRetransmit = value -+ case "TCPRenoFailures": -+ procNetstat.TcpExt.TCPRenoFailures = value -+ case "TCPSackFailures": -+ procNetstat.TcpExt.TCPSackFailures = value -+ case "TCPLossFailures": -+ procNetstat.TcpExt.TCPLossFailures = value -+ case "TCPFastRetrans": -+ procNetstat.TcpExt.TCPFastRetrans = value -+ case "TCPSlowStartRetrans": -+ procNetstat.TcpExt.TCPSlowStartRetrans = value -+ case "TCPTimeouts": -+ procNetstat.TcpExt.TCPTimeouts = value -+ case "TCPLossProbes": -+ procNetstat.TcpExt.TCPLossProbes = value -+ case "TCPLossProbeRecovery": -+ procNetstat.TcpExt.TCPLossProbeRecovery = value -+ case "TCPRenoRecoveryFail": -+ procNetstat.TcpExt.TCPRenoRecoveryFail = value -+ case "TCPSackRecoveryFail": -+ procNetstat.TcpExt.TCPSackRecoveryFail = value -+ case "TCPRcvCollapsed": -+ procNetstat.TcpExt.TCPRcvCollapsed = value -+ case "TCPDSACKOldSent": -+ procNetstat.TcpExt.TCPDSACKOldSent = value -+ case "TCPDSACKOfoSent": -+ procNetstat.TcpExt.TCPDSACKOfoSent = value -+ case "TCPDSACKRecv": -+ procNetstat.TcpExt.TCPDSACKRecv = value -+ case "TCPDSACKOfoRecv": -+ procNetstat.TcpExt.TCPDSACKOfoRecv = value -+ case "TCPAbortOnData": -+ procNetstat.TcpExt.TCPAbortOnData = value -+ case "TCPAbortOnClose": -+ procNetstat.TcpExt.TCPAbortOnClose = value -+ case "TCPDeferAcceptDrop": -+ procNetstat.TcpExt.TCPDeferAcceptDrop = value -+ case "IPReversePathFilter": -+ procNetstat.TcpExt.IPReversePathFilter = value -+ case "TCPTimeWaitOverflow": -+ procNetstat.TcpExt.TCPTimeWaitOverflow = value -+ case "TCPReqQFullDoCookies": -+ procNetstat.TcpExt.TCPReqQFullDoCookies = value -+ case "TCPReqQFullDrop": -+ procNetstat.TcpExt.TCPReqQFullDrop = value -+ case "TCPRetransFail": -+ procNetstat.TcpExt.TCPRetransFail = value -+ case "TCPRcvCoalesce": -+ procNetstat.TcpExt.TCPRcvCoalesce = value -+ case "TCPOFOQueue": -+ procNetstat.TcpExt.TCPOFOQueue = value -+ case "TCPOFODrop": -+ procNetstat.TcpExt.TCPOFODrop = value -+ case "TCPOFOMerge": -+ procNetstat.TcpExt.TCPOFOMerge = value -+ case "TCPChallengeACK": -+ procNetstat.TcpExt.TCPChallengeACK = value -+ case "TCPSYNChallenge": -+ procNetstat.TcpExt.TCPSYNChallenge = value -+ case "TCPFastOpenActive": -+ procNetstat.TcpExt.TCPFastOpenActive = value -+ case "TCPFastOpenActiveFail": -+ procNetstat.TcpExt.TCPFastOpenActiveFail = value -+ case "TCPFastOpenPassive": -+ procNetstat.TcpExt.TCPFastOpenPassive = value -+ case "TCPFastOpenPassiveFail": -+ procNetstat.TcpExt.TCPFastOpenPassiveFail = value -+ case "TCPFastOpenListenOverflow": -+ procNetstat.TcpExt.TCPFastOpenListenOverflow = value -+ case "TCPFastOpenCookieReqd": -+ procNetstat.TcpExt.TCPFastOpenCookieReqd = value -+ case "TCPFastOpenBlackhole": -+ procNetstat.TcpExt.TCPFastOpenBlackhole = value -+ case "TCPSpuriousRtxHostQueues": -+ procNetstat.TcpExt.TCPSpuriousRtxHostQueues = value -+ case "BusyPollRxPackets": -+ procNetstat.TcpExt.BusyPollRxPackets = value -+ case "TCPAutoCorking": -+ procNetstat.TcpExt.TCPAutoCorking = value -+ case "TCPFromZeroWindowAdv": -+ procNetstat.TcpExt.TCPFromZeroWindowAdv = value -+ case "TCPToZeroWindowAdv": -+ procNetstat.TcpExt.TCPToZeroWindowAdv = value -+ case "TCPWantZeroWindowAdv": -+ procNetstat.TcpExt.TCPWantZeroWindowAdv = value -+ case "TCPSynRetrans": -+ procNetstat.TcpExt.TCPSynRetrans = value -+ case "TCPOrigDataSent": -+ procNetstat.TcpExt.TCPOrigDataSent = value -+ case "TCPHystartTrainDetect": -+ procNetstat.TcpExt.TCPHystartTrainDetect = value -+ case "TCPHystartTrainCwnd": -+ procNetstat.TcpExt.TCPHystartTrainCwnd = value -+ case "TCPHystartDelayDetect": -+ procNetstat.TcpExt.TCPHystartDelayDetect = value -+ case "TCPHystartDelayCwnd": -+ procNetstat.TcpExt.TCPHystartDelayCwnd = value -+ case "TCPACKSkippedSynRecv": -+ procNetstat.TcpExt.TCPACKSkippedSynRecv = value -+ case "TCPACKSkippedPAWS": -+ procNetstat.TcpExt.TCPACKSkippedPAWS = value -+ case "TCPACKSkippedSeq": -+ procNetstat.TcpExt.TCPACKSkippedSeq = value -+ case "TCPACKSkippedFinWait2": -+ procNetstat.TcpExt.TCPACKSkippedFinWait2 = value -+ case "TCPACKSkippedTimeWait": -+ procNetstat.TcpExt.TCPACKSkippedTimeWait = value -+ case "TCPACKSkippedChallenge": -+ procNetstat.TcpExt.TCPACKSkippedChallenge = value -+ case "TCPWinProbe": -+ procNetstat.TcpExt.TCPWinProbe = value -+ case "TCPKeepAlive": -+ procNetstat.TcpExt.TCPKeepAlive = value -+ case "TCPMTUPFail": -+ procNetstat.TcpExt.TCPMTUPFail = value -+ case "TCPMTUPSuccess": -+ procNetstat.TcpExt.TCPMTUPSuccess = value -+ case "TCPWqueueTooBig": -+ procNetstat.TcpExt.TCPWqueueTooBig = value -+ } -+ case "IpExt": -+ switch key { -+ case "InNoRoutes": -+ procNetstat.IpExt.InNoRoutes = value -+ case "InTruncatedPkts": -+ procNetstat.IpExt.InTruncatedPkts = value -+ case "InMcastPkts": -+ procNetstat.IpExt.InMcastPkts = value -+ case "OutMcastPkts": -+ procNetstat.IpExt.OutMcastPkts = value -+ case "InBcastPkts": -+ procNetstat.IpExt.InBcastPkts = value -+ case "OutBcastPkts": -+ procNetstat.IpExt.OutBcastPkts = value -+ case "InOctets": -+ procNetstat.IpExt.InOctets = value -+ case "OutOctets": -+ procNetstat.IpExt.OutOctets = value -+ case "InMcastOctets": -+ procNetstat.IpExt.InMcastOctets = value -+ case "OutMcastOctets": -+ procNetstat.IpExt.OutMcastOctets = value -+ case "InBcastOctets": -+ procNetstat.IpExt.InBcastOctets = value -+ case "OutBcastOctets": -+ procNetstat.IpExt.OutBcastOctets = value -+ case "InCsumErrors": -+ procNetstat.IpExt.InCsumErrors = value -+ case "InNoECTPkts": -+ procNetstat.IpExt.InNoECTPkts = value -+ case "InECT1Pkts": -+ procNetstat.IpExt.InECT1Pkts = value -+ case "InECT0Pkts": -+ procNetstat.IpExt.InECT0Pkts = value -+ case "InCEPkts": -+ procNetstat.IpExt.InCEPkts = value -+ case "ReasmOverlaps": -+ procNetstat.IpExt.ReasmOverlaps = value -+ } -+ } -+ } -+ } -+ return procNetstat, scanner.Err() -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_ns.go b/vendor/github.com/prometheus/procfs/proc_ns.go -new file mode 100755 -index 0000000..391b4cb ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_ns.go -@@ -0,0 +1,68 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "fmt" -+ "os" -+ "strconv" -+ "strings" -+) -+ -+// Namespace represents a single namespace of a process. -+type Namespace struct { -+ Type string // Namespace type. -+ Inode uint32 // Inode number of the namespace. If two processes are in the same namespace their inodes will match. -+} -+ -+// Namespaces contains all of the namespaces that the process is contained in. -+type Namespaces map[string]Namespace -+ -+// Namespaces reads from /proc//ns/* to get the namespaces of which the -+// process is a member. -+func (p Proc) Namespaces() (Namespaces, error) { -+ d, err := os.Open(p.path("ns")) -+ if err != nil { -+ return nil, err -+ } -+ defer d.Close() -+ -+ names, err := d.Readdirnames(-1) -+ if err != nil { -+ return nil, fmt.Errorf("failed to read contents of ns dir: %w", err) -+ } -+ -+ ns := make(Namespaces, len(names)) -+ for _, name := range names { -+ target, err := os.Readlink(p.path("ns", name)) -+ if err != nil { -+ return nil, err -+ } -+ -+ fields := strings.SplitN(target, ":", 2) -+ if len(fields) != 2 { -+ return nil, fmt.Errorf("failed to parse namespace type and inode from %q", target) -+ } -+ -+ typ := fields[0] -+ inode, err := strconv.ParseUint(strings.Trim(fields[1], "[]"), 10, 32) -+ if err != nil { -+ return nil, fmt.Errorf("failed to parse inode from %q: %w", fields[1], err) -+ } -+ -+ ns[name] = Namespace{typ, uint32(inode)} -+ } -+ -+ return ns, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_psi.go b/vendor/github.com/prometheus/procfs/proc_psi.go -new file mode 100755 -index 0000000..a68fe15 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_psi.go -@@ -0,0 +1,102 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+// The PSI / pressure interface is described at -+// https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/accounting/psi.txt -+// Each resource (cpu, io, memory, ...) is exposed as a single file. -+// Each file may contain up to two lines, one for "some" pressure and one for "full" pressure. -+// Each line contains several averages (over n seconds) and a total in µs. -+// -+// Example io pressure file: -+// > some avg10=0.06 avg60=0.21 avg300=0.99 total=8537362 -+// > full avg10=0.00 avg60=0.13 avg300=0.96 total=8183134 -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+const lineFormat = "avg10=%f avg60=%f avg300=%f total=%d" -+ -+// PSILine is a single line of values as returned by `/proc/pressure/*`. -+// -+// The Avg entries are averages over n seconds, as a percentage. -+// The Total line is in microseconds. -+type PSILine struct { -+ Avg10 float64 -+ Avg60 float64 -+ Avg300 float64 -+ Total uint64 -+} -+ -+// PSIStats represent pressure stall information from /proc/pressure/* -+// -+// "Some" indicates the share of time in which at least some tasks are stalled. -+// "Full" indicates the share of time in which all non-idle tasks are stalled simultaneously. -+type PSIStats struct { -+ Some *PSILine -+ Full *PSILine -+} -+ -+// PSIStatsForResource reads pressure stall information for the specified -+// resource from /proc/pressure/. At time of writing this can be -+// either "cpu", "memory" or "io". -+func (fs FS) PSIStatsForResource(resource string) (PSIStats, error) { -+ data, err := util.ReadFileNoStat(fs.proc.Path(fmt.Sprintf("%s/%s", "pressure", resource))) -+ if err != nil { -+ return PSIStats{}, fmt.Errorf("psi_stats: unavailable for %q: %w", resource, err) -+ } -+ -+ return parsePSIStats(resource, bytes.NewReader(data)) -+} -+ -+// parsePSIStats parses the specified file for pressure stall information. -+func parsePSIStats(resource string, r io.Reader) (PSIStats, error) { -+ psiStats := PSIStats{} -+ -+ scanner := bufio.NewScanner(r) -+ for scanner.Scan() { -+ l := scanner.Text() -+ prefix := strings.Split(l, " ")[0] -+ switch prefix { -+ case "some": -+ psi := PSILine{} -+ _, err := fmt.Sscanf(l, fmt.Sprintf("some %s", lineFormat), &psi.Avg10, &psi.Avg60, &psi.Avg300, &psi.Total) -+ if err != nil { -+ return PSIStats{}, err -+ } -+ psiStats.Some = &psi -+ case "full": -+ psi := PSILine{} -+ _, err := fmt.Sscanf(l, fmt.Sprintf("full %s", lineFormat), &psi.Avg10, &psi.Avg60, &psi.Avg300, &psi.Total) -+ if err != nil { -+ return PSIStats{}, err -+ } -+ psiStats.Full = &psi -+ default: -+ // If we encounter a line with an unknown prefix, ignore it and move on -+ // Should new measurement types be added in the future we'll simply ignore them instead -+ // of erroring on retrieval -+ continue -+ } -+ } -+ -+ return psiStats, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_smaps.go b/vendor/github.com/prometheus/procfs/proc_smaps.go -new file mode 100755 -index 0000000..0e97d99 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_smaps.go -@@ -0,0 +1,166 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build !windows -+// +build !windows -+ -+package procfs -+ -+import ( -+ "bufio" -+ "errors" -+ "fmt" -+ "os" -+ "regexp" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+var ( -+ // match the header line before each mapped zone in `/proc/pid/smaps`. -+ procSMapsHeaderLine = regexp.MustCompile(`^[a-f0-9].*$`) -+) -+ -+type ProcSMapsRollup struct { -+ // Amount of the mapping that is currently resident in RAM. -+ Rss uint64 -+ // Process's proportional share of this mapping. -+ Pss uint64 -+ // Size in bytes of clean shared pages. -+ SharedClean uint64 -+ // Size in bytes of dirty shared pages. -+ SharedDirty uint64 -+ // Size in bytes of clean private pages. -+ PrivateClean uint64 -+ // Size in bytes of dirty private pages. -+ PrivateDirty uint64 -+ // Amount of memory currently marked as referenced or accessed. -+ Referenced uint64 -+ // Amount of memory that does not belong to any file. -+ Anonymous uint64 -+ // Amount would-be-anonymous memory currently on swap. -+ Swap uint64 -+ // Process's proportional memory on swap. -+ SwapPss uint64 -+} -+ -+// ProcSMapsRollup reads from /proc/[pid]/smaps_rollup to get summed memory information of the -+// process. -+// -+// If smaps_rollup does not exists (require kernel >= 4.15), the content of /proc/pid/smaps will -+// we read and summed. -+func (p Proc) ProcSMapsRollup() (ProcSMapsRollup, error) { -+ data, err := util.ReadFileNoStat(p.path("smaps_rollup")) -+ if err != nil && os.IsNotExist(err) { -+ return p.procSMapsRollupManual() -+ } -+ if err != nil { -+ return ProcSMapsRollup{}, err -+ } -+ -+ lines := strings.Split(string(data), "\n") -+ smaps := ProcSMapsRollup{} -+ -+ // skip first line which don't contains information we need -+ lines = lines[1:] -+ for _, line := range lines { -+ if line == "" { -+ continue -+ } -+ -+ if err := smaps.parseLine(line); err != nil { -+ return ProcSMapsRollup{}, err -+ } -+ } -+ -+ return smaps, nil -+} -+ -+// Read /proc/pid/smaps and do the roll-up in Go code. -+func (p Proc) procSMapsRollupManual() (ProcSMapsRollup, error) { -+ file, err := os.Open(p.path("smaps")) -+ if err != nil { -+ return ProcSMapsRollup{}, err -+ } -+ defer file.Close() -+ -+ smaps := ProcSMapsRollup{} -+ scan := bufio.NewScanner(file) -+ -+ for scan.Scan() { -+ line := scan.Text() -+ -+ if procSMapsHeaderLine.MatchString(line) { -+ continue -+ } -+ -+ if err := smaps.parseLine(line); err != nil { -+ return ProcSMapsRollup{}, err -+ } -+ } -+ -+ return smaps, nil -+} -+ -+func (s *ProcSMapsRollup) parseLine(line string) error { -+ kv := strings.SplitN(line, ":", 2) -+ if len(kv) != 2 { -+ fmt.Println(line) -+ return errors.New("invalid net/dev line, missing colon") -+ } -+ -+ k := kv[0] -+ if k == "VmFlags" { -+ return nil -+ } -+ -+ v := strings.TrimSpace(kv[1]) -+ v = strings.TrimRight(v, " kB") -+ -+ vKBytes, err := strconv.ParseUint(v, 10, 64) -+ if err != nil { -+ return err -+ } -+ vBytes := vKBytes * 1024 -+ -+ s.addValue(k, v, vKBytes, vBytes) -+ -+ return nil -+} -+ -+func (s *ProcSMapsRollup) addValue(k string, vString string, vUint uint64, vUintBytes uint64) { -+ switch k { -+ case "Rss": -+ s.Rss += vUintBytes -+ case "Pss": -+ s.Pss += vUintBytes -+ case "Shared_Clean": -+ s.SharedClean += vUintBytes -+ case "Shared_Dirty": -+ s.SharedDirty += vUintBytes -+ case "Private_Clean": -+ s.PrivateClean += vUintBytes -+ case "Private_Dirty": -+ s.PrivateDirty += vUintBytes -+ case "Referenced": -+ s.Referenced += vUintBytes -+ case "Anonymous": -+ s.Anonymous += vUintBytes -+ case "Swap": -+ s.Swap += vUintBytes -+ case "SwapPss": -+ s.SwapPss += vUintBytes -+ } -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_snmp.go b/vendor/github.com/prometheus/procfs/proc_snmp.go -new file mode 100755 -index 0000000..ae19189 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_snmp.go -@@ -0,0 +1,353 @@ -+// Copyright 2022 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// ProcSnmp models the content of /proc//net/snmp. -+type ProcSnmp struct { -+ // The process ID. -+ PID int -+ Ip -+ Icmp -+ IcmpMsg -+ Tcp -+ Udp -+ UdpLite -+} -+ -+type Ip struct { // nolint:revive -+ Forwarding float64 -+ DefaultTTL float64 -+ InReceives float64 -+ InHdrErrors float64 -+ InAddrErrors float64 -+ ForwDatagrams float64 -+ InUnknownProtos float64 -+ InDiscards float64 -+ InDelivers float64 -+ OutRequests float64 -+ OutDiscards float64 -+ OutNoRoutes float64 -+ ReasmTimeout float64 -+ ReasmReqds float64 -+ ReasmOKs float64 -+ ReasmFails float64 -+ FragOKs float64 -+ FragFails float64 -+ FragCreates float64 -+} -+ -+type Icmp struct { -+ InMsgs float64 -+ InErrors float64 -+ InCsumErrors float64 -+ InDestUnreachs float64 -+ InTimeExcds float64 -+ InParmProbs float64 -+ InSrcQuenchs float64 -+ InRedirects float64 -+ InEchos float64 -+ InEchoReps float64 -+ InTimestamps float64 -+ InTimestampReps float64 -+ InAddrMasks float64 -+ InAddrMaskReps float64 -+ OutMsgs float64 -+ OutErrors float64 -+ OutDestUnreachs float64 -+ OutTimeExcds float64 -+ OutParmProbs float64 -+ OutSrcQuenchs float64 -+ OutRedirects float64 -+ OutEchos float64 -+ OutEchoReps float64 -+ OutTimestamps float64 -+ OutTimestampReps float64 -+ OutAddrMasks float64 -+ OutAddrMaskReps float64 -+} -+ -+type IcmpMsg struct { -+ InType3 float64 -+ OutType3 float64 -+} -+ -+type Tcp struct { // nolint:revive -+ RtoAlgorithm float64 -+ RtoMin float64 -+ RtoMax float64 -+ MaxConn float64 -+ ActiveOpens float64 -+ PassiveOpens float64 -+ AttemptFails float64 -+ EstabResets float64 -+ CurrEstab float64 -+ InSegs float64 -+ OutSegs float64 -+ RetransSegs float64 -+ InErrs float64 -+ OutRsts float64 -+ InCsumErrors float64 -+} -+ -+type Udp struct { // nolint:revive -+ InDatagrams float64 -+ NoPorts float64 -+ InErrors float64 -+ OutDatagrams float64 -+ RcvbufErrors float64 -+ SndbufErrors float64 -+ InCsumErrors float64 -+ IgnoredMulti float64 -+} -+ -+type UdpLite struct { // nolint:revive -+ InDatagrams float64 -+ NoPorts float64 -+ InErrors float64 -+ OutDatagrams float64 -+ RcvbufErrors float64 -+ SndbufErrors float64 -+ InCsumErrors float64 -+ IgnoredMulti float64 -+} -+ -+func (p Proc) Snmp() (ProcSnmp, error) { -+ filename := p.path("net/snmp") -+ data, err := util.ReadFileNoStat(filename) -+ if err != nil { -+ return ProcSnmp{PID: p.PID}, err -+ } -+ procSnmp, err := parseSnmp(bytes.NewReader(data), filename) -+ procSnmp.PID = p.PID -+ return procSnmp, err -+} -+ -+// parseSnmp parses the metrics from proc//net/snmp file -+// and returns a map contains those metrics (e.g. {"Ip": {"Forwarding": 2}}). -+func parseSnmp(r io.Reader, fileName string) (ProcSnmp, error) { -+ var ( -+ scanner = bufio.NewScanner(r) -+ procSnmp = ProcSnmp{} -+ ) -+ -+ for scanner.Scan() { -+ nameParts := strings.Split(scanner.Text(), " ") -+ scanner.Scan() -+ valueParts := strings.Split(scanner.Text(), " ") -+ // Remove trailing :. -+ protocol := strings.TrimSuffix(nameParts[0], ":") -+ if len(nameParts) != len(valueParts) { -+ return procSnmp, fmt.Errorf("mismatch field count mismatch in %s: %s", -+ fileName, protocol) -+ } -+ for i := 1; i < len(nameParts); i++ { -+ value, err := strconv.ParseFloat(valueParts[i], 64) -+ if err != nil { -+ return procSnmp, err -+ } -+ key := nameParts[i] -+ -+ switch protocol { -+ case "Ip": -+ switch key { -+ case "Forwarding": -+ procSnmp.Ip.Forwarding = value -+ case "DefaultTTL": -+ procSnmp.Ip.DefaultTTL = value -+ case "InReceives": -+ procSnmp.Ip.InReceives = value -+ case "InHdrErrors": -+ procSnmp.Ip.InHdrErrors = value -+ case "InAddrErrors": -+ procSnmp.Ip.InAddrErrors = value -+ case "ForwDatagrams": -+ procSnmp.Ip.ForwDatagrams = value -+ case "InUnknownProtos": -+ procSnmp.Ip.InUnknownProtos = value -+ case "InDiscards": -+ procSnmp.Ip.InDiscards = value -+ case "InDelivers": -+ procSnmp.Ip.InDelivers = value -+ case "OutRequests": -+ procSnmp.Ip.OutRequests = value -+ case "OutDiscards": -+ procSnmp.Ip.OutDiscards = value -+ case "OutNoRoutes": -+ procSnmp.Ip.OutNoRoutes = value -+ case "ReasmTimeout": -+ procSnmp.Ip.ReasmTimeout = value -+ case "ReasmReqds": -+ procSnmp.Ip.ReasmReqds = value -+ case "ReasmOKs": -+ procSnmp.Ip.ReasmOKs = value -+ case "ReasmFails": -+ procSnmp.Ip.ReasmFails = value -+ case "FragOKs": -+ procSnmp.Ip.FragOKs = value -+ case "FragFails": -+ procSnmp.Ip.FragFails = value -+ case "FragCreates": -+ procSnmp.Ip.FragCreates = value -+ } -+ case "Icmp": -+ switch key { -+ case "InMsgs": -+ procSnmp.Icmp.InMsgs = value -+ case "InErrors": -+ procSnmp.Icmp.InErrors = value -+ case "InCsumErrors": -+ procSnmp.Icmp.InCsumErrors = value -+ case "InDestUnreachs": -+ procSnmp.Icmp.InDestUnreachs = value -+ case "InTimeExcds": -+ procSnmp.Icmp.InTimeExcds = value -+ case "InParmProbs": -+ procSnmp.Icmp.InParmProbs = value -+ case "InSrcQuenchs": -+ procSnmp.Icmp.InSrcQuenchs = value -+ case "InRedirects": -+ procSnmp.Icmp.InRedirects = value -+ case "InEchos": -+ procSnmp.Icmp.InEchos = value -+ case "InEchoReps": -+ procSnmp.Icmp.InEchoReps = value -+ case "InTimestamps": -+ procSnmp.Icmp.InTimestamps = value -+ case "InTimestampReps": -+ procSnmp.Icmp.InTimestampReps = value -+ case "InAddrMasks": -+ procSnmp.Icmp.InAddrMasks = value -+ case "InAddrMaskReps": -+ procSnmp.Icmp.InAddrMaskReps = value -+ case "OutMsgs": -+ procSnmp.Icmp.OutMsgs = value -+ case "OutErrors": -+ procSnmp.Icmp.OutErrors = value -+ case "OutDestUnreachs": -+ procSnmp.Icmp.OutDestUnreachs = value -+ case "OutTimeExcds": -+ procSnmp.Icmp.OutTimeExcds = value -+ case "OutParmProbs": -+ procSnmp.Icmp.OutParmProbs = value -+ case "OutSrcQuenchs": -+ procSnmp.Icmp.OutSrcQuenchs = value -+ case "OutRedirects": -+ procSnmp.Icmp.OutRedirects = value -+ case "OutEchos": -+ procSnmp.Icmp.OutEchos = value -+ case "OutEchoReps": -+ procSnmp.Icmp.OutEchoReps = value -+ case "OutTimestamps": -+ procSnmp.Icmp.OutTimestamps = value -+ case "OutTimestampReps": -+ procSnmp.Icmp.OutTimestampReps = value -+ case "OutAddrMasks": -+ procSnmp.Icmp.OutAddrMasks = value -+ case "OutAddrMaskReps": -+ procSnmp.Icmp.OutAddrMaskReps = value -+ } -+ case "IcmpMsg": -+ switch key { -+ case "InType3": -+ procSnmp.IcmpMsg.InType3 = value -+ case "OutType3": -+ procSnmp.IcmpMsg.OutType3 = value -+ } -+ case "Tcp": -+ switch key { -+ case "RtoAlgorithm": -+ procSnmp.Tcp.RtoAlgorithm = value -+ case "RtoMin": -+ procSnmp.Tcp.RtoMin = value -+ case "RtoMax": -+ procSnmp.Tcp.RtoMax = value -+ case "MaxConn": -+ procSnmp.Tcp.MaxConn = value -+ case "ActiveOpens": -+ procSnmp.Tcp.ActiveOpens = value -+ case "PassiveOpens": -+ procSnmp.Tcp.PassiveOpens = value -+ case "AttemptFails": -+ procSnmp.Tcp.AttemptFails = value -+ case "EstabResets": -+ procSnmp.Tcp.EstabResets = value -+ case "CurrEstab": -+ procSnmp.Tcp.CurrEstab = value -+ case "InSegs": -+ procSnmp.Tcp.InSegs = value -+ case "OutSegs": -+ procSnmp.Tcp.OutSegs = value -+ case "RetransSegs": -+ procSnmp.Tcp.RetransSegs = value -+ case "InErrs": -+ procSnmp.Tcp.InErrs = value -+ case "OutRsts": -+ procSnmp.Tcp.OutRsts = value -+ case "InCsumErrors": -+ procSnmp.Tcp.InCsumErrors = value -+ } -+ case "Udp": -+ switch key { -+ case "InDatagrams": -+ procSnmp.Udp.InDatagrams = value -+ case "NoPorts": -+ procSnmp.Udp.NoPorts = value -+ case "InErrors": -+ procSnmp.Udp.InErrors = value -+ case "OutDatagrams": -+ procSnmp.Udp.OutDatagrams = value -+ case "RcvbufErrors": -+ procSnmp.Udp.RcvbufErrors = value -+ case "SndbufErrors": -+ procSnmp.Udp.SndbufErrors = value -+ case "InCsumErrors": -+ procSnmp.Udp.InCsumErrors = value -+ case "IgnoredMulti": -+ procSnmp.Udp.IgnoredMulti = value -+ } -+ case "UdpLite": -+ switch key { -+ case "InDatagrams": -+ procSnmp.UdpLite.InDatagrams = value -+ case "NoPorts": -+ procSnmp.UdpLite.NoPorts = value -+ case "InErrors": -+ procSnmp.UdpLite.InErrors = value -+ case "OutDatagrams": -+ procSnmp.UdpLite.OutDatagrams = value -+ case "RcvbufErrors": -+ procSnmp.UdpLite.RcvbufErrors = value -+ case "SndbufErrors": -+ procSnmp.UdpLite.SndbufErrors = value -+ case "InCsumErrors": -+ procSnmp.UdpLite.InCsumErrors = value -+ case "IgnoredMulti": -+ procSnmp.UdpLite.IgnoredMulti = value -+ } -+ } -+ } -+ } -+ return procSnmp, scanner.Err() -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_snmp6.go b/vendor/github.com/prometheus/procfs/proc_snmp6.go -new file mode 100755 -index 0000000..f611992 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_snmp6.go -@@ -0,0 +1,381 @@ -+// Copyright 2022 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "errors" -+ "io" -+ "os" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// ProcSnmp6 models the content of /proc//net/snmp6. -+type ProcSnmp6 struct { -+ // The process ID. -+ PID int -+ Ip6 -+ Icmp6 -+ Udp6 -+ UdpLite6 -+} -+ -+type Ip6 struct { // nolint:revive -+ InReceives float64 -+ InHdrErrors float64 -+ InTooBigErrors float64 -+ InNoRoutes float64 -+ InAddrErrors float64 -+ InUnknownProtos float64 -+ InTruncatedPkts float64 -+ InDiscards float64 -+ InDelivers float64 -+ OutForwDatagrams float64 -+ OutRequests float64 -+ OutDiscards float64 -+ OutNoRoutes float64 -+ ReasmTimeout float64 -+ ReasmReqds float64 -+ ReasmOKs float64 -+ ReasmFails float64 -+ FragOKs float64 -+ FragFails float64 -+ FragCreates float64 -+ InMcastPkts float64 -+ OutMcastPkts float64 -+ InOctets float64 -+ OutOctets float64 -+ InMcastOctets float64 -+ OutMcastOctets float64 -+ InBcastOctets float64 -+ OutBcastOctets float64 -+ InNoECTPkts float64 -+ InECT1Pkts float64 -+ InECT0Pkts float64 -+ InCEPkts float64 -+} -+ -+type Icmp6 struct { -+ InMsgs float64 -+ InErrors float64 -+ OutMsgs float64 -+ OutErrors float64 -+ InCsumErrors float64 -+ InDestUnreachs float64 -+ InPktTooBigs float64 -+ InTimeExcds float64 -+ InParmProblems float64 -+ InEchos float64 -+ InEchoReplies float64 -+ InGroupMembQueries float64 -+ InGroupMembResponses float64 -+ InGroupMembReductions float64 -+ InRouterSolicits float64 -+ InRouterAdvertisements float64 -+ InNeighborSolicits float64 -+ InNeighborAdvertisements float64 -+ InRedirects float64 -+ InMLDv2Reports float64 -+ OutDestUnreachs float64 -+ OutPktTooBigs float64 -+ OutTimeExcds float64 -+ OutParmProblems float64 -+ OutEchos float64 -+ OutEchoReplies float64 -+ OutGroupMembQueries float64 -+ OutGroupMembResponses float64 -+ OutGroupMembReductions float64 -+ OutRouterSolicits float64 -+ OutRouterAdvertisements float64 -+ OutNeighborSolicits float64 -+ OutNeighborAdvertisements float64 -+ OutRedirects float64 -+ OutMLDv2Reports float64 -+ InType1 float64 -+ InType134 float64 -+ InType135 float64 -+ InType136 float64 -+ InType143 float64 -+ OutType133 float64 -+ OutType135 float64 -+ OutType136 float64 -+ OutType143 float64 -+} -+ -+type Udp6 struct { // nolint:revive -+ InDatagrams float64 -+ NoPorts float64 -+ InErrors float64 -+ OutDatagrams float64 -+ RcvbufErrors float64 -+ SndbufErrors float64 -+ InCsumErrors float64 -+ IgnoredMulti float64 -+} -+ -+type UdpLite6 struct { // nolint:revive -+ InDatagrams float64 -+ NoPorts float64 -+ InErrors float64 -+ OutDatagrams float64 -+ RcvbufErrors float64 -+ SndbufErrors float64 -+ InCsumErrors float64 -+} -+ -+func (p Proc) Snmp6() (ProcSnmp6, error) { -+ filename := p.path("net/snmp6") -+ data, err := util.ReadFileNoStat(filename) -+ if err != nil { -+ // On systems with IPv6 disabled, this file won't exist. -+ // Do nothing. -+ if errors.Is(err, os.ErrNotExist) { -+ return ProcSnmp6{PID: p.PID}, nil -+ } -+ -+ return ProcSnmp6{PID: p.PID}, err -+ } -+ -+ procSnmp6, err := parseSNMP6Stats(bytes.NewReader(data)) -+ procSnmp6.PID = p.PID -+ return procSnmp6, err -+} -+ -+// parseSnmp6 parses the metrics from proc//net/snmp6 file -+// and returns a map contains those metrics. -+func parseSNMP6Stats(r io.Reader) (ProcSnmp6, error) { -+ var ( -+ scanner = bufio.NewScanner(r) -+ procSnmp6 = ProcSnmp6{} -+ ) -+ -+ for scanner.Scan() { -+ stat := strings.Fields(scanner.Text()) -+ if len(stat) < 2 { -+ continue -+ } -+ // Expect to have "6" in metric name, skip line otherwise -+ if sixIndex := strings.Index(stat[0], "6"); sixIndex != -1 { -+ protocol := stat[0][:sixIndex+1] -+ key := stat[0][sixIndex+1:] -+ value, err := strconv.ParseFloat(stat[1], 64) -+ if err != nil { -+ return procSnmp6, err -+ } -+ -+ switch protocol { -+ case "Ip6": -+ switch key { -+ case "InReceives": -+ procSnmp6.Ip6.InReceives = value -+ case "InHdrErrors": -+ procSnmp6.Ip6.InHdrErrors = value -+ case "InTooBigErrors": -+ procSnmp6.Ip6.InTooBigErrors = value -+ case "InNoRoutes": -+ procSnmp6.Ip6.InNoRoutes = value -+ case "InAddrErrors": -+ procSnmp6.Ip6.InAddrErrors = value -+ case "InUnknownProtos": -+ procSnmp6.Ip6.InUnknownProtos = value -+ case "InTruncatedPkts": -+ procSnmp6.Ip6.InTruncatedPkts = value -+ case "InDiscards": -+ procSnmp6.Ip6.InDiscards = value -+ case "InDelivers": -+ procSnmp6.Ip6.InDelivers = value -+ case "OutForwDatagrams": -+ procSnmp6.Ip6.OutForwDatagrams = value -+ case "OutRequests": -+ procSnmp6.Ip6.OutRequests = value -+ case "OutDiscards": -+ procSnmp6.Ip6.OutDiscards = value -+ case "OutNoRoutes": -+ procSnmp6.Ip6.OutNoRoutes = value -+ case "ReasmTimeout": -+ procSnmp6.Ip6.ReasmTimeout = value -+ case "ReasmReqds": -+ procSnmp6.Ip6.ReasmReqds = value -+ case "ReasmOKs": -+ procSnmp6.Ip6.ReasmOKs = value -+ case "ReasmFails": -+ procSnmp6.Ip6.ReasmFails = value -+ case "FragOKs": -+ procSnmp6.Ip6.FragOKs = value -+ case "FragFails": -+ procSnmp6.Ip6.FragFails = value -+ case "FragCreates": -+ procSnmp6.Ip6.FragCreates = value -+ case "InMcastPkts": -+ procSnmp6.Ip6.InMcastPkts = value -+ case "OutMcastPkts": -+ procSnmp6.Ip6.OutMcastPkts = value -+ case "InOctets": -+ procSnmp6.Ip6.InOctets = value -+ case "OutOctets": -+ procSnmp6.Ip6.OutOctets = value -+ case "InMcastOctets": -+ procSnmp6.Ip6.InMcastOctets = value -+ case "OutMcastOctets": -+ procSnmp6.Ip6.OutMcastOctets = value -+ case "InBcastOctets": -+ procSnmp6.Ip6.InBcastOctets = value -+ case "OutBcastOctets": -+ procSnmp6.Ip6.OutBcastOctets = value -+ case "InNoECTPkts": -+ procSnmp6.Ip6.InNoECTPkts = value -+ case "InECT1Pkts": -+ procSnmp6.Ip6.InECT1Pkts = value -+ case "InECT0Pkts": -+ procSnmp6.Ip6.InECT0Pkts = value -+ case "InCEPkts": -+ procSnmp6.Ip6.InCEPkts = value -+ -+ } -+ case "Icmp6": -+ switch key { -+ case "InMsgs": -+ procSnmp6.Icmp6.InMsgs = value -+ case "InErrors": -+ procSnmp6.Icmp6.InErrors = value -+ case "OutMsgs": -+ procSnmp6.Icmp6.OutMsgs = value -+ case "OutErrors": -+ procSnmp6.Icmp6.OutErrors = value -+ case "InCsumErrors": -+ procSnmp6.Icmp6.InCsumErrors = value -+ case "InDestUnreachs": -+ procSnmp6.Icmp6.InDestUnreachs = value -+ case "InPktTooBigs": -+ procSnmp6.Icmp6.InPktTooBigs = value -+ case "InTimeExcds": -+ procSnmp6.Icmp6.InTimeExcds = value -+ case "InParmProblems": -+ procSnmp6.Icmp6.InParmProblems = value -+ case "InEchos": -+ procSnmp6.Icmp6.InEchos = value -+ case "InEchoReplies": -+ procSnmp6.Icmp6.InEchoReplies = value -+ case "InGroupMembQueries": -+ procSnmp6.Icmp6.InGroupMembQueries = value -+ case "InGroupMembResponses": -+ procSnmp6.Icmp6.InGroupMembResponses = value -+ case "InGroupMembReductions": -+ procSnmp6.Icmp6.InGroupMembReductions = value -+ case "InRouterSolicits": -+ procSnmp6.Icmp6.InRouterSolicits = value -+ case "InRouterAdvertisements": -+ procSnmp6.Icmp6.InRouterAdvertisements = value -+ case "InNeighborSolicits": -+ procSnmp6.Icmp6.InNeighborSolicits = value -+ case "InNeighborAdvertisements": -+ procSnmp6.Icmp6.InNeighborAdvertisements = value -+ case "InRedirects": -+ procSnmp6.Icmp6.InRedirects = value -+ case "InMLDv2Reports": -+ procSnmp6.Icmp6.InMLDv2Reports = value -+ case "OutDestUnreachs": -+ procSnmp6.Icmp6.OutDestUnreachs = value -+ case "OutPktTooBigs": -+ procSnmp6.Icmp6.OutPktTooBigs = value -+ case "OutTimeExcds": -+ procSnmp6.Icmp6.OutTimeExcds = value -+ case "OutParmProblems": -+ procSnmp6.Icmp6.OutParmProblems = value -+ case "OutEchos": -+ procSnmp6.Icmp6.OutEchos = value -+ case "OutEchoReplies": -+ procSnmp6.Icmp6.OutEchoReplies = value -+ case "OutGroupMembQueries": -+ procSnmp6.Icmp6.OutGroupMembQueries = value -+ case "OutGroupMembResponses": -+ procSnmp6.Icmp6.OutGroupMembResponses = value -+ case "OutGroupMembReductions": -+ procSnmp6.Icmp6.OutGroupMembReductions = value -+ case "OutRouterSolicits": -+ procSnmp6.Icmp6.OutRouterSolicits = value -+ case "OutRouterAdvertisements": -+ procSnmp6.Icmp6.OutRouterAdvertisements = value -+ case "OutNeighborSolicits": -+ procSnmp6.Icmp6.OutNeighborSolicits = value -+ case "OutNeighborAdvertisements": -+ procSnmp6.Icmp6.OutNeighborAdvertisements = value -+ case "OutRedirects": -+ procSnmp6.Icmp6.OutRedirects = value -+ case "OutMLDv2Reports": -+ procSnmp6.Icmp6.OutMLDv2Reports = value -+ case "InType1": -+ procSnmp6.Icmp6.InType1 = value -+ case "InType134": -+ procSnmp6.Icmp6.InType134 = value -+ case "InType135": -+ procSnmp6.Icmp6.InType135 = value -+ case "InType136": -+ procSnmp6.Icmp6.InType136 = value -+ case "InType143": -+ procSnmp6.Icmp6.InType143 = value -+ case "OutType133": -+ procSnmp6.Icmp6.OutType133 = value -+ case "OutType135": -+ procSnmp6.Icmp6.OutType135 = value -+ case "OutType136": -+ procSnmp6.Icmp6.OutType136 = value -+ case "OutType143": -+ procSnmp6.Icmp6.OutType143 = value -+ } -+ case "Udp6": -+ switch key { -+ case "InDatagrams": -+ procSnmp6.Udp6.InDatagrams = value -+ case "NoPorts": -+ procSnmp6.Udp6.NoPorts = value -+ case "InErrors": -+ procSnmp6.Udp6.InErrors = value -+ case "OutDatagrams": -+ procSnmp6.Udp6.OutDatagrams = value -+ case "RcvbufErrors": -+ procSnmp6.Udp6.RcvbufErrors = value -+ case "SndbufErrors": -+ procSnmp6.Udp6.SndbufErrors = value -+ case "InCsumErrors": -+ procSnmp6.Udp6.InCsumErrors = value -+ case "IgnoredMulti": -+ procSnmp6.Udp6.IgnoredMulti = value -+ } -+ case "UdpLite6": -+ switch key { -+ case "InDatagrams": -+ procSnmp6.UdpLite6.InDatagrams = value -+ case "NoPorts": -+ procSnmp6.UdpLite6.NoPorts = value -+ case "InErrors": -+ procSnmp6.UdpLite6.InErrors = value -+ case "OutDatagrams": -+ procSnmp6.UdpLite6.OutDatagrams = value -+ case "RcvbufErrors": -+ procSnmp6.UdpLite6.RcvbufErrors = value -+ case "SndbufErrors": -+ procSnmp6.UdpLite6.SndbufErrors = value -+ case "InCsumErrors": -+ procSnmp6.UdpLite6.InCsumErrors = value -+ } -+ } -+ } -+ } -+ return procSnmp6, scanner.Err() -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_stat.go b/vendor/github.com/prometheus/procfs/proc_stat.go -new file mode 100755 -index 0000000..06c556e ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_stat.go -@@ -0,0 +1,222 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bytes" -+ "fmt" -+ "os" -+ -+ "github.com/prometheus/procfs/internal/fs" -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Originally, this USER_HZ value was dynamically retrieved via a sysconf call -+// which required cgo. However, that caused a lot of problems regarding -+// cross-compilation. Alternatives such as running a binary to determine the -+// value, or trying to derive it in some other way were all problematic. After -+// much research it was determined that USER_HZ is actually hardcoded to 100 on -+// all Go-supported platforms as of the time of this writing. This is why we -+// decided to hardcode it here as well. It is not impossible that there could -+// be systems with exceptions, but they should be very exotic edge cases, and -+// in that case, the worst outcome will be two misreported metrics. -+// -+// See also the following discussions: -+// -+// - https://github.com/prometheus/node_exporter/issues/52 -+// - https://github.com/prometheus/procfs/pull/2 -+// - http://stackoverflow.com/questions/17410841/how-does-user-hz-solve-the-jiffy-scaling-issue -+const userHZ = 100 -+ -+// ProcStat provides status information about the process, -+// read from /proc/[pid]/stat. -+type ProcStat struct { -+ // The process ID. -+ PID int -+ // The filename of the executable. -+ Comm string -+ // The process state. -+ State string -+ // The PID of the parent of this process. -+ PPID int -+ // The process group ID of the process. -+ PGRP int -+ // The session ID of the process. -+ Session int -+ // The controlling terminal of the process. -+ TTY int -+ // The ID of the foreground process group of the controlling terminal of -+ // the process. -+ TPGID int -+ // The kernel flags word of the process. -+ Flags uint -+ // The number of minor faults the process has made which have not required -+ // loading a memory page from disk. -+ MinFlt uint -+ // The number of minor faults that the process's waited-for children have -+ // made. -+ CMinFlt uint -+ // The number of major faults the process has made which have required -+ // loading a memory page from disk. -+ MajFlt uint -+ // The number of major faults that the process's waited-for children have -+ // made. -+ CMajFlt uint -+ // Amount of time that this process has been scheduled in user mode, -+ // measured in clock ticks. -+ UTime uint -+ // Amount of time that this process has been scheduled in kernel mode, -+ // measured in clock ticks. -+ STime uint -+ // Amount of time that this process's waited-for children have been -+ // scheduled in user mode, measured in clock ticks. -+ CUTime int -+ // Amount of time that this process's waited-for children have been -+ // scheduled in kernel mode, measured in clock ticks. -+ CSTime int -+ // For processes running a real-time scheduling policy, this is the negated -+ // scheduling priority, minus one. -+ Priority int -+ // The nice value, a value in the range 19 (low priority) to -20 (high -+ // priority). -+ Nice int -+ // Number of threads in this process. -+ NumThreads int -+ // The time the process started after system boot, the value is expressed -+ // in clock ticks. -+ Starttime uint64 -+ // Virtual memory size in bytes. -+ VSize uint -+ // Resident set size in pages. -+ RSS int -+ // Soft limit in bytes on the rss of the process. -+ RSSLimit uint64 -+ // Real-time scheduling priority, a number in the range 1 to 99 for processes -+ // scheduled under a real-time policy, or 0, for non-real-time processes. -+ RTPriority uint -+ // Scheduling policy. -+ Policy uint -+ // Aggregated block I/O delays, measured in clock ticks (centiseconds). -+ DelayAcctBlkIOTicks uint64 -+ -+ proc fs.FS -+} -+ -+// NewStat returns the current status information of the process. -+// -+// Deprecated: Use p.Stat() instead. -+func (p Proc) NewStat() (ProcStat, error) { -+ return p.Stat() -+} -+ -+// Stat returns the current status information of the process. -+func (p Proc) Stat() (ProcStat, error) { -+ data, err := util.ReadFileNoStat(p.path("stat")) -+ if err != nil { -+ return ProcStat{}, err -+ } -+ -+ var ( -+ ignoreInt64 int64 -+ ignoreUint64 uint64 -+ -+ s = ProcStat{PID: p.PID, proc: p.fs} -+ l = bytes.Index(data, []byte("(")) -+ r = bytes.LastIndex(data, []byte(")")) -+ ) -+ -+ if l < 0 || r < 0 { -+ return ProcStat{}, fmt.Errorf("unexpected format, couldn't extract comm %q", data) -+ } -+ -+ s.Comm = string(data[l+1 : r]) -+ -+ // Check the following resources for the details about the particular stat -+ // fields and their data types: -+ // * https://man7.org/linux/man-pages/man5/proc.5.html -+ // * https://man7.org/linux/man-pages/man3/scanf.3.html -+ _, err = fmt.Fscan( -+ bytes.NewBuffer(data[r+2:]), -+ &s.State, -+ &s.PPID, -+ &s.PGRP, -+ &s.Session, -+ &s.TTY, -+ &s.TPGID, -+ &s.Flags, -+ &s.MinFlt, -+ &s.CMinFlt, -+ &s.MajFlt, -+ &s.CMajFlt, -+ &s.UTime, -+ &s.STime, -+ &s.CUTime, -+ &s.CSTime, -+ &s.Priority, -+ &s.Nice, -+ &s.NumThreads, -+ &ignoreInt64, -+ &s.Starttime, -+ &s.VSize, -+ &s.RSS, -+ &s.RSSLimit, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreUint64, -+ &ignoreInt64, -+ &ignoreInt64, -+ &s.RTPriority, -+ &s.Policy, -+ &s.DelayAcctBlkIOTicks, -+ ) -+ if err != nil { -+ return ProcStat{}, err -+ } -+ -+ return s, nil -+} -+ -+// VirtualMemory returns the virtual memory size in bytes. -+func (s ProcStat) VirtualMemory() uint { -+ return s.VSize -+} -+ -+// ResidentMemory returns the resident memory size in bytes. -+func (s ProcStat) ResidentMemory() int { -+ return s.RSS * os.Getpagesize() -+} -+ -+// StartTime returns the unix timestamp of the process in seconds. -+func (s ProcStat) StartTime() (float64, error) { -+ fs := FS{proc: s.proc} -+ stat, err := fs.Stat() -+ if err != nil { -+ return 0, err -+ } -+ return float64(stat.BootTime) + (float64(s.Starttime) / userHZ), nil -+} -+ -+// CPUTime returns the total CPU user and system time in seconds. -+func (s ProcStat) CPUTime() float64 { -+ return float64(s.UTime+s.STime) / userHZ -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_status.go b/vendor/github.com/prometheus/procfs/proc_status.go -new file mode 100755 -index 0000000..594022d ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_status.go -@@ -0,0 +1,170 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bytes" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// ProcStatus provides status information about the process, -+// read from /proc/[pid]/stat. -+type ProcStatus struct { -+ // The process ID. -+ PID int -+ // The process name. -+ Name string -+ -+ // Thread group ID. -+ TGID int -+ -+ // Peak virtual memory size. -+ VmPeak uint64 // nolint:revive -+ // Virtual memory size. -+ VmSize uint64 // nolint:revive -+ // Locked memory size. -+ VmLck uint64 // nolint:revive -+ // Pinned memory size. -+ VmPin uint64 // nolint:revive -+ // Peak resident set size. -+ VmHWM uint64 // nolint:revive -+ // Resident set size (sum of RssAnnon RssFile and RssShmem). -+ VmRSS uint64 // nolint:revive -+ // Size of resident anonymous memory. -+ RssAnon uint64 // nolint:revive -+ // Size of resident file mappings. -+ RssFile uint64 // nolint:revive -+ // Size of resident shared memory. -+ RssShmem uint64 // nolint:revive -+ // Size of data segments. -+ VmData uint64 // nolint:revive -+ // Size of stack segments. -+ VmStk uint64 // nolint:revive -+ // Size of text segments. -+ VmExe uint64 // nolint:revive -+ // Shared library code size. -+ VmLib uint64 // nolint:revive -+ // Page table entries size. -+ VmPTE uint64 // nolint:revive -+ // Size of second-level page tables. -+ VmPMD uint64 // nolint:revive -+ // Swapped-out virtual memory size by anonymous private. -+ VmSwap uint64 // nolint:revive -+ // Size of hugetlb memory portions -+ HugetlbPages uint64 -+ -+ // Number of voluntary context switches. -+ VoluntaryCtxtSwitches uint64 -+ // Number of involuntary context switches. -+ NonVoluntaryCtxtSwitches uint64 -+ -+ // UIDs of the process (Real, effective, saved set, and filesystem UIDs) -+ UIDs [4]string -+ // GIDs of the process (Real, effective, saved set, and filesystem GIDs) -+ GIDs [4]string -+} -+ -+// NewStatus returns the current status information of the process. -+func (p Proc) NewStatus() (ProcStatus, error) { -+ data, err := util.ReadFileNoStat(p.path("status")) -+ if err != nil { -+ return ProcStatus{}, err -+ } -+ -+ s := ProcStatus{PID: p.PID} -+ -+ lines := strings.Split(string(data), "\n") -+ for _, line := range lines { -+ if !bytes.Contains([]byte(line), []byte(":")) { -+ continue -+ } -+ -+ kv := strings.SplitN(line, ":", 2) -+ -+ // removes spaces -+ k := string(strings.TrimSpace(kv[0])) -+ v := string(strings.TrimSpace(kv[1])) -+ // removes "kB" -+ v = string(bytes.Trim([]byte(v), " kB")) -+ -+ // value to int when possible -+ // we can skip error check here, 'cause vKBytes is not used when value is a string -+ vKBytes, _ := strconv.ParseUint(v, 10, 64) -+ // convert kB to B -+ vBytes := vKBytes * 1024 -+ -+ s.fillStatus(k, v, vKBytes, vBytes) -+ } -+ -+ return s, nil -+} -+ -+func (s *ProcStatus) fillStatus(k string, vString string, vUint uint64, vUintBytes uint64) { -+ switch k { -+ case "Tgid": -+ s.TGID = int(vUint) -+ case "Name": -+ s.Name = vString -+ case "Uid": -+ copy(s.UIDs[:], strings.Split(vString, "\t")) -+ case "Gid": -+ copy(s.GIDs[:], strings.Split(vString, "\t")) -+ case "VmPeak": -+ s.VmPeak = vUintBytes -+ case "VmSize": -+ s.VmSize = vUintBytes -+ case "VmLck": -+ s.VmLck = vUintBytes -+ case "VmPin": -+ s.VmPin = vUintBytes -+ case "VmHWM": -+ s.VmHWM = vUintBytes -+ case "VmRSS": -+ s.VmRSS = vUintBytes -+ case "RssAnon": -+ s.RssAnon = vUintBytes -+ case "RssFile": -+ s.RssFile = vUintBytes -+ case "RssShmem": -+ s.RssShmem = vUintBytes -+ case "VmData": -+ s.VmData = vUintBytes -+ case "VmStk": -+ s.VmStk = vUintBytes -+ case "VmExe": -+ s.VmExe = vUintBytes -+ case "VmLib": -+ s.VmLib = vUintBytes -+ case "VmPTE": -+ s.VmPTE = vUintBytes -+ case "VmPMD": -+ s.VmPMD = vUintBytes -+ case "VmSwap": -+ s.VmSwap = vUintBytes -+ case "HugetlbPages": -+ s.HugetlbPages = vUintBytes -+ case "voluntary_ctxt_switches": -+ s.VoluntaryCtxtSwitches = vUint -+ case "nonvoluntary_ctxt_switches": -+ s.NonVoluntaryCtxtSwitches = vUint -+ } -+} -+ -+// TotalCtxtSwitches returns the total context switch. -+func (s ProcStatus) TotalCtxtSwitches() uint64 { -+ return s.VoluntaryCtxtSwitches + s.NonVoluntaryCtxtSwitches -+} -diff --git a/vendor/github.com/prometheus/procfs/proc_sys.go b/vendor/github.com/prometheus/procfs/proc_sys.go -new file mode 100755 -index 0000000..d46533e ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/proc_sys.go -@@ -0,0 +1,51 @@ -+// Copyright 2022 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "fmt" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+func sysctlToPath(sysctl string) string { -+ return strings.Replace(sysctl, ".", "/", -1) -+} -+ -+func (fs FS) SysctlStrings(sysctl string) ([]string, error) { -+ value, err := util.SysReadFile(fs.proc.Path("sys", sysctlToPath(sysctl))) -+ if err != nil { -+ return nil, err -+ } -+ return strings.Fields(value), nil -+ -+} -+ -+func (fs FS) SysctlInts(sysctl string) ([]int, error) { -+ fields, err := fs.SysctlStrings(sysctl) -+ if err != nil { -+ return nil, err -+ } -+ -+ values := make([]int, len(fields)) -+ for i, f := range fields { -+ vp := util.NewValueParser(f) -+ values[i] = vp.Int() -+ if err := vp.Err(); err != nil { -+ return nil, fmt.Errorf("field %d in sysctl %s is not a valid int: %w", i, sysctl, err) -+ } -+ } -+ return values, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/schedstat.go b/vendor/github.com/prometheus/procfs/schedstat.go -new file mode 100755 -index 0000000..5f7f32d ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/schedstat.go -@@ -0,0 +1,121 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "errors" -+ "os" -+ "regexp" -+ "strconv" -+) -+ -+var ( -+ cpuLineRE = regexp.MustCompile(`cpu(\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+)`) -+ procLineRE = regexp.MustCompile(`(\d+) (\d+) (\d+)`) -+) -+ -+// Schedstat contains scheduler statistics from /proc/schedstat -+// -+// See -+// https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt -+// for a detailed description of what these numbers mean. -+// -+// Note the current kernel documentation claims some of the time units are in -+// jiffies when they are actually in nanoseconds since 2.6.23 with the -+// introduction of CFS. A fix to the documentation is pending. See -+// https://lore.kernel.org/patchwork/project/lkml/list/?series=403473 -+type Schedstat struct { -+ CPUs []*SchedstatCPU -+} -+ -+// SchedstatCPU contains the values from one "cpu" line. -+type SchedstatCPU struct { -+ CPUNum string -+ -+ RunningNanoseconds uint64 -+ WaitingNanoseconds uint64 -+ RunTimeslices uint64 -+} -+ -+// ProcSchedstat contains the values from `/proc//schedstat`. -+type ProcSchedstat struct { -+ RunningNanoseconds uint64 -+ WaitingNanoseconds uint64 -+ RunTimeslices uint64 -+} -+ -+// Schedstat reads data from `/proc/schedstat`. -+func (fs FS) Schedstat() (*Schedstat, error) { -+ file, err := os.Open(fs.proc.Path("schedstat")) -+ if err != nil { -+ return nil, err -+ } -+ defer file.Close() -+ -+ stats := &Schedstat{} -+ scanner := bufio.NewScanner(file) -+ -+ for scanner.Scan() { -+ match := cpuLineRE.FindStringSubmatch(scanner.Text()) -+ if match != nil { -+ cpu := &SchedstatCPU{} -+ cpu.CPUNum = match[1] -+ -+ cpu.RunningNanoseconds, err = strconv.ParseUint(match[8], 10, 64) -+ if err != nil { -+ continue -+ } -+ -+ cpu.WaitingNanoseconds, err = strconv.ParseUint(match[9], 10, 64) -+ if err != nil { -+ continue -+ } -+ -+ cpu.RunTimeslices, err = strconv.ParseUint(match[10], 10, 64) -+ if err != nil { -+ continue -+ } -+ -+ stats.CPUs = append(stats.CPUs, cpu) -+ } -+ } -+ -+ return stats, nil -+} -+ -+func parseProcSchedstat(contents string) (ProcSchedstat, error) { -+ var ( -+ stats ProcSchedstat -+ err error -+ ) -+ match := procLineRE.FindStringSubmatch(contents) -+ -+ if match != nil { -+ stats.RunningNanoseconds, err = strconv.ParseUint(match[1], 10, 64) -+ if err != nil { -+ return stats, err -+ } -+ -+ stats.WaitingNanoseconds, err = strconv.ParseUint(match[2], 10, 64) -+ if err != nil { -+ return stats, err -+ } -+ -+ stats.RunTimeslices, err = strconv.ParseUint(match[3], 10, 64) -+ return stats, err -+ } -+ -+ return stats, errors.New("could not parse schedstat") -+} -diff --git a/vendor/github.com/prometheus/procfs/slab.go b/vendor/github.com/prometheus/procfs/slab.go -new file mode 100755 -index 0000000..bc9aaf5 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/slab.go -@@ -0,0 +1,151 @@ -+// Copyright 2020 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "regexp" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+var ( -+ slabSpace = regexp.MustCompile(`\s+`) -+ slabVer = regexp.MustCompile(`slabinfo -`) -+ slabHeader = regexp.MustCompile(`# name`) -+) -+ -+// Slab represents a slab pool in the kernel. -+type Slab struct { -+ Name string -+ ObjActive int64 -+ ObjNum int64 -+ ObjSize int64 -+ ObjPerSlab int64 -+ PagesPerSlab int64 -+ // tunables -+ Limit int64 -+ Batch int64 -+ SharedFactor int64 -+ SlabActive int64 -+ SlabNum int64 -+ SharedAvail int64 -+} -+ -+// SlabInfo represents info for all slabs. -+type SlabInfo struct { -+ Slabs []*Slab -+} -+ -+func shouldParseSlab(line string) bool { -+ if slabVer.MatchString(line) { -+ return false -+ } -+ if slabHeader.MatchString(line) { -+ return false -+ } -+ return true -+} -+ -+// parseV21SlabEntry is used to parse a line from /proc/slabinfo version 2.1. -+func parseV21SlabEntry(line string) (*Slab, error) { -+ // First cleanup whitespace. -+ l := slabSpace.ReplaceAllString(line, " ") -+ s := strings.Split(l, " ") -+ if len(s) != 16 { -+ return nil, fmt.Errorf("unable to parse: %q", line) -+ } -+ var err error -+ i := &Slab{Name: s[0]} -+ i.ObjActive, err = strconv.ParseInt(s[1], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.ObjNum, err = strconv.ParseInt(s[2], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.ObjSize, err = strconv.ParseInt(s[3], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.ObjPerSlab, err = strconv.ParseInt(s[4], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.PagesPerSlab, err = strconv.ParseInt(s[5], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.Limit, err = strconv.ParseInt(s[8], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.Batch, err = strconv.ParseInt(s[9], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.SharedFactor, err = strconv.ParseInt(s[10], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.SlabActive, err = strconv.ParseInt(s[13], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.SlabNum, err = strconv.ParseInt(s[14], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ i.SharedAvail, err = strconv.ParseInt(s[15], 10, 64) -+ if err != nil { -+ return nil, err -+ } -+ return i, nil -+} -+ -+// parseSlabInfo21 is used to parse a slabinfo 2.1 file. -+func parseSlabInfo21(r *bytes.Reader) (SlabInfo, error) { -+ scanner := bufio.NewScanner(r) -+ s := SlabInfo{Slabs: []*Slab{}} -+ for scanner.Scan() { -+ line := scanner.Text() -+ if !shouldParseSlab(line) { -+ continue -+ } -+ slab, err := parseV21SlabEntry(line) -+ if err != nil { -+ return s, err -+ } -+ s.Slabs = append(s.Slabs, slab) -+ } -+ return s, nil -+} -+ -+// SlabInfo reads data from `/proc/slabinfo`. -+func (fs FS) SlabInfo() (SlabInfo, error) { -+ // TODO: Consider passing options to allow for parsing different -+ // slabinfo versions. However, slabinfo 2.1 has been stable since -+ // kernel 2.6.10 and later. -+ data, err := util.ReadFileNoStat(fs.proc.Path("slabinfo")) -+ if err != nil { -+ return SlabInfo{}, err -+ } -+ -+ return parseSlabInfo21(bytes.NewReader(data)) -+} -diff --git a/vendor/github.com/prometheus/procfs/softirqs.go b/vendor/github.com/prometheus/procfs/softirqs.go -new file mode 100755 -index 0000000..559129c ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/softirqs.go -@@ -0,0 +1,160 @@ -+// Copyright 2022 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Softirqs represents the softirq statistics. -+type Softirqs struct { -+ Hi []uint64 -+ Timer []uint64 -+ NetTx []uint64 -+ NetRx []uint64 -+ Block []uint64 -+ IRQPoll []uint64 -+ Tasklet []uint64 -+ Sched []uint64 -+ HRTimer []uint64 -+ RCU []uint64 -+} -+ -+func (fs FS) Softirqs() (Softirqs, error) { -+ fileName := fs.proc.Path("softirqs") -+ data, err := util.ReadFileNoStat(fileName) -+ if err != nil { -+ return Softirqs{}, err -+ } -+ -+ reader := bytes.NewReader(data) -+ -+ return parseSoftirqs(reader) -+} -+ -+func parseSoftirqs(r io.Reader) (Softirqs, error) { -+ var ( -+ softirqs = Softirqs{} -+ scanner = bufio.NewScanner(r) -+ ) -+ -+ if !scanner.Scan() { -+ return Softirqs{}, fmt.Errorf("softirqs empty") -+ } -+ -+ for scanner.Scan() { -+ parts := strings.Fields(scanner.Text()) -+ var err error -+ -+ // require at least one cpu -+ if len(parts) < 2 { -+ continue -+ } -+ switch { -+ case parts[0] == "HI:": -+ perCPU := parts[1:] -+ softirqs.Hi = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.Hi[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (HI%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "TIMER:": -+ perCPU := parts[1:] -+ softirqs.Timer = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.Timer[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (TIMER%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "NET_TX:": -+ perCPU := parts[1:] -+ softirqs.NetTx = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.NetTx[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (NET_TX%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "NET_RX:": -+ perCPU := parts[1:] -+ softirqs.NetRx = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.NetRx[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (NET_RX%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "BLOCK:": -+ perCPU := parts[1:] -+ softirqs.Block = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.Block[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (BLOCK%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "IRQ_POLL:": -+ perCPU := parts[1:] -+ softirqs.IRQPoll = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.IRQPoll[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (IRQ_POLL%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "TASKLET:": -+ perCPU := parts[1:] -+ softirqs.Tasklet = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.Tasklet[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (TASKLET%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "SCHED:": -+ perCPU := parts[1:] -+ softirqs.Sched = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.Sched[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (SCHED%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "HRTIMER:": -+ perCPU := parts[1:] -+ softirqs.HRTimer = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.HRTimer[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (HRTIMER%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "RCU:": -+ perCPU := parts[1:] -+ softirqs.RCU = make([]uint64, len(perCPU)) -+ for i, count := range perCPU { -+ if softirqs.RCU[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse %q (RCU%d): %w", count, i, err) -+ } -+ } -+ } -+ } -+ -+ if err := scanner.Err(); err != nil { -+ return Softirqs{}, fmt.Errorf("couldn't parse softirqs: %w", err) -+ } -+ -+ return softirqs, scanner.Err() -+} -diff --git a/vendor/github.com/prometheus/procfs/stat.go b/vendor/github.com/prometheus/procfs/stat.go -new file mode 100755 -index 0000000..33f97ca ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/stat.go -@@ -0,0 +1,244 @@ -+// Copyright 2018 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "io" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/fs" -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// CPUStat shows how much time the cpu spend in various stages. -+type CPUStat struct { -+ User float64 -+ Nice float64 -+ System float64 -+ Idle float64 -+ Iowait float64 -+ IRQ float64 -+ SoftIRQ float64 -+ Steal float64 -+ Guest float64 -+ GuestNice float64 -+} -+ -+// SoftIRQStat represent the softirq statistics as exported in the procfs stat file. -+// A nice introduction can be found at https://0xax.gitbooks.io/linux-insides/content/interrupts/interrupts-9.html -+// It is possible to get per-cpu stats by reading `/proc/softirqs`. -+type SoftIRQStat struct { -+ Hi uint64 -+ Timer uint64 -+ NetTx uint64 -+ NetRx uint64 -+ Block uint64 -+ BlockIoPoll uint64 -+ Tasklet uint64 -+ Sched uint64 -+ Hrtimer uint64 -+ Rcu uint64 -+} -+ -+// Stat represents kernel/system statistics. -+type Stat struct { -+ // Boot time in seconds since the Epoch. -+ BootTime uint64 -+ // Summed up cpu statistics. -+ CPUTotal CPUStat -+ // Per-CPU statistics. -+ CPU []CPUStat -+ // Number of times interrupts were handled, which contains numbered and unnumbered IRQs. -+ IRQTotal uint64 -+ // Number of times a numbered IRQ was triggered. -+ IRQ []uint64 -+ // Number of times a context switch happened. -+ ContextSwitches uint64 -+ // Number of times a process was created. -+ ProcessCreated uint64 -+ // Number of processes currently running. -+ ProcessesRunning uint64 -+ // Number of processes currently blocked (waiting for IO). -+ ProcessesBlocked uint64 -+ // Number of times a softirq was scheduled. -+ SoftIRQTotal uint64 -+ // Detailed softirq statistics. -+ SoftIRQ SoftIRQStat -+} -+ -+// Parse a cpu statistics line and returns the CPUStat struct plus the cpu id (or -1 for the overall sum). -+func parseCPUStat(line string) (CPUStat, int64, error) { -+ cpuStat := CPUStat{} -+ var cpu string -+ -+ count, err := fmt.Sscanf(line, "%s %f %f %f %f %f %f %f %f %f %f", -+ &cpu, -+ &cpuStat.User, &cpuStat.Nice, &cpuStat.System, &cpuStat.Idle, -+ &cpuStat.Iowait, &cpuStat.IRQ, &cpuStat.SoftIRQ, &cpuStat.Steal, -+ &cpuStat.Guest, &cpuStat.GuestNice) -+ -+ if err != nil && err != io.EOF { -+ return CPUStat{}, -1, fmt.Errorf("couldn't parse %q (cpu): %w", line, err) -+ } -+ if count == 0 { -+ return CPUStat{}, -1, fmt.Errorf("couldn't parse %q (cpu): 0 elements parsed", line) -+ } -+ -+ cpuStat.User /= userHZ -+ cpuStat.Nice /= userHZ -+ cpuStat.System /= userHZ -+ cpuStat.Idle /= userHZ -+ cpuStat.Iowait /= userHZ -+ cpuStat.IRQ /= userHZ -+ cpuStat.SoftIRQ /= userHZ -+ cpuStat.Steal /= userHZ -+ cpuStat.Guest /= userHZ -+ cpuStat.GuestNice /= userHZ -+ -+ if cpu == "cpu" { -+ return cpuStat, -1, nil -+ } -+ -+ cpuID, err := strconv.ParseInt(cpu[3:], 10, 64) -+ if err != nil { -+ return CPUStat{}, -1, fmt.Errorf("couldn't parse %q (cpu/cpuid): %w", line, err) -+ } -+ -+ return cpuStat, cpuID, nil -+} -+ -+// Parse a softirq line. -+func parseSoftIRQStat(line string) (SoftIRQStat, uint64, error) { -+ softIRQStat := SoftIRQStat{} -+ var total uint64 -+ var prefix string -+ -+ _, err := fmt.Sscanf(line, "%s %d %d %d %d %d %d %d %d %d %d %d", -+ &prefix, &total, -+ &softIRQStat.Hi, &softIRQStat.Timer, &softIRQStat.NetTx, &softIRQStat.NetRx, -+ &softIRQStat.Block, &softIRQStat.BlockIoPoll, -+ &softIRQStat.Tasklet, &softIRQStat.Sched, -+ &softIRQStat.Hrtimer, &softIRQStat.Rcu) -+ -+ if err != nil { -+ return SoftIRQStat{}, 0, fmt.Errorf("couldn't parse %q (softirq): %w", line, err) -+ } -+ -+ return softIRQStat, total, nil -+} -+ -+// NewStat returns information about current cpu/process statistics. -+// See https://www.kernel.org/doc/Documentation/filesystems/proc.txt -+// -+// Deprecated: Use fs.Stat() instead. -+func NewStat() (Stat, error) { -+ fs, err := NewFS(fs.DefaultProcMountPoint) -+ if err != nil { -+ return Stat{}, err -+ } -+ return fs.Stat() -+} -+ -+// NewStat returns information about current cpu/process statistics. -+// See: https://www.kernel.org/doc/Documentation/filesystems/proc.txt -+// -+// Deprecated: Use fs.Stat() instead. -+func (fs FS) NewStat() (Stat, error) { -+ return fs.Stat() -+} -+ -+// Stat returns information about current cpu/process statistics. -+// See: https://www.kernel.org/doc/Documentation/filesystems/proc.txt -+func (fs FS) Stat() (Stat, error) { -+ fileName := fs.proc.Path("stat") -+ data, err := util.ReadFileNoStat(fileName) -+ if err != nil { -+ return Stat{}, err -+ } -+ -+ stat := Stat{} -+ -+ scanner := bufio.NewScanner(bytes.NewReader(data)) -+ for scanner.Scan() { -+ line := scanner.Text() -+ parts := strings.Fields(scanner.Text()) -+ // require at least -+ if len(parts) < 2 { -+ continue -+ } -+ switch { -+ case parts[0] == "btime": -+ if stat.BootTime, err = strconv.ParseUint(parts[1], 10, 64); err != nil { -+ return Stat{}, fmt.Errorf("couldn't parse %q (btime): %w", parts[1], err) -+ } -+ case parts[0] == "intr": -+ if stat.IRQTotal, err = strconv.ParseUint(parts[1], 10, 64); err != nil { -+ return Stat{}, fmt.Errorf("couldn't parse %q (intr): %w", parts[1], err) -+ } -+ numberedIRQs := parts[2:] -+ stat.IRQ = make([]uint64, len(numberedIRQs)) -+ for i, count := range numberedIRQs { -+ if stat.IRQ[i], err = strconv.ParseUint(count, 10, 64); err != nil { -+ return Stat{}, fmt.Errorf("couldn't parse %q (intr%d): %w", count, i, err) -+ } -+ } -+ case parts[0] == "ctxt": -+ if stat.ContextSwitches, err = strconv.ParseUint(parts[1], 10, 64); err != nil { -+ return Stat{}, fmt.Errorf("couldn't parse %q (ctxt): %w", parts[1], err) -+ } -+ case parts[0] == "processes": -+ if stat.ProcessCreated, err = strconv.ParseUint(parts[1], 10, 64); err != nil { -+ return Stat{}, fmt.Errorf("couldn't parse %q (processes): %w", parts[1], err) -+ } -+ case parts[0] == "procs_running": -+ if stat.ProcessesRunning, err = strconv.ParseUint(parts[1], 10, 64); err != nil { -+ return Stat{}, fmt.Errorf("couldn't parse %q (procs_running): %w", parts[1], err) -+ } -+ case parts[0] == "procs_blocked": -+ if stat.ProcessesBlocked, err = strconv.ParseUint(parts[1], 10, 64); err != nil { -+ return Stat{}, fmt.Errorf("couldn't parse %q (procs_blocked): %w", parts[1], err) -+ } -+ case parts[0] == "softirq": -+ softIRQStats, total, err := parseSoftIRQStat(line) -+ if err != nil { -+ return Stat{}, err -+ } -+ stat.SoftIRQTotal = total -+ stat.SoftIRQ = softIRQStats -+ case strings.HasPrefix(parts[0], "cpu"): -+ cpuStat, cpuID, err := parseCPUStat(line) -+ if err != nil { -+ return Stat{}, err -+ } -+ if cpuID == -1 { -+ stat.CPUTotal = cpuStat -+ } else { -+ for int64(len(stat.CPU)) <= cpuID { -+ stat.CPU = append(stat.CPU, CPUStat{}) -+ } -+ stat.CPU[cpuID] = cpuStat -+ } -+ } -+ } -+ -+ if err := scanner.Err(); err != nil { -+ return Stat{}, fmt.Errorf("couldn't parse %q: %w", fileName, err) -+ } -+ -+ return stat, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/swaps.go b/vendor/github.com/prometheus/procfs/swaps.go -new file mode 100755 -index 0000000..15edc22 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/swaps.go -@@ -0,0 +1,89 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+package procfs -+ -+import ( -+ "bufio" -+ "bytes" -+ "fmt" -+ "strconv" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Swap represents an entry in /proc/swaps. -+type Swap struct { -+ Filename string -+ Type string -+ Size int -+ Used int -+ Priority int -+} -+ -+// Swaps returns a slice of all configured swap devices on the system. -+func (fs FS) Swaps() ([]*Swap, error) { -+ data, err := util.ReadFileNoStat(fs.proc.Path("swaps")) -+ if err != nil { -+ return nil, err -+ } -+ return parseSwaps(data) -+} -+ -+func parseSwaps(info []byte) ([]*Swap, error) { -+ swaps := []*Swap{} -+ scanner := bufio.NewScanner(bytes.NewReader(info)) -+ scanner.Scan() // ignore header line -+ for scanner.Scan() { -+ swapString := scanner.Text() -+ parsedSwap, err := parseSwapString(swapString) -+ if err != nil { -+ return nil, err -+ } -+ swaps = append(swaps, parsedSwap) -+ } -+ -+ err := scanner.Err() -+ return swaps, err -+} -+ -+func parseSwapString(swapString string) (*Swap, error) { -+ var err error -+ -+ swapFields := strings.Fields(swapString) -+ swapLength := len(swapFields) -+ if swapLength < 5 { -+ return nil, fmt.Errorf("too few fields in swap string: %s", swapString) -+ } -+ -+ swap := &Swap{ -+ Filename: swapFields[0], -+ Type: swapFields[1], -+ } -+ -+ swap.Size, err = strconv.Atoi(swapFields[2]) -+ if err != nil { -+ return nil, fmt.Errorf("invalid swap size: %s", swapFields[2]) -+ } -+ swap.Used, err = strconv.Atoi(swapFields[3]) -+ if err != nil { -+ return nil, fmt.Errorf("invalid swap used: %s", swapFields[3]) -+ } -+ swap.Priority, err = strconv.Atoi(swapFields[4]) -+ if err != nil { -+ return nil, fmt.Errorf("invalid swap priority: %s", swapFields[4]) -+ } -+ -+ return swap, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/ttar b/vendor/github.com/prometheus/procfs/ttar -new file mode 100755 -index 0000000..19ef02b ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/ttar -@@ -0,0 +1,413 @@ -+#!/usr/bin/env bash -+ -+# Purpose: plain text tar format -+# Limitations: - only suitable for text files, directories, and symlinks -+# - stores only filename, content, and mode -+# - not designed for untrusted input -+# -+# Note: must work with bash version 3.2 (macOS) -+ -+# Copyright 2017 Roger Luethi -+# -+# Licensed under the Apache License, Version 2.0 (the "License"); -+# you may not use this file except in compliance with the License. -+# You may obtain a copy of the License at -+# -+# 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. -+ -+set -o errexit -o nounset -+ -+# Sanitize environment (for instance, standard sorting of glob matches) -+export LC_ALL=C -+ -+path="" -+CMD="" -+ARG_STRING="$*" -+ -+#------------------------------------------------------------------------------ -+# Not all sed implementations can work on null bytes. In order to make ttar -+# work out of the box on macOS, use Python as a stream editor. -+ -+USE_PYTHON=0 -+ -+PYTHON_CREATE_FILTER=$(cat << 'PCF' -+#!/usr/bin/env python -+ -+import re -+import sys -+ -+for line in sys.stdin: -+ line = re.sub(r'EOF', r'\EOF', line) -+ line = re.sub(r'NULLBYTE', r'\NULLBYTE', line) -+ line = re.sub('\x00', r'NULLBYTE', line) -+ sys.stdout.write(line) -+PCF -+) -+ -+PYTHON_EXTRACT_FILTER=$(cat << 'PEF' -+#!/usr/bin/env python -+ -+import re -+import sys -+ -+for line in sys.stdin: -+ line = re.sub(r'(?/dev/null; then -+ echo "ERROR Python not found. Aborting." -+ exit 2 -+ fi -+ USE_PYTHON=1 -+ fi -+} -+ -+#------------------------------------------------------------------------------ -+ -+function usage { -+ bname=$(basename "$0") -+ cat << USAGE -+Usage: $bname [-C

] -c -f (create archive) -+ $bname -t -f (list archive contents) -+ $bname [-C ] -x -f (extract archive) -+ -+Options: -+ -C (change directory) -+ -v (verbose) -+ --recursive-unlink (recursively delete existing directory if path -+ collides with file or directory to extract) -+ -+Example: Change to sysfs directory, create ttar file from fixtures directory -+ $bname -C sysfs -c -f sysfs/fixtures.ttar fixtures/ -+USAGE -+exit "$1" -+} -+ -+function vecho { -+ if [ "${VERBOSE:-}" == "yes" ]; then -+ echo >&7 "$@" -+ fi -+} -+ -+function set_cmd { -+ if [ -n "$CMD" ]; then -+ echo "ERROR: more than one command given" -+ echo -+ usage 2 -+ fi -+ CMD=$1 -+} -+ -+unset VERBOSE -+unset RECURSIVE_UNLINK -+ -+while getopts :cf:-:htxvC: opt; do -+ case $opt in -+ c) -+ set_cmd "create" -+ ;; -+ f) -+ ARCHIVE=$OPTARG -+ ;; -+ h) -+ usage 0 -+ ;; -+ t) -+ set_cmd "list" -+ ;; -+ x) -+ set_cmd "extract" -+ ;; -+ v) -+ VERBOSE=yes -+ exec 7>&1 -+ ;; -+ C) -+ CDIR=$OPTARG -+ ;; -+ -) -+ case $OPTARG in -+ recursive-unlink) -+ RECURSIVE_UNLINK="yes" -+ ;; -+ *) -+ echo -e "Error: invalid option -$OPTARG" -+ echo -+ usage 1 -+ ;; -+ esac -+ ;; -+ *) -+ echo >&2 "ERROR: invalid option -$OPTARG" -+ echo -+ usage 1 -+ ;; -+ esac -+done -+ -+# Remove processed options from arguments -+shift $(( OPTIND - 1 )); -+ -+if [ "${CMD:-}" == "" ]; then -+ echo >&2 "ERROR: no command given" -+ echo -+ usage 1 -+elif [ "${ARCHIVE:-}" == "" ]; then -+ echo >&2 "ERROR: no archive name given" -+ echo -+ usage 1 -+fi -+ -+function list { -+ local path="" -+ local size=0 -+ local line_no=0 -+ local ttar_file=$1 -+ if [ -n "${2:-}" ]; then -+ echo >&2 "ERROR: too many arguments." -+ echo -+ usage 1 -+ fi -+ if [ ! -e "$ttar_file" ]; then -+ echo >&2 "ERROR: file not found ($ttar_file)" -+ echo -+ usage 1 -+ fi -+ while read -r line; do -+ line_no=$(( line_no + 1 )) -+ if [ $size -gt 0 ]; then -+ size=$(( size - 1 )) -+ continue -+ fi -+ if [[ $line =~ ^Path:\ (.*)$ ]]; then -+ path=${BASH_REMATCH[1]} -+ elif [[ $line =~ ^Lines:\ (.*)$ ]]; then -+ size=${BASH_REMATCH[1]} -+ echo "$path" -+ elif [[ $line =~ ^Directory:\ (.*)$ ]]; then -+ path=${BASH_REMATCH[1]} -+ echo "$path/" -+ elif [[ $line =~ ^SymlinkTo:\ (.*)$ ]]; then -+ echo "$path -> ${BASH_REMATCH[1]}" -+ fi -+ done < "$ttar_file" -+} -+ -+function extract { -+ local path="" -+ local size=0 -+ local line_no=0 -+ local ttar_file=$1 -+ if [ -n "${2:-}" ]; then -+ echo >&2 "ERROR: too many arguments." -+ echo -+ usage 1 -+ fi -+ if [ ! -e "$ttar_file" ]; then -+ echo >&2 "ERROR: file not found ($ttar_file)" -+ echo -+ usage 1 -+ fi -+ while IFS= read -r line; do -+ line_no=$(( line_no + 1 )) -+ local eof_without_newline -+ if [ "$size" -gt 0 ]; then -+ if [[ "$line" =~ [^\\]EOF ]]; then -+ # An EOF not preceded by a backslash indicates that the line -+ # does not end with a newline -+ eof_without_newline=1 -+ else -+ eof_without_newline=0 -+ fi -+ # Replace NULLBYTE with null byte if at beginning of line -+ # Replace NULLBYTE with null byte unless preceded by backslash -+ # Remove one backslash in front of NULLBYTE (if any) -+ # Remove EOF unless preceded by backslash -+ # Remove one backslash in front of EOF -+ if [ $USE_PYTHON -eq 1 ]; then -+ echo -n "$line" | python -c "$PYTHON_EXTRACT_FILTER" >> "$path" -+ else -+ # The repeated pattern makes up for sed's lack of negative -+ # lookbehind assertions (for consecutive null bytes). -+ echo -n "$line" | \ -+ sed -e 's/^NULLBYTE/\x0/g; -+ s/\([^\\]\)NULLBYTE/\1\x0/g; -+ s/\([^\\]\)NULLBYTE/\1\x0/g; -+ s/\\NULLBYTE/NULLBYTE/g; -+ s/\([^\\]\)EOF/\1/g; -+ s/\\EOF/EOF/g; -+ ' >> "$path" -+ fi -+ if [[ "$eof_without_newline" -eq 0 ]]; then -+ echo >> "$path" -+ fi -+ size=$(( size - 1 )) -+ continue -+ fi -+ if [[ $line =~ ^Path:\ (.*)$ ]]; then -+ path=${BASH_REMATCH[1]} -+ if [ -L "$path" ]; then -+ rm "$path" -+ elif [ -d "$path" ]; then -+ if [ "${RECURSIVE_UNLINK:-}" == "yes" ]; then -+ rm -r "$path" -+ else -+ # Safe because symlinks to directories are dealt with above -+ rmdir "$path" -+ fi -+ elif [ -e "$path" ]; then -+ rm "$path" -+ fi -+ elif [[ $line =~ ^Lines:\ (.*)$ ]]; then -+ size=${BASH_REMATCH[1]} -+ # Create file even if it is zero-length. -+ touch "$path" -+ vecho " $path" -+ elif [[ $line =~ ^Mode:\ (.*)$ ]]; then -+ mode=${BASH_REMATCH[1]} -+ chmod "$mode" "$path" -+ vecho "$mode" -+ elif [[ $line =~ ^Directory:\ (.*)$ ]]; then -+ path=${BASH_REMATCH[1]} -+ mkdir -p "$path" -+ vecho " $path/" -+ elif [[ $line =~ ^SymlinkTo:\ (.*)$ ]]; then -+ ln -s "${BASH_REMATCH[1]}" "$path" -+ vecho " $path -> ${BASH_REMATCH[1]}" -+ elif [[ $line =~ ^# ]]; then -+ # Ignore comments between files -+ continue -+ else -+ echo >&2 "ERROR: Unknown keyword on line $line_no: $line" -+ exit 1 -+ fi -+ done < "$ttar_file" -+} -+ -+function div { -+ echo "# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" \ -+ "- - - - - -" -+} -+ -+function get_mode { -+ local mfile=$1 -+ if [ -z "${STAT_OPTION:-}" ]; then -+ if stat -c '%a' "$mfile" >/dev/null 2>&1; then -+ # GNU stat -+ STAT_OPTION='-c' -+ STAT_FORMAT='%a' -+ else -+ # BSD stat -+ STAT_OPTION='-f' -+ # Octal output, user/group/other (omit file type, sticky bit) -+ STAT_FORMAT='%OLp' -+ fi -+ fi -+ stat "${STAT_OPTION}" "${STAT_FORMAT}" "$mfile" -+} -+ -+function _create { -+ shopt -s nullglob -+ local mode -+ local eof_without_newline -+ while (( "$#" )); do -+ file=$1 -+ if [ -L "$file" ]; then -+ echo "Path: $file" -+ symlinkTo=$(readlink "$file") -+ echo "SymlinkTo: $symlinkTo" -+ vecho " $file -> $symlinkTo" -+ div -+ elif [ -d "$file" ]; then -+ # Strip trailing slash (if there is one) -+ file=${file%/} -+ echo "Directory: $file" -+ mode=$(get_mode "$file") -+ echo "Mode: $mode" -+ vecho "$mode $file/" -+ div -+ # Find all files and dirs, including hidden/dot files -+ for x in "$file/"{*,.[^.]*}; do -+ _create "$x" -+ done -+ elif [ -f "$file" ]; then -+ echo "Path: $file" -+ lines=$(wc -l "$file"|awk '{print $1}') -+ eof_without_newline=0 -+ if [[ "$(wc -c "$file"|awk '{print $1}')" -gt 0 ]] && \ -+ [[ "$(tail -c 1 "$file" | wc -l)" -eq 0 ]]; then -+ eof_without_newline=1 -+ lines=$((lines+1)) -+ fi -+ echo "Lines: $lines" -+ # Add backslash in front of EOF -+ # Add backslash in front of NULLBYTE -+ # Replace null byte with NULLBYTE -+ if [ $USE_PYTHON -eq 1 ]; then -+ < "$file" python -c "$PYTHON_CREATE_FILTER" -+ else -+ < "$file" \ -+ sed 's/EOF/\\EOF/g; -+ s/NULLBYTE/\\NULLBYTE/g; -+ s/\x0/NULLBYTE/g; -+ ' -+ fi -+ if [[ "$eof_without_newline" -eq 1 ]]; then -+ # Finish line with EOF to indicate that the original line did -+ # not end with a linefeed -+ echo "EOF" -+ fi -+ mode=$(get_mode "$file") -+ echo "Mode: $mode" -+ vecho "$mode $file" -+ div -+ else -+ echo >&2 "ERROR: file not found ($file in $(pwd))" -+ exit 2 -+ fi -+ shift -+ done -+} -+ -+function create { -+ ttar_file=$1 -+ shift -+ if [ -z "${1:-}" ]; then -+ echo >&2 "ERROR: missing arguments." -+ echo -+ usage 1 -+ fi -+ if [ -e "$ttar_file" ]; then -+ rm "$ttar_file" -+ fi -+ exec > "$ttar_file" -+ echo "# Archive created by ttar $ARG_STRING" -+ _create "$@" -+} -+ -+test_environment -+ -+if [ -n "${CDIR:-}" ]; then -+ if [[ "$ARCHIVE" != /* ]]; then -+ # Relative path: preserve the archive's location before changing -+ # directory -+ ARCHIVE="$(pwd)/$ARCHIVE" -+ fi -+ cd "$CDIR" -+fi -+ -+"$CMD" "$ARCHIVE" "$@" -diff --git a/vendor/github.com/prometheus/procfs/vm.go b/vendor/github.com/prometheus/procfs/vm.go -new file mode 100755 -index 0000000..20ceb77 ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/vm.go -@@ -0,0 +1,210 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build !windows -+// +build !windows -+ -+package procfs -+ -+import ( -+ "fmt" -+ "os" -+ "path/filepath" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// The VM interface is described at -+// https://www.kernel.org/doc/Documentation/sysctl/vm.txt -+// Each setting is exposed as a single file. -+// Each file contains one line with a single numerical value, except lowmem_reserve_ratio which holds an array -+// and numa_zonelist_order (deprecated) which is a string. -+type VM struct { -+ AdminReserveKbytes *int64 // /proc/sys/vm/admin_reserve_kbytes -+ BlockDump *int64 // /proc/sys/vm/block_dump -+ CompactUnevictableAllowed *int64 // /proc/sys/vm/compact_unevictable_allowed -+ DirtyBackgroundBytes *int64 // /proc/sys/vm/dirty_background_bytes -+ DirtyBackgroundRatio *int64 // /proc/sys/vm/dirty_background_ratio -+ DirtyBytes *int64 // /proc/sys/vm/dirty_bytes -+ DirtyExpireCentisecs *int64 // /proc/sys/vm/dirty_expire_centisecs -+ DirtyRatio *int64 // /proc/sys/vm/dirty_ratio -+ DirtytimeExpireSeconds *int64 // /proc/sys/vm/dirtytime_expire_seconds -+ DirtyWritebackCentisecs *int64 // /proc/sys/vm/dirty_writeback_centisecs -+ DropCaches *int64 // /proc/sys/vm/drop_caches -+ ExtfragThreshold *int64 // /proc/sys/vm/extfrag_threshold -+ HugetlbShmGroup *int64 // /proc/sys/vm/hugetlb_shm_group -+ LaptopMode *int64 // /proc/sys/vm/laptop_mode -+ LegacyVaLayout *int64 // /proc/sys/vm/legacy_va_layout -+ LowmemReserveRatio []*int64 // /proc/sys/vm/lowmem_reserve_ratio -+ MaxMapCount *int64 // /proc/sys/vm/max_map_count -+ MemoryFailureEarlyKill *int64 // /proc/sys/vm/memory_failure_early_kill -+ MemoryFailureRecovery *int64 // /proc/sys/vm/memory_failure_recovery -+ MinFreeKbytes *int64 // /proc/sys/vm/min_free_kbytes -+ MinSlabRatio *int64 // /proc/sys/vm/min_slab_ratio -+ MinUnmappedRatio *int64 // /proc/sys/vm/min_unmapped_ratio -+ MmapMinAddr *int64 // /proc/sys/vm/mmap_min_addr -+ NrHugepages *int64 // /proc/sys/vm/nr_hugepages -+ NrHugepagesMempolicy *int64 // /proc/sys/vm/nr_hugepages_mempolicy -+ NrOvercommitHugepages *int64 // /proc/sys/vm/nr_overcommit_hugepages -+ NumaStat *int64 // /proc/sys/vm/numa_stat -+ NumaZonelistOrder string // /proc/sys/vm/numa_zonelist_order -+ OomDumpTasks *int64 // /proc/sys/vm/oom_dump_tasks -+ OomKillAllocatingTask *int64 // /proc/sys/vm/oom_kill_allocating_task -+ OvercommitKbytes *int64 // /proc/sys/vm/overcommit_kbytes -+ OvercommitMemory *int64 // /proc/sys/vm/overcommit_memory -+ OvercommitRatio *int64 // /proc/sys/vm/overcommit_ratio -+ PageCluster *int64 // /proc/sys/vm/page-cluster -+ PanicOnOom *int64 // /proc/sys/vm/panic_on_oom -+ PercpuPagelistFraction *int64 // /proc/sys/vm/percpu_pagelist_fraction -+ StatInterval *int64 // /proc/sys/vm/stat_interval -+ Swappiness *int64 // /proc/sys/vm/swappiness -+ UserReserveKbytes *int64 // /proc/sys/vm/user_reserve_kbytes -+ VfsCachePressure *int64 // /proc/sys/vm/vfs_cache_pressure -+ WatermarkBoostFactor *int64 // /proc/sys/vm/watermark_boost_factor -+ WatermarkScaleFactor *int64 // /proc/sys/vm/watermark_scale_factor -+ ZoneReclaimMode *int64 // /proc/sys/vm/zone_reclaim_mode -+} -+ -+// VM reads the VM statistics from the specified `proc` filesystem. -+func (fs FS) VM() (*VM, error) { -+ path := fs.proc.Path("sys/vm") -+ file, err := os.Stat(path) -+ if err != nil { -+ return nil, err -+ } -+ if !file.Mode().IsDir() { -+ return nil, fmt.Errorf("%s is not a directory", path) -+ } -+ -+ files, err := os.ReadDir(path) -+ if err != nil { -+ return nil, err -+ } -+ -+ var vm VM -+ for _, f := range files { -+ if f.IsDir() { -+ continue -+ } -+ -+ name := filepath.Join(path, f.Name()) -+ // ignore errors on read, as there are some write only -+ // in /proc/sys/vm -+ value, err := util.SysReadFile(name) -+ if err != nil { -+ continue -+ } -+ vp := util.NewValueParser(value) -+ -+ switch f.Name() { -+ case "admin_reserve_kbytes": -+ vm.AdminReserveKbytes = vp.PInt64() -+ case "block_dump": -+ vm.BlockDump = vp.PInt64() -+ case "compact_unevictable_allowed": -+ vm.CompactUnevictableAllowed = vp.PInt64() -+ case "dirty_background_bytes": -+ vm.DirtyBackgroundBytes = vp.PInt64() -+ case "dirty_background_ratio": -+ vm.DirtyBackgroundRatio = vp.PInt64() -+ case "dirty_bytes": -+ vm.DirtyBytes = vp.PInt64() -+ case "dirty_expire_centisecs": -+ vm.DirtyExpireCentisecs = vp.PInt64() -+ case "dirty_ratio": -+ vm.DirtyRatio = vp.PInt64() -+ case "dirtytime_expire_seconds": -+ vm.DirtytimeExpireSeconds = vp.PInt64() -+ case "dirty_writeback_centisecs": -+ vm.DirtyWritebackCentisecs = vp.PInt64() -+ case "drop_caches": -+ vm.DropCaches = vp.PInt64() -+ case "extfrag_threshold": -+ vm.ExtfragThreshold = vp.PInt64() -+ case "hugetlb_shm_group": -+ vm.HugetlbShmGroup = vp.PInt64() -+ case "laptop_mode": -+ vm.LaptopMode = vp.PInt64() -+ case "legacy_va_layout": -+ vm.LegacyVaLayout = vp.PInt64() -+ case "lowmem_reserve_ratio": -+ stringSlice := strings.Fields(value) -+ pint64Slice := make([]*int64, 0, len(stringSlice)) -+ for _, value := range stringSlice { -+ vp := util.NewValueParser(value) -+ pint64Slice = append(pint64Slice, vp.PInt64()) -+ } -+ vm.LowmemReserveRatio = pint64Slice -+ case "max_map_count": -+ vm.MaxMapCount = vp.PInt64() -+ case "memory_failure_early_kill": -+ vm.MemoryFailureEarlyKill = vp.PInt64() -+ case "memory_failure_recovery": -+ vm.MemoryFailureRecovery = vp.PInt64() -+ case "min_free_kbytes": -+ vm.MinFreeKbytes = vp.PInt64() -+ case "min_slab_ratio": -+ vm.MinSlabRatio = vp.PInt64() -+ case "min_unmapped_ratio": -+ vm.MinUnmappedRatio = vp.PInt64() -+ case "mmap_min_addr": -+ vm.MmapMinAddr = vp.PInt64() -+ case "nr_hugepages": -+ vm.NrHugepages = vp.PInt64() -+ case "nr_hugepages_mempolicy": -+ vm.NrHugepagesMempolicy = vp.PInt64() -+ case "nr_overcommit_hugepages": -+ vm.NrOvercommitHugepages = vp.PInt64() -+ case "numa_stat": -+ vm.NumaStat = vp.PInt64() -+ case "numa_zonelist_order": -+ vm.NumaZonelistOrder = value -+ case "oom_dump_tasks": -+ vm.OomDumpTasks = vp.PInt64() -+ case "oom_kill_allocating_task": -+ vm.OomKillAllocatingTask = vp.PInt64() -+ case "overcommit_kbytes": -+ vm.OvercommitKbytes = vp.PInt64() -+ case "overcommit_memory": -+ vm.OvercommitMemory = vp.PInt64() -+ case "overcommit_ratio": -+ vm.OvercommitRatio = vp.PInt64() -+ case "page-cluster": -+ vm.PageCluster = vp.PInt64() -+ case "panic_on_oom": -+ vm.PanicOnOom = vp.PInt64() -+ case "percpu_pagelist_fraction": -+ vm.PercpuPagelistFraction = vp.PInt64() -+ case "stat_interval": -+ vm.StatInterval = vp.PInt64() -+ case "swappiness": -+ vm.Swappiness = vp.PInt64() -+ case "user_reserve_kbytes": -+ vm.UserReserveKbytes = vp.PInt64() -+ case "vfs_cache_pressure": -+ vm.VfsCachePressure = vp.PInt64() -+ case "watermark_boost_factor": -+ vm.WatermarkBoostFactor = vp.PInt64() -+ case "watermark_scale_factor": -+ vm.WatermarkScaleFactor = vp.PInt64() -+ case "zone_reclaim_mode": -+ vm.ZoneReclaimMode = vp.PInt64() -+ } -+ if err := vp.Err(); err != nil { -+ return nil, err -+ } -+ } -+ -+ return &vm, nil -+} -diff --git a/vendor/github.com/prometheus/procfs/zoneinfo.go b/vendor/github.com/prometheus/procfs/zoneinfo.go -new file mode 100755 -index 0000000..c745a4c ---- /dev/null -+++ b/vendor/github.com/prometheus/procfs/zoneinfo.go -@@ -0,0 +1,196 @@ -+// Copyright 2019 The Prometheus Authors -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+//go:build !windows -+// +build !windows -+ -+package procfs -+ -+import ( -+ "bytes" -+ "fmt" -+ "os" -+ "regexp" -+ "strings" -+ -+ "github.com/prometheus/procfs/internal/util" -+) -+ -+// Zoneinfo holds info parsed from /proc/zoneinfo. -+type Zoneinfo struct { -+ Node string -+ Zone string -+ NrFreePages *int64 -+ Min *int64 -+ Low *int64 -+ High *int64 -+ Scanned *int64 -+ Spanned *int64 -+ Present *int64 -+ Managed *int64 -+ NrActiveAnon *int64 -+ NrInactiveAnon *int64 -+ NrIsolatedAnon *int64 -+ NrAnonPages *int64 -+ NrAnonTransparentHugepages *int64 -+ NrActiveFile *int64 -+ NrInactiveFile *int64 -+ NrIsolatedFile *int64 -+ NrFilePages *int64 -+ NrSlabReclaimable *int64 -+ NrSlabUnreclaimable *int64 -+ NrMlockStack *int64 -+ NrKernelStack *int64 -+ NrMapped *int64 -+ NrDirty *int64 -+ NrWriteback *int64 -+ NrUnevictable *int64 -+ NrShmem *int64 -+ NrDirtied *int64 -+ NrWritten *int64 -+ NumaHit *int64 -+ NumaMiss *int64 -+ NumaForeign *int64 -+ NumaInterleave *int64 -+ NumaLocal *int64 -+ NumaOther *int64 -+ Protection []*int64 -+} -+ -+var nodeZoneRE = regexp.MustCompile(`(\d+), zone\s+(\w+)`) -+ -+// Zoneinfo parses an zoneinfo-file (/proc/zoneinfo) and returns a slice of -+// structs containing the relevant info. More information available here: -+// https://www.kernel.org/doc/Documentation/sysctl/vm.txt -+func (fs FS) Zoneinfo() ([]Zoneinfo, error) { -+ data, err := os.ReadFile(fs.proc.Path("zoneinfo")) -+ if err != nil { -+ return nil, fmt.Errorf("error reading zoneinfo %q: %w", fs.proc.Path("zoneinfo"), err) -+ } -+ zoneinfo, err := parseZoneinfo(data) -+ if err != nil { -+ return nil, fmt.Errorf("error parsing zoneinfo %q: %w", fs.proc.Path("zoneinfo"), err) -+ } -+ return zoneinfo, nil -+} -+ -+func parseZoneinfo(zoneinfoData []byte) ([]Zoneinfo, error) { -+ -+ zoneinfo := []Zoneinfo{} -+ -+ zoneinfoBlocks := bytes.Split(zoneinfoData, []byte("\nNode")) -+ for _, block := range zoneinfoBlocks { -+ var zoneinfoElement Zoneinfo -+ lines := strings.Split(string(block), "\n") -+ for _, line := range lines { -+ -+ if nodeZone := nodeZoneRE.FindStringSubmatch(line); nodeZone != nil { -+ zoneinfoElement.Node = nodeZone[1] -+ zoneinfoElement.Zone = nodeZone[2] -+ continue -+ } -+ if strings.HasPrefix(strings.TrimSpace(line), "per-node stats") { -+ continue -+ } -+ parts := strings.Fields(strings.TrimSpace(line)) -+ if len(parts) < 2 { -+ continue -+ } -+ vp := util.NewValueParser(parts[1]) -+ switch parts[0] { -+ case "nr_free_pages": -+ zoneinfoElement.NrFreePages = vp.PInt64() -+ case "min": -+ zoneinfoElement.Min = vp.PInt64() -+ case "low": -+ zoneinfoElement.Low = vp.PInt64() -+ case "high": -+ zoneinfoElement.High = vp.PInt64() -+ case "scanned": -+ zoneinfoElement.Scanned = vp.PInt64() -+ case "spanned": -+ zoneinfoElement.Spanned = vp.PInt64() -+ case "present": -+ zoneinfoElement.Present = vp.PInt64() -+ case "managed": -+ zoneinfoElement.Managed = vp.PInt64() -+ case "nr_active_anon": -+ zoneinfoElement.NrActiveAnon = vp.PInt64() -+ case "nr_inactive_anon": -+ zoneinfoElement.NrInactiveAnon = vp.PInt64() -+ case "nr_isolated_anon": -+ zoneinfoElement.NrIsolatedAnon = vp.PInt64() -+ case "nr_anon_pages": -+ zoneinfoElement.NrAnonPages = vp.PInt64() -+ case "nr_anon_transparent_hugepages": -+ zoneinfoElement.NrAnonTransparentHugepages = vp.PInt64() -+ case "nr_active_file": -+ zoneinfoElement.NrActiveFile = vp.PInt64() -+ case "nr_inactive_file": -+ zoneinfoElement.NrInactiveFile = vp.PInt64() -+ case "nr_isolated_file": -+ zoneinfoElement.NrIsolatedFile = vp.PInt64() -+ case "nr_file_pages": -+ zoneinfoElement.NrFilePages = vp.PInt64() -+ case "nr_slab_reclaimable": -+ zoneinfoElement.NrSlabReclaimable = vp.PInt64() -+ case "nr_slab_unreclaimable": -+ zoneinfoElement.NrSlabUnreclaimable = vp.PInt64() -+ case "nr_mlock_stack": -+ zoneinfoElement.NrMlockStack = vp.PInt64() -+ case "nr_kernel_stack": -+ zoneinfoElement.NrKernelStack = vp.PInt64() -+ case "nr_mapped": -+ zoneinfoElement.NrMapped = vp.PInt64() -+ case "nr_dirty": -+ zoneinfoElement.NrDirty = vp.PInt64() -+ case "nr_writeback": -+ zoneinfoElement.NrWriteback = vp.PInt64() -+ case "nr_unevictable": -+ zoneinfoElement.NrUnevictable = vp.PInt64() -+ case "nr_shmem": -+ zoneinfoElement.NrShmem = vp.PInt64() -+ case "nr_dirtied": -+ zoneinfoElement.NrDirtied = vp.PInt64() -+ case "nr_written": -+ zoneinfoElement.NrWritten = vp.PInt64() -+ case "numa_hit": -+ zoneinfoElement.NumaHit = vp.PInt64() -+ case "numa_miss": -+ zoneinfoElement.NumaMiss = vp.PInt64() -+ case "numa_foreign": -+ zoneinfoElement.NumaForeign = vp.PInt64() -+ case "numa_interleave": -+ zoneinfoElement.NumaInterleave = vp.PInt64() -+ case "numa_local": -+ zoneinfoElement.NumaLocal = vp.PInt64() -+ case "numa_other": -+ zoneinfoElement.NumaOther = vp.PInt64() -+ case "protection:": -+ protectionParts := strings.Split(line, ":") -+ protectionValues := strings.Replace(protectionParts[1], "(", "", 1) -+ protectionValues = strings.Replace(protectionValues, ")", "", 1) -+ protectionValues = strings.TrimSpace(protectionValues) -+ protectionStringMap := strings.Split(protectionValues, ", ") -+ val, err := util.ParsePInt64s(protectionStringMap) -+ if err == nil { -+ zoneinfoElement.Protection = val -+ } -+ } -+ -+ } -+ -+ zoneinfo = append(zoneinfo, zoneinfoElement) -+ } -+ return zoneinfo, nil -+} -diff --git a/vendor/github.com/seccomp/libseccomp-golang/.gitignore b/vendor/github.com/seccomp/libseccomp-golang/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/.golangci.yml b/vendor/github.com/seccomp/libseccomp-golang/.golangci.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/CHANGELOG b/vendor/github.com/seccomp/libseccomp-golang/CHANGELOG -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/CONTRIBUTING.md b/vendor/github.com/seccomp/libseccomp-golang/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/LICENSE b/vendor/github.com/seccomp/libseccomp-golang/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/Makefile b/vendor/github.com/seccomp/libseccomp-golang/Makefile -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/README.md b/vendor/github.com/seccomp/libseccomp-golang/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/SECURITY.md b/vendor/github.com/seccomp/libseccomp-golang/SECURITY.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/seccomp.go b/vendor/github.com/seccomp/libseccomp-golang/seccomp.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go b/vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/.gitignore b/vendor/github.com/sirupsen/logrus/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/.golangci.yml b/vendor/github.com/sirupsen/logrus/.golangci.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/.travis.yml b/vendor/github.com/sirupsen/logrus/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/CHANGELOG.md b/vendor/github.com/sirupsen/logrus/CHANGELOG.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/LICENSE b/vendor/github.com/sirupsen/logrus/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/README.md b/vendor/github.com/sirupsen/logrus/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/alt_exit.go b/vendor/github.com/sirupsen/logrus/alt_exit.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/appveyor.yml b/vendor/github.com/sirupsen/logrus/appveyor.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/buffer_pool.go b/vendor/github.com/sirupsen/logrus/buffer_pool.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/doc.go b/vendor/github.com/sirupsen/logrus/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/entry.go b/vendor/github.com/sirupsen/logrus/entry.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/exported.go b/vendor/github.com/sirupsen/logrus/exported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/formatter.go b/vendor/github.com/sirupsen/logrus/formatter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/hooks.go b/vendor/github.com/sirupsen/logrus/hooks.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/json_formatter.go b/vendor/github.com/sirupsen/logrus/json_formatter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/logger.go b/vendor/github.com/sirupsen/logrus/logger.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/logrus.go b/vendor/github.com/sirupsen/logrus/logrus.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go b/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go b/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_js.go b/vendor/github.com/sirupsen/logrus/terminal_check_js.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go b/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go b/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go b/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_unix.go b/vendor/github.com/sirupsen/logrus/terminal_check_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_windows.go b/vendor/github.com/sirupsen/logrus/terminal_check_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/text_formatter.go b/vendor/github.com/sirupsen/logrus/text_formatter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/sirupsen/logrus/writer.go b/vendor/github.com/sirupsen/logrus/writer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/LICENSE b/vendor/github.com/stretchr/testify/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare_can_convert.go b/vendor/github.com/stretchr/testify/assert/assertion_compare_can_convert.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare_legacy.go b/vendor/github.com/stretchr/testify/assert/assertion_compare_legacy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl b/vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl b/vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertion_order.go b/vendor/github.com/stretchr/testify/assert/assertion_order.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/doc.go b/vendor/github.com/stretchr/testify/assert/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/errors.go b/vendor/github.com/stretchr/testify/assert/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/forward_assertions.go b/vendor/github.com/stretchr/testify/assert/forward_assertions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/stretchr/testify/assert/http_assertions.go b/vendor/github.com/stretchr/testify/assert/http_assertions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/syndtr/gocapability/LICENSE b/vendor/github.com/syndtr/gocapability/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/syndtr/gocapability/capability/capability.go b/vendor/github.com/syndtr/gocapability/capability/capability.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/syndtr/gocapability/capability/capability_linux.go b/vendor/github.com/syndtr/gocapability/capability/capability_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/syndtr/gocapability/capability/capability_noop.go b/vendor/github.com/syndtr/gocapability/capability/capability_noop.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/syndtr/gocapability/capability/enum.go b/vendor/github.com/syndtr/gocapability/capability/enum.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/syndtr/gocapability/capability/enum_gen.go b/vendor/github.com/syndtr/gocapability/capability/enum_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/syndtr/gocapability/capability/syscall_linux.go b/vendor/github.com/syndtr/gocapability/capability/syscall_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/.gitignore b/vendor/github.com/vishvananda/netlink/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/.travis.yml b/vendor/github.com/vishvananda/netlink/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/CHANGELOG.md b/vendor/github.com/vishvananda/netlink/CHANGELOG.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/LICENSE b/vendor/github.com/vishvananda/netlink/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/Makefile b/vendor/github.com/vishvananda/netlink/Makefile -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/README.md b/vendor/github.com/vishvananda/netlink/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/addr.go b/vendor/github.com/vishvananda/netlink/addr.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/addr_linux.go b/vendor/github.com/vishvananda/netlink/addr_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/bpf_linux.go b/vendor/github.com/vishvananda/netlink/bpf_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/bridge_linux.go b/vendor/github.com/vishvananda/netlink/bridge_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/class.go b/vendor/github.com/vishvananda/netlink/class.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/class_linux.go b/vendor/github.com/vishvananda/netlink/class_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/conntrack_linux.go b/vendor/github.com/vishvananda/netlink/conntrack_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/conntrack_unspecified.go b/vendor/github.com/vishvananda/netlink/conntrack_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/devlink_linux.go b/vendor/github.com/vishvananda/netlink/devlink_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/filter.go b/vendor/github.com/vishvananda/netlink/filter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/filter_linux.go b/vendor/github.com/vishvananda/netlink/filter_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/fou.go b/vendor/github.com/vishvananda/netlink/fou.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/fou_linux.go b/vendor/github.com/vishvananda/netlink/fou_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/fou_unspecified.go b/vendor/github.com/vishvananda/netlink/fou_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/genetlink_linux.go b/vendor/github.com/vishvananda/netlink/genetlink_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/genetlink_unspecified.go b/vendor/github.com/vishvananda/netlink/genetlink_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/gtp_linux.go b/vendor/github.com/vishvananda/netlink/gtp_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/handle_linux.go b/vendor/github.com/vishvananda/netlink/handle_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/handle_unspecified.go b/vendor/github.com/vishvananda/netlink/handle_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/ioctl_linux.go b/vendor/github.com/vishvananda/netlink/ioctl_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/link.go b/vendor/github.com/vishvananda/netlink/link.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/link_linux.go b/vendor/github.com/vishvananda/netlink/link_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/link_tuntap_linux.go b/vendor/github.com/vishvananda/netlink/link_tuntap_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/neigh.go b/vendor/github.com/vishvananda/netlink/neigh.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/neigh_linux.go b/vendor/github.com/vishvananda/netlink/neigh_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/netlink.go b/vendor/github.com/vishvananda/netlink/netlink.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/netlink_linux.go b/vendor/github.com/vishvananda/netlink/netlink_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/netlink_unspecified.go b/vendor/github.com/vishvananda/netlink/netlink_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/netns_linux.go b/vendor/github.com/vishvananda/netlink/netns_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/netns_unspecified.go b/vendor/github.com/vishvananda/netlink/netns_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/addr_linux.go b/vendor/github.com/vishvananda/netlink/nl/addr_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/bridge_linux.go b/vendor/github.com/vishvananda/netlink/nl/bridge_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go b/vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/devlink_linux.go b/vendor/github.com/vishvananda/netlink/nl/devlink_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go b/vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/link_linux.go b/vendor/github.com/vishvananda/netlink/nl/link_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/mpls_linux.go b/vendor/github.com/vishvananda/netlink/nl/mpls_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/nl_linux.go b/vendor/github.com/vishvananda/netlink/nl/nl_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go b/vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/rdma_link_linux.go b/vendor/github.com/vishvananda/netlink/nl/rdma_link_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/route_linux.go b/vendor/github.com/vishvananda/netlink/nl/route_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go b/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/seg6local_linux.go b/vendor/github.com/vishvananda/netlink/nl/seg6local_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/syscall.go b/vendor/github.com/vishvananda/netlink/nl/syscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/tc_linux.go b/vendor/github.com/vishvananda/netlink/nl/tc_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go b/vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go b/vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go b/vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go b/vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/order.go b/vendor/github.com/vishvananda/netlink/order.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/protinfo.go b/vendor/github.com/vishvananda/netlink/protinfo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/protinfo_linux.go b/vendor/github.com/vishvananda/netlink/protinfo_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/qdisc.go b/vendor/github.com/vishvananda/netlink/qdisc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/qdisc_linux.go b/vendor/github.com/vishvananda/netlink/qdisc_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/rdma_link_linux.go b/vendor/github.com/vishvananda/netlink/rdma_link_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/route.go b/vendor/github.com/vishvananda/netlink/route.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/route_linux.go b/vendor/github.com/vishvananda/netlink/route_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/route_unspecified.go b/vendor/github.com/vishvananda/netlink/route_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/rule.go b/vendor/github.com/vishvananda/netlink/rule.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/rule_linux.go b/vendor/github.com/vishvananda/netlink/rule_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/socket.go b/vendor/github.com/vishvananda/netlink/socket.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/socket_linux.go b/vendor/github.com/vishvananda/netlink/socket_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/xfrm.go b/vendor/github.com/vishvananda/netlink/xfrm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/xfrm_policy.go b/vendor/github.com/vishvananda/netlink/xfrm_policy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/xfrm_state.go b/vendor/github.com/vishvananda/netlink/xfrm_state.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netns/LICENSE b/vendor/github.com/vishvananda/netns/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netns/README.md b/vendor/github.com/vishvananda/netns/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netns/netns.go b/vendor/github.com/vishvananda/netns/netns.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netns/netns_linux.go b/vendor/github.com/vishvananda/netns/netns_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/github.com/vishvananda/netns/netns_unspecified.go b/vendor/github.com/vishvananda/netns/netns_unspecified.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/crypto/AUTHORS b/vendor/golang.org/x/crypto/AUTHORS -deleted file mode 100644 -index 2b00ddb..0000000 ---- a/vendor/golang.org/x/crypto/AUTHORS -+++ /dev/null -@@ -1,3 +0,0 @@ --# This source code refers to The Go Authors for copyright purposes. --# The master list of authors is in the main Go distribution, --# visible at https://tip.golang.org/AUTHORS. -diff --git a/vendor/golang.org/x/crypto/CONTRIBUTORS b/vendor/golang.org/x/crypto/CONTRIBUTORS -deleted file mode 100644 -index 1fbd3e9..0000000 ---- a/vendor/golang.org/x/crypto/CONTRIBUTORS -+++ /dev/null -@@ -1,3 +0,0 @@ --# This source code was written by the Go contributors. --# The master list of contributors is in the main Go distribution, --# visible at https://tip.golang.org/CONTRIBUTORS. -diff --git a/vendor/golang.org/x/crypto/LICENSE b/vendor/golang.org/x/crypto/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/crypto/PATENTS b/vendor/golang.org/x/crypto/PATENTS -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/LICENSE b/vendor/golang.org/x/net/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/PATENTS b/vendor/golang.org/x/net/PATENTS -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/bpf/asm.go b/vendor/golang.org/x/net/bpf/asm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/bpf/constants.go b/vendor/golang.org/x/net/bpf/constants.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/bpf/doc.go b/vendor/golang.org/x/net/bpf/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/bpf/instructions.go b/vendor/golang.org/x/net/bpf/instructions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/bpf/setter.go b/vendor/golang.org/x/net/bpf/setter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/bpf/vm.go b/vendor/golang.org/x/net/bpf/vm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/bpf/vm_instructions.go b/vendor/golang.org/x/net/bpf/vm_instructions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go -deleted file mode 100644 -index 37dc0cf..0000000 ---- a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go -+++ /dev/null -@@ -1,71 +0,0 @@ --// Copyright 2016 The Go Authors. All rights reserved. --// Use of this source code is governed by a BSD-style --// license that can be found in the LICENSE file. -- --// Package ctxhttp provides helper functions for performing context-aware HTTP requests. --package ctxhttp // import "golang.org/x/net/context/ctxhttp" -- --import ( -- "context" -- "io" -- "net/http" -- "net/url" -- "strings" --) -- --// Do sends an HTTP request with the provided http.Client and returns --// an HTTP response. --// --// If the client is nil, http.DefaultClient is used. --// --// The provided ctx must be non-nil. If it is canceled or times out, --// ctx.Err() will be returned. --func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) { -- if client == nil { -- client = http.DefaultClient -- } -- resp, err := client.Do(req.WithContext(ctx)) -- // If we got an error, and the context has been canceled, -- // the context's error is probably more useful. -- if err != nil { -- select { -- case <-ctx.Done(): -- err = ctx.Err() -- default: -- } -- } -- return resp, err --} -- --// Get issues a GET request via the Do function. --func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) { -- req, err := http.NewRequest("GET", url, nil) -- if err != nil { -- return nil, err -- } -- return Do(ctx, client, req) --} -- --// Head issues a HEAD request via the Do function. --func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) { -- req, err := http.NewRequest("HEAD", url, nil) -- if err != nil { -- return nil, err -- } -- return Do(ctx, client, req) --} -- --// Post issues a POST request via the Do function. --func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) { -- req, err := http.NewRequest("POST", url, body) -- if err != nil { -- return nil, err -- } -- req.Header.Set("Content-Type", bodyType) -- return Do(ctx, client, req) --} -- --// PostForm issues a POST request via the Do function. --func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) { -- return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode())) --} -diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http/httpguts/guts.go b/vendor/golang.org/x/net/http/httpguts/guts.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http/httpguts/httplex.go b/vendor/golang.org/x/net/http/httpguts/httplex.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/.gitignore b/vendor/golang.org/x/net/http2/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/Dockerfile b/vendor/golang.org/x/net/http2/Dockerfile -deleted file mode 100644 -index 8512245..0000000 ---- a/vendor/golang.org/x/net/http2/Dockerfile -+++ /dev/null -@@ -1,51 +0,0 @@ --# --# This Dockerfile builds a recent curl with HTTP/2 client support, using --# a recent nghttp2 build. --# --# See the Makefile for how to tag it. If Docker and that image is found, the --# Go tests use this curl binary for integration tests. --# -- --FROM ubuntu:trusty -- --RUN apt-get update && \ -- apt-get upgrade -y && \ -- apt-get install -y git-core build-essential wget -- --RUN apt-get install -y --no-install-recommends \ -- autotools-dev libtool pkg-config zlib1g-dev \ -- libcunit1-dev libssl-dev libxml2-dev libevent-dev \ -- automake autoconf -- --# The list of packages nghttp2 recommends for h2load: --RUN apt-get install -y --no-install-recommends make binutils \ -- autoconf automake autotools-dev \ -- libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev \ -- libev-dev libevent-dev libjansson-dev libjemalloc-dev \ -- cython python3.4-dev python-setuptools -- --# Note: setting NGHTTP2_VER before the git clone, so an old git clone isn't cached: --ENV NGHTTP2_VER 895da9a --RUN cd /root && git clone https://github.com/tatsuhiro-t/nghttp2.git -- --WORKDIR /root/nghttp2 --RUN git reset --hard $NGHTTP2_VER --RUN autoreconf -i --RUN automake --RUN autoconf --RUN ./configure --RUN make --RUN make install -- --WORKDIR /root --RUN wget https://curl.se/download/curl-7.45.0.tar.gz --RUN tar -zxvf curl-7.45.0.tar.gz --WORKDIR /root/curl-7.45.0 --RUN ./configure --with-ssl --with-nghttp2=/usr/local --RUN make --RUN make install --RUN ldconfig -- --CMD ["-h"] --ENTRYPOINT ["/usr/local/bin/curl"] -- -diff --git a/vendor/golang.org/x/net/http2/Makefile b/vendor/golang.org/x/net/http2/Makefile -deleted file mode 100644 -index 55fd826..0000000 ---- a/vendor/golang.org/x/net/http2/Makefile -+++ /dev/null -@@ -1,3 +0,0 @@ --curlimage: -- docker build -t gohttp2/curl . -- -diff --git a/vendor/golang.org/x/net/http2/ascii.go b/vendor/golang.org/x/net/http2/ascii.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/ciphers.go b/vendor/golang.org/x/net/http2/ciphers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/databuffer.go b/vendor/golang.org/x/net/http2/databuffer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/errors.go b/vendor/golang.org/x/net/http2/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/flow.go b/vendor/golang.org/x/net/http2/flow.go -old mode 100644 -new mode 100755 -index b51f0e0..b7dbd18 ---- a/vendor/golang.org/x/net/http2/flow.go -+++ b/vendor/golang.org/x/net/http2/flow.go -@@ -6,23 +6,91 @@ - - package http2 - --// flow is the flow control window's size. --type flow struct { -+// inflowMinRefresh is the minimum number of bytes we'll send for a -+// flow control window update. -+const inflowMinRefresh = 4 << 10 -+ -+// inflow accounts for an inbound flow control window. -+// It tracks both the latest window sent to the peer (used for enforcement) -+// and the accumulated unsent window. -+type inflow struct { -+ avail int32 -+ unsent int32 -+} -+ -+// init sets the initial window. -+func (f *inflow) init(n int32) { -+ f.avail = n -+} -+ -+// add adds n bytes to the window, with a maximum window size of max, -+// indicating that the peer can now send us more data. -+// For example, the user read from a {Request,Response} body and consumed -+// some of the buffered data, so the peer can now send more. -+// It returns the number of bytes to send in a WINDOW_UPDATE frame to the peer. -+// Window updates are accumulated and sent when the unsent capacity -+// is at least inflowMinRefresh or will at least double the peer's available window. -+func (f *inflow) add(n int) (connAdd int32) { -+ if n < 0 { -+ panic("negative update") -+ } -+ unsent := int64(f.unsent) + int64(n) -+ // "A sender MUST NOT allow a flow-control window to exceed 2^31-1 octets." -+ // RFC 7540 Section 6.9.1. -+ const maxWindow = 1<<31 - 1 -+ if unsent+int64(f.avail) > maxWindow { -+ panic("flow control update exceeds maximum window size") -+ } -+ f.unsent = int32(unsent) -+ if f.unsent < inflowMinRefresh && f.unsent < f.avail { -+ // If there aren't at least inflowMinRefresh bytes of window to send, -+ // and this update won't at least double the window, buffer the update for later. -+ return 0 -+ } -+ f.avail += f.unsent -+ f.unsent = 0 -+ return int32(unsent) -+} -+ -+// take attempts to take n bytes from the peer's flow control window. -+// It reports whether the window has available capacity. -+func (f *inflow) take(n uint32) bool { -+ if n > uint32(f.avail) { -+ return false -+ } -+ f.avail -= int32(n) -+ return true -+} -+ -+// takeInflows attempts to take n bytes from two inflows, -+// typically connection-level and stream-level flows. -+// It reports whether both windows have available capacity. -+func takeInflows(f1, f2 *inflow, n uint32) bool { -+ if n > uint32(f1.avail) || n > uint32(f2.avail) { -+ return false -+ } -+ f1.avail -= int32(n) -+ f2.avail -= int32(n) -+ return true -+} -+ -+// outflow is the outbound flow control window's size. -+type outflow struct { - _ incomparable - - // n is the number of DATA bytes we're allowed to send. -- // A flow is kept both on a conn and a per-stream. -+ // An outflow is kept both on a conn and a per-stream. - n int32 - -- // conn points to the shared connection-level flow that is -- // shared by all streams on that conn. It is nil for the flow -+ // conn points to the shared connection-level outflow that is -+ // shared by all streams on that conn. It is nil for the outflow - // that's on the conn directly. -- conn *flow -+ conn *outflow - } - --func (f *flow) setConnFlow(cf *flow) { f.conn = cf } -+func (f *outflow) setConnFlow(cf *outflow) { f.conn = cf } - --func (f *flow) available() int32 { -+func (f *outflow) available() int32 { - n := f.n - if f.conn != nil && f.conn.n < n { - n = f.conn.n -@@ -30,7 +98,7 @@ func (f *flow) available() int32 { - return n - } - --func (f *flow) take(n int32) { -+func (f *outflow) take(n int32) { - if n > f.available() { - panic("internal error: took too much") - } -@@ -42,7 +110,7 @@ func (f *flow) take(n int32) { - - // add adds n bytes (positive or negative) to the flow control window. - // It returns false if the sum would exceed 2^31-1. --func (f *flow) add(n int32) bool { -+func (f *outflow) add(n int32) bool { - sum := f.n + n - if (sum > n) == (f.n > 0) { - f.n = sum -diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go -old mode 100644 -new mode 100755 -index 184ac45..c1f6b90 ---- a/vendor/golang.org/x/net/http2/frame.go -+++ b/vendor/golang.org/x/net/http2/frame.go -@@ -662,6 +662,15 @@ func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error { - // It is the caller's responsibility not to violate the maximum frame size - // and to not call other Write methods concurrently. - func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error { -+ if err := f.startWriteDataPadded(streamID, endStream, data, pad); err != nil { -+ return err -+ } -+ return f.endWrite() -+} -+ -+// startWriteDataPadded is WriteDataPadded, but only writes the frame to the Framer's internal buffer. -+// The caller should call endWrite to flush the frame to the underlying writer. -+func (f *Framer) startWriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error { - if !validStreamID(streamID) && !f.AllowIllegalWrites { - return errStreamID - } -@@ -691,7 +700,7 @@ func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []by - } - f.wbuf = append(f.wbuf, data...) - f.wbuf = append(f.wbuf, pad...) -- return f.endWrite() -+ return nil - } - - // A SettingsFrame conveys configuration parameters that affect how -diff --git a/vendor/golang.org/x/net/http2/go111.go b/vendor/golang.org/x/net/http2/go111.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/go115.go b/vendor/golang.org/x/net/http2/go115.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/go118.go b/vendor/golang.org/x/net/http2/go118.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/gotrack.go b/vendor/golang.org/x/net/http2/gotrack.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/headermap.go b/vendor/golang.org/x/net/http2/headermap.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/hpack/encode.go b/vendor/golang.org/x/net/http2/hpack/encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/hpack/hpack.go b/vendor/golang.org/x/net/http2/hpack/hpack.go -old mode 100644 -new mode 100755 -index ebdfbee..7a1d976 ---- a/vendor/golang.org/x/net/http2/hpack/hpack.go -+++ b/vendor/golang.org/x/net/http2/hpack/hpack.go -@@ -211,7 +211,7 @@ func (d *Decoder) at(i uint64) (hf HeaderField, ok bool) { - return dt.ents[dt.len()-(int(i)-staticTable.len())], true - } - --// Decode decodes an entire block. -+// DecodeFull decodes an entire block. - // - // TODO: remove this method and make it incremental later? This is - // easier for debugging now. -@@ -359,6 +359,7 @@ func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error { - - var hf HeaderField - wantStr := d.emitEnabled || it.indexed() -+ var undecodedName undecodedString - if nameIdx > 0 { - ihf, ok := d.at(nameIdx) - if !ok { -@@ -366,15 +367,27 @@ func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error { - } - hf.Name = ihf.Name - } else { -- hf.Name, buf, err = d.readString(buf, wantStr) -+ undecodedName, buf, err = d.readString(buf) - if err != nil { - return err - } - } -- hf.Value, buf, err = d.readString(buf, wantStr) -+ undecodedValue, buf, err := d.readString(buf) - if err != nil { - return err - } -+ if wantStr { -+ if nameIdx <= 0 { -+ hf.Name, err = d.decodeString(undecodedName) -+ if err != nil { -+ return err -+ } -+ } -+ hf.Value, err = d.decodeString(undecodedValue) -+ if err != nil { -+ return err -+ } -+ } - d.buf = buf - if it.indexed() { - d.dynTab.add(hf) -@@ -459,46 +472,52 @@ func readVarInt(n byte, p []byte) (i uint64, remain []byte, err error) { - return 0, origP, errNeedMore - } - --// readString decodes an hpack string from p. -+// readString reads an hpack string from p. - // --// wantStr is whether s will be used. If false, decompression and --// []byte->string garbage are skipped if s will be ignored --// anyway. This does mean that huffman decoding errors for non-indexed --// strings past the MAX_HEADER_LIST_SIZE are ignored, but the server --// is returning an error anyway, and because they're not indexed, the error --// won't affect the decoding state. --func (d *Decoder) readString(p []byte, wantStr bool) (s string, remain []byte, err error) { -+// It returns a reference to the encoded string data to permit deferring decode costs -+// until after the caller verifies all data is present. -+func (d *Decoder) readString(p []byte) (u undecodedString, remain []byte, err error) { - if len(p) == 0 { -- return "", p, errNeedMore -+ return u, p, errNeedMore - } - isHuff := p[0]&128 != 0 - strLen, p, err := readVarInt(7, p) - if err != nil { -- return "", p, err -+ return u, p, err - } - if d.maxStrLen != 0 && strLen > uint64(d.maxStrLen) { -- return "", nil, ErrStringLength -+ // Returning an error here means Huffman decoding errors -+ // for non-indexed strings past the maximum string length -+ // are ignored, but the server is returning an error anyway -+ // and because the string is not indexed the error will not -+ // affect the decoding state. -+ return u, nil, ErrStringLength - } - if uint64(len(p)) < strLen { -- return "", p, errNeedMore -- } -- if !isHuff { -- if wantStr { -- s = string(p[:strLen]) -- } -- return s, p[strLen:], nil -+ return u, p, errNeedMore - } -+ u.isHuff = isHuff -+ u.b = p[:strLen] -+ return u, p[strLen:], nil -+} - -- if wantStr { -- buf := bufPool.Get().(*bytes.Buffer) -- buf.Reset() // don't trust others -- defer bufPool.Put(buf) -- if err := huffmanDecode(buf, d.maxStrLen, p[:strLen]); err != nil { -- buf.Reset() -- return "", nil, err -- } -+type undecodedString struct { -+ isHuff bool -+ b []byte -+} -+ -+func (d *Decoder) decodeString(u undecodedString) (string, error) { -+ if !u.isHuff { -+ return string(u.b), nil -+ } -+ buf := bufPool.Get().(*bytes.Buffer) -+ buf.Reset() // don't trust others -+ var s string -+ err := huffmanDecode(buf, d.maxStrLen, u.b) -+ if err == nil { - s = buf.String() -- buf.Reset() // be nice to GC - } -- return s, p[strLen:], nil -+ buf.Reset() // be nice to GC -+ bufPool.Put(buf) -+ return s, err - } -diff --git a/vendor/golang.org/x/net/http2/hpack/huffman.go b/vendor/golang.org/x/net/http2/hpack/huffman.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/hpack/static_table.go b/vendor/golang.org/x/net/http2/hpack/static_table.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/hpack/tables.go b/vendor/golang.org/x/net/http2/hpack/tables.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/not_go111.go b/vendor/golang.org/x/net/http2/not_go111.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/not_go115.go b/vendor/golang.org/x/net/http2/not_go115.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/not_go118.go b/vendor/golang.org/x/net/http2/not_go118.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go -old mode 100644 -new mode 100755 -index c15b8a7..684d984 ---- a/vendor/golang.org/x/net/http2/pipe.go -+++ b/vendor/golang.org/x/net/http2/pipe.go -@@ -88,13 +88,9 @@ func (p *pipe) Write(d []byte) (n int, err error) { - p.c.L = &p.mu - } - defer p.c.Signal() -- if p.err != nil { -+ if p.err != nil || p.breakErr != nil { - return 0, errClosedPipeWrite - } -- if p.breakErr != nil { -- p.unread += len(d) -- return len(d), nil // discard when there is no reader -- } - return p.b.Write(d) - } - -diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go -old mode 100644 -new mode 100755 -index 4eb7617..02c88b6 ---- a/vendor/golang.org/x/net/http2/server.go -+++ b/vendor/golang.org/x/net/http2/server.go -@@ -441,14 +441,14 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { - if s.NewWriteScheduler != nil { - sc.writeSched = s.NewWriteScheduler() - } else { -- sc.writeSched = NewPriorityWriteScheduler(nil) -+ sc.writeSched = newRoundRobinWriteScheduler() - } - - // These start at the RFC-specified defaults. If there is a higher - // configured value for inflow, that will be updated when we send a - // WINDOW_UPDATE shortly after sending SETTINGS. - sc.flow.add(initialWindowSize) -- sc.inflow.add(initialWindowSize) -+ sc.inflow.init(initialWindowSize) - sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf) - sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize()) - -@@ -563,8 +563,8 @@ type serverConn struct { - wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes - bodyReadCh chan bodyReadMsg // from handlers -> serve - serveMsgCh chan interface{} // misc messages & code to send to / run on the serve loop -- flow flow // conn-wide (not stream-specific) outbound flow control -- inflow flow // conn-wide inbound flow control -+ flow outflow // conn-wide (not stream-specific) outbound flow control -+ inflow inflow // conn-wide inbound flow control - tlsState *tls.ConnectionState // shared by all handlers, like net/http - remoteAddrStr string - writeSched WriteScheduler -@@ -581,9 +581,11 @@ type serverConn struct { - advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client - curClientStreams uint32 // number of open streams initiated by the client - curPushedStreams uint32 // number of open streams initiated by server push -+ curHandlers uint32 // number of running handler goroutines - maxClientStreamID uint32 // max ever seen from client (odd), or 0 if there have been no client requests - maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes - streams map[uint32]*stream -+ unstartedHandlers []unstartedHandler - initialStreamSendWindowSize int32 - maxFrameSize int32 - peerMaxHeaderListSize uint32 // zero means unknown (default) -@@ -641,10 +643,10 @@ type stream struct { - cancelCtx func() - - // owned by serverConn's serve loop: -- bodyBytes int64 // body bytes seen so far -- declBodyBytes int64 // or -1 if undeclared -- flow flow // limits writing from Handler to client -- inflow flow // what the client is allowed to POST/etc to us -+ bodyBytes int64 // body bytes seen so far -+ declBodyBytes int64 // or -1 if undeclared -+ flow outflow // limits writing from Handler to client -+ inflow inflow // what the client is allowed to POST/etc to us - state streamState - resetQueued bool // RST_STREAM queued for write; set by sc.resetStream - gotTrailerHeader bool // HEADER frame for trailers was seen -@@ -843,8 +845,13 @@ type frameWriteResult struct { - // and then reports when it's done. - // At most one goroutine can be running writeFrameAsync at a time per - // serverConn. --func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) { -- err := wr.write.writeFrame(sc) -+func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest, wd *writeData) { -+ var err error -+ if wd == nil { -+ err = wr.write.writeFrame(sc) -+ } else { -+ err = sc.framer.endWrite() -+ } - sc.wroteFrameCh <- frameWriteResult{wr: wr, err: err} - } - -@@ -976,6 +983,8 @@ func (sc *serverConn) serve() { - return - case gracefulShutdownMsg: - sc.startGracefulShutdownInternal() -+ case handlerDoneMsg: -+ sc.handlerDone() - default: - panic("unknown timer") - } -@@ -1007,14 +1016,6 @@ func (sc *serverConn) serve() { - } - } - --func (sc *serverConn) awaitGracefulShutdown(sharedCh <-chan struct{}, privateCh chan struct{}) { -- select { -- case <-sc.doneServing: -- case <-sharedCh: -- close(privateCh) -- } --} -- - type serverMessage int - - // Message values sent to serveMsgCh. -@@ -1023,6 +1024,7 @@ var ( - idleTimerMsg = new(serverMessage) - shutdownTimerMsg = new(serverMessage) - gracefulShutdownMsg = new(serverMessage) -+ handlerDoneMsg = new(serverMessage) - ) - - func (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) } -@@ -1251,9 +1253,16 @@ func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) { - sc.writingFrameAsync = false - err := wr.write.writeFrame(sc) - sc.wroteFrame(frameWriteResult{wr: wr, err: err}) -+ } else if wd, ok := wr.write.(*writeData); ok { -+ // Encode the frame in the serve goroutine, to ensure we don't have -+ // any lingering asynchronous references to data passed to Write. -+ // See https://go.dev/issue/58446. -+ sc.framer.startWriteDataPadded(wd.streamID, wd.endStream, wd.p, nil) -+ sc.writingFrameAsync = true -+ go sc.writeFrameAsync(wr, wd) - } else { - sc.writingFrameAsync = true -- go sc.writeFrameAsync(wr) -+ go sc.writeFrameAsync(wr, nil) - } - } - -@@ -1503,7 +1512,7 @@ func (sc *serverConn) processFrame(f Frame) error { - if sc.inGoAway && (sc.goAwayCode != ErrCodeNo || f.Header().StreamID > sc.maxClientStreamID) { - - if f, ok := f.(*DataFrame); ok { -- if sc.inflow.available() < int32(f.Length) { -+ if !sc.inflow.take(f.Length) { - return sc.countError("data_flow", streamError(f.Header().StreamID, ErrCodeFlowControl)) - } - sc.sendWindowUpdate(nil, int(f.Length)) // conn-level -@@ -1775,14 +1784,9 @@ func (sc *serverConn) processData(f *DataFrame) error { - // But still enforce their connection-level flow control, - // and return any flow control bytes since we're not going - // to consume them. -- if sc.inflow.available() < int32(f.Length) { -+ if !sc.inflow.take(f.Length) { - return sc.countError("data_flow", streamError(id, ErrCodeFlowControl)) - } -- // Deduct the flow control from inflow, since we're -- // going to immediately add it back in -- // sendWindowUpdate, which also schedules sending the -- // frames. -- sc.inflow.take(int32(f.Length)) - sc.sendWindowUpdate(nil, int(f.Length)) // conn-level - - if st != nil && st.resetQueued { -@@ -1797,10 +1801,9 @@ func (sc *serverConn) processData(f *DataFrame) error { - - // Sender sending more than they'd declared? - if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes { -- if sc.inflow.available() < int32(f.Length) { -+ if !sc.inflow.take(f.Length) { - return sc.countError("data_flow", streamError(id, ErrCodeFlowControl)) - } -- sc.inflow.take(int32(f.Length)) - sc.sendWindowUpdate(nil, int(f.Length)) // conn-level - - st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes)) -@@ -1811,29 +1814,33 @@ func (sc *serverConn) processData(f *DataFrame) error { - } - if f.Length > 0 { - // Check whether the client has flow control quota. -- if st.inflow.available() < int32(f.Length) { -+ if !takeInflows(&sc.inflow, &st.inflow, f.Length) { - return sc.countError("flow_on_data_length", streamError(id, ErrCodeFlowControl)) - } -- st.inflow.take(int32(f.Length)) - - if len(data) > 0 { -+ st.bodyBytes += int64(len(data)) - wrote, err := st.body.Write(data) - if err != nil { -+ // The handler has closed the request body. -+ // Return the connection-level flow control for the discarded data, -+ // but not the stream-level flow control. - sc.sendWindowUpdate(nil, int(f.Length)-wrote) -- return sc.countError("body_write_err", streamError(id, ErrCodeStreamClosed)) -+ return nil - } - if wrote != len(data) { - panic("internal error: bad Writer") - } -- st.bodyBytes += int64(len(data)) - } - - // Return any padded flow control now, since we won't - // refund it later on body reads. -- if pad := int32(f.Length) - int32(len(data)); pad > 0 { -- sc.sendWindowUpdate32(nil, pad) -- sc.sendWindowUpdate32(st, pad) -- } -+ // Call sendWindowUpdate even if there is no padding, -+ // to return buffered flow control credit if the sent -+ // window has shrunk. -+ pad := int32(f.Length) - int32(len(data)) -+ sc.sendWindowUpdate32(nil, pad) -+ sc.sendWindowUpdate32(st, pad) - } - if f.StreamEnded() { - st.endStream() -@@ -1890,9 +1897,11 @@ func (st *stream) copyTrailersToHandlerRequest() { - // onReadTimeout is run on its own goroutine (from time.AfterFunc) - // when the stream's ReadTimeout has fired. - func (st *stream) onReadTimeout() { -- // Wrap the ErrDeadlineExceeded to avoid callers depending on us -- // returning the bare error. -- st.body.CloseWithError(fmt.Errorf("%w", os.ErrDeadlineExceeded)) -+ if st.body != nil { -+ // Wrap the ErrDeadlineExceeded to avoid callers depending on us -+ // returning the bare error. -+ st.body.CloseWithError(fmt.Errorf("%w", os.ErrDeadlineExceeded)) -+ } - } - - // onWriteTimeout is run on its own goroutine (from time.AfterFunc) -@@ -2010,13 +2019,10 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { - // (in Go 1.8), though. That's a more sane option anyway. - if sc.hs.ReadTimeout != 0 { - sc.conn.SetReadDeadline(time.Time{}) -- if st.body != nil { -- st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout) -- } -+ st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout) - } - -- go sc.runHandler(rw, req, handler) -- return nil -+ return sc.scheduleHandler(id, rw, req, handler) - } - - func (sc *serverConn) upgradeRequest(req *http.Request) { -@@ -2036,6 +2042,10 @@ func (sc *serverConn) upgradeRequest(req *http.Request) { - sc.conn.SetReadDeadline(time.Time{}) - } - -+ // This is the first request on the connection, -+ // so start the handler directly rather than going -+ // through scheduleHandler. -+ sc.curHandlers++ - go sc.runHandler(rw, req, sc.handler.ServeHTTP) - } - -@@ -2105,8 +2115,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream - st.cw.Init() - st.flow.conn = &sc.flow // link to conn-level counter - st.flow.add(sc.initialStreamSendWindowSize) -- st.inflow.conn = &sc.inflow // link to conn-level counter -- st.inflow.add(sc.srv.initialStreamRecvWindowSize()) -+ st.inflow.init(sc.srv.initialStreamRecvWindowSize()) - if sc.hs.WriteTimeout != 0 { - st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout) - } -@@ -2198,7 +2207,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r - tlsState = sc.tlsState - } - -- needsContinue := rp.header.Get("Expect") == "100-continue" -+ needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue") - if needsContinue { - rp.header.Del("Expect") - } -@@ -2277,8 +2286,62 @@ func (sc *serverConn) newResponseWriter(st *stream, req *http.Request) *response - return &responseWriter{rws: rws} - } - -+type unstartedHandler struct { -+ streamID uint32 -+ rw *responseWriter -+ req *http.Request -+ handler func(http.ResponseWriter, *http.Request) -+} -+ -+// scheduleHandler starts a handler goroutine, -+// or schedules one to start as soon as an existing handler finishes. -+func (sc *serverConn) scheduleHandler(streamID uint32, rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) error { -+ sc.serveG.check() -+ maxHandlers := sc.advMaxStreams -+ if sc.curHandlers < maxHandlers { -+ sc.curHandlers++ -+ go sc.runHandler(rw, req, handler) -+ return nil -+ } -+ if len(sc.unstartedHandlers) > int(4*sc.advMaxStreams) { -+ return sc.countError("too_many_early_resets", ConnectionError(ErrCodeEnhanceYourCalm)) -+ } -+ sc.unstartedHandlers = append(sc.unstartedHandlers, unstartedHandler{ -+ streamID: streamID, -+ rw: rw, -+ req: req, -+ handler: handler, -+ }) -+ return nil -+} -+ -+func (sc *serverConn) handlerDone() { -+ sc.serveG.check() -+ sc.curHandlers-- -+ i := 0 -+ maxHandlers := sc.advMaxStreams -+ for ; i < len(sc.unstartedHandlers); i++ { -+ u := sc.unstartedHandlers[i] -+ if sc.streams[u.streamID] == nil { -+ // This stream was reset before its goroutine had a chance to start. -+ continue -+ } -+ if sc.curHandlers >= maxHandlers { -+ break -+ } -+ sc.curHandlers++ -+ go sc.runHandler(u.rw, u.req, u.handler) -+ sc.unstartedHandlers[i] = unstartedHandler{} // don't retain references -+ } -+ sc.unstartedHandlers = sc.unstartedHandlers[i:] -+ if len(sc.unstartedHandlers) == 0 { -+ sc.unstartedHandlers = nil -+ } -+} -+ - // Run on its own goroutine. - func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) { -+ defer sc.sendServeMsg(handlerDoneMsg) - didPanic := true - defer func() { - rw.rws.stream.cancelCtx() -@@ -2388,47 +2451,28 @@ func (sc *serverConn) noteBodyRead(st *stream, n int) { - } - - // st may be nil for conn-level --func (sc *serverConn) sendWindowUpdate(st *stream, n int) { -- sc.serveG.check() -- // "The legal range for the increment to the flow control -- // window is 1 to 2^31-1 (2,147,483,647) octets." -- // A Go Read call on 64-bit machines could in theory read -- // a larger Read than this. Very unlikely, but we handle it here -- // rather than elsewhere for now. -- const maxUint31 = 1<<31 - 1 -- for n > maxUint31 { -- sc.sendWindowUpdate32(st, maxUint31) -- n -= maxUint31 -- } -- sc.sendWindowUpdate32(st, int32(n)) -+func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) { -+ sc.sendWindowUpdate(st, int(n)) - } - - // st may be nil for conn-level --func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) { -+func (sc *serverConn) sendWindowUpdate(st *stream, n int) { - sc.serveG.check() -- if n == 0 { -- return -- } -- if n < 0 { -- panic("negative update") -- } - var streamID uint32 -- if st != nil { -+ var send int32 -+ if st == nil { -+ send = sc.inflow.add(n) -+ } else { - streamID = st.id -+ send = st.inflow.add(n) -+ } -+ if send == 0 { -+ return - } - sc.writeFrame(FrameWriteRequest{ -- write: writeWindowUpdate{streamID: streamID, n: uint32(n)}, -+ write: writeWindowUpdate{streamID: streamID, n: uint32(send)}, - stream: st, - }) -- var ok bool -- if st == nil { -- ok = sc.inflow.add(n) -- } else { -- ok = st.inflow.add(n) -- } -- if !ok { -- panic("internal error; sent too many window updates without decrements?") -- } - } - - // requestBody is the Handler's Request.Body type. -@@ -2439,7 +2483,7 @@ type requestBody struct { - conn *serverConn - closeOnce sync.Once // for use by Close only - sawEOF bool // for use by Read only -- pipe *pipe // non-nil if we have a HTTP entity message body -+ pipe *pipe // non-nil if we have an HTTP entity message body - needsContinue bool // need to send a 100-continue - } - -@@ -2579,7 +2623,8 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { - clen = "" - } - } -- if clen == "" && rws.handlerDone && bodyAllowedForStatus(rws.status) && (len(p) > 0 || !isHeadResp) { -+ _, hasContentLength := rws.snapHeader["Content-Length"] -+ if !hasContentLength && clen == "" && rws.handlerDone && bodyAllowedForStatus(rws.status) && (len(p) > 0 || !isHeadResp) { - clen = strconv.Itoa(len(p)) - } - _, hasContentType := rws.snapHeader["Content-Type"] -@@ -2784,7 +2829,7 @@ func (w *responseWriter) FlushError() error { - err = rws.bw.Flush() - } else { - // The bufio.Writer won't call chunkWriter.Write -- // (writeChunk with zero bytes, so we have to do it -+ // (writeChunk with zero bytes), so we have to do it - // ourselves to force the HTTP response header and/or - // final DATA frame (with END_STREAM) to be sent. - _, err = chunkWriter{rws}.Write(nil) -diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go -old mode 100644 -new mode 100755 -index 30f706e..4515b22 ---- a/vendor/golang.org/x/net/http2/transport.go -+++ b/vendor/golang.org/x/net/http2/transport.go -@@ -19,6 +19,7 @@ import ( - "io/fs" - "log" - "math" -+ "math/bits" - mathrand "math/rand" - "net" - "net/http" -@@ -47,10 +48,6 @@ const ( - // we buffer per stream. - transportDefaultStreamFlow = 4 << 20 - -- // transportDefaultStreamMinRefresh is the minimum number of bytes we'll send -- // a stream-level WINDOW_UPDATE for at a time. -- transportDefaultStreamMinRefresh = 4 << 10 -- - defaultUserAgent = "Go-http-client/2.0" - - // initialMaxConcurrentStreams is a connections maxConcurrentStreams until -@@ -294,8 +291,7 @@ func (t *Transport) initConnPool() { - // HTTP/2 server. - type ClientConn struct { - t *Transport -- tconn net.Conn // usually *tls.Conn, except specialized impls -- tconnClosed bool -+ tconn net.Conn // usually *tls.Conn, except specialized impls - tlsState *tls.ConnectionState // nil only for specialized impls - reused uint32 // whether conn is being reused; atomic - singleUse bool // whether being used for a single http.Request -@@ -310,8 +306,8 @@ type ClientConn struct { - - mu sync.Mutex // guards following - cond *sync.Cond // hold mu; broadcast on flow/closed changes -- flow flow // our conn-level flow control quota (cs.flow is per stream) -- inflow flow // peer's conn-level flow control -+ flow outflow // our conn-level flow control quota (cs.outflow is per stream) -+ inflow inflow // peer's conn-level flow control - doNotReuse bool // whether conn is marked to not be reused for any future requests - closing bool - closed bool -@@ -376,10 +372,10 @@ type clientStream struct { - respHeaderRecv chan struct{} // closed when headers are received - res *http.Response // set if respHeaderRecv is closed - -- flow flow // guarded by cc.mu -- inflow flow // guarded by cc.mu -- bytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read -- readErr error // sticky read error; owned by transportResponseBody.Read -+ flow outflow // guarded by cc.mu -+ inflow inflow // guarded by cc.mu -+ bytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read -+ readErr error // sticky read error; owned by transportResponseBody.Read - - reqBody io.ReadCloser - reqBodyContentLength int64 // -1 means unknown -@@ -522,11 +518,14 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { - func authorityAddr(scheme string, authority string) (addr string) { - host, port, err := net.SplitHostPort(authority) - if err != nil { // authority didn't have a port -+ host = authority -+ port = "" -+ } -+ if port == "" { // authority's port was empty - port = "443" - if scheme == "http" { - port = "80" - } -- host = authority - } - if a, err := idna.ToASCII(host); err == nil { - host = a -@@ -564,10 +563,11 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res - traceGotConn(req, cc, reused) - res, err := cc.RoundTrip(req) - if err != nil && retry <= 6 { -+ roundTripErr := err - if req, err = shouldRetryRequest(req, err); err == nil { - // After the first retry, do exponential backoff with 10% jitter. - if retry == 0 { -- t.vlogf("RoundTrip retrying after failure: %v", err) -+ t.vlogf("RoundTrip retrying after failure: %v", roundTripErr) - continue - } - backoff := float64(uint(1) << (uint(retry) - 1)) -@@ -576,7 +576,7 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res - timer := backoffNewTimer(d) - select { - case <-timer.C: -- t.vlogf("RoundTrip retrying after failure: %v", err) -+ t.vlogf("RoundTrip retrying after failure: %v", roundTripErr) - continue - case <-req.Context().Done(): - timer.Stop() -@@ -811,7 +811,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro - cc.bw.Write(clientPreface) - cc.fr.WriteSettings(initialSettings...) - cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow) -- cc.inflow.add(transportDefaultConnFlow + initialWindowSize) -+ cc.inflow.init(transportDefaultConnFlow + initialWindowSize) - cc.bw.Flush() - if cc.werr != nil { - cc.Close() -@@ -1269,6 +1269,29 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { - return res, nil - } - -+ cancelRequest := func(cs *clientStream, err error) error { -+ cs.cc.mu.Lock() -+ bodyClosed := cs.reqBodyClosed -+ cs.cc.mu.Unlock() -+ // Wait for the request body to be closed. -+ // -+ // If nothing closed the body before now, abortStreamLocked -+ // will have started a goroutine to close it. -+ // -+ // Closing the body before returning avoids a race condition -+ // with net/http checking its readTrackingBody to see if the -+ // body was read from or closed. See golang/go#60041. -+ // -+ // The body is closed in a separate goroutine without the -+ // connection mutex held, but dropping the mutex before waiting -+ // will keep us from holding it indefinitely if the body -+ // close is slow for some reason. -+ if bodyClosed != nil { -+ <-bodyClosed -+ } -+ return err -+ } -+ - for { - select { - case <-cs.respHeaderRecv: -@@ -1288,10 +1311,10 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { - case <-ctx.Done(): - err := ctx.Err() - cs.abortStream(err) -- return nil, err -+ return nil, cancelRequest(cs, err) - case <-cs.reqCancel: - cs.abortStream(errRequestCanceled) -- return nil, errRequestCanceled -+ return nil, cancelRequest(cs, errRequestCanceled) - } - } - } -@@ -1573,7 +1596,7 @@ func (cs *clientStream) cleanupWriteRequest(err error) { - close(cs.donec) - } - --// awaitOpenSlotForStream waits until len(streams) < maxConcurrentStreams. -+// awaitOpenSlotForStreamLocked waits until len(streams) < maxConcurrentStreams. - // Must hold cc.mu. - func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error { - for { -@@ -1657,7 +1680,27 @@ func (cs *clientStream) frameScratchBufferLen(maxFrameSize int) int { - return int(n) // doesn't truncate; max is 512K - } - --var bufPool sync.Pool // of *[]byte -+// Seven bufPools manage different frame sizes. This helps to avoid scenarios where long-running -+// streaming requests using small frame sizes occupy large buffers initially allocated for prior -+// requests needing big buffers. The size ranges are as follows: -+// {0 KB, 16 KB], {16 KB, 32 KB], {32 KB, 64 KB], {64 KB, 128 KB], {128 KB, 256 KB], -+// {256 KB, 512 KB], {512 KB, infinity} -+// In practice, the maximum scratch buffer size should not exceed 512 KB due to -+// frameScratchBufferLen(maxFrameSize), thus the "infinity pool" should never be used. -+// It exists mainly as a safety measure, for potential future increases in max buffer size. -+var bufPools [7]sync.Pool // of *[]byte -+func bufPoolIndex(size int) int { -+ if size <= 16384 { -+ return 0 -+ } -+ size -= 1 -+ bits := bits.Len(uint(size)) -+ index := bits - 14 -+ if index >= len(bufPools) { -+ return len(bufPools) - 1 -+ } -+ return index -+} - - func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { - cc := cs.cc -@@ -1675,12 +1718,13 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { - // Scratch buffer for reading into & writing from. - scratchLen := cs.frameScratchBufferLen(maxFrameSize) - var buf []byte -- if bp, ok := bufPool.Get().(*[]byte); ok && len(*bp) >= scratchLen { -- defer bufPool.Put(bp) -+ index := bufPoolIndex(scratchLen) -+ if bp, ok := bufPools[index].Get().(*[]byte); ok && len(*bp) >= scratchLen { -+ defer bufPools[index].Put(bp) - buf = *bp - } else { - buf = make([]byte, scratchLen) -- defer bufPool.Put(&buf) -+ defer bufPools[index].Put(&buf) - } - - var sawEOF bool -@@ -1848,6 +1892,9 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail - if err != nil { - return nil, err - } -+ if !httpguts.ValidHostHeader(host) { -+ return nil, errors.New("http2: invalid Host header") -+ } - - var path string - if req.Method != "CONNECT" { -@@ -1884,7 +1931,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail - // 8.1.2.3 Request Pseudo-Header Fields - // The :path pseudo-header field includes the path and query parts of the - // target URI (the path-absolute production and optionally a '?' character -- // followed by the query production (see Sections 3.3 and 3.4 of -+ // followed by the query production, see Sections 3.3 and 3.4 of - // [RFC3986]). - f(":authority", host) - m := req.Method -@@ -2073,8 +2120,7 @@ type resAndError struct { - func (cc *ClientConn) addStreamLocked(cs *clientStream) { - cs.flow.add(int32(cc.initialWindowSize)) - cs.flow.setConnFlow(&cc.flow) -- cs.inflow.add(transportDefaultStreamFlow) -- cs.inflow.setConnFlow(&cc.inflow) -+ cs.inflow.init(transportDefaultStreamFlow) - cs.ID = cc.nextStreamID - cc.nextStreamID += 2 - cc.streams[cs.ID] = cs -@@ -2533,21 +2579,10 @@ func (b transportResponseBody) Read(p []byte) (n int, err error) { - } - - cc.mu.Lock() -- var connAdd, streamAdd int32 -- // Check the conn-level first, before the stream-level. -- if v := cc.inflow.available(); v < transportDefaultConnFlow/2 { -- connAdd = transportDefaultConnFlow - v -- cc.inflow.add(connAdd) -- } -+ connAdd := cc.inflow.add(n) -+ var streamAdd int32 - if err == nil { // No need to refresh if the stream is over or failed. -- // Consider any buffered body data (read from the conn but not -- // consumed by the client) when computing flow control for this -- // stream. -- v := int(cs.inflow.available()) + cs.bufPipe.Len() -- if v < transportDefaultStreamFlow-transportDefaultStreamMinRefresh { -- streamAdd = int32(transportDefaultStreamFlow - v) -- cs.inflow.add(streamAdd) -- } -+ streamAdd = cs.inflow.add(n) - } - cc.mu.Unlock() - -@@ -2571,29 +2606,27 @@ func (b transportResponseBody) Close() error { - cs := b.cs - cc := cs.cc - -+ cs.bufPipe.BreakWithError(errClosedResponseBody) -+ cs.abortStream(errClosedResponseBody) -+ - unread := cs.bufPipe.Len() - if unread > 0 { - cc.mu.Lock() - // Return connection-level flow control. -- if unread > 0 { -- cc.inflow.add(int32(unread)) -- } -+ connAdd := cc.inflow.add(unread) - cc.mu.Unlock() - - // TODO(dneil): Acquiring this mutex can block indefinitely. - // Move flow control return to a goroutine? - cc.wmu.Lock() - // Return connection-level flow control. -- if unread > 0 { -- cc.fr.WriteWindowUpdate(0, uint32(unread)) -+ if connAdd > 0 { -+ cc.fr.WriteWindowUpdate(0, uint32(connAdd)) - } - cc.bw.Flush() - cc.wmu.Unlock() - } - -- cs.bufPipe.BreakWithError(errClosedResponseBody) -- cs.abortStream(errClosedResponseBody) -- - select { - case <-cs.donec: - case <-cs.ctx.Done(): -@@ -2628,13 +2661,18 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { - // But at least return their flow control: - if f.Length > 0 { - cc.mu.Lock() -- cc.inflow.add(int32(f.Length)) -+ ok := cc.inflow.take(f.Length) -+ connAdd := cc.inflow.add(int(f.Length)) - cc.mu.Unlock() -- -- cc.wmu.Lock() -- cc.fr.WriteWindowUpdate(0, uint32(f.Length)) -- cc.bw.Flush() -- cc.wmu.Unlock() -+ if !ok { -+ return ConnectionError(ErrCodeFlowControl) -+ } -+ if connAdd > 0 { -+ cc.wmu.Lock() -+ cc.fr.WriteWindowUpdate(0, uint32(connAdd)) -+ cc.bw.Flush() -+ cc.wmu.Unlock() -+ } - } - return nil - } -@@ -2665,9 +2703,7 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { - } - // Check connection-level flow control. - cc.mu.Lock() -- if cs.inflow.available() >= int32(f.Length) { -- cs.inflow.take(int32(f.Length)) -- } else { -+ if !takeInflows(&cc.inflow, &cs.inflow, f.Length) { - cc.mu.Unlock() - return ConnectionError(ErrCodeFlowControl) - } -@@ -2689,19 +2725,20 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { - } - } - -- if refund > 0 { -- cc.inflow.add(int32(refund)) -- if !didReset { -- cs.inflow.add(int32(refund)) -- } -+ sendConn := cc.inflow.add(refund) -+ var sendStream int32 -+ if !didReset { -+ sendStream = cs.inflow.add(refund) - } - cc.mu.Unlock() - -- if refund > 0 { -+ if sendConn > 0 || sendStream > 0 { - cc.wmu.Lock() -- cc.fr.WriteWindowUpdate(0, uint32(refund)) -- if !didReset { -- cc.fr.WriteWindowUpdate(cs.ID, uint32(refund)) -+ if sendConn > 0 { -+ cc.fr.WriteWindowUpdate(0, uint32(sendConn)) -+ } -+ if sendStream > 0 { -+ cc.fr.WriteWindowUpdate(cs.ID, uint32(sendStream)) - } - cc.bw.Flush() - cc.wmu.Unlock() -diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/writesched.go b/vendor/golang.org/x/net/http2/writesched.go -old mode 100644 -new mode 100755 -index c7cd001..cc893ad ---- a/vendor/golang.org/x/net/http2/writesched.go -+++ b/vendor/golang.org/x/net/http2/writesched.go -@@ -184,7 +184,8 @@ func (wr *FrameWriteRequest) replyToWriter(err error) { - - // writeQueue is used by implementations of WriteScheduler. - type writeQueue struct { -- s []FrameWriteRequest -+ s []FrameWriteRequest -+ prev, next *writeQueue - } - - func (q *writeQueue) empty() bool { return len(q.s) == 0 } -diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/writesched_random.go b/vendor/golang.org/x/net/http2/writesched_random.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/http2/writesched_roundrobin.go b/vendor/golang.org/x/net/http2/writesched_roundrobin.go -new file mode 100755 -index 0000000..54fe863 ---- /dev/null -+++ b/vendor/golang.org/x/net/http2/writesched_roundrobin.go -@@ -0,0 +1,119 @@ -+// Copyright 2023 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package http2 -+ -+import ( -+ "fmt" -+ "math" -+) -+ -+type roundRobinWriteScheduler struct { -+ // control contains control frames (SETTINGS, PING, etc.). -+ control writeQueue -+ -+ // streams maps stream ID to a queue. -+ streams map[uint32]*writeQueue -+ -+ // stream queues are stored in a circular linked list. -+ // head is the next stream to write, or nil if there are no streams open. -+ head *writeQueue -+ -+ // pool of empty queues for reuse. -+ queuePool writeQueuePool -+} -+ -+// newRoundRobinWriteScheduler constructs a new write scheduler. -+// The round robin scheduler priorizes control frames -+// like SETTINGS and PING over DATA frames. -+// When there are no control frames to send, it performs a round-robin -+// selection from the ready streams. -+func newRoundRobinWriteScheduler() WriteScheduler { -+ ws := &roundRobinWriteScheduler{ -+ streams: make(map[uint32]*writeQueue), -+ } -+ return ws -+} -+ -+func (ws *roundRobinWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) { -+ if ws.streams[streamID] != nil { -+ panic(fmt.Errorf("stream %d already opened", streamID)) -+ } -+ q := ws.queuePool.get() -+ ws.streams[streamID] = q -+ if ws.head == nil { -+ ws.head = q -+ q.next = q -+ q.prev = q -+ } else { -+ // Queues are stored in a ring. -+ // Insert the new stream before ws.head, putting it at the end of the list. -+ q.prev = ws.head.prev -+ q.next = ws.head -+ q.prev.next = q -+ q.next.prev = q -+ } -+} -+ -+func (ws *roundRobinWriteScheduler) CloseStream(streamID uint32) { -+ q := ws.streams[streamID] -+ if q == nil { -+ return -+ } -+ if q.next == q { -+ // This was the only open stream. -+ ws.head = nil -+ } else { -+ q.prev.next = q.next -+ q.next.prev = q.prev -+ if ws.head == q { -+ ws.head = q.next -+ } -+ } -+ delete(ws.streams, streamID) -+ ws.queuePool.put(q) -+} -+ -+func (ws *roundRobinWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {} -+ -+func (ws *roundRobinWriteScheduler) Push(wr FrameWriteRequest) { -+ if wr.isControl() { -+ ws.control.push(wr) -+ return -+ } -+ q := ws.streams[wr.StreamID()] -+ if q == nil { -+ // This is a closed stream. -+ // wr should not be a HEADERS or DATA frame. -+ // We push the request onto the control queue. -+ if wr.DataSize() > 0 { -+ panic("add DATA on non-open stream") -+ } -+ ws.control.push(wr) -+ return -+ } -+ q.push(wr) -+} -+ -+func (ws *roundRobinWriteScheduler) Pop() (FrameWriteRequest, bool) { -+ // Control and RST_STREAM frames first. -+ if !ws.control.empty() { -+ return ws.control.shift(), true -+ } -+ if ws.head == nil { -+ return FrameWriteRequest{}, false -+ } -+ q := ws.head -+ for { -+ if wr, ok := q.consume(math.MaxInt32); ok { -+ ws.head = q.next -+ return wr, true -+ } -+ q = q.next -+ if q == ws.head { -+ break -+ } -+ } -+ return FrameWriteRequest{}, false -+} -diff --git a/vendor/golang.org/x/net/idna/go118.go b/vendor/golang.org/x/net/idna/go118.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/idna/idna10.0.0.go b/vendor/golang.org/x/net/idna/idna10.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/idna/idna9.0.0.go b/vendor/golang.org/x/net/idna/idna9.0.0.go -old mode 100644 -new mode 100755 -index aae6aac..ee1698c ---- a/vendor/golang.org/x/net/idna/idna9.0.0.go -+++ b/vendor/golang.org/x/net/idna/idna9.0.0.go -@@ -121,7 +121,7 @@ func CheckJoiners(enable bool) Option { - } - } - --// StrictDomainName limits the set of permissable ASCII characters to those -+// StrictDomainName limits the set of permissible ASCII characters to those - // allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the - // hyphen). This is set by default for MapForLookup and ValidateForRegistration, - // but is only useful if ValidateLabels is set. -diff --git a/vendor/golang.org/x/net/idna/pre_go118.go b/vendor/golang.org/x/net/idna/pre_go118.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/idna/punycode.go b/vendor/golang.org/x/net/idna/punycode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/idna/tables10.0.0.go b/vendor/golang.org/x/net/idna/tables10.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/idna/tables11.0.0.go b/vendor/golang.org/x/net/idna/tables11.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/idna/tables12.0.0.go b/vendor/golang.org/x/net/idna/tables12.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/idna/tables13.0.0.go b/vendor/golang.org/x/net/idna/tables13.0.0.go -old mode 100644 -new mode 100755 -index 390c5e5..66701ea ---- a/vendor/golang.org/x/net/idna/tables13.0.0.go -+++ b/vendor/golang.org/x/net/idna/tables13.0.0.go -@@ -1,151 +1,294 @@ - // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - --//go:build go1.16 --// +build go1.16 -+//go:build go1.16 && !go1.21 -+// +build go1.16,!go1.21 - - package idna - - // UnicodeVersion is the Unicode version from which the tables in this package are derived. - const UnicodeVersion = "13.0.0" - --var mappings string = "" + // Size: 8188 bytes -- "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + -- "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + -- "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + -- "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + -- "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + -- "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + -- "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + -- "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + -- "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + -- "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + -- "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + -- "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + -- "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + -- "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + -- "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + -- "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + -- "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + -- "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + -- "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + -- "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + -- "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + -- "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + -- "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + -- "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + -- "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + -- "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + -- ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + -- "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + -- "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + -- "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + -- "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + -- "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + -- "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + -- "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + -- "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + -- "月\x0511月\x0512月\x02hg\x02ev\x06令和\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニ" + -- "ング\x09インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー" + -- "\x09ガロン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0f" + -- "キロワット\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル" + -- "\x0fサンチーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット" + -- "\x09ハイツ\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0c" + -- "フィート\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ" + -- "\x0cポイント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク" + -- "\x0fマンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09" + -- "ユアン\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x04" + -- "2点\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + -- "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + -- "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + -- "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + -- "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + -- "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + -- "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + -- "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + -- "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + -- "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + -- "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + -- "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x02ʍ\x04𤋮\x04𢡊\x04𢡄\x04𣏕" + -- "\x04𥉉\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ" + -- "\x04יִ\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּ" + -- "ׂ\x04אַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04" + -- "ךּ\x04כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ" + -- "\x04תּ\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ" + -- "\x02ڤ\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ" + -- "\x02ڳ\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ" + -- "\x02ۅ\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02" + -- "ی\x04ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04" + -- "تح\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج" + -- "\x04حم\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح" + -- "\x04ضخ\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ" + -- "\x04فم\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل" + -- "\x04كم\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ" + -- "\x04مم\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى" + -- "\x04هي\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 " + -- "ٍّ\x05 َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04ت" + -- "ر\x04تز\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04" + -- "ين\x04ئخ\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه" + -- "\x04شم\x04شه\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي" + -- "\x04سى\x04سي\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي" + -- "\x04ضى\x04ضي\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06ت" + -- "حج\x06تحم\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سج" + -- "ح\x06سجى\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم" + -- "\x06ضحى\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي" + -- "\x06غمى\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح" + -- "\x06محج\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم" + -- "\x06نحم\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى" + -- "\x06تخي\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي" + -- "\x06ضحي\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي" + -- "\x06كمي\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي" + -- "\x06سخي\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08" + -- "عليه\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:" + -- "\x01!\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\" + -- "\x01$\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ" + -- "\x02إ\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز" + -- "\x02س\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن" + -- "\x02ه\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~" + -- "\x02¢\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲" + -- "\x08𝆹𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η" + -- "\x02κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ" + -- "\x02ڡ\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029," + -- "\x03(a)\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)" + -- "\x03(k)\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)" + -- "\x03(u)\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03p" + -- "pv\x02wc\x02mc\x02md\x02mr\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ" + -- "\x03二\x03多\x03解\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終" + -- "\x03生\x03販\x03声\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指" + -- "\x03走\x03打\x03禁\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔" + -- "三〕\x09〔二〕\x09〔安〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03" + -- "丸\x03乁\x03你\x03侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03" + -- "具\x03㒹\x03內\x03冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03" + -- "㔕\x03勇\x03勉\x03勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03" + -- "灰\x03及\x03叟\x03叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03" + -- "啣\x03善\x03喙\x03喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03" + -- "埴\x03堍\x03型\x03堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03" + -- "姘\x03婦\x03㛮\x03嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03" + -- "屮\x03峀\x03岍\x03嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03" + -- "㡢\x03㡼\x03庰\x03庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03" + -- "忍\x03志\x03忹\x03悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03" + -- "憤\x03憯\x03懞\x03懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03" + -- "掃\x03揤\x03搢\x03揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03" + -- "書\x03晉\x03㬙\x03暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03" + -- "朡\x03杞\x03杓\x03㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03" + -- "槪\x03檨\x03櫛\x03㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03" + -- "汧\x03洖\x03派\x03海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03" + -- "淹\x03潮\x03濆\x03瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03" + -- "爵\x03牐\x03犀\x03犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03" + -- "㼛\x03甤\x03甾\x03異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03" + -- "䂖\x03硎\x03碌\x03磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03" + -- "築\x03䈧\x03糒\x03䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03" + -- "罺\x03羕\x03翺\x03者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03" + -- "䑫\x03芑\x03芋\x03芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03" + -- "莽\x03菧\x03著\x03荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03" + -- "䕫\x03虐\x03虜\x03虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03" + -- "蠁\x03䗹\x03衠\x03衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03" + -- "豕\x03貫\x03賁\x03贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03" + -- "鈸\x03鋗\x03鋘\x03鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03" + -- "䩶\x03韠\x03䪲\x03頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03" + -- "鳽\x03䳎\x03䳭\x03鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" -+var mappings string = "" + // Size: 6539 bytes -+ " ̈a ̄23 ́ ̧1o1⁄41⁄23⁄4i̇l·ʼnsdžⱥⱦhjrwy ̆ ̇ ̊ ̨ ̃ ̋lẍ́ ι; ̈́եւاٴوٴۇٴيٴक" + -+ "़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀྲཱྀླྀླཱ" + -+ "ཱྀྀྒྷྜྷྡྷྦྷྫྷྐྵвдостъѣæbdeǝgikmnȣptuɐɑəɛɜŋɔɯvβγδφχρнɒcɕðfɟɡɥɨɩɪʝɭʟɱɰɲɳ" + -+ "ɴɵɸʂʃƫʉʊʋʌzʐʑʒθssάέήίόύώἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧ" + -+ "ιὰιαιάιᾶιι ̈͂ὴιηιήιῆι ̓̀ ̓́ ̓͂ΐ ̔̀ ̔́ ̔͂ΰ ̈̀`ὼιωιώιῶι′′′′′‵‵‵‵‵!!???!!?" + -+ "′′′′0456789+=()rsħnoqsmtmωåאבגדπ1⁄71⁄91⁄101⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83" + -+ "⁄85⁄87⁄81⁄iiivviviiiixxi0⁄3∫∫∫∫∫∮∮∮∮∮1011121314151617181920(10)(11)(12" + -+ ")(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫==⫝̸ɫɽȿɀ. ゙ ゚よりコト(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)" + -+ "(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(오전" + -+ ")(오후)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(" + -+ "財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)21222324252627282930313233343" + -+ "5참고주의3637383940414243444546474849501月2月3月4月5月6月7月8月9月10月11月12月hgev令和アパート" + -+ "アルファアンペアアールイニングインチウォンエスクードエーカーオンスオームカイリカラットカロリーガロンガンマギガギニーキュリーギルダーキロキロ" + -+ "グラムキロメートルキロワットグラムグラムトンクルゼイロクローネケースコルナコーポサイクルサンチームシリングセンチセントダースデシドルトンナノ" + -+ "ノットハイツパーセントパーツバーレルピアストルピクルピコビルファラッドフィートブッシェルフランヘクタールペソペニヒヘルツペンスページベータポ" + -+ "イントボルトホンポンドホールホーンマイクロマイルマッハマルクマンションミクロンミリミリバールメガメガトンメートルヤードヤールユアンリットルリ" + -+ "ラルピールーブルレムレントゲンワット0点1点2点3点4点5点6点7点8点9点10点11点12点13点14点15点16点17点18点19点20" + -+ "点21点22点23点24点daauovpcdmiu平成昭和大正明治株式会社panamakakbmbgbkcalpfnfmgkghzmldlk" + -+ "lfmnmmmcmkmm2m3m∕sm∕s2rad∕srad∕s2psnsmspvnvmvkvpwnwmwkwbqcccdc∕kgdbgyhah" + -+ "pinkkktlmlnlxphprsrsvwbv∕ma∕m1日2日3日4日5日6日7日8日9日10日11日12日13日14日15日16日17日1" + -+ "8日19日20日21日22日23日24日25日26日27日28日29日30日31日ьɦɬʞʇœʍ𤋮𢡊𢡄𣏕𥉉𥳐𧻓fffiflstմնմեմիվնմ" + -+ "խיִײַעהכלםרתשׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּשּתּו" + -+ "ֹבֿכֿפֿאלٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھےۓڭۇۆۈۋۅۉېىئائەئوئۇئۆئۈئېئىیئجئحئم" + -+ "ئيبجبحبخبمبىبيتجتحتختمتىتيثجثمثىثيجحجمحجحمخجخحخمسجسحسخسمصحصمضجضحضخضمطحط" + -+ "مظمعجعمغجغمفجفحفخفمفىفيقحقمقىقيكاكجكحكخكلكمكىكيلجلحلخلملىليمجمحمخمممىمي" + -+ "نجنحنخنمنىنيهجهمهىهييجيحيخيميىييذٰرٰىٰ ٌّ ٍّ َّ ُّ ِّ ّٰئرئزئنبربزبنترت" + -+ "زتنثرثزثنمانرنزننيريزينئخئهبهتهصخلهنههٰيهثهسهشمشهـَّـُّـِّطىطيعىعيغىغيس" + -+ "ىسيشىشيحىحيجىجيخىخيصىصيضىضيشجشحشخشرسرصرضراًتجمتحجتحمتخمتمجتمحتمخجمححميح" + -+ "مىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمى" + -+ "فخمقمحقمملحملحيلحىلججلخملمحمحجمحممحيمجحمجممخجمخممجخهمجهممنحمنحىنجمنجىنم" + -+ "ينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمين" + -+ "حيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلےاللهاكبرمحمدصلعمرسولعليه" + -+ "وسلمصلىصلى الله عليه وسلمجل جلالهریال,:!?_{}[]#&*-<>\\$%@ـًـَـُـِـّـْءآ" + -+ "أؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهويلآلألإلا\x22'/^|~¢£¬¦¥𝅗𝅥𝅘𝅥𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱" + -+ "𝅘𝅥𝅲𝆹𝅥𝆺𝅥𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯ıȷαεζηκλμνξοστυψ∇∂ϝٮڡٯ0,1,2,3,4,5,6,7,8,9,(a)(b)(c" + -+ ")(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)〔s" + -+ "〕wzhvsdppvwcmcmdmrdjほかココサ手字双デ二多解天交映無料前後再新初終生販声吹演投捕一三遊左中右指走打禁空合満有月申割営配〔" + -+ "本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕得可丽丸乁你侮侻倂偺備僧像㒞免兔兤具㒹內冗冤仌冬况凵刃㓟刻剆剷㔕勇勉勤勺包匆北卉卑博即卽" + -+ "卿灰及叟叫叱吆咞吸呈周咢哶唐啓啣善喙喫喳嗂圖嘆圗噑噴切壮城埴堍型堲報墬売壷夆夢奢姬娛娧姘婦㛮嬈嬾寃寘寧寳寿将尢㞁屠屮峀岍嵃嵮嵫嵼巡巢㠯巽帨帽" + -+ "幩㡢㡼庰庳庶廊廾舁弢㣇形彫㣣徚忍志忹悁㤺㤜悔惇慈慌慎慺憎憲憤憯懞懲懶成戛扝抱拔捐挽拼捨掃揤搢揅掩㨮摩摾撝摷㩬敏敬旣書晉㬙暑㬈㫤冒冕最暜肭䏙朗" + -+ "望朡杞杓㭉柺枅桒梅梎栟椔㮝楂榣槪檨櫛㰘次歔㱎歲殟殺殻汎沿泍汧洖派海流浩浸涅洴港湮㴳滋滇淹潮濆瀹瀞瀛㶖灊災灷炭煅熜爨爵牐犀犕獺王㺬玥㺸瑇瑜瑱璅" + -+ "瓊㼛甤甾異瘐㿼䀈直眞真睊䀹瞋䁆䂖硎碌磌䃣祖福秫䄯穀穊穏䈂篆築䈧糒䊠糨糣紀絣䌁緇縂繅䌴䍙罺羕翺者聠聰䏕育脃䐋脾媵舄辞䑫芑芋芝劳花芳芽苦若茝荣莭" + -+ "茣莽菧著荓菊菌菜䔫蓱蓳蔖蕤䕝䕡䕫虐虜虧虩蚩蚈蜎蛢蝹蜨蝫螆蟡蠁䗹衠衣裗裞䘵裺㒻䚾䛇誠諭變豕貫賁贛起跋趼跰軔輸邔郱鄑鄛鈸鋗鋘鉼鏹鐕開䦕閷䧦雃嶲霣" + -+ "䩮䩶韠䪲頋頩飢䬳餩馧駂駾䯎鬒鱀鳽䳎䳭鵧䳸麻䵖黹黾鼅鼏鼖鼻" -+ -+var mappingIndex = []uint16{ // 1650 elements -+ // Entry 0 - 3F -+ 0x0000, 0x0000, 0x0001, 0x0004, 0x0005, 0x0008, 0x0009, 0x000a, -+ 0x000d, 0x0010, 0x0011, 0x0012, 0x0017, 0x001c, 0x0021, 0x0024, -+ 0x0027, 0x002a, 0x002b, 0x002e, 0x0031, 0x0034, 0x0035, 0x0036, -+ 0x0037, 0x0038, 0x0039, 0x003c, 0x003f, 0x0042, 0x0045, 0x0048, -+ 0x004b, 0x004c, 0x004d, 0x0051, 0x0054, 0x0055, 0x005a, 0x005e, -+ 0x0062, 0x0066, 0x006a, 0x006e, 0x0074, 0x007a, 0x0080, 0x0086, -+ 0x008c, 0x0092, 0x0098, 0x009e, 0x00a4, 0x00aa, 0x00b0, 0x00b6, -+ 0x00bc, 0x00c2, 0x00c8, 0x00ce, 0x00d4, 0x00da, 0x00e0, 0x00e6, -+ // Entry 40 - 7F -+ 0x00ec, 0x00f2, 0x00f8, 0x00fe, 0x0104, 0x010a, 0x0110, 0x0116, -+ 0x011c, 0x0122, 0x0128, 0x012e, 0x0137, 0x013d, 0x0146, 0x014c, -+ 0x0152, 0x0158, 0x015e, 0x0164, 0x016a, 0x0170, 0x0172, 0x0174, -+ 0x0176, 0x0178, 0x017a, 0x017c, 0x017e, 0x0180, 0x0181, 0x0182, -+ 0x0183, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018a, 0x018c, -+ 0x018d, 0x018e, 0x018f, 0x0191, 0x0193, 0x0195, 0x0197, 0x0199, -+ 0x019b, 0x019d, 0x019f, 0x01a0, 0x01a2, 0x01a4, 0x01a6, 0x01a8, -+ 0x01aa, 0x01ac, 0x01ae, 0x01b0, 0x01b1, 0x01b3, 0x01b5, 0x01b6, -+ // Entry 80 - BF -+ 0x01b8, 0x01ba, 0x01bc, 0x01be, 0x01c0, 0x01c2, 0x01c4, 0x01c6, -+ 0x01c8, 0x01ca, 0x01cc, 0x01ce, 0x01d0, 0x01d2, 0x01d4, 0x01d6, -+ 0x01d8, 0x01da, 0x01dc, 0x01de, 0x01e0, 0x01e2, 0x01e4, 0x01e5, -+ 0x01e7, 0x01e9, 0x01eb, 0x01ed, 0x01ef, 0x01f1, 0x01f3, 0x01f5, -+ 0x01f7, 0x01f9, 0x01fb, 0x01fd, 0x0202, 0x0207, 0x020c, 0x0211, -+ 0x0216, 0x021b, 0x0220, 0x0225, 0x022a, 0x022f, 0x0234, 0x0239, -+ 0x023e, 0x0243, 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0261, -+ 0x0266, 0x026b, 0x0270, 0x0275, 0x027a, 0x027e, 0x0282, 0x0287, -+ // Entry C0 - FF -+ 0x0289, 0x028e, 0x0293, 0x0297, 0x029b, 0x02a0, 0x02a5, 0x02aa, -+ 0x02af, 0x02b1, 0x02b6, 0x02bb, 0x02c0, 0x02c2, 0x02c7, 0x02c8, -+ 0x02cd, 0x02d1, 0x02d5, 0x02da, 0x02e0, 0x02e9, 0x02ef, 0x02f8, -+ 0x02fa, 0x02fc, 0x02fe, 0x0300, 0x030c, 0x030d, 0x030e, 0x030f, -+ 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, -+ 0x0319, 0x031b, 0x031d, 0x031e, 0x0320, 0x0322, 0x0324, 0x0326, -+ 0x0328, 0x032a, 0x032c, 0x032e, 0x0330, 0x0335, 0x033a, 0x0340, -+ 0x0345, 0x034a, 0x034f, 0x0354, 0x0359, 0x035e, 0x0363, 0x0368, -+ // Entry 100 - 13F -+ 0x036d, 0x0372, 0x0377, 0x037c, 0x0380, 0x0382, 0x0384, 0x0386, -+ 0x038a, 0x038c, 0x038e, 0x0393, 0x0399, 0x03a2, 0x03a8, 0x03b1, -+ 0x03b3, 0x03b5, 0x03b7, 0x03b9, 0x03bb, 0x03bd, 0x03bf, 0x03c1, -+ 0x03c3, 0x03c5, 0x03c7, 0x03cb, 0x03cf, 0x03d3, 0x03d7, 0x03db, -+ 0x03df, 0x03e3, 0x03e7, 0x03eb, 0x03ef, 0x03f3, 0x03ff, 0x0401, -+ 0x0406, 0x0408, 0x040a, 0x040c, 0x040e, 0x040f, 0x0413, 0x0417, -+ 0x041d, 0x0423, 0x0428, 0x042d, 0x0432, 0x0437, 0x043c, 0x0441, -+ 0x0446, 0x044b, 0x0450, 0x0455, 0x045a, 0x045f, 0x0464, 0x0469, -+ // Entry 140 - 17F -+ 0x046e, 0x0473, 0x0478, 0x047d, 0x0482, 0x0487, 0x048c, 0x0491, -+ 0x0496, 0x049b, 0x04a0, 0x04a5, 0x04aa, 0x04af, 0x04b4, 0x04bc, -+ 0x04c4, 0x04c9, 0x04ce, 0x04d3, 0x04d8, 0x04dd, 0x04e2, 0x04e7, -+ 0x04ec, 0x04f1, 0x04f6, 0x04fb, 0x0500, 0x0505, 0x050a, 0x050f, -+ 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, -+ 0x053c, 0x0541, 0x0546, 0x054b, 0x0550, 0x0555, 0x055a, 0x055f, -+ 0x0564, 0x0569, 0x056e, 0x0573, 0x0578, 0x057a, 0x057c, 0x057e, -+ 0x0580, 0x0582, 0x0584, 0x0586, 0x0588, 0x058a, 0x058c, 0x058e, -+ // Entry 180 - 1BF -+ 0x0590, 0x0592, 0x0594, 0x0596, 0x059c, 0x05a2, 0x05a4, 0x05a6, -+ 0x05a8, 0x05aa, 0x05ac, 0x05ae, 0x05b0, 0x05b2, 0x05b4, 0x05b6, -+ 0x05b8, 0x05ba, 0x05bc, 0x05be, 0x05c0, 0x05c4, 0x05c8, 0x05cc, -+ 0x05d0, 0x05d4, 0x05d8, 0x05dc, 0x05e0, 0x05e4, 0x05e9, 0x05ee, -+ 0x05f3, 0x05f5, 0x05f7, 0x05fd, 0x0609, 0x0615, 0x0621, 0x062a, -+ 0x0636, 0x063f, 0x0648, 0x0657, 0x0663, 0x066c, 0x0675, 0x067e, -+ 0x068a, 0x0696, 0x069f, 0x06a8, 0x06ae, 0x06b7, 0x06c3, 0x06cf, -+ 0x06d5, 0x06e4, 0x06f6, 0x0705, 0x070e, 0x071d, 0x072c, 0x0738, -+ // Entry 1C0 - 1FF -+ 0x0741, 0x074a, 0x0753, 0x075f, 0x076e, 0x077a, 0x0783, 0x078c, -+ 0x0795, 0x079b, 0x07a1, 0x07a7, 0x07ad, 0x07b6, 0x07bf, 0x07ce, -+ 0x07d7, 0x07e3, 0x07f2, 0x07fb, 0x0801, 0x0807, 0x0816, 0x0822, -+ 0x0831, 0x083a, 0x0849, 0x084f, 0x0858, 0x0861, 0x086a, 0x0873, -+ 0x087c, 0x0888, 0x0891, 0x0897, 0x08a0, 0x08a9, 0x08b2, 0x08be, -+ 0x08c7, 0x08d0, 0x08d9, 0x08e8, 0x08f4, 0x08fa, 0x0909, 0x090f, -+ 0x091b, 0x0927, 0x0930, 0x0939, 0x0942, 0x094e, 0x0954, 0x095d, -+ 0x0969, 0x096f, 0x097e, 0x0987, 0x098b, 0x098f, 0x0993, 0x0997, -+ // Entry 200 - 23F -+ 0x099b, 0x099f, 0x09a3, 0x09a7, 0x09ab, 0x09af, 0x09b4, 0x09b9, -+ 0x09be, 0x09c3, 0x09c8, 0x09cd, 0x09d2, 0x09d7, 0x09dc, 0x09e1, -+ 0x09e6, 0x09eb, 0x09f0, 0x09f5, 0x09fa, 0x09fc, 0x09fe, 0x0a00, -+ 0x0a02, 0x0a04, 0x0a06, 0x0a0c, 0x0a12, 0x0a18, 0x0a1e, 0x0a2a, -+ 0x0a2c, 0x0a2e, 0x0a30, 0x0a32, 0x0a34, 0x0a36, 0x0a38, 0x0a3c, -+ 0x0a3e, 0x0a40, 0x0a42, 0x0a44, 0x0a46, 0x0a48, 0x0a4a, 0x0a4c, -+ 0x0a4e, 0x0a50, 0x0a52, 0x0a54, 0x0a56, 0x0a58, 0x0a5a, 0x0a5f, -+ 0x0a65, 0x0a6c, 0x0a74, 0x0a76, 0x0a78, 0x0a7a, 0x0a7c, 0x0a7e, -+ // Entry 240 - 27F -+ 0x0a80, 0x0a82, 0x0a84, 0x0a86, 0x0a88, 0x0a8a, 0x0a8c, 0x0a8e, -+ 0x0a90, 0x0a96, 0x0a98, 0x0a9a, 0x0a9c, 0x0a9e, 0x0aa0, 0x0aa2, -+ 0x0aa4, 0x0aa6, 0x0aa8, 0x0aaa, 0x0aac, 0x0aae, 0x0ab0, 0x0ab2, -+ 0x0ab4, 0x0ab9, 0x0abe, 0x0ac2, 0x0ac6, 0x0aca, 0x0ace, 0x0ad2, -+ 0x0ad6, 0x0ada, 0x0ade, 0x0ae2, 0x0ae7, 0x0aec, 0x0af1, 0x0af6, -+ 0x0afb, 0x0b00, 0x0b05, 0x0b0a, 0x0b0f, 0x0b14, 0x0b19, 0x0b1e, -+ 0x0b23, 0x0b28, 0x0b2d, 0x0b32, 0x0b37, 0x0b3c, 0x0b41, 0x0b46, -+ 0x0b4b, 0x0b50, 0x0b52, 0x0b54, 0x0b56, 0x0b58, 0x0b5a, 0x0b5c, -+ // Entry 280 - 2BF -+ 0x0b5e, 0x0b62, 0x0b66, 0x0b6a, 0x0b6e, 0x0b72, 0x0b76, 0x0b7a, -+ 0x0b7c, 0x0b7e, 0x0b80, 0x0b82, 0x0b86, 0x0b8a, 0x0b8e, 0x0b92, -+ 0x0b96, 0x0b9a, 0x0b9e, 0x0ba0, 0x0ba2, 0x0ba4, 0x0ba6, 0x0ba8, -+ 0x0baa, 0x0bac, 0x0bb0, 0x0bb4, 0x0bba, 0x0bc0, 0x0bc4, 0x0bc8, -+ 0x0bcc, 0x0bd0, 0x0bd4, 0x0bd8, 0x0bdc, 0x0be0, 0x0be4, 0x0be8, -+ 0x0bec, 0x0bf0, 0x0bf4, 0x0bf8, 0x0bfc, 0x0c00, 0x0c04, 0x0c08, -+ 0x0c0c, 0x0c10, 0x0c14, 0x0c18, 0x0c1c, 0x0c20, 0x0c24, 0x0c28, -+ 0x0c2c, 0x0c30, 0x0c34, 0x0c36, 0x0c38, 0x0c3a, 0x0c3c, 0x0c3e, -+ // Entry 2C0 - 2FF -+ 0x0c40, 0x0c42, 0x0c44, 0x0c46, 0x0c48, 0x0c4a, 0x0c4c, 0x0c4e, -+ 0x0c50, 0x0c52, 0x0c54, 0x0c56, 0x0c58, 0x0c5a, 0x0c5c, 0x0c5e, -+ 0x0c60, 0x0c62, 0x0c64, 0x0c66, 0x0c68, 0x0c6a, 0x0c6c, 0x0c6e, -+ 0x0c70, 0x0c72, 0x0c74, 0x0c76, 0x0c78, 0x0c7a, 0x0c7c, 0x0c7e, -+ 0x0c80, 0x0c82, 0x0c86, 0x0c8a, 0x0c8e, 0x0c92, 0x0c96, 0x0c9a, -+ 0x0c9e, 0x0ca2, 0x0ca4, 0x0ca8, 0x0cac, 0x0cb0, 0x0cb4, 0x0cb8, -+ 0x0cbc, 0x0cc0, 0x0cc4, 0x0cc8, 0x0ccc, 0x0cd0, 0x0cd4, 0x0cd8, -+ 0x0cdc, 0x0ce0, 0x0ce4, 0x0ce8, 0x0cec, 0x0cf0, 0x0cf4, 0x0cf8, -+ // Entry 300 - 33F -+ 0x0cfc, 0x0d00, 0x0d04, 0x0d08, 0x0d0c, 0x0d10, 0x0d14, 0x0d18, -+ 0x0d1c, 0x0d20, 0x0d24, 0x0d28, 0x0d2c, 0x0d30, 0x0d34, 0x0d38, -+ 0x0d3c, 0x0d40, 0x0d44, 0x0d48, 0x0d4c, 0x0d50, 0x0d54, 0x0d58, -+ 0x0d5c, 0x0d60, 0x0d64, 0x0d68, 0x0d6c, 0x0d70, 0x0d74, 0x0d78, -+ 0x0d7c, 0x0d80, 0x0d84, 0x0d88, 0x0d8c, 0x0d90, 0x0d94, 0x0d98, -+ 0x0d9c, 0x0da0, 0x0da4, 0x0da8, 0x0dac, 0x0db0, 0x0db4, 0x0db8, -+ 0x0dbc, 0x0dc0, 0x0dc4, 0x0dc8, 0x0dcc, 0x0dd0, 0x0dd4, 0x0dd8, -+ 0x0ddc, 0x0de0, 0x0de4, 0x0de8, 0x0dec, 0x0df0, 0x0df4, 0x0df8, -+ // Entry 340 - 37F -+ 0x0dfc, 0x0e00, 0x0e04, 0x0e08, 0x0e0c, 0x0e10, 0x0e14, 0x0e18, -+ 0x0e1d, 0x0e22, 0x0e27, 0x0e2c, 0x0e31, 0x0e36, 0x0e3a, 0x0e3e, -+ 0x0e42, 0x0e46, 0x0e4a, 0x0e4e, 0x0e52, 0x0e56, 0x0e5a, 0x0e5e, -+ 0x0e62, 0x0e66, 0x0e6a, 0x0e6e, 0x0e72, 0x0e76, 0x0e7a, 0x0e7e, -+ 0x0e82, 0x0e86, 0x0e8a, 0x0e8e, 0x0e92, 0x0e96, 0x0e9a, 0x0e9e, -+ 0x0ea2, 0x0ea6, 0x0eaa, 0x0eae, 0x0eb2, 0x0eb6, 0x0ebc, 0x0ec2, -+ 0x0ec8, 0x0ecc, 0x0ed0, 0x0ed4, 0x0ed8, 0x0edc, 0x0ee0, 0x0ee4, -+ 0x0ee8, 0x0eec, 0x0ef0, 0x0ef4, 0x0ef8, 0x0efc, 0x0f00, 0x0f04, -+ // Entry 380 - 3BF -+ 0x0f08, 0x0f0c, 0x0f10, 0x0f14, 0x0f18, 0x0f1c, 0x0f20, 0x0f24, -+ 0x0f28, 0x0f2c, 0x0f30, 0x0f34, 0x0f38, 0x0f3e, 0x0f44, 0x0f4a, -+ 0x0f50, 0x0f56, 0x0f5c, 0x0f62, 0x0f68, 0x0f6e, 0x0f74, 0x0f7a, -+ 0x0f80, 0x0f86, 0x0f8c, 0x0f92, 0x0f98, 0x0f9e, 0x0fa4, 0x0faa, -+ 0x0fb0, 0x0fb6, 0x0fbc, 0x0fc2, 0x0fc8, 0x0fce, 0x0fd4, 0x0fda, -+ 0x0fe0, 0x0fe6, 0x0fec, 0x0ff2, 0x0ff8, 0x0ffe, 0x1004, 0x100a, -+ 0x1010, 0x1016, 0x101c, 0x1022, 0x1028, 0x102e, 0x1034, 0x103a, -+ 0x1040, 0x1046, 0x104c, 0x1052, 0x1058, 0x105e, 0x1064, 0x106a, -+ // Entry 3C0 - 3FF -+ 0x1070, 0x1076, 0x107c, 0x1082, 0x1088, 0x108e, 0x1094, 0x109a, -+ 0x10a0, 0x10a6, 0x10ac, 0x10b2, 0x10b8, 0x10be, 0x10c4, 0x10ca, -+ 0x10d0, 0x10d6, 0x10dc, 0x10e2, 0x10e8, 0x10ee, 0x10f4, 0x10fa, -+ 0x1100, 0x1106, 0x110c, 0x1112, 0x1118, 0x111e, 0x1124, 0x112a, -+ 0x1130, 0x1136, 0x113c, 0x1142, 0x1148, 0x114e, 0x1154, 0x115a, -+ 0x1160, 0x1166, 0x116c, 0x1172, 0x1178, 0x1180, 0x1188, 0x1190, -+ 0x1198, 0x11a0, 0x11a8, 0x11b0, 0x11b6, 0x11d7, 0x11e6, 0x11ee, -+ 0x11ef, 0x11f0, 0x11f1, 0x11f2, 0x11f3, 0x11f4, 0x11f5, 0x11f6, -+ // Entry 400 - 43F -+ 0x11f7, 0x11f8, 0x11f9, 0x11fa, 0x11fb, 0x11fc, 0x11fd, 0x11fe, -+ 0x11ff, 0x1200, 0x1201, 0x1205, 0x1209, 0x120d, 0x1211, 0x1215, -+ 0x1219, 0x121b, 0x121d, 0x121f, 0x1221, 0x1223, 0x1225, 0x1227, -+ 0x1229, 0x122b, 0x122d, 0x122f, 0x1231, 0x1233, 0x1235, 0x1237, -+ 0x1239, 0x123b, 0x123d, 0x123f, 0x1241, 0x1243, 0x1245, 0x1247, -+ 0x1249, 0x124b, 0x124d, 0x124f, 0x1251, 0x1253, 0x1255, 0x1257, -+ 0x1259, 0x125b, 0x125d, 0x125f, 0x1263, 0x1267, 0x126b, 0x126f, -+ 0x1270, 0x1271, 0x1272, 0x1273, 0x1274, 0x1275, 0x1277, 0x1279, -+ // Entry 440 - 47F -+ 0x127b, 0x127d, 0x127f, 0x1287, 0x128f, 0x129b, 0x12a7, 0x12b3, -+ 0x12bf, 0x12cb, 0x12d3, 0x12db, 0x12e7, 0x12f3, 0x12ff, 0x130b, -+ 0x130d, 0x130f, 0x1311, 0x1313, 0x1315, 0x1317, 0x1319, 0x131b, -+ 0x131d, 0x131f, 0x1321, 0x1323, 0x1325, 0x1327, 0x1329, 0x132b, -+ 0x132e, 0x1331, 0x1333, 0x1335, 0x1337, 0x1339, 0x133b, 0x133d, -+ 0x133f, 0x1341, 0x1343, 0x1345, 0x1347, 0x1349, 0x134b, 0x134d, -+ 0x1350, 0x1353, 0x1356, 0x1359, 0x135c, 0x135f, 0x1362, 0x1365, -+ 0x1368, 0x136b, 0x136e, 0x1371, 0x1374, 0x1377, 0x137a, 0x137d, -+ // Entry 480 - 4BF -+ 0x1380, 0x1383, 0x1386, 0x1389, 0x138c, 0x138f, 0x1392, 0x1395, -+ 0x1398, 0x139b, 0x13a2, 0x13a4, 0x13a6, 0x13a8, 0x13ab, 0x13ad, -+ 0x13af, 0x13b1, 0x13b3, 0x13b5, 0x13bb, 0x13c1, 0x13c4, 0x13c7, -+ 0x13ca, 0x13cd, 0x13d0, 0x13d3, 0x13d6, 0x13d9, 0x13dc, 0x13df, -+ 0x13e2, 0x13e5, 0x13e8, 0x13eb, 0x13ee, 0x13f1, 0x13f4, 0x13f7, -+ 0x13fa, 0x13fd, 0x1400, 0x1403, 0x1406, 0x1409, 0x140c, 0x140f, -+ 0x1412, 0x1415, 0x1418, 0x141b, 0x141e, 0x1421, 0x1424, 0x1427, -+ 0x142a, 0x142d, 0x1430, 0x1433, 0x1436, 0x1439, 0x143c, 0x143f, -+ // Entry 4C0 - 4FF -+ 0x1442, 0x1445, 0x1448, 0x1451, 0x145a, 0x1463, 0x146c, 0x1475, -+ 0x147e, 0x1487, 0x1490, 0x1499, 0x149c, 0x149f, 0x14a2, 0x14a5, -+ 0x14a8, 0x14ab, 0x14ae, 0x14b1, 0x14b4, 0x14b7, 0x14ba, 0x14bd, -+ 0x14c0, 0x14c3, 0x14c6, 0x14c9, 0x14cc, 0x14cf, 0x14d2, 0x14d5, -+ 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, 0x14e7, 0x14ea, 0x14ed, -+ 0x14f0, 0x14f3, 0x14f6, 0x14f9, 0x14fc, 0x14ff, 0x1502, 0x1505, -+ 0x1508, 0x150b, 0x150e, 0x1511, 0x1514, 0x1517, 0x151a, 0x151d, -+ 0x1520, 0x1523, 0x1526, 0x1529, 0x152c, 0x152f, 0x1532, 0x1535, -+ // Entry 500 - 53F -+ 0x1538, 0x153b, 0x153e, 0x1541, 0x1544, 0x1547, 0x154a, 0x154d, -+ 0x1550, 0x1553, 0x1556, 0x1559, 0x155c, 0x155f, 0x1562, 0x1565, -+ 0x1568, 0x156b, 0x156e, 0x1571, 0x1574, 0x1577, 0x157a, 0x157d, -+ 0x1580, 0x1583, 0x1586, 0x1589, 0x158c, 0x158f, 0x1592, 0x1595, -+ 0x1598, 0x159b, 0x159e, 0x15a1, 0x15a4, 0x15a7, 0x15aa, 0x15ad, -+ 0x15b0, 0x15b3, 0x15b6, 0x15b9, 0x15bc, 0x15bf, 0x15c2, 0x15c5, -+ 0x15c8, 0x15cb, 0x15ce, 0x15d1, 0x15d4, 0x15d7, 0x15da, 0x15dd, -+ 0x15e0, 0x15e3, 0x15e6, 0x15e9, 0x15ec, 0x15ef, 0x15f2, 0x15f5, -+ // Entry 540 - 57F -+ 0x15f8, 0x15fb, 0x15fe, 0x1601, 0x1604, 0x1607, 0x160a, 0x160d, -+ 0x1610, 0x1613, 0x1616, 0x1619, 0x161c, 0x161f, 0x1622, 0x1625, -+ 0x1628, 0x162b, 0x162e, 0x1631, 0x1634, 0x1637, 0x163a, 0x163d, -+ 0x1640, 0x1643, 0x1646, 0x1649, 0x164c, 0x164f, 0x1652, 0x1655, -+ 0x1658, 0x165b, 0x165e, 0x1661, 0x1664, 0x1667, 0x166a, 0x166d, -+ 0x1670, 0x1673, 0x1676, 0x1679, 0x167c, 0x167f, 0x1682, 0x1685, -+ 0x1688, 0x168b, 0x168e, 0x1691, 0x1694, 0x1697, 0x169a, 0x169d, -+ 0x16a0, 0x16a3, 0x16a6, 0x16a9, 0x16ac, 0x16af, 0x16b2, 0x16b5, -+ // Entry 580 - 5BF -+ 0x16b8, 0x16bb, 0x16be, 0x16c1, 0x16c4, 0x16c7, 0x16ca, 0x16cd, -+ 0x16d0, 0x16d3, 0x16d6, 0x16d9, 0x16dc, 0x16df, 0x16e2, 0x16e5, -+ 0x16e8, 0x16eb, 0x16ee, 0x16f1, 0x16f4, 0x16f7, 0x16fa, 0x16fd, -+ 0x1700, 0x1703, 0x1706, 0x1709, 0x170c, 0x170f, 0x1712, 0x1715, -+ 0x1718, 0x171b, 0x171e, 0x1721, 0x1724, 0x1727, 0x172a, 0x172d, -+ 0x1730, 0x1733, 0x1736, 0x1739, 0x173c, 0x173f, 0x1742, 0x1745, -+ 0x1748, 0x174b, 0x174e, 0x1751, 0x1754, 0x1757, 0x175a, 0x175d, -+ 0x1760, 0x1763, 0x1766, 0x1769, 0x176c, 0x176f, 0x1772, 0x1775, -+ // Entry 5C0 - 5FF -+ 0x1778, 0x177b, 0x177e, 0x1781, 0x1784, 0x1787, 0x178a, 0x178d, -+ 0x1790, 0x1793, 0x1796, 0x1799, 0x179c, 0x179f, 0x17a2, 0x17a5, -+ 0x17a8, 0x17ab, 0x17ae, 0x17b1, 0x17b4, 0x17b7, 0x17ba, 0x17bd, -+ 0x17c0, 0x17c3, 0x17c6, 0x17c9, 0x17cc, 0x17cf, 0x17d2, 0x17d5, -+ 0x17d8, 0x17db, 0x17de, 0x17e1, 0x17e4, 0x17e7, 0x17ea, 0x17ed, -+ 0x17f0, 0x17f3, 0x17f6, 0x17f9, 0x17fc, 0x17ff, 0x1802, 0x1805, -+ 0x1808, 0x180b, 0x180e, 0x1811, 0x1814, 0x1817, 0x181a, 0x181d, -+ 0x1820, 0x1823, 0x1826, 0x1829, 0x182c, 0x182f, 0x1832, 0x1835, -+ // Entry 600 - 63F -+ 0x1838, 0x183b, 0x183e, 0x1841, 0x1844, 0x1847, 0x184a, 0x184d, -+ 0x1850, 0x1853, 0x1856, 0x1859, 0x185c, 0x185f, 0x1862, 0x1865, -+ 0x1868, 0x186b, 0x186e, 0x1871, 0x1874, 0x1877, 0x187a, 0x187d, -+ 0x1880, 0x1883, 0x1886, 0x1889, 0x188c, 0x188f, 0x1892, 0x1895, -+ 0x1898, 0x189b, 0x189e, 0x18a1, 0x18a4, 0x18a7, 0x18aa, 0x18ad, -+ 0x18b0, 0x18b3, 0x18b6, 0x18b9, 0x18bc, 0x18bf, 0x18c2, 0x18c5, -+ 0x18c8, 0x18cb, 0x18ce, 0x18d1, 0x18d4, 0x18d7, 0x18da, 0x18dd, -+ 0x18e0, 0x18e3, 0x18e6, 0x18e9, 0x18ec, 0x18ef, 0x18f2, 0x18f5, -+ // Entry 640 - 67F -+ 0x18f8, 0x18fb, 0x18fe, 0x1901, 0x1904, 0x1907, 0x190a, 0x190d, -+ 0x1910, 0x1913, 0x1916, 0x1919, 0x191c, 0x191f, 0x1922, 0x1925, -+ 0x1928, 0x192b, 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, -+ 0x1940, 0x1943, 0x1946, 0x1949, 0x194c, 0x194f, 0x1952, 0x1955, -+ 0x1958, 0x195b, 0x195e, 0x1961, 0x1964, 0x1967, 0x196a, 0x196d, -+ 0x1970, 0x1973, 0x1976, 0x1979, 0x197c, 0x197f, 0x1982, 0x1985, -+ 0x1988, 0x198b, -+} // Size: 3324 bytes - - var xorData string = "" + // Size: 4862 bytes - "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + -@@ -547,7 +690,7 @@ func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { - return 0 - } - --// idnaTrie. Total size: 30288 bytes (29.58 KiB). Checksum: c0cd84404a2f6f19. -+// idnaTrie. Total size: 30196 bytes (29.49 KiB). Checksum: e2ae95a945f04016. - type idnaTrie struct{} - - func newIdnaTrie(i int) *idnaTrie { -@@ -600,11 +743,11 @@ var idnaValues = [8192]uint16{ - 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, - 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, - 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, -- 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, -- 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, -- 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, -- 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, -- 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, -+ 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x0012, 0xe9: 0x0018, -+ 0xea: 0x0019, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x0022, -+ 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0029, 0xf3: 0x0031, 0xf4: 0x003a, 0xf5: 0x0005, -+ 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x0042, 0xf9: 0x0049, 0xfa: 0x0051, 0xfb: 0x0018, -+ 0xfc: 0x0059, 0xfd: 0x0061, 0xfe: 0x0069, 0xff: 0x0018, - // Block 0x4, offset 0x100 - 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, - 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, -@@ -614,12 +757,12 @@ var idnaValues = [8192]uint16{ - 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, - 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, - 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, -- 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, -+ 0x130: 0x0071, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, - 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, -- 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, -+ 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0079, - // Block 0x5, offset 0x140 -- 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, -- 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, -+ 0x140: 0x0079, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, -+ 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x0081, 0x14a: 0xe00d, 0x14b: 0x0008, - 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, - 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, - 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, -@@ -628,7 +771,7 @@ var idnaValues = [8192]uint16{ - 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, - 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, - 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, -- 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, -+ 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x0089, - // Block 0x6, offset 0x180 - 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, - 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, -@@ -642,8 +785,8 @@ var idnaValues = [8192]uint16{ - 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, - 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, - // Block 0x7, offset 0x1c0 -- 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, -- 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, -+ 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x0091, 0x1c5: 0x0091, -+ 0x1c6: 0x0091, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, - 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, - 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, - 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, -@@ -663,22 +806,22 @@ var idnaValues = [8192]uint16{ - 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, - 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, - 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, -- 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, -- 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, -+ 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0099, 0x23b: 0xe03d, -+ 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x00a1, 0x23f: 0x0008, - // Block 0x9, offset 0x240 - 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, - 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, - 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, - 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, -- 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, -- 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, -+ 0x258: 0x00d2, 0x259: 0x00da, 0x25a: 0x00e2, 0x25b: 0x00ea, 0x25c: 0x00f2, 0x25d: 0x00fa, -+ 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0101, 0x262: 0x0089, 0x263: 0x0109, - 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, - 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, - 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, - 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, - 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, - // Block 0xa, offset 0x280 -- 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, -+ 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0111, 0x285: 0x040d, - 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, - 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, - 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, -@@ -687,10 +830,10 @@ var idnaValues = [8192]uint16{ - 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, - 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, - 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, -- 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, -- 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, -+ 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x011a, 0x2bb: 0x0008, -+ 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x0122, 0x2bf: 0x043d, - // Block 0xb, offset 0x2c0 -- 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, -+ 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x003a, 0x2c5: 0x012a, - 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, - 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, - 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, -@@ -782,8 +925,8 @@ var idnaValues = [8192]uint16{ - 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, - 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, - 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, -- 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429, -- 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, -+ 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0139, -+ 0x4b6: 0x0141, 0x4b7: 0x0149, 0x4b8: 0x0151, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, - 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, -@@ -826,8 +969,8 @@ var idnaValues = [8192]uint16{ - 0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008, - 0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308, - 0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308, -- 0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1, -- 0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, -+ 0x598: 0x0159, 0x599: 0x0161, 0x59a: 0x0169, 0x59b: 0x0171, 0x59c: 0x0179, 0x59d: 0x0181, -+ 0x59e: 0x0189, 0x59f: 0x0191, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, - 0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, - 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, - 0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008, -@@ -850,8 +993,8 @@ var idnaValues = [8192]uint16{ - 0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008, - 0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040, - 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008, -- 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1, -- 0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, -+ 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0199, 0x61d: 0x01a1, -+ 0x61e: 0x0040, 0x61f: 0x01a9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, - 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, - 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, - 0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018, -@@ -866,16 +1009,16 @@ var idnaValues = [8192]uint16{ - 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, - 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, - 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, -- 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008, -- 0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, -+ 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x01b1, 0x674: 0x0040, 0x675: 0x0008, -+ 0x676: 0x01b9, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, - 0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008, - // Block 0x1a, offset 0x680 - 0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040, - 0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308, - 0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308, - 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, -- 0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040, -- 0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, -+ 0x698: 0x0040, 0x699: 0x01c1, 0x69a: 0x01c9, 0x69b: 0x01d1, 0x69c: 0x0008, 0x69d: 0x0040, -+ 0x69e: 0x01d9, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, - 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, - 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, - 0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308, -@@ -922,7 +1065,7 @@ var idnaValues = [8192]uint16{ - 0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008, - 0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, - 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x3308, 0x796: 0x3308, 0x797: 0x3008, -- 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, -+ 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x01e1, 0x79d: 0x01e9, - 0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308, - 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, - 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, -@@ -998,32 +1141,32 @@ var idnaValues = [8192]uint16{ - 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, - 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0008, - 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, -- 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308, -+ 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x01f9, 0x934: 0x3308, 0x935: 0x3308, - 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x3b08, 0x93b: 0x3308, - 0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040, - // Block 0x25, offset 0x940 -- 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008, -+ 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0211, 0x944: 0x0008, 0x945: 0x0008, - 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, -- 0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, -- 0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79, -- 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008, -+ 0x94c: 0x0008, 0x94d: 0x0219, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, -+ 0x952: 0x0221, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0229, -+ 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0231, 0x95d: 0x0008, - 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, -- 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, -+ 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0239, - 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040, -- 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59, -- 0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308, -+ 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0241, 0x974: 0x3308, 0x975: 0x0249, -+ 0x976: 0x0251, 0x977: 0x0259, 0x978: 0x0261, 0x979: 0x0269, 0x97a: 0x3308, 0x97b: 0x3308, - 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, - // Block 0x26, offset 0x980 -- 0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, -+ 0x980: 0x3308, 0x981: 0x0271, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, - 0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, - 0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308, -- 0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, -- 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11, -- 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308, -- 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308, -- 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, -+ 0x992: 0x3308, 0x993: 0x0279, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, -+ 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0281, -+ 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0289, 0x9a3: 0x3308, -+ 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0291, 0x9a8: 0x3308, 0x9a9: 0x3308, -+ 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0299, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, - 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, -- 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308, -+ 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x02a1, 0x9ba: 0x3308, 0x9bb: 0x3308, - 0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, -@@ -1033,34 +1176,34 @@ var idnaValues = [8192]uint16{ - 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008, - 0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008, - 0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008, -- 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008, -- 0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41, -- 0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008, -- 0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269, -+ 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0019, 0x9ed: 0x02e1, 0x9ee: 0x02e9, 0x9ef: 0x0008, -+ 0x9f0: 0x02f1, 0x9f1: 0x02f9, 0x9f2: 0x0301, 0x9f3: 0x0309, 0x9f4: 0x00a9, 0x9f5: 0x0311, -+ 0x9f6: 0x00b1, 0x9f7: 0x0319, 0x9f8: 0x0101, 0x9f9: 0x0321, 0x9fa: 0x0329, 0x9fb: 0x0008, -+ 0x9fc: 0x0051, 0x9fd: 0x0331, 0x9fe: 0x0339, 0x9ff: 0x00b9, - // Block 0x28, offset 0xa00 -- 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1, -- 0xa06: 0x05b5, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011, -- 0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041, -- 0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05cd, 0xa15: 0x05cd, 0xa16: 0x0f99, 0xa17: 0x0fa9, -- 0xa18: 0x0fb9, 0xa19: 0x05b5, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05e5, 0xa1d: 0x1099, -- 0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269, -- 0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1, -- 0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, -+ 0xa00: 0x0341, 0xa01: 0x0349, 0xa02: 0x00c1, 0xa03: 0x0019, 0xa04: 0x0351, 0xa05: 0x0359, -+ 0xa06: 0x05b5, 0xa07: 0x02e9, 0xa08: 0x02f1, 0xa09: 0x02f9, 0xa0a: 0x0361, 0xa0b: 0x0369, -+ 0xa0c: 0x0371, 0xa0d: 0x0309, 0xa0e: 0x0008, 0xa0f: 0x0319, 0xa10: 0x0321, 0xa11: 0x0379, -+ 0xa12: 0x0051, 0xa13: 0x0381, 0xa14: 0x05cd, 0xa15: 0x05cd, 0xa16: 0x0339, 0xa17: 0x0341, -+ 0xa18: 0x0349, 0xa19: 0x05b5, 0xa1a: 0x0389, 0xa1b: 0x0391, 0xa1c: 0x05e5, 0xa1d: 0x0399, -+ 0xa1e: 0x03a1, 0xa1f: 0x03a9, 0xa20: 0x03b1, 0xa21: 0x03b9, 0xa22: 0x0311, 0xa23: 0x00b9, -+ 0xa24: 0x0349, 0xa25: 0x0391, 0xa26: 0x0399, 0xa27: 0x03a1, 0xa28: 0x03c1, 0xa29: 0x03b1, -+ 0xa2a: 0x03b9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, - 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, -- 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, -+ 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x03c9, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, - 0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008, - // Block 0x29, offset 0xa40 - 0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008, - 0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008, - 0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008, - 0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, -- 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169, -- 0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9, -- 0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05fd, 0xa68: 0x1239, 0xa69: 0x1251, -- 0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9, -- 0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359, -- 0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x0615, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1, -- 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429, -+ 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x03d1, 0xa5c: 0x03d9, 0xa5d: 0x03e1, -+ 0xa5e: 0x03e9, 0xa5f: 0x0371, 0xa60: 0x03f1, 0xa61: 0x03f9, 0xa62: 0x0401, 0xa63: 0x0409, -+ 0xa64: 0x0411, 0xa65: 0x0419, 0xa66: 0x0421, 0xa67: 0x05fd, 0xa68: 0x0429, 0xa69: 0x0431, -+ 0xa6a: 0xe17d, 0xa6b: 0x0439, 0xa6c: 0x0441, 0xa6d: 0x0449, 0xa6e: 0x0451, 0xa6f: 0x0459, -+ 0xa70: 0x0461, 0xa71: 0x0469, 0xa72: 0x0471, 0xa73: 0x0479, 0xa74: 0x0481, 0xa75: 0x0489, -+ 0xa76: 0x0491, 0xa77: 0x0499, 0xa78: 0x0615, 0xa79: 0x04a1, 0xa7a: 0x04a9, 0xa7b: 0x04b1, -+ 0xa7c: 0x04b9, 0xa7d: 0x04c1, 0xa7e: 0x04c9, 0xa7f: 0x04d1, - // Block 0x2a, offset 0xa80 - 0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008, - 0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008, -@@ -1079,7 +1222,7 @@ var idnaValues = [8192]uint16{ - 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, - 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008, - 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x062d, 0xadb: 0x064d, 0xadc: 0x0008, 0xadd: 0x0008, -- 0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, -+ 0xade: 0x04d9, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, - 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, - 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, - 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, -@@ -1094,33 +1237,33 @@ var idnaValues = [8192]uint16{ - 0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008, - 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, - 0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045, -- 0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489, -- 0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1, -- 0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040, -+ 0xb30: 0x0008, 0xb31: 0x04e1, 0xb32: 0x0008, 0xb33: 0x04e9, 0xb34: 0x0008, 0xb35: 0x04f1, -+ 0xb36: 0x0008, 0xb37: 0x04f9, 0xb38: 0x0008, 0xb39: 0x0501, 0xb3a: 0x0008, 0xb3b: 0x0509, -+ 0xb3c: 0x0008, 0xb3d: 0x0511, 0xb3e: 0x0040, 0xb3f: 0x0040, - // Block 0x2d, offset 0xb40 -- 0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1, -- 0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591, -- 0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1, -- 0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1, -- 0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771, -- 0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891, -- 0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831, -- 0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951, -- 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040, -- 0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x0665, 0xb7b: 0x1459, -- 0xb7c: 0x19b1, 0xb7d: 0x067e, 0xb7e: 0x1a31, 0xb7f: 0x069e, -+ 0xb40: 0x0519, 0xb41: 0x0521, 0xb42: 0x0529, 0xb43: 0x0531, 0xb44: 0x0539, 0xb45: 0x0541, -+ 0xb46: 0x0549, 0xb47: 0x0551, 0xb48: 0x0519, 0xb49: 0x0521, 0xb4a: 0x0529, 0xb4b: 0x0531, -+ 0xb4c: 0x0539, 0xb4d: 0x0541, 0xb4e: 0x0549, 0xb4f: 0x0551, 0xb50: 0x0559, 0xb51: 0x0561, -+ 0xb52: 0x0569, 0xb53: 0x0571, 0xb54: 0x0579, 0xb55: 0x0581, 0xb56: 0x0589, 0xb57: 0x0591, -+ 0xb58: 0x0559, 0xb59: 0x0561, 0xb5a: 0x0569, 0xb5b: 0x0571, 0xb5c: 0x0579, 0xb5d: 0x0581, -+ 0xb5e: 0x0589, 0xb5f: 0x0591, 0xb60: 0x0599, 0xb61: 0x05a1, 0xb62: 0x05a9, 0xb63: 0x05b1, -+ 0xb64: 0x05b9, 0xb65: 0x05c1, 0xb66: 0x05c9, 0xb67: 0x05d1, 0xb68: 0x0599, 0xb69: 0x05a1, -+ 0xb6a: 0x05a9, 0xb6b: 0x05b1, 0xb6c: 0x05b9, 0xb6d: 0x05c1, 0xb6e: 0x05c9, 0xb6f: 0x05d1, -+ 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x05d9, 0xb73: 0x05e1, 0xb74: 0x05e9, 0xb75: 0x0040, -+ 0xb76: 0x0008, 0xb77: 0x05f1, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x0665, 0xb7b: 0x04e1, -+ 0xb7c: 0x05e1, 0xb7d: 0x067e, 0xb7e: 0x05f9, 0xb7f: 0x069e, - // Block 0x2e, offset 0xb80 -- 0xb80: 0x06be, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040, -- 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06dd, 0xb89: 0x1471, 0xb8a: 0x06f5, 0xb8b: 0x1489, -- 0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008, -- 0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, -- 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x070d, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2, -- 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61, -+ 0xb80: 0x06be, 0xb81: 0x0602, 0xb82: 0x0609, 0xb83: 0x0611, 0xb84: 0x0619, 0xb85: 0x0040, -+ 0xb86: 0x0008, 0xb87: 0x0621, 0xb88: 0x06dd, 0xb89: 0x04e9, 0xb8a: 0x06f5, 0xb8b: 0x04f1, -+ 0xb8c: 0x0611, 0xb8d: 0x062a, 0xb8e: 0x0632, 0xb8f: 0x063a, 0xb90: 0x0008, 0xb91: 0x0008, -+ 0xb92: 0x0008, 0xb93: 0x0641, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, -+ 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x070d, 0xb9b: 0x04f9, 0xb9c: 0x0040, 0xb9d: 0x064a, -+ 0xb9e: 0x0652, 0xb9f: 0x065a, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x0661, - 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045, -- 0xbaa: 0x0725, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa, -- 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040, -- 0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x073d, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9, -- 0xbbc: 0x1ce9, 0xbbd: 0x0756, 0xbbe: 0x0776, 0xbbf: 0x0040, -+ 0xbaa: 0x0725, 0xbab: 0x0509, 0xbac: 0xe04d, 0xbad: 0x066a, 0xbae: 0x012a, 0xbaf: 0x0672, -+ 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x0679, 0xbb3: 0x0681, 0xbb4: 0x0689, 0xbb5: 0x0040, -+ 0xbb6: 0x0008, 0xbb7: 0x0691, 0xbb8: 0x073d, 0xbb9: 0x0501, 0xbba: 0x0515, 0xbbb: 0x0511, -+ 0xbbc: 0x0681, 0xbbd: 0x0756, 0xbbe: 0x0776, 0xbbf: 0x0040, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a, - 0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0, -@@ -1130,72 +1273,72 @@ var idnaValues = [8192]uint16{ - 0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, - 0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040, - 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a, -- 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018, -- 0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, -- 0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x07b6, 0xbff: 0x0018, -+ 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0699, 0xbf4: 0x06a1, 0xbf5: 0x0018, -+ 0xbf6: 0x06a9, 0xbf7: 0x06b1, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, -+ 0xbfc: 0x06ba, 0xbfd: 0x0018, 0xbfe: 0x07b6, 0xbff: 0x0018, - // Block 0x30, offset 0xc00 - 0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018, -- 0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018, -+ 0xc06: 0x0018, 0xc07: 0x06c2, 0xc08: 0x06ca, 0xc09: 0x06d2, 0xc0a: 0x0018, 0xc0b: 0x0018, - 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, -- 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, -+ 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x06d9, - 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, - 0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340, - 0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040, - 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340, -- 0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61, -- 0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07d5, -- 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71, -+ 0xc30: 0x06e1, 0xc31: 0x0311, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x06e9, 0xc35: 0x06f1, -+ 0xc36: 0x06f9, 0xc37: 0x0701, 0xc38: 0x0709, 0xc39: 0x0711, 0xc3a: 0x071a, 0xc3b: 0x07d5, -+ 0xc3c: 0x0722, 0xc3d: 0x072a, 0xc3e: 0x0732, 0xc3f: 0x0329, - // Block 0x31, offset 0xc40 -- 0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61, -- 0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07ed, -- 0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09, -- 0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359, -- 0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040, -+ 0xc40: 0x06e1, 0xc41: 0x0049, 0xc42: 0x0029, 0xc43: 0x0031, 0xc44: 0x06e9, 0xc45: 0x06f1, -+ 0xc46: 0x06f9, 0xc47: 0x0701, 0xc48: 0x0709, 0xc49: 0x0711, 0xc4a: 0x071a, 0xc4b: 0x07ed, -+ 0xc4c: 0x0722, 0xc4d: 0x072a, 0xc4e: 0x0732, 0xc4f: 0x0040, 0xc50: 0x0019, 0xc51: 0x02f9, -+ 0xc52: 0x0051, 0xc53: 0x0109, 0xc54: 0x0361, 0xc55: 0x00a9, 0xc56: 0x0319, 0xc57: 0x0101, -+ 0xc58: 0x0321, 0xc59: 0x0329, 0xc5a: 0x0339, 0xc5b: 0x0089, 0xc5c: 0x0341, 0xc5d: 0x0040, - 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, -- 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018, -+ 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x0739, 0xc69: 0x0018, - 0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018, - 0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018, - 0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018, - 0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018, - // Block 0x32, offset 0xc80 -- 0xc80: 0x0806, 0xc81: 0x0826, 0xc82: 0x1159, 0xc83: 0x0845, 0xc84: 0x0018, 0xc85: 0x0866, -- 0xc86: 0x0886, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x08a5, 0xc8a: 0x0f31, 0xc8b: 0x0249, -- 0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41, -- 0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018, -- 0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269, -- 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08c5, 0xca2: 0x2061, 0xca3: 0x0018, -- 0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018, -- 0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09, -- 0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9, -- 0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08e5, -- 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109, -+ 0xc80: 0x0806, 0xc81: 0x0826, 0xc82: 0x03d9, 0xc83: 0x0845, 0xc84: 0x0018, 0xc85: 0x0866, -+ 0xc86: 0x0886, 0xc87: 0x0369, 0xc88: 0x0018, 0xc89: 0x08a5, 0xc8a: 0x0309, 0xc8b: 0x00a9, -+ 0xc8c: 0x00a9, 0xc8d: 0x00a9, 0xc8e: 0x00a9, 0xc8f: 0x0741, 0xc90: 0x0311, 0xc91: 0x0311, -+ 0xc92: 0x0101, 0xc93: 0x0101, 0xc94: 0x0018, 0xc95: 0x0329, 0xc96: 0x0749, 0xc97: 0x0018, -+ 0xc98: 0x0018, 0xc99: 0x0339, 0xc9a: 0x0751, 0xc9b: 0x00b9, 0xc9c: 0x00b9, 0xc9d: 0x00b9, -+ 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x0759, 0xca1: 0x08c5, 0xca2: 0x0761, 0xca3: 0x0018, -+ 0xca4: 0x04b1, 0xca5: 0x0018, 0xca6: 0x0769, 0xca7: 0x0018, 0xca8: 0x04b1, 0xca9: 0x0018, -+ 0xcaa: 0x0319, 0xcab: 0x0771, 0xcac: 0x02e9, 0xcad: 0x03d9, 0xcae: 0x0018, 0xcaf: 0x02f9, -+ 0xcb0: 0x02f9, 0xcb1: 0x03f1, 0xcb2: 0x0040, 0xcb3: 0x0321, 0xcb4: 0x0051, 0xcb5: 0x0779, -+ 0xcb6: 0x0781, 0xcb7: 0x0789, 0xcb8: 0x0791, 0xcb9: 0x0311, 0xcba: 0x0018, 0xcbb: 0x08e5, -+ 0xcbc: 0x0799, 0xcbd: 0x03a1, 0xcbe: 0x03a1, 0xcbf: 0x0799, - // Block 0x33, offset 0xcc0 -- 0xcc0: 0x0905, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9, -- 0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018, -- 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151, -- 0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279, -- 0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399, -- 0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x091d, 0xce3: 0x2439, -- 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x093d, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369, -- 0xcea: 0x24a9, 0xceb: 0x095d, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61, -- 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x097d, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451, -- 0xcf6: 0x099d, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09bd, -- 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61, -+ 0xcc0: 0x0905, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x02f1, -+ 0xcc6: 0x02f1, 0xcc7: 0x02f9, 0xcc8: 0x0311, 0xcc9: 0x00b1, 0xcca: 0x0018, 0xccb: 0x0018, -+ 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x07a1, 0xcd1: 0x07a9, -+ 0xcd2: 0x07b1, 0xcd3: 0x07b9, 0xcd4: 0x07c1, 0xcd5: 0x07c9, 0xcd6: 0x07d1, 0xcd7: 0x07d9, -+ 0xcd8: 0x07e1, 0xcd9: 0x07e9, 0xcda: 0x07f1, 0xcdb: 0x07f9, 0xcdc: 0x0801, 0xcdd: 0x0809, -+ 0xcde: 0x0811, 0xcdf: 0x0819, 0xce0: 0x0311, 0xce1: 0x0821, 0xce2: 0x091d, 0xce3: 0x0829, -+ 0xce4: 0x0391, 0xce5: 0x0831, 0xce6: 0x093d, 0xce7: 0x0839, 0xce8: 0x0841, 0xce9: 0x0109, -+ 0xcea: 0x0849, 0xceb: 0x095d, 0xcec: 0x0101, 0xced: 0x03d9, 0xcee: 0x02f1, 0xcef: 0x0321, -+ 0xcf0: 0x0311, 0xcf1: 0x0821, 0xcf2: 0x097d, 0xcf3: 0x0829, 0xcf4: 0x0391, 0xcf5: 0x0831, -+ 0xcf6: 0x099d, 0xcf7: 0x0839, 0xcf8: 0x0841, 0xcf9: 0x0109, 0xcfa: 0x0849, 0xcfb: 0x09bd, -+ 0xcfc: 0x0101, 0xcfd: 0x03d9, 0xcfe: 0x02f1, 0xcff: 0x0321, - // Block 0x34, offset 0xd00 - 0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018, - 0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040, - 0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040, - 0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040, - 0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040, -- 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51, -- 0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601, -- 0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691, -- 0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a1e, 0xd35: 0x0a3e, -+ 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x0049, 0xd21: 0x0029, 0xd22: 0x0031, 0xd23: 0x06e9, -+ 0xd24: 0x06f1, 0xd25: 0x06f9, 0xd26: 0x0701, 0xd27: 0x0709, 0xd28: 0x0711, 0xd29: 0x0879, -+ 0xd2a: 0x0881, 0xd2b: 0x0889, 0xd2c: 0x0891, 0xd2d: 0x0899, 0xd2e: 0x08a1, 0xd2f: 0x08a9, -+ 0xd30: 0x08b1, 0xd31: 0x08b9, 0xd32: 0x08c1, 0xd33: 0x08c9, 0xd34: 0x0a1e, 0xd35: 0x0a3e, - 0xd36: 0x0a5e, 0xd37: 0x0a7e, 0xd38: 0x0a9e, 0xd39: 0x0abe, 0xd3a: 0x0ade, 0xd3b: 0x0afe, -- 0xd3c: 0x0b1e, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, -+ 0xd3c: 0x0b1e, 0xd3d: 0x08d2, 0xd3e: 0x08da, 0xd3f: 0x08e2, - // Block 0x35, offset 0xd40 -- 0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a, -- 0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, -+ 0xd40: 0x08ea, 0xd41: 0x08f2, 0xd42: 0x08fa, 0xd43: 0x0902, 0xd44: 0x090a, 0xd45: 0x0912, -+ 0xd46: 0x091a, 0xd47: 0x0922, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, - 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, - 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, - 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b3e, 0xd5d: 0x0b5e, -@@ -1203,17 +1346,17 @@ var idnaValues = [8192]uint16{ - 0xd64: 0x0c3e, 0xd65: 0x0c5e, 0xd66: 0x0c7e, 0xd67: 0x0c9e, 0xd68: 0x0cbe, 0xd69: 0x0cde, - 0xd6a: 0x0cfe, 0xd6b: 0x0d1e, 0xd6c: 0x0d3e, 0xd6d: 0x0d5e, 0xd6e: 0x0d7e, 0xd6f: 0x0d9e, - 0xd70: 0x0dbe, 0xd71: 0x0dde, 0xd72: 0x0dfe, 0xd73: 0x0e1e, 0xd74: 0x0e3e, 0xd75: 0x0e5e, -- 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199, -- 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259, -+ 0xd76: 0x0019, 0xd77: 0x02e9, 0xd78: 0x03d9, 0xd79: 0x02f1, 0xd7a: 0x02f9, 0xd7b: 0x03f1, -+ 0xd7c: 0x0309, 0xd7d: 0x00a9, 0xd7e: 0x0311, 0xd7f: 0x00b1, - // Block 0x36, offset 0xd80 -- 0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99, -- 0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089, -- 0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9, -- 0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249, -- 0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71, -- 0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9, -- 0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1, -- 0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, -+ 0xd80: 0x0319, 0xd81: 0x0101, 0xd82: 0x0321, 0xd83: 0x0329, 0xd84: 0x0051, 0xd85: 0x0339, -+ 0xd86: 0x0751, 0xd87: 0x00b9, 0xd88: 0x0089, 0xd89: 0x0341, 0xd8a: 0x0349, 0xd8b: 0x0391, -+ 0xd8c: 0x00c1, 0xd8d: 0x0109, 0xd8e: 0x00c9, 0xd8f: 0x04b1, 0xd90: 0x0019, 0xd91: 0x02e9, -+ 0xd92: 0x03d9, 0xd93: 0x02f1, 0xd94: 0x02f9, 0xd95: 0x03f1, 0xd96: 0x0309, 0xd97: 0x00a9, -+ 0xd98: 0x0311, 0xd99: 0x00b1, 0xd9a: 0x0319, 0xd9b: 0x0101, 0xd9c: 0x0321, 0xd9d: 0x0329, -+ 0xd9e: 0x0051, 0xd9f: 0x0339, 0xda0: 0x0751, 0xda1: 0x00b9, 0xda2: 0x0089, 0xda3: 0x0341, -+ 0xda4: 0x0349, 0xda5: 0x0391, 0xda6: 0x00c1, 0xda7: 0x0109, 0xda8: 0x00c9, 0xda9: 0x04b1, -+ 0xdaa: 0x06e1, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, - 0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018, - 0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, - 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, -@@ -1223,12 +1366,12 @@ var idnaValues = [8192]uint16{ - 0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008, - 0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008, - 0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008, -- 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ed5, -- 0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, -- 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9, -- 0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, -+ 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x0941, 0xde3: 0x0ed5, -+ 0xde4: 0x0949, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, -+ 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0359, 0xdee: 0x0441, 0xdef: 0x0351, -+ 0xdf0: 0x03d1, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, - 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, -- 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, -+ 0xdfc: 0x00b1, 0xdfd: 0x0391, 0xdfe: 0x0951, 0xdff: 0x0959, - // Block 0x38, offset 0xe00 - 0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008, - 0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008, -@@ -1254,7 +1397,7 @@ var idnaValues = [8192]uint16{ - 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040, - 0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040, - // Block 0x3a, offset 0xe80 -- 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, -+ 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x0961, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, - 0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018, - 0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018, - 0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018, -@@ -1290,17 +1433,17 @@ var idnaValues = [8192]uint16{ - 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0008, - 0xf3c: 0x0008, 0xf3d: 0x0008, 0xf3e: 0x0008, 0xf3f: 0x0008, - // Block 0x3d, offset 0xf40 -- 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32d5, 0xf45: 0x32f5, -+ 0xf40: 0x0b82, 0xf41: 0x0b8a, 0xf42: 0x0b92, 0xf43: 0x0b9a, 0xf44: 0x32d5, 0xf45: 0x32f5, - 0xf46: 0x3315, 0xf47: 0x3335, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018, -- 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x3355, 0xf51: 0x3761, -- 0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1, -- 0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881, -- 0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x3375, 0xf61: 0x3395, 0xf62: 0x33b5, 0xf63: 0x33d5, -+ 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x3355, 0xf51: 0x0ba1, -+ 0xf52: 0x0ba9, 0xf53: 0x0bb1, 0xf54: 0x0bb9, 0xf55: 0x0bc1, 0xf56: 0x0bc9, 0xf57: 0x0bd1, -+ 0xf58: 0x0bd9, 0xf59: 0x0be1, 0xf5a: 0x0be9, 0xf5b: 0x0bf1, 0xf5c: 0x0bf9, 0xf5d: 0x0c01, -+ 0xf5e: 0x0c09, 0xf5f: 0x0c11, 0xf60: 0x3375, 0xf61: 0x3395, 0xf62: 0x33b5, 0xf63: 0x33d5, - 0xf64: 0x33f5, 0xf65: 0x33f5, 0xf66: 0x3415, 0xf67: 0x3435, 0xf68: 0x3455, 0xf69: 0x3475, - 0xf6a: 0x3495, 0xf6b: 0x34b5, 0xf6c: 0x34d5, 0xf6d: 0x34f5, 0xf6e: 0x3515, 0xf6f: 0x3535, - 0xf70: 0x3555, 0xf71: 0x3575, 0xf72: 0x3595, 0xf73: 0x35b5, 0xf74: 0x35d5, 0xf75: 0x35f5, - 0xf76: 0x3615, 0xf77: 0x3635, 0xf78: 0x3655, 0xf79: 0x3675, 0xf7a: 0x3695, 0xf7b: 0x36b5, -- 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36d5, 0xf7f: 0x0018, -+ 0xf7c: 0x0c19, 0xf7d: 0x0c21, 0xf7e: 0x36d5, 0xf7f: 0x0018, - // Block 0x3e, offset 0xf80 - 0xf80: 0x36f5, 0xf81: 0x3715, 0xf82: 0x3735, 0xf83: 0x3755, 0xf84: 0x3775, 0xf85: 0x3795, - 0xf86: 0x37b5, 0xf87: 0x37d5, 0xf88: 0x37f5, 0xf89: 0x3815, 0xf8a: 0x3835, 0xf8b: 0x3855, -@@ -1310,13 +1453,13 @@ var idnaValues = [8192]uint16{ - 0xf9e: 0x3ab5, 0xf9f: 0x3ad5, 0xfa0: 0x3af5, 0xfa1: 0x3b15, 0xfa2: 0x3b35, 0xfa3: 0x3b55, - 0xfa4: 0x3b75, 0xfa5: 0x3b95, 0xfa6: 0x1295, 0xfa7: 0x3bb5, 0xfa8: 0x3bd5, 0xfa9: 0x3bf5, - 0xfaa: 0x3c15, 0xfab: 0x3c35, 0xfac: 0x3c55, 0xfad: 0x3c75, 0xfae: 0x23b5, 0xfaf: 0x3c95, -- 0xfb0: 0x3cb5, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999, -- 0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29, -- 0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89, -+ 0xfb0: 0x3cb5, 0xfb1: 0x0c29, 0xfb2: 0x0c31, 0xfb3: 0x0c39, 0xfb4: 0x0c41, 0xfb5: 0x0c49, -+ 0xfb6: 0x0c51, 0xfb7: 0x0c59, 0xfb8: 0x0c61, 0xfb9: 0x0c69, 0xfba: 0x0c71, 0xfbb: 0x0c79, -+ 0xfbc: 0x0c81, 0xfbd: 0x0c89, 0xfbe: 0x0c91, 0xfbf: 0x0c99, - // Block 0x3f, offset 0xfc0 -- 0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69, -- 0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69, -- 0xfcc: 0x3c99, 0xfcd: 0x3cd5, 0xfce: 0x3cb1, 0xfcf: 0x3cf5, 0xfd0: 0x3d15, 0xfd1: 0x3d2d, -+ 0xfc0: 0x0ca1, 0xfc1: 0x0ca9, 0xfc2: 0x0cb1, 0xfc3: 0x0cb9, 0xfc4: 0x0cc1, 0xfc5: 0x0cc9, -+ 0xfc6: 0x0cd1, 0xfc7: 0x0cd9, 0xfc8: 0x0ce1, 0xfc9: 0x0ce9, 0xfca: 0x0cf1, 0xfcb: 0x0cf9, -+ 0xfcc: 0x0d01, 0xfcd: 0x3cd5, 0xfce: 0x0d09, 0xfcf: 0x3cf5, 0xfd0: 0x3d15, 0xfd1: 0x3d2d, - 0xfd2: 0x3d45, 0xfd3: 0x3d5d, 0xfd4: 0x3d75, 0xfd5: 0x3d75, 0xfd6: 0x3d5d, 0xfd7: 0x3d8d, - 0xfd8: 0x07d5, 0xfd9: 0x3da5, 0xfda: 0x3dbd, 0xfdb: 0x3dd5, 0xfdc: 0x3ded, 0xfdd: 0x3e05, - 0xfde: 0x3e1d, 0xfdf: 0x3e35, 0xfe0: 0x3e4d, 0xfe1: 0x3e65, 0xfe2: 0x3e7d, 0xfe3: 0x3e95, -@@ -1324,769 +1467,769 @@ var idnaValues = [8192]uint16{ - 0xfea: 0x3ef5, 0xfeb: 0x3f0d, 0xfec: 0x3f25, 0xfed: 0x3f3d, 0xfee: 0x3f55, 0xfef: 0x3f55, - 0xff0: 0x3f6d, 0xff1: 0x3f6d, 0xff2: 0x3f6d, 0xff3: 0x3f85, 0xff4: 0x3f9d, 0xff5: 0x3fb5, - 0xff6: 0x3fcd, 0xff7: 0x3fb5, 0xff8: 0x3fe5, 0xff9: 0x3ffd, 0xffa: 0x3f85, 0xffb: 0x4015, -- 0xffc: 0x402d, 0xffd: 0x402d, 0xffe: 0x402d, 0xfff: 0x3cc9, -+ 0xffc: 0x402d, 0xffd: 0x402d, 0xffe: 0x402d, 0xfff: 0x0d11, - // Block 0x40, offset 0x1000 -- 0x1000: 0x3d01, 0x1001: 0x3d69, 0x1002: 0x3dd1, 0x1003: 0x3e39, 0x1004: 0x3e89, 0x1005: 0x3ef1, -- 0x1006: 0x3f41, 0x1007: 0x3f91, 0x1008: 0x4011, 0x1009: 0x4079, 0x100a: 0x40c9, 0x100b: 0x4119, -- 0x100c: 0x4169, 0x100d: 0x41d1, 0x100e: 0x4239, 0x100f: 0x4289, 0x1010: 0x42d9, 0x1011: 0x4311, -- 0x1012: 0x4361, 0x1013: 0x43c9, 0x1014: 0x4431, 0x1015: 0x4469, 0x1016: 0x44e9, 0x1017: 0x4581, -- 0x1018: 0x4601, 0x1019: 0x4651, 0x101a: 0x46d1, 0x101b: 0x4751, 0x101c: 0x47b9, 0x101d: 0x4809, -- 0x101e: 0x4859, 0x101f: 0x48a9, 0x1020: 0x4911, 0x1021: 0x4991, 0x1022: 0x49f9, 0x1023: 0x4a49, -- 0x1024: 0x4a99, 0x1025: 0x4ae9, 0x1026: 0x4b21, 0x1027: 0x4b59, 0x1028: 0x4b91, 0x1029: 0x4bc9, -- 0x102a: 0x4c19, 0x102b: 0x4c69, 0x102c: 0x4ce9, 0x102d: 0x4d39, 0x102e: 0x4da1, 0x102f: 0x4e21, -- 0x1030: 0x4e71, 0x1031: 0x4ea9, 0x1032: 0x4ee1, 0x1033: 0x4f61, 0x1034: 0x4fc9, 0x1035: 0x5049, -- 0x1036: 0x5099, 0x1037: 0x5119, 0x1038: 0x5151, 0x1039: 0x51a1, 0x103a: 0x51f1, 0x103b: 0x5241, -- 0x103c: 0x5291, 0x103d: 0x52e1, 0x103e: 0x5349, 0x103f: 0x5399, -+ 0x1000: 0x10f9, 0x1001: 0x1101, 0x1002: 0x40a5, 0x1003: 0x1109, 0x1004: 0x1111, 0x1005: 0x1119, -+ 0x1006: 0x1121, 0x1007: 0x1129, 0x1008: 0x40c5, 0x1009: 0x1131, 0x100a: 0x1139, 0x100b: 0x1141, -+ 0x100c: 0x40e5, 0x100d: 0x40e5, 0x100e: 0x1149, 0x100f: 0x1151, 0x1010: 0x1159, 0x1011: 0x4105, -+ 0x1012: 0x4125, 0x1013: 0x4145, 0x1014: 0x4165, 0x1015: 0x4185, 0x1016: 0x1161, 0x1017: 0x1169, -+ 0x1018: 0x1171, 0x1019: 0x1179, 0x101a: 0x1181, 0x101b: 0x41a5, 0x101c: 0x1189, 0x101d: 0x1191, -+ 0x101e: 0x1199, 0x101f: 0x41c5, 0x1020: 0x41e5, 0x1021: 0x11a1, 0x1022: 0x4205, 0x1023: 0x4225, -+ 0x1024: 0x4245, 0x1025: 0x11a9, 0x1026: 0x4265, 0x1027: 0x11b1, 0x1028: 0x11b9, 0x1029: 0x10f9, -+ 0x102a: 0x4285, 0x102b: 0x42a5, 0x102c: 0x42c5, 0x102d: 0x42e5, 0x102e: 0x11c1, 0x102f: 0x11c9, -+ 0x1030: 0x11d1, 0x1031: 0x11d9, 0x1032: 0x4305, 0x1033: 0x11e1, 0x1034: 0x11e9, 0x1035: 0x11f1, -+ 0x1036: 0x4325, 0x1037: 0x11f9, 0x1038: 0x1201, 0x1039: 0x11f9, 0x103a: 0x1209, 0x103b: 0x1211, -+ 0x103c: 0x4345, 0x103d: 0x1219, 0x103e: 0x1221, 0x103f: 0x1219, - // Block 0x41, offset 0x1040 -- 0x1040: 0x53d1, 0x1041: 0x5421, 0x1042: 0x5471, 0x1043: 0x54c1, 0x1044: 0x5529, 0x1045: 0x5579, -- 0x1046: 0x55c9, 0x1047: 0x5619, 0x1048: 0x5699, 0x1049: 0x5701, 0x104a: 0x5739, 0x104b: 0x57b9, -- 0x104c: 0x57f1, 0x104d: 0x5859, 0x104e: 0x58c1, 0x104f: 0x5911, 0x1050: 0x5961, 0x1051: 0x59b1, -- 0x1052: 0x5a19, 0x1053: 0x5a51, 0x1054: 0x5aa1, 0x1055: 0x5b09, 0x1056: 0x5b41, 0x1057: 0x5bc1, -- 0x1058: 0x5c11, 0x1059: 0x5c39, 0x105a: 0x5c61, 0x105b: 0x5c89, 0x105c: 0x5cb1, 0x105d: 0x5cd9, -- 0x105e: 0x5d01, 0x105f: 0x5d29, 0x1060: 0x5d51, 0x1061: 0x5d79, 0x1062: 0x5da1, 0x1063: 0x5dd1, -- 0x1064: 0x5e01, 0x1065: 0x5e31, 0x1066: 0x5e61, 0x1067: 0x5e91, 0x1068: 0x5ec1, 0x1069: 0x5ef1, -- 0x106a: 0x5f21, 0x106b: 0x5f51, 0x106c: 0x5f81, 0x106d: 0x5fb1, 0x106e: 0x5fe1, 0x106f: 0x6011, -- 0x1070: 0x6041, 0x1071: 0x4045, 0x1072: 0x6071, 0x1073: 0x6089, 0x1074: 0x4065, 0x1075: 0x60a1, -- 0x1076: 0x60b9, 0x1077: 0x60d1, 0x1078: 0x4085, 0x1079: 0x4085, 0x107a: 0x60e9, 0x107b: 0x6101, -- 0x107c: 0x6139, 0x107d: 0x6171, 0x107e: 0x61a9, 0x107f: 0x61e1, -+ 0x1040: 0x4365, 0x1041: 0x4385, 0x1042: 0x0040, 0x1043: 0x1229, 0x1044: 0x1231, 0x1045: 0x1239, -+ 0x1046: 0x1241, 0x1047: 0x0040, 0x1048: 0x1249, 0x1049: 0x1251, 0x104a: 0x1259, 0x104b: 0x1261, -+ 0x104c: 0x1269, 0x104d: 0x1271, 0x104e: 0x1199, 0x104f: 0x1279, 0x1050: 0x1281, 0x1051: 0x1289, -+ 0x1052: 0x43a5, 0x1053: 0x1291, 0x1054: 0x1121, 0x1055: 0x43c5, 0x1056: 0x43e5, 0x1057: 0x1299, -+ 0x1058: 0x0040, 0x1059: 0x4405, 0x105a: 0x12a1, 0x105b: 0x12a9, 0x105c: 0x12b1, 0x105d: 0x12b9, -+ 0x105e: 0x12c1, 0x105f: 0x12c9, 0x1060: 0x12d1, 0x1061: 0x12d9, 0x1062: 0x12e1, 0x1063: 0x12e9, -+ 0x1064: 0x12f1, 0x1065: 0x12f9, 0x1066: 0x1301, 0x1067: 0x1309, 0x1068: 0x1311, 0x1069: 0x1319, -+ 0x106a: 0x1321, 0x106b: 0x1329, 0x106c: 0x1331, 0x106d: 0x1339, 0x106e: 0x1341, 0x106f: 0x1349, -+ 0x1070: 0x1351, 0x1071: 0x1359, 0x1072: 0x1361, 0x1073: 0x1369, 0x1074: 0x1371, 0x1075: 0x1379, -+ 0x1076: 0x1381, 0x1077: 0x1389, 0x1078: 0x1391, 0x1079: 0x1399, 0x107a: 0x13a1, 0x107b: 0x13a9, -+ 0x107c: 0x13b1, 0x107d: 0x13b9, 0x107e: 0x13c1, 0x107f: 0x4425, - // Block 0x42, offset 0x1080 -- 0x1080: 0x6249, 0x1081: 0x6261, 0x1082: 0x40a5, 0x1083: 0x6279, 0x1084: 0x6291, 0x1085: 0x62a9, -- 0x1086: 0x62c1, 0x1087: 0x62d9, 0x1088: 0x40c5, 0x1089: 0x62f1, 0x108a: 0x6319, 0x108b: 0x6331, -- 0x108c: 0x40e5, 0x108d: 0x40e5, 0x108e: 0x6349, 0x108f: 0x6361, 0x1090: 0x6379, 0x1091: 0x4105, -- 0x1092: 0x4125, 0x1093: 0x4145, 0x1094: 0x4165, 0x1095: 0x4185, 0x1096: 0x6391, 0x1097: 0x63a9, -- 0x1098: 0x63c1, 0x1099: 0x63d9, 0x109a: 0x63f1, 0x109b: 0x41a5, 0x109c: 0x6409, 0x109d: 0x6421, -- 0x109e: 0x6439, 0x109f: 0x41c5, 0x10a0: 0x41e5, 0x10a1: 0x6451, 0x10a2: 0x4205, 0x10a3: 0x4225, -- 0x10a4: 0x4245, 0x10a5: 0x6469, 0x10a6: 0x4265, 0x10a7: 0x6481, 0x10a8: 0x64b1, 0x10a9: 0x6249, -- 0x10aa: 0x4285, 0x10ab: 0x42a5, 0x10ac: 0x42c5, 0x10ad: 0x42e5, 0x10ae: 0x64e9, 0x10af: 0x6529, -- 0x10b0: 0x6571, 0x10b1: 0x6589, 0x10b2: 0x4305, 0x10b3: 0x65a1, 0x10b4: 0x65b9, 0x10b5: 0x65d1, -- 0x10b6: 0x4325, 0x10b7: 0x65e9, 0x10b8: 0x6601, 0x10b9: 0x65e9, 0x10ba: 0x6619, 0x10bb: 0x6631, -- 0x10bc: 0x4345, 0x10bd: 0x6649, 0x10be: 0x6661, 0x10bf: 0x6649, -+ 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008, -+ 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008, -+ 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008, -+ 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008, -+ 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008, -+ 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008, -+ 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008, -+ 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x3308, -+ 0x10b0: 0x3318, 0x10b1: 0x3318, 0x10b2: 0x3318, 0x10b3: 0x0018, 0x10b4: 0x3308, 0x10b5: 0x3308, -+ 0x10b6: 0x3308, 0x10b7: 0x3308, 0x10b8: 0x3308, 0x10b9: 0x3308, 0x10ba: 0x3308, 0x10bb: 0x3308, -+ 0x10bc: 0x3308, 0x10bd: 0x3308, 0x10be: 0x0018, 0x10bf: 0x0008, - // Block 0x43, offset 0x10c0 -- 0x10c0: 0x4365, 0x10c1: 0x4385, 0x10c2: 0x0040, 0x10c3: 0x6679, 0x10c4: 0x6691, 0x10c5: 0x66a9, -- 0x10c6: 0x66c1, 0x10c7: 0x0040, 0x10c8: 0x66f9, 0x10c9: 0x6711, 0x10ca: 0x6729, 0x10cb: 0x6741, -- 0x10cc: 0x6759, 0x10cd: 0x6771, 0x10ce: 0x6439, 0x10cf: 0x6789, 0x10d0: 0x67a1, 0x10d1: 0x67b9, -- 0x10d2: 0x43a5, 0x10d3: 0x67d1, 0x10d4: 0x62c1, 0x10d5: 0x43c5, 0x10d6: 0x43e5, 0x10d7: 0x67e9, -- 0x10d8: 0x0040, 0x10d9: 0x4405, 0x10da: 0x6801, 0x10db: 0x6819, 0x10dc: 0x6831, 0x10dd: 0x6849, -- 0x10de: 0x6861, 0x10df: 0x6891, 0x10e0: 0x68c1, 0x10e1: 0x68e9, 0x10e2: 0x6911, 0x10e3: 0x6939, -- 0x10e4: 0x6961, 0x10e5: 0x6989, 0x10e6: 0x69b1, 0x10e7: 0x69d9, 0x10e8: 0x6a01, 0x10e9: 0x6a29, -- 0x10ea: 0x6a59, 0x10eb: 0x6a89, 0x10ec: 0x6ab9, 0x10ed: 0x6ae9, 0x10ee: 0x6b19, 0x10ef: 0x6b49, -- 0x10f0: 0x6b79, 0x10f1: 0x6ba9, 0x10f2: 0x6bd9, 0x10f3: 0x6c09, 0x10f4: 0x6c39, 0x10f5: 0x6c69, -- 0x10f6: 0x6c99, 0x10f7: 0x6cc9, 0x10f8: 0x6cf9, 0x10f9: 0x6d29, 0x10fa: 0x6d59, 0x10fb: 0x6d89, -- 0x10fc: 0x6db9, 0x10fd: 0x6de9, 0x10fe: 0x6e19, 0x10ff: 0x4425, -+ 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, -+ 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, -+ 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, -+ 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, -+ 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x02d1, 0x10dd: 0x13c9, -+ 0x10de: 0x3308, 0x10df: 0x3308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008, -+ 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008, -+ 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008, -+ 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008, -+ 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008, -+ 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008, - // Block 0x44, offset 0x1100 -- 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, -- 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, -- 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, -- 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, -- 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008, -- 0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008, -+ 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018, -+ 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018, -+ 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018, -+ 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008, -+ 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008, -+ 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008, - 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, -- 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308, -- 0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308, -- 0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308, -- 0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008, -+ 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008, -+ 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008, -+ 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008, -+ 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008, - // Block 0x45, offset 0x1140 - 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, - 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, - 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, - 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, -- 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e49, -- 0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008, -- 0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008, -- 0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008, -- 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, -- 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008, -- 0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008, -+ 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008, -+ 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008, -+ 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, -+ 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, -+ 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, -+ 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d, -+ 0x117c: 0x0008, 0x117d: 0x4445, 0x117e: 0xe00d, 0x117f: 0x0008, - // Block 0x46, offset 0x1180 -- 0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018, -- 0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018, -- 0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018, -- 0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008, -- 0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008, -- 0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008, -+ 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, -+ 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d, -+ 0x118c: 0x0008, 0x118d: 0x0409, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, -+ 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, -+ 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, -+ 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, - 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, -- 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, -- 0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008, -+ 0x11aa: 0x13d1, 0x11ab: 0x0371, 0x11ac: 0x0401, 0x11ad: 0x13d9, 0x11ae: 0x0421, 0x11af: 0x0008, -+ 0x11b0: 0x13e1, 0x11b1: 0x13e9, 0x11b2: 0x0429, 0x11b3: 0x4465, 0x11b4: 0xe00d, 0x11b5: 0x0008, - 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008, - 0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008, - // Block 0x47, offset 0x11c0 -- 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, -- 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008, -- 0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, -- 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, -- 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, -- 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, -- 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, -- 0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008, -- 0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008, -- 0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d, -- 0x11fc: 0x0008, 0x11fd: 0x4445, 0x11fe: 0xe00d, 0x11ff: 0x0008, -+ 0x11c0: 0x650d, 0x11c1: 0x652d, 0x11c2: 0x654d, 0x11c3: 0x656d, 0x11c4: 0x658d, 0x11c5: 0x65ad, -+ 0x11c6: 0x65cd, 0x11c7: 0x65ed, 0x11c8: 0x660d, 0x11c9: 0x662d, 0x11ca: 0x664d, 0x11cb: 0x666d, -+ 0x11cc: 0x668d, 0x11cd: 0x66ad, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x66cd, 0x11d1: 0x0008, -+ 0x11d2: 0x66ed, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x670d, 0x11d6: 0x672d, 0x11d7: 0x674d, -+ 0x11d8: 0x676d, 0x11d9: 0x678d, 0x11da: 0x67ad, 0x11db: 0x67cd, 0x11dc: 0x67ed, 0x11dd: 0x680d, -+ 0x11de: 0x682d, 0x11df: 0x0008, 0x11e0: 0x684d, 0x11e1: 0x0008, 0x11e2: 0x686d, 0x11e3: 0x0008, -+ 0x11e4: 0x0008, 0x11e5: 0x688d, 0x11e6: 0x68ad, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008, -+ 0x11ea: 0x68cd, 0x11eb: 0x68ed, 0x11ec: 0x690d, 0x11ed: 0x692d, 0x11ee: 0x694d, 0x11ef: 0x696d, -+ 0x11f0: 0x698d, 0x11f1: 0x69ad, 0x11f2: 0x69cd, 0x11f3: 0x69ed, 0x11f4: 0x6a0d, 0x11f5: 0x6a2d, -+ 0x11f6: 0x6a4d, 0x11f7: 0x6a6d, 0x11f8: 0x6a8d, 0x11f9: 0x6aad, 0x11fa: 0x6acd, 0x11fb: 0x6aed, -+ 0x11fc: 0x6b0d, 0x11fd: 0x6b2d, 0x11fe: 0x6b4d, 0x11ff: 0x6b6d, - // Block 0x48, offset 0x1200 -- 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008, -- 0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d, -- 0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008, -- 0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, -- 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008, -- 0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008, -- 0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008, -- 0x122a: 0x6e61, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e79, 0x122e: 0x1221, 0x122f: 0x0008, -- 0x1230: 0x6e91, 0x1231: 0x6ea9, 0x1232: 0x1239, 0x1233: 0x4465, 0x1234: 0xe00d, 0x1235: 0x0008, -- 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0xe00d, 0x1239: 0x0008, 0x123a: 0xe00d, 0x123b: 0x0008, -- 0x123c: 0xe00d, 0x123d: 0x0008, 0x123e: 0xe00d, 0x123f: 0x0008, -+ 0x1200: 0x7acd, 0x1201: 0x7aed, 0x1202: 0x7b0d, 0x1203: 0x7b2d, 0x1204: 0x7b4d, 0x1205: 0x7b6d, -+ 0x1206: 0x7b8d, 0x1207: 0x7bad, 0x1208: 0x7bcd, 0x1209: 0x7bed, 0x120a: 0x7c0d, 0x120b: 0x7c2d, -+ 0x120c: 0x7c4d, 0x120d: 0x7c6d, 0x120e: 0x7c8d, 0x120f: 0x1409, 0x1210: 0x1411, 0x1211: 0x1419, -+ 0x1212: 0x7cad, 0x1213: 0x7ccd, 0x1214: 0x7ced, 0x1215: 0x1421, 0x1216: 0x1429, 0x1217: 0x1431, -+ 0x1218: 0x7d0d, 0x1219: 0x7d2d, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, -+ 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, -+ 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, -+ 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, -+ 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040, -+ 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, -+ 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, - // Block 0x49, offset 0x1240 -- 0x1240: 0x650d, 0x1241: 0x652d, 0x1242: 0x654d, 0x1243: 0x656d, 0x1244: 0x658d, 0x1245: 0x65ad, -- 0x1246: 0x65cd, 0x1247: 0x65ed, 0x1248: 0x660d, 0x1249: 0x662d, 0x124a: 0x664d, 0x124b: 0x666d, -- 0x124c: 0x668d, 0x124d: 0x66ad, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x66cd, 0x1251: 0x0008, -- 0x1252: 0x66ed, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x670d, 0x1256: 0x672d, 0x1257: 0x674d, -- 0x1258: 0x676d, 0x1259: 0x678d, 0x125a: 0x67ad, 0x125b: 0x67cd, 0x125c: 0x67ed, 0x125d: 0x680d, -- 0x125e: 0x682d, 0x125f: 0x0008, 0x1260: 0x684d, 0x1261: 0x0008, 0x1262: 0x686d, 0x1263: 0x0008, -- 0x1264: 0x0008, 0x1265: 0x688d, 0x1266: 0x68ad, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, -- 0x126a: 0x68cd, 0x126b: 0x68ed, 0x126c: 0x690d, 0x126d: 0x692d, 0x126e: 0x694d, 0x126f: 0x696d, -- 0x1270: 0x698d, 0x1271: 0x69ad, 0x1272: 0x69cd, 0x1273: 0x69ed, 0x1274: 0x6a0d, 0x1275: 0x6a2d, -- 0x1276: 0x6a4d, 0x1277: 0x6a6d, 0x1278: 0x6a8d, 0x1279: 0x6aad, 0x127a: 0x6acd, 0x127b: 0x6aed, -- 0x127c: 0x6b0d, 0x127d: 0x6b2d, 0x127e: 0x6b4d, 0x127f: 0x6b6d, -+ 0x1240: 0x1439, 0x1241: 0x1441, 0x1242: 0x1449, 0x1243: 0x7d4d, 0x1244: 0x7d6d, 0x1245: 0x1451, -+ 0x1246: 0x1451, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040, -+ 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040, -+ 0x1252: 0x0040, 0x1253: 0x1459, 0x1254: 0x1461, 0x1255: 0x1469, 0x1256: 0x1471, 0x1257: 0x1479, -+ 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x1481, -+ 0x125e: 0x3308, 0x125f: 0x1489, 0x1260: 0x1491, 0x1261: 0x0779, 0x1262: 0x0791, 0x1263: 0x1499, -+ 0x1264: 0x14a1, 0x1265: 0x14a9, 0x1266: 0x14b1, 0x1267: 0x14b9, 0x1268: 0x14c1, 0x1269: 0x071a, -+ 0x126a: 0x14c9, 0x126b: 0x14d1, 0x126c: 0x14d9, 0x126d: 0x14e1, 0x126e: 0x14e9, 0x126f: 0x14f1, -+ 0x1270: 0x14f9, 0x1271: 0x1501, 0x1272: 0x1509, 0x1273: 0x1511, 0x1274: 0x1519, 0x1275: 0x1521, -+ 0x1276: 0x1529, 0x1277: 0x0040, 0x1278: 0x1531, 0x1279: 0x1539, 0x127a: 0x1541, 0x127b: 0x1549, -+ 0x127c: 0x1551, 0x127d: 0x0040, 0x127e: 0x1559, 0x127f: 0x0040, - // Block 0x4a, offset 0x1280 -- 0x1280: 0x7acd, 0x1281: 0x7aed, 0x1282: 0x7b0d, 0x1283: 0x7b2d, 0x1284: 0x7b4d, 0x1285: 0x7b6d, -- 0x1286: 0x7b8d, 0x1287: 0x7bad, 0x1288: 0x7bcd, 0x1289: 0x7bed, 0x128a: 0x7c0d, 0x128b: 0x7c2d, -- 0x128c: 0x7c4d, 0x128d: 0x7c6d, 0x128e: 0x7c8d, 0x128f: 0x6f19, 0x1290: 0x6f41, 0x1291: 0x6f69, -- 0x1292: 0x7cad, 0x1293: 0x7ccd, 0x1294: 0x7ced, 0x1295: 0x6f91, 0x1296: 0x6fb9, 0x1297: 0x6fe1, -- 0x1298: 0x7d0d, 0x1299: 0x7d2d, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, -- 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, -- 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, -- 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, -- 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, -- 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, -- 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, -+ 0x1280: 0x1561, 0x1281: 0x1569, 0x1282: 0x0040, 0x1283: 0x1571, 0x1284: 0x1579, 0x1285: 0x0040, -+ 0x1286: 0x1581, 0x1287: 0x1589, 0x1288: 0x1591, 0x1289: 0x1599, 0x128a: 0x15a1, 0x128b: 0x15a9, -+ 0x128c: 0x15b1, 0x128d: 0x15b9, 0x128e: 0x15c1, 0x128f: 0x15c9, 0x1290: 0x15d1, 0x1291: 0x15d1, -+ 0x1292: 0x15d9, 0x1293: 0x15d9, 0x1294: 0x15d9, 0x1295: 0x15d9, 0x1296: 0x15e1, 0x1297: 0x15e1, -+ 0x1298: 0x15e1, 0x1299: 0x15e1, 0x129a: 0x15e9, 0x129b: 0x15e9, 0x129c: 0x15e9, 0x129d: 0x15e9, -+ 0x129e: 0x15f1, 0x129f: 0x15f1, 0x12a0: 0x15f1, 0x12a1: 0x15f1, 0x12a2: 0x15f9, 0x12a3: 0x15f9, -+ 0x12a4: 0x15f9, 0x12a5: 0x15f9, 0x12a6: 0x1601, 0x12a7: 0x1601, 0x12a8: 0x1601, 0x12a9: 0x1601, -+ 0x12aa: 0x1609, 0x12ab: 0x1609, 0x12ac: 0x1609, 0x12ad: 0x1609, 0x12ae: 0x1611, 0x12af: 0x1611, -+ 0x12b0: 0x1611, 0x12b1: 0x1611, 0x12b2: 0x1619, 0x12b3: 0x1619, 0x12b4: 0x1619, 0x12b5: 0x1619, -+ 0x12b6: 0x1621, 0x12b7: 0x1621, 0x12b8: 0x1621, 0x12b9: 0x1621, 0x12ba: 0x1629, 0x12bb: 0x1629, -+ 0x12bc: 0x1629, 0x12bd: 0x1629, 0x12be: 0x1631, 0x12bf: 0x1631, - // Block 0x4b, offset 0x12c0 -- 0x12c0: 0x7009, 0x12c1: 0x7021, 0x12c2: 0x7039, 0x12c3: 0x7d4d, 0x12c4: 0x7d6d, 0x12c5: 0x7051, -- 0x12c6: 0x7051, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, -- 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, -- 0x12d2: 0x0040, 0x12d3: 0x7069, 0x12d4: 0x7091, 0x12d5: 0x70b9, 0x12d6: 0x70e1, 0x12d7: 0x7109, -- 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x7131, -- 0x12de: 0x3308, 0x12df: 0x7159, 0x12e0: 0x7181, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7199, -- 0x12e4: 0x71b1, 0x12e5: 0x71c9, 0x12e6: 0x71e1, 0x12e7: 0x71f9, 0x12e8: 0x7211, 0x12e9: 0x1fb2, -- 0x12ea: 0x7229, 0x12eb: 0x7251, 0x12ec: 0x7279, 0x12ed: 0x72b1, 0x12ee: 0x72e9, 0x12ef: 0x7311, -- 0x12f0: 0x7339, 0x12f1: 0x7361, 0x12f2: 0x7389, 0x12f3: 0x73b1, 0x12f4: 0x73d9, 0x12f5: 0x7401, -- 0x12f6: 0x7429, 0x12f7: 0x0040, 0x12f8: 0x7451, 0x12f9: 0x7479, 0x12fa: 0x74a1, 0x12fb: 0x74c9, -- 0x12fc: 0x74f1, 0x12fd: 0x0040, 0x12fe: 0x7519, 0x12ff: 0x0040, -+ 0x12c0: 0x1631, 0x12c1: 0x1631, 0x12c2: 0x1639, 0x12c3: 0x1639, 0x12c4: 0x1641, 0x12c5: 0x1641, -+ 0x12c6: 0x1649, 0x12c7: 0x1649, 0x12c8: 0x1651, 0x12c9: 0x1651, 0x12ca: 0x1659, 0x12cb: 0x1659, -+ 0x12cc: 0x1661, 0x12cd: 0x1661, 0x12ce: 0x1669, 0x12cf: 0x1669, 0x12d0: 0x1669, 0x12d1: 0x1669, -+ 0x12d2: 0x1671, 0x12d3: 0x1671, 0x12d4: 0x1671, 0x12d5: 0x1671, 0x12d6: 0x1679, 0x12d7: 0x1679, -+ 0x12d8: 0x1679, 0x12d9: 0x1679, 0x12da: 0x1681, 0x12db: 0x1681, 0x12dc: 0x1681, 0x12dd: 0x1681, -+ 0x12de: 0x1689, 0x12df: 0x1689, 0x12e0: 0x1691, 0x12e1: 0x1691, 0x12e2: 0x1691, 0x12e3: 0x1691, -+ 0x12e4: 0x1699, 0x12e5: 0x1699, 0x12e6: 0x16a1, 0x12e7: 0x16a1, 0x12e8: 0x16a1, 0x12e9: 0x16a1, -+ 0x12ea: 0x16a9, 0x12eb: 0x16a9, 0x12ec: 0x16a9, 0x12ed: 0x16a9, 0x12ee: 0x16b1, 0x12ef: 0x16b1, -+ 0x12f0: 0x16b9, 0x12f1: 0x16b9, 0x12f2: 0x0818, 0x12f3: 0x0818, 0x12f4: 0x0818, 0x12f5: 0x0818, -+ 0x12f6: 0x0818, 0x12f7: 0x0818, 0x12f8: 0x0818, 0x12f9: 0x0818, 0x12fa: 0x0818, 0x12fb: 0x0818, -+ 0x12fc: 0x0818, 0x12fd: 0x0818, 0x12fe: 0x0818, 0x12ff: 0x0818, - // Block 0x4c, offset 0x1300 -- 0x1300: 0x7541, 0x1301: 0x7569, 0x1302: 0x0040, 0x1303: 0x7591, 0x1304: 0x75b9, 0x1305: 0x0040, -- 0x1306: 0x75e1, 0x1307: 0x7609, 0x1308: 0x7631, 0x1309: 0x7659, 0x130a: 0x7681, 0x130b: 0x76a9, -- 0x130c: 0x76d1, 0x130d: 0x76f9, 0x130e: 0x7721, 0x130f: 0x7749, 0x1310: 0x7771, 0x1311: 0x7771, -- 0x1312: 0x7789, 0x1313: 0x7789, 0x1314: 0x7789, 0x1315: 0x7789, 0x1316: 0x77a1, 0x1317: 0x77a1, -- 0x1318: 0x77a1, 0x1319: 0x77a1, 0x131a: 0x77b9, 0x131b: 0x77b9, 0x131c: 0x77b9, 0x131d: 0x77b9, -- 0x131e: 0x77d1, 0x131f: 0x77d1, 0x1320: 0x77d1, 0x1321: 0x77d1, 0x1322: 0x77e9, 0x1323: 0x77e9, -- 0x1324: 0x77e9, 0x1325: 0x77e9, 0x1326: 0x7801, 0x1327: 0x7801, 0x1328: 0x7801, 0x1329: 0x7801, -- 0x132a: 0x7819, 0x132b: 0x7819, 0x132c: 0x7819, 0x132d: 0x7819, 0x132e: 0x7831, 0x132f: 0x7831, -- 0x1330: 0x7831, 0x1331: 0x7831, 0x1332: 0x7849, 0x1333: 0x7849, 0x1334: 0x7849, 0x1335: 0x7849, -- 0x1336: 0x7861, 0x1337: 0x7861, 0x1338: 0x7861, 0x1339: 0x7861, 0x133a: 0x7879, 0x133b: 0x7879, -- 0x133c: 0x7879, 0x133d: 0x7879, 0x133e: 0x7891, 0x133f: 0x7891, -+ 0x1300: 0x0818, 0x1301: 0x0818, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040, -+ 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040, -+ 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040, -+ 0x1312: 0x0040, 0x1313: 0x16c1, 0x1314: 0x16c1, 0x1315: 0x16c1, 0x1316: 0x16c1, 0x1317: 0x16c9, -+ 0x1318: 0x16c9, 0x1319: 0x16d1, 0x131a: 0x16d1, 0x131b: 0x16d9, 0x131c: 0x16d9, 0x131d: 0x0149, -+ 0x131e: 0x16e1, 0x131f: 0x16e1, 0x1320: 0x16e9, 0x1321: 0x16e9, 0x1322: 0x16f1, 0x1323: 0x16f1, -+ 0x1324: 0x16f9, 0x1325: 0x16f9, 0x1326: 0x16f9, 0x1327: 0x16f9, 0x1328: 0x1701, 0x1329: 0x1701, -+ 0x132a: 0x1709, 0x132b: 0x1709, 0x132c: 0x1711, 0x132d: 0x1711, 0x132e: 0x1719, 0x132f: 0x1719, -+ 0x1330: 0x1721, 0x1331: 0x1721, 0x1332: 0x1729, 0x1333: 0x1729, 0x1334: 0x1731, 0x1335: 0x1731, -+ 0x1336: 0x1739, 0x1337: 0x1739, 0x1338: 0x1739, 0x1339: 0x1741, 0x133a: 0x1741, 0x133b: 0x1741, -+ 0x133c: 0x1749, 0x133d: 0x1749, 0x133e: 0x1749, 0x133f: 0x1749, - // Block 0x4d, offset 0x1340 -- 0x1340: 0x7891, 0x1341: 0x7891, 0x1342: 0x78a9, 0x1343: 0x78a9, 0x1344: 0x78c1, 0x1345: 0x78c1, -- 0x1346: 0x78d9, 0x1347: 0x78d9, 0x1348: 0x78f1, 0x1349: 0x78f1, 0x134a: 0x7909, 0x134b: 0x7909, -- 0x134c: 0x7921, 0x134d: 0x7921, 0x134e: 0x7939, 0x134f: 0x7939, 0x1350: 0x7939, 0x1351: 0x7939, -- 0x1352: 0x7951, 0x1353: 0x7951, 0x1354: 0x7951, 0x1355: 0x7951, 0x1356: 0x7969, 0x1357: 0x7969, -- 0x1358: 0x7969, 0x1359: 0x7969, 0x135a: 0x7981, 0x135b: 0x7981, 0x135c: 0x7981, 0x135d: 0x7981, -- 0x135e: 0x7999, 0x135f: 0x7999, 0x1360: 0x79b1, 0x1361: 0x79b1, 0x1362: 0x79b1, 0x1363: 0x79b1, -- 0x1364: 0x79c9, 0x1365: 0x79c9, 0x1366: 0x79e1, 0x1367: 0x79e1, 0x1368: 0x79e1, 0x1369: 0x79e1, -- 0x136a: 0x79f9, 0x136b: 0x79f9, 0x136c: 0x79f9, 0x136d: 0x79f9, 0x136e: 0x7a11, 0x136f: 0x7a11, -- 0x1370: 0x7a29, 0x1371: 0x7a29, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, -- 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, -- 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, -+ 0x1340: 0x1949, 0x1341: 0x1951, 0x1342: 0x1959, 0x1343: 0x1961, 0x1344: 0x1969, 0x1345: 0x1971, -+ 0x1346: 0x1979, 0x1347: 0x1981, 0x1348: 0x1989, 0x1349: 0x1991, 0x134a: 0x1999, 0x134b: 0x19a1, -+ 0x134c: 0x19a9, 0x134d: 0x19b1, 0x134e: 0x19b9, 0x134f: 0x19c1, 0x1350: 0x19c9, 0x1351: 0x19d1, -+ 0x1352: 0x19d9, 0x1353: 0x19e1, 0x1354: 0x19e9, 0x1355: 0x19f1, 0x1356: 0x19f9, 0x1357: 0x1a01, -+ 0x1358: 0x1a09, 0x1359: 0x1a11, 0x135a: 0x1a19, 0x135b: 0x1a21, 0x135c: 0x1a29, 0x135d: 0x1a31, -+ 0x135e: 0x1a3a, 0x135f: 0x1a42, 0x1360: 0x1a4a, 0x1361: 0x1a52, 0x1362: 0x1a5a, 0x1363: 0x1a62, -+ 0x1364: 0x1a69, 0x1365: 0x1a71, 0x1366: 0x1761, 0x1367: 0x1a79, 0x1368: 0x1741, 0x1369: 0x1769, -+ 0x136a: 0x1a81, 0x136b: 0x1a89, 0x136c: 0x1789, 0x136d: 0x1a91, 0x136e: 0x1791, 0x136f: 0x1799, -+ 0x1370: 0x1a99, 0x1371: 0x1aa1, 0x1372: 0x17b9, 0x1373: 0x1aa9, 0x1374: 0x17c1, 0x1375: 0x17c9, -+ 0x1376: 0x1ab1, 0x1377: 0x1ab9, 0x1378: 0x17d9, 0x1379: 0x1ac1, 0x137a: 0x17e1, 0x137b: 0x17e9, -+ 0x137c: 0x18d1, 0x137d: 0x18d9, 0x137e: 0x18f1, 0x137f: 0x18f9, - // Block 0x4e, offset 0x1380 -- 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, -- 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, -- 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, -- 0x1392: 0x0040, 0x1393: 0x7a41, 0x1394: 0x7a41, 0x1395: 0x7a41, 0x1396: 0x7a41, 0x1397: 0x7a59, -- 0x1398: 0x7a59, 0x1399: 0x7a71, 0x139a: 0x7a71, 0x139b: 0x7a89, 0x139c: 0x7a89, 0x139d: 0x0479, -- 0x139e: 0x7aa1, 0x139f: 0x7aa1, 0x13a0: 0x7ab9, 0x13a1: 0x7ab9, 0x13a2: 0x7ad1, 0x13a3: 0x7ad1, -- 0x13a4: 0x7ae9, 0x13a5: 0x7ae9, 0x13a6: 0x7ae9, 0x13a7: 0x7ae9, 0x13a8: 0x7b01, 0x13a9: 0x7b01, -- 0x13aa: 0x7b19, 0x13ab: 0x7b19, 0x13ac: 0x7b41, 0x13ad: 0x7b41, 0x13ae: 0x7b69, 0x13af: 0x7b69, -- 0x13b0: 0x7b91, 0x13b1: 0x7b91, 0x13b2: 0x7bb9, 0x13b3: 0x7bb9, 0x13b4: 0x7be1, 0x13b5: 0x7be1, -- 0x13b6: 0x7c09, 0x13b7: 0x7c09, 0x13b8: 0x7c09, 0x13b9: 0x7c31, 0x13ba: 0x7c31, 0x13bb: 0x7c31, -- 0x13bc: 0x7c59, 0x13bd: 0x7c59, 0x13be: 0x7c59, 0x13bf: 0x7c59, -+ 0x1380: 0x1901, 0x1381: 0x1921, 0x1382: 0x1929, 0x1383: 0x1931, 0x1384: 0x1939, 0x1385: 0x1959, -+ 0x1386: 0x1961, 0x1387: 0x1969, 0x1388: 0x1ac9, 0x1389: 0x1989, 0x138a: 0x1ad1, 0x138b: 0x1ad9, -+ 0x138c: 0x19b9, 0x138d: 0x1ae1, 0x138e: 0x19c1, 0x138f: 0x19c9, 0x1390: 0x1a31, 0x1391: 0x1ae9, -+ 0x1392: 0x1af1, 0x1393: 0x1a09, 0x1394: 0x1af9, 0x1395: 0x1a11, 0x1396: 0x1a19, 0x1397: 0x1751, -+ 0x1398: 0x1759, 0x1399: 0x1b01, 0x139a: 0x1761, 0x139b: 0x1b09, 0x139c: 0x1771, 0x139d: 0x1779, -+ 0x139e: 0x1781, 0x139f: 0x1789, 0x13a0: 0x1b11, 0x13a1: 0x17a1, 0x13a2: 0x17a9, 0x13a3: 0x17b1, -+ 0x13a4: 0x17b9, 0x13a5: 0x1b19, 0x13a6: 0x17d9, 0x13a7: 0x17f1, 0x13a8: 0x17f9, 0x13a9: 0x1801, -+ 0x13aa: 0x1809, 0x13ab: 0x1811, 0x13ac: 0x1821, 0x13ad: 0x1829, 0x13ae: 0x1831, 0x13af: 0x1839, -+ 0x13b0: 0x1841, 0x13b1: 0x1849, 0x13b2: 0x1b21, 0x13b3: 0x1851, 0x13b4: 0x1859, 0x13b5: 0x1861, -+ 0x13b6: 0x1869, 0x13b7: 0x1871, 0x13b8: 0x1879, 0x13b9: 0x1889, 0x13ba: 0x1891, 0x13bb: 0x1899, -+ 0x13bc: 0x18a1, 0x13bd: 0x18a9, 0x13be: 0x18b1, 0x13bf: 0x18b9, - // Block 0x4f, offset 0x13c0 -- 0x13c0: 0x8649, 0x13c1: 0x8671, 0x13c2: 0x8699, 0x13c3: 0x86c1, 0x13c4: 0x86e9, 0x13c5: 0x8711, -- 0x13c6: 0x8739, 0x13c7: 0x8761, 0x13c8: 0x8789, 0x13c9: 0x87b1, 0x13ca: 0x87d9, 0x13cb: 0x8801, -- 0x13cc: 0x8829, 0x13cd: 0x8851, 0x13ce: 0x8879, 0x13cf: 0x88a1, 0x13d0: 0x88c9, 0x13d1: 0x88f1, -- 0x13d2: 0x8919, 0x13d3: 0x8941, 0x13d4: 0x8969, 0x13d5: 0x8991, 0x13d6: 0x89b9, 0x13d7: 0x89e1, -- 0x13d8: 0x8a09, 0x13d9: 0x8a31, 0x13da: 0x8a59, 0x13db: 0x8a81, 0x13dc: 0x8aa9, 0x13dd: 0x8ad1, -- 0x13de: 0x8afa, 0x13df: 0x8b2a, 0x13e0: 0x8b5a, 0x13e1: 0x8b8a, 0x13e2: 0x8bba, 0x13e3: 0x8bea, -- 0x13e4: 0x8c19, 0x13e5: 0x8c41, 0x13e6: 0x7cc1, 0x13e7: 0x8c69, 0x13e8: 0x7c31, 0x13e9: 0x7ce9, -- 0x13ea: 0x8c91, 0x13eb: 0x8cb9, 0x13ec: 0x7d89, 0x13ed: 0x8ce1, 0x13ee: 0x7db1, 0x13ef: 0x7dd9, -- 0x13f0: 0x8d09, 0x13f1: 0x8d31, 0x13f2: 0x7e79, 0x13f3: 0x8d59, 0x13f4: 0x7ea1, 0x13f5: 0x7ec9, -- 0x13f6: 0x8d81, 0x13f7: 0x8da9, 0x13f8: 0x7f19, 0x13f9: 0x8dd1, 0x13fa: 0x7f41, 0x13fb: 0x7f69, -- 0x13fc: 0x83f1, 0x13fd: 0x8419, 0x13fe: 0x8491, 0x13ff: 0x84b9, -+ 0x13c0: 0x18c1, 0x13c1: 0x18c9, 0x13c2: 0x18e1, 0x13c3: 0x18e9, 0x13c4: 0x1909, 0x13c5: 0x1911, -+ 0x13c6: 0x1919, 0x13c7: 0x1921, 0x13c8: 0x1929, 0x13c9: 0x1941, 0x13ca: 0x1949, 0x13cb: 0x1951, -+ 0x13cc: 0x1959, 0x13cd: 0x1b29, 0x13ce: 0x1971, 0x13cf: 0x1979, 0x13d0: 0x1981, 0x13d1: 0x1989, -+ 0x13d2: 0x19a1, 0x13d3: 0x19a9, 0x13d4: 0x19b1, 0x13d5: 0x19b9, 0x13d6: 0x1b31, 0x13d7: 0x19d1, -+ 0x13d8: 0x19d9, 0x13d9: 0x1b39, 0x13da: 0x19f1, 0x13db: 0x19f9, 0x13dc: 0x1a01, 0x13dd: 0x1a09, -+ 0x13de: 0x1b41, 0x13df: 0x1761, 0x13e0: 0x1b09, 0x13e1: 0x1789, 0x13e2: 0x1b11, 0x13e3: 0x17b9, -+ 0x13e4: 0x1b19, 0x13e5: 0x17d9, 0x13e6: 0x1b49, 0x13e7: 0x1841, 0x13e8: 0x1b51, 0x13e9: 0x1b59, -+ 0x13ea: 0x1b61, 0x13eb: 0x1921, 0x13ec: 0x1929, 0x13ed: 0x1959, 0x13ee: 0x19b9, 0x13ef: 0x1b31, -+ 0x13f0: 0x1a09, 0x13f1: 0x1b41, 0x13f2: 0x1b69, 0x13f3: 0x1b71, 0x13f4: 0x1b79, 0x13f5: 0x1b81, -+ 0x13f6: 0x1b89, 0x13f7: 0x1b91, 0x13f8: 0x1b99, 0x13f9: 0x1ba1, 0x13fa: 0x1ba9, 0x13fb: 0x1bb1, -+ 0x13fc: 0x1bb9, 0x13fd: 0x1bc1, 0x13fe: 0x1bc9, 0x13ff: 0x1bd1, - // Block 0x50, offset 0x1400 -- 0x1400: 0x84e1, 0x1401: 0x8581, 0x1402: 0x85a9, 0x1403: 0x85d1, 0x1404: 0x85f9, 0x1405: 0x8699, -- 0x1406: 0x86c1, 0x1407: 0x86e9, 0x1408: 0x8df9, 0x1409: 0x8789, 0x140a: 0x8e21, 0x140b: 0x8e49, -- 0x140c: 0x8879, 0x140d: 0x8e71, 0x140e: 0x88a1, 0x140f: 0x88c9, 0x1410: 0x8ad1, 0x1411: 0x8e99, -- 0x1412: 0x8ec1, 0x1413: 0x8a09, 0x1414: 0x8ee9, 0x1415: 0x8a31, 0x1416: 0x8a59, 0x1417: 0x7c71, -- 0x1418: 0x7c99, 0x1419: 0x8f11, 0x141a: 0x7cc1, 0x141b: 0x8f39, 0x141c: 0x7d11, 0x141d: 0x7d39, -- 0x141e: 0x7d61, 0x141f: 0x7d89, 0x1420: 0x8f61, 0x1421: 0x7e01, 0x1422: 0x7e29, 0x1423: 0x7e51, -- 0x1424: 0x7e79, 0x1425: 0x8f89, 0x1426: 0x7f19, 0x1427: 0x7f91, 0x1428: 0x7fb9, 0x1429: 0x7fe1, -- 0x142a: 0x8009, 0x142b: 0x8031, 0x142c: 0x8081, 0x142d: 0x80a9, 0x142e: 0x80d1, 0x142f: 0x80f9, -- 0x1430: 0x8121, 0x1431: 0x8149, 0x1432: 0x8fb1, 0x1433: 0x8171, 0x1434: 0x8199, 0x1435: 0x81c1, -- 0x1436: 0x81e9, 0x1437: 0x8211, 0x1438: 0x8239, 0x1439: 0x8289, 0x143a: 0x82b1, 0x143b: 0x82d9, -- 0x143c: 0x8301, 0x143d: 0x8329, 0x143e: 0x8351, 0x143f: 0x8379, -+ 0x1400: 0x1bd9, 0x1401: 0x1be1, 0x1402: 0x1be9, 0x1403: 0x1bf1, 0x1404: 0x1bf9, 0x1405: 0x1c01, -+ 0x1406: 0x1c09, 0x1407: 0x1c11, 0x1408: 0x1c19, 0x1409: 0x1c21, 0x140a: 0x1c29, 0x140b: 0x1c31, -+ 0x140c: 0x1b59, 0x140d: 0x1c39, 0x140e: 0x1c41, 0x140f: 0x1c49, 0x1410: 0x1c51, 0x1411: 0x1b81, -+ 0x1412: 0x1b89, 0x1413: 0x1b91, 0x1414: 0x1b99, 0x1415: 0x1ba1, 0x1416: 0x1ba9, 0x1417: 0x1bb1, -+ 0x1418: 0x1bb9, 0x1419: 0x1bc1, 0x141a: 0x1bc9, 0x141b: 0x1bd1, 0x141c: 0x1bd9, 0x141d: 0x1be1, -+ 0x141e: 0x1be9, 0x141f: 0x1bf1, 0x1420: 0x1bf9, 0x1421: 0x1c01, 0x1422: 0x1c09, 0x1423: 0x1c11, -+ 0x1424: 0x1c19, 0x1425: 0x1c21, 0x1426: 0x1c29, 0x1427: 0x1c31, 0x1428: 0x1b59, 0x1429: 0x1c39, -+ 0x142a: 0x1c41, 0x142b: 0x1c49, 0x142c: 0x1c51, 0x142d: 0x1c21, 0x142e: 0x1c29, 0x142f: 0x1c31, -+ 0x1430: 0x1b59, 0x1431: 0x1b51, 0x1432: 0x1b61, 0x1433: 0x1881, 0x1434: 0x1829, 0x1435: 0x1831, -+ 0x1436: 0x1839, 0x1437: 0x1c21, 0x1438: 0x1c29, 0x1439: 0x1c31, 0x143a: 0x1881, 0x143b: 0x1889, -+ 0x143c: 0x1c59, 0x143d: 0x1c59, 0x143e: 0x0018, 0x143f: 0x0018, - // Block 0x51, offset 0x1440 -- 0x1440: 0x83a1, 0x1441: 0x83c9, 0x1442: 0x8441, 0x1443: 0x8469, 0x1444: 0x8509, 0x1445: 0x8531, -- 0x1446: 0x8559, 0x1447: 0x8581, 0x1448: 0x85a9, 0x1449: 0x8621, 0x144a: 0x8649, 0x144b: 0x8671, -- 0x144c: 0x8699, 0x144d: 0x8fd9, 0x144e: 0x8711, 0x144f: 0x8739, 0x1450: 0x8761, 0x1451: 0x8789, -- 0x1452: 0x8801, 0x1453: 0x8829, 0x1454: 0x8851, 0x1455: 0x8879, 0x1456: 0x9001, 0x1457: 0x88f1, -- 0x1458: 0x8919, 0x1459: 0x9029, 0x145a: 0x8991, 0x145b: 0x89b9, 0x145c: 0x89e1, 0x145d: 0x8a09, -- 0x145e: 0x9051, 0x145f: 0x7cc1, 0x1460: 0x8f39, 0x1461: 0x7d89, 0x1462: 0x8f61, 0x1463: 0x7e79, -- 0x1464: 0x8f89, 0x1465: 0x7f19, 0x1466: 0x9079, 0x1467: 0x8121, 0x1468: 0x90a1, 0x1469: 0x90c9, -- 0x146a: 0x90f1, 0x146b: 0x8581, 0x146c: 0x85a9, 0x146d: 0x8699, 0x146e: 0x8879, 0x146f: 0x9001, -- 0x1470: 0x8a09, 0x1471: 0x9051, 0x1472: 0x9119, 0x1473: 0x9151, 0x1474: 0x9189, 0x1475: 0x91c1, -- 0x1476: 0x91e9, 0x1477: 0x9211, 0x1478: 0x9239, 0x1479: 0x9261, 0x147a: 0x9289, 0x147b: 0x92b1, -- 0x147c: 0x92d9, 0x147d: 0x9301, 0x147e: 0x9329, 0x147f: 0x9351, -+ 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040, -+ 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040, -+ 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x1c61, 0x1451: 0x1c69, -+ 0x1452: 0x1c69, 0x1453: 0x1c71, 0x1454: 0x1c79, 0x1455: 0x1c81, 0x1456: 0x1c89, 0x1457: 0x1c91, -+ 0x1458: 0x1c99, 0x1459: 0x1c99, 0x145a: 0x1ca1, 0x145b: 0x1ca9, 0x145c: 0x1cb1, 0x145d: 0x1cb9, -+ 0x145e: 0x1cc1, 0x145f: 0x1cc9, 0x1460: 0x1cc9, 0x1461: 0x1cd1, 0x1462: 0x1cd9, 0x1463: 0x1cd9, -+ 0x1464: 0x1ce1, 0x1465: 0x1ce1, 0x1466: 0x1ce9, 0x1467: 0x1cf1, 0x1468: 0x1cf1, 0x1469: 0x1cf9, -+ 0x146a: 0x1d01, 0x146b: 0x1d01, 0x146c: 0x1d09, 0x146d: 0x1d09, 0x146e: 0x1d11, 0x146f: 0x1d19, -+ 0x1470: 0x1d19, 0x1471: 0x1d21, 0x1472: 0x1d21, 0x1473: 0x1d29, 0x1474: 0x1d31, 0x1475: 0x1d39, -+ 0x1476: 0x1d41, 0x1477: 0x1d41, 0x1478: 0x1d49, 0x1479: 0x1d51, 0x147a: 0x1d59, 0x147b: 0x1d61, -+ 0x147c: 0x1d69, 0x147d: 0x1d69, 0x147e: 0x1d71, 0x147f: 0x1d79, - // Block 0x52, offset 0x1480 -- 0x1480: 0x9379, 0x1481: 0x93a1, 0x1482: 0x93c9, 0x1483: 0x93f1, 0x1484: 0x9419, 0x1485: 0x9441, -- 0x1486: 0x9469, 0x1487: 0x9491, 0x1488: 0x94b9, 0x1489: 0x94e1, 0x148a: 0x9509, 0x148b: 0x9531, -- 0x148c: 0x90c9, 0x148d: 0x9559, 0x148e: 0x9581, 0x148f: 0x95a9, 0x1490: 0x95d1, 0x1491: 0x91c1, -- 0x1492: 0x91e9, 0x1493: 0x9211, 0x1494: 0x9239, 0x1495: 0x9261, 0x1496: 0x9289, 0x1497: 0x92b1, -- 0x1498: 0x92d9, 0x1499: 0x9301, 0x149a: 0x9329, 0x149b: 0x9351, 0x149c: 0x9379, 0x149d: 0x93a1, -- 0x149e: 0x93c9, 0x149f: 0x93f1, 0x14a0: 0x9419, 0x14a1: 0x9441, 0x14a2: 0x9469, 0x14a3: 0x9491, -- 0x14a4: 0x94b9, 0x14a5: 0x94e1, 0x14a6: 0x9509, 0x14a7: 0x9531, 0x14a8: 0x90c9, 0x14a9: 0x9559, -- 0x14aa: 0x9581, 0x14ab: 0x95a9, 0x14ac: 0x95d1, 0x14ad: 0x94e1, 0x14ae: 0x9509, 0x14af: 0x9531, -- 0x14b0: 0x90c9, 0x14b1: 0x90a1, 0x14b2: 0x90f1, 0x14b3: 0x8261, 0x14b4: 0x80a9, 0x14b5: 0x80d1, -- 0x14b6: 0x80f9, 0x14b7: 0x94e1, 0x14b8: 0x9509, 0x14b9: 0x9531, 0x14ba: 0x8261, 0x14bb: 0x8289, -- 0x14bc: 0x95f9, 0x14bd: 0x95f9, 0x14be: 0x0018, 0x14bf: 0x0018, -+ 0x1480: 0x1f29, 0x1481: 0x1f31, 0x1482: 0x1f39, 0x1483: 0x1f11, 0x1484: 0x1d39, 0x1485: 0x1ce9, -+ 0x1486: 0x1f41, 0x1487: 0x1f49, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, -+ 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040, -+ 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040, -+ 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040, -+ 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040, -+ 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040, -+ 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040, -+ 0x14b0: 0x1f51, 0x14b1: 0x1f59, 0x14b2: 0x1f61, 0x14b3: 0x1f69, 0x14b4: 0x1f71, 0x14b5: 0x1f79, -+ 0x14b6: 0x1f81, 0x14b7: 0x1f89, 0x14b8: 0x1f91, 0x14b9: 0x1f99, 0x14ba: 0x1fa2, 0x14bb: 0x1faa, -+ 0x14bc: 0x1fb1, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040, - // Block 0x53, offset 0x14c0 -- 0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040, -- 0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040, -- 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x9621, 0x14d1: 0x9659, -- 0x14d2: 0x9659, 0x14d3: 0x9691, 0x14d4: 0x96c9, 0x14d5: 0x9701, 0x14d6: 0x9739, 0x14d7: 0x9771, -- 0x14d8: 0x97a9, 0x14d9: 0x97a9, 0x14da: 0x97e1, 0x14db: 0x9819, 0x14dc: 0x9851, 0x14dd: 0x9889, -- 0x14de: 0x98c1, 0x14df: 0x98f9, 0x14e0: 0x98f9, 0x14e1: 0x9931, 0x14e2: 0x9969, 0x14e3: 0x9969, -- 0x14e4: 0x99a1, 0x14e5: 0x99a1, 0x14e6: 0x99d9, 0x14e7: 0x9a11, 0x14e8: 0x9a11, 0x14e9: 0x9a49, -- 0x14ea: 0x9a81, 0x14eb: 0x9a81, 0x14ec: 0x9ab9, 0x14ed: 0x9ab9, 0x14ee: 0x9af1, 0x14ef: 0x9b29, -- 0x14f0: 0x9b29, 0x14f1: 0x9b61, 0x14f2: 0x9b61, 0x14f3: 0x9b99, 0x14f4: 0x9bd1, 0x14f5: 0x9c09, -- 0x14f6: 0x9c41, 0x14f7: 0x9c41, 0x14f8: 0x9c79, 0x14f9: 0x9cb1, 0x14fa: 0x9ce9, 0x14fb: 0x9d21, -- 0x14fc: 0x9d59, 0x14fd: 0x9d59, 0x14fe: 0x9d91, 0x14ff: 0x9dc9, -+ 0x14c0: 0x33c0, 0x14c1: 0x33c0, 0x14c2: 0x33c0, 0x14c3: 0x33c0, 0x14c4: 0x33c0, 0x14c5: 0x33c0, -+ 0x14c6: 0x33c0, 0x14c7: 0x33c0, 0x14c8: 0x33c0, 0x14c9: 0x33c0, 0x14ca: 0x33c0, 0x14cb: 0x33c0, -+ 0x14cc: 0x33c0, 0x14cd: 0x33c0, 0x14ce: 0x33c0, 0x14cf: 0x33c0, 0x14d0: 0x1fba, 0x14d1: 0x7d8d, -+ 0x14d2: 0x0040, 0x14d3: 0x1fc2, 0x14d4: 0x0122, 0x14d5: 0x1fca, 0x14d6: 0x1fd2, 0x14d7: 0x7dad, -+ 0x14d8: 0x7dcd, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, -+ 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x3308, 0x14e1: 0x3308, 0x14e2: 0x3308, 0x14e3: 0x3308, -+ 0x14e4: 0x3308, 0x14e5: 0x3308, 0x14e6: 0x3308, 0x14e7: 0x3308, 0x14e8: 0x3308, 0x14e9: 0x3308, -+ 0x14ea: 0x3308, 0x14eb: 0x3308, 0x14ec: 0x3308, 0x14ed: 0x3308, 0x14ee: 0x3308, 0x14ef: 0x3308, -+ 0x14f0: 0x0040, 0x14f1: 0x7ded, 0x14f2: 0x7e0d, 0x14f3: 0x1fda, 0x14f4: 0x1fda, 0x14f5: 0x072a, -+ 0x14f6: 0x0732, 0x14f7: 0x1fe2, 0x14f8: 0x1fea, 0x14f9: 0x7e2d, 0x14fa: 0x7e4d, 0x14fb: 0x7e6d, -+ 0x14fc: 0x7e2d, 0x14fd: 0x7e8d, 0x14fe: 0x7ead, 0x14ff: 0x7e8d, - // Block 0x54, offset 0x1500 -- 0x1500: 0xa999, 0x1501: 0xa9d1, 0x1502: 0xaa09, 0x1503: 0xa8f1, 0x1504: 0x9c09, 0x1505: 0x99d9, -- 0x1506: 0xaa41, 0x1507: 0xaa79, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, -- 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040, -- 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, -- 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, -- 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, -- 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, -- 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, -- 0x1530: 0xaab1, 0x1531: 0xaae9, 0x1532: 0xab21, 0x1533: 0xab69, 0x1534: 0xabb1, 0x1535: 0xabf9, -- 0x1536: 0xac41, 0x1537: 0xac89, 0x1538: 0xacd1, 0x1539: 0xad19, 0x153a: 0xad52, 0x153b: 0xae62, -- 0x153c: 0xaee1, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, -+ 0x1500: 0x7ecd, 0x1501: 0x7eed, 0x1502: 0x7f0d, 0x1503: 0x7eed, 0x1504: 0x7f2d, 0x1505: 0x0018, -+ 0x1506: 0x0018, 0x1507: 0x1ff2, 0x1508: 0x1ffa, 0x1509: 0x7f4e, 0x150a: 0x7f6e, 0x150b: 0x7f8e, -+ 0x150c: 0x7fae, 0x150d: 0x1fda, 0x150e: 0x1fda, 0x150f: 0x1fda, 0x1510: 0x1fba, 0x1511: 0x7fcd, -+ 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0122, 0x1515: 0x1fc2, 0x1516: 0x1fd2, 0x1517: 0x1fca, -+ 0x1518: 0x7fed, 0x1519: 0x072a, 0x151a: 0x0732, 0x151b: 0x1fe2, 0x151c: 0x1fea, 0x151d: 0x7ecd, -+ 0x151e: 0x7f2d, 0x151f: 0x2002, 0x1520: 0x200a, 0x1521: 0x2012, 0x1522: 0x071a, 0x1523: 0x2019, -+ 0x1524: 0x2022, 0x1525: 0x202a, 0x1526: 0x0722, 0x1527: 0x0040, 0x1528: 0x2032, 0x1529: 0x203a, -+ 0x152a: 0x2042, 0x152b: 0x204a, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, -+ 0x1530: 0x800e, 0x1531: 0x2051, 0x1532: 0x802e, 0x1533: 0x0808, 0x1534: 0x804e, 0x1535: 0x0040, -+ 0x1536: 0x806e, 0x1537: 0x2059, 0x1538: 0x808e, 0x1539: 0x2061, 0x153a: 0x80ae, 0x153b: 0x2069, -+ 0x153c: 0x80ce, 0x153d: 0x2071, 0x153e: 0x80ee, 0x153f: 0x2079, - // Block 0x55, offset 0x1540 -- 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, -- 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, -- 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaf2a, 0x1551: 0x7d8d, -- 0x1552: 0x0040, 0x1553: 0xaf3a, 0x1554: 0x03c2, 0x1555: 0xaf4a, 0x1556: 0xaf5a, 0x1557: 0x7dad, -- 0x1558: 0x7dcd, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, -- 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, -- 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, -- 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, -- 0x1570: 0x0040, 0x1571: 0x7ded, 0x1572: 0x7e0d, 0x1573: 0xaf6a, 0x1574: 0xaf6a, 0x1575: 0x1fd2, -- 0x1576: 0x1fe2, 0x1577: 0xaf7a, 0x1578: 0xaf8a, 0x1579: 0x7e2d, 0x157a: 0x7e4d, 0x157b: 0x7e6d, -- 0x157c: 0x7e2d, 0x157d: 0x7e8d, 0x157e: 0x7ead, 0x157f: 0x7e8d, -+ 0x1540: 0x2081, 0x1541: 0x2089, 0x1542: 0x2089, 0x1543: 0x2091, 0x1544: 0x2091, 0x1545: 0x2099, -+ 0x1546: 0x2099, 0x1547: 0x20a1, 0x1548: 0x20a1, 0x1549: 0x20a9, 0x154a: 0x20a9, 0x154b: 0x20a9, -+ 0x154c: 0x20a9, 0x154d: 0x20b1, 0x154e: 0x20b1, 0x154f: 0x20b9, 0x1550: 0x20b9, 0x1551: 0x20b9, -+ 0x1552: 0x20b9, 0x1553: 0x20c1, 0x1554: 0x20c1, 0x1555: 0x20c9, 0x1556: 0x20c9, 0x1557: 0x20c9, -+ 0x1558: 0x20c9, 0x1559: 0x20d1, 0x155a: 0x20d1, 0x155b: 0x20d1, 0x155c: 0x20d1, 0x155d: 0x20d9, -+ 0x155e: 0x20d9, 0x155f: 0x20d9, 0x1560: 0x20d9, 0x1561: 0x20e1, 0x1562: 0x20e1, 0x1563: 0x20e1, -+ 0x1564: 0x20e1, 0x1565: 0x20e9, 0x1566: 0x20e9, 0x1567: 0x20e9, 0x1568: 0x20e9, 0x1569: 0x20f1, -+ 0x156a: 0x20f1, 0x156b: 0x20f9, 0x156c: 0x20f9, 0x156d: 0x2101, 0x156e: 0x2101, 0x156f: 0x2109, -+ 0x1570: 0x2109, 0x1571: 0x2111, 0x1572: 0x2111, 0x1573: 0x2111, 0x1574: 0x2111, 0x1575: 0x2119, -+ 0x1576: 0x2119, 0x1577: 0x2119, 0x1578: 0x2119, 0x1579: 0x2121, 0x157a: 0x2121, 0x157b: 0x2121, -+ 0x157c: 0x2121, 0x157d: 0x2129, 0x157e: 0x2129, 0x157f: 0x2129, - // Block 0x56, offset 0x1580 -- 0x1580: 0x7ecd, 0x1581: 0x7eed, 0x1582: 0x7f0d, 0x1583: 0x7eed, 0x1584: 0x7f2d, 0x1585: 0x0018, -- 0x1586: 0x0018, 0x1587: 0xaf9a, 0x1588: 0xafaa, 0x1589: 0x7f4e, 0x158a: 0x7f6e, 0x158b: 0x7f8e, -- 0x158c: 0x7fae, 0x158d: 0xaf6a, 0x158e: 0xaf6a, 0x158f: 0xaf6a, 0x1590: 0xaf2a, 0x1591: 0x7fcd, -- 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaf3a, 0x1596: 0xaf5a, 0x1597: 0xaf4a, -- 0x1598: 0x7fed, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf7a, 0x159c: 0xaf8a, 0x159d: 0x7ecd, -- 0x159e: 0x7f2d, 0x159f: 0xafba, 0x15a0: 0xafca, 0x15a1: 0xafda, 0x15a2: 0x1fb2, 0x15a3: 0xafe9, -- 0x15a4: 0xaffa, 0x15a5: 0xb00a, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xb01a, 0x15a9: 0xb02a, -- 0x15aa: 0xb03a, 0x15ab: 0xb04a, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, -- 0x15b0: 0x800e, 0x15b1: 0xb059, 0x15b2: 0x802e, 0x15b3: 0x0808, 0x15b4: 0x804e, 0x15b5: 0x0040, -- 0x15b6: 0x806e, 0x15b7: 0xb081, 0x15b8: 0x808e, 0x15b9: 0xb0a9, 0x15ba: 0x80ae, 0x15bb: 0xb0d1, -- 0x15bc: 0x80ce, 0x15bd: 0xb0f9, 0x15be: 0x80ee, 0x15bf: 0xb121, -+ 0x1580: 0x2129, 0x1581: 0x2131, 0x1582: 0x2131, 0x1583: 0x2131, 0x1584: 0x2131, 0x1585: 0x2139, -+ 0x1586: 0x2139, 0x1587: 0x2139, 0x1588: 0x2139, 0x1589: 0x2141, 0x158a: 0x2141, 0x158b: 0x2141, -+ 0x158c: 0x2141, 0x158d: 0x2149, 0x158e: 0x2149, 0x158f: 0x2149, 0x1590: 0x2149, 0x1591: 0x2151, -+ 0x1592: 0x2151, 0x1593: 0x2151, 0x1594: 0x2151, 0x1595: 0x2159, 0x1596: 0x2159, 0x1597: 0x2159, -+ 0x1598: 0x2159, 0x1599: 0x2161, 0x159a: 0x2161, 0x159b: 0x2161, 0x159c: 0x2161, 0x159d: 0x2169, -+ 0x159e: 0x2169, 0x159f: 0x2169, 0x15a0: 0x2169, 0x15a1: 0x2171, 0x15a2: 0x2171, 0x15a3: 0x2171, -+ 0x15a4: 0x2171, 0x15a5: 0x2179, 0x15a6: 0x2179, 0x15a7: 0x2179, 0x15a8: 0x2179, 0x15a9: 0x2181, -+ 0x15aa: 0x2181, 0x15ab: 0x2181, 0x15ac: 0x2181, 0x15ad: 0x2189, 0x15ae: 0x2189, 0x15af: 0x1701, -+ 0x15b0: 0x1701, 0x15b1: 0x2191, 0x15b2: 0x2191, 0x15b3: 0x2191, 0x15b4: 0x2191, 0x15b5: 0x2199, -+ 0x15b6: 0x2199, 0x15b7: 0x21a1, 0x15b8: 0x21a1, 0x15b9: 0x21a9, 0x15ba: 0x21a9, 0x15bb: 0x21b1, -+ 0x15bc: 0x21b1, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0, - // Block 0x57, offset 0x15c0 -- 0x15c0: 0xb149, 0x15c1: 0xb161, 0x15c2: 0xb161, 0x15c3: 0xb179, 0x15c4: 0xb179, 0x15c5: 0xb191, -- 0x15c6: 0xb191, 0x15c7: 0xb1a9, 0x15c8: 0xb1a9, 0x15c9: 0xb1c1, 0x15ca: 0xb1c1, 0x15cb: 0xb1c1, -- 0x15cc: 0xb1c1, 0x15cd: 0xb1d9, 0x15ce: 0xb1d9, 0x15cf: 0xb1f1, 0x15d0: 0xb1f1, 0x15d1: 0xb1f1, -- 0x15d2: 0xb1f1, 0x15d3: 0xb209, 0x15d4: 0xb209, 0x15d5: 0xb221, 0x15d6: 0xb221, 0x15d7: 0xb221, -- 0x15d8: 0xb221, 0x15d9: 0xb239, 0x15da: 0xb239, 0x15db: 0xb239, 0x15dc: 0xb239, 0x15dd: 0xb251, -- 0x15de: 0xb251, 0x15df: 0xb251, 0x15e0: 0xb251, 0x15e1: 0xb269, 0x15e2: 0xb269, 0x15e3: 0xb269, -- 0x15e4: 0xb269, 0x15e5: 0xb281, 0x15e6: 0xb281, 0x15e7: 0xb281, 0x15e8: 0xb281, 0x15e9: 0xb299, -- 0x15ea: 0xb299, 0x15eb: 0xb2b1, 0x15ec: 0xb2b1, 0x15ed: 0xb2c9, 0x15ee: 0xb2c9, 0x15ef: 0xb2e1, -- 0x15f0: 0xb2e1, 0x15f1: 0xb2f9, 0x15f2: 0xb2f9, 0x15f3: 0xb2f9, 0x15f4: 0xb2f9, 0x15f5: 0xb311, -- 0x15f6: 0xb311, 0x15f7: 0xb311, 0x15f8: 0xb311, 0x15f9: 0xb329, 0x15fa: 0xb329, 0x15fb: 0xb329, -- 0x15fc: 0xb329, 0x15fd: 0xb341, 0x15fe: 0xb341, 0x15ff: 0xb341, -+ 0x15c0: 0x0040, 0x15c1: 0x1fca, 0x15c2: 0x21ba, 0x15c3: 0x2002, 0x15c4: 0x203a, 0x15c5: 0x2042, -+ 0x15c6: 0x200a, 0x15c7: 0x21c2, 0x15c8: 0x072a, 0x15c9: 0x0732, 0x15ca: 0x2012, 0x15cb: 0x071a, -+ 0x15cc: 0x1fba, 0x15cd: 0x2019, 0x15ce: 0x0961, 0x15cf: 0x21ca, 0x15d0: 0x06e1, 0x15d1: 0x0049, -+ 0x15d2: 0x0029, 0x15d3: 0x0031, 0x15d4: 0x06e9, 0x15d5: 0x06f1, 0x15d6: 0x06f9, 0x15d7: 0x0701, -+ 0x15d8: 0x0709, 0x15d9: 0x0711, 0x15da: 0x1fc2, 0x15db: 0x0122, 0x15dc: 0x2022, 0x15dd: 0x0722, -+ 0x15de: 0x202a, 0x15df: 0x1fd2, 0x15e0: 0x204a, 0x15e1: 0x0019, 0x15e2: 0x02e9, 0x15e3: 0x03d9, -+ 0x15e4: 0x02f1, 0x15e5: 0x02f9, 0x15e6: 0x03f1, 0x15e7: 0x0309, 0x15e8: 0x00a9, 0x15e9: 0x0311, -+ 0x15ea: 0x00b1, 0x15eb: 0x0319, 0x15ec: 0x0101, 0x15ed: 0x0321, 0x15ee: 0x0329, 0x15ef: 0x0051, -+ 0x15f0: 0x0339, 0x15f1: 0x0751, 0x15f2: 0x00b9, 0x15f3: 0x0089, 0x15f4: 0x0341, 0x15f5: 0x0349, -+ 0x15f6: 0x0391, 0x15f7: 0x00c1, 0x15f8: 0x0109, 0x15f9: 0x00c9, 0x15fa: 0x04b1, 0x15fb: 0x1ff2, -+ 0x15fc: 0x2032, 0x15fd: 0x1ffa, 0x15fe: 0x21d2, 0x15ff: 0x1fda, - // Block 0x58, offset 0x1600 -- 0x1600: 0xb341, 0x1601: 0xb359, 0x1602: 0xb359, 0x1603: 0xb359, 0x1604: 0xb359, 0x1605: 0xb371, -- 0x1606: 0xb371, 0x1607: 0xb371, 0x1608: 0xb371, 0x1609: 0xb389, 0x160a: 0xb389, 0x160b: 0xb389, -- 0x160c: 0xb389, 0x160d: 0xb3a1, 0x160e: 0xb3a1, 0x160f: 0xb3a1, 0x1610: 0xb3a1, 0x1611: 0xb3b9, -- 0x1612: 0xb3b9, 0x1613: 0xb3b9, 0x1614: 0xb3b9, 0x1615: 0xb3d1, 0x1616: 0xb3d1, 0x1617: 0xb3d1, -- 0x1618: 0xb3d1, 0x1619: 0xb3e9, 0x161a: 0xb3e9, 0x161b: 0xb3e9, 0x161c: 0xb3e9, 0x161d: 0xb401, -- 0x161e: 0xb401, 0x161f: 0xb401, 0x1620: 0xb401, 0x1621: 0xb419, 0x1622: 0xb419, 0x1623: 0xb419, -- 0x1624: 0xb419, 0x1625: 0xb431, 0x1626: 0xb431, 0x1627: 0xb431, 0x1628: 0xb431, 0x1629: 0xb449, -- 0x162a: 0xb449, 0x162b: 0xb449, 0x162c: 0xb449, 0x162d: 0xb461, 0x162e: 0xb461, 0x162f: 0x7b01, -- 0x1630: 0x7b01, 0x1631: 0xb479, 0x1632: 0xb479, 0x1633: 0xb479, 0x1634: 0xb479, 0x1635: 0xb491, -- 0x1636: 0xb491, 0x1637: 0xb4b9, 0x1638: 0xb4b9, 0x1639: 0xb4e1, 0x163a: 0xb4e1, 0x163b: 0xb509, -- 0x163c: 0xb509, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, -+ 0x1600: 0x0672, 0x1601: 0x0019, 0x1602: 0x02e9, 0x1603: 0x03d9, 0x1604: 0x02f1, 0x1605: 0x02f9, -+ 0x1606: 0x03f1, 0x1607: 0x0309, 0x1608: 0x00a9, 0x1609: 0x0311, 0x160a: 0x00b1, 0x160b: 0x0319, -+ 0x160c: 0x0101, 0x160d: 0x0321, 0x160e: 0x0329, 0x160f: 0x0051, 0x1610: 0x0339, 0x1611: 0x0751, -+ 0x1612: 0x00b9, 0x1613: 0x0089, 0x1614: 0x0341, 0x1615: 0x0349, 0x1616: 0x0391, 0x1617: 0x00c1, -+ 0x1618: 0x0109, 0x1619: 0x00c9, 0x161a: 0x04b1, 0x161b: 0x1fe2, 0x161c: 0x21da, 0x161d: 0x1fea, -+ 0x161e: 0x21e2, 0x161f: 0x810d, 0x1620: 0x812d, 0x1621: 0x0961, 0x1622: 0x814d, 0x1623: 0x814d, -+ 0x1624: 0x816d, 0x1625: 0x818d, 0x1626: 0x81ad, 0x1627: 0x81cd, 0x1628: 0x81ed, 0x1629: 0x820d, -+ 0x162a: 0x822d, 0x162b: 0x824d, 0x162c: 0x826d, 0x162d: 0x828d, 0x162e: 0x82ad, 0x162f: 0x82cd, -+ 0x1630: 0x82ed, 0x1631: 0x830d, 0x1632: 0x832d, 0x1633: 0x834d, 0x1634: 0x836d, 0x1635: 0x838d, -+ 0x1636: 0x83ad, 0x1637: 0x83cd, 0x1638: 0x83ed, 0x1639: 0x840d, 0x163a: 0x842d, 0x163b: 0x844d, -+ 0x163c: 0x81ed, 0x163d: 0x846d, 0x163e: 0x848d, 0x163f: 0x824d, - // Block 0x59, offset 0x1640 -- 0x1640: 0x0040, 0x1641: 0xaf4a, 0x1642: 0xb532, 0x1643: 0xafba, 0x1644: 0xb02a, 0x1645: 0xb03a, -- 0x1646: 0xafca, 0x1647: 0xb542, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xafda, 0x164b: 0x1fb2, -- 0x164c: 0xaf2a, 0x164d: 0xafe9, 0x164e: 0x29d1, 0x164f: 0xb552, 0x1650: 0x1f41, 0x1651: 0x00c9, -- 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, -- 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaf3a, 0x165b: 0x03c2, 0x165c: 0xaffa, 0x165d: 0x1fc2, -- 0x165e: 0xb00a, 0x165f: 0xaf5a, 0x1660: 0xb04a, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159, -- 0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41, -- 0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9, -- 0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9, -- 0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf9a, -- 0x167c: 0xb01a, 0x167d: 0xafaa, 0x167e: 0xb562, 0x167f: 0xaf6a, -+ 0x1640: 0x84ad, 0x1641: 0x84cd, 0x1642: 0x84ed, 0x1643: 0x850d, 0x1644: 0x852d, 0x1645: 0x854d, -+ 0x1646: 0x856d, 0x1647: 0x858d, 0x1648: 0x850d, 0x1649: 0x85ad, 0x164a: 0x850d, 0x164b: 0x85cd, -+ 0x164c: 0x85cd, 0x164d: 0x85ed, 0x164e: 0x85ed, 0x164f: 0x860d, 0x1650: 0x854d, 0x1651: 0x862d, -+ 0x1652: 0x864d, 0x1653: 0x862d, 0x1654: 0x866d, 0x1655: 0x864d, 0x1656: 0x868d, 0x1657: 0x868d, -+ 0x1658: 0x86ad, 0x1659: 0x86ad, 0x165a: 0x86cd, 0x165b: 0x86cd, 0x165c: 0x864d, 0x165d: 0x814d, -+ 0x165e: 0x86ed, 0x165f: 0x870d, 0x1660: 0x0040, 0x1661: 0x872d, 0x1662: 0x874d, 0x1663: 0x876d, -+ 0x1664: 0x878d, 0x1665: 0x876d, 0x1666: 0x87ad, 0x1667: 0x87cd, 0x1668: 0x87ed, 0x1669: 0x87ed, -+ 0x166a: 0x880d, 0x166b: 0x880d, 0x166c: 0x882d, 0x166d: 0x882d, 0x166e: 0x880d, 0x166f: 0x880d, -+ 0x1670: 0x884d, 0x1671: 0x886d, 0x1672: 0x888d, 0x1673: 0x88ad, 0x1674: 0x88cd, 0x1675: 0x88ed, -+ 0x1676: 0x88ed, 0x1677: 0x88ed, 0x1678: 0x890d, 0x1679: 0x890d, 0x167a: 0x890d, 0x167b: 0x890d, -+ 0x167c: 0x87ed, 0x167d: 0x87ed, 0x167e: 0x87ed, 0x167f: 0x0040, - // Block 0x5a, offset 0x1680 -- 0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09, -- 0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51, -- 0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039, -- 0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279, -- 0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf7a, 0x169c: 0xb572, 0x169d: 0xaf8a, -- 0x169e: 0xb582, 0x169f: 0x810d, 0x16a0: 0x812d, 0x16a1: 0x29d1, 0x16a2: 0x814d, 0x16a3: 0x814d, -- 0x16a4: 0x816d, 0x16a5: 0x818d, 0x16a6: 0x81ad, 0x16a7: 0x81cd, 0x16a8: 0x81ed, 0x16a9: 0x820d, -- 0x16aa: 0x822d, 0x16ab: 0x824d, 0x16ac: 0x826d, 0x16ad: 0x828d, 0x16ae: 0x82ad, 0x16af: 0x82cd, -- 0x16b0: 0x82ed, 0x16b1: 0x830d, 0x16b2: 0x832d, 0x16b3: 0x834d, 0x16b4: 0x836d, 0x16b5: 0x838d, -- 0x16b6: 0x83ad, 0x16b7: 0x83cd, 0x16b8: 0x83ed, 0x16b9: 0x840d, 0x16ba: 0x842d, 0x16bb: 0x844d, -- 0x16bc: 0x81ed, 0x16bd: 0x846d, 0x16be: 0x848d, 0x16bf: 0x824d, -+ 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x874d, 0x1683: 0x872d, 0x1684: 0x892d, 0x1685: 0x872d, -+ 0x1686: 0x874d, 0x1687: 0x872d, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x894d, 0x168b: 0x874d, -+ 0x168c: 0x896d, 0x168d: 0x892d, 0x168e: 0x896d, 0x168f: 0x874d, 0x1690: 0x0040, 0x1691: 0x0040, -+ 0x1692: 0x898d, 0x1693: 0x89ad, 0x1694: 0x88ad, 0x1695: 0x896d, 0x1696: 0x892d, 0x1697: 0x896d, -+ 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x89cd, 0x169b: 0x89ed, 0x169c: 0x89cd, 0x169d: 0x0040, -+ 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0x21e9, 0x16a1: 0x21f1, 0x16a2: 0x21f9, 0x16a3: 0x8a0e, -+ 0x16a4: 0x2201, 0x16a5: 0x2209, 0x16a6: 0x8a2d, 0x16a7: 0x0040, 0x16a8: 0x8a4d, 0x16a9: 0x8a6d, -+ 0x16aa: 0x8a8d, 0x16ab: 0x8a6d, 0x16ac: 0x8aad, 0x16ad: 0x8acd, 0x16ae: 0x8aed, 0x16af: 0x0040, -+ 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040, -+ 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340, -+ 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040, - // Block 0x5b, offset 0x16c0 -- 0x16c0: 0x84ad, 0x16c1: 0x84cd, 0x16c2: 0x84ed, 0x16c3: 0x850d, 0x16c4: 0x852d, 0x16c5: 0x854d, -- 0x16c6: 0x856d, 0x16c7: 0x858d, 0x16c8: 0x850d, 0x16c9: 0x85ad, 0x16ca: 0x850d, 0x16cb: 0x85cd, -- 0x16cc: 0x85cd, 0x16cd: 0x85ed, 0x16ce: 0x85ed, 0x16cf: 0x860d, 0x16d0: 0x854d, 0x16d1: 0x862d, -- 0x16d2: 0x864d, 0x16d3: 0x862d, 0x16d4: 0x866d, 0x16d5: 0x864d, 0x16d6: 0x868d, 0x16d7: 0x868d, -- 0x16d8: 0x86ad, 0x16d9: 0x86ad, 0x16da: 0x86cd, 0x16db: 0x86cd, 0x16dc: 0x864d, 0x16dd: 0x814d, -- 0x16de: 0x86ed, 0x16df: 0x870d, 0x16e0: 0x0040, 0x16e1: 0x872d, 0x16e2: 0x874d, 0x16e3: 0x876d, -- 0x16e4: 0x878d, 0x16e5: 0x876d, 0x16e6: 0x87ad, 0x16e7: 0x87cd, 0x16e8: 0x87ed, 0x16e9: 0x87ed, -- 0x16ea: 0x880d, 0x16eb: 0x880d, 0x16ec: 0x882d, 0x16ed: 0x882d, 0x16ee: 0x880d, 0x16ef: 0x880d, -- 0x16f0: 0x884d, 0x16f1: 0x886d, 0x16f2: 0x888d, 0x16f3: 0x88ad, 0x16f4: 0x88cd, 0x16f5: 0x88ed, -- 0x16f6: 0x88ed, 0x16f7: 0x88ed, 0x16f8: 0x890d, 0x16f9: 0x890d, 0x16fa: 0x890d, 0x16fb: 0x890d, -- 0x16fc: 0x87ed, 0x16fd: 0x87ed, 0x16fe: 0x87ed, 0x16ff: 0x0040, -+ 0x16c0: 0x0a08, 0x16c1: 0x0a08, 0x16c2: 0x0a08, 0x16c3: 0x0a08, 0x16c4: 0x0a08, 0x16c5: 0x0c08, -+ 0x16c6: 0x0808, 0x16c7: 0x0c08, 0x16c8: 0x0818, 0x16c9: 0x0c08, 0x16ca: 0x0c08, 0x16cb: 0x0808, -+ 0x16cc: 0x0808, 0x16cd: 0x0908, 0x16ce: 0x0c08, 0x16cf: 0x0c08, 0x16d0: 0x0c08, 0x16d1: 0x0c08, -+ 0x16d2: 0x0c08, 0x16d3: 0x0a08, 0x16d4: 0x0a08, 0x16d5: 0x0a08, 0x16d6: 0x0a08, 0x16d7: 0x0908, -+ 0x16d8: 0x0a08, 0x16d9: 0x0a08, 0x16da: 0x0a08, 0x16db: 0x0a08, 0x16dc: 0x0a08, 0x16dd: 0x0c08, -+ 0x16de: 0x0a08, 0x16df: 0x0a08, 0x16e0: 0x0a08, 0x16e1: 0x0c08, 0x16e2: 0x0808, 0x16e3: 0x0808, -+ 0x16e4: 0x0c08, 0x16e5: 0x3308, 0x16e6: 0x3308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040, -+ 0x16ea: 0x0040, 0x16eb: 0x0a18, 0x16ec: 0x0a18, 0x16ed: 0x0a18, 0x16ee: 0x0a18, 0x16ef: 0x0c18, -+ 0x16f0: 0x0818, 0x16f1: 0x0818, 0x16f2: 0x0818, 0x16f3: 0x0818, 0x16f4: 0x0818, 0x16f5: 0x0818, -+ 0x16f6: 0x0818, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040, -+ 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, - // Block 0x5c, offset 0x1700 -- 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x874d, 0x1703: 0x872d, 0x1704: 0x892d, 0x1705: 0x872d, -- 0x1706: 0x874d, 0x1707: 0x872d, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x894d, 0x170b: 0x874d, -- 0x170c: 0x896d, 0x170d: 0x892d, 0x170e: 0x896d, 0x170f: 0x874d, 0x1710: 0x0040, 0x1711: 0x0040, -- 0x1712: 0x898d, 0x1713: 0x89ad, 0x1714: 0x88ad, 0x1715: 0x896d, 0x1716: 0x892d, 0x1717: 0x896d, -- 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x89cd, 0x171b: 0x89ed, 0x171c: 0x89cd, 0x171d: 0x0040, -- 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb591, 0x1721: 0xb5a9, 0x1722: 0xb5c1, 0x1723: 0x8a0e, -- 0x1724: 0xb5d9, 0x1725: 0xb5f1, 0x1726: 0x8a2d, 0x1727: 0x0040, 0x1728: 0x8a4d, 0x1729: 0x8a6d, -- 0x172a: 0x8a8d, 0x172b: 0x8a6d, 0x172c: 0x8aad, 0x172d: 0x8acd, 0x172e: 0x8aed, 0x172f: 0x0040, -+ 0x1700: 0x0a08, 0x1701: 0x0c08, 0x1702: 0x0a08, 0x1703: 0x0c08, 0x1704: 0x0c08, 0x1705: 0x0c08, -+ 0x1706: 0x0a08, 0x1707: 0x0a08, 0x1708: 0x0a08, 0x1709: 0x0c08, 0x170a: 0x0a08, 0x170b: 0x0a08, -+ 0x170c: 0x0c08, 0x170d: 0x0a08, 0x170e: 0x0c08, 0x170f: 0x0c08, 0x1710: 0x0a08, 0x1711: 0x0c08, -+ 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040, -+ 0x1718: 0x0040, 0x1719: 0x0818, 0x171a: 0x0818, 0x171b: 0x0818, 0x171c: 0x0818, 0x171d: 0x0040, -+ 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040, -+ 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0c18, -+ 0x172a: 0x0c18, 0x172b: 0x0c18, 0x172c: 0x0c18, 0x172d: 0x0a18, 0x172e: 0x0a18, 0x172f: 0x0818, - 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, -- 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, -+ 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, - 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, - // Block 0x5d, offset 0x1740 -- 0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08, -- 0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808, -- 0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08, -- 0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908, -- 0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08, -- 0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808, -- 0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, -- 0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18, -- 0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818, -- 0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040, -- 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040, -+ 0x1740: 0x3308, 0x1741: 0x3308, 0x1742: 0x3008, 0x1743: 0x3008, 0x1744: 0x0040, 0x1745: 0x0008, -+ 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, -+ 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040, -+ 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, -+ 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, -+ 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, -+ 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040, -+ 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008, -+ 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008, -+ 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x3308, -+ 0x177c: 0x3308, 0x177d: 0x0008, 0x177e: 0x3008, 0x177f: 0x3008, - // Block 0x5e, offset 0x1780 -- 0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08, -- 0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08, -- 0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08, -- 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040, -- 0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040, -- 0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040, -- 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18, -- 0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818, -- 0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040, -+ 0x1780: 0x3308, 0x1781: 0x3008, 0x1782: 0x3008, 0x1783: 0x3008, 0x1784: 0x3008, 0x1785: 0x0040, -+ 0x1786: 0x0040, 0x1787: 0x3008, 0x1788: 0x3008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x3008, -+ 0x178c: 0x3008, 0x178d: 0x3808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040, -+ 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x3008, -+ 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008, -+ 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x3008, 0x17a3: 0x3008, -+ 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x3308, 0x17a7: 0x3308, 0x17a8: 0x3308, 0x17a9: 0x3308, -+ 0x17aa: 0x3308, 0x17ab: 0x3308, 0x17ac: 0x3308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040, -+ 0x17b0: 0x3308, 0x17b1: 0x3308, 0x17b2: 0x3308, 0x17b3: 0x3308, 0x17b4: 0x3308, 0x17b5: 0x0040, - 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, - 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, - // Block 0x5f, offset 0x17c0 -- 0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008, -- 0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008, -- 0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040, -- 0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008, -+ 0x17c0: 0x0008, 0x17c1: 0x0008, 0x17c2: 0x0008, 0x17c3: 0x0008, 0x17c4: 0x0008, 0x17c5: 0x0008, -+ 0x17c6: 0x0008, 0x17c7: 0x0040, 0x17c8: 0x0040, 0x17c9: 0x0008, 0x17ca: 0x0040, 0x17cb: 0x0040, -+ 0x17cc: 0x0008, 0x17cd: 0x0008, 0x17ce: 0x0008, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0008, -+ 0x17d2: 0x0008, 0x17d3: 0x0008, 0x17d4: 0x0040, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0040, - 0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008, - 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008, -- 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040, -+ 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0008, - 0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008, -- 0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008, -- 0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x3308, -- 0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008, -+ 0x17f0: 0x3008, 0x17f1: 0x3008, 0x17f2: 0x3008, 0x17f3: 0x3008, 0x17f4: 0x3008, 0x17f5: 0x3008, -+ 0x17f6: 0x0040, 0x17f7: 0x3008, 0x17f8: 0x3008, 0x17f9: 0x0040, 0x17fa: 0x0040, 0x17fb: 0x3308, -+ 0x17fc: 0x3308, 0x17fd: 0x3808, 0x17fe: 0x3b08, 0x17ff: 0x0008, - // Block 0x60, offset 0x1800 -- 0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040, -- 0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008, -- 0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040, -- 0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008, -- 0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008, -- 0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008, -- 0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308, -- 0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040, -- 0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040, -- 0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, -- 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, -+ 0x1800: 0x0019, 0x1801: 0x02e9, 0x1802: 0x03d9, 0x1803: 0x02f1, 0x1804: 0x02f9, 0x1805: 0x03f1, -+ 0x1806: 0x0309, 0x1807: 0x00a9, 0x1808: 0x0311, 0x1809: 0x00b1, 0x180a: 0x0319, 0x180b: 0x0101, -+ 0x180c: 0x0321, 0x180d: 0x0329, 0x180e: 0x0051, 0x180f: 0x0339, 0x1810: 0x0751, 0x1811: 0x00b9, -+ 0x1812: 0x0089, 0x1813: 0x0341, 0x1814: 0x0349, 0x1815: 0x0391, 0x1816: 0x00c1, 0x1817: 0x0109, -+ 0x1818: 0x00c9, 0x1819: 0x04b1, 0x181a: 0x0019, 0x181b: 0x02e9, 0x181c: 0x03d9, 0x181d: 0x02f1, -+ 0x181e: 0x02f9, 0x181f: 0x03f1, 0x1820: 0x0309, 0x1821: 0x00a9, 0x1822: 0x0311, 0x1823: 0x00b1, -+ 0x1824: 0x0319, 0x1825: 0x0101, 0x1826: 0x0321, 0x1827: 0x0329, 0x1828: 0x0051, 0x1829: 0x0339, -+ 0x182a: 0x0751, 0x182b: 0x00b9, 0x182c: 0x0089, 0x182d: 0x0341, 0x182e: 0x0349, 0x182f: 0x0391, -+ 0x1830: 0x00c1, 0x1831: 0x0109, 0x1832: 0x00c9, 0x1833: 0x04b1, 0x1834: 0x0019, 0x1835: 0x02e9, -+ 0x1836: 0x03d9, 0x1837: 0x02f1, 0x1838: 0x02f9, 0x1839: 0x03f1, 0x183a: 0x0309, 0x183b: 0x00a9, -+ 0x183c: 0x0311, 0x183d: 0x00b1, 0x183e: 0x0319, 0x183f: 0x0101, - // Block 0x61, offset 0x1840 -- 0x1840: 0x0008, 0x1841: 0x0008, 0x1842: 0x0008, 0x1843: 0x0008, 0x1844: 0x0008, 0x1845: 0x0008, -- 0x1846: 0x0008, 0x1847: 0x0040, 0x1848: 0x0040, 0x1849: 0x0008, 0x184a: 0x0040, 0x184b: 0x0040, -- 0x184c: 0x0008, 0x184d: 0x0008, 0x184e: 0x0008, 0x184f: 0x0008, 0x1850: 0x0008, 0x1851: 0x0008, -- 0x1852: 0x0008, 0x1853: 0x0008, 0x1854: 0x0040, 0x1855: 0x0008, 0x1856: 0x0008, 0x1857: 0x0040, -- 0x1858: 0x0008, 0x1859: 0x0008, 0x185a: 0x0008, 0x185b: 0x0008, 0x185c: 0x0008, 0x185d: 0x0008, -- 0x185e: 0x0008, 0x185f: 0x0008, 0x1860: 0x0008, 0x1861: 0x0008, 0x1862: 0x0008, 0x1863: 0x0008, -- 0x1864: 0x0008, 0x1865: 0x0008, 0x1866: 0x0008, 0x1867: 0x0008, 0x1868: 0x0008, 0x1869: 0x0008, -- 0x186a: 0x0008, 0x186b: 0x0008, 0x186c: 0x0008, 0x186d: 0x0008, 0x186e: 0x0008, 0x186f: 0x0008, -- 0x1870: 0x3008, 0x1871: 0x3008, 0x1872: 0x3008, 0x1873: 0x3008, 0x1874: 0x3008, 0x1875: 0x3008, -- 0x1876: 0x0040, 0x1877: 0x3008, 0x1878: 0x3008, 0x1879: 0x0040, 0x187a: 0x0040, 0x187b: 0x3308, -- 0x187c: 0x3308, 0x187d: 0x3808, 0x187e: 0x3b08, 0x187f: 0x0008, -+ 0x1840: 0x0321, 0x1841: 0x0329, 0x1842: 0x0051, 0x1843: 0x0339, 0x1844: 0x0751, 0x1845: 0x00b9, -+ 0x1846: 0x0089, 0x1847: 0x0341, 0x1848: 0x0349, 0x1849: 0x0391, 0x184a: 0x00c1, 0x184b: 0x0109, -+ 0x184c: 0x00c9, 0x184d: 0x04b1, 0x184e: 0x0019, 0x184f: 0x02e9, 0x1850: 0x03d9, 0x1851: 0x02f1, -+ 0x1852: 0x02f9, 0x1853: 0x03f1, 0x1854: 0x0309, 0x1855: 0x0040, 0x1856: 0x0311, 0x1857: 0x00b1, -+ 0x1858: 0x0319, 0x1859: 0x0101, 0x185a: 0x0321, 0x185b: 0x0329, 0x185c: 0x0051, 0x185d: 0x0339, -+ 0x185e: 0x0751, 0x185f: 0x00b9, 0x1860: 0x0089, 0x1861: 0x0341, 0x1862: 0x0349, 0x1863: 0x0391, -+ 0x1864: 0x00c1, 0x1865: 0x0109, 0x1866: 0x00c9, 0x1867: 0x04b1, 0x1868: 0x0019, 0x1869: 0x02e9, -+ 0x186a: 0x03d9, 0x186b: 0x02f1, 0x186c: 0x02f9, 0x186d: 0x03f1, 0x186e: 0x0309, 0x186f: 0x00a9, -+ 0x1870: 0x0311, 0x1871: 0x00b1, 0x1872: 0x0319, 0x1873: 0x0101, 0x1874: 0x0321, 0x1875: 0x0329, -+ 0x1876: 0x0051, 0x1877: 0x0339, 0x1878: 0x0751, 0x1879: 0x00b9, 0x187a: 0x0089, 0x187b: 0x0341, -+ 0x187c: 0x0349, 0x187d: 0x0391, 0x187e: 0x00c1, 0x187f: 0x0109, - // Block 0x62, offset 0x1880 -- 0x1880: 0x0039, 0x1881: 0x0ee9, 0x1882: 0x1159, 0x1883: 0x0ef9, 0x1884: 0x0f09, 0x1885: 0x1199, -- 0x1886: 0x0f31, 0x1887: 0x0249, 0x1888: 0x0f41, 0x1889: 0x0259, 0x188a: 0x0f51, 0x188b: 0x0359, -- 0x188c: 0x0f61, 0x188d: 0x0f71, 0x188e: 0x00d9, 0x188f: 0x0f99, 0x1890: 0x2039, 0x1891: 0x0269, -- 0x1892: 0x01d9, 0x1893: 0x0fa9, 0x1894: 0x0fb9, 0x1895: 0x1089, 0x1896: 0x0279, 0x1897: 0x0369, -- 0x1898: 0x0289, 0x1899: 0x13d1, 0x189a: 0x0039, 0x189b: 0x0ee9, 0x189c: 0x1159, 0x189d: 0x0ef9, -- 0x189e: 0x0f09, 0x189f: 0x1199, 0x18a0: 0x0f31, 0x18a1: 0x0249, 0x18a2: 0x0f41, 0x18a3: 0x0259, -- 0x18a4: 0x0f51, 0x18a5: 0x0359, 0x18a6: 0x0f61, 0x18a7: 0x0f71, 0x18a8: 0x00d9, 0x18a9: 0x0f99, -- 0x18aa: 0x2039, 0x18ab: 0x0269, 0x18ac: 0x01d9, 0x18ad: 0x0fa9, 0x18ae: 0x0fb9, 0x18af: 0x1089, -- 0x18b0: 0x0279, 0x18b1: 0x0369, 0x18b2: 0x0289, 0x18b3: 0x13d1, 0x18b4: 0x0039, 0x18b5: 0x0ee9, -- 0x18b6: 0x1159, 0x18b7: 0x0ef9, 0x18b8: 0x0f09, 0x18b9: 0x1199, 0x18ba: 0x0f31, 0x18bb: 0x0249, -- 0x18bc: 0x0f41, 0x18bd: 0x0259, 0x18be: 0x0f51, 0x18bf: 0x0359, -+ 0x1880: 0x00c9, 0x1881: 0x04b1, 0x1882: 0x0019, 0x1883: 0x02e9, 0x1884: 0x03d9, 0x1885: 0x02f1, -+ 0x1886: 0x02f9, 0x1887: 0x03f1, 0x1888: 0x0309, 0x1889: 0x00a9, 0x188a: 0x0311, 0x188b: 0x00b1, -+ 0x188c: 0x0319, 0x188d: 0x0101, 0x188e: 0x0321, 0x188f: 0x0329, 0x1890: 0x0051, 0x1891: 0x0339, -+ 0x1892: 0x0751, 0x1893: 0x00b9, 0x1894: 0x0089, 0x1895: 0x0341, 0x1896: 0x0349, 0x1897: 0x0391, -+ 0x1898: 0x00c1, 0x1899: 0x0109, 0x189a: 0x00c9, 0x189b: 0x04b1, 0x189c: 0x0019, 0x189d: 0x0040, -+ 0x189e: 0x03d9, 0x189f: 0x02f1, 0x18a0: 0x0040, 0x18a1: 0x0040, 0x18a2: 0x0309, 0x18a3: 0x0040, -+ 0x18a4: 0x0040, 0x18a5: 0x00b1, 0x18a6: 0x0319, 0x18a7: 0x0040, 0x18a8: 0x0040, 0x18a9: 0x0329, -+ 0x18aa: 0x0051, 0x18ab: 0x0339, 0x18ac: 0x0751, 0x18ad: 0x0040, 0x18ae: 0x0089, 0x18af: 0x0341, -+ 0x18b0: 0x0349, 0x18b1: 0x0391, 0x18b2: 0x00c1, 0x18b3: 0x0109, 0x18b4: 0x00c9, 0x18b5: 0x04b1, -+ 0x18b6: 0x0019, 0x18b7: 0x02e9, 0x18b8: 0x03d9, 0x18b9: 0x02f1, 0x18ba: 0x0040, 0x18bb: 0x03f1, -+ 0x18bc: 0x0040, 0x18bd: 0x00a9, 0x18be: 0x0311, 0x18bf: 0x00b1, - // Block 0x63, offset 0x18c0 -- 0x18c0: 0x0f61, 0x18c1: 0x0f71, 0x18c2: 0x00d9, 0x18c3: 0x0f99, 0x18c4: 0x2039, 0x18c5: 0x0269, -- 0x18c6: 0x01d9, 0x18c7: 0x0fa9, 0x18c8: 0x0fb9, 0x18c9: 0x1089, 0x18ca: 0x0279, 0x18cb: 0x0369, -- 0x18cc: 0x0289, 0x18cd: 0x13d1, 0x18ce: 0x0039, 0x18cf: 0x0ee9, 0x18d0: 0x1159, 0x18d1: 0x0ef9, -- 0x18d2: 0x0f09, 0x18d3: 0x1199, 0x18d4: 0x0f31, 0x18d5: 0x0040, 0x18d6: 0x0f41, 0x18d7: 0x0259, -- 0x18d8: 0x0f51, 0x18d9: 0x0359, 0x18da: 0x0f61, 0x18db: 0x0f71, 0x18dc: 0x00d9, 0x18dd: 0x0f99, -- 0x18de: 0x2039, 0x18df: 0x0269, 0x18e0: 0x01d9, 0x18e1: 0x0fa9, 0x18e2: 0x0fb9, 0x18e3: 0x1089, -- 0x18e4: 0x0279, 0x18e5: 0x0369, 0x18e6: 0x0289, 0x18e7: 0x13d1, 0x18e8: 0x0039, 0x18e9: 0x0ee9, -- 0x18ea: 0x1159, 0x18eb: 0x0ef9, 0x18ec: 0x0f09, 0x18ed: 0x1199, 0x18ee: 0x0f31, 0x18ef: 0x0249, -- 0x18f0: 0x0f41, 0x18f1: 0x0259, 0x18f2: 0x0f51, 0x18f3: 0x0359, 0x18f4: 0x0f61, 0x18f5: 0x0f71, -- 0x18f6: 0x00d9, 0x18f7: 0x0f99, 0x18f8: 0x2039, 0x18f9: 0x0269, 0x18fa: 0x01d9, 0x18fb: 0x0fa9, -- 0x18fc: 0x0fb9, 0x18fd: 0x1089, 0x18fe: 0x0279, 0x18ff: 0x0369, -+ 0x18c0: 0x0319, 0x18c1: 0x0101, 0x18c2: 0x0321, 0x18c3: 0x0329, 0x18c4: 0x0040, 0x18c5: 0x0339, -+ 0x18c6: 0x0751, 0x18c7: 0x00b9, 0x18c8: 0x0089, 0x18c9: 0x0341, 0x18ca: 0x0349, 0x18cb: 0x0391, -+ 0x18cc: 0x00c1, 0x18cd: 0x0109, 0x18ce: 0x00c9, 0x18cf: 0x04b1, 0x18d0: 0x0019, 0x18d1: 0x02e9, -+ 0x18d2: 0x03d9, 0x18d3: 0x02f1, 0x18d4: 0x02f9, 0x18d5: 0x03f1, 0x18d6: 0x0309, 0x18d7: 0x00a9, -+ 0x18d8: 0x0311, 0x18d9: 0x00b1, 0x18da: 0x0319, 0x18db: 0x0101, 0x18dc: 0x0321, 0x18dd: 0x0329, -+ 0x18de: 0x0051, 0x18df: 0x0339, 0x18e0: 0x0751, 0x18e1: 0x00b9, 0x18e2: 0x0089, 0x18e3: 0x0341, -+ 0x18e4: 0x0349, 0x18e5: 0x0391, 0x18e6: 0x00c1, 0x18e7: 0x0109, 0x18e8: 0x00c9, 0x18e9: 0x04b1, -+ 0x18ea: 0x0019, 0x18eb: 0x02e9, 0x18ec: 0x03d9, 0x18ed: 0x02f1, 0x18ee: 0x02f9, 0x18ef: 0x03f1, -+ 0x18f0: 0x0309, 0x18f1: 0x00a9, 0x18f2: 0x0311, 0x18f3: 0x00b1, 0x18f4: 0x0319, 0x18f5: 0x0101, -+ 0x18f6: 0x0321, 0x18f7: 0x0329, 0x18f8: 0x0051, 0x18f9: 0x0339, 0x18fa: 0x0751, 0x18fb: 0x00b9, -+ 0x18fc: 0x0089, 0x18fd: 0x0341, 0x18fe: 0x0349, 0x18ff: 0x0391, - // Block 0x64, offset 0x1900 -- 0x1900: 0x0289, 0x1901: 0x13d1, 0x1902: 0x0039, 0x1903: 0x0ee9, 0x1904: 0x1159, 0x1905: 0x0ef9, -- 0x1906: 0x0f09, 0x1907: 0x1199, 0x1908: 0x0f31, 0x1909: 0x0249, 0x190a: 0x0f41, 0x190b: 0x0259, -- 0x190c: 0x0f51, 0x190d: 0x0359, 0x190e: 0x0f61, 0x190f: 0x0f71, 0x1910: 0x00d9, 0x1911: 0x0f99, -- 0x1912: 0x2039, 0x1913: 0x0269, 0x1914: 0x01d9, 0x1915: 0x0fa9, 0x1916: 0x0fb9, 0x1917: 0x1089, -- 0x1918: 0x0279, 0x1919: 0x0369, 0x191a: 0x0289, 0x191b: 0x13d1, 0x191c: 0x0039, 0x191d: 0x0040, -- 0x191e: 0x1159, 0x191f: 0x0ef9, 0x1920: 0x0040, 0x1921: 0x0040, 0x1922: 0x0f31, 0x1923: 0x0040, -- 0x1924: 0x0040, 0x1925: 0x0259, 0x1926: 0x0f51, 0x1927: 0x0040, 0x1928: 0x0040, 0x1929: 0x0f71, -- 0x192a: 0x00d9, 0x192b: 0x0f99, 0x192c: 0x2039, 0x192d: 0x0040, 0x192e: 0x01d9, 0x192f: 0x0fa9, -- 0x1930: 0x0fb9, 0x1931: 0x1089, 0x1932: 0x0279, 0x1933: 0x0369, 0x1934: 0x0289, 0x1935: 0x13d1, -- 0x1936: 0x0039, 0x1937: 0x0ee9, 0x1938: 0x1159, 0x1939: 0x0ef9, 0x193a: 0x0040, 0x193b: 0x1199, -- 0x193c: 0x0040, 0x193d: 0x0249, 0x193e: 0x0f41, 0x193f: 0x0259, -+ 0x1900: 0x00c1, 0x1901: 0x0109, 0x1902: 0x00c9, 0x1903: 0x04b1, 0x1904: 0x0019, 0x1905: 0x02e9, -+ 0x1906: 0x0040, 0x1907: 0x02f1, 0x1908: 0x02f9, 0x1909: 0x03f1, 0x190a: 0x0309, 0x190b: 0x0040, -+ 0x190c: 0x0040, 0x190d: 0x00b1, 0x190e: 0x0319, 0x190f: 0x0101, 0x1910: 0x0321, 0x1911: 0x0329, -+ 0x1912: 0x0051, 0x1913: 0x0339, 0x1914: 0x0751, 0x1915: 0x0040, 0x1916: 0x0089, 0x1917: 0x0341, -+ 0x1918: 0x0349, 0x1919: 0x0391, 0x191a: 0x00c1, 0x191b: 0x0109, 0x191c: 0x00c9, 0x191d: 0x0040, -+ 0x191e: 0x0019, 0x191f: 0x02e9, 0x1920: 0x03d9, 0x1921: 0x02f1, 0x1922: 0x02f9, 0x1923: 0x03f1, -+ 0x1924: 0x0309, 0x1925: 0x00a9, 0x1926: 0x0311, 0x1927: 0x00b1, 0x1928: 0x0319, 0x1929: 0x0101, -+ 0x192a: 0x0321, 0x192b: 0x0329, 0x192c: 0x0051, 0x192d: 0x0339, 0x192e: 0x0751, 0x192f: 0x00b9, -+ 0x1930: 0x0089, 0x1931: 0x0341, 0x1932: 0x0349, 0x1933: 0x0391, 0x1934: 0x00c1, 0x1935: 0x0109, -+ 0x1936: 0x00c9, 0x1937: 0x04b1, 0x1938: 0x0019, 0x1939: 0x02e9, 0x193a: 0x0040, 0x193b: 0x02f1, -+ 0x193c: 0x02f9, 0x193d: 0x03f1, 0x193e: 0x0309, 0x193f: 0x0040, - // Block 0x65, offset 0x1940 -- 0x1940: 0x0f51, 0x1941: 0x0359, 0x1942: 0x0f61, 0x1943: 0x0f71, 0x1944: 0x0040, 0x1945: 0x0f99, -- 0x1946: 0x2039, 0x1947: 0x0269, 0x1948: 0x01d9, 0x1949: 0x0fa9, 0x194a: 0x0fb9, 0x194b: 0x1089, -- 0x194c: 0x0279, 0x194d: 0x0369, 0x194e: 0x0289, 0x194f: 0x13d1, 0x1950: 0x0039, 0x1951: 0x0ee9, -- 0x1952: 0x1159, 0x1953: 0x0ef9, 0x1954: 0x0f09, 0x1955: 0x1199, 0x1956: 0x0f31, 0x1957: 0x0249, -- 0x1958: 0x0f41, 0x1959: 0x0259, 0x195a: 0x0f51, 0x195b: 0x0359, 0x195c: 0x0f61, 0x195d: 0x0f71, -- 0x195e: 0x00d9, 0x195f: 0x0f99, 0x1960: 0x2039, 0x1961: 0x0269, 0x1962: 0x01d9, 0x1963: 0x0fa9, -- 0x1964: 0x0fb9, 0x1965: 0x1089, 0x1966: 0x0279, 0x1967: 0x0369, 0x1968: 0x0289, 0x1969: 0x13d1, -- 0x196a: 0x0039, 0x196b: 0x0ee9, 0x196c: 0x1159, 0x196d: 0x0ef9, 0x196e: 0x0f09, 0x196f: 0x1199, -- 0x1970: 0x0f31, 0x1971: 0x0249, 0x1972: 0x0f41, 0x1973: 0x0259, 0x1974: 0x0f51, 0x1975: 0x0359, -- 0x1976: 0x0f61, 0x1977: 0x0f71, 0x1978: 0x00d9, 0x1979: 0x0f99, 0x197a: 0x2039, 0x197b: 0x0269, -- 0x197c: 0x01d9, 0x197d: 0x0fa9, 0x197e: 0x0fb9, 0x197f: 0x1089, -+ 0x1940: 0x0311, 0x1941: 0x00b1, 0x1942: 0x0319, 0x1943: 0x0101, 0x1944: 0x0321, 0x1945: 0x0040, -+ 0x1946: 0x0051, 0x1947: 0x0040, 0x1948: 0x0040, 0x1949: 0x0040, 0x194a: 0x0089, 0x194b: 0x0341, -+ 0x194c: 0x0349, 0x194d: 0x0391, 0x194e: 0x00c1, 0x194f: 0x0109, 0x1950: 0x00c9, 0x1951: 0x0040, -+ 0x1952: 0x0019, 0x1953: 0x02e9, 0x1954: 0x03d9, 0x1955: 0x02f1, 0x1956: 0x02f9, 0x1957: 0x03f1, -+ 0x1958: 0x0309, 0x1959: 0x00a9, 0x195a: 0x0311, 0x195b: 0x00b1, 0x195c: 0x0319, 0x195d: 0x0101, -+ 0x195e: 0x0321, 0x195f: 0x0329, 0x1960: 0x0051, 0x1961: 0x0339, 0x1962: 0x0751, 0x1963: 0x00b9, -+ 0x1964: 0x0089, 0x1965: 0x0341, 0x1966: 0x0349, 0x1967: 0x0391, 0x1968: 0x00c1, 0x1969: 0x0109, -+ 0x196a: 0x00c9, 0x196b: 0x04b1, 0x196c: 0x0019, 0x196d: 0x02e9, 0x196e: 0x03d9, 0x196f: 0x02f1, -+ 0x1970: 0x02f9, 0x1971: 0x03f1, 0x1972: 0x0309, 0x1973: 0x00a9, 0x1974: 0x0311, 0x1975: 0x00b1, -+ 0x1976: 0x0319, 0x1977: 0x0101, 0x1978: 0x0321, 0x1979: 0x0329, 0x197a: 0x0051, 0x197b: 0x0339, -+ 0x197c: 0x0751, 0x197d: 0x00b9, 0x197e: 0x0089, 0x197f: 0x0341, - // Block 0x66, offset 0x1980 -- 0x1980: 0x0279, 0x1981: 0x0369, 0x1982: 0x0289, 0x1983: 0x13d1, 0x1984: 0x0039, 0x1985: 0x0ee9, -- 0x1986: 0x0040, 0x1987: 0x0ef9, 0x1988: 0x0f09, 0x1989: 0x1199, 0x198a: 0x0f31, 0x198b: 0x0040, -- 0x198c: 0x0040, 0x198d: 0x0259, 0x198e: 0x0f51, 0x198f: 0x0359, 0x1990: 0x0f61, 0x1991: 0x0f71, -- 0x1992: 0x00d9, 0x1993: 0x0f99, 0x1994: 0x2039, 0x1995: 0x0040, 0x1996: 0x01d9, 0x1997: 0x0fa9, -- 0x1998: 0x0fb9, 0x1999: 0x1089, 0x199a: 0x0279, 0x199b: 0x0369, 0x199c: 0x0289, 0x199d: 0x0040, -- 0x199e: 0x0039, 0x199f: 0x0ee9, 0x19a0: 0x1159, 0x19a1: 0x0ef9, 0x19a2: 0x0f09, 0x19a3: 0x1199, -- 0x19a4: 0x0f31, 0x19a5: 0x0249, 0x19a6: 0x0f41, 0x19a7: 0x0259, 0x19a8: 0x0f51, 0x19a9: 0x0359, -- 0x19aa: 0x0f61, 0x19ab: 0x0f71, 0x19ac: 0x00d9, 0x19ad: 0x0f99, 0x19ae: 0x2039, 0x19af: 0x0269, -- 0x19b0: 0x01d9, 0x19b1: 0x0fa9, 0x19b2: 0x0fb9, 0x19b3: 0x1089, 0x19b4: 0x0279, 0x19b5: 0x0369, -- 0x19b6: 0x0289, 0x19b7: 0x13d1, 0x19b8: 0x0039, 0x19b9: 0x0ee9, 0x19ba: 0x0040, 0x19bb: 0x0ef9, -- 0x19bc: 0x0f09, 0x19bd: 0x1199, 0x19be: 0x0f31, 0x19bf: 0x0040, -+ 0x1980: 0x0349, 0x1981: 0x0391, 0x1982: 0x00c1, 0x1983: 0x0109, 0x1984: 0x00c9, 0x1985: 0x04b1, -+ 0x1986: 0x0019, 0x1987: 0x02e9, 0x1988: 0x03d9, 0x1989: 0x02f1, 0x198a: 0x02f9, 0x198b: 0x03f1, -+ 0x198c: 0x0309, 0x198d: 0x00a9, 0x198e: 0x0311, 0x198f: 0x00b1, 0x1990: 0x0319, 0x1991: 0x0101, -+ 0x1992: 0x0321, 0x1993: 0x0329, 0x1994: 0x0051, 0x1995: 0x0339, 0x1996: 0x0751, 0x1997: 0x00b9, -+ 0x1998: 0x0089, 0x1999: 0x0341, 0x199a: 0x0349, 0x199b: 0x0391, 0x199c: 0x00c1, 0x199d: 0x0109, -+ 0x199e: 0x00c9, 0x199f: 0x04b1, 0x19a0: 0x0019, 0x19a1: 0x02e9, 0x19a2: 0x03d9, 0x19a3: 0x02f1, -+ 0x19a4: 0x02f9, 0x19a5: 0x03f1, 0x19a6: 0x0309, 0x19a7: 0x00a9, 0x19a8: 0x0311, 0x19a9: 0x00b1, -+ 0x19aa: 0x0319, 0x19ab: 0x0101, 0x19ac: 0x0321, 0x19ad: 0x0329, 0x19ae: 0x0051, 0x19af: 0x0339, -+ 0x19b0: 0x0751, 0x19b1: 0x00b9, 0x19b2: 0x0089, 0x19b3: 0x0341, 0x19b4: 0x0349, 0x19b5: 0x0391, -+ 0x19b6: 0x00c1, 0x19b7: 0x0109, 0x19b8: 0x00c9, 0x19b9: 0x04b1, 0x19ba: 0x0019, 0x19bb: 0x02e9, -+ 0x19bc: 0x03d9, 0x19bd: 0x02f1, 0x19be: 0x02f9, 0x19bf: 0x03f1, - // Block 0x67, offset 0x19c0 -- 0x19c0: 0x0f41, 0x19c1: 0x0259, 0x19c2: 0x0f51, 0x19c3: 0x0359, 0x19c4: 0x0f61, 0x19c5: 0x0040, -- 0x19c6: 0x00d9, 0x19c7: 0x0040, 0x19c8: 0x0040, 0x19c9: 0x0040, 0x19ca: 0x01d9, 0x19cb: 0x0fa9, -- 0x19cc: 0x0fb9, 0x19cd: 0x1089, 0x19ce: 0x0279, 0x19cf: 0x0369, 0x19d0: 0x0289, 0x19d1: 0x0040, -- 0x19d2: 0x0039, 0x19d3: 0x0ee9, 0x19d4: 0x1159, 0x19d5: 0x0ef9, 0x19d6: 0x0f09, 0x19d7: 0x1199, -- 0x19d8: 0x0f31, 0x19d9: 0x0249, 0x19da: 0x0f41, 0x19db: 0x0259, 0x19dc: 0x0f51, 0x19dd: 0x0359, -- 0x19de: 0x0f61, 0x19df: 0x0f71, 0x19e0: 0x00d9, 0x19e1: 0x0f99, 0x19e2: 0x2039, 0x19e3: 0x0269, -- 0x19e4: 0x01d9, 0x19e5: 0x0fa9, 0x19e6: 0x0fb9, 0x19e7: 0x1089, 0x19e8: 0x0279, 0x19e9: 0x0369, -- 0x19ea: 0x0289, 0x19eb: 0x13d1, 0x19ec: 0x0039, 0x19ed: 0x0ee9, 0x19ee: 0x1159, 0x19ef: 0x0ef9, -- 0x19f0: 0x0f09, 0x19f1: 0x1199, 0x19f2: 0x0f31, 0x19f3: 0x0249, 0x19f4: 0x0f41, 0x19f5: 0x0259, -- 0x19f6: 0x0f51, 0x19f7: 0x0359, 0x19f8: 0x0f61, 0x19f9: 0x0f71, 0x19fa: 0x00d9, 0x19fb: 0x0f99, -- 0x19fc: 0x2039, 0x19fd: 0x0269, 0x19fe: 0x01d9, 0x19ff: 0x0fa9, -+ 0x19c0: 0x0309, 0x19c1: 0x00a9, 0x19c2: 0x0311, 0x19c3: 0x00b1, 0x19c4: 0x0319, 0x19c5: 0x0101, -+ 0x19c6: 0x0321, 0x19c7: 0x0329, 0x19c8: 0x0051, 0x19c9: 0x0339, 0x19ca: 0x0751, 0x19cb: 0x00b9, -+ 0x19cc: 0x0089, 0x19cd: 0x0341, 0x19ce: 0x0349, 0x19cf: 0x0391, 0x19d0: 0x00c1, 0x19d1: 0x0109, -+ 0x19d2: 0x00c9, 0x19d3: 0x04b1, 0x19d4: 0x0019, 0x19d5: 0x02e9, 0x19d6: 0x03d9, 0x19d7: 0x02f1, -+ 0x19d8: 0x02f9, 0x19d9: 0x03f1, 0x19da: 0x0309, 0x19db: 0x00a9, 0x19dc: 0x0311, 0x19dd: 0x00b1, -+ 0x19de: 0x0319, 0x19df: 0x0101, 0x19e0: 0x0321, 0x19e1: 0x0329, 0x19e2: 0x0051, 0x19e3: 0x0339, -+ 0x19e4: 0x0751, 0x19e5: 0x00b9, 0x19e6: 0x0089, 0x19e7: 0x0341, 0x19e8: 0x0349, 0x19e9: 0x0391, -+ 0x19ea: 0x00c1, 0x19eb: 0x0109, 0x19ec: 0x00c9, 0x19ed: 0x04b1, 0x19ee: 0x0019, 0x19ef: 0x02e9, -+ 0x19f0: 0x03d9, 0x19f1: 0x02f1, 0x19f2: 0x02f9, 0x19f3: 0x03f1, 0x19f4: 0x0309, 0x19f5: 0x00a9, -+ 0x19f6: 0x0311, 0x19f7: 0x00b1, 0x19f8: 0x0319, 0x19f9: 0x0101, 0x19fa: 0x0321, 0x19fb: 0x0329, -+ 0x19fc: 0x0051, 0x19fd: 0x0339, 0x19fe: 0x0751, 0x19ff: 0x00b9, - // Block 0x68, offset 0x1a00 -- 0x1a00: 0x0fb9, 0x1a01: 0x1089, 0x1a02: 0x0279, 0x1a03: 0x0369, 0x1a04: 0x0289, 0x1a05: 0x13d1, -- 0x1a06: 0x0039, 0x1a07: 0x0ee9, 0x1a08: 0x1159, 0x1a09: 0x0ef9, 0x1a0a: 0x0f09, 0x1a0b: 0x1199, -- 0x1a0c: 0x0f31, 0x1a0d: 0x0249, 0x1a0e: 0x0f41, 0x1a0f: 0x0259, 0x1a10: 0x0f51, 0x1a11: 0x0359, -- 0x1a12: 0x0f61, 0x1a13: 0x0f71, 0x1a14: 0x00d9, 0x1a15: 0x0f99, 0x1a16: 0x2039, 0x1a17: 0x0269, -- 0x1a18: 0x01d9, 0x1a19: 0x0fa9, 0x1a1a: 0x0fb9, 0x1a1b: 0x1089, 0x1a1c: 0x0279, 0x1a1d: 0x0369, -- 0x1a1e: 0x0289, 0x1a1f: 0x13d1, 0x1a20: 0x0039, 0x1a21: 0x0ee9, 0x1a22: 0x1159, 0x1a23: 0x0ef9, -- 0x1a24: 0x0f09, 0x1a25: 0x1199, 0x1a26: 0x0f31, 0x1a27: 0x0249, 0x1a28: 0x0f41, 0x1a29: 0x0259, -- 0x1a2a: 0x0f51, 0x1a2b: 0x0359, 0x1a2c: 0x0f61, 0x1a2d: 0x0f71, 0x1a2e: 0x00d9, 0x1a2f: 0x0f99, -- 0x1a30: 0x2039, 0x1a31: 0x0269, 0x1a32: 0x01d9, 0x1a33: 0x0fa9, 0x1a34: 0x0fb9, 0x1a35: 0x1089, -- 0x1a36: 0x0279, 0x1a37: 0x0369, 0x1a38: 0x0289, 0x1a39: 0x13d1, 0x1a3a: 0x0039, 0x1a3b: 0x0ee9, -- 0x1a3c: 0x1159, 0x1a3d: 0x0ef9, 0x1a3e: 0x0f09, 0x1a3f: 0x1199, -+ 0x1a00: 0x0089, 0x1a01: 0x0341, 0x1a02: 0x0349, 0x1a03: 0x0391, 0x1a04: 0x00c1, 0x1a05: 0x0109, -+ 0x1a06: 0x00c9, 0x1a07: 0x04b1, 0x1a08: 0x0019, 0x1a09: 0x02e9, 0x1a0a: 0x03d9, 0x1a0b: 0x02f1, -+ 0x1a0c: 0x02f9, 0x1a0d: 0x03f1, 0x1a0e: 0x0309, 0x1a0f: 0x00a9, 0x1a10: 0x0311, 0x1a11: 0x00b1, -+ 0x1a12: 0x0319, 0x1a13: 0x0101, 0x1a14: 0x0321, 0x1a15: 0x0329, 0x1a16: 0x0051, 0x1a17: 0x0339, -+ 0x1a18: 0x0751, 0x1a19: 0x00b9, 0x1a1a: 0x0089, 0x1a1b: 0x0341, 0x1a1c: 0x0349, 0x1a1d: 0x0391, -+ 0x1a1e: 0x00c1, 0x1a1f: 0x0109, 0x1a20: 0x00c9, 0x1a21: 0x04b1, 0x1a22: 0x0019, 0x1a23: 0x02e9, -+ 0x1a24: 0x03d9, 0x1a25: 0x02f1, 0x1a26: 0x02f9, 0x1a27: 0x03f1, 0x1a28: 0x0309, 0x1a29: 0x00a9, -+ 0x1a2a: 0x0311, 0x1a2b: 0x00b1, 0x1a2c: 0x0319, 0x1a2d: 0x0101, 0x1a2e: 0x0321, 0x1a2f: 0x0329, -+ 0x1a30: 0x0051, 0x1a31: 0x0339, 0x1a32: 0x0751, 0x1a33: 0x00b9, 0x1a34: 0x0089, 0x1a35: 0x0341, -+ 0x1a36: 0x0349, 0x1a37: 0x0391, 0x1a38: 0x00c1, 0x1a39: 0x0109, 0x1a3a: 0x00c9, 0x1a3b: 0x04b1, -+ 0x1a3c: 0x0019, 0x1a3d: 0x02e9, 0x1a3e: 0x03d9, 0x1a3f: 0x02f1, - // Block 0x69, offset 0x1a40 -- 0x1a40: 0x0f31, 0x1a41: 0x0249, 0x1a42: 0x0f41, 0x1a43: 0x0259, 0x1a44: 0x0f51, 0x1a45: 0x0359, -- 0x1a46: 0x0f61, 0x1a47: 0x0f71, 0x1a48: 0x00d9, 0x1a49: 0x0f99, 0x1a4a: 0x2039, 0x1a4b: 0x0269, -- 0x1a4c: 0x01d9, 0x1a4d: 0x0fa9, 0x1a4e: 0x0fb9, 0x1a4f: 0x1089, 0x1a50: 0x0279, 0x1a51: 0x0369, -- 0x1a52: 0x0289, 0x1a53: 0x13d1, 0x1a54: 0x0039, 0x1a55: 0x0ee9, 0x1a56: 0x1159, 0x1a57: 0x0ef9, -- 0x1a58: 0x0f09, 0x1a59: 0x1199, 0x1a5a: 0x0f31, 0x1a5b: 0x0249, 0x1a5c: 0x0f41, 0x1a5d: 0x0259, -- 0x1a5e: 0x0f51, 0x1a5f: 0x0359, 0x1a60: 0x0f61, 0x1a61: 0x0f71, 0x1a62: 0x00d9, 0x1a63: 0x0f99, -- 0x1a64: 0x2039, 0x1a65: 0x0269, 0x1a66: 0x01d9, 0x1a67: 0x0fa9, 0x1a68: 0x0fb9, 0x1a69: 0x1089, -- 0x1a6a: 0x0279, 0x1a6b: 0x0369, 0x1a6c: 0x0289, 0x1a6d: 0x13d1, 0x1a6e: 0x0039, 0x1a6f: 0x0ee9, -- 0x1a70: 0x1159, 0x1a71: 0x0ef9, 0x1a72: 0x0f09, 0x1a73: 0x1199, 0x1a74: 0x0f31, 0x1a75: 0x0249, -- 0x1a76: 0x0f41, 0x1a77: 0x0259, 0x1a78: 0x0f51, 0x1a79: 0x0359, 0x1a7a: 0x0f61, 0x1a7b: 0x0f71, -- 0x1a7c: 0x00d9, 0x1a7d: 0x0f99, 0x1a7e: 0x2039, 0x1a7f: 0x0269, -+ 0x1a40: 0x02f9, 0x1a41: 0x03f1, 0x1a42: 0x0309, 0x1a43: 0x00a9, 0x1a44: 0x0311, 0x1a45: 0x00b1, -+ 0x1a46: 0x0319, 0x1a47: 0x0101, 0x1a48: 0x0321, 0x1a49: 0x0329, 0x1a4a: 0x0051, 0x1a4b: 0x0339, -+ 0x1a4c: 0x0751, 0x1a4d: 0x00b9, 0x1a4e: 0x0089, 0x1a4f: 0x0341, 0x1a50: 0x0349, 0x1a51: 0x0391, -+ 0x1a52: 0x00c1, 0x1a53: 0x0109, 0x1a54: 0x00c9, 0x1a55: 0x04b1, 0x1a56: 0x0019, 0x1a57: 0x02e9, -+ 0x1a58: 0x03d9, 0x1a59: 0x02f1, 0x1a5a: 0x02f9, 0x1a5b: 0x03f1, 0x1a5c: 0x0309, 0x1a5d: 0x00a9, -+ 0x1a5e: 0x0311, 0x1a5f: 0x00b1, 0x1a60: 0x0319, 0x1a61: 0x0101, 0x1a62: 0x0321, 0x1a63: 0x0329, -+ 0x1a64: 0x0051, 0x1a65: 0x0339, 0x1a66: 0x0751, 0x1a67: 0x00b9, 0x1a68: 0x0089, 0x1a69: 0x0341, -+ 0x1a6a: 0x0349, 0x1a6b: 0x0391, 0x1a6c: 0x00c1, 0x1a6d: 0x0109, 0x1a6e: 0x00c9, 0x1a6f: 0x04b1, -+ 0x1a70: 0x0019, 0x1a71: 0x02e9, 0x1a72: 0x03d9, 0x1a73: 0x02f1, 0x1a74: 0x02f9, 0x1a75: 0x03f1, -+ 0x1a76: 0x0309, 0x1a77: 0x00a9, 0x1a78: 0x0311, 0x1a79: 0x00b1, 0x1a7a: 0x0319, 0x1a7b: 0x0101, -+ 0x1a7c: 0x0321, 0x1a7d: 0x0329, 0x1a7e: 0x0051, 0x1a7f: 0x0339, - // Block 0x6a, offset 0x1a80 -- 0x1a80: 0x01d9, 0x1a81: 0x0fa9, 0x1a82: 0x0fb9, 0x1a83: 0x1089, 0x1a84: 0x0279, 0x1a85: 0x0369, -- 0x1a86: 0x0289, 0x1a87: 0x13d1, 0x1a88: 0x0039, 0x1a89: 0x0ee9, 0x1a8a: 0x1159, 0x1a8b: 0x0ef9, -- 0x1a8c: 0x0f09, 0x1a8d: 0x1199, 0x1a8e: 0x0f31, 0x1a8f: 0x0249, 0x1a90: 0x0f41, 0x1a91: 0x0259, -- 0x1a92: 0x0f51, 0x1a93: 0x0359, 0x1a94: 0x0f61, 0x1a95: 0x0f71, 0x1a96: 0x00d9, 0x1a97: 0x0f99, -- 0x1a98: 0x2039, 0x1a99: 0x0269, 0x1a9a: 0x01d9, 0x1a9b: 0x0fa9, 0x1a9c: 0x0fb9, 0x1a9d: 0x1089, -- 0x1a9e: 0x0279, 0x1a9f: 0x0369, 0x1aa0: 0x0289, 0x1aa1: 0x13d1, 0x1aa2: 0x0039, 0x1aa3: 0x0ee9, -- 0x1aa4: 0x1159, 0x1aa5: 0x0ef9, 0x1aa6: 0x0f09, 0x1aa7: 0x1199, 0x1aa8: 0x0f31, 0x1aa9: 0x0249, -- 0x1aaa: 0x0f41, 0x1aab: 0x0259, 0x1aac: 0x0f51, 0x1aad: 0x0359, 0x1aae: 0x0f61, 0x1aaf: 0x0f71, -- 0x1ab0: 0x00d9, 0x1ab1: 0x0f99, 0x1ab2: 0x2039, 0x1ab3: 0x0269, 0x1ab4: 0x01d9, 0x1ab5: 0x0fa9, -- 0x1ab6: 0x0fb9, 0x1ab7: 0x1089, 0x1ab8: 0x0279, 0x1ab9: 0x0369, 0x1aba: 0x0289, 0x1abb: 0x13d1, -- 0x1abc: 0x0039, 0x1abd: 0x0ee9, 0x1abe: 0x1159, 0x1abf: 0x0ef9, -+ 0x1a80: 0x0751, 0x1a81: 0x00b9, 0x1a82: 0x0089, 0x1a83: 0x0341, 0x1a84: 0x0349, 0x1a85: 0x0391, -+ 0x1a86: 0x00c1, 0x1a87: 0x0109, 0x1a88: 0x00c9, 0x1a89: 0x04b1, 0x1a8a: 0x0019, 0x1a8b: 0x02e9, -+ 0x1a8c: 0x03d9, 0x1a8d: 0x02f1, 0x1a8e: 0x02f9, 0x1a8f: 0x03f1, 0x1a90: 0x0309, 0x1a91: 0x00a9, -+ 0x1a92: 0x0311, 0x1a93: 0x00b1, 0x1a94: 0x0319, 0x1a95: 0x0101, 0x1a96: 0x0321, 0x1a97: 0x0329, -+ 0x1a98: 0x0051, 0x1a99: 0x0339, 0x1a9a: 0x0751, 0x1a9b: 0x00b9, 0x1a9c: 0x0089, 0x1a9d: 0x0341, -+ 0x1a9e: 0x0349, 0x1a9f: 0x0391, 0x1aa0: 0x00c1, 0x1aa1: 0x0109, 0x1aa2: 0x00c9, 0x1aa3: 0x04b1, -+ 0x1aa4: 0x2279, 0x1aa5: 0x2281, 0x1aa6: 0x0040, 0x1aa7: 0x0040, 0x1aa8: 0x2289, 0x1aa9: 0x0399, -+ 0x1aaa: 0x03a1, 0x1aab: 0x03a9, 0x1aac: 0x2291, 0x1aad: 0x2299, 0x1aae: 0x22a1, 0x1aaf: 0x04d1, -+ 0x1ab0: 0x05f9, 0x1ab1: 0x22a9, 0x1ab2: 0x22b1, 0x1ab3: 0x22b9, 0x1ab4: 0x22c1, 0x1ab5: 0x22c9, -+ 0x1ab6: 0x22d1, 0x1ab7: 0x0799, 0x1ab8: 0x03c1, 0x1ab9: 0x04d1, 0x1aba: 0x22d9, 0x1abb: 0x22e1, -+ 0x1abc: 0x22e9, 0x1abd: 0x03b1, 0x1abe: 0x03b9, 0x1abf: 0x22f1, - // Block 0x6b, offset 0x1ac0 -- 0x1ac0: 0x0f09, 0x1ac1: 0x1199, 0x1ac2: 0x0f31, 0x1ac3: 0x0249, 0x1ac4: 0x0f41, 0x1ac5: 0x0259, -- 0x1ac6: 0x0f51, 0x1ac7: 0x0359, 0x1ac8: 0x0f61, 0x1ac9: 0x0f71, 0x1aca: 0x00d9, 0x1acb: 0x0f99, -- 0x1acc: 0x2039, 0x1acd: 0x0269, 0x1ace: 0x01d9, 0x1acf: 0x0fa9, 0x1ad0: 0x0fb9, 0x1ad1: 0x1089, -- 0x1ad2: 0x0279, 0x1ad3: 0x0369, 0x1ad4: 0x0289, 0x1ad5: 0x13d1, 0x1ad6: 0x0039, 0x1ad7: 0x0ee9, -- 0x1ad8: 0x1159, 0x1ad9: 0x0ef9, 0x1ada: 0x0f09, 0x1adb: 0x1199, 0x1adc: 0x0f31, 0x1add: 0x0249, -- 0x1ade: 0x0f41, 0x1adf: 0x0259, 0x1ae0: 0x0f51, 0x1ae1: 0x0359, 0x1ae2: 0x0f61, 0x1ae3: 0x0f71, -- 0x1ae4: 0x00d9, 0x1ae5: 0x0f99, 0x1ae6: 0x2039, 0x1ae7: 0x0269, 0x1ae8: 0x01d9, 0x1ae9: 0x0fa9, -- 0x1aea: 0x0fb9, 0x1aeb: 0x1089, 0x1aec: 0x0279, 0x1aed: 0x0369, 0x1aee: 0x0289, 0x1aef: 0x13d1, -- 0x1af0: 0x0039, 0x1af1: 0x0ee9, 0x1af2: 0x1159, 0x1af3: 0x0ef9, 0x1af4: 0x0f09, 0x1af5: 0x1199, -- 0x1af6: 0x0f31, 0x1af7: 0x0249, 0x1af8: 0x0f41, 0x1af9: 0x0259, 0x1afa: 0x0f51, 0x1afb: 0x0359, -- 0x1afc: 0x0f61, 0x1afd: 0x0f71, 0x1afe: 0x00d9, 0x1aff: 0x0f99, -+ 0x1ac0: 0x0769, 0x1ac1: 0x22f9, 0x1ac2: 0x2289, 0x1ac3: 0x0399, 0x1ac4: 0x03a1, 0x1ac5: 0x03a9, -+ 0x1ac6: 0x2291, 0x1ac7: 0x2299, 0x1ac8: 0x22a1, 0x1ac9: 0x04d1, 0x1aca: 0x05f9, 0x1acb: 0x22a9, -+ 0x1acc: 0x22b1, 0x1acd: 0x22b9, 0x1ace: 0x22c1, 0x1acf: 0x22c9, 0x1ad0: 0x22d1, 0x1ad1: 0x0799, -+ 0x1ad2: 0x03c1, 0x1ad3: 0x22d9, 0x1ad4: 0x22d9, 0x1ad5: 0x22e1, 0x1ad6: 0x22e9, 0x1ad7: 0x03b1, -+ 0x1ad8: 0x03b9, 0x1ad9: 0x22f1, 0x1ada: 0x0769, 0x1adb: 0x2301, 0x1adc: 0x2291, 0x1add: 0x04d1, -+ 0x1ade: 0x22a9, 0x1adf: 0x03b1, 0x1ae0: 0x03c1, 0x1ae1: 0x0799, 0x1ae2: 0x2289, 0x1ae3: 0x0399, -+ 0x1ae4: 0x03a1, 0x1ae5: 0x03a9, 0x1ae6: 0x2291, 0x1ae7: 0x2299, 0x1ae8: 0x22a1, 0x1ae9: 0x04d1, -+ 0x1aea: 0x05f9, 0x1aeb: 0x22a9, 0x1aec: 0x22b1, 0x1aed: 0x22b9, 0x1aee: 0x22c1, 0x1aef: 0x22c9, -+ 0x1af0: 0x22d1, 0x1af1: 0x0799, 0x1af2: 0x03c1, 0x1af3: 0x04d1, 0x1af4: 0x22d9, 0x1af5: 0x22e1, -+ 0x1af6: 0x22e9, 0x1af7: 0x03b1, 0x1af8: 0x03b9, 0x1af9: 0x22f1, 0x1afa: 0x0769, 0x1afb: 0x22f9, -+ 0x1afc: 0x2289, 0x1afd: 0x0399, 0x1afe: 0x03a1, 0x1aff: 0x03a9, - // Block 0x6c, offset 0x1b00 -- 0x1b00: 0x2039, 0x1b01: 0x0269, 0x1b02: 0x01d9, 0x1b03: 0x0fa9, 0x1b04: 0x0fb9, 0x1b05: 0x1089, -- 0x1b06: 0x0279, 0x1b07: 0x0369, 0x1b08: 0x0289, 0x1b09: 0x13d1, 0x1b0a: 0x0039, 0x1b0b: 0x0ee9, -- 0x1b0c: 0x1159, 0x1b0d: 0x0ef9, 0x1b0e: 0x0f09, 0x1b0f: 0x1199, 0x1b10: 0x0f31, 0x1b11: 0x0249, -- 0x1b12: 0x0f41, 0x1b13: 0x0259, 0x1b14: 0x0f51, 0x1b15: 0x0359, 0x1b16: 0x0f61, 0x1b17: 0x0f71, -- 0x1b18: 0x00d9, 0x1b19: 0x0f99, 0x1b1a: 0x2039, 0x1b1b: 0x0269, 0x1b1c: 0x01d9, 0x1b1d: 0x0fa9, -- 0x1b1e: 0x0fb9, 0x1b1f: 0x1089, 0x1b20: 0x0279, 0x1b21: 0x0369, 0x1b22: 0x0289, 0x1b23: 0x13d1, -- 0x1b24: 0xbad1, 0x1b25: 0xbae9, 0x1b26: 0x0040, 0x1b27: 0x0040, 0x1b28: 0xbb01, 0x1b29: 0x1099, -- 0x1b2a: 0x10b1, 0x1b2b: 0x10c9, 0x1b2c: 0xbb19, 0x1b2d: 0xbb31, 0x1b2e: 0xbb49, 0x1b2f: 0x1429, -- 0x1b30: 0x1a31, 0x1b31: 0xbb61, 0x1b32: 0xbb79, 0x1b33: 0xbb91, 0x1b34: 0xbba9, 0x1b35: 0xbbc1, -- 0x1b36: 0xbbd9, 0x1b37: 0x2109, 0x1b38: 0x1111, 0x1b39: 0x1429, 0x1b3a: 0xbbf1, 0x1b3b: 0xbc09, -- 0x1b3c: 0xbc21, 0x1b3d: 0x10e1, 0x1b3e: 0x10f9, 0x1b3f: 0xbc39, -+ 0x1b00: 0x2291, 0x1b01: 0x2299, 0x1b02: 0x22a1, 0x1b03: 0x04d1, 0x1b04: 0x05f9, 0x1b05: 0x22a9, -+ 0x1b06: 0x22b1, 0x1b07: 0x22b9, 0x1b08: 0x22c1, 0x1b09: 0x22c9, 0x1b0a: 0x22d1, 0x1b0b: 0x0799, -+ 0x1b0c: 0x03c1, 0x1b0d: 0x22d9, 0x1b0e: 0x22d9, 0x1b0f: 0x22e1, 0x1b10: 0x22e9, 0x1b11: 0x03b1, -+ 0x1b12: 0x03b9, 0x1b13: 0x22f1, 0x1b14: 0x0769, 0x1b15: 0x2301, 0x1b16: 0x2291, 0x1b17: 0x04d1, -+ 0x1b18: 0x22a9, 0x1b19: 0x03b1, 0x1b1a: 0x03c1, 0x1b1b: 0x0799, 0x1b1c: 0x2289, 0x1b1d: 0x0399, -+ 0x1b1e: 0x03a1, 0x1b1f: 0x03a9, 0x1b20: 0x2291, 0x1b21: 0x2299, 0x1b22: 0x22a1, 0x1b23: 0x04d1, -+ 0x1b24: 0x05f9, 0x1b25: 0x22a9, 0x1b26: 0x22b1, 0x1b27: 0x22b9, 0x1b28: 0x22c1, 0x1b29: 0x22c9, -+ 0x1b2a: 0x22d1, 0x1b2b: 0x0799, 0x1b2c: 0x03c1, 0x1b2d: 0x04d1, 0x1b2e: 0x22d9, 0x1b2f: 0x22e1, -+ 0x1b30: 0x22e9, 0x1b31: 0x03b1, 0x1b32: 0x03b9, 0x1b33: 0x22f1, 0x1b34: 0x0769, 0x1b35: 0x22f9, -+ 0x1b36: 0x2289, 0x1b37: 0x0399, 0x1b38: 0x03a1, 0x1b39: 0x03a9, 0x1b3a: 0x2291, 0x1b3b: 0x2299, -+ 0x1b3c: 0x22a1, 0x1b3d: 0x04d1, 0x1b3e: 0x05f9, 0x1b3f: 0x22a9, - // Block 0x6d, offset 0x1b40 -- 0x1b40: 0x2079, 0x1b41: 0xbc51, 0x1b42: 0xbb01, 0x1b43: 0x1099, 0x1b44: 0x10b1, 0x1b45: 0x10c9, -- 0x1b46: 0xbb19, 0x1b47: 0xbb31, 0x1b48: 0xbb49, 0x1b49: 0x1429, 0x1b4a: 0x1a31, 0x1b4b: 0xbb61, -- 0x1b4c: 0xbb79, 0x1b4d: 0xbb91, 0x1b4e: 0xbba9, 0x1b4f: 0xbbc1, 0x1b50: 0xbbd9, 0x1b51: 0x2109, -- 0x1b52: 0x1111, 0x1b53: 0xbbf1, 0x1b54: 0xbbf1, 0x1b55: 0xbc09, 0x1b56: 0xbc21, 0x1b57: 0x10e1, -- 0x1b58: 0x10f9, 0x1b59: 0xbc39, 0x1b5a: 0x2079, 0x1b5b: 0xbc71, 0x1b5c: 0xbb19, 0x1b5d: 0x1429, -- 0x1b5e: 0xbb61, 0x1b5f: 0x10e1, 0x1b60: 0x1111, 0x1b61: 0x2109, 0x1b62: 0xbb01, 0x1b63: 0x1099, -- 0x1b64: 0x10b1, 0x1b65: 0x10c9, 0x1b66: 0xbb19, 0x1b67: 0xbb31, 0x1b68: 0xbb49, 0x1b69: 0x1429, -- 0x1b6a: 0x1a31, 0x1b6b: 0xbb61, 0x1b6c: 0xbb79, 0x1b6d: 0xbb91, 0x1b6e: 0xbba9, 0x1b6f: 0xbbc1, -- 0x1b70: 0xbbd9, 0x1b71: 0x2109, 0x1b72: 0x1111, 0x1b73: 0x1429, 0x1b74: 0xbbf1, 0x1b75: 0xbc09, -- 0x1b76: 0xbc21, 0x1b77: 0x10e1, 0x1b78: 0x10f9, 0x1b79: 0xbc39, 0x1b7a: 0x2079, 0x1b7b: 0xbc51, -- 0x1b7c: 0xbb01, 0x1b7d: 0x1099, 0x1b7e: 0x10b1, 0x1b7f: 0x10c9, -+ 0x1b40: 0x22b1, 0x1b41: 0x22b9, 0x1b42: 0x22c1, 0x1b43: 0x22c9, 0x1b44: 0x22d1, 0x1b45: 0x0799, -+ 0x1b46: 0x03c1, 0x1b47: 0x22d9, 0x1b48: 0x22d9, 0x1b49: 0x22e1, 0x1b4a: 0x22e9, 0x1b4b: 0x03b1, -+ 0x1b4c: 0x03b9, 0x1b4d: 0x22f1, 0x1b4e: 0x0769, 0x1b4f: 0x2301, 0x1b50: 0x2291, 0x1b51: 0x04d1, -+ 0x1b52: 0x22a9, 0x1b53: 0x03b1, 0x1b54: 0x03c1, 0x1b55: 0x0799, 0x1b56: 0x2289, 0x1b57: 0x0399, -+ 0x1b58: 0x03a1, 0x1b59: 0x03a9, 0x1b5a: 0x2291, 0x1b5b: 0x2299, 0x1b5c: 0x22a1, 0x1b5d: 0x04d1, -+ 0x1b5e: 0x05f9, 0x1b5f: 0x22a9, 0x1b60: 0x22b1, 0x1b61: 0x22b9, 0x1b62: 0x22c1, 0x1b63: 0x22c9, -+ 0x1b64: 0x22d1, 0x1b65: 0x0799, 0x1b66: 0x03c1, 0x1b67: 0x04d1, 0x1b68: 0x22d9, 0x1b69: 0x22e1, -+ 0x1b6a: 0x22e9, 0x1b6b: 0x03b1, 0x1b6c: 0x03b9, 0x1b6d: 0x22f1, 0x1b6e: 0x0769, 0x1b6f: 0x22f9, -+ 0x1b70: 0x2289, 0x1b71: 0x0399, 0x1b72: 0x03a1, 0x1b73: 0x03a9, 0x1b74: 0x2291, 0x1b75: 0x2299, -+ 0x1b76: 0x22a1, 0x1b77: 0x04d1, 0x1b78: 0x05f9, 0x1b79: 0x22a9, 0x1b7a: 0x22b1, 0x1b7b: 0x22b9, -+ 0x1b7c: 0x22c1, 0x1b7d: 0x22c9, 0x1b7e: 0x22d1, 0x1b7f: 0x0799, - // Block 0x6e, offset 0x1b80 -- 0x1b80: 0xbb19, 0x1b81: 0xbb31, 0x1b82: 0xbb49, 0x1b83: 0x1429, 0x1b84: 0x1a31, 0x1b85: 0xbb61, -- 0x1b86: 0xbb79, 0x1b87: 0xbb91, 0x1b88: 0xbba9, 0x1b89: 0xbbc1, 0x1b8a: 0xbbd9, 0x1b8b: 0x2109, -- 0x1b8c: 0x1111, 0x1b8d: 0xbbf1, 0x1b8e: 0xbbf1, 0x1b8f: 0xbc09, 0x1b90: 0xbc21, 0x1b91: 0x10e1, -- 0x1b92: 0x10f9, 0x1b93: 0xbc39, 0x1b94: 0x2079, 0x1b95: 0xbc71, 0x1b96: 0xbb19, 0x1b97: 0x1429, -- 0x1b98: 0xbb61, 0x1b99: 0x10e1, 0x1b9a: 0x1111, 0x1b9b: 0x2109, 0x1b9c: 0xbb01, 0x1b9d: 0x1099, -- 0x1b9e: 0x10b1, 0x1b9f: 0x10c9, 0x1ba0: 0xbb19, 0x1ba1: 0xbb31, 0x1ba2: 0xbb49, 0x1ba3: 0x1429, -- 0x1ba4: 0x1a31, 0x1ba5: 0xbb61, 0x1ba6: 0xbb79, 0x1ba7: 0xbb91, 0x1ba8: 0xbba9, 0x1ba9: 0xbbc1, -- 0x1baa: 0xbbd9, 0x1bab: 0x2109, 0x1bac: 0x1111, 0x1bad: 0x1429, 0x1bae: 0xbbf1, 0x1baf: 0xbc09, -- 0x1bb0: 0xbc21, 0x1bb1: 0x10e1, 0x1bb2: 0x10f9, 0x1bb3: 0xbc39, 0x1bb4: 0x2079, 0x1bb5: 0xbc51, -- 0x1bb6: 0xbb01, 0x1bb7: 0x1099, 0x1bb8: 0x10b1, 0x1bb9: 0x10c9, 0x1bba: 0xbb19, 0x1bbb: 0xbb31, -- 0x1bbc: 0xbb49, 0x1bbd: 0x1429, 0x1bbe: 0x1a31, 0x1bbf: 0xbb61, -+ 0x1b80: 0x03c1, 0x1b81: 0x22d9, 0x1b82: 0x22d9, 0x1b83: 0x22e1, 0x1b84: 0x22e9, 0x1b85: 0x03b1, -+ 0x1b86: 0x03b9, 0x1b87: 0x22f1, 0x1b88: 0x0769, 0x1b89: 0x2301, 0x1b8a: 0x2291, 0x1b8b: 0x04d1, -+ 0x1b8c: 0x22a9, 0x1b8d: 0x03b1, 0x1b8e: 0x03c1, 0x1b8f: 0x0799, 0x1b90: 0x2289, 0x1b91: 0x0399, -+ 0x1b92: 0x03a1, 0x1b93: 0x03a9, 0x1b94: 0x2291, 0x1b95: 0x2299, 0x1b96: 0x22a1, 0x1b97: 0x04d1, -+ 0x1b98: 0x05f9, 0x1b99: 0x22a9, 0x1b9a: 0x22b1, 0x1b9b: 0x22b9, 0x1b9c: 0x22c1, 0x1b9d: 0x22c9, -+ 0x1b9e: 0x22d1, 0x1b9f: 0x0799, 0x1ba0: 0x03c1, 0x1ba1: 0x04d1, 0x1ba2: 0x22d9, 0x1ba3: 0x22e1, -+ 0x1ba4: 0x22e9, 0x1ba5: 0x03b1, 0x1ba6: 0x03b9, 0x1ba7: 0x22f1, 0x1ba8: 0x0769, 0x1ba9: 0x22f9, -+ 0x1baa: 0x2289, 0x1bab: 0x0399, 0x1bac: 0x03a1, 0x1bad: 0x03a9, 0x1bae: 0x2291, 0x1baf: 0x2299, -+ 0x1bb0: 0x22a1, 0x1bb1: 0x04d1, 0x1bb2: 0x05f9, 0x1bb3: 0x22a9, 0x1bb4: 0x22b1, 0x1bb5: 0x22b9, -+ 0x1bb6: 0x22c1, 0x1bb7: 0x22c9, 0x1bb8: 0x22d1, 0x1bb9: 0x0799, 0x1bba: 0x03c1, 0x1bbb: 0x22d9, -+ 0x1bbc: 0x22d9, 0x1bbd: 0x22e1, 0x1bbe: 0x22e9, 0x1bbf: 0x03b1, - // Block 0x6f, offset 0x1bc0 -- 0x1bc0: 0xbb79, 0x1bc1: 0xbb91, 0x1bc2: 0xbba9, 0x1bc3: 0xbbc1, 0x1bc4: 0xbbd9, 0x1bc5: 0x2109, -- 0x1bc6: 0x1111, 0x1bc7: 0xbbf1, 0x1bc8: 0xbbf1, 0x1bc9: 0xbc09, 0x1bca: 0xbc21, 0x1bcb: 0x10e1, -- 0x1bcc: 0x10f9, 0x1bcd: 0xbc39, 0x1bce: 0x2079, 0x1bcf: 0xbc71, 0x1bd0: 0xbb19, 0x1bd1: 0x1429, -- 0x1bd2: 0xbb61, 0x1bd3: 0x10e1, 0x1bd4: 0x1111, 0x1bd5: 0x2109, 0x1bd6: 0xbb01, 0x1bd7: 0x1099, -- 0x1bd8: 0x10b1, 0x1bd9: 0x10c9, 0x1bda: 0xbb19, 0x1bdb: 0xbb31, 0x1bdc: 0xbb49, 0x1bdd: 0x1429, -- 0x1bde: 0x1a31, 0x1bdf: 0xbb61, 0x1be0: 0xbb79, 0x1be1: 0xbb91, 0x1be2: 0xbba9, 0x1be3: 0xbbc1, -- 0x1be4: 0xbbd9, 0x1be5: 0x2109, 0x1be6: 0x1111, 0x1be7: 0x1429, 0x1be8: 0xbbf1, 0x1be9: 0xbc09, -- 0x1bea: 0xbc21, 0x1beb: 0x10e1, 0x1bec: 0x10f9, 0x1bed: 0xbc39, 0x1bee: 0x2079, 0x1bef: 0xbc51, -- 0x1bf0: 0xbb01, 0x1bf1: 0x1099, 0x1bf2: 0x10b1, 0x1bf3: 0x10c9, 0x1bf4: 0xbb19, 0x1bf5: 0xbb31, -- 0x1bf6: 0xbb49, 0x1bf7: 0x1429, 0x1bf8: 0x1a31, 0x1bf9: 0xbb61, 0x1bfa: 0xbb79, 0x1bfb: 0xbb91, -- 0x1bfc: 0xbba9, 0x1bfd: 0xbbc1, 0x1bfe: 0xbbd9, 0x1bff: 0x2109, -+ 0x1bc0: 0x03b9, 0x1bc1: 0x22f1, 0x1bc2: 0x0769, 0x1bc3: 0x2301, 0x1bc4: 0x2291, 0x1bc5: 0x04d1, -+ 0x1bc6: 0x22a9, 0x1bc7: 0x03b1, 0x1bc8: 0x03c1, 0x1bc9: 0x0799, 0x1bca: 0x2309, 0x1bcb: 0x2309, -+ 0x1bcc: 0x0040, 0x1bcd: 0x0040, 0x1bce: 0x06e1, 0x1bcf: 0x0049, 0x1bd0: 0x0029, 0x1bd1: 0x0031, -+ 0x1bd2: 0x06e9, 0x1bd3: 0x06f1, 0x1bd4: 0x06f9, 0x1bd5: 0x0701, 0x1bd6: 0x0709, 0x1bd7: 0x0711, -+ 0x1bd8: 0x06e1, 0x1bd9: 0x0049, 0x1bda: 0x0029, 0x1bdb: 0x0031, 0x1bdc: 0x06e9, 0x1bdd: 0x06f1, -+ 0x1bde: 0x06f9, 0x1bdf: 0x0701, 0x1be0: 0x0709, 0x1be1: 0x0711, 0x1be2: 0x06e1, 0x1be3: 0x0049, -+ 0x1be4: 0x0029, 0x1be5: 0x0031, 0x1be6: 0x06e9, 0x1be7: 0x06f1, 0x1be8: 0x06f9, 0x1be9: 0x0701, -+ 0x1bea: 0x0709, 0x1beb: 0x0711, 0x1bec: 0x06e1, 0x1bed: 0x0049, 0x1bee: 0x0029, 0x1bef: 0x0031, -+ 0x1bf0: 0x06e9, 0x1bf1: 0x06f1, 0x1bf2: 0x06f9, 0x1bf3: 0x0701, 0x1bf4: 0x0709, 0x1bf5: 0x0711, -+ 0x1bf6: 0x06e1, 0x1bf7: 0x0049, 0x1bf8: 0x0029, 0x1bf9: 0x0031, 0x1bfa: 0x06e9, 0x1bfb: 0x06f1, -+ 0x1bfc: 0x06f9, 0x1bfd: 0x0701, 0x1bfe: 0x0709, 0x1bff: 0x0711, - // Block 0x70, offset 0x1c00 -- 0x1c00: 0x1111, 0x1c01: 0xbbf1, 0x1c02: 0xbbf1, 0x1c03: 0xbc09, 0x1c04: 0xbc21, 0x1c05: 0x10e1, -- 0x1c06: 0x10f9, 0x1c07: 0xbc39, 0x1c08: 0x2079, 0x1c09: 0xbc71, 0x1c0a: 0xbb19, 0x1c0b: 0x1429, -- 0x1c0c: 0xbb61, 0x1c0d: 0x10e1, 0x1c0e: 0x1111, 0x1c0f: 0x2109, 0x1c10: 0xbb01, 0x1c11: 0x1099, -- 0x1c12: 0x10b1, 0x1c13: 0x10c9, 0x1c14: 0xbb19, 0x1c15: 0xbb31, 0x1c16: 0xbb49, 0x1c17: 0x1429, -- 0x1c18: 0x1a31, 0x1c19: 0xbb61, 0x1c1a: 0xbb79, 0x1c1b: 0xbb91, 0x1c1c: 0xbba9, 0x1c1d: 0xbbc1, -- 0x1c1e: 0xbbd9, 0x1c1f: 0x2109, 0x1c20: 0x1111, 0x1c21: 0x1429, 0x1c22: 0xbbf1, 0x1c23: 0xbc09, -- 0x1c24: 0xbc21, 0x1c25: 0x10e1, 0x1c26: 0x10f9, 0x1c27: 0xbc39, 0x1c28: 0x2079, 0x1c29: 0xbc51, -- 0x1c2a: 0xbb01, 0x1c2b: 0x1099, 0x1c2c: 0x10b1, 0x1c2d: 0x10c9, 0x1c2e: 0xbb19, 0x1c2f: 0xbb31, -- 0x1c30: 0xbb49, 0x1c31: 0x1429, 0x1c32: 0x1a31, 0x1c33: 0xbb61, 0x1c34: 0xbb79, 0x1c35: 0xbb91, -- 0x1c36: 0xbba9, 0x1c37: 0xbbc1, 0x1c38: 0xbbd9, 0x1c39: 0x2109, 0x1c3a: 0x1111, 0x1c3b: 0xbbf1, -- 0x1c3c: 0xbbf1, 0x1c3d: 0xbc09, 0x1c3e: 0xbc21, 0x1c3f: 0x10e1, -+ 0x1c00: 0xe115, 0x1c01: 0xe115, 0x1c02: 0xe135, 0x1c03: 0xe135, 0x1c04: 0xe115, 0x1c05: 0xe115, -+ 0x1c06: 0xe175, 0x1c07: 0xe175, 0x1c08: 0xe115, 0x1c09: 0xe115, 0x1c0a: 0xe135, 0x1c0b: 0xe135, -+ 0x1c0c: 0xe115, 0x1c0d: 0xe115, 0x1c0e: 0xe1f5, 0x1c0f: 0xe1f5, 0x1c10: 0xe115, 0x1c11: 0xe115, -+ 0x1c12: 0xe135, 0x1c13: 0xe135, 0x1c14: 0xe115, 0x1c15: 0xe115, 0x1c16: 0xe175, 0x1c17: 0xe175, -+ 0x1c18: 0xe115, 0x1c19: 0xe115, 0x1c1a: 0xe135, 0x1c1b: 0xe135, 0x1c1c: 0xe115, 0x1c1d: 0xe115, -+ 0x1c1e: 0x8b3d, 0x1c1f: 0x8b3d, 0x1c20: 0x04b5, 0x1c21: 0x04b5, 0x1c22: 0x0a08, 0x1c23: 0x0a08, -+ 0x1c24: 0x0a08, 0x1c25: 0x0a08, 0x1c26: 0x0a08, 0x1c27: 0x0a08, 0x1c28: 0x0a08, 0x1c29: 0x0a08, -+ 0x1c2a: 0x0a08, 0x1c2b: 0x0a08, 0x1c2c: 0x0a08, 0x1c2d: 0x0a08, 0x1c2e: 0x0a08, 0x1c2f: 0x0a08, -+ 0x1c30: 0x0a08, 0x1c31: 0x0a08, 0x1c32: 0x0a08, 0x1c33: 0x0a08, 0x1c34: 0x0a08, 0x1c35: 0x0a08, -+ 0x1c36: 0x0a08, 0x1c37: 0x0a08, 0x1c38: 0x0a08, 0x1c39: 0x0a08, 0x1c3a: 0x0a08, 0x1c3b: 0x0a08, -+ 0x1c3c: 0x0a08, 0x1c3d: 0x0a08, 0x1c3e: 0x0a08, 0x1c3f: 0x0a08, - // Block 0x71, offset 0x1c40 -- 0x1c40: 0x10f9, 0x1c41: 0xbc39, 0x1c42: 0x2079, 0x1c43: 0xbc71, 0x1c44: 0xbb19, 0x1c45: 0x1429, -- 0x1c46: 0xbb61, 0x1c47: 0x10e1, 0x1c48: 0x1111, 0x1c49: 0x2109, 0x1c4a: 0xbc91, 0x1c4b: 0xbc91, -- 0x1c4c: 0x0040, 0x1c4d: 0x0040, 0x1c4e: 0x1f41, 0x1c4f: 0x00c9, 0x1c50: 0x0069, 0x1c51: 0x0079, -- 0x1c52: 0x1f51, 0x1c53: 0x1f61, 0x1c54: 0x1f71, 0x1c55: 0x1f81, 0x1c56: 0x1f91, 0x1c57: 0x1fa1, -- 0x1c58: 0x1f41, 0x1c59: 0x00c9, 0x1c5a: 0x0069, 0x1c5b: 0x0079, 0x1c5c: 0x1f51, 0x1c5d: 0x1f61, -- 0x1c5e: 0x1f71, 0x1c5f: 0x1f81, 0x1c60: 0x1f91, 0x1c61: 0x1fa1, 0x1c62: 0x1f41, 0x1c63: 0x00c9, -- 0x1c64: 0x0069, 0x1c65: 0x0079, 0x1c66: 0x1f51, 0x1c67: 0x1f61, 0x1c68: 0x1f71, 0x1c69: 0x1f81, -- 0x1c6a: 0x1f91, 0x1c6b: 0x1fa1, 0x1c6c: 0x1f41, 0x1c6d: 0x00c9, 0x1c6e: 0x0069, 0x1c6f: 0x0079, -- 0x1c70: 0x1f51, 0x1c71: 0x1f61, 0x1c72: 0x1f71, 0x1c73: 0x1f81, 0x1c74: 0x1f91, 0x1c75: 0x1fa1, -- 0x1c76: 0x1f41, 0x1c77: 0x00c9, 0x1c78: 0x0069, 0x1c79: 0x0079, 0x1c7a: 0x1f51, 0x1c7b: 0x1f61, -- 0x1c7c: 0x1f71, 0x1c7d: 0x1f81, 0x1c7e: 0x1f91, 0x1c7f: 0x1fa1, -+ 0x1c40: 0x20b1, 0x1c41: 0x20b9, 0x1c42: 0x20d9, 0x1c43: 0x20f1, 0x1c44: 0x0040, 0x1c45: 0x2189, -+ 0x1c46: 0x2109, 0x1c47: 0x20e1, 0x1c48: 0x2131, 0x1c49: 0x2191, 0x1c4a: 0x2161, 0x1c4b: 0x2169, -+ 0x1c4c: 0x2171, 0x1c4d: 0x2179, 0x1c4e: 0x2111, 0x1c4f: 0x2141, 0x1c50: 0x2151, 0x1c51: 0x2121, -+ 0x1c52: 0x2159, 0x1c53: 0x2101, 0x1c54: 0x2119, 0x1c55: 0x20c9, 0x1c56: 0x20d1, 0x1c57: 0x20e9, -+ 0x1c58: 0x20f9, 0x1c59: 0x2129, 0x1c5a: 0x2139, 0x1c5b: 0x2149, 0x1c5c: 0x2311, 0x1c5d: 0x1689, -+ 0x1c5e: 0x2319, 0x1c5f: 0x2321, 0x1c60: 0x0040, 0x1c61: 0x20b9, 0x1c62: 0x20d9, 0x1c63: 0x0040, -+ 0x1c64: 0x2181, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0x20e1, 0x1c68: 0x0040, 0x1c69: 0x2191, -+ 0x1c6a: 0x2161, 0x1c6b: 0x2169, 0x1c6c: 0x2171, 0x1c6d: 0x2179, 0x1c6e: 0x2111, 0x1c6f: 0x2141, -+ 0x1c70: 0x2151, 0x1c71: 0x2121, 0x1c72: 0x2159, 0x1c73: 0x0040, 0x1c74: 0x2119, 0x1c75: 0x20c9, -+ 0x1c76: 0x20d1, 0x1c77: 0x20e9, 0x1c78: 0x0040, 0x1c79: 0x2129, 0x1c7a: 0x0040, 0x1c7b: 0x2149, -+ 0x1c7c: 0x0040, 0x1c7d: 0x0040, 0x1c7e: 0x0040, 0x1c7f: 0x0040, - // Block 0x72, offset 0x1c80 -- 0x1c80: 0xe115, 0x1c81: 0xe115, 0x1c82: 0xe135, 0x1c83: 0xe135, 0x1c84: 0xe115, 0x1c85: 0xe115, -- 0x1c86: 0xe175, 0x1c87: 0xe175, 0x1c88: 0xe115, 0x1c89: 0xe115, 0x1c8a: 0xe135, 0x1c8b: 0xe135, -- 0x1c8c: 0xe115, 0x1c8d: 0xe115, 0x1c8e: 0xe1f5, 0x1c8f: 0xe1f5, 0x1c90: 0xe115, 0x1c91: 0xe115, -- 0x1c92: 0xe135, 0x1c93: 0xe135, 0x1c94: 0xe115, 0x1c95: 0xe115, 0x1c96: 0xe175, 0x1c97: 0xe175, -- 0x1c98: 0xe115, 0x1c99: 0xe115, 0x1c9a: 0xe135, 0x1c9b: 0xe135, 0x1c9c: 0xe115, 0x1c9d: 0xe115, -- 0x1c9e: 0x8b3d, 0x1c9f: 0x8b3d, 0x1ca0: 0x04b5, 0x1ca1: 0x04b5, 0x1ca2: 0x0a08, 0x1ca3: 0x0a08, -- 0x1ca4: 0x0a08, 0x1ca5: 0x0a08, 0x1ca6: 0x0a08, 0x1ca7: 0x0a08, 0x1ca8: 0x0a08, 0x1ca9: 0x0a08, -- 0x1caa: 0x0a08, 0x1cab: 0x0a08, 0x1cac: 0x0a08, 0x1cad: 0x0a08, 0x1cae: 0x0a08, 0x1caf: 0x0a08, -- 0x1cb0: 0x0a08, 0x1cb1: 0x0a08, 0x1cb2: 0x0a08, 0x1cb3: 0x0a08, 0x1cb4: 0x0a08, 0x1cb5: 0x0a08, -- 0x1cb6: 0x0a08, 0x1cb7: 0x0a08, 0x1cb8: 0x0a08, 0x1cb9: 0x0a08, 0x1cba: 0x0a08, 0x1cbb: 0x0a08, -- 0x1cbc: 0x0a08, 0x1cbd: 0x0a08, 0x1cbe: 0x0a08, 0x1cbf: 0x0a08, -+ 0x1c80: 0x0040, 0x1c81: 0x0040, 0x1c82: 0x20d9, 0x1c83: 0x0040, 0x1c84: 0x0040, 0x1c85: 0x0040, -+ 0x1c86: 0x0040, 0x1c87: 0x20e1, 0x1c88: 0x0040, 0x1c89: 0x2191, 0x1c8a: 0x0040, 0x1c8b: 0x2169, -+ 0x1c8c: 0x0040, 0x1c8d: 0x2179, 0x1c8e: 0x2111, 0x1c8f: 0x2141, 0x1c90: 0x0040, 0x1c91: 0x2121, -+ 0x1c92: 0x2159, 0x1c93: 0x0040, 0x1c94: 0x2119, 0x1c95: 0x0040, 0x1c96: 0x0040, 0x1c97: 0x20e9, -+ 0x1c98: 0x0040, 0x1c99: 0x2129, 0x1c9a: 0x0040, 0x1c9b: 0x2149, 0x1c9c: 0x0040, 0x1c9d: 0x1689, -+ 0x1c9e: 0x0040, 0x1c9f: 0x2321, 0x1ca0: 0x0040, 0x1ca1: 0x20b9, 0x1ca2: 0x20d9, 0x1ca3: 0x0040, -+ 0x1ca4: 0x2181, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0x20e1, 0x1ca8: 0x2131, 0x1ca9: 0x2191, -+ 0x1caa: 0x2161, 0x1cab: 0x0040, 0x1cac: 0x2171, 0x1cad: 0x2179, 0x1cae: 0x2111, 0x1caf: 0x2141, -+ 0x1cb0: 0x2151, 0x1cb1: 0x2121, 0x1cb2: 0x2159, 0x1cb3: 0x0040, 0x1cb4: 0x2119, 0x1cb5: 0x20c9, -+ 0x1cb6: 0x20d1, 0x1cb7: 0x20e9, 0x1cb8: 0x0040, 0x1cb9: 0x2129, 0x1cba: 0x2139, 0x1cbb: 0x2149, -+ 0x1cbc: 0x2311, 0x1cbd: 0x0040, 0x1cbe: 0x2319, 0x1cbf: 0x0040, - // Block 0x73, offset 0x1cc0 -- 0x1cc0: 0xb1d9, 0x1cc1: 0xb1f1, 0x1cc2: 0xb251, 0x1cc3: 0xb299, 0x1cc4: 0x0040, 0x1cc5: 0xb461, -- 0x1cc6: 0xb2e1, 0x1cc7: 0xb269, 0x1cc8: 0xb359, 0x1cc9: 0xb479, 0x1cca: 0xb3e9, 0x1ccb: 0xb401, -- 0x1ccc: 0xb419, 0x1ccd: 0xb431, 0x1cce: 0xb2f9, 0x1ccf: 0xb389, 0x1cd0: 0xb3b9, 0x1cd1: 0xb329, -- 0x1cd2: 0xb3d1, 0x1cd3: 0xb2c9, 0x1cd4: 0xb311, 0x1cd5: 0xb221, 0x1cd6: 0xb239, 0x1cd7: 0xb281, -- 0x1cd8: 0xb2b1, 0x1cd9: 0xb341, 0x1cda: 0xb371, 0x1cdb: 0xb3a1, 0x1cdc: 0xbca9, 0x1cdd: 0x7999, -- 0x1cde: 0xbcc1, 0x1cdf: 0xbcd9, 0x1ce0: 0x0040, 0x1ce1: 0xb1f1, 0x1ce2: 0xb251, 0x1ce3: 0x0040, -- 0x1ce4: 0xb449, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb269, 0x1ce8: 0x0040, 0x1ce9: 0xb479, -- 0x1cea: 0xb3e9, 0x1ceb: 0xb401, 0x1cec: 0xb419, 0x1ced: 0xb431, 0x1cee: 0xb2f9, 0x1cef: 0xb389, -- 0x1cf0: 0xb3b9, 0x1cf1: 0xb329, 0x1cf2: 0xb3d1, 0x1cf3: 0x0040, 0x1cf4: 0xb311, 0x1cf5: 0xb221, -- 0x1cf6: 0xb239, 0x1cf7: 0xb281, 0x1cf8: 0x0040, 0x1cf9: 0xb341, 0x1cfa: 0x0040, 0x1cfb: 0xb3a1, -+ 0x1cc0: 0x20b1, 0x1cc1: 0x20b9, 0x1cc2: 0x20d9, 0x1cc3: 0x20f1, 0x1cc4: 0x2181, 0x1cc5: 0x2189, -+ 0x1cc6: 0x2109, 0x1cc7: 0x20e1, 0x1cc8: 0x2131, 0x1cc9: 0x2191, 0x1cca: 0x0040, 0x1ccb: 0x2169, -+ 0x1ccc: 0x2171, 0x1ccd: 0x2179, 0x1cce: 0x2111, 0x1ccf: 0x2141, 0x1cd0: 0x2151, 0x1cd1: 0x2121, -+ 0x1cd2: 0x2159, 0x1cd3: 0x2101, 0x1cd4: 0x2119, 0x1cd5: 0x20c9, 0x1cd6: 0x20d1, 0x1cd7: 0x20e9, -+ 0x1cd8: 0x20f9, 0x1cd9: 0x2129, 0x1cda: 0x2139, 0x1cdb: 0x2149, 0x1cdc: 0x0040, 0x1cdd: 0x0040, -+ 0x1cde: 0x0040, 0x1cdf: 0x0040, 0x1ce0: 0x0040, 0x1ce1: 0x20b9, 0x1ce2: 0x20d9, 0x1ce3: 0x20f1, -+ 0x1ce4: 0x0040, 0x1ce5: 0x2189, 0x1ce6: 0x2109, 0x1ce7: 0x20e1, 0x1ce8: 0x2131, 0x1ce9: 0x2191, -+ 0x1cea: 0x0040, 0x1ceb: 0x2169, 0x1cec: 0x2171, 0x1ced: 0x2179, 0x1cee: 0x2111, 0x1cef: 0x2141, -+ 0x1cf0: 0x2151, 0x1cf1: 0x2121, 0x1cf2: 0x2159, 0x1cf3: 0x2101, 0x1cf4: 0x2119, 0x1cf5: 0x20c9, -+ 0x1cf6: 0x20d1, 0x1cf7: 0x20e9, 0x1cf8: 0x20f9, 0x1cf9: 0x2129, 0x1cfa: 0x2139, 0x1cfb: 0x2149, - 0x1cfc: 0x0040, 0x1cfd: 0x0040, 0x1cfe: 0x0040, 0x1cff: 0x0040, - // Block 0x74, offset 0x1d00 -- 0x1d00: 0x0040, 0x1d01: 0x0040, 0x1d02: 0xb251, 0x1d03: 0x0040, 0x1d04: 0x0040, 0x1d05: 0x0040, -- 0x1d06: 0x0040, 0x1d07: 0xb269, 0x1d08: 0x0040, 0x1d09: 0xb479, 0x1d0a: 0x0040, 0x1d0b: 0xb401, -- 0x1d0c: 0x0040, 0x1d0d: 0xb431, 0x1d0e: 0xb2f9, 0x1d0f: 0xb389, 0x1d10: 0x0040, 0x1d11: 0xb329, -- 0x1d12: 0xb3d1, 0x1d13: 0x0040, 0x1d14: 0xb311, 0x1d15: 0x0040, 0x1d16: 0x0040, 0x1d17: 0xb281, -- 0x1d18: 0x0040, 0x1d19: 0xb341, 0x1d1a: 0x0040, 0x1d1b: 0xb3a1, 0x1d1c: 0x0040, 0x1d1d: 0x7999, -- 0x1d1e: 0x0040, 0x1d1f: 0xbcd9, 0x1d20: 0x0040, 0x1d21: 0xb1f1, 0x1d22: 0xb251, 0x1d23: 0x0040, -- 0x1d24: 0xb449, 0x1d25: 0x0040, 0x1d26: 0x0040, 0x1d27: 0xb269, 0x1d28: 0xb359, 0x1d29: 0xb479, -- 0x1d2a: 0xb3e9, 0x1d2b: 0x0040, 0x1d2c: 0xb419, 0x1d2d: 0xb431, 0x1d2e: 0xb2f9, 0x1d2f: 0xb389, -- 0x1d30: 0xb3b9, 0x1d31: 0xb329, 0x1d32: 0xb3d1, 0x1d33: 0x0040, 0x1d34: 0xb311, 0x1d35: 0xb221, -- 0x1d36: 0xb239, 0x1d37: 0xb281, 0x1d38: 0x0040, 0x1d39: 0xb341, 0x1d3a: 0xb371, 0x1d3b: 0xb3a1, -- 0x1d3c: 0xbca9, 0x1d3d: 0x0040, 0x1d3e: 0xbcc1, 0x1d3f: 0x0040, -+ 0x1d00: 0x0040, 0x1d01: 0x232a, 0x1d02: 0x2332, 0x1d03: 0x233a, 0x1d04: 0x2342, 0x1d05: 0x234a, -+ 0x1d06: 0x2352, 0x1d07: 0x235a, 0x1d08: 0x2362, 0x1d09: 0x236a, 0x1d0a: 0x2372, 0x1d0b: 0x0018, -+ 0x1d0c: 0x0018, 0x1d0d: 0x0018, 0x1d0e: 0x0018, 0x1d0f: 0x0018, 0x1d10: 0x237a, 0x1d11: 0x2382, -+ 0x1d12: 0x238a, 0x1d13: 0x2392, 0x1d14: 0x239a, 0x1d15: 0x23a2, 0x1d16: 0x23aa, 0x1d17: 0x23b2, -+ 0x1d18: 0x23ba, 0x1d19: 0x23c2, 0x1d1a: 0x23ca, 0x1d1b: 0x23d2, 0x1d1c: 0x23da, 0x1d1d: 0x23e2, -+ 0x1d1e: 0x23ea, 0x1d1f: 0x23f2, 0x1d20: 0x23fa, 0x1d21: 0x2402, 0x1d22: 0x240a, 0x1d23: 0x2412, -+ 0x1d24: 0x241a, 0x1d25: 0x2422, 0x1d26: 0x242a, 0x1d27: 0x2432, 0x1d28: 0x243a, 0x1d29: 0x2442, -+ 0x1d2a: 0x2449, 0x1d2b: 0x03d9, 0x1d2c: 0x00b9, 0x1d2d: 0x1239, 0x1d2e: 0x2451, 0x1d2f: 0x0018, -+ 0x1d30: 0x0019, 0x1d31: 0x02e9, 0x1d32: 0x03d9, 0x1d33: 0x02f1, 0x1d34: 0x02f9, 0x1d35: 0x03f1, -+ 0x1d36: 0x0309, 0x1d37: 0x00a9, 0x1d38: 0x0311, 0x1d39: 0x00b1, 0x1d3a: 0x0319, 0x1d3b: 0x0101, -+ 0x1d3c: 0x0321, 0x1d3d: 0x0329, 0x1d3e: 0x0051, 0x1d3f: 0x0339, - // Block 0x75, offset 0x1d40 -- 0x1d40: 0xb1d9, 0x1d41: 0xb1f1, 0x1d42: 0xb251, 0x1d43: 0xb299, 0x1d44: 0xb449, 0x1d45: 0xb461, -- 0x1d46: 0xb2e1, 0x1d47: 0xb269, 0x1d48: 0xb359, 0x1d49: 0xb479, 0x1d4a: 0x0040, 0x1d4b: 0xb401, -- 0x1d4c: 0xb419, 0x1d4d: 0xb431, 0x1d4e: 0xb2f9, 0x1d4f: 0xb389, 0x1d50: 0xb3b9, 0x1d51: 0xb329, -- 0x1d52: 0xb3d1, 0x1d53: 0xb2c9, 0x1d54: 0xb311, 0x1d55: 0xb221, 0x1d56: 0xb239, 0x1d57: 0xb281, -- 0x1d58: 0xb2b1, 0x1d59: 0xb341, 0x1d5a: 0xb371, 0x1d5b: 0xb3a1, 0x1d5c: 0x0040, 0x1d5d: 0x0040, -- 0x1d5e: 0x0040, 0x1d5f: 0x0040, 0x1d60: 0x0040, 0x1d61: 0xb1f1, 0x1d62: 0xb251, 0x1d63: 0xb299, -- 0x1d64: 0x0040, 0x1d65: 0xb461, 0x1d66: 0xb2e1, 0x1d67: 0xb269, 0x1d68: 0xb359, 0x1d69: 0xb479, -- 0x1d6a: 0x0040, 0x1d6b: 0xb401, 0x1d6c: 0xb419, 0x1d6d: 0xb431, 0x1d6e: 0xb2f9, 0x1d6f: 0xb389, -- 0x1d70: 0xb3b9, 0x1d71: 0xb329, 0x1d72: 0xb3d1, 0x1d73: 0xb2c9, 0x1d74: 0xb311, 0x1d75: 0xb221, -- 0x1d76: 0xb239, 0x1d77: 0xb281, 0x1d78: 0xb2b1, 0x1d79: 0xb341, 0x1d7a: 0xb371, 0x1d7b: 0xb3a1, -- 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040, -+ 0x1d40: 0x0751, 0x1d41: 0x00b9, 0x1d42: 0x0089, 0x1d43: 0x0341, 0x1d44: 0x0349, 0x1d45: 0x0391, -+ 0x1d46: 0x00c1, 0x1d47: 0x0109, 0x1d48: 0x00c9, 0x1d49: 0x04b1, 0x1d4a: 0x2459, 0x1d4b: 0x11f9, -+ 0x1d4c: 0x2461, 0x1d4d: 0x04d9, 0x1d4e: 0x2469, 0x1d4f: 0x2471, 0x1d50: 0x0018, 0x1d51: 0x0018, -+ 0x1d52: 0x0018, 0x1d53: 0x0018, 0x1d54: 0x0018, 0x1d55: 0x0018, 0x1d56: 0x0018, 0x1d57: 0x0018, -+ 0x1d58: 0x0018, 0x1d59: 0x0018, 0x1d5a: 0x0018, 0x1d5b: 0x0018, 0x1d5c: 0x0018, 0x1d5d: 0x0018, -+ 0x1d5e: 0x0018, 0x1d5f: 0x0018, 0x1d60: 0x0018, 0x1d61: 0x0018, 0x1d62: 0x0018, 0x1d63: 0x0018, -+ 0x1d64: 0x0018, 0x1d65: 0x0018, 0x1d66: 0x0018, 0x1d67: 0x0018, 0x1d68: 0x0018, 0x1d69: 0x0018, -+ 0x1d6a: 0x2479, 0x1d6b: 0x2481, 0x1d6c: 0x2489, 0x1d6d: 0x0018, 0x1d6e: 0x0018, 0x1d6f: 0x0018, -+ 0x1d70: 0x0018, 0x1d71: 0x0018, 0x1d72: 0x0018, 0x1d73: 0x0018, 0x1d74: 0x0018, 0x1d75: 0x0018, -+ 0x1d76: 0x0018, 0x1d77: 0x0018, 0x1d78: 0x0018, 0x1d79: 0x0018, 0x1d7a: 0x0018, 0x1d7b: 0x0018, -+ 0x1d7c: 0x0018, 0x1d7d: 0x0018, 0x1d7e: 0x0018, 0x1d7f: 0x0018, - // Block 0x76, offset 0x1d80 -- 0x1d80: 0x0040, 0x1d81: 0xbcf2, 0x1d82: 0xbd0a, 0x1d83: 0xbd22, 0x1d84: 0xbd3a, 0x1d85: 0xbd52, -- 0x1d86: 0xbd6a, 0x1d87: 0xbd82, 0x1d88: 0xbd9a, 0x1d89: 0xbdb2, 0x1d8a: 0xbdca, 0x1d8b: 0x0018, -- 0x1d8c: 0x0018, 0x1d8d: 0x0018, 0x1d8e: 0x0018, 0x1d8f: 0x0018, 0x1d90: 0xbde2, 0x1d91: 0xbe02, -- 0x1d92: 0xbe22, 0x1d93: 0xbe42, 0x1d94: 0xbe62, 0x1d95: 0xbe82, 0x1d96: 0xbea2, 0x1d97: 0xbec2, -- 0x1d98: 0xbee2, 0x1d99: 0xbf02, 0x1d9a: 0xbf22, 0x1d9b: 0xbf42, 0x1d9c: 0xbf62, 0x1d9d: 0xbf82, -- 0x1d9e: 0xbfa2, 0x1d9f: 0xbfc2, 0x1da0: 0xbfe2, 0x1da1: 0xc002, 0x1da2: 0xc022, 0x1da3: 0xc042, -- 0x1da4: 0xc062, 0x1da5: 0xc082, 0x1da6: 0xc0a2, 0x1da7: 0xc0c2, 0x1da8: 0xc0e2, 0x1da9: 0xc102, -- 0x1daa: 0xc121, 0x1dab: 0x1159, 0x1dac: 0x0269, 0x1dad: 0x66a9, 0x1dae: 0xc161, 0x1daf: 0x0018, -- 0x1db0: 0x0039, 0x1db1: 0x0ee9, 0x1db2: 0x1159, 0x1db3: 0x0ef9, 0x1db4: 0x0f09, 0x1db5: 0x1199, -- 0x1db6: 0x0f31, 0x1db7: 0x0249, 0x1db8: 0x0f41, 0x1db9: 0x0259, 0x1dba: 0x0f51, 0x1dbb: 0x0359, -- 0x1dbc: 0x0f61, 0x1dbd: 0x0f71, 0x1dbe: 0x00d9, 0x1dbf: 0x0f99, -+ 0x1d80: 0x2499, 0x1d81: 0x24a1, 0x1d82: 0x24a9, 0x1d83: 0x0040, 0x1d84: 0x0040, 0x1d85: 0x0040, -+ 0x1d86: 0x0040, 0x1d87: 0x0040, 0x1d88: 0x0040, 0x1d89: 0x0040, 0x1d8a: 0x0040, 0x1d8b: 0x0040, -+ 0x1d8c: 0x0040, 0x1d8d: 0x0040, 0x1d8e: 0x0040, 0x1d8f: 0x0040, 0x1d90: 0x24b1, 0x1d91: 0x24b9, -+ 0x1d92: 0x24c1, 0x1d93: 0x24c9, 0x1d94: 0x24d1, 0x1d95: 0x24d9, 0x1d96: 0x24e1, 0x1d97: 0x24e9, -+ 0x1d98: 0x24f1, 0x1d99: 0x24f9, 0x1d9a: 0x2501, 0x1d9b: 0x2509, 0x1d9c: 0x2511, 0x1d9d: 0x2519, -+ 0x1d9e: 0x2521, 0x1d9f: 0x2529, 0x1da0: 0x2531, 0x1da1: 0x2539, 0x1da2: 0x2541, 0x1da3: 0x2549, -+ 0x1da4: 0x2551, 0x1da5: 0x2559, 0x1da6: 0x2561, 0x1da7: 0x2569, 0x1da8: 0x2571, 0x1da9: 0x2579, -+ 0x1daa: 0x2581, 0x1dab: 0x2589, 0x1dac: 0x2591, 0x1dad: 0x2599, 0x1dae: 0x25a1, 0x1daf: 0x25a9, -+ 0x1db0: 0x25b1, 0x1db1: 0x25b9, 0x1db2: 0x25c1, 0x1db3: 0x25c9, 0x1db4: 0x25d1, 0x1db5: 0x25d9, -+ 0x1db6: 0x25e1, 0x1db7: 0x25e9, 0x1db8: 0x25f1, 0x1db9: 0x25f9, 0x1dba: 0x2601, 0x1dbb: 0x2609, -+ 0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040, - // Block 0x77, offset 0x1dc0 -- 0x1dc0: 0x2039, 0x1dc1: 0x0269, 0x1dc2: 0x01d9, 0x1dc3: 0x0fa9, 0x1dc4: 0x0fb9, 0x1dc5: 0x1089, -- 0x1dc6: 0x0279, 0x1dc7: 0x0369, 0x1dc8: 0x0289, 0x1dc9: 0x13d1, 0x1dca: 0xc179, 0x1dcb: 0x65e9, -- 0x1dcc: 0xc191, 0x1dcd: 0x1441, 0x1dce: 0xc1a9, 0x1dcf: 0xc1c9, 0x1dd0: 0x0018, 0x1dd1: 0x0018, -- 0x1dd2: 0x0018, 0x1dd3: 0x0018, 0x1dd4: 0x0018, 0x1dd5: 0x0018, 0x1dd6: 0x0018, 0x1dd7: 0x0018, -- 0x1dd8: 0x0018, 0x1dd9: 0x0018, 0x1dda: 0x0018, 0x1ddb: 0x0018, 0x1ddc: 0x0018, 0x1ddd: 0x0018, -- 0x1dde: 0x0018, 0x1ddf: 0x0018, 0x1de0: 0x0018, 0x1de1: 0x0018, 0x1de2: 0x0018, 0x1de3: 0x0018, -- 0x1de4: 0x0018, 0x1de5: 0x0018, 0x1de6: 0x0018, 0x1de7: 0x0018, 0x1de8: 0x0018, 0x1de9: 0x0018, -- 0x1dea: 0xc1e1, 0x1deb: 0xc1f9, 0x1dec: 0xc211, 0x1ded: 0x0018, 0x1dee: 0x0018, 0x1def: 0x0018, -- 0x1df0: 0x0018, 0x1df1: 0x0018, 0x1df2: 0x0018, 0x1df3: 0x0018, 0x1df4: 0x0018, 0x1df5: 0x0018, -- 0x1df6: 0x0018, 0x1df7: 0x0018, 0x1df8: 0x0018, 0x1df9: 0x0018, 0x1dfa: 0x0018, 0x1dfb: 0x0018, -- 0x1dfc: 0x0018, 0x1dfd: 0x0018, 0x1dfe: 0x0018, 0x1dff: 0x0018, -+ 0x1dc0: 0x2669, 0x1dc1: 0x2671, 0x1dc2: 0x2679, 0x1dc3: 0x8b55, 0x1dc4: 0x2681, 0x1dc5: 0x2689, -+ 0x1dc6: 0x2691, 0x1dc7: 0x2699, 0x1dc8: 0x26a1, 0x1dc9: 0x26a9, 0x1dca: 0x26b1, 0x1dcb: 0x26b9, -+ 0x1dcc: 0x26c1, 0x1dcd: 0x8b75, 0x1dce: 0x26c9, 0x1dcf: 0x26d1, 0x1dd0: 0x26d9, 0x1dd1: 0x26e1, -+ 0x1dd2: 0x8b95, 0x1dd3: 0x26e9, 0x1dd4: 0x26f1, 0x1dd5: 0x2521, 0x1dd6: 0x8bb5, 0x1dd7: 0x26f9, -+ 0x1dd8: 0x2701, 0x1dd9: 0x2709, 0x1dda: 0x2711, 0x1ddb: 0x2719, 0x1ddc: 0x8bd5, 0x1ddd: 0x2721, -+ 0x1dde: 0x2729, 0x1ddf: 0x2731, 0x1de0: 0x2739, 0x1de1: 0x2741, 0x1de2: 0x25f9, 0x1de3: 0x2749, -+ 0x1de4: 0x2751, 0x1de5: 0x2759, 0x1de6: 0x2761, 0x1de7: 0x2769, 0x1de8: 0x2771, 0x1de9: 0x2779, -+ 0x1dea: 0x2781, 0x1deb: 0x2789, 0x1dec: 0x2791, 0x1ded: 0x2799, 0x1dee: 0x27a1, 0x1def: 0x27a9, -+ 0x1df0: 0x27b1, 0x1df1: 0x27b9, 0x1df2: 0x27b9, 0x1df3: 0x27b9, 0x1df4: 0x8bf5, 0x1df5: 0x27c1, -+ 0x1df6: 0x27c9, 0x1df7: 0x27d1, 0x1df8: 0x8c15, 0x1df9: 0x27d9, 0x1dfa: 0x27e1, 0x1dfb: 0x27e9, -+ 0x1dfc: 0x27f1, 0x1dfd: 0x27f9, 0x1dfe: 0x2801, 0x1dff: 0x2809, - // Block 0x78, offset 0x1e00 -- 0x1e00: 0xc241, 0x1e01: 0xc279, 0x1e02: 0xc2b1, 0x1e03: 0x0040, 0x1e04: 0x0040, 0x1e05: 0x0040, -- 0x1e06: 0x0040, 0x1e07: 0x0040, 0x1e08: 0x0040, 0x1e09: 0x0040, 0x1e0a: 0x0040, 0x1e0b: 0x0040, -- 0x1e0c: 0x0040, 0x1e0d: 0x0040, 0x1e0e: 0x0040, 0x1e0f: 0x0040, 0x1e10: 0xc2d1, 0x1e11: 0xc2f1, -- 0x1e12: 0xc311, 0x1e13: 0xc331, 0x1e14: 0xc351, 0x1e15: 0xc371, 0x1e16: 0xc391, 0x1e17: 0xc3b1, -- 0x1e18: 0xc3d1, 0x1e19: 0xc3f1, 0x1e1a: 0xc411, 0x1e1b: 0xc431, 0x1e1c: 0xc451, 0x1e1d: 0xc471, -- 0x1e1e: 0xc491, 0x1e1f: 0xc4b1, 0x1e20: 0xc4d1, 0x1e21: 0xc4f1, 0x1e22: 0xc511, 0x1e23: 0xc531, -- 0x1e24: 0xc551, 0x1e25: 0xc571, 0x1e26: 0xc591, 0x1e27: 0xc5b1, 0x1e28: 0xc5d1, 0x1e29: 0xc5f1, -- 0x1e2a: 0xc611, 0x1e2b: 0xc631, 0x1e2c: 0xc651, 0x1e2d: 0xc671, 0x1e2e: 0xc691, 0x1e2f: 0xc6b1, -- 0x1e30: 0xc6d1, 0x1e31: 0xc6f1, 0x1e32: 0xc711, 0x1e33: 0xc731, 0x1e34: 0xc751, 0x1e35: 0xc771, -- 0x1e36: 0xc791, 0x1e37: 0xc7b1, 0x1e38: 0xc7d1, 0x1e39: 0xc7f1, 0x1e3a: 0xc811, 0x1e3b: 0xc831, -- 0x1e3c: 0x0040, 0x1e3d: 0x0040, 0x1e3e: 0x0040, 0x1e3f: 0x0040, -+ 0x1e00: 0x2811, 0x1e01: 0x2819, 0x1e02: 0x2821, 0x1e03: 0x2829, 0x1e04: 0x2831, 0x1e05: 0x2839, -+ 0x1e06: 0x2839, 0x1e07: 0x2841, 0x1e08: 0x2849, 0x1e09: 0x2851, 0x1e0a: 0x2859, 0x1e0b: 0x2861, -+ 0x1e0c: 0x2869, 0x1e0d: 0x2871, 0x1e0e: 0x2879, 0x1e0f: 0x2881, 0x1e10: 0x2889, 0x1e11: 0x2891, -+ 0x1e12: 0x2899, 0x1e13: 0x28a1, 0x1e14: 0x28a9, 0x1e15: 0x28b1, 0x1e16: 0x28b9, 0x1e17: 0x28c1, -+ 0x1e18: 0x28c9, 0x1e19: 0x8c35, 0x1e1a: 0x28d1, 0x1e1b: 0x28d9, 0x1e1c: 0x28e1, 0x1e1d: 0x24d9, -+ 0x1e1e: 0x28e9, 0x1e1f: 0x28f1, 0x1e20: 0x8c55, 0x1e21: 0x8c75, 0x1e22: 0x28f9, 0x1e23: 0x2901, -+ 0x1e24: 0x2909, 0x1e25: 0x2911, 0x1e26: 0x2919, 0x1e27: 0x2921, 0x1e28: 0x2040, 0x1e29: 0x2929, -+ 0x1e2a: 0x2931, 0x1e2b: 0x2931, 0x1e2c: 0x8c95, 0x1e2d: 0x2939, 0x1e2e: 0x2941, 0x1e2f: 0x2949, -+ 0x1e30: 0x2951, 0x1e31: 0x8cb5, 0x1e32: 0x2959, 0x1e33: 0x2961, 0x1e34: 0x2040, 0x1e35: 0x2969, -+ 0x1e36: 0x2971, 0x1e37: 0x2979, 0x1e38: 0x2981, 0x1e39: 0x2989, 0x1e3a: 0x2991, 0x1e3b: 0x8cd5, -+ 0x1e3c: 0x2999, 0x1e3d: 0x8cf5, 0x1e3e: 0x29a1, 0x1e3f: 0x29a9, - // Block 0x79, offset 0x1e40 -- 0x1e40: 0xcb61, 0x1e41: 0xcb81, 0x1e42: 0xcba1, 0x1e43: 0x8b55, 0x1e44: 0xcbc1, 0x1e45: 0xcbe1, -- 0x1e46: 0xcc01, 0x1e47: 0xcc21, 0x1e48: 0xcc41, 0x1e49: 0xcc61, 0x1e4a: 0xcc81, 0x1e4b: 0xcca1, -- 0x1e4c: 0xccc1, 0x1e4d: 0x8b75, 0x1e4e: 0xcce1, 0x1e4f: 0xcd01, 0x1e50: 0xcd21, 0x1e51: 0xcd41, -- 0x1e52: 0x8b95, 0x1e53: 0xcd61, 0x1e54: 0xcd81, 0x1e55: 0xc491, 0x1e56: 0x8bb5, 0x1e57: 0xcda1, -- 0x1e58: 0xcdc1, 0x1e59: 0xcde1, 0x1e5a: 0xce01, 0x1e5b: 0xce21, 0x1e5c: 0x8bd5, 0x1e5d: 0xce41, -- 0x1e5e: 0xce61, 0x1e5f: 0xce81, 0x1e60: 0xcea1, 0x1e61: 0xcec1, 0x1e62: 0xc7f1, 0x1e63: 0xcee1, -- 0x1e64: 0xcf01, 0x1e65: 0xcf21, 0x1e66: 0xcf41, 0x1e67: 0xcf61, 0x1e68: 0xcf81, 0x1e69: 0xcfa1, -- 0x1e6a: 0xcfc1, 0x1e6b: 0xcfe1, 0x1e6c: 0xd001, 0x1e6d: 0xd021, 0x1e6e: 0xd041, 0x1e6f: 0xd061, -- 0x1e70: 0xd081, 0x1e71: 0xd0a1, 0x1e72: 0xd0a1, 0x1e73: 0xd0a1, 0x1e74: 0x8bf5, 0x1e75: 0xd0c1, -- 0x1e76: 0xd0e1, 0x1e77: 0xd101, 0x1e78: 0x8c15, 0x1e79: 0xd121, 0x1e7a: 0xd141, 0x1e7b: 0xd161, -- 0x1e7c: 0xd181, 0x1e7d: 0xd1a1, 0x1e7e: 0xd1c1, 0x1e7f: 0xd1e1, -+ 0x1e40: 0x29b1, 0x1e41: 0x29b9, 0x1e42: 0x29c1, 0x1e43: 0x29c9, 0x1e44: 0x29d1, 0x1e45: 0x29d9, -+ 0x1e46: 0x29e1, 0x1e47: 0x29e9, 0x1e48: 0x29f1, 0x1e49: 0x8d15, 0x1e4a: 0x29f9, 0x1e4b: 0x2a01, -+ 0x1e4c: 0x2a09, 0x1e4d: 0x2a11, 0x1e4e: 0x2a19, 0x1e4f: 0x8d35, 0x1e50: 0x2a21, 0x1e51: 0x8d55, -+ 0x1e52: 0x8d75, 0x1e53: 0x2a29, 0x1e54: 0x2a31, 0x1e55: 0x2a31, 0x1e56: 0x2a39, 0x1e57: 0x8d95, -+ 0x1e58: 0x8db5, 0x1e59: 0x2a41, 0x1e5a: 0x2a49, 0x1e5b: 0x2a51, 0x1e5c: 0x2a59, 0x1e5d: 0x2a61, -+ 0x1e5e: 0x2a69, 0x1e5f: 0x2a71, 0x1e60: 0x2a79, 0x1e61: 0x2a81, 0x1e62: 0x2a89, 0x1e63: 0x2a91, -+ 0x1e64: 0x8dd5, 0x1e65: 0x2a99, 0x1e66: 0x2aa1, 0x1e67: 0x2aa9, 0x1e68: 0x2ab1, 0x1e69: 0x2aa9, -+ 0x1e6a: 0x2ab9, 0x1e6b: 0x2ac1, 0x1e6c: 0x2ac9, 0x1e6d: 0x2ad1, 0x1e6e: 0x2ad9, 0x1e6f: 0x2ae1, -+ 0x1e70: 0x2ae9, 0x1e71: 0x2af1, 0x1e72: 0x2af9, 0x1e73: 0x2b01, 0x1e74: 0x2b09, 0x1e75: 0x2b11, -+ 0x1e76: 0x2b19, 0x1e77: 0x2b21, 0x1e78: 0x8df5, 0x1e79: 0x2b29, 0x1e7a: 0x2b31, 0x1e7b: 0x2b39, -+ 0x1e7c: 0x2b41, 0x1e7d: 0x2b49, 0x1e7e: 0x8e15, 0x1e7f: 0x2b51, - // Block 0x7a, offset 0x1e80 -- 0x1e80: 0xd201, 0x1e81: 0xd221, 0x1e82: 0xd241, 0x1e83: 0xd261, 0x1e84: 0xd281, 0x1e85: 0xd2a1, -- 0x1e86: 0xd2a1, 0x1e87: 0xd2c1, 0x1e88: 0xd2e1, 0x1e89: 0xd301, 0x1e8a: 0xd321, 0x1e8b: 0xd341, -- 0x1e8c: 0xd361, 0x1e8d: 0xd381, 0x1e8e: 0xd3a1, 0x1e8f: 0xd3c1, 0x1e90: 0xd3e1, 0x1e91: 0xd401, -- 0x1e92: 0xd421, 0x1e93: 0xd441, 0x1e94: 0xd461, 0x1e95: 0xd481, 0x1e96: 0xd4a1, 0x1e97: 0xd4c1, -- 0x1e98: 0xd4e1, 0x1e99: 0x8c35, 0x1e9a: 0xd501, 0x1e9b: 0xd521, 0x1e9c: 0xd541, 0x1e9d: 0xc371, -- 0x1e9e: 0xd561, 0x1e9f: 0xd581, 0x1ea0: 0x8c55, 0x1ea1: 0x8c75, 0x1ea2: 0xd5a1, 0x1ea3: 0xd5c1, -- 0x1ea4: 0xd5e1, 0x1ea5: 0xd601, 0x1ea6: 0xd621, 0x1ea7: 0xd641, 0x1ea8: 0x2040, 0x1ea9: 0xd661, -- 0x1eaa: 0xd681, 0x1eab: 0xd681, 0x1eac: 0x8c95, 0x1ead: 0xd6a1, 0x1eae: 0xd6c1, 0x1eaf: 0xd6e1, -- 0x1eb0: 0xd701, 0x1eb1: 0x8cb5, 0x1eb2: 0xd721, 0x1eb3: 0xd741, 0x1eb4: 0x2040, 0x1eb5: 0xd761, -- 0x1eb6: 0xd781, 0x1eb7: 0xd7a1, 0x1eb8: 0xd7c1, 0x1eb9: 0xd7e1, 0x1eba: 0xd801, 0x1ebb: 0x8cd5, -- 0x1ebc: 0xd821, 0x1ebd: 0x8cf5, 0x1ebe: 0xd841, 0x1ebf: 0xd861, -+ 0x1e80: 0x2b59, 0x1e81: 0x2b61, 0x1e82: 0x2b69, 0x1e83: 0x2b71, 0x1e84: 0x2b79, 0x1e85: 0x2b81, -+ 0x1e86: 0x2b89, 0x1e87: 0x2b91, 0x1e88: 0x2b99, 0x1e89: 0x2ba1, 0x1e8a: 0x8e35, 0x1e8b: 0x2ba9, -+ 0x1e8c: 0x2bb1, 0x1e8d: 0x2bb9, 0x1e8e: 0x2bc1, 0x1e8f: 0x2bc9, 0x1e90: 0x2bd1, 0x1e91: 0x2bd9, -+ 0x1e92: 0x2be1, 0x1e93: 0x2be9, 0x1e94: 0x2bf1, 0x1e95: 0x2bf9, 0x1e96: 0x2c01, 0x1e97: 0x2c09, -+ 0x1e98: 0x2c11, 0x1e99: 0x2c19, 0x1e9a: 0x2c21, 0x1e9b: 0x2c29, 0x1e9c: 0x2c31, 0x1e9d: 0x8e55, -+ 0x1e9e: 0x2c39, 0x1e9f: 0x2c41, 0x1ea0: 0x2c49, 0x1ea1: 0x2c51, 0x1ea2: 0x2c59, 0x1ea3: 0x8e75, -+ 0x1ea4: 0x2c61, 0x1ea5: 0x2c69, 0x1ea6: 0x2c71, 0x1ea7: 0x2c79, 0x1ea8: 0x2c81, 0x1ea9: 0x2c89, -+ 0x1eaa: 0x2c91, 0x1eab: 0x2c99, 0x1eac: 0x7f0d, 0x1ead: 0x2ca1, 0x1eae: 0x2ca9, 0x1eaf: 0x2cb1, -+ 0x1eb0: 0x8e95, 0x1eb1: 0x2cb9, 0x1eb2: 0x2cc1, 0x1eb3: 0x2cc9, 0x1eb4: 0x2cd1, 0x1eb5: 0x2cd9, -+ 0x1eb6: 0x2ce1, 0x1eb7: 0x8eb5, 0x1eb8: 0x8ed5, 0x1eb9: 0x8ef5, 0x1eba: 0x2ce9, 0x1ebb: 0x8f15, -+ 0x1ebc: 0x2cf1, 0x1ebd: 0x2cf9, 0x1ebe: 0x2d01, 0x1ebf: 0x2d09, - // Block 0x7b, offset 0x1ec0 -- 0x1ec0: 0xd881, 0x1ec1: 0xd8a1, 0x1ec2: 0xd8c1, 0x1ec3: 0xd8e1, 0x1ec4: 0xd901, 0x1ec5: 0xd921, -- 0x1ec6: 0xd941, 0x1ec7: 0xd961, 0x1ec8: 0xd981, 0x1ec9: 0x8d15, 0x1eca: 0xd9a1, 0x1ecb: 0xd9c1, -- 0x1ecc: 0xd9e1, 0x1ecd: 0xda01, 0x1ece: 0xda21, 0x1ecf: 0x8d35, 0x1ed0: 0xda41, 0x1ed1: 0x8d55, -- 0x1ed2: 0x8d75, 0x1ed3: 0xda61, 0x1ed4: 0xda81, 0x1ed5: 0xda81, 0x1ed6: 0xdaa1, 0x1ed7: 0x8d95, -- 0x1ed8: 0x8db5, 0x1ed9: 0xdac1, 0x1eda: 0xdae1, 0x1edb: 0xdb01, 0x1edc: 0xdb21, 0x1edd: 0xdb41, -- 0x1ede: 0xdb61, 0x1edf: 0xdb81, 0x1ee0: 0xdba1, 0x1ee1: 0xdbc1, 0x1ee2: 0xdbe1, 0x1ee3: 0xdc01, -- 0x1ee4: 0x8dd5, 0x1ee5: 0xdc21, 0x1ee6: 0xdc41, 0x1ee7: 0xdc61, 0x1ee8: 0xdc81, 0x1ee9: 0xdc61, -- 0x1eea: 0xdca1, 0x1eeb: 0xdcc1, 0x1eec: 0xdce1, 0x1eed: 0xdd01, 0x1eee: 0xdd21, 0x1eef: 0xdd41, -- 0x1ef0: 0xdd61, 0x1ef1: 0xdd81, 0x1ef2: 0xdda1, 0x1ef3: 0xddc1, 0x1ef4: 0xdde1, 0x1ef5: 0xde01, -- 0x1ef6: 0xde21, 0x1ef7: 0xde41, 0x1ef8: 0x8df5, 0x1ef9: 0xde61, 0x1efa: 0xde81, 0x1efb: 0xdea1, -- 0x1efc: 0xdec1, 0x1efd: 0xdee1, 0x1efe: 0x8e15, 0x1eff: 0xdf01, -+ 0x1ec0: 0x2d11, 0x1ec1: 0x2d19, 0x1ec2: 0x2d21, 0x1ec3: 0x2d29, 0x1ec4: 0x2d31, 0x1ec5: 0x2d39, -+ 0x1ec6: 0x8f35, 0x1ec7: 0x2d41, 0x1ec8: 0x2d49, 0x1ec9: 0x2d51, 0x1eca: 0x2d59, 0x1ecb: 0x2d61, -+ 0x1ecc: 0x2d69, 0x1ecd: 0x8f55, 0x1ece: 0x2d71, 0x1ecf: 0x2d79, 0x1ed0: 0x8f75, 0x1ed1: 0x8f95, -+ 0x1ed2: 0x2d81, 0x1ed3: 0x2d89, 0x1ed4: 0x2d91, 0x1ed5: 0x2d99, 0x1ed6: 0x2da1, 0x1ed7: 0x2da9, -+ 0x1ed8: 0x2db1, 0x1ed9: 0x2db9, 0x1eda: 0x2dc1, 0x1edb: 0x8fb5, 0x1edc: 0x2dc9, 0x1edd: 0x8fd5, -+ 0x1ede: 0x2dd1, 0x1edf: 0x2040, 0x1ee0: 0x2dd9, 0x1ee1: 0x2de1, 0x1ee2: 0x2de9, 0x1ee3: 0x8ff5, -+ 0x1ee4: 0x2df1, 0x1ee5: 0x2df9, 0x1ee6: 0x9015, 0x1ee7: 0x9035, 0x1ee8: 0x2e01, 0x1ee9: 0x2e09, -+ 0x1eea: 0x2e11, 0x1eeb: 0x2e19, 0x1eec: 0x2e21, 0x1eed: 0x2e21, 0x1eee: 0x2e29, 0x1eef: 0x2e31, -+ 0x1ef0: 0x2e39, 0x1ef1: 0x2e41, 0x1ef2: 0x2e49, 0x1ef3: 0x2e51, 0x1ef4: 0x2e59, 0x1ef5: 0x9055, -+ 0x1ef6: 0x2e61, 0x1ef7: 0x9075, 0x1ef8: 0x2e69, 0x1ef9: 0x9095, 0x1efa: 0x2e71, 0x1efb: 0x90b5, -+ 0x1efc: 0x90d5, 0x1efd: 0x90f5, 0x1efe: 0x2e79, 0x1eff: 0x2e81, - // Block 0x7c, offset 0x1f00 -- 0x1f00: 0xe601, 0x1f01: 0xe621, 0x1f02: 0xe641, 0x1f03: 0xe661, 0x1f04: 0xe681, 0x1f05: 0xe6a1, -- 0x1f06: 0x8f35, 0x1f07: 0xe6c1, 0x1f08: 0xe6e1, 0x1f09: 0xe701, 0x1f0a: 0xe721, 0x1f0b: 0xe741, -- 0x1f0c: 0xe761, 0x1f0d: 0x8f55, 0x1f0e: 0xe781, 0x1f0f: 0xe7a1, 0x1f10: 0x8f75, 0x1f11: 0x8f95, -- 0x1f12: 0xe7c1, 0x1f13: 0xe7e1, 0x1f14: 0xe801, 0x1f15: 0xe821, 0x1f16: 0xe841, 0x1f17: 0xe861, -- 0x1f18: 0xe881, 0x1f19: 0xe8a1, 0x1f1a: 0xe8c1, 0x1f1b: 0x8fb5, 0x1f1c: 0xe8e1, 0x1f1d: 0x8fd5, -- 0x1f1e: 0xe901, 0x1f1f: 0x2040, 0x1f20: 0xe921, 0x1f21: 0xe941, 0x1f22: 0xe961, 0x1f23: 0x8ff5, -- 0x1f24: 0xe981, 0x1f25: 0xe9a1, 0x1f26: 0x9015, 0x1f27: 0x9035, 0x1f28: 0xe9c1, 0x1f29: 0xe9e1, -- 0x1f2a: 0xea01, 0x1f2b: 0xea21, 0x1f2c: 0xea41, 0x1f2d: 0xea41, 0x1f2e: 0xea61, 0x1f2f: 0xea81, -- 0x1f30: 0xeaa1, 0x1f31: 0xeac1, 0x1f32: 0xeae1, 0x1f33: 0xeb01, 0x1f34: 0xeb21, 0x1f35: 0x9055, -- 0x1f36: 0xeb41, 0x1f37: 0x9075, 0x1f38: 0xeb61, 0x1f39: 0x9095, 0x1f3a: 0xeb81, 0x1f3b: 0x90b5, -- 0x1f3c: 0x90d5, 0x1f3d: 0x90f5, 0x1f3e: 0xeba1, 0x1f3f: 0xebc1, -+ 0x1f00: 0x2e89, 0x1f01: 0x9115, 0x1f02: 0x9135, 0x1f03: 0x9155, 0x1f04: 0x9175, 0x1f05: 0x2e91, -+ 0x1f06: 0x2e99, 0x1f07: 0x2e99, 0x1f08: 0x2ea1, 0x1f09: 0x2ea9, 0x1f0a: 0x2eb1, 0x1f0b: 0x2eb9, -+ 0x1f0c: 0x2ec1, 0x1f0d: 0x9195, 0x1f0e: 0x2ec9, 0x1f0f: 0x2ed1, 0x1f10: 0x2ed9, 0x1f11: 0x2ee1, -+ 0x1f12: 0x91b5, 0x1f13: 0x2ee9, 0x1f14: 0x91d5, 0x1f15: 0x91f5, 0x1f16: 0x2ef1, 0x1f17: 0x2ef9, -+ 0x1f18: 0x2f01, 0x1f19: 0x2f09, 0x1f1a: 0x2f11, 0x1f1b: 0x2f19, 0x1f1c: 0x9215, 0x1f1d: 0x9235, -+ 0x1f1e: 0x9255, 0x1f1f: 0x2040, 0x1f20: 0x2f21, 0x1f21: 0x9275, 0x1f22: 0x2f29, 0x1f23: 0x2f31, -+ 0x1f24: 0x2f39, 0x1f25: 0x9295, 0x1f26: 0x2f41, 0x1f27: 0x2f49, 0x1f28: 0x2f51, 0x1f29: 0x2f59, -+ 0x1f2a: 0x2f61, 0x1f2b: 0x92b5, 0x1f2c: 0x2f69, 0x1f2d: 0x2f71, 0x1f2e: 0x2f79, 0x1f2f: 0x2f81, -+ 0x1f30: 0x2f89, 0x1f31: 0x2f91, 0x1f32: 0x92d5, 0x1f33: 0x92f5, 0x1f34: 0x2f99, 0x1f35: 0x9315, -+ 0x1f36: 0x2fa1, 0x1f37: 0x9335, 0x1f38: 0x2fa9, 0x1f39: 0x2fb1, 0x1f3a: 0x2fb9, 0x1f3b: 0x9355, -+ 0x1f3c: 0x9375, 0x1f3d: 0x2fc1, 0x1f3e: 0x9395, 0x1f3f: 0x2fc9, - // Block 0x7d, offset 0x1f40 -- 0x1f40: 0xebe1, 0x1f41: 0x9115, 0x1f42: 0x9135, 0x1f43: 0x9155, 0x1f44: 0x9175, 0x1f45: 0xec01, -- 0x1f46: 0xec21, 0x1f47: 0xec21, 0x1f48: 0xec41, 0x1f49: 0xec61, 0x1f4a: 0xec81, 0x1f4b: 0xeca1, -- 0x1f4c: 0xecc1, 0x1f4d: 0x9195, 0x1f4e: 0xece1, 0x1f4f: 0xed01, 0x1f50: 0xed21, 0x1f51: 0xed41, -- 0x1f52: 0x91b5, 0x1f53: 0xed61, 0x1f54: 0x91d5, 0x1f55: 0x91f5, 0x1f56: 0xed81, 0x1f57: 0xeda1, -- 0x1f58: 0xedc1, 0x1f59: 0xede1, 0x1f5a: 0xee01, 0x1f5b: 0xee21, 0x1f5c: 0x9215, 0x1f5d: 0x9235, -- 0x1f5e: 0x9255, 0x1f5f: 0x2040, 0x1f60: 0xee41, 0x1f61: 0x9275, 0x1f62: 0xee61, 0x1f63: 0xee81, -- 0x1f64: 0xeea1, 0x1f65: 0x9295, 0x1f66: 0xeec1, 0x1f67: 0xeee1, 0x1f68: 0xef01, 0x1f69: 0xef21, -- 0x1f6a: 0xef41, 0x1f6b: 0x92b5, 0x1f6c: 0xef61, 0x1f6d: 0xef81, 0x1f6e: 0xefa1, 0x1f6f: 0xefc1, -- 0x1f70: 0xefe1, 0x1f71: 0xf001, 0x1f72: 0x92d5, 0x1f73: 0x92f5, 0x1f74: 0xf021, 0x1f75: 0x9315, -- 0x1f76: 0xf041, 0x1f77: 0x9335, 0x1f78: 0xf061, 0x1f79: 0xf081, 0x1f7a: 0xf0a1, 0x1f7b: 0x9355, -- 0x1f7c: 0x9375, 0x1f7d: 0xf0c1, 0x1f7e: 0x9395, 0x1f7f: 0xf0e1, -+ 0x1f40: 0x93b5, 0x1f41: 0x2fd1, 0x1f42: 0x2fd9, 0x1f43: 0x2fe1, 0x1f44: 0x2fe9, 0x1f45: 0x2ff1, -+ 0x1f46: 0x2ff9, 0x1f47: 0x93d5, 0x1f48: 0x93f5, 0x1f49: 0x9415, 0x1f4a: 0x9435, 0x1f4b: 0x2a29, -+ 0x1f4c: 0x3001, 0x1f4d: 0x3009, 0x1f4e: 0x3011, 0x1f4f: 0x3019, 0x1f50: 0x3021, 0x1f51: 0x3029, -+ 0x1f52: 0x3031, 0x1f53: 0x3039, 0x1f54: 0x3041, 0x1f55: 0x3049, 0x1f56: 0x3051, 0x1f57: 0x9455, -+ 0x1f58: 0x3059, 0x1f59: 0x3061, 0x1f5a: 0x3069, 0x1f5b: 0x3071, 0x1f5c: 0x3079, 0x1f5d: 0x3081, -+ 0x1f5e: 0x3089, 0x1f5f: 0x3091, 0x1f60: 0x3099, 0x1f61: 0x30a1, 0x1f62: 0x30a9, 0x1f63: 0x30b1, -+ 0x1f64: 0x9475, 0x1f65: 0x9495, 0x1f66: 0x94b5, 0x1f67: 0x30b9, 0x1f68: 0x30c1, 0x1f69: 0x30c9, -+ 0x1f6a: 0x30d1, 0x1f6b: 0x94d5, 0x1f6c: 0x30d9, 0x1f6d: 0x94f5, 0x1f6e: 0x30e1, 0x1f6f: 0x30e9, -+ 0x1f70: 0x9515, 0x1f71: 0x9535, 0x1f72: 0x30f1, 0x1f73: 0x30f9, 0x1f74: 0x3101, 0x1f75: 0x3109, -+ 0x1f76: 0x3111, 0x1f77: 0x3119, 0x1f78: 0x3121, 0x1f79: 0x3129, 0x1f7a: 0x3131, 0x1f7b: 0x3139, -+ 0x1f7c: 0x3141, 0x1f7d: 0x3149, 0x1f7e: 0x3151, 0x1f7f: 0x2040, - // Block 0x7e, offset 0x1f80 -- 0x1f80: 0xf721, 0x1f81: 0xf741, 0x1f82: 0xf761, 0x1f83: 0xf781, 0x1f84: 0xf7a1, 0x1f85: 0x9555, -- 0x1f86: 0xf7c1, 0x1f87: 0xf7e1, 0x1f88: 0xf801, 0x1f89: 0xf821, 0x1f8a: 0xf841, 0x1f8b: 0x9575, -- 0x1f8c: 0x9595, 0x1f8d: 0xf861, 0x1f8e: 0xf881, 0x1f8f: 0xf8a1, 0x1f90: 0xf8c1, 0x1f91: 0xf8e1, -- 0x1f92: 0xf901, 0x1f93: 0x95b5, 0x1f94: 0xf921, 0x1f95: 0xf941, 0x1f96: 0xf961, 0x1f97: 0xf981, -- 0x1f98: 0x95d5, 0x1f99: 0x95f5, 0x1f9a: 0xf9a1, 0x1f9b: 0xf9c1, 0x1f9c: 0xf9e1, 0x1f9d: 0x9615, -- 0x1f9e: 0xfa01, 0x1f9f: 0xfa21, 0x1fa0: 0x684d, 0x1fa1: 0x9635, 0x1fa2: 0xfa41, 0x1fa3: 0xfa61, -- 0x1fa4: 0xfa81, 0x1fa5: 0x9655, 0x1fa6: 0xfaa1, 0x1fa7: 0xfac1, 0x1fa8: 0xfae1, 0x1fa9: 0xfb01, -- 0x1faa: 0xfb21, 0x1fab: 0xfb41, 0x1fac: 0xfb61, 0x1fad: 0x9675, 0x1fae: 0xfb81, 0x1faf: 0xfba1, -- 0x1fb0: 0xfbc1, 0x1fb1: 0x9695, 0x1fb2: 0xfbe1, 0x1fb3: 0xfc01, 0x1fb4: 0xfc21, 0x1fb5: 0xfc41, -- 0x1fb6: 0x7b6d, 0x1fb7: 0x96b5, 0x1fb8: 0xfc61, 0x1fb9: 0xfc81, 0x1fba: 0xfca1, 0x1fbb: 0x96d5, -- 0x1fbc: 0xfcc1, 0x1fbd: 0x96f5, 0x1fbe: 0xfce1, 0x1fbf: 0xfce1, -+ 0x1f80: 0x3159, 0x1f81: 0x3161, 0x1f82: 0x3169, 0x1f83: 0x3171, 0x1f84: 0x3179, 0x1f85: 0x9555, -+ 0x1f86: 0x3181, 0x1f87: 0x3189, 0x1f88: 0x3191, 0x1f89: 0x3199, 0x1f8a: 0x31a1, 0x1f8b: 0x9575, -+ 0x1f8c: 0x9595, 0x1f8d: 0x31a9, 0x1f8e: 0x31b1, 0x1f8f: 0x31b9, 0x1f90: 0x31c1, 0x1f91: 0x31c9, -+ 0x1f92: 0x31d1, 0x1f93: 0x95b5, 0x1f94: 0x31d9, 0x1f95: 0x31e1, 0x1f96: 0x31e9, 0x1f97: 0x31f1, -+ 0x1f98: 0x95d5, 0x1f99: 0x95f5, 0x1f9a: 0x31f9, 0x1f9b: 0x3201, 0x1f9c: 0x3209, 0x1f9d: 0x9615, -+ 0x1f9e: 0x3211, 0x1f9f: 0x3219, 0x1fa0: 0x684d, 0x1fa1: 0x9635, 0x1fa2: 0x3221, 0x1fa3: 0x3229, -+ 0x1fa4: 0x3231, 0x1fa5: 0x9655, 0x1fa6: 0x3239, 0x1fa7: 0x3241, 0x1fa8: 0x3249, 0x1fa9: 0x3251, -+ 0x1faa: 0x3259, 0x1fab: 0x3261, 0x1fac: 0x3269, 0x1fad: 0x9675, 0x1fae: 0x3271, 0x1faf: 0x3279, -+ 0x1fb0: 0x3281, 0x1fb1: 0x9695, 0x1fb2: 0x3289, 0x1fb3: 0x3291, 0x1fb4: 0x3299, 0x1fb5: 0x32a1, -+ 0x1fb6: 0x7b6d, 0x1fb7: 0x96b5, 0x1fb8: 0x32a9, 0x1fb9: 0x32b1, 0x1fba: 0x32b9, 0x1fbb: 0x96d5, -+ 0x1fbc: 0x32c1, 0x1fbd: 0x96f5, 0x1fbe: 0x32c9, 0x1fbf: 0x32c9, - // Block 0x7f, offset 0x1fc0 -- 0x1fc0: 0xfd01, 0x1fc1: 0x9715, 0x1fc2: 0xfd21, 0x1fc3: 0xfd41, 0x1fc4: 0xfd61, 0x1fc5: 0xfd81, -- 0x1fc6: 0xfda1, 0x1fc7: 0xfdc1, 0x1fc8: 0xfde1, 0x1fc9: 0x9735, 0x1fca: 0xfe01, 0x1fcb: 0xfe21, -- 0x1fcc: 0xfe41, 0x1fcd: 0xfe61, 0x1fce: 0xfe81, 0x1fcf: 0xfea1, 0x1fd0: 0x9755, 0x1fd1: 0xfec1, -- 0x1fd2: 0x9775, 0x1fd3: 0x9795, 0x1fd4: 0x97b5, 0x1fd5: 0xfee1, 0x1fd6: 0xff01, 0x1fd7: 0xff21, -- 0x1fd8: 0xff41, 0x1fd9: 0xff61, 0x1fda: 0xff81, 0x1fdb: 0xffa1, 0x1fdc: 0xffc1, 0x1fdd: 0x97d5, -+ 0x1fc0: 0x32d1, 0x1fc1: 0x9715, 0x1fc2: 0x32d9, 0x1fc3: 0x32e1, 0x1fc4: 0x32e9, 0x1fc5: 0x32f1, -+ 0x1fc6: 0x32f9, 0x1fc7: 0x3301, 0x1fc8: 0x3309, 0x1fc9: 0x9735, 0x1fca: 0x3311, 0x1fcb: 0x3319, -+ 0x1fcc: 0x3321, 0x1fcd: 0x3329, 0x1fce: 0x3331, 0x1fcf: 0x3339, 0x1fd0: 0x9755, 0x1fd1: 0x3341, -+ 0x1fd2: 0x9775, 0x1fd3: 0x9795, 0x1fd4: 0x97b5, 0x1fd5: 0x3349, 0x1fd6: 0x3351, 0x1fd7: 0x3359, -+ 0x1fd8: 0x3361, 0x1fd9: 0x3369, 0x1fda: 0x3371, 0x1fdb: 0x3379, 0x1fdc: 0x3381, 0x1fdd: 0x97d5, - 0x1fde: 0x0040, 0x1fdf: 0x0040, 0x1fe0: 0x0040, 0x1fe1: 0x0040, 0x1fe2: 0x0040, 0x1fe3: 0x0040, - 0x1fe4: 0x0040, 0x1fe5: 0x0040, 0x1fe6: 0x0040, 0x1fe7: 0x0040, 0x1fe8: 0x0040, 0x1fe9: 0x0040, - 0x1fea: 0x0040, 0x1feb: 0x0040, 0x1fec: 0x0040, 0x1fed: 0x0040, 0x1fee: 0x0040, 0x1fef: 0x0040, -@@ -2134,7 +2277,7 @@ var idnaIndex = [2368]uint16{ - 0x1b8: 0xd6, 0x1b9: 0xd7, 0x1ba: 0xd8, 0x1bb: 0xd9, 0x1bc: 0xda, 0x1bd: 0xdb, 0x1be: 0xdc, 0x1bf: 0x37, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x38, 0x1c1: 0xdd, 0x1c2: 0xde, 0x1c3: 0xdf, 0x1c4: 0xe0, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe1, -- 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41, -+ 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0xe3, 0x1cd: 0xe4, 0x1ce: 0x3e, 0x1cf: 0x3f, - 0x1d0: 0xa0, 0x1d1: 0xa0, 0x1d2: 0xa0, 0x1d3: 0xa0, 0x1d4: 0xa0, 0x1d5: 0xa0, 0x1d6: 0xa0, 0x1d7: 0xa0, - 0x1d8: 0xa0, 0x1d9: 0xa0, 0x1da: 0xa0, 0x1db: 0xa0, 0x1dc: 0xa0, 0x1dd: 0xa0, 0x1de: 0xa0, 0x1df: 0xa0, - 0x1e0: 0xa0, 0x1e1: 0xa0, 0x1e2: 0xa0, 0x1e3: 0xa0, 0x1e4: 0xa0, 0x1e5: 0xa0, 0x1e6: 0xa0, 0x1e7: 0xa0, -@@ -2167,143 +2310,143 @@ var idnaIndex = [2368]uint16{ - 0x2a0: 0xa0, 0x2a1: 0xa0, 0x2a2: 0xa0, 0x2a3: 0xa0, 0x2a4: 0xa0, 0x2a5: 0xa0, 0x2a6: 0xa0, 0x2a7: 0xa0, - 0x2a8: 0xa0, 0x2a9: 0xa0, 0x2aa: 0xa0, 0x2ab: 0xa0, 0x2ac: 0xa0, 0x2ad: 0xa0, 0x2ae: 0xa0, 0x2af: 0xa0, - 0x2b0: 0xa0, 0x2b1: 0xa0, 0x2b2: 0xa0, 0x2b3: 0xa0, 0x2b4: 0xa0, 0x2b5: 0xa0, 0x2b6: 0xa0, 0x2b7: 0xa0, -- 0x2b8: 0xa0, 0x2b9: 0xa0, 0x2ba: 0xa0, 0x2bb: 0xa0, 0x2bc: 0xa0, 0x2bd: 0xa0, 0x2be: 0xa0, 0x2bf: 0xe3, -+ 0x2b8: 0xa0, 0x2b9: 0xa0, 0x2ba: 0xa0, 0x2bb: 0xa0, 0x2bc: 0xa0, 0x2bd: 0xa0, 0x2be: 0xa0, 0x2bf: 0xe5, - // Block 0xb, offset 0x2c0 - 0x2c0: 0xa0, 0x2c1: 0xa0, 0x2c2: 0xa0, 0x2c3: 0xa0, 0x2c4: 0xa0, 0x2c5: 0xa0, 0x2c6: 0xa0, 0x2c7: 0xa0, - 0x2c8: 0xa0, 0x2c9: 0xa0, 0x2ca: 0xa0, 0x2cb: 0xa0, 0x2cc: 0xa0, 0x2cd: 0xa0, 0x2ce: 0xa0, 0x2cf: 0xa0, -- 0x2d0: 0xa0, 0x2d1: 0xa0, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0xa0, 0x2d5: 0xa0, 0x2d6: 0xa0, 0x2d7: 0xa0, -- 0x2d8: 0xe6, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe7, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe8, -- 0x2e0: 0xe9, 0x2e1: 0xea, 0x2e2: 0xeb, 0x2e3: 0xec, 0x2e4: 0xed, 0x2e5: 0xee, 0x2e6: 0xef, 0x2e7: 0xf0, -- 0x2e8: 0xf1, 0x2e9: 0xf2, 0x2ea: 0xf3, 0x2eb: 0xf4, 0x2ec: 0xf5, 0x2ed: 0xf6, 0x2ee: 0xf7, 0x2ef: 0xf8, -+ 0x2d0: 0xa0, 0x2d1: 0xa0, 0x2d2: 0xe6, 0x2d3: 0xe7, 0x2d4: 0xa0, 0x2d5: 0xa0, 0x2d6: 0xa0, 0x2d7: 0xa0, -+ 0x2d8: 0xe8, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe9, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xea, -+ 0x2e0: 0xeb, 0x2e1: 0xec, 0x2e2: 0xed, 0x2e3: 0xee, 0x2e4: 0xef, 0x2e5: 0xf0, 0x2e6: 0xf1, 0x2e7: 0xf2, -+ 0x2e8: 0xf3, 0x2e9: 0xf4, 0x2ea: 0xf5, 0x2eb: 0xf6, 0x2ec: 0xf7, 0x2ed: 0xf8, 0x2ee: 0xf9, 0x2ef: 0xfa, - 0x2f0: 0xa0, 0x2f1: 0xa0, 0x2f2: 0xa0, 0x2f3: 0xa0, 0x2f4: 0xa0, 0x2f5: 0xa0, 0x2f6: 0xa0, 0x2f7: 0xa0, - 0x2f8: 0xa0, 0x2f9: 0xa0, 0x2fa: 0xa0, 0x2fb: 0xa0, 0x2fc: 0xa0, 0x2fd: 0xa0, 0x2fe: 0xa0, 0x2ff: 0xa0, - // Block 0xc, offset 0x300 - 0x300: 0xa0, 0x301: 0xa0, 0x302: 0xa0, 0x303: 0xa0, 0x304: 0xa0, 0x305: 0xa0, 0x306: 0xa0, 0x307: 0xa0, - 0x308: 0xa0, 0x309: 0xa0, 0x30a: 0xa0, 0x30b: 0xa0, 0x30c: 0xa0, 0x30d: 0xa0, 0x30e: 0xa0, 0x30f: 0xa0, - 0x310: 0xa0, 0x311: 0xa0, 0x312: 0xa0, 0x313: 0xa0, 0x314: 0xa0, 0x315: 0xa0, 0x316: 0xa0, 0x317: 0xa0, -- 0x318: 0xa0, 0x319: 0xa0, 0x31a: 0xa0, 0x31b: 0xa0, 0x31c: 0xa0, 0x31d: 0xa0, 0x31e: 0xf9, 0x31f: 0xfa, -+ 0x318: 0xa0, 0x319: 0xa0, 0x31a: 0xa0, 0x31b: 0xa0, 0x31c: 0xa0, 0x31d: 0xa0, 0x31e: 0xfb, 0x31f: 0xfc, - // Block 0xd, offset 0x340 -- 0x340: 0xfb, 0x341: 0xfb, 0x342: 0xfb, 0x343: 0xfb, 0x344: 0xfb, 0x345: 0xfb, 0x346: 0xfb, 0x347: 0xfb, -- 0x348: 0xfb, 0x349: 0xfb, 0x34a: 0xfb, 0x34b: 0xfb, 0x34c: 0xfb, 0x34d: 0xfb, 0x34e: 0xfb, 0x34f: 0xfb, -- 0x350: 0xfb, 0x351: 0xfb, 0x352: 0xfb, 0x353: 0xfb, 0x354: 0xfb, 0x355: 0xfb, 0x356: 0xfb, 0x357: 0xfb, -- 0x358: 0xfb, 0x359: 0xfb, 0x35a: 0xfb, 0x35b: 0xfb, 0x35c: 0xfb, 0x35d: 0xfb, 0x35e: 0xfb, 0x35f: 0xfb, -- 0x360: 0xfb, 0x361: 0xfb, 0x362: 0xfb, 0x363: 0xfb, 0x364: 0xfb, 0x365: 0xfb, 0x366: 0xfb, 0x367: 0xfb, -- 0x368: 0xfb, 0x369: 0xfb, 0x36a: 0xfb, 0x36b: 0xfb, 0x36c: 0xfb, 0x36d: 0xfb, 0x36e: 0xfb, 0x36f: 0xfb, -- 0x370: 0xfb, 0x371: 0xfb, 0x372: 0xfb, 0x373: 0xfb, 0x374: 0xfb, 0x375: 0xfb, 0x376: 0xfb, 0x377: 0xfb, -- 0x378: 0xfb, 0x379: 0xfb, 0x37a: 0xfb, 0x37b: 0xfb, 0x37c: 0xfb, 0x37d: 0xfb, 0x37e: 0xfb, 0x37f: 0xfb, -+ 0x340: 0xfd, 0x341: 0xfd, 0x342: 0xfd, 0x343: 0xfd, 0x344: 0xfd, 0x345: 0xfd, 0x346: 0xfd, 0x347: 0xfd, -+ 0x348: 0xfd, 0x349: 0xfd, 0x34a: 0xfd, 0x34b: 0xfd, 0x34c: 0xfd, 0x34d: 0xfd, 0x34e: 0xfd, 0x34f: 0xfd, -+ 0x350: 0xfd, 0x351: 0xfd, 0x352: 0xfd, 0x353: 0xfd, 0x354: 0xfd, 0x355: 0xfd, 0x356: 0xfd, 0x357: 0xfd, -+ 0x358: 0xfd, 0x359: 0xfd, 0x35a: 0xfd, 0x35b: 0xfd, 0x35c: 0xfd, 0x35d: 0xfd, 0x35e: 0xfd, 0x35f: 0xfd, -+ 0x360: 0xfd, 0x361: 0xfd, 0x362: 0xfd, 0x363: 0xfd, 0x364: 0xfd, 0x365: 0xfd, 0x366: 0xfd, 0x367: 0xfd, -+ 0x368: 0xfd, 0x369: 0xfd, 0x36a: 0xfd, 0x36b: 0xfd, 0x36c: 0xfd, 0x36d: 0xfd, 0x36e: 0xfd, 0x36f: 0xfd, -+ 0x370: 0xfd, 0x371: 0xfd, 0x372: 0xfd, 0x373: 0xfd, 0x374: 0xfd, 0x375: 0xfd, 0x376: 0xfd, 0x377: 0xfd, -+ 0x378: 0xfd, 0x379: 0xfd, 0x37a: 0xfd, 0x37b: 0xfd, 0x37c: 0xfd, 0x37d: 0xfd, 0x37e: 0xfd, 0x37f: 0xfd, - // Block 0xe, offset 0x380 -- 0x380: 0xfb, 0x381: 0xfb, 0x382: 0xfb, 0x383: 0xfb, 0x384: 0xfb, 0x385: 0xfb, 0x386: 0xfb, 0x387: 0xfb, -- 0x388: 0xfb, 0x389: 0xfb, 0x38a: 0xfb, 0x38b: 0xfb, 0x38c: 0xfb, 0x38d: 0xfb, 0x38e: 0xfb, 0x38f: 0xfb, -- 0x390: 0xfb, 0x391: 0xfb, 0x392: 0xfb, 0x393: 0xfb, 0x394: 0xfb, 0x395: 0xfb, 0x396: 0xfb, 0x397: 0xfb, -- 0x398: 0xfb, 0x399: 0xfb, 0x39a: 0xfb, 0x39b: 0xfb, 0x39c: 0xfb, 0x39d: 0xfb, 0x39e: 0xfb, 0x39f: 0xfb, -- 0x3a0: 0xfb, 0x3a1: 0xfb, 0x3a2: 0xfb, 0x3a3: 0xfb, 0x3a4: 0xfc, 0x3a5: 0xfd, 0x3a6: 0xfe, 0x3a7: 0xff, -- 0x3a8: 0x47, 0x3a9: 0x100, 0x3aa: 0x101, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, -- 0x3b0: 0x102, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x103, 0x3b7: 0x52, -- 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, -+ 0x380: 0xfd, 0x381: 0xfd, 0x382: 0xfd, 0x383: 0xfd, 0x384: 0xfd, 0x385: 0xfd, 0x386: 0xfd, 0x387: 0xfd, -+ 0x388: 0xfd, 0x389: 0xfd, 0x38a: 0xfd, 0x38b: 0xfd, 0x38c: 0xfd, 0x38d: 0xfd, 0x38e: 0xfd, 0x38f: 0xfd, -+ 0x390: 0xfd, 0x391: 0xfd, 0x392: 0xfd, 0x393: 0xfd, 0x394: 0xfd, 0x395: 0xfd, 0x396: 0xfd, 0x397: 0xfd, -+ 0x398: 0xfd, 0x399: 0xfd, 0x39a: 0xfd, 0x39b: 0xfd, 0x39c: 0xfd, 0x39d: 0xfd, 0x39e: 0xfd, 0x39f: 0xfd, -+ 0x3a0: 0xfd, 0x3a1: 0xfd, 0x3a2: 0xfd, 0x3a3: 0xfd, 0x3a4: 0xfe, 0x3a5: 0xff, 0x3a6: 0x100, 0x3a7: 0x101, -+ 0x3a8: 0x45, 0x3a9: 0x102, 0x3aa: 0x103, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a, -+ 0x3b0: 0x104, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x105, 0x3b7: 0x50, -+ 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58, - // Block 0xf, offset 0x3c0 -- 0x3c0: 0x104, 0x3c1: 0x105, 0x3c2: 0xa0, 0x3c3: 0x106, 0x3c4: 0x107, 0x3c5: 0x9c, 0x3c6: 0x108, 0x3c7: 0x109, -- 0x3c8: 0xfb, 0x3c9: 0xfb, 0x3ca: 0x10a, 0x3cb: 0x10b, 0x3cc: 0x10c, 0x3cd: 0x10d, 0x3ce: 0x10e, 0x3cf: 0x10f, -- 0x3d0: 0x110, 0x3d1: 0xa0, 0x3d2: 0x111, 0x3d3: 0x112, 0x3d4: 0x113, 0x3d5: 0x114, 0x3d6: 0xfb, 0x3d7: 0xfb, -- 0x3d8: 0xa0, 0x3d9: 0xa0, 0x3da: 0xa0, 0x3db: 0xa0, 0x3dc: 0x115, 0x3dd: 0x116, 0x3de: 0xfb, 0x3df: 0xfb, -- 0x3e0: 0x117, 0x3e1: 0x118, 0x3e2: 0x119, 0x3e3: 0x11a, 0x3e4: 0x11b, 0x3e5: 0xfb, 0x3e6: 0x11c, 0x3e7: 0x11d, -- 0x3e8: 0x11e, 0x3e9: 0x11f, 0x3ea: 0x120, 0x3eb: 0x5b, 0x3ec: 0x121, 0x3ed: 0x122, 0x3ee: 0x5c, 0x3ef: 0xfb, -- 0x3f0: 0x123, 0x3f1: 0x124, 0x3f2: 0x125, 0x3f3: 0x126, 0x3f4: 0x127, 0x3f5: 0xfb, 0x3f6: 0xfb, 0x3f7: 0xfb, -- 0x3f8: 0xfb, 0x3f9: 0x128, 0x3fa: 0x129, 0x3fb: 0xfb, 0x3fc: 0x12a, 0x3fd: 0x12b, 0x3fe: 0x12c, 0x3ff: 0x12d, -+ 0x3c0: 0x106, 0x3c1: 0x107, 0x3c2: 0xa0, 0x3c3: 0x108, 0x3c4: 0x109, 0x3c5: 0x9c, 0x3c6: 0x10a, 0x3c7: 0x10b, -+ 0x3c8: 0xfd, 0x3c9: 0xfd, 0x3ca: 0x10c, 0x3cb: 0x10d, 0x3cc: 0x10e, 0x3cd: 0x10f, 0x3ce: 0x110, 0x3cf: 0x111, -+ 0x3d0: 0x112, 0x3d1: 0xa0, 0x3d2: 0x113, 0x3d3: 0x114, 0x3d4: 0x115, 0x3d5: 0x116, 0x3d6: 0xfd, 0x3d7: 0xfd, -+ 0x3d8: 0xa0, 0x3d9: 0xa0, 0x3da: 0xa0, 0x3db: 0xa0, 0x3dc: 0x117, 0x3dd: 0x118, 0x3de: 0xfd, 0x3df: 0xfd, -+ 0x3e0: 0x119, 0x3e1: 0x11a, 0x3e2: 0x11b, 0x3e3: 0x11c, 0x3e4: 0x11d, 0x3e5: 0xfd, 0x3e6: 0x11e, 0x3e7: 0x11f, -+ 0x3e8: 0x120, 0x3e9: 0x121, 0x3ea: 0x122, 0x3eb: 0x59, 0x3ec: 0x123, 0x3ed: 0x124, 0x3ee: 0x5a, 0x3ef: 0xfd, -+ 0x3f0: 0x125, 0x3f1: 0x126, 0x3f2: 0x127, 0x3f3: 0x128, 0x3f4: 0x129, 0x3f5: 0xfd, 0x3f6: 0xfd, 0x3f7: 0xfd, -+ 0x3f8: 0xfd, 0x3f9: 0x12a, 0x3fa: 0x12b, 0x3fb: 0xfd, 0x3fc: 0x12c, 0x3fd: 0x12d, 0x3fe: 0x12e, 0x3ff: 0x12f, - // Block 0x10, offset 0x400 -- 0x400: 0x12e, 0x401: 0x12f, 0x402: 0x130, 0x403: 0x131, 0x404: 0x132, 0x405: 0x133, 0x406: 0x134, 0x407: 0x135, -- 0x408: 0x136, 0x409: 0xfb, 0x40a: 0x137, 0x40b: 0x138, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xfb, 0x40f: 0xfb, -- 0x410: 0x139, 0x411: 0x13a, 0x412: 0x13b, 0x413: 0x13c, 0x414: 0xfb, 0x415: 0xfb, 0x416: 0x13d, 0x417: 0x13e, -- 0x418: 0x13f, 0x419: 0x140, 0x41a: 0x141, 0x41b: 0x142, 0x41c: 0x143, 0x41d: 0xfb, 0x41e: 0xfb, 0x41f: 0xfb, -- 0x420: 0x144, 0x421: 0xfb, 0x422: 0x145, 0x423: 0x146, 0x424: 0x5f, 0x425: 0x147, 0x426: 0x148, 0x427: 0x149, -- 0x428: 0x14a, 0x429: 0x14b, 0x42a: 0x14c, 0x42b: 0x14d, 0x42c: 0xfb, 0x42d: 0xfb, 0x42e: 0xfb, 0x42f: 0xfb, -- 0x430: 0x14e, 0x431: 0x14f, 0x432: 0x150, 0x433: 0xfb, 0x434: 0x151, 0x435: 0x152, 0x436: 0x153, 0x437: 0xfb, -- 0x438: 0xfb, 0x439: 0xfb, 0x43a: 0xfb, 0x43b: 0x154, 0x43c: 0xfb, 0x43d: 0xfb, 0x43e: 0x155, 0x43f: 0x156, -+ 0x400: 0x130, 0x401: 0x131, 0x402: 0x132, 0x403: 0x133, 0x404: 0x134, 0x405: 0x135, 0x406: 0x136, 0x407: 0x137, -+ 0x408: 0x138, 0x409: 0xfd, 0x40a: 0x139, 0x40b: 0x13a, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xfd, 0x40f: 0xfd, -+ 0x410: 0x13b, 0x411: 0x13c, 0x412: 0x13d, 0x413: 0x13e, 0x414: 0xfd, 0x415: 0xfd, 0x416: 0x13f, 0x417: 0x140, -+ 0x418: 0x141, 0x419: 0x142, 0x41a: 0x143, 0x41b: 0x144, 0x41c: 0x145, 0x41d: 0xfd, 0x41e: 0xfd, 0x41f: 0xfd, -+ 0x420: 0x146, 0x421: 0xfd, 0x422: 0x147, 0x423: 0x148, 0x424: 0x5d, 0x425: 0x149, 0x426: 0x14a, 0x427: 0x14b, -+ 0x428: 0x14c, 0x429: 0x14d, 0x42a: 0x14e, 0x42b: 0x14f, 0x42c: 0xfd, 0x42d: 0xfd, 0x42e: 0xfd, 0x42f: 0xfd, -+ 0x430: 0x150, 0x431: 0x151, 0x432: 0x152, 0x433: 0xfd, 0x434: 0x153, 0x435: 0x154, 0x436: 0x155, 0x437: 0xfd, -+ 0x438: 0xfd, 0x439: 0xfd, 0x43a: 0xfd, 0x43b: 0x156, 0x43c: 0xfd, 0x43d: 0xfd, 0x43e: 0x157, 0x43f: 0x158, - // Block 0x11, offset 0x440 - 0x440: 0xa0, 0x441: 0xa0, 0x442: 0xa0, 0x443: 0xa0, 0x444: 0xa0, 0x445: 0xa0, 0x446: 0xa0, 0x447: 0xa0, -- 0x448: 0xa0, 0x449: 0xa0, 0x44a: 0xa0, 0x44b: 0xa0, 0x44c: 0xa0, 0x44d: 0xa0, 0x44e: 0x157, 0x44f: 0xfb, -- 0x450: 0x9c, 0x451: 0x158, 0x452: 0xa0, 0x453: 0xa0, 0x454: 0xa0, 0x455: 0x159, 0x456: 0xfb, 0x457: 0xfb, -- 0x458: 0xfb, 0x459: 0xfb, 0x45a: 0xfb, 0x45b: 0xfb, 0x45c: 0xfb, 0x45d: 0xfb, 0x45e: 0xfb, 0x45f: 0xfb, -- 0x460: 0xfb, 0x461: 0xfb, 0x462: 0xfb, 0x463: 0xfb, 0x464: 0xfb, 0x465: 0xfb, 0x466: 0xfb, 0x467: 0xfb, -- 0x468: 0xfb, 0x469: 0xfb, 0x46a: 0xfb, 0x46b: 0xfb, 0x46c: 0xfb, 0x46d: 0xfb, 0x46e: 0xfb, 0x46f: 0xfb, -- 0x470: 0xfb, 0x471: 0xfb, 0x472: 0xfb, 0x473: 0xfb, 0x474: 0xfb, 0x475: 0xfb, 0x476: 0xfb, 0x477: 0xfb, -- 0x478: 0xfb, 0x479: 0xfb, 0x47a: 0xfb, 0x47b: 0xfb, 0x47c: 0xfb, 0x47d: 0xfb, 0x47e: 0xfb, 0x47f: 0xfb, -+ 0x448: 0xa0, 0x449: 0xa0, 0x44a: 0xa0, 0x44b: 0xa0, 0x44c: 0xa0, 0x44d: 0xa0, 0x44e: 0x159, 0x44f: 0xfd, -+ 0x450: 0x9c, 0x451: 0x15a, 0x452: 0xa0, 0x453: 0xa0, 0x454: 0xa0, 0x455: 0x15b, 0x456: 0xfd, 0x457: 0xfd, -+ 0x458: 0xfd, 0x459: 0xfd, 0x45a: 0xfd, 0x45b: 0xfd, 0x45c: 0xfd, 0x45d: 0xfd, 0x45e: 0xfd, 0x45f: 0xfd, -+ 0x460: 0xfd, 0x461: 0xfd, 0x462: 0xfd, 0x463: 0xfd, 0x464: 0xfd, 0x465: 0xfd, 0x466: 0xfd, 0x467: 0xfd, -+ 0x468: 0xfd, 0x469: 0xfd, 0x46a: 0xfd, 0x46b: 0xfd, 0x46c: 0xfd, 0x46d: 0xfd, 0x46e: 0xfd, 0x46f: 0xfd, -+ 0x470: 0xfd, 0x471: 0xfd, 0x472: 0xfd, 0x473: 0xfd, 0x474: 0xfd, 0x475: 0xfd, 0x476: 0xfd, 0x477: 0xfd, -+ 0x478: 0xfd, 0x479: 0xfd, 0x47a: 0xfd, 0x47b: 0xfd, 0x47c: 0xfd, 0x47d: 0xfd, 0x47e: 0xfd, 0x47f: 0xfd, - // Block 0x12, offset 0x480 - 0x480: 0xa0, 0x481: 0xa0, 0x482: 0xa0, 0x483: 0xa0, 0x484: 0xa0, 0x485: 0xa0, 0x486: 0xa0, 0x487: 0xa0, - 0x488: 0xa0, 0x489: 0xa0, 0x48a: 0xa0, 0x48b: 0xa0, 0x48c: 0xa0, 0x48d: 0xa0, 0x48e: 0xa0, 0x48f: 0xa0, -- 0x490: 0x15a, 0x491: 0xfb, 0x492: 0xfb, 0x493: 0xfb, 0x494: 0xfb, 0x495: 0xfb, 0x496: 0xfb, 0x497: 0xfb, -- 0x498: 0xfb, 0x499: 0xfb, 0x49a: 0xfb, 0x49b: 0xfb, 0x49c: 0xfb, 0x49d: 0xfb, 0x49e: 0xfb, 0x49f: 0xfb, -- 0x4a0: 0xfb, 0x4a1: 0xfb, 0x4a2: 0xfb, 0x4a3: 0xfb, 0x4a4: 0xfb, 0x4a5: 0xfb, 0x4a6: 0xfb, 0x4a7: 0xfb, -- 0x4a8: 0xfb, 0x4a9: 0xfb, 0x4aa: 0xfb, 0x4ab: 0xfb, 0x4ac: 0xfb, 0x4ad: 0xfb, 0x4ae: 0xfb, 0x4af: 0xfb, -- 0x4b0: 0xfb, 0x4b1: 0xfb, 0x4b2: 0xfb, 0x4b3: 0xfb, 0x4b4: 0xfb, 0x4b5: 0xfb, 0x4b6: 0xfb, 0x4b7: 0xfb, -- 0x4b8: 0xfb, 0x4b9: 0xfb, 0x4ba: 0xfb, 0x4bb: 0xfb, 0x4bc: 0xfb, 0x4bd: 0xfb, 0x4be: 0xfb, 0x4bf: 0xfb, -+ 0x490: 0x15c, 0x491: 0xfd, 0x492: 0xfd, 0x493: 0xfd, 0x494: 0xfd, 0x495: 0xfd, 0x496: 0xfd, 0x497: 0xfd, -+ 0x498: 0xfd, 0x499: 0xfd, 0x49a: 0xfd, 0x49b: 0xfd, 0x49c: 0xfd, 0x49d: 0xfd, 0x49e: 0xfd, 0x49f: 0xfd, -+ 0x4a0: 0xfd, 0x4a1: 0xfd, 0x4a2: 0xfd, 0x4a3: 0xfd, 0x4a4: 0xfd, 0x4a5: 0xfd, 0x4a6: 0xfd, 0x4a7: 0xfd, -+ 0x4a8: 0xfd, 0x4a9: 0xfd, 0x4aa: 0xfd, 0x4ab: 0xfd, 0x4ac: 0xfd, 0x4ad: 0xfd, 0x4ae: 0xfd, 0x4af: 0xfd, -+ 0x4b0: 0xfd, 0x4b1: 0xfd, 0x4b2: 0xfd, 0x4b3: 0xfd, 0x4b4: 0xfd, 0x4b5: 0xfd, 0x4b6: 0xfd, 0x4b7: 0xfd, -+ 0x4b8: 0xfd, 0x4b9: 0xfd, 0x4ba: 0xfd, 0x4bb: 0xfd, 0x4bc: 0xfd, 0x4bd: 0xfd, 0x4be: 0xfd, 0x4bf: 0xfd, - // Block 0x13, offset 0x4c0 -- 0x4c0: 0xfb, 0x4c1: 0xfb, 0x4c2: 0xfb, 0x4c3: 0xfb, 0x4c4: 0xfb, 0x4c5: 0xfb, 0x4c6: 0xfb, 0x4c7: 0xfb, -- 0x4c8: 0xfb, 0x4c9: 0xfb, 0x4ca: 0xfb, 0x4cb: 0xfb, 0x4cc: 0xfb, 0x4cd: 0xfb, 0x4ce: 0xfb, 0x4cf: 0xfb, -+ 0x4c0: 0xfd, 0x4c1: 0xfd, 0x4c2: 0xfd, 0x4c3: 0xfd, 0x4c4: 0xfd, 0x4c5: 0xfd, 0x4c6: 0xfd, 0x4c7: 0xfd, -+ 0x4c8: 0xfd, 0x4c9: 0xfd, 0x4ca: 0xfd, 0x4cb: 0xfd, 0x4cc: 0xfd, 0x4cd: 0xfd, 0x4ce: 0xfd, 0x4cf: 0xfd, - 0x4d0: 0xa0, 0x4d1: 0xa0, 0x4d2: 0xa0, 0x4d3: 0xa0, 0x4d4: 0xa0, 0x4d5: 0xa0, 0x4d6: 0xa0, 0x4d7: 0xa0, -- 0x4d8: 0xa0, 0x4d9: 0x15b, 0x4da: 0xfb, 0x4db: 0xfb, 0x4dc: 0xfb, 0x4dd: 0xfb, 0x4de: 0xfb, 0x4df: 0xfb, -- 0x4e0: 0xfb, 0x4e1: 0xfb, 0x4e2: 0xfb, 0x4e3: 0xfb, 0x4e4: 0xfb, 0x4e5: 0xfb, 0x4e6: 0xfb, 0x4e7: 0xfb, -- 0x4e8: 0xfb, 0x4e9: 0xfb, 0x4ea: 0xfb, 0x4eb: 0xfb, 0x4ec: 0xfb, 0x4ed: 0xfb, 0x4ee: 0xfb, 0x4ef: 0xfb, -- 0x4f0: 0xfb, 0x4f1: 0xfb, 0x4f2: 0xfb, 0x4f3: 0xfb, 0x4f4: 0xfb, 0x4f5: 0xfb, 0x4f6: 0xfb, 0x4f7: 0xfb, -- 0x4f8: 0xfb, 0x4f9: 0xfb, 0x4fa: 0xfb, 0x4fb: 0xfb, 0x4fc: 0xfb, 0x4fd: 0xfb, 0x4fe: 0xfb, 0x4ff: 0xfb, -+ 0x4d8: 0xa0, 0x4d9: 0x15d, 0x4da: 0xfd, 0x4db: 0xfd, 0x4dc: 0xfd, 0x4dd: 0xfd, 0x4de: 0xfd, 0x4df: 0xfd, -+ 0x4e0: 0xfd, 0x4e1: 0xfd, 0x4e2: 0xfd, 0x4e3: 0xfd, 0x4e4: 0xfd, 0x4e5: 0xfd, 0x4e6: 0xfd, 0x4e7: 0xfd, -+ 0x4e8: 0xfd, 0x4e9: 0xfd, 0x4ea: 0xfd, 0x4eb: 0xfd, 0x4ec: 0xfd, 0x4ed: 0xfd, 0x4ee: 0xfd, 0x4ef: 0xfd, -+ 0x4f0: 0xfd, 0x4f1: 0xfd, 0x4f2: 0xfd, 0x4f3: 0xfd, 0x4f4: 0xfd, 0x4f5: 0xfd, 0x4f6: 0xfd, 0x4f7: 0xfd, -+ 0x4f8: 0xfd, 0x4f9: 0xfd, 0x4fa: 0xfd, 0x4fb: 0xfd, 0x4fc: 0xfd, 0x4fd: 0xfd, 0x4fe: 0xfd, 0x4ff: 0xfd, - // Block 0x14, offset 0x500 -- 0x500: 0xfb, 0x501: 0xfb, 0x502: 0xfb, 0x503: 0xfb, 0x504: 0xfb, 0x505: 0xfb, 0x506: 0xfb, 0x507: 0xfb, -- 0x508: 0xfb, 0x509: 0xfb, 0x50a: 0xfb, 0x50b: 0xfb, 0x50c: 0xfb, 0x50d: 0xfb, 0x50e: 0xfb, 0x50f: 0xfb, -- 0x510: 0xfb, 0x511: 0xfb, 0x512: 0xfb, 0x513: 0xfb, 0x514: 0xfb, 0x515: 0xfb, 0x516: 0xfb, 0x517: 0xfb, -- 0x518: 0xfb, 0x519: 0xfb, 0x51a: 0xfb, 0x51b: 0xfb, 0x51c: 0xfb, 0x51d: 0xfb, 0x51e: 0xfb, 0x51f: 0xfb, -+ 0x500: 0xfd, 0x501: 0xfd, 0x502: 0xfd, 0x503: 0xfd, 0x504: 0xfd, 0x505: 0xfd, 0x506: 0xfd, 0x507: 0xfd, -+ 0x508: 0xfd, 0x509: 0xfd, 0x50a: 0xfd, 0x50b: 0xfd, 0x50c: 0xfd, 0x50d: 0xfd, 0x50e: 0xfd, 0x50f: 0xfd, -+ 0x510: 0xfd, 0x511: 0xfd, 0x512: 0xfd, 0x513: 0xfd, 0x514: 0xfd, 0x515: 0xfd, 0x516: 0xfd, 0x517: 0xfd, -+ 0x518: 0xfd, 0x519: 0xfd, 0x51a: 0xfd, 0x51b: 0xfd, 0x51c: 0xfd, 0x51d: 0xfd, 0x51e: 0xfd, 0x51f: 0xfd, - 0x520: 0xa0, 0x521: 0xa0, 0x522: 0xa0, 0x523: 0xa0, 0x524: 0xa0, 0x525: 0xa0, 0x526: 0xa0, 0x527: 0xa0, -- 0x528: 0x14d, 0x529: 0x15c, 0x52a: 0xfb, 0x52b: 0x15d, 0x52c: 0x15e, 0x52d: 0x15f, 0x52e: 0x160, 0x52f: 0xfb, -- 0x530: 0xfb, 0x531: 0xfb, 0x532: 0xfb, 0x533: 0xfb, 0x534: 0xfb, 0x535: 0xfb, 0x536: 0xfb, 0x537: 0xfb, -- 0x538: 0xfb, 0x539: 0x161, 0x53a: 0x162, 0x53b: 0xfb, 0x53c: 0xa0, 0x53d: 0x163, 0x53e: 0x164, 0x53f: 0x165, -+ 0x528: 0x14f, 0x529: 0x15e, 0x52a: 0xfd, 0x52b: 0x15f, 0x52c: 0x160, 0x52d: 0x161, 0x52e: 0x162, 0x52f: 0xfd, -+ 0x530: 0xfd, 0x531: 0xfd, 0x532: 0xfd, 0x533: 0xfd, 0x534: 0xfd, 0x535: 0xfd, 0x536: 0xfd, 0x537: 0xfd, -+ 0x538: 0xfd, 0x539: 0x163, 0x53a: 0x164, 0x53b: 0xfd, 0x53c: 0xa0, 0x53d: 0x165, 0x53e: 0x166, 0x53f: 0x167, - // Block 0x15, offset 0x540 - 0x540: 0xa0, 0x541: 0xa0, 0x542: 0xa0, 0x543: 0xa0, 0x544: 0xa0, 0x545: 0xa0, 0x546: 0xa0, 0x547: 0xa0, - 0x548: 0xa0, 0x549: 0xa0, 0x54a: 0xa0, 0x54b: 0xa0, 0x54c: 0xa0, 0x54d: 0xa0, 0x54e: 0xa0, 0x54f: 0xa0, - 0x550: 0xa0, 0x551: 0xa0, 0x552: 0xa0, 0x553: 0xa0, 0x554: 0xa0, 0x555: 0xa0, 0x556: 0xa0, 0x557: 0xa0, -- 0x558: 0xa0, 0x559: 0xa0, 0x55a: 0xa0, 0x55b: 0xa0, 0x55c: 0xa0, 0x55d: 0xa0, 0x55e: 0xa0, 0x55f: 0x166, -+ 0x558: 0xa0, 0x559: 0xa0, 0x55a: 0xa0, 0x55b: 0xa0, 0x55c: 0xa0, 0x55d: 0xa0, 0x55e: 0xa0, 0x55f: 0x168, - 0x560: 0xa0, 0x561: 0xa0, 0x562: 0xa0, 0x563: 0xa0, 0x564: 0xa0, 0x565: 0xa0, 0x566: 0xa0, 0x567: 0xa0, - 0x568: 0xa0, 0x569: 0xa0, 0x56a: 0xa0, 0x56b: 0xa0, 0x56c: 0xa0, 0x56d: 0xa0, 0x56e: 0xa0, 0x56f: 0xa0, -- 0x570: 0xa0, 0x571: 0xa0, 0x572: 0xa0, 0x573: 0x167, 0x574: 0x168, 0x575: 0xfb, 0x576: 0xfb, 0x577: 0xfb, -- 0x578: 0xfb, 0x579: 0xfb, 0x57a: 0xfb, 0x57b: 0xfb, 0x57c: 0xfb, 0x57d: 0xfb, 0x57e: 0xfb, 0x57f: 0xfb, -+ 0x570: 0xa0, 0x571: 0xa0, 0x572: 0xa0, 0x573: 0x169, 0x574: 0x16a, 0x575: 0xfd, 0x576: 0xfd, 0x577: 0xfd, -+ 0x578: 0xfd, 0x579: 0xfd, 0x57a: 0xfd, 0x57b: 0xfd, 0x57c: 0xfd, 0x57d: 0xfd, 0x57e: 0xfd, 0x57f: 0xfd, - // Block 0x16, offset 0x580 -- 0x580: 0xa0, 0x581: 0xa0, 0x582: 0xa0, 0x583: 0xa0, 0x584: 0x169, 0x585: 0x16a, 0x586: 0xa0, 0x587: 0xa0, -- 0x588: 0xa0, 0x589: 0xa0, 0x58a: 0xa0, 0x58b: 0x16b, 0x58c: 0xfb, 0x58d: 0xfb, 0x58e: 0xfb, 0x58f: 0xfb, -- 0x590: 0xfb, 0x591: 0xfb, 0x592: 0xfb, 0x593: 0xfb, 0x594: 0xfb, 0x595: 0xfb, 0x596: 0xfb, 0x597: 0xfb, -- 0x598: 0xfb, 0x599: 0xfb, 0x59a: 0xfb, 0x59b: 0xfb, 0x59c: 0xfb, 0x59d: 0xfb, 0x59e: 0xfb, 0x59f: 0xfb, -- 0x5a0: 0xfb, 0x5a1: 0xfb, 0x5a2: 0xfb, 0x5a3: 0xfb, 0x5a4: 0xfb, 0x5a5: 0xfb, 0x5a6: 0xfb, 0x5a7: 0xfb, -- 0x5a8: 0xfb, 0x5a9: 0xfb, 0x5aa: 0xfb, 0x5ab: 0xfb, 0x5ac: 0xfb, 0x5ad: 0xfb, 0x5ae: 0xfb, 0x5af: 0xfb, -- 0x5b0: 0xa0, 0x5b1: 0x16c, 0x5b2: 0x16d, 0x5b3: 0xfb, 0x5b4: 0xfb, 0x5b5: 0xfb, 0x5b6: 0xfb, 0x5b7: 0xfb, -- 0x5b8: 0xfb, 0x5b9: 0xfb, 0x5ba: 0xfb, 0x5bb: 0xfb, 0x5bc: 0xfb, 0x5bd: 0xfb, 0x5be: 0xfb, 0x5bf: 0xfb, -+ 0x580: 0xa0, 0x581: 0xa0, 0x582: 0xa0, 0x583: 0xa0, 0x584: 0x16b, 0x585: 0x16c, 0x586: 0xa0, 0x587: 0xa0, -+ 0x588: 0xa0, 0x589: 0xa0, 0x58a: 0xa0, 0x58b: 0x16d, 0x58c: 0xfd, 0x58d: 0xfd, 0x58e: 0xfd, 0x58f: 0xfd, -+ 0x590: 0xfd, 0x591: 0xfd, 0x592: 0xfd, 0x593: 0xfd, 0x594: 0xfd, 0x595: 0xfd, 0x596: 0xfd, 0x597: 0xfd, -+ 0x598: 0xfd, 0x599: 0xfd, 0x59a: 0xfd, 0x59b: 0xfd, 0x59c: 0xfd, 0x59d: 0xfd, 0x59e: 0xfd, 0x59f: 0xfd, -+ 0x5a0: 0xfd, 0x5a1: 0xfd, 0x5a2: 0xfd, 0x5a3: 0xfd, 0x5a4: 0xfd, 0x5a5: 0xfd, 0x5a6: 0xfd, 0x5a7: 0xfd, -+ 0x5a8: 0xfd, 0x5a9: 0xfd, 0x5aa: 0xfd, 0x5ab: 0xfd, 0x5ac: 0xfd, 0x5ad: 0xfd, 0x5ae: 0xfd, 0x5af: 0xfd, -+ 0x5b0: 0xa0, 0x5b1: 0x16e, 0x5b2: 0x16f, 0x5b3: 0xfd, 0x5b4: 0xfd, 0x5b5: 0xfd, 0x5b6: 0xfd, 0x5b7: 0xfd, -+ 0x5b8: 0xfd, 0x5b9: 0xfd, 0x5ba: 0xfd, 0x5bb: 0xfd, 0x5bc: 0xfd, 0x5bd: 0xfd, 0x5be: 0xfd, 0x5bf: 0xfd, - // Block 0x17, offset 0x5c0 -- 0x5c0: 0x9c, 0x5c1: 0x9c, 0x5c2: 0x9c, 0x5c3: 0x16e, 0x5c4: 0x16f, 0x5c5: 0x170, 0x5c6: 0x171, 0x5c7: 0x172, -- 0x5c8: 0x9c, 0x5c9: 0x173, 0x5ca: 0xfb, 0x5cb: 0x174, 0x5cc: 0x9c, 0x5cd: 0x175, 0x5ce: 0xfb, 0x5cf: 0xfb, -- 0x5d0: 0x60, 0x5d1: 0x61, 0x5d2: 0x62, 0x5d3: 0x63, 0x5d4: 0x64, 0x5d5: 0x65, 0x5d6: 0x66, 0x5d7: 0x67, -- 0x5d8: 0x68, 0x5d9: 0x69, 0x5da: 0x6a, 0x5db: 0x6b, 0x5dc: 0x6c, 0x5dd: 0x6d, 0x5de: 0x6e, 0x5df: 0x6f, -+ 0x5c0: 0x9c, 0x5c1: 0x9c, 0x5c2: 0x9c, 0x5c3: 0x170, 0x5c4: 0x171, 0x5c5: 0x172, 0x5c6: 0x173, 0x5c7: 0x174, -+ 0x5c8: 0x9c, 0x5c9: 0x175, 0x5ca: 0xfd, 0x5cb: 0x176, 0x5cc: 0x9c, 0x5cd: 0x177, 0x5ce: 0xfd, 0x5cf: 0xfd, -+ 0x5d0: 0x5e, 0x5d1: 0x5f, 0x5d2: 0x60, 0x5d3: 0x61, 0x5d4: 0x62, 0x5d5: 0x63, 0x5d6: 0x64, 0x5d7: 0x65, -+ 0x5d8: 0x66, 0x5d9: 0x67, 0x5da: 0x68, 0x5db: 0x69, 0x5dc: 0x6a, 0x5dd: 0x6b, 0x5de: 0x6c, 0x5df: 0x6d, - 0x5e0: 0x9c, 0x5e1: 0x9c, 0x5e2: 0x9c, 0x5e3: 0x9c, 0x5e4: 0x9c, 0x5e5: 0x9c, 0x5e6: 0x9c, 0x5e7: 0x9c, -- 0x5e8: 0x176, 0x5e9: 0x177, 0x5ea: 0x178, 0x5eb: 0xfb, 0x5ec: 0xfb, 0x5ed: 0xfb, 0x5ee: 0xfb, 0x5ef: 0xfb, -- 0x5f0: 0xfb, 0x5f1: 0xfb, 0x5f2: 0xfb, 0x5f3: 0xfb, 0x5f4: 0xfb, 0x5f5: 0xfb, 0x5f6: 0xfb, 0x5f7: 0xfb, -- 0x5f8: 0xfb, 0x5f9: 0xfb, 0x5fa: 0xfb, 0x5fb: 0xfb, 0x5fc: 0xfb, 0x5fd: 0xfb, 0x5fe: 0xfb, 0x5ff: 0xfb, -+ 0x5e8: 0x178, 0x5e9: 0x179, 0x5ea: 0x17a, 0x5eb: 0xfd, 0x5ec: 0xfd, 0x5ed: 0xfd, 0x5ee: 0xfd, 0x5ef: 0xfd, -+ 0x5f0: 0xfd, 0x5f1: 0xfd, 0x5f2: 0xfd, 0x5f3: 0xfd, 0x5f4: 0xfd, 0x5f5: 0xfd, 0x5f6: 0xfd, 0x5f7: 0xfd, -+ 0x5f8: 0xfd, 0x5f9: 0xfd, 0x5fa: 0xfd, 0x5fb: 0xfd, 0x5fc: 0xfd, 0x5fd: 0xfd, 0x5fe: 0xfd, 0x5ff: 0xfd, - // Block 0x18, offset 0x600 -- 0x600: 0x179, 0x601: 0xfb, 0x602: 0xfb, 0x603: 0xfb, 0x604: 0x17a, 0x605: 0x17b, 0x606: 0xfb, 0x607: 0xfb, -- 0x608: 0xfb, 0x609: 0xfb, 0x60a: 0xfb, 0x60b: 0x17c, 0x60c: 0xfb, 0x60d: 0xfb, 0x60e: 0xfb, 0x60f: 0xfb, -- 0x610: 0xfb, 0x611: 0xfb, 0x612: 0xfb, 0x613: 0xfb, 0x614: 0xfb, 0x615: 0xfb, 0x616: 0xfb, 0x617: 0xfb, -- 0x618: 0xfb, 0x619: 0xfb, 0x61a: 0xfb, 0x61b: 0xfb, 0x61c: 0xfb, 0x61d: 0xfb, 0x61e: 0xfb, 0x61f: 0xfb, -- 0x620: 0x123, 0x621: 0x123, 0x622: 0x123, 0x623: 0x17d, 0x624: 0x70, 0x625: 0x17e, 0x626: 0xfb, 0x627: 0xfb, -- 0x628: 0xfb, 0x629: 0xfb, 0x62a: 0xfb, 0x62b: 0xfb, 0x62c: 0xfb, 0x62d: 0xfb, 0x62e: 0xfb, 0x62f: 0xfb, -- 0x630: 0xfb, 0x631: 0x17f, 0x632: 0x180, 0x633: 0xfb, 0x634: 0x181, 0x635: 0xfb, 0x636: 0xfb, 0x637: 0xfb, -- 0x638: 0x71, 0x639: 0x72, 0x63a: 0x73, 0x63b: 0x182, 0x63c: 0xfb, 0x63d: 0xfb, 0x63e: 0xfb, 0x63f: 0xfb, -+ 0x600: 0x17b, 0x601: 0xfd, 0x602: 0xfd, 0x603: 0xfd, 0x604: 0x17c, 0x605: 0x17d, 0x606: 0xfd, 0x607: 0xfd, -+ 0x608: 0xfd, 0x609: 0xfd, 0x60a: 0xfd, 0x60b: 0x17e, 0x60c: 0xfd, 0x60d: 0xfd, 0x60e: 0xfd, 0x60f: 0xfd, -+ 0x610: 0xfd, 0x611: 0xfd, 0x612: 0xfd, 0x613: 0xfd, 0x614: 0xfd, 0x615: 0xfd, 0x616: 0xfd, 0x617: 0xfd, -+ 0x618: 0xfd, 0x619: 0xfd, 0x61a: 0xfd, 0x61b: 0xfd, 0x61c: 0xfd, 0x61d: 0xfd, 0x61e: 0xfd, 0x61f: 0xfd, -+ 0x620: 0x125, 0x621: 0x125, 0x622: 0x125, 0x623: 0x17f, 0x624: 0x6e, 0x625: 0x180, 0x626: 0xfd, 0x627: 0xfd, -+ 0x628: 0xfd, 0x629: 0xfd, 0x62a: 0xfd, 0x62b: 0xfd, 0x62c: 0xfd, 0x62d: 0xfd, 0x62e: 0xfd, 0x62f: 0xfd, -+ 0x630: 0xfd, 0x631: 0x181, 0x632: 0x182, 0x633: 0xfd, 0x634: 0x183, 0x635: 0xfd, 0x636: 0xfd, 0x637: 0xfd, -+ 0x638: 0x6f, 0x639: 0x70, 0x63a: 0x71, 0x63b: 0x184, 0x63c: 0xfd, 0x63d: 0xfd, 0x63e: 0xfd, 0x63f: 0xfd, - // Block 0x19, offset 0x640 -- 0x640: 0x183, 0x641: 0x9c, 0x642: 0x184, 0x643: 0x185, 0x644: 0x74, 0x645: 0x75, 0x646: 0x186, 0x647: 0x187, -- 0x648: 0x76, 0x649: 0x188, 0x64a: 0xfb, 0x64b: 0xfb, 0x64c: 0x9c, 0x64d: 0x9c, 0x64e: 0x9c, 0x64f: 0x9c, -+ 0x640: 0x185, 0x641: 0x9c, 0x642: 0x186, 0x643: 0x187, 0x644: 0x72, 0x645: 0x73, 0x646: 0x188, 0x647: 0x189, -+ 0x648: 0x74, 0x649: 0x18a, 0x64a: 0xfd, 0x64b: 0xfd, 0x64c: 0x9c, 0x64d: 0x9c, 0x64e: 0x9c, 0x64f: 0x9c, - 0x650: 0x9c, 0x651: 0x9c, 0x652: 0x9c, 0x653: 0x9c, 0x654: 0x9c, 0x655: 0x9c, 0x656: 0x9c, 0x657: 0x9c, -- 0x658: 0x9c, 0x659: 0x9c, 0x65a: 0x9c, 0x65b: 0x189, 0x65c: 0x9c, 0x65d: 0x18a, 0x65e: 0x9c, 0x65f: 0x18b, -- 0x660: 0x18c, 0x661: 0x18d, 0x662: 0x18e, 0x663: 0xfb, 0x664: 0x9c, 0x665: 0x18f, 0x666: 0x9c, 0x667: 0x190, -- 0x668: 0x9c, 0x669: 0x191, 0x66a: 0x192, 0x66b: 0x193, 0x66c: 0x9c, 0x66d: 0x9c, 0x66e: 0x194, 0x66f: 0x195, -- 0x670: 0xfb, 0x671: 0xfb, 0x672: 0xfb, 0x673: 0xfb, 0x674: 0xfb, 0x675: 0xfb, 0x676: 0xfb, 0x677: 0xfb, -- 0x678: 0xfb, 0x679: 0xfb, 0x67a: 0xfb, 0x67b: 0xfb, 0x67c: 0xfb, 0x67d: 0xfb, 0x67e: 0xfb, 0x67f: 0xfb, -+ 0x658: 0x9c, 0x659: 0x9c, 0x65a: 0x9c, 0x65b: 0x18b, 0x65c: 0x9c, 0x65d: 0x18c, 0x65e: 0x9c, 0x65f: 0x18d, -+ 0x660: 0x18e, 0x661: 0x18f, 0x662: 0x190, 0x663: 0xfd, 0x664: 0x9c, 0x665: 0x191, 0x666: 0x9c, 0x667: 0x192, -+ 0x668: 0x9c, 0x669: 0x193, 0x66a: 0x194, 0x66b: 0x195, 0x66c: 0x9c, 0x66d: 0x9c, 0x66e: 0x196, 0x66f: 0x197, -+ 0x670: 0xfd, 0x671: 0xfd, 0x672: 0xfd, 0x673: 0xfd, 0x674: 0xfd, 0x675: 0xfd, 0x676: 0xfd, 0x677: 0xfd, -+ 0x678: 0xfd, 0x679: 0xfd, 0x67a: 0xfd, 0x67b: 0xfd, 0x67c: 0xfd, 0x67d: 0xfd, 0x67e: 0xfd, 0x67f: 0xfd, - // Block 0x1a, offset 0x680 - 0x680: 0xa0, 0x681: 0xa0, 0x682: 0xa0, 0x683: 0xa0, 0x684: 0xa0, 0x685: 0xa0, 0x686: 0xa0, 0x687: 0xa0, - 0x688: 0xa0, 0x689: 0xa0, 0x68a: 0xa0, 0x68b: 0xa0, 0x68c: 0xa0, 0x68d: 0xa0, 0x68e: 0xa0, 0x68f: 0xa0, - 0x690: 0xa0, 0x691: 0xa0, 0x692: 0xa0, 0x693: 0xa0, 0x694: 0xa0, 0x695: 0xa0, 0x696: 0xa0, 0x697: 0xa0, -- 0x698: 0xa0, 0x699: 0xa0, 0x69a: 0xa0, 0x69b: 0x196, 0x69c: 0xa0, 0x69d: 0xa0, 0x69e: 0xa0, 0x69f: 0xa0, -+ 0x698: 0xa0, 0x699: 0xa0, 0x69a: 0xa0, 0x69b: 0x198, 0x69c: 0xa0, 0x69d: 0xa0, 0x69e: 0xa0, 0x69f: 0xa0, - 0x6a0: 0xa0, 0x6a1: 0xa0, 0x6a2: 0xa0, 0x6a3: 0xa0, 0x6a4: 0xa0, 0x6a5: 0xa0, 0x6a6: 0xa0, 0x6a7: 0xa0, - 0x6a8: 0xa0, 0x6a9: 0xa0, 0x6aa: 0xa0, 0x6ab: 0xa0, 0x6ac: 0xa0, 0x6ad: 0xa0, 0x6ae: 0xa0, 0x6af: 0xa0, - 0x6b0: 0xa0, 0x6b1: 0xa0, 0x6b2: 0xa0, 0x6b3: 0xa0, 0x6b4: 0xa0, 0x6b5: 0xa0, 0x6b6: 0xa0, 0x6b7: 0xa0, -@@ -2312,8 +2455,8 @@ var idnaIndex = [2368]uint16{ - 0x6c0: 0xa0, 0x6c1: 0xa0, 0x6c2: 0xa0, 0x6c3: 0xa0, 0x6c4: 0xa0, 0x6c5: 0xa0, 0x6c6: 0xa0, 0x6c7: 0xa0, - 0x6c8: 0xa0, 0x6c9: 0xa0, 0x6ca: 0xa0, 0x6cb: 0xa0, 0x6cc: 0xa0, 0x6cd: 0xa0, 0x6ce: 0xa0, 0x6cf: 0xa0, - 0x6d0: 0xa0, 0x6d1: 0xa0, 0x6d2: 0xa0, 0x6d3: 0xa0, 0x6d4: 0xa0, 0x6d5: 0xa0, 0x6d6: 0xa0, 0x6d7: 0xa0, -- 0x6d8: 0xa0, 0x6d9: 0xa0, 0x6da: 0xa0, 0x6db: 0xa0, 0x6dc: 0x197, 0x6dd: 0xa0, 0x6de: 0xa0, 0x6df: 0xa0, -- 0x6e0: 0x198, 0x6e1: 0xa0, 0x6e2: 0xa0, 0x6e3: 0xa0, 0x6e4: 0xa0, 0x6e5: 0xa0, 0x6e6: 0xa0, 0x6e7: 0xa0, -+ 0x6d8: 0xa0, 0x6d9: 0xa0, 0x6da: 0xa0, 0x6db: 0xa0, 0x6dc: 0x199, 0x6dd: 0xa0, 0x6de: 0xa0, 0x6df: 0xa0, -+ 0x6e0: 0x19a, 0x6e1: 0xa0, 0x6e2: 0xa0, 0x6e3: 0xa0, 0x6e4: 0xa0, 0x6e5: 0xa0, 0x6e6: 0xa0, 0x6e7: 0xa0, - 0x6e8: 0xa0, 0x6e9: 0xa0, 0x6ea: 0xa0, 0x6eb: 0xa0, 0x6ec: 0xa0, 0x6ed: 0xa0, 0x6ee: 0xa0, 0x6ef: 0xa0, - 0x6f0: 0xa0, 0x6f1: 0xa0, 0x6f2: 0xa0, 0x6f3: 0xa0, 0x6f4: 0xa0, 0x6f5: 0xa0, 0x6f6: 0xa0, 0x6f7: 0xa0, - 0x6f8: 0xa0, 0x6f9: 0xa0, 0x6fa: 0xa0, 0x6fb: 0xa0, 0x6fc: 0xa0, 0x6fd: 0xa0, 0x6fe: 0xa0, 0x6ff: 0xa0, -@@ -2325,34 +2468,34 @@ var idnaIndex = [2368]uint16{ - 0x720: 0xa0, 0x721: 0xa0, 0x722: 0xa0, 0x723: 0xa0, 0x724: 0xa0, 0x725: 0xa0, 0x726: 0xa0, 0x727: 0xa0, - 0x728: 0xa0, 0x729: 0xa0, 0x72a: 0xa0, 0x72b: 0xa0, 0x72c: 0xa0, 0x72d: 0xa0, 0x72e: 0xa0, 0x72f: 0xa0, - 0x730: 0xa0, 0x731: 0xa0, 0x732: 0xa0, 0x733: 0xa0, 0x734: 0xa0, 0x735: 0xa0, 0x736: 0xa0, 0x737: 0xa0, -- 0x738: 0xa0, 0x739: 0xa0, 0x73a: 0x199, 0x73b: 0xa0, 0x73c: 0xa0, 0x73d: 0xa0, 0x73e: 0xa0, 0x73f: 0xa0, -+ 0x738: 0xa0, 0x739: 0xa0, 0x73a: 0x19b, 0x73b: 0xa0, 0x73c: 0xa0, 0x73d: 0xa0, 0x73e: 0xa0, 0x73f: 0xa0, - // Block 0x1d, offset 0x740 - 0x740: 0xa0, 0x741: 0xa0, 0x742: 0xa0, 0x743: 0xa0, 0x744: 0xa0, 0x745: 0xa0, 0x746: 0xa0, 0x747: 0xa0, - 0x748: 0xa0, 0x749: 0xa0, 0x74a: 0xa0, 0x74b: 0xa0, 0x74c: 0xa0, 0x74d: 0xa0, 0x74e: 0xa0, 0x74f: 0xa0, - 0x750: 0xa0, 0x751: 0xa0, 0x752: 0xa0, 0x753: 0xa0, 0x754: 0xa0, 0x755: 0xa0, 0x756: 0xa0, 0x757: 0xa0, - 0x758: 0xa0, 0x759: 0xa0, 0x75a: 0xa0, 0x75b: 0xa0, 0x75c: 0xa0, 0x75d: 0xa0, 0x75e: 0xa0, 0x75f: 0xa0, - 0x760: 0xa0, 0x761: 0xa0, 0x762: 0xa0, 0x763: 0xa0, 0x764: 0xa0, 0x765: 0xa0, 0x766: 0xa0, 0x767: 0xa0, -- 0x768: 0xa0, 0x769: 0xa0, 0x76a: 0xa0, 0x76b: 0xa0, 0x76c: 0xa0, 0x76d: 0xa0, 0x76e: 0xa0, 0x76f: 0x19a, -- 0x770: 0xfb, 0x771: 0xfb, 0x772: 0xfb, 0x773: 0xfb, 0x774: 0xfb, 0x775: 0xfb, 0x776: 0xfb, 0x777: 0xfb, -- 0x778: 0xfb, 0x779: 0xfb, 0x77a: 0xfb, 0x77b: 0xfb, 0x77c: 0xfb, 0x77d: 0xfb, 0x77e: 0xfb, 0x77f: 0xfb, -+ 0x768: 0xa0, 0x769: 0xa0, 0x76a: 0xa0, 0x76b: 0xa0, 0x76c: 0xa0, 0x76d: 0xa0, 0x76e: 0xa0, 0x76f: 0x19c, -+ 0x770: 0xfd, 0x771: 0xfd, 0x772: 0xfd, 0x773: 0xfd, 0x774: 0xfd, 0x775: 0xfd, 0x776: 0xfd, 0x777: 0xfd, -+ 0x778: 0xfd, 0x779: 0xfd, 0x77a: 0xfd, 0x77b: 0xfd, 0x77c: 0xfd, 0x77d: 0xfd, 0x77e: 0xfd, 0x77f: 0xfd, - // Block 0x1e, offset 0x780 -- 0x780: 0xfb, 0x781: 0xfb, 0x782: 0xfb, 0x783: 0xfb, 0x784: 0xfb, 0x785: 0xfb, 0x786: 0xfb, 0x787: 0xfb, -- 0x788: 0xfb, 0x789: 0xfb, 0x78a: 0xfb, 0x78b: 0xfb, 0x78c: 0xfb, 0x78d: 0xfb, 0x78e: 0xfb, 0x78f: 0xfb, -- 0x790: 0xfb, 0x791: 0xfb, 0x792: 0xfb, 0x793: 0xfb, 0x794: 0xfb, 0x795: 0xfb, 0x796: 0xfb, 0x797: 0xfb, -- 0x798: 0xfb, 0x799: 0xfb, 0x79a: 0xfb, 0x79b: 0xfb, 0x79c: 0xfb, 0x79d: 0xfb, 0x79e: 0xfb, 0x79f: 0xfb, -- 0x7a0: 0x77, 0x7a1: 0x78, 0x7a2: 0x79, 0x7a3: 0x19b, 0x7a4: 0x7a, 0x7a5: 0x7b, 0x7a6: 0x19c, 0x7a7: 0x7c, -- 0x7a8: 0x7d, 0x7a9: 0xfb, 0x7aa: 0xfb, 0x7ab: 0xfb, 0x7ac: 0xfb, 0x7ad: 0xfb, 0x7ae: 0xfb, 0x7af: 0xfb, -- 0x7b0: 0xfb, 0x7b1: 0xfb, 0x7b2: 0xfb, 0x7b3: 0xfb, 0x7b4: 0xfb, 0x7b5: 0xfb, 0x7b6: 0xfb, 0x7b7: 0xfb, -- 0x7b8: 0xfb, 0x7b9: 0xfb, 0x7ba: 0xfb, 0x7bb: 0xfb, 0x7bc: 0xfb, 0x7bd: 0xfb, 0x7be: 0xfb, 0x7bf: 0xfb, -+ 0x780: 0xfd, 0x781: 0xfd, 0x782: 0xfd, 0x783: 0xfd, 0x784: 0xfd, 0x785: 0xfd, 0x786: 0xfd, 0x787: 0xfd, -+ 0x788: 0xfd, 0x789: 0xfd, 0x78a: 0xfd, 0x78b: 0xfd, 0x78c: 0xfd, 0x78d: 0xfd, 0x78e: 0xfd, 0x78f: 0xfd, -+ 0x790: 0xfd, 0x791: 0xfd, 0x792: 0xfd, 0x793: 0xfd, 0x794: 0xfd, 0x795: 0xfd, 0x796: 0xfd, 0x797: 0xfd, -+ 0x798: 0xfd, 0x799: 0xfd, 0x79a: 0xfd, 0x79b: 0xfd, 0x79c: 0xfd, 0x79d: 0xfd, 0x79e: 0xfd, 0x79f: 0xfd, -+ 0x7a0: 0x75, 0x7a1: 0x76, 0x7a2: 0x77, 0x7a3: 0x78, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x7b, 0x7a7: 0x7c, -+ 0x7a8: 0x7d, 0x7a9: 0xfd, 0x7aa: 0xfd, 0x7ab: 0xfd, 0x7ac: 0xfd, 0x7ad: 0xfd, 0x7ae: 0xfd, 0x7af: 0xfd, -+ 0x7b0: 0xfd, 0x7b1: 0xfd, 0x7b2: 0xfd, 0x7b3: 0xfd, 0x7b4: 0xfd, 0x7b5: 0xfd, 0x7b6: 0xfd, 0x7b7: 0xfd, -+ 0x7b8: 0xfd, 0x7b9: 0xfd, 0x7ba: 0xfd, 0x7bb: 0xfd, 0x7bc: 0xfd, 0x7bd: 0xfd, 0x7be: 0xfd, 0x7bf: 0xfd, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0xa0, 0x7c1: 0xa0, 0x7c2: 0xa0, 0x7c3: 0xa0, 0x7c4: 0xa0, 0x7c5: 0xa0, 0x7c6: 0xa0, 0x7c7: 0xa0, -- 0x7c8: 0xa0, 0x7c9: 0xa0, 0x7ca: 0xa0, 0x7cb: 0xa0, 0x7cc: 0xa0, 0x7cd: 0x19d, 0x7ce: 0xfb, 0x7cf: 0xfb, -- 0x7d0: 0xfb, 0x7d1: 0xfb, 0x7d2: 0xfb, 0x7d3: 0xfb, 0x7d4: 0xfb, 0x7d5: 0xfb, 0x7d6: 0xfb, 0x7d7: 0xfb, -- 0x7d8: 0xfb, 0x7d9: 0xfb, 0x7da: 0xfb, 0x7db: 0xfb, 0x7dc: 0xfb, 0x7dd: 0xfb, 0x7de: 0xfb, 0x7df: 0xfb, -- 0x7e0: 0xfb, 0x7e1: 0xfb, 0x7e2: 0xfb, 0x7e3: 0xfb, 0x7e4: 0xfb, 0x7e5: 0xfb, 0x7e6: 0xfb, 0x7e7: 0xfb, -- 0x7e8: 0xfb, 0x7e9: 0xfb, 0x7ea: 0xfb, 0x7eb: 0xfb, 0x7ec: 0xfb, 0x7ed: 0xfb, 0x7ee: 0xfb, 0x7ef: 0xfb, -- 0x7f0: 0xfb, 0x7f1: 0xfb, 0x7f2: 0xfb, 0x7f3: 0xfb, 0x7f4: 0xfb, 0x7f5: 0xfb, 0x7f6: 0xfb, 0x7f7: 0xfb, -- 0x7f8: 0xfb, 0x7f9: 0xfb, 0x7fa: 0xfb, 0x7fb: 0xfb, 0x7fc: 0xfb, 0x7fd: 0xfb, 0x7fe: 0xfb, 0x7ff: 0xfb, -+ 0x7c8: 0xa0, 0x7c9: 0xa0, 0x7ca: 0xa0, 0x7cb: 0xa0, 0x7cc: 0xa0, 0x7cd: 0x19d, 0x7ce: 0xfd, 0x7cf: 0xfd, -+ 0x7d0: 0xfd, 0x7d1: 0xfd, 0x7d2: 0xfd, 0x7d3: 0xfd, 0x7d4: 0xfd, 0x7d5: 0xfd, 0x7d6: 0xfd, 0x7d7: 0xfd, -+ 0x7d8: 0xfd, 0x7d9: 0xfd, 0x7da: 0xfd, 0x7db: 0xfd, 0x7dc: 0xfd, 0x7dd: 0xfd, 0x7de: 0xfd, 0x7df: 0xfd, -+ 0x7e0: 0xfd, 0x7e1: 0xfd, 0x7e2: 0xfd, 0x7e3: 0xfd, 0x7e4: 0xfd, 0x7e5: 0xfd, 0x7e6: 0xfd, 0x7e7: 0xfd, -+ 0x7e8: 0xfd, 0x7e9: 0xfd, 0x7ea: 0xfd, 0x7eb: 0xfd, 0x7ec: 0xfd, 0x7ed: 0xfd, 0x7ee: 0xfd, 0x7ef: 0xfd, -+ 0x7f0: 0xfd, 0x7f1: 0xfd, 0x7f2: 0xfd, 0x7f3: 0xfd, 0x7f4: 0xfd, 0x7f5: 0xfd, 0x7f6: 0xfd, 0x7f7: 0xfd, -+ 0x7f8: 0xfd, 0x7f9: 0xfd, 0x7fa: 0xfd, 0x7fb: 0xfd, 0x7fc: 0xfd, 0x7fd: 0xfd, 0x7fe: 0xfd, 0x7ff: 0xfd, - // Block 0x20, offset 0x800 - 0x810: 0x0d, 0x811: 0x0e, 0x812: 0x0f, 0x813: 0x10, 0x814: 0x11, 0x815: 0x0b, 0x816: 0x12, 0x817: 0x07, - 0x818: 0x13, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x14, 0x81c: 0x0b, 0x81d: 0x15, 0x81e: 0x16, 0x81f: 0x17, -@@ -2370,14 +2513,14 @@ var idnaIndex = [2368]uint16{ - 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b, - 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b, - // Block 0x22, offset 0x880 -- 0x880: 0x19e, 0x881: 0x19f, 0x882: 0xfb, 0x883: 0xfb, 0x884: 0x1a0, 0x885: 0x1a0, 0x886: 0x1a0, 0x887: 0x1a1, -- 0x888: 0xfb, 0x889: 0xfb, 0x88a: 0xfb, 0x88b: 0xfb, 0x88c: 0xfb, 0x88d: 0xfb, 0x88e: 0xfb, 0x88f: 0xfb, -- 0x890: 0xfb, 0x891: 0xfb, 0x892: 0xfb, 0x893: 0xfb, 0x894: 0xfb, 0x895: 0xfb, 0x896: 0xfb, 0x897: 0xfb, -- 0x898: 0xfb, 0x899: 0xfb, 0x89a: 0xfb, 0x89b: 0xfb, 0x89c: 0xfb, 0x89d: 0xfb, 0x89e: 0xfb, 0x89f: 0xfb, -- 0x8a0: 0xfb, 0x8a1: 0xfb, 0x8a2: 0xfb, 0x8a3: 0xfb, 0x8a4: 0xfb, 0x8a5: 0xfb, 0x8a6: 0xfb, 0x8a7: 0xfb, -- 0x8a8: 0xfb, 0x8a9: 0xfb, 0x8aa: 0xfb, 0x8ab: 0xfb, 0x8ac: 0xfb, 0x8ad: 0xfb, 0x8ae: 0xfb, 0x8af: 0xfb, -- 0x8b0: 0xfb, 0x8b1: 0xfb, 0x8b2: 0xfb, 0x8b3: 0xfb, 0x8b4: 0xfb, 0x8b5: 0xfb, 0x8b6: 0xfb, 0x8b7: 0xfb, -- 0x8b8: 0xfb, 0x8b9: 0xfb, 0x8ba: 0xfb, 0x8bb: 0xfb, 0x8bc: 0xfb, 0x8bd: 0xfb, 0x8be: 0xfb, 0x8bf: 0xfb, -+ 0x880: 0x19e, 0x881: 0x19f, 0x882: 0xfd, 0x883: 0xfd, 0x884: 0x1a0, 0x885: 0x1a0, 0x886: 0x1a0, 0x887: 0x1a1, -+ 0x888: 0xfd, 0x889: 0xfd, 0x88a: 0xfd, 0x88b: 0xfd, 0x88c: 0xfd, 0x88d: 0xfd, 0x88e: 0xfd, 0x88f: 0xfd, -+ 0x890: 0xfd, 0x891: 0xfd, 0x892: 0xfd, 0x893: 0xfd, 0x894: 0xfd, 0x895: 0xfd, 0x896: 0xfd, 0x897: 0xfd, -+ 0x898: 0xfd, 0x899: 0xfd, 0x89a: 0xfd, 0x89b: 0xfd, 0x89c: 0xfd, 0x89d: 0xfd, 0x89e: 0xfd, 0x89f: 0xfd, -+ 0x8a0: 0xfd, 0x8a1: 0xfd, 0x8a2: 0xfd, 0x8a3: 0xfd, 0x8a4: 0xfd, 0x8a5: 0xfd, 0x8a6: 0xfd, 0x8a7: 0xfd, -+ 0x8a8: 0xfd, 0x8a9: 0xfd, 0x8aa: 0xfd, 0x8ab: 0xfd, 0x8ac: 0xfd, 0x8ad: 0xfd, 0x8ae: 0xfd, 0x8af: 0xfd, -+ 0x8b0: 0xfd, 0x8b1: 0xfd, 0x8b2: 0xfd, 0x8b3: 0xfd, 0x8b4: 0xfd, 0x8b5: 0xfd, 0x8b6: 0xfd, 0x8b7: 0xfd, -+ 0x8b8: 0xfd, 0x8b9: 0xfd, 0x8ba: 0xfd, 0x8bb: 0xfd, 0x8bc: 0xfd, 0x8bd: 0xfd, 0x8be: 0xfd, 0x8bf: 0xfd, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b, - 0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b, -@@ -2393,10 +2536,10 @@ var idnaIndex = [2368]uint16{ - } - - // idnaSparseOffset: 292 entries, 584 bytes --var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x85, 0x8b, 0x94, 0xa4, 0xb2, 0xbd, 0xca, 0xdb, 0xe5, 0xec, 0xf9, 0x10a, 0x111, 0x11c, 0x12b, 0x139, 0x143, 0x145, 0x14a, 0x14d, 0x150, 0x152, 0x15e, 0x169, 0x171, 0x177, 0x17d, 0x182, 0x187, 0x18a, 0x18e, 0x194, 0x199, 0x1a5, 0x1af, 0x1b5, 0x1c6, 0x1d0, 0x1d3, 0x1db, 0x1de, 0x1eb, 0x1f3, 0x1f7, 0x1fe, 0x206, 0x216, 0x222, 0x225, 0x22f, 0x23b, 0x247, 0x253, 0x25b, 0x260, 0x26d, 0x27e, 0x282, 0x28d, 0x291, 0x29a, 0x2a2, 0x2a8, 0x2ad, 0x2b0, 0x2b4, 0x2ba, 0x2be, 0x2c2, 0x2c6, 0x2cc, 0x2d4, 0x2db, 0x2e6, 0x2f0, 0x2f4, 0x2f7, 0x2fd, 0x301, 0x303, 0x306, 0x308, 0x30b, 0x315, 0x318, 0x327, 0x32b, 0x330, 0x333, 0x337, 0x33c, 0x341, 0x347, 0x358, 0x368, 0x36e, 0x372, 0x381, 0x386, 0x38e, 0x398, 0x3a3, 0x3ab, 0x3bc, 0x3c5, 0x3d5, 0x3e2, 0x3ee, 0x3f3, 0x400, 0x404, 0x409, 0x40b, 0x40d, 0x411, 0x413, 0x417, 0x420, 0x426, 0x42a, 0x43a, 0x444, 0x449, 0x44c, 0x452, 0x459, 0x45e, 0x462, 0x468, 0x46d, 0x476, 0x47b, 0x481, 0x488, 0x48f, 0x496, 0x49a, 0x49f, 0x4a2, 0x4a7, 0x4b3, 0x4b9, 0x4be, 0x4c5, 0x4cd, 0x4d2, 0x4d6, 0x4e6, 0x4ed, 0x4f1, 0x4f5, 0x4fc, 0x4fe, 0x501, 0x504, 0x508, 0x511, 0x515, 0x51d, 0x525, 0x52d, 0x539, 0x545, 0x54b, 0x554, 0x560, 0x567, 0x570, 0x57b, 0x582, 0x591, 0x59e, 0x5ab, 0x5b4, 0x5b8, 0x5c7, 0x5cf, 0x5da, 0x5e3, 0x5e9, 0x5f1, 0x5fa, 0x605, 0x608, 0x614, 0x61d, 0x620, 0x625, 0x62e, 0x633, 0x640, 0x64b, 0x654, 0x65e, 0x661, 0x66b, 0x674, 0x680, 0x68d, 0x69a, 0x6a8, 0x6af, 0x6b3, 0x6b7, 0x6ba, 0x6bf, 0x6c2, 0x6c7, 0x6ca, 0x6d1, 0x6d8, 0x6dc, 0x6e7, 0x6ea, 0x6ed, 0x6f0, 0x6f6, 0x6fc, 0x705, 0x708, 0x70b, 0x70e, 0x711, 0x718, 0x71b, 0x720, 0x72a, 0x72d, 0x731, 0x740, 0x74c, 0x750, 0x755, 0x759, 0x75e, 0x762, 0x767, 0x770, 0x77b, 0x781, 0x787, 0x78d, 0x793, 0x79c, 0x79f, 0x7a2, 0x7a6, 0x7aa, 0x7ae, 0x7b4, 0x7ba, 0x7bf, 0x7c2, 0x7d2, 0x7d9, 0x7dc, 0x7e1, 0x7e5, 0x7eb, 0x7f2, 0x7f6, 0x7fa, 0x803, 0x80a, 0x80f, 0x813, 0x821, 0x824, 0x827, 0x82b, 0x82f, 0x832, 0x842, 0x853, 0x856, 0x85b, 0x85d, 0x85f} -+var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x85, 0x8b, 0x94, 0xa4, 0xb2, 0xbd, 0xca, 0xdb, 0xe5, 0xec, 0xf9, 0x10a, 0x111, 0x11c, 0x12b, 0x139, 0x143, 0x145, 0x14a, 0x14d, 0x150, 0x152, 0x15e, 0x169, 0x171, 0x177, 0x17d, 0x182, 0x187, 0x18a, 0x18e, 0x194, 0x199, 0x1a5, 0x1af, 0x1b5, 0x1c6, 0x1d0, 0x1d3, 0x1db, 0x1de, 0x1eb, 0x1f3, 0x1f7, 0x1fe, 0x206, 0x216, 0x222, 0x225, 0x22f, 0x23b, 0x247, 0x253, 0x25b, 0x260, 0x26d, 0x27e, 0x282, 0x28d, 0x291, 0x29a, 0x2a2, 0x2a8, 0x2ad, 0x2b0, 0x2b4, 0x2ba, 0x2be, 0x2c2, 0x2c6, 0x2cc, 0x2d4, 0x2db, 0x2e6, 0x2f0, 0x2f4, 0x2f7, 0x2fd, 0x301, 0x303, 0x306, 0x308, 0x30b, 0x315, 0x318, 0x327, 0x32b, 0x32f, 0x331, 0x33a, 0x33d, 0x341, 0x346, 0x34b, 0x351, 0x362, 0x372, 0x378, 0x37c, 0x38b, 0x390, 0x398, 0x3a2, 0x3ad, 0x3b5, 0x3c6, 0x3cf, 0x3df, 0x3ec, 0x3f8, 0x3fd, 0x40a, 0x40e, 0x413, 0x415, 0x417, 0x41b, 0x41d, 0x421, 0x42a, 0x430, 0x434, 0x444, 0x44e, 0x453, 0x456, 0x45c, 0x463, 0x468, 0x46c, 0x472, 0x477, 0x480, 0x485, 0x48b, 0x492, 0x499, 0x4a0, 0x4a4, 0x4a9, 0x4ac, 0x4b1, 0x4bd, 0x4c3, 0x4c8, 0x4cf, 0x4d7, 0x4dc, 0x4e0, 0x4f0, 0x4f7, 0x4fb, 0x4ff, 0x506, 0x508, 0x50b, 0x50e, 0x512, 0x51b, 0x51f, 0x527, 0x52f, 0x537, 0x543, 0x54f, 0x555, 0x55e, 0x56a, 0x571, 0x57a, 0x585, 0x58c, 0x59b, 0x5a8, 0x5b5, 0x5be, 0x5c2, 0x5d1, 0x5d9, 0x5e4, 0x5ed, 0x5f3, 0x5fb, 0x604, 0x60f, 0x612, 0x61e, 0x627, 0x62a, 0x62f, 0x638, 0x63d, 0x64a, 0x655, 0x65e, 0x668, 0x66b, 0x675, 0x67e, 0x68a, 0x697, 0x6a4, 0x6b2, 0x6b9, 0x6bd, 0x6c1, 0x6c4, 0x6c9, 0x6cc, 0x6d1, 0x6d4, 0x6db, 0x6e2, 0x6e6, 0x6f1, 0x6f4, 0x6f7, 0x6fa, 0x700, 0x706, 0x70f, 0x712, 0x715, 0x718, 0x71b, 0x722, 0x725, 0x72a, 0x734, 0x737, 0x73b, 0x74a, 0x756, 0x75a, 0x75f, 0x763, 0x768, 0x76c, 0x771, 0x77a, 0x785, 0x78b, 0x791, 0x797, 0x79d, 0x7a6, 0x7a9, 0x7ac, 0x7b0, 0x7b4, 0x7b8, 0x7be, 0x7c4, 0x7c9, 0x7cc, 0x7dc, 0x7e3, 0x7e6, 0x7eb, 0x7ef, 0x7f5, 0x7fc, 0x800, 0x804, 0x80d, 0x814, 0x819, 0x81d, 0x82b, 0x82e, 0x831, 0x835, 0x839, 0x83c, 0x83f, 0x844, 0x846, 0x848} - --// idnaSparseValues: 2146 entries, 8584 bytes --var idnaSparseValues = [2146]valueRange{ -+// idnaSparseValues: 2123 entries, 8492 bytes -+var idnaSparseValues = [2123]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0000, lo: 0x07}, - {value: 0xe105, lo: 0x80, hi: 0x96}, -@@ -2427,15 +2570,15 @@ var idnaSparseValues = [2146]valueRange{ - // Block 0x2, offset 0x19 - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, -- {value: 0x0249, lo: 0xb0, hi: 0xb0}, -+ {value: 0x00a9, lo: 0xb0, hi: 0xb0}, - {value: 0x037d, lo: 0xb1, hi: 0xb1}, -- {value: 0x0259, lo: 0xb2, hi: 0xb2}, -- {value: 0x0269, lo: 0xb3, hi: 0xb3}, -+ {value: 0x00b1, lo: 0xb2, hi: 0xb2}, -+ {value: 0x00b9, lo: 0xb3, hi: 0xb3}, - {value: 0x034d, lo: 0xb4, hi: 0xb4}, - {value: 0x0395, lo: 0xb5, hi: 0xb5}, - {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, -- {value: 0x0279, lo: 0xb7, hi: 0xb7}, -- {value: 0x0289, lo: 0xb8, hi: 0xb8}, -+ {value: 0x00c1, lo: 0xb7, hi: 0xb7}, -+ {value: 0x00c9, lo: 0xb8, hi: 0xb8}, - {value: 0x0008, lo: 0xb9, hi: 0xbf}, - // Block 0x3, offset 0x25 - {value: 0x0000, lo: 0x01}, -@@ -2457,7 +2600,7 @@ var idnaSparseValues = [2146]valueRange{ - // Block 0x6, offset 0x33 - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0x86}, -- {value: 0x0401, lo: 0x87, hi: 0x87}, -+ {value: 0x0131, lo: 0x87, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x88}, - {value: 0x0018, lo: 0x89, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0x8c}, -@@ -2643,7 +2786,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0x81, hi: 0xb0}, - {value: 0x3308, lo: 0xb1, hi: 0xb1}, - {value: 0x0008, lo: 0xb2, hi: 0xb2}, -- {value: 0x08f1, lo: 0xb3, hi: 0xb3}, -+ {value: 0x01f1, lo: 0xb3, hi: 0xb3}, - {value: 0x3308, lo: 0xb4, hi: 0xb9}, - {value: 0x3b08, lo: 0xba, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbe}, -@@ -2666,8 +2809,8 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9b}, -- {value: 0x0961, lo: 0x9c, hi: 0x9c}, -- {value: 0x0999, lo: 0x9d, hi: 0x9d}, -+ {value: 0x0201, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0209, lo: 0x9d, hi: 0x9d}, - {value: 0x0008, lo: 0x9e, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0x18, offset 0xf9 -@@ -3075,13 +3218,13 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0x44, offset 0x260 - {value: 0x0000, lo: 0x0c}, -- {value: 0x0e29, lo: 0x80, hi: 0x80}, -- {value: 0x0e41, lo: 0x81, hi: 0x81}, -- {value: 0x0e59, lo: 0x82, hi: 0x82}, -- {value: 0x0e71, lo: 0x83, hi: 0x83}, -- {value: 0x0e89, lo: 0x84, hi: 0x85}, -- {value: 0x0ea1, lo: 0x86, hi: 0x86}, -- {value: 0x0eb9, lo: 0x87, hi: 0x87}, -+ {value: 0x02a9, lo: 0x80, hi: 0x80}, -+ {value: 0x02b1, lo: 0x81, hi: 0x81}, -+ {value: 0x02b9, lo: 0x82, hi: 0x82}, -+ {value: 0x02c1, lo: 0x83, hi: 0x83}, -+ {value: 0x02c9, lo: 0x84, hi: 0x85}, -+ {value: 0x02d1, lo: 0x86, hi: 0x86}, -+ {value: 0x02d9, lo: 0x87, hi: 0x87}, - {value: 0x057d, lo: 0x88, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x8f}, - {value: 0x059d, lo: 0x90, hi: 0xba}, -@@ -3133,18 +3276,18 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x83, hi: 0x83}, - {value: 0x0008, lo: 0x84, hi: 0x84}, - {value: 0x0018, lo: 0x85, hi: 0x88}, -- {value: 0x24c1, lo: 0x89, hi: 0x89}, -+ {value: 0x0851, lo: 0x89, hi: 0x89}, - {value: 0x0018, lo: 0x8a, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x4a, offset 0x29a - {value: 0x0000, lo: 0x07}, - {value: 0x0018, lo: 0x80, hi: 0xab}, -- {value: 0x24f1, lo: 0xac, hi: 0xac}, -- {value: 0x2529, lo: 0xad, hi: 0xad}, -+ {value: 0x0859, lo: 0xac, hi: 0xac}, -+ {value: 0x0861, lo: 0xad, hi: 0xad}, - {value: 0x0018, lo: 0xae, hi: 0xae}, -- {value: 0x2579, lo: 0xaf, hi: 0xaf}, -- {value: 0x25b1, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0869, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0871, lo: 0xb0, hi: 0xb0}, - {value: 0x0018, lo: 0xb1, hi: 0xbf}, - // Block 0x4b, offset 0x2a2 - {value: 0x0000, lo: 0x05}, -@@ -3166,19 +3309,19 @@ var idnaSparseValues = [2146]valueRange{ - // Block 0x4e, offset 0x2b0 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x8b}, -- {value: 0x28c1, lo: 0x8c, hi: 0x8c}, -+ {value: 0x0929, lo: 0x8c, hi: 0x8c}, - {value: 0x0018, lo: 0x8d, hi: 0xbf}, - // Block 0x4f, offset 0x2b4 - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0xb3}, - {value: 0x0e7e, lo: 0xb4, hi: 0xb4}, -- {value: 0x292a, lo: 0xb5, hi: 0xb5}, -+ {value: 0x0932, lo: 0xb5, hi: 0xb5}, - {value: 0x0e9e, lo: 0xb6, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x50, offset 0x2ba - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x9b}, -- {value: 0x2941, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0939, lo: 0x9c, hi: 0x9c}, - {value: 0x0018, lo: 0x9d, hi: 0xbf}, - // Block 0x51, offset 0x2be - {value: 0x0000, lo: 0x03}, -@@ -3277,16 +3420,16 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0x80, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x98}, - {value: 0x3308, lo: 0x99, hi: 0x9a}, -- {value: 0x29e2, lo: 0x9b, hi: 0x9b}, -- {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, -+ {value: 0x096a, lo: 0x9b, hi: 0x9b}, -+ {value: 0x0972, lo: 0x9c, hi: 0x9c}, - {value: 0x0008, lo: 0x9d, hi: 0x9e}, -- {value: 0x2a31, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0979, lo: 0x9f, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa0}, - {value: 0x0008, lo: 0xa1, hi: 0xbf}, - // Block 0x61, offset 0x315 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xbe}, -- {value: 0x2a69, lo: 0xbf, hi: 0xbf}, -+ {value: 0x0981, lo: 0xbf, hi: 0xbf}, - // Block 0x62, offset 0x318 - {value: 0x0000, lo: 0x0e}, - {value: 0x0040, lo: 0x80, hi: 0x84}, -@@ -3309,46 +3452,58 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xa4, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x64, offset 0x32b -- {value: 0x0030, lo: 0x04}, -- {value: 0x2aa2, lo: 0x80, hi: 0x9d}, -- {value: 0x305a, lo: 0x9e, hi: 0x9e}, -+ {value: 0x0008, lo: 0x03}, -+ {value: 0x098a, lo: 0x80, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, -- {value: 0x30a2, lo: 0xa0, hi: 0xbf}, -- // Block 0x65, offset 0x330 -+ {value: 0x0a82, lo: 0xa0, hi: 0xbf}, -+ // Block 0x65, offset 0x32f -+ {value: 0x0008, lo: 0x01}, -+ {value: 0x0d19, lo: 0x80, hi: 0xbf}, -+ // Block 0x66, offset 0x331 -+ {value: 0x0008, lo: 0x08}, -+ {value: 0x0f19, lo: 0x80, hi: 0xb0}, -+ {value: 0x4045, lo: 0xb1, hi: 0xb1}, -+ {value: 0x10a1, lo: 0xb2, hi: 0xb3}, -+ {value: 0x4065, lo: 0xb4, hi: 0xb4}, -+ {value: 0x10b1, lo: 0xb5, hi: 0xb7}, -+ {value: 0x4085, lo: 0xb8, hi: 0xb8}, -+ {value: 0x4085, lo: 0xb9, hi: 0xb9}, -+ {value: 0x10c9, lo: 0xba, hi: 0xbf}, -+ // Block 0x67, offset 0x33a - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbf}, -- // Block 0x66, offset 0x333 -+ // Block 0x68, offset 0x33d - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0x8c}, - {value: 0x0040, lo: 0x8d, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xbf}, -- // Block 0x67, offset 0x337 -+ // Block 0x69, offset 0x341 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xbd}, - {value: 0x0018, lo: 0xbe, hi: 0xbf}, -- // Block 0x68, offset 0x33c -+ // Block 0x6a, offset 0x346 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x8c}, - {value: 0x0018, lo: 0x8d, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xbf}, -- // Block 0x69, offset 0x341 -+ // Block 0x6b, offset 0x34b - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x0018, lo: 0xa6, hi: 0xaf}, - {value: 0x3308, lo: 0xb0, hi: 0xb1}, - {value: 0x0018, lo: 0xb2, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbf}, -- // Block 0x6a, offset 0x347 -+ // Block 0x6c, offset 0x351 - {value: 0x0000, lo: 0x10}, - {value: 0x0040, lo: 0x80, hi: 0x81}, - {value: 0xe00d, lo: 0x82, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0x83}, - {value: 0x03f5, lo: 0x84, hi: 0x84}, -- {value: 0x1329, lo: 0x85, hi: 0x85}, -+ {value: 0x0479, lo: 0x85, hi: 0x85}, - {value: 0x447d, lo: 0x86, hi: 0x86}, - {value: 0xe07d, lo: 0x87, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x88}, -@@ -3357,10 +3512,10 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x8b, hi: 0xb4}, - {value: 0xe01d, lo: 0xb5, hi: 0xb5}, - {value: 0x0008, lo: 0xb6, hi: 0xb7}, -- {value: 0x2009, lo: 0xb8, hi: 0xb8}, -- {value: 0x6ec1, lo: 0xb9, hi: 0xb9}, -+ {value: 0x0741, lo: 0xb8, hi: 0xb8}, -+ {value: 0x13f1, lo: 0xb9, hi: 0xb9}, - {value: 0x0008, lo: 0xba, hi: 0xbf}, -- // Block 0x6b, offset 0x358 -+ // Block 0x6d, offset 0x362 - {value: 0x0000, lo: 0x0f}, - {value: 0x0008, lo: 0x80, hi: 0x81}, - {value: 0x3308, lo: 0x82, hi: 0x82}, -@@ -3377,19 +3532,19 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xad, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, -- // Block 0x6c, offset 0x368 -+ // Block 0x6e, offset 0x372 - {value: 0x0000, lo: 0x05}, - {value: 0x0208, lo: 0x80, hi: 0xb1}, - {value: 0x0108, lo: 0xb2, hi: 0xb2}, - {value: 0x0008, lo: 0xb3, hi: 0xb3}, - {value: 0x0018, lo: 0xb4, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbf}, -- // Block 0x6d, offset 0x36e -+ // Block 0x6f, offset 0x378 - {value: 0x0000, lo: 0x03}, - {value: 0x3008, lo: 0x80, hi: 0x81}, - {value: 0x0008, lo: 0x82, hi: 0xb3}, - {value: 0x3008, lo: 0xb4, hi: 0xbf}, -- // Block 0x6e, offset 0x372 -+ // Block 0x70, offset 0x37c - {value: 0x0000, lo: 0x0e}, - {value: 0x3008, lo: 0x80, hi: 0x83}, - {value: 0x3b08, lo: 0x84, hi: 0x84}, -@@ -3405,13 +3560,13 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0018, lo: 0xbc, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbe}, - {value: 0x3308, lo: 0xbf, hi: 0xbf}, -- // Block 0x6f, offset 0x381 -+ // Block 0x71, offset 0x38b - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x3308, lo: 0xa6, hi: 0xad}, - {value: 0x0018, lo: 0xae, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, -- // Block 0x70, offset 0x386 -+ // Block 0x72, offset 0x390 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x3308, lo: 0x87, hi: 0x91}, -@@ -3420,7 +3575,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x94, hi: 0x9e}, - {value: 0x0018, lo: 0x9f, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbf}, -- // Block 0x71, offset 0x38e -+ // Block 0x73, offset 0x398 - {value: 0x0000, lo: 0x09}, - {value: 0x3308, lo: 0x80, hi: 0x82}, - {value: 0x3008, lo: 0x83, hi: 0x83}, -@@ -3431,7 +3586,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3008, lo: 0xba, hi: 0xbb}, - {value: 0x3308, lo: 0xbc, hi: 0xbd}, - {value: 0x3008, lo: 0xbe, hi: 0xbf}, -- // Block 0x72, offset 0x398 -+ // Block 0x74, offset 0x3a2 - {value: 0x0000, lo: 0x0a}, - {value: 0x3808, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x8d}, -@@ -3443,7 +3598,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xa5, hi: 0xa5}, - {value: 0x0008, lo: 0xa6, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, -- // Block 0x73, offset 0x3a3 -+ // Block 0x75, offset 0x3ad - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0xa8}, - {value: 0x3308, lo: 0xa9, hi: 0xae}, -@@ -3452,7 +3607,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3008, lo: 0xb3, hi: 0xb4}, - {value: 0x3308, lo: 0xb5, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, -- // Block 0x74, offset 0x3ab -+ // Block 0x76, offset 0x3b5 - {value: 0x0000, lo: 0x10}, - {value: 0x0008, lo: 0x80, hi: 0x82}, - {value: 0x3308, lo: 0x83, hi: 0x83}, -@@ -3470,7 +3625,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xbc, hi: 0xbc}, - {value: 0x3008, lo: 0xbd, hi: 0xbd}, - {value: 0x0008, lo: 0xbe, hi: 0xbf}, -- // Block 0x75, offset 0x3bc -+ // Block 0x77, offset 0x3c6 - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x3308, lo: 0xb0, hi: 0xb0}, -@@ -3480,7 +3635,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xb7, hi: 0xb8}, - {value: 0x0008, lo: 0xb9, hi: 0xbd}, - {value: 0x3308, lo: 0xbe, hi: 0xbf}, -- // Block 0x76, offset 0x3c5 -+ // Block 0x78, offset 0x3cf - {value: 0x0000, lo: 0x0f}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x3308, lo: 0x81, hi: 0x81}, -@@ -3497,7 +3652,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3008, lo: 0xb5, hi: 0xb5}, - {value: 0x3b08, lo: 0xb6, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, -- // Block 0x77, offset 0x3d5 -+ // Block 0x79, offset 0x3df - {value: 0x0000, lo: 0x0c}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0x86}, -@@ -3511,26 +3666,26 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0xa8, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, -- // Block 0x78, offset 0x3e2 -+ // Block 0x7a, offset 0x3ec - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x9a}, - {value: 0x0018, lo: 0x9b, hi: 0x9b}, - {value: 0x449d, lo: 0x9c, hi: 0x9c}, - {value: 0x44b5, lo: 0x9d, hi: 0x9d}, -- {value: 0x2971, lo: 0x9e, hi: 0x9e}, -+ {value: 0x0941, lo: 0x9e, hi: 0x9e}, - {value: 0xe06d, lo: 0x9f, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa8}, -- {value: 0x6ed9, lo: 0xa9, hi: 0xa9}, -+ {value: 0x13f9, lo: 0xa9, hi: 0xa9}, - {value: 0x0018, lo: 0xaa, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x44cd, lo: 0xb0, hi: 0xbf}, -- // Block 0x79, offset 0x3ee -+ // Block 0x7b, offset 0x3f8 - {value: 0x0000, lo: 0x04}, - {value: 0x44ed, lo: 0x80, hi: 0x8f}, - {value: 0x450d, lo: 0x90, hi: 0x9f}, - {value: 0x452d, lo: 0xa0, hi: 0xaf}, - {value: 0x450d, lo: 0xb0, hi: 0xbf}, -- // Block 0x7a, offset 0x3f3 -+ // Block 0x7c, offset 0x3fd - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0xa2}, - {value: 0x3008, lo: 0xa3, hi: 0xa4}, -@@ -3544,76 +3699,76 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, -- // Block 0x7b, offset 0x400 -+ // Block 0x7d, offset 0x40a - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbf}, -- // Block 0x7c, offset 0x404 -+ // Block 0x7e, offset 0x40e - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x8a}, - {value: 0x0018, lo: 0x8b, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, -- // Block 0x7d, offset 0x409 -+ // Block 0x7f, offset 0x413 - {value: 0x0000, lo: 0x01}, - {value: 0x0040, lo: 0x80, hi: 0xbf}, -- // Block 0x7e, offset 0x40b -+ // Block 0x80, offset 0x415 - {value: 0x0020, lo: 0x01}, - {value: 0x454d, lo: 0x80, hi: 0xbf}, -- // Block 0x7f, offset 0x40d -+ // Block 0x81, offset 0x417 - {value: 0x0020, lo: 0x03}, - {value: 0x4d4d, lo: 0x80, hi: 0x94}, - {value: 0x4b0d, lo: 0x95, hi: 0x95}, - {value: 0x4fed, lo: 0x96, hi: 0xbf}, -- // Block 0x80, offset 0x411 -+ // Block 0x82, offset 0x41b - {value: 0x0020, lo: 0x01}, - {value: 0x552d, lo: 0x80, hi: 0xbf}, -- // Block 0x81, offset 0x413 -+ // Block 0x83, offset 0x41d - {value: 0x0020, lo: 0x03}, - {value: 0x5d2d, lo: 0x80, hi: 0x84}, - {value: 0x568d, lo: 0x85, hi: 0x85}, - {value: 0x5dcd, lo: 0x86, hi: 0xbf}, -- // Block 0x82, offset 0x417 -+ // Block 0x84, offset 0x421 - {value: 0x0020, lo: 0x08}, - {value: 0x6b8d, lo: 0x80, hi: 0x8f}, - {value: 0x6d4d, lo: 0x90, hi: 0x90}, - {value: 0x6d8d, lo: 0x91, hi: 0xab}, -- {value: 0x6ef1, lo: 0xac, hi: 0xac}, -+ {value: 0x1401, lo: 0xac, hi: 0xac}, - {value: 0x70ed, lo: 0xad, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x710d, lo: 0xb0, hi: 0xbf}, -- // Block 0x83, offset 0x420 -+ // Block 0x85, offset 0x42a - {value: 0x0020, lo: 0x05}, - {value: 0x730d, lo: 0x80, hi: 0xad}, - {value: 0x656d, lo: 0xae, hi: 0xae}, - {value: 0x78cd, lo: 0xaf, hi: 0xb5}, - {value: 0x6f8d, lo: 0xb6, hi: 0xb6}, - {value: 0x79ad, lo: 0xb7, hi: 0xbf}, -- // Block 0x84, offset 0x426 -- {value: 0x0028, lo: 0x03}, -- {value: 0x7c71, lo: 0x80, hi: 0x82}, -- {value: 0x7c31, lo: 0x83, hi: 0x83}, -- {value: 0x7ce9, lo: 0x84, hi: 0xbf}, -- // Block 0x85, offset 0x42a -- {value: 0x0038, lo: 0x0f}, -- {value: 0x9e01, lo: 0x80, hi: 0x83}, -- {value: 0x9ea9, lo: 0x84, hi: 0x85}, -- {value: 0x9ee1, lo: 0x86, hi: 0x87}, -- {value: 0x9f19, lo: 0x88, hi: 0x8f}, -+ // Block 0x86, offset 0x430 -+ {value: 0x0008, lo: 0x03}, -+ {value: 0x1751, lo: 0x80, hi: 0x82}, -+ {value: 0x1741, lo: 0x83, hi: 0x83}, -+ {value: 0x1769, lo: 0x84, hi: 0xbf}, -+ // Block 0x87, offset 0x434 -+ {value: 0x0008, lo: 0x0f}, -+ {value: 0x1d81, lo: 0x80, hi: 0x83}, -+ {value: 0x1d99, lo: 0x84, hi: 0x85}, -+ {value: 0x1da1, lo: 0x86, hi: 0x87}, -+ {value: 0x1da9, lo: 0x88, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x90}, - {value: 0x0040, lo: 0x91, hi: 0x91}, -- {value: 0xa0d9, lo: 0x92, hi: 0x97}, -- {value: 0xa1f1, lo: 0x98, hi: 0x9c}, -- {value: 0xa2d1, lo: 0x9d, hi: 0xb3}, -- {value: 0x9d91, lo: 0xb4, hi: 0xb4}, -- {value: 0x9e01, lo: 0xb5, hi: 0xb5}, -- {value: 0xa7d9, lo: 0xb6, hi: 0xbb}, -- {value: 0xa8b9, lo: 0xbc, hi: 0xbc}, -- {value: 0xa849, lo: 0xbd, hi: 0xbd}, -- {value: 0xa929, lo: 0xbe, hi: 0xbf}, -- // Block 0x86, offset 0x43a -+ {value: 0x1de9, lo: 0x92, hi: 0x97}, -+ {value: 0x1e11, lo: 0x98, hi: 0x9c}, -+ {value: 0x1e31, lo: 0x9d, hi: 0xb3}, -+ {value: 0x1d71, lo: 0xb4, hi: 0xb4}, -+ {value: 0x1d81, lo: 0xb5, hi: 0xb5}, -+ {value: 0x1ee9, lo: 0xb6, hi: 0xbb}, -+ {value: 0x1f09, lo: 0xbc, hi: 0xbc}, -+ {value: 0x1ef9, lo: 0xbd, hi: 0xbd}, -+ {value: 0x1f19, lo: 0xbe, hi: 0xbf}, -+ // Block 0x88, offset 0x444 - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8c}, -@@ -3624,24 +3779,24 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0xbc, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbe}, - {value: 0x0008, lo: 0xbf, hi: 0xbf}, -- // Block 0x87, offset 0x444 -+ // Block 0x89, offset 0x44e - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0xbf}, -- // Block 0x88, offset 0x449 -+ // Block 0x8a, offset 0x453 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbf}, -- // Block 0x89, offset 0x44c -+ // Block 0x8b, offset 0x456 - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x82}, - {value: 0x0040, lo: 0x83, hi: 0x86}, - {value: 0x0018, lo: 0x87, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xbf}, -- // Block 0x8a, offset 0x452 -+ // Block 0x8c, offset 0x45c - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x8e}, - {value: 0x0040, lo: 0x8f, hi: 0x8f}, -@@ -3649,31 +3804,31 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x9d, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa0}, - {value: 0x0040, lo: 0xa1, hi: 0xbf}, -- // Block 0x8b, offset 0x459 -+ // Block 0x8d, offset 0x463 - {value: 0x0000, lo: 0x04}, - {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xbc}, - {value: 0x3308, lo: 0xbd, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbf}, -- // Block 0x8c, offset 0x45e -+ // Block 0x8e, offset 0x468 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0x9c}, - {value: 0x0040, lo: 0x9d, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, -- // Block 0x8d, offset 0x462 -+ // Block 0x8f, offset 0x46c - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x90}, - {value: 0x0040, lo: 0x91, hi: 0x9f}, - {value: 0x3308, lo: 0xa0, hi: 0xa0}, - {value: 0x0018, lo: 0xa1, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, -- // Block 0x8e, offset 0x468 -+ // Block 0x90, offset 0x472 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xac}, - {value: 0x0008, lo: 0xad, hi: 0xbf}, -- // Block 0x8f, offset 0x46d -+ // Block 0x91, offset 0x477 - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x81}, -@@ -3683,20 +3838,20 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0x90, hi: 0xb5}, - {value: 0x3308, lo: 0xb6, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbf}, -- // Block 0x90, offset 0x476 -+ // Block 0x92, offset 0x480 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9e}, - {value: 0x0018, lo: 0x9f, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, -- // Block 0x91, offset 0x47b -+ // Block 0x93, offset 0x485 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0xbf}, -- // Block 0x92, offset 0x481 -+ // Block 0x94, offset 0x48b - {value: 0x0000, lo: 0x06}, - {value: 0xe145, lo: 0x80, hi: 0x87}, - {value: 0xe1c5, lo: 0x88, hi: 0x8f}, -@@ -3704,7 +3859,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x8b0d, lo: 0x98, hi: 0x9f}, - {value: 0x8b25, lo: 0xa0, hi: 0xa7}, - {value: 0x0008, lo: 0xa8, hi: 0xbf}, -- // Block 0x93, offset 0x488 -+ // Block 0x95, offset 0x492 - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9f}, -@@ -3712,7 +3867,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xaa, hi: 0xaf}, - {value: 0x8b25, lo: 0xb0, hi: 0xb7}, - {value: 0x8b0d, lo: 0xb8, hi: 0xbf}, -- // Block 0x94, offset 0x48f -+ // Block 0x96, offset 0x499 - {value: 0x0000, lo: 0x06}, - {value: 0xe145, lo: 0x80, hi: 0x87}, - {value: 0xe1c5, lo: 0x88, hi: 0x8f}, -@@ -3720,28 +3875,28 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x94, hi: 0x97}, - {value: 0x0008, lo: 0x98, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, -- // Block 0x95, offset 0x496 -+ // Block 0x97, offset 0x4a0 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, -- // Block 0x96, offset 0x49a -+ // Block 0x98, offset 0x4a4 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xae}, - {value: 0x0018, lo: 0xaf, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, -- // Block 0x97, offset 0x49f -+ // Block 0x99, offset 0x4a9 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, -- // Block 0x98, offset 0x4a2 -+ // Block 0x9a, offset 0x4ac - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xbf}, -- // Block 0x99, offset 0x4a7 -+ // Block 0x9b, offset 0x4b1 - {value: 0x0000, lo: 0x0b}, - {value: 0x0808, lo: 0x80, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0x87}, -@@ -3754,20 +3909,20 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0808, lo: 0xbc, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbe}, - {value: 0x0808, lo: 0xbf, hi: 0xbf}, -- // Block 0x9a, offset 0x4b3 -+ // Block 0x9c, offset 0x4bd - {value: 0x0000, lo: 0x05}, - {value: 0x0808, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x96}, - {value: 0x0818, lo: 0x97, hi: 0x9f}, - {value: 0x0808, lo: 0xa0, hi: 0xb6}, - {value: 0x0818, lo: 0xb7, hi: 0xbf}, -- // Block 0x9b, offset 0x4b9 -+ // Block 0x9d, offset 0x4c3 - {value: 0x0000, lo: 0x04}, - {value: 0x0808, lo: 0x80, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0xa6}, - {value: 0x0818, lo: 0xa7, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, -- // Block 0x9c, offset 0x4be -+ // Block 0x9e, offset 0x4c8 - {value: 0x0000, lo: 0x06}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0808, lo: 0xa0, hi: 0xb2}, -@@ -3775,7 +3930,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0808, lo: 0xb4, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xba}, - {value: 0x0818, lo: 0xbb, hi: 0xbf}, -- // Block 0x9d, offset 0x4c5 -+ // Block 0x9f, offset 0x4cf - {value: 0x0000, lo: 0x07}, - {value: 0x0808, lo: 0x80, hi: 0x95}, - {value: 0x0818, lo: 0x96, hi: 0x9b}, -@@ -3784,18 +3939,18 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0808, lo: 0xa0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbe}, - {value: 0x0818, lo: 0xbf, hi: 0xbf}, -- // Block 0x9e, offset 0x4cd -+ // Block 0xa0, offset 0x4d7 - {value: 0x0000, lo: 0x04}, - {value: 0x0808, lo: 0x80, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbb}, - {value: 0x0818, lo: 0xbc, hi: 0xbd}, - {value: 0x0808, lo: 0xbe, hi: 0xbf}, -- // Block 0x9f, offset 0x4d2 -+ // Block 0xa1, offset 0x4dc - {value: 0x0000, lo: 0x03}, - {value: 0x0818, lo: 0x80, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x91}, - {value: 0x0818, lo: 0x92, hi: 0xbf}, -- // Block 0xa0, offset 0x4d6 -+ // Block 0xa2, offset 0x4e0 - {value: 0x0000, lo: 0x0f}, - {value: 0x0808, lo: 0x80, hi: 0x80}, - {value: 0x3308, lo: 0x81, hi: 0x83}, -@@ -3812,7 +3967,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xb8, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbe}, - {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -- // Block 0xa1, offset 0x4e6 -+ // Block 0xa3, offset 0x4f0 - {value: 0x0000, lo: 0x06}, - {value: 0x0818, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x8f}, -@@ -3820,17 +3975,17 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x99, hi: 0x9f}, - {value: 0x0808, lo: 0xa0, hi: 0xbc}, - {value: 0x0818, lo: 0xbd, hi: 0xbf}, -- // Block 0xa2, offset 0x4ed -+ // Block 0xa4, offset 0x4f7 - {value: 0x0000, lo: 0x03}, - {value: 0x0808, lo: 0x80, hi: 0x9c}, - {value: 0x0818, lo: 0x9d, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, -- // Block 0xa3, offset 0x4f1 -+ // Block 0xa5, offset 0x4fb - {value: 0x0000, lo: 0x03}, - {value: 0x0808, lo: 0x80, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xb8}, - {value: 0x0018, lo: 0xb9, hi: 0xbf}, -- // Block 0xa4, offset 0x4f5 -+ // Block 0xa6, offset 0x4ff - {value: 0x0000, lo: 0x06}, - {value: 0x0808, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x97}, -@@ -3838,23 +3993,23 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0808, lo: 0xa0, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xb7}, - {value: 0x0818, lo: 0xb8, hi: 0xbf}, -- // Block 0xa5, offset 0x4fc -+ // Block 0xa7, offset 0x506 - {value: 0x0000, lo: 0x01}, - {value: 0x0808, lo: 0x80, hi: 0xbf}, -- // Block 0xa6, offset 0x4fe -+ // Block 0xa8, offset 0x508 - {value: 0x0000, lo: 0x02}, - {value: 0x0808, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0xbf}, -- // Block 0xa7, offset 0x501 -+ // Block 0xa9, offset 0x50b - {value: 0x0000, lo: 0x02}, - {value: 0x03dd, lo: 0x80, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xbf}, -- // Block 0xa8, offset 0x504 -+ // Block 0xaa, offset 0x50e - {value: 0x0000, lo: 0x03}, - {value: 0x0808, lo: 0x80, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xb9}, - {value: 0x0818, lo: 0xba, hi: 0xbf}, -- // Block 0xa9, offset 0x508 -+ // Block 0xab, offset 0x512 - {value: 0x0000, lo: 0x08}, - {value: 0x0908, lo: 0x80, hi: 0x80}, - {value: 0x0a08, lo: 0x81, hi: 0xa1}, -@@ -3864,12 +4019,12 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xa8, hi: 0xaf}, - {value: 0x0808, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, -- // Block 0xaa, offset 0x511 -+ // Block 0xac, offset 0x51b - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0818, lo: 0xa0, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, -- // Block 0xab, offset 0x515 -+ // Block 0xad, offset 0x51f - {value: 0x0000, lo: 0x07}, - {value: 0x0808, lo: 0x80, hi: 0xa9}, - {value: 0x0040, lo: 0xaa, hi: 0xaa}, -@@ -3878,7 +4033,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x0808, lo: 0xb0, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xbf}, -- // Block 0xac, offset 0x51d -+ // Block 0xae, offset 0x527 - {value: 0x0000, lo: 0x07}, - {value: 0x0808, lo: 0x80, hi: 0x9c}, - {value: 0x0818, lo: 0x9d, hi: 0xa6}, -@@ -3887,7 +4042,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0a08, lo: 0xb0, hi: 0xb2}, - {value: 0x0c08, lo: 0xb3, hi: 0xb3}, - {value: 0x0a08, lo: 0xb4, hi: 0xbf}, -- // Block 0xad, offset 0x525 -+ // Block 0xaf, offset 0x52f - {value: 0x0000, lo: 0x07}, - {value: 0x0a08, lo: 0x80, hi: 0x84}, - {value: 0x0808, lo: 0x85, hi: 0x85}, -@@ -3896,7 +4051,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0c18, lo: 0x94, hi: 0x94}, - {value: 0x0818, lo: 0x95, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0xbf}, -- // Block 0xae, offset 0x52d -+ // Block 0xb0, offset 0x537 - {value: 0x0000, lo: 0x0b}, - {value: 0x0040, lo: 0x80, hi: 0xaf}, - {value: 0x0a08, lo: 0xb0, hi: 0xb0}, -@@ -3909,7 +4064,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0a08, lo: 0xbb, hi: 0xbc}, - {value: 0x0c08, lo: 0xbd, hi: 0xbd}, - {value: 0x0a08, lo: 0xbe, hi: 0xbf}, -- // Block 0xaf, offset 0x539 -+ // Block 0xb1, offset 0x543 - {value: 0x0000, lo: 0x0b}, - {value: 0x0808, lo: 0x80, hi: 0x80}, - {value: 0x0a08, lo: 0x81, hi: 0x81}, -@@ -3922,14 +4077,14 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x8c, hi: 0x9f}, - {value: 0x0808, lo: 0xa0, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, -- // Block 0xb0, offset 0x545 -+ // Block 0xb2, offset 0x54f - {value: 0x0000, lo: 0x05}, - {value: 0x3008, lo: 0x80, hi: 0x80}, - {value: 0x3308, lo: 0x81, hi: 0x81}, - {value: 0x3008, lo: 0x82, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0xb7}, - {value: 0x3308, lo: 0xb8, hi: 0xbf}, -- // Block 0xb1, offset 0x54b -+ // Block 0xb3, offset 0x555 - {value: 0x0000, lo: 0x08}, - {value: 0x3308, lo: 0x80, hi: 0x85}, - {value: 0x3b08, lo: 0x86, hi: 0x86}, -@@ -3939,7 +4094,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0xa6, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbe}, - {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -- // Block 0xb2, offset 0x554 -+ // Block 0xb4, offset 0x55e - {value: 0x0000, lo: 0x0b}, - {value: 0x3308, lo: 0x80, hi: 0x81}, - {value: 0x3008, lo: 0x82, hi: 0x82}, -@@ -3952,7 +4107,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0018, lo: 0xbb, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbd}, - {value: 0x0018, lo: 0xbe, hi: 0xbf}, -- // Block 0xb3, offset 0x560 -+ // Block 0xb5, offset 0x56a - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x81}, - {value: 0x0040, lo: 0x82, hi: 0x8f}, -@@ -3960,7 +4115,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xa9, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, -- // Block 0xb4, offset 0x567 -+ // Block 0xb6, offset 0x571 - {value: 0x0000, lo: 0x08}, - {value: 0x3308, lo: 0x80, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0xa6}, -@@ -3970,7 +4125,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3b08, lo: 0xb3, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xb5}, - {value: 0x0008, lo: 0xb6, hi: 0xbf}, -- // Block 0xb5, offset 0x570 -+ // Block 0xb7, offset 0x57a - {value: 0x0000, lo: 0x0a}, - {value: 0x0018, lo: 0x80, hi: 0x83}, - {value: 0x0008, lo: 0x84, hi: 0x84}, -@@ -3982,7 +4137,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0018, lo: 0xb4, hi: 0xb5}, - {value: 0x0008, lo: 0xb6, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, -- // Block 0xb6, offset 0x57b -+ // Block 0xb8, offset 0x585 - {value: 0x0000, lo: 0x06}, - {value: 0x3308, lo: 0x80, hi: 0x81}, - {value: 0x3008, lo: 0x82, hi: 0x82}, -@@ -3990,7 +4145,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3008, lo: 0xb3, hi: 0xb5}, - {value: 0x3308, lo: 0xb6, hi: 0xbe}, - {value: 0x3008, lo: 0xbf, hi: 0xbf}, -- // Block 0xb7, offset 0x582 -+ // Block 0xb9, offset 0x58c - {value: 0x0000, lo: 0x0e}, - {value: 0x3808, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0x84}, -@@ -4006,7 +4161,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xa0, hi: 0xa0}, - {value: 0x0018, lo: 0xa1, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, -- // Block 0xb8, offset 0x591 -+ // Block 0xba, offset 0x59b - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0x92}, -@@ -4020,7 +4175,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0018, lo: 0xb8, hi: 0xbd}, - {value: 0x3308, lo: 0xbe, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, -- // Block 0xb9, offset 0x59e -+ // Block 0xbb, offset 0x5a8 - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x87}, -@@ -4034,7 +4189,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0018, lo: 0xa9, hi: 0xa9}, - {value: 0x0040, lo: 0xaa, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, -- // Block 0xba, offset 0x5ab -+ // Block 0xbc, offset 0x5b5 - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0x9e}, - {value: 0x3308, lo: 0x9f, hi: 0x9f}, -@@ -4044,12 +4199,12 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xab, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, -- // Block 0xbb, offset 0x5b4 -+ // Block 0xbd, offset 0x5be - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xb4}, - {value: 0x3008, lo: 0xb5, hi: 0xb7}, - {value: 0x3308, lo: 0xb8, hi: 0xbf}, -- // Block 0xbc, offset 0x5b8 -+ // Block 0xbe, offset 0x5c2 - {value: 0x0000, lo: 0x0e}, - {value: 0x3008, lo: 0x80, hi: 0x81}, - {value: 0x3b08, lo: 0x82, hi: 0x82}, -@@ -4065,7 +4220,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0x9e, hi: 0x9e}, - {value: 0x0008, lo: 0x9f, hi: 0xa1}, - {value: 0x0040, lo: 0xa2, hi: 0xbf}, -- // Block 0xbd, offset 0x5c7 -+ // Block 0xbf, offset 0x5d1 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x3008, lo: 0xb0, hi: 0xb2}, -@@ -4074,7 +4229,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xba, hi: 0xba}, - {value: 0x3008, lo: 0xbb, hi: 0xbe}, - {value: 0x3308, lo: 0xbf, hi: 0xbf}, -- // Block 0xbe, offset 0x5cf -+ // Block 0xc0, offset 0x5d9 - {value: 0x0000, lo: 0x0a}, - {value: 0x3308, lo: 0x80, hi: 0x80}, - {value: 0x3008, lo: 0x81, hi: 0x81}, -@@ -4086,7 +4241,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0xbf}, -- // Block 0xbf, offset 0x5da -+ // Block 0xc1, offset 0x5e4 - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0xae}, - {value: 0x3008, lo: 0xaf, hi: 0xb1}, -@@ -4096,14 +4251,14 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xbc, hi: 0xbd}, - {value: 0x3008, lo: 0xbe, hi: 0xbe}, - {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -- // Block 0xc0, offset 0x5e3 -+ // Block 0xc2, offset 0x5ed - {value: 0x0000, lo: 0x05}, - {value: 0x3308, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x97}, - {value: 0x0008, lo: 0x98, hi: 0x9b}, - {value: 0x3308, lo: 0x9c, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0xbf}, -- // Block 0xc1, offset 0x5e9 -+ // Block 0xc3, offset 0x5f3 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x3008, lo: 0xb0, hi: 0xb2}, -@@ -4112,7 +4267,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xbd, hi: 0xbd}, - {value: 0x3008, lo: 0xbe, hi: 0xbe}, - {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -- // Block 0xc2, offset 0x5f1 -+ // Block 0xc4, offset 0x5fb - {value: 0x0000, lo: 0x08}, - {value: 0x3308, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x83}, -@@ -4122,7 +4277,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xac}, - {value: 0x0040, lo: 0xad, hi: 0xbf}, -- // Block 0xc3, offset 0x5fa -+ // Block 0xc5, offset 0x604 - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0xaa}, - {value: 0x3308, lo: 0xab, hi: 0xab}, -@@ -4134,11 +4289,11 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xb7, hi: 0xb7}, - {value: 0x0008, lo: 0xb8, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xbf}, -- // Block 0xc4, offset 0x605 -+ // Block 0xc6, offset 0x60f - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0040, lo: 0x8a, hi: 0xbf}, -- // Block 0xc5, offset 0x608 -+ // Block 0xc7, offset 0x612 - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x9a}, - {value: 0x0040, lo: 0x9b, hi: 0x9c}, -@@ -4151,7 +4306,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0018, lo: 0xba, hi: 0xbf}, -- // Block 0xc6, offset 0x614 -+ // Block 0xc8, offset 0x61e - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0xab}, - {value: 0x3008, lo: 0xac, hi: 0xae}, -@@ -4161,17 +4316,17 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xba, hi: 0xba}, - {value: 0x0018, lo: 0xbb, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, -- // Block 0xc7, offset 0x61d -+ // Block 0xc9, offset 0x627 - {value: 0x0000, lo: 0x02}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x049d, lo: 0xa0, hi: 0xbf}, -- // Block 0xc8, offset 0x620 -+ // Block 0xca, offset 0x62a - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xa9}, - {value: 0x0018, lo: 0xaa, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xbe}, - {value: 0x0008, lo: 0xbf, hi: 0xbf}, -- // Block 0xc9, offset 0x625 -+ // Block 0xcb, offset 0x62f - {value: 0x0000, lo: 0x08}, - {value: 0x3008, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0x81}, -@@ -4181,13 +4336,13 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x87, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0xbf}, -- // Block 0xca, offset 0x62e -+ // Block 0xcc, offset 0x638 - {value: 0x0000, lo: 0x04}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xa9}, - {value: 0x0008, lo: 0xaa, hi: 0xbf}, -- // Block 0xcb, offset 0x633 -+ // Block 0xcd, offset 0x63d - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0x90}, - {value: 0x3008, lo: 0x91, hi: 0x93}, -@@ -4201,7 +4356,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0xa3, hi: 0xa3}, - {value: 0x3008, lo: 0xa4, hi: 0xa4}, - {value: 0x0040, lo: 0xa5, hi: 0xbf}, -- // Block 0xcc, offset 0x640 -+ // Block 0xce, offset 0x64a - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x3308, lo: 0x81, hi: 0x8a}, -@@ -4213,7 +4368,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0xba, hi: 0xba}, - {value: 0x3308, lo: 0xbb, hi: 0xbe}, - {value: 0x0018, lo: 0xbf, hi: 0xbf}, -- // Block 0xcd, offset 0x64b -+ // Block 0xcf, offset 0x655 - {value: 0x0000, lo: 0x08}, - {value: 0x0018, lo: 0x80, hi: 0x86}, - {value: 0x3b08, lo: 0x87, hi: 0x87}, -@@ -4223,7 +4378,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3008, lo: 0x97, hi: 0x98}, - {value: 0x3308, lo: 0x99, hi: 0x9b}, - {value: 0x0008, lo: 0x9c, hi: 0xbf}, -- // Block 0xce, offset 0x654 -+ // Block 0xd0, offset 0x65e - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x3308, lo: 0x8a, hi: 0x96}, -@@ -4234,11 +4389,11 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0x9d, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0xa2}, - {value: 0x0040, lo: 0xa3, hi: 0xbf}, -- // Block 0xcf, offset 0x65e -+ // Block 0xd1, offset 0x668 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xbf}, -- // Block 0xd0, offset 0x661 -+ // Block 0xd2, offset 0x66b - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x89}, -@@ -4249,7 +4404,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xb8, hi: 0xbd}, - {value: 0x3008, lo: 0xbe, hi: 0xbe}, - {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -- // Block 0xd1, offset 0x66b -+ // Block 0xd3, offset 0x675 - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x85}, -@@ -4259,7 +4414,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xad, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb1}, - {value: 0x0008, lo: 0xb2, hi: 0xbf}, -- // Block 0xd2, offset 0x674 -+ // Block 0xd4, offset 0x67e - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x91}, -@@ -4272,7 +4427,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3008, lo: 0xb4, hi: 0xb4}, - {value: 0x3308, lo: 0xb5, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, -- // Block 0xd3, offset 0x680 -+ // Block 0xd5, offset 0x68a - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x87}, -@@ -4286,7 +4441,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xbc, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbe}, - {value: 0x3308, lo: 0xbf, hi: 0xbf}, -- // Block 0xd4, offset 0x68d -+ // Block 0xd6, offset 0x697 - {value: 0x0000, lo: 0x0c}, - {value: 0x3308, lo: 0x80, hi: 0x83}, - {value: 0x3b08, lo: 0x84, hi: 0x85}, -@@ -4300,7 +4455,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0xa7, hi: 0xa8}, - {value: 0x0040, lo: 0xa9, hi: 0xa9}, - {value: 0x0008, lo: 0xaa, hi: 0xbf}, -- // Block 0xd5, offset 0x69a -+ // Block 0xd7, offset 0x6a4 - {value: 0x0000, lo: 0x0d}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x3008, lo: 0x8a, hi: 0x8e}, -@@ -4315,7 +4470,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x99, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa9}, - {value: 0x0040, lo: 0xaa, hi: 0xbf}, -- // Block 0xd6, offset 0x6a8 -+ // Block 0xd8, offset 0x6b2 - {value: 0x0000, lo: 0x06}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb2}, -@@ -4323,41 +4478,41 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3008, lo: 0xb5, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xbf}, -- // Block 0xd7, offset 0x6af -+ // Block 0xd9, offset 0x6b9 - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb0}, - {value: 0x0040, lo: 0xb1, hi: 0xbf}, -- // Block 0xd8, offset 0x6b3 -+ // Block 0xda, offset 0x6bd - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xbe}, - {value: 0x0018, lo: 0xbf, hi: 0xbf}, -- // Block 0xd9, offset 0x6b7 -+ // Block 0xdb, offset 0x6c1 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0xbf}, -- // Block 0xda, offset 0x6ba -+ // Block 0xdc, offset 0x6c4 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, -- // Block 0xdb, offset 0x6bf -+ // Block 0xdd, offset 0x6c9 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0xbf}, -- // Block 0xdc, offset 0x6c2 -+ // Block 0xde, offset 0x6cc - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x0340, lo: 0xb0, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xbf}, -- // Block 0xdd, offset 0x6c7 -+ // Block 0xdf, offset 0x6d1 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0xbf}, -- // Block 0xde, offset 0x6ca -+ // Block 0xe0, offset 0x6d4 - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, -@@ -4365,7 +4520,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xaa, hi: 0xad}, - {value: 0x0018, lo: 0xae, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, -- // Block 0xdf, offset 0x6d1 -+ // Block 0xe1, offset 0x6db - {value: 0x0000, lo: 0x06}, - {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xad}, -@@ -4373,12 +4528,12 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x3308, lo: 0xb0, hi: 0xb4}, - {value: 0x0018, lo: 0xb5, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xbf}, -- // Block 0xe0, offset 0x6d8 -+ // Block 0xe2, offset 0x6e2 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x3308, lo: 0xb0, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xbf}, -- // Block 0xe1, offset 0x6dc -+ // Block 0xe3, offset 0x6e6 - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0x83}, - {value: 0x0018, lo: 0x84, hi: 0x85}, -@@ -4390,33 +4545,33 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0xa3, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbf}, -- // Block 0xe2, offset 0x6e7 -+ // Block 0xe4, offset 0x6f1 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0xbf}, -- // Block 0xe3, offset 0x6ea -+ // Block 0xe5, offset 0x6f4 - {value: 0x0000, lo: 0x02}, - {value: 0xe105, lo: 0x80, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, -- // Block 0xe4, offset 0x6ed -+ // Block 0xe6, offset 0x6f7 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0x9a}, - {value: 0x0040, lo: 0x9b, hi: 0xbf}, -- // Block 0xe5, offset 0x6f0 -+ // Block 0xe7, offset 0x6fa - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0x8e}, - {value: 0x3308, lo: 0x8f, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x90}, - {value: 0x3008, lo: 0x91, hi: 0xbf}, -- // Block 0xe6, offset 0x6f6 -+ // Block 0xe8, offset 0x700 - {value: 0x0000, lo: 0x05}, - {value: 0x3008, lo: 0x80, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8e}, - {value: 0x3308, lo: 0x8f, hi: 0x92}, - {value: 0x0008, lo: 0x93, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, -- // Block 0xe7, offset 0x6fc -+ // Block 0xe9, offset 0x706 - {value: 0x0000, lo: 0x08}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa1}, -@@ -4426,23 +4581,23 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xa5, hi: 0xaf}, - {value: 0x3008, lo: 0xb0, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xbf}, -- // Block 0xe8, offset 0x705 -+ // Block 0xea, offset 0x70f - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbf}, -- // Block 0xe9, offset 0x708 -+ // Block 0xeb, offset 0x712 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0xbf}, -- // Block 0xea, offset 0x70b -+ // Block 0xec, offset 0x715 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0xbf}, -- // Block 0xeb, offset 0x70e -+ // Block 0xed, offset 0x718 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0xbf}, -- // Block 0xec, offset 0x711 -+ // Block 0xee, offset 0x71b - {value: 0x0000, lo: 0x06}, - {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x92}, -@@ -4450,17 +4605,17 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0008, lo: 0xa4, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, -- // Block 0xed, offset 0x718 -+ // Block 0xef, offset 0x722 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, -- // Block 0xee, offset 0x71b -+ // Block 0xf0, offset 0x725 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xaa}, - {value: 0x0040, lo: 0xab, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbf}, -- // Block 0xef, offset 0x720 -+ // Block 0xf1, offset 0x72a - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x8f}, -@@ -4471,32 +4626,32 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0018, lo: 0x9f, hi: 0x9f}, - {value: 0x03c0, lo: 0xa0, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xbf}, -- // Block 0xf0, offset 0x72a -+ // Block 0xf2, offset 0x734 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xbf}, -- // Block 0xf1, offset 0x72d -+ // Block 0xf3, offset 0x737 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xa6}, - {value: 0x0040, lo: 0xa7, hi: 0xa8}, - {value: 0x0018, lo: 0xa9, hi: 0xbf}, -- // Block 0xf2, offset 0x731 -+ // Block 0xf4, offset 0x73b - {value: 0x0000, lo: 0x0e}, - {value: 0x0018, lo: 0x80, hi: 0x9d}, -- {value: 0xb609, lo: 0x9e, hi: 0x9e}, -- {value: 0xb651, lo: 0x9f, hi: 0x9f}, -- {value: 0xb699, lo: 0xa0, hi: 0xa0}, -- {value: 0xb701, lo: 0xa1, hi: 0xa1}, -- {value: 0xb769, lo: 0xa2, hi: 0xa2}, -- {value: 0xb7d1, lo: 0xa3, hi: 0xa3}, -- {value: 0xb839, lo: 0xa4, hi: 0xa4}, -+ {value: 0x2211, lo: 0x9e, hi: 0x9e}, -+ {value: 0x2219, lo: 0x9f, hi: 0x9f}, -+ {value: 0x2221, lo: 0xa0, hi: 0xa0}, -+ {value: 0x2229, lo: 0xa1, hi: 0xa1}, -+ {value: 0x2231, lo: 0xa2, hi: 0xa2}, -+ {value: 0x2239, lo: 0xa3, hi: 0xa3}, -+ {value: 0x2241, lo: 0xa4, hi: 0xa4}, - {value: 0x3018, lo: 0xa5, hi: 0xa6}, - {value: 0x3318, lo: 0xa7, hi: 0xa9}, - {value: 0x0018, lo: 0xaa, hi: 0xac}, - {value: 0x3018, lo: 0xad, hi: 0xb2}, - {value: 0x0340, lo: 0xb3, hi: 0xba}, - {value: 0x3318, lo: 0xbb, hi: 0xbf}, -- // Block 0xf3, offset 0x740 -+ // Block 0xf5, offset 0x74a - {value: 0x0000, lo: 0x0b}, - {value: 0x3318, lo: 0x80, hi: 0x82}, - {value: 0x0018, lo: 0x83, hi: 0x84}, -@@ -4504,45 +4659,45 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0018, lo: 0x8c, hi: 0xa9}, - {value: 0x3318, lo: 0xaa, hi: 0xad}, - {value: 0x0018, lo: 0xae, hi: 0xba}, -- {value: 0xb8a1, lo: 0xbb, hi: 0xbb}, -- {value: 0xb8e9, lo: 0xbc, hi: 0xbc}, -- {value: 0xb931, lo: 0xbd, hi: 0xbd}, -- {value: 0xb999, lo: 0xbe, hi: 0xbe}, -- {value: 0xba01, lo: 0xbf, hi: 0xbf}, -- // Block 0xf4, offset 0x74c -+ {value: 0x2249, lo: 0xbb, hi: 0xbb}, -+ {value: 0x2251, lo: 0xbc, hi: 0xbc}, -+ {value: 0x2259, lo: 0xbd, hi: 0xbd}, -+ {value: 0x2261, lo: 0xbe, hi: 0xbe}, -+ {value: 0x2269, lo: 0xbf, hi: 0xbf}, -+ // Block 0xf6, offset 0x756 - {value: 0x0000, lo: 0x03}, -- {value: 0xba69, lo: 0x80, hi: 0x80}, -+ {value: 0x2271, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0xa8}, - {value: 0x0040, lo: 0xa9, hi: 0xbf}, -- // Block 0xf5, offset 0x750 -+ // Block 0xf7, offset 0x75a - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x81}, - {value: 0x3318, lo: 0x82, hi: 0x84}, - {value: 0x0018, lo: 0x85, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0xbf}, -- // Block 0xf6, offset 0x755 -+ // Block 0xf8, offset 0x75f - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xbf}, -- // Block 0xf7, offset 0x759 -+ // Block 0xf9, offset 0x763 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xbf}, -- // Block 0xf8, offset 0x75e -+ // Block 0xfa, offset 0x768 - {value: 0x0000, lo: 0x03}, - {value: 0x3308, lo: 0x80, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xba}, - {value: 0x3308, lo: 0xbb, hi: 0xbf}, -- // Block 0xf9, offset 0x762 -+ // Block 0xfb, offset 0x76c - {value: 0x0000, lo: 0x04}, - {value: 0x3308, lo: 0x80, hi: 0xac}, - {value: 0x0018, lo: 0xad, hi: 0xb4}, - {value: 0x3308, lo: 0xb5, hi: 0xb5}, - {value: 0x0018, lo: 0xb6, hi: 0xbf}, -- // Block 0xfa, offset 0x767 -+ // Block 0xfc, offset 0x771 - {value: 0x0000, lo: 0x08}, - {value: 0x0018, lo: 0x80, hi: 0x83}, - {value: 0x3308, lo: 0x84, hi: 0x84}, -@@ -4552,7 +4707,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xa0, hi: 0xa0}, - {value: 0x3308, lo: 0xa1, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, -- // Block 0xfb, offset 0x770 -+ // Block 0xfd, offset 0x77a - {value: 0x0000, lo: 0x0a}, - {value: 0x3308, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x87}, -@@ -4564,35 +4719,35 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xa5, hi: 0xa5}, - {value: 0x3308, lo: 0xa6, hi: 0xaa}, - {value: 0x0040, lo: 0xab, hi: 0xbf}, -- // Block 0xfc, offset 0x77b -+ // Block 0xfe, offset 0x785 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0xac}, - {value: 0x0040, lo: 0xad, hi: 0xaf}, - {value: 0x3308, lo: 0xb0, hi: 0xb6}, - {value: 0x0008, lo: 0xb7, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbf}, -- // Block 0xfd, offset 0x781 -+ // Block 0xff, offset 0x78b - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0040, lo: 0x8a, hi: 0x8d}, - {value: 0x0008, lo: 0x8e, hi: 0x8e}, - {value: 0x0018, lo: 0x8f, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0xbf}, -- // Block 0xfe, offset 0x787 -+ // Block 0x100, offset 0x791 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0xab}, - {value: 0x3308, lo: 0xac, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbe}, - {value: 0x0018, lo: 0xbf, hi: 0xbf}, -- // Block 0xff, offset 0x78d -+ // Block 0x101, offset 0x797 - {value: 0x0000, lo: 0x05}, - {value: 0x0808, lo: 0x80, hi: 0x84}, - {value: 0x0040, lo: 0x85, hi: 0x86}, - {value: 0x0818, lo: 0x87, hi: 0x8f}, - {value: 0x3308, lo: 0x90, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0xbf}, -- // Block 0x100, offset 0x793 -+ // Block 0x102, offset 0x79d - {value: 0x0000, lo: 0x08}, - {value: 0x0a08, lo: 0x80, hi: 0x83}, - {value: 0x3308, lo: 0x84, hi: 0x8a}, -@@ -4602,71 +4757,71 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0x9a, hi: 0x9d}, - {value: 0x0818, lo: 0x9e, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, -- // Block 0x101, offset 0x79c -+ // Block 0x103, offset 0x7a6 - {value: 0x0000, lo: 0x02}, - {value: 0x0040, lo: 0x80, hi: 0xb0}, - {value: 0x0818, lo: 0xb1, hi: 0xbf}, -- // Block 0x102, offset 0x79f -+ // Block 0x104, offset 0x7a9 - {value: 0x0000, lo: 0x02}, - {value: 0x0818, lo: 0x80, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, -- // Block 0x103, offset 0x7a2 -+ // Block 0x105, offset 0x7ac - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0818, lo: 0x81, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbf}, -- // Block 0x104, offset 0x7a6 -+ // Block 0x106, offset 0x7b0 - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xbf}, -- // Block 0x105, offset 0x7aa -+ // Block 0x107, offset 0x7b4 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbf}, -- // Block 0x106, offset 0x7ae -+ // Block 0x108, offset 0x7b8 - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x93}, - {value: 0x0040, lo: 0x94, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xb0}, - {value: 0x0018, lo: 0xb1, hi: 0xbf}, -- // Block 0x107, offset 0x7b4 -+ // Block 0x109, offset 0x7be - {value: 0x0000, lo: 0x05}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x90}, - {value: 0x0018, lo: 0x91, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xbf}, -- // Block 0x108, offset 0x7ba -+ // Block 0x10a, offset 0x7c4 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x8f}, -- {value: 0xc229, lo: 0x90, hi: 0x90}, -+ {value: 0x2491, lo: 0x90, hi: 0x90}, - {value: 0x0018, lo: 0x91, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xbf}, -- // Block 0x109, offset 0x7bf -+ // Block 0x10b, offset 0x7c9 - {value: 0x0000, lo: 0x02}, - {value: 0x0040, lo: 0x80, hi: 0xa5}, - {value: 0x0018, lo: 0xa6, hi: 0xbf}, -- // Block 0x10a, offset 0x7c2 -+ // Block 0x10c, offset 0x7cc - {value: 0x0000, lo: 0x0f}, -- {value: 0xc851, lo: 0x80, hi: 0x80}, -- {value: 0xc8a1, lo: 0x81, hi: 0x81}, -- {value: 0xc8f1, lo: 0x82, hi: 0x82}, -- {value: 0xc941, lo: 0x83, hi: 0x83}, -- {value: 0xc991, lo: 0x84, hi: 0x84}, -- {value: 0xc9e1, lo: 0x85, hi: 0x85}, -- {value: 0xca31, lo: 0x86, hi: 0x86}, -- {value: 0xca81, lo: 0x87, hi: 0x87}, -- {value: 0xcad1, lo: 0x88, hi: 0x88}, -+ {value: 0x2611, lo: 0x80, hi: 0x80}, -+ {value: 0x2619, lo: 0x81, hi: 0x81}, -+ {value: 0x2621, lo: 0x82, hi: 0x82}, -+ {value: 0x2629, lo: 0x83, hi: 0x83}, -+ {value: 0x2631, lo: 0x84, hi: 0x84}, -+ {value: 0x2639, lo: 0x85, hi: 0x85}, -+ {value: 0x2641, lo: 0x86, hi: 0x86}, -+ {value: 0x2649, lo: 0x87, hi: 0x87}, -+ {value: 0x2651, lo: 0x88, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x8f}, -- {value: 0xcb21, lo: 0x90, hi: 0x90}, -- {value: 0xcb41, lo: 0x91, hi: 0x91}, -+ {value: 0x2659, lo: 0x90, hi: 0x90}, -+ {value: 0x2661, lo: 0x91, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa5}, - {value: 0x0040, lo: 0xa6, hi: 0xbf}, -- // Block 0x10b, offset 0x7d2 -+ // Block 0x10d, offset 0x7dc - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x97}, - {value: 0x0040, lo: 0x98, hi: 0x9f}, -@@ -4674,29 +4829,29 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xad, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbf}, -- // Block 0x10c, offset 0x7d9 -+ // Block 0x10e, offset 0x7e3 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xbf}, -- // Block 0x10d, offset 0x7dc -+ // Block 0x10f, offset 0x7e6 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x98}, - {value: 0x0040, lo: 0x99, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xbf}, -- // Block 0x10e, offset 0x7e1 -+ // Block 0x110, offset 0x7eb - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xbf}, -- // Block 0x10f, offset 0x7e5 -+ // Block 0x111, offset 0x7ef - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xbf}, -- // Block 0x110, offset 0x7eb -+ // Block 0x112, offset 0x7f5 - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8f}, -@@ -4704,17 +4859,17 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xbf}, -- // Block 0x111, offset 0x7f2 -+ // Block 0x113, offset 0x7fc - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xb9}, - {value: 0x0018, lo: 0xba, hi: 0xbf}, -- // Block 0x112, offset 0x7f6 -+ // Block 0x114, offset 0x800 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8c}, - {value: 0x0018, lo: 0x8d, hi: 0xbf}, -- // Block 0x113, offset 0x7fa -+ // Block 0x115, offset 0x804 - {value: 0x0000, lo: 0x08}, - {value: 0x0018, lo: 0x80, hi: 0x93}, - {value: 0x0040, lo: 0x94, hi: 0x9f}, -@@ -4724,7 +4879,7 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xb5, hi: 0xb7}, - {value: 0x0018, lo: 0xb8, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbf}, -- // Block 0x114, offset 0x803 -+ // Block 0x116, offset 0x80d - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x8f}, -@@ -4732,109 +4887,74 @@ var idnaSparseValues = [2146]valueRange{ - {value: 0x0040, lo: 0xa9, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, -- // Block 0x115, offset 0x80a -+ // Block 0x117, offset 0x814 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x82}, - {value: 0x0040, lo: 0x83, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0xbf}, -- // Block 0x116, offset 0x80f -+ // Block 0x118, offset 0x819 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x92}, - {value: 0x0040, lo: 0x93, hi: 0x93}, - {value: 0x0018, lo: 0x94, hi: 0xbf}, -- // Block 0x117, offset 0x813 -+ // Block 0x119, offset 0x81d - {value: 0x0000, lo: 0x0d}, - {value: 0x0018, lo: 0x80, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0xaf}, -- {value: 0x1f41, lo: 0xb0, hi: 0xb0}, -- {value: 0x00c9, lo: 0xb1, hi: 0xb1}, -- {value: 0x0069, lo: 0xb2, hi: 0xb2}, -- {value: 0x0079, lo: 0xb3, hi: 0xb3}, -- {value: 0x1f51, lo: 0xb4, hi: 0xb4}, -- {value: 0x1f61, lo: 0xb5, hi: 0xb5}, -- {value: 0x1f71, lo: 0xb6, hi: 0xb6}, -- {value: 0x1f81, lo: 0xb7, hi: 0xb7}, -- {value: 0x1f91, lo: 0xb8, hi: 0xb8}, -- {value: 0x1fa1, lo: 0xb9, hi: 0xb9}, -+ {value: 0x06e1, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0049, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0029, lo: 0xb2, hi: 0xb2}, -+ {value: 0x0031, lo: 0xb3, hi: 0xb3}, -+ {value: 0x06e9, lo: 0xb4, hi: 0xb4}, -+ {value: 0x06f1, lo: 0xb5, hi: 0xb5}, -+ {value: 0x06f9, lo: 0xb6, hi: 0xb6}, -+ {value: 0x0701, lo: 0xb7, hi: 0xb7}, -+ {value: 0x0709, lo: 0xb8, hi: 0xb8}, -+ {value: 0x0711, lo: 0xb9, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, -- // Block 0x118, offset 0x821 -+ // Block 0x11a, offset 0x82b - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0xbf}, -- // Block 0x119, offset 0x824 -+ // Block 0x11b, offset 0x82e - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, -- // Block 0x11a, offset 0x827 -+ // Block 0x11c, offset 0x831 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, -- // Block 0x11b, offset 0x82b -+ // Block 0x11d, offset 0x835 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xa1}, - {value: 0x0040, lo: 0xa2, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, -- // Block 0x11c, offset 0x82f -+ // Block 0x11e, offset 0x839 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xa0}, - {value: 0x0040, lo: 0xa1, hi: 0xbf}, -- // Block 0x11d, offset 0x832 -- {value: 0x0020, lo: 0x0f}, -- {value: 0xdf21, lo: 0x80, hi: 0x89}, -- {value: 0x8e35, lo: 0x8a, hi: 0x8a}, -- {value: 0xe061, lo: 0x8b, hi: 0x9c}, -- {value: 0x8e55, lo: 0x9d, hi: 0x9d}, -- {value: 0xe2a1, lo: 0x9e, hi: 0xa2}, -- {value: 0x8e75, lo: 0xa3, hi: 0xa3}, -- {value: 0xe341, lo: 0xa4, hi: 0xab}, -- {value: 0x7f0d, lo: 0xac, hi: 0xac}, -- {value: 0xe441, lo: 0xad, hi: 0xaf}, -- {value: 0x8e95, lo: 0xb0, hi: 0xb0}, -- {value: 0xe4a1, lo: 0xb1, hi: 0xb6}, -- {value: 0x8eb5, lo: 0xb7, hi: 0xb9}, -- {value: 0xe561, lo: 0xba, hi: 0xba}, -- {value: 0x8f15, lo: 0xbb, hi: 0xbb}, -- {value: 0xe581, lo: 0xbc, hi: 0xbf}, -- // Block 0x11e, offset 0x842 -- {value: 0x0020, lo: 0x10}, -- {value: 0x93b5, lo: 0x80, hi: 0x80}, -- {value: 0xf101, lo: 0x81, hi: 0x86}, -- {value: 0x93d5, lo: 0x87, hi: 0x8a}, -- {value: 0xda61, lo: 0x8b, hi: 0x8b}, -- {value: 0xf1c1, lo: 0x8c, hi: 0x96}, -- {value: 0x9455, lo: 0x97, hi: 0x97}, -- {value: 0xf321, lo: 0x98, hi: 0xa3}, -- {value: 0x9475, lo: 0xa4, hi: 0xa6}, -- {value: 0xf4a1, lo: 0xa7, hi: 0xaa}, -- {value: 0x94d5, lo: 0xab, hi: 0xab}, -- {value: 0xf521, lo: 0xac, hi: 0xac}, -- {value: 0x94f5, lo: 0xad, hi: 0xad}, -- {value: 0xf541, lo: 0xae, hi: 0xaf}, -- {value: 0x9515, lo: 0xb0, hi: 0xb1}, -- {value: 0xf581, lo: 0xb2, hi: 0xbe}, -- {value: 0x2040, lo: 0xbf, hi: 0xbf}, -- // Block 0x11f, offset 0x853 -+ // Block 0x11f, offset 0x83c - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0xbf}, -- // Block 0x120, offset 0x856 -+ // Block 0x120, offset 0x83f - {value: 0x0000, lo: 0x04}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0340, lo: 0x81, hi: 0x81}, - {value: 0x0040, lo: 0x82, hi: 0x9f}, - {value: 0x0340, lo: 0xa0, hi: 0xbf}, -- // Block 0x121, offset 0x85b -+ // Block 0x121, offset 0x844 - {value: 0x0000, lo: 0x01}, - {value: 0x0340, lo: 0x80, hi: 0xbf}, -- // Block 0x122, offset 0x85d -+ // Block 0x122, offset 0x846 - {value: 0x0000, lo: 0x01}, - {value: 0x33c0, lo: 0x80, hi: 0xbf}, -- // Block 0x123, offset 0x85f -+ // Block 0x123, offset 0x848 - {value: 0x0000, lo: 0x02}, - {value: 0x33c0, lo: 0x80, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, - } - --// Total table size 43370 bytes (42KiB); checksum: EBD909C0 -+// Total table size 44953 bytes (43KiB); checksum: D51909DD -diff --git a/vendor/golang.org/x/net/idna/tables15.0.0.go b/vendor/golang.org/x/net/idna/tables15.0.0.go -new file mode 100755 -index 0000000..4003377 ---- /dev/null -+++ b/vendor/golang.org/x/net/idna/tables15.0.0.go -@@ -0,0 +1,5145 @@ -+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -+ -+//go:build go1.21 -+// +build go1.21 -+ -+package idna -+ -+// UnicodeVersion is the Unicode version from which the tables in this package are derived. -+const UnicodeVersion = "15.0.0" -+ -+var mappings string = "" + // Size: 6704 bytes -+ " ̈a ̄23 ́ ̧1o1⁄41⁄23⁄4i̇l·ʼnsdžⱥⱦhjrwy ̆ ̇ ̊ ̨ ̃ ̋lẍ́ ι; ̈́եւاٴوٴۇٴيٴक" + -+ "़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀྲཱྀླྀླཱ" + -+ "ཱྀྀྒྷྜྷྡྷྦྷྫྷྐྵвдостъѣæbdeǝgikmnȣptuɐɑəɛɜŋɔɯvβγδφχρнɒcɕðfɟɡɥɨɩɪʝɭʟɱɰɲɳ" + -+ "ɴɵɸʂʃƫʉʊʋʌzʐʑʒθssάέήίόύώἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧ" + -+ "ιὰιαιάιᾶιι ̈͂ὴιηιήιῆι ̓̀ ̓́ ̓͂ΐ ̔̀ ̔́ ̔͂ΰ ̈̀`ὼιωιώιῶι′′′′′‵‵‵‵‵!!???!!?" + -+ "′′′′0456789+=()rsħnoqsmtmωåאבגדπ1⁄71⁄91⁄101⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83" + -+ "⁄85⁄87⁄81⁄iiivviviiiixxi0⁄3∫∫∫∫∫∮∮∮∮∮1011121314151617181920(10)(11)(12" + -+ ")(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫==⫝̸ɫɽȿɀ. ゙ ゚よりコト(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)" + -+ "(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(오전" + -+ ")(오후)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(" + -+ "財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)21222324252627282930313233343" + -+ "5참고주의3637383940414243444546474849501月2月3月4月5月6月7月8月9月10月11月12月hgev令和アパート" + -+ "アルファアンペアアールイニングインチウォンエスクードエーカーオンスオームカイリカラットカロリーガロンガンマギガギニーキュリーギルダーキロキロ" + -+ "グラムキロメートルキロワットグラムグラムトンクルゼイロクローネケースコルナコーポサイクルサンチームシリングセンチセントダースデシドルトンナノ" + -+ "ノットハイツパーセントパーツバーレルピアストルピクルピコビルファラッドフィートブッシェルフランヘクタールペソペニヒヘルツペンスページベータポ" + -+ "イントボルトホンポンドホールホーンマイクロマイルマッハマルクマンションミクロンミリミリバールメガメガトンメートルヤードヤールユアンリットルリ" + -+ "ラルピールーブルレムレントゲンワット0点1点2点3点4点5点6点7点8点9点10点11点12点13点14点15点16点17点18点19点20" + -+ "点21点22点23点24点daauovpcdmiu平成昭和大正明治株式会社panamakakbmbgbkcalpfnfmgkghzmldlk" + -+ "lfmnmmmcmkmm2m3m∕sm∕s2rad∕srad∕s2psnsmspvnvmvkvpwnwmwkwbqcccdc∕kgdbgyhah" + -+ "pinkkktlmlnlxphprsrsvwbv∕ma∕m1日2日3日4日5日6日7日8日9日10日11日12日13日14日15日16日17日1" + -+ "8日19日20日21日22日23日24日25日26日27日28日29日30日31日ьɦɬʞʇœʍ𤋮𢡊𢡄𣏕𥉉𥳐𧻓fffiflstմնմեմիվնմ" + -+ "խיִײַעהכלםרתשׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּשּתּו" + -+ "ֹבֿכֿפֿאלٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھےۓڭۇۆۈۋۅۉېىئائەئوئۇئۆئۈئېئىیئجئحئم" + -+ "ئيبجبحبخبمبىبيتجتحتختمتىتيثجثمثىثيجحجمحجحمخجخحخمسجسحسخسمصحصمضجضحضخضمطحط" + -+ "مظمعجعمغجغمفجفحفخفمفىفيقحقمقىقيكاكجكحكخكلكمكىكيلجلحلخلملىليمجمحمخمممىمي" + -+ "نجنحنخنمنىنيهجهمهىهييجيحيخيميىييذٰرٰىٰ ٌّ ٍّ َّ ُّ ِّ ّٰئرئزئنبربزبنترت" + -+ "زتنثرثزثنمانرنزننيريزينئخئهبهتهصخلهنههٰيهثهسهشمشهـَّـُّـِّطىطيعىعيغىغيس" + -+ "ىسيشىشيحىحيجىجيخىخيصىصيضىضيشجشحشخشرسرصرضراًتجمتحجتحمتخمتمجتمحتمخجمححميح" + -+ "مىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمى" + -+ "فخمقمحقمملحملحيلحىلججلخملمحمحجمحممحيمجحمجممخجمخممجخهمجهممنحمنحىنجمنجىنم" + -+ "ينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمين" + -+ "حيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلےاللهاكبرمحمدصلعمرسولعليه" + -+ "وسلمصلىصلى الله عليه وسلمجل جلالهریال,:!?_{}[]#&*-<>\\$%@ـًـَـُـِـّـْءآ" + -+ "أؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهويلآلألإلا\x22'/^|~¢£¬¦¥ːˑʙɓʣꭦʥʤɖɗᶑɘɞʩɤɢ" + -+ "ɠʛʜɧʄʪʫꞎɮʎøɶɷɺɾʀʨʦꭧʧʈⱱʏʡʢʘǀǁǂ𝅗𝅥𝅘𝅥𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱𝅘𝅥𝅲𝆹𝅥𝆺𝅥𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯ıȷαεζηκ" + -+ "λμνξοστυψ∇∂ϝабгежзиклмпруфхцчшыэюꚉәіјөүӏґѕџҫꙑұٮڡٯ0,1,2,3,4,5,6,7,8,9,(a" + -+ ")(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y" + -+ ")(z)〔s〕wzhvsdppvwcmcmdmrdjほかココサ手字双デ二多解天交映無料前後再新初終生販声吹演投捕一三遊左中右指走打禁空合満有月申" + -+ "割営配〔本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕得可丽丸乁你侮侻倂偺備僧像㒞免兔兤具㒹內冗冤仌冬况凵刃㓟刻剆剷㔕勇勉勤勺包匆北卉" + -+ "卑博即卽卿灰及叟叫叱吆咞吸呈周咢哶唐啓啣善喙喫喳嗂圖嘆圗噑噴切壮城埴堍型堲報墬売壷夆夢奢姬娛娧姘婦㛮嬈嬾寃寘寧寳寿将尢㞁屠屮峀岍嵃嵮嵫嵼巡巢" + -+ "㠯巽帨帽幩㡢㡼庰庳庶廊廾舁弢㣇形彫㣣徚忍志忹悁㤺㤜悔惇慈慌慎慺憎憲憤憯懞懲懶成戛扝抱拔捐挽拼捨掃揤搢揅掩㨮摩摾撝摷㩬敏敬旣書晉㬙暑㬈㫤冒冕最" + -+ "暜肭䏙朗望朡杞杓㭉柺枅桒梅梎栟椔㮝楂榣槪檨櫛㰘次歔㱎歲殟殺殻汎沿泍汧洖派海流浩浸涅洴港湮㴳滋滇淹潮濆瀹瀞瀛㶖灊災灷炭煅熜爨爵牐犀犕獺王㺬玥㺸" + -+ "瑇瑜瑱璅瓊㼛甤甾異瘐㿼䀈直眞真睊䀹瞋䁆䂖硎碌磌䃣祖福秫䄯穀穊穏䈂篆築䈧糒䊠糨糣紀絣䌁緇縂繅䌴䍙罺羕翺者聠聰䏕育脃䐋脾媵舄辞䑫芑芋芝劳花芳芽苦" + -+ "若茝荣莭茣莽菧著荓菊菌菜䔫蓱蓳蔖蕤䕝䕡䕫虐虜虧虩蚩蚈蜎蛢蝹蜨蝫螆蟡蠁䗹衠衣裗裞䘵裺㒻䚾䛇誠諭變豕貫賁贛起跋趼跰軔輸邔郱鄑鄛鈸鋗鋘鉼鏹鐕開䦕閷" + -+ "䧦雃嶲霣䩮䩶韠䪲頋頩飢䬳餩馧駂駾䯎鬒鱀鳽䳎䳭鵧䳸麻䵖黹黾鼅鼏鼖鼻" -+ -+var mappingIndex = []uint16{ // 1729 elements -+ // Entry 0 - 3F -+ 0x0000, 0x0000, 0x0001, 0x0004, 0x0005, 0x0008, 0x0009, 0x000a, -+ 0x000d, 0x0010, 0x0011, 0x0012, 0x0017, 0x001c, 0x0021, 0x0024, -+ 0x0027, 0x002a, 0x002b, 0x002e, 0x0031, 0x0034, 0x0035, 0x0036, -+ 0x0037, 0x0038, 0x0039, 0x003c, 0x003f, 0x0042, 0x0045, 0x0048, -+ 0x004b, 0x004c, 0x004d, 0x0051, 0x0054, 0x0055, 0x005a, 0x005e, -+ 0x0062, 0x0066, 0x006a, 0x006e, 0x0074, 0x007a, 0x0080, 0x0086, -+ 0x008c, 0x0092, 0x0098, 0x009e, 0x00a4, 0x00aa, 0x00b0, 0x00b6, -+ 0x00bc, 0x00c2, 0x00c8, 0x00ce, 0x00d4, 0x00da, 0x00e0, 0x00e6, -+ // Entry 40 - 7F -+ 0x00ec, 0x00f2, 0x00f8, 0x00fe, 0x0104, 0x010a, 0x0110, 0x0116, -+ 0x011c, 0x0122, 0x0128, 0x012e, 0x0137, 0x013d, 0x0146, 0x014c, -+ 0x0152, 0x0158, 0x015e, 0x0164, 0x016a, 0x0170, 0x0172, 0x0174, -+ 0x0176, 0x0178, 0x017a, 0x017c, 0x017e, 0x0180, 0x0181, 0x0182, -+ 0x0183, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018a, 0x018c, -+ 0x018d, 0x018e, 0x018f, 0x0191, 0x0193, 0x0195, 0x0197, 0x0199, -+ 0x019b, 0x019d, 0x019f, 0x01a0, 0x01a2, 0x01a4, 0x01a6, 0x01a8, -+ 0x01aa, 0x01ac, 0x01ae, 0x01b0, 0x01b1, 0x01b3, 0x01b5, 0x01b6, -+ // Entry 80 - BF -+ 0x01b8, 0x01ba, 0x01bc, 0x01be, 0x01c0, 0x01c2, 0x01c4, 0x01c6, -+ 0x01c8, 0x01ca, 0x01cc, 0x01ce, 0x01d0, 0x01d2, 0x01d4, 0x01d6, -+ 0x01d8, 0x01da, 0x01dc, 0x01de, 0x01e0, 0x01e2, 0x01e4, 0x01e5, -+ 0x01e7, 0x01e9, 0x01eb, 0x01ed, 0x01ef, 0x01f1, 0x01f3, 0x01f5, -+ 0x01f7, 0x01f9, 0x01fb, 0x01fd, 0x0202, 0x0207, 0x020c, 0x0211, -+ 0x0216, 0x021b, 0x0220, 0x0225, 0x022a, 0x022f, 0x0234, 0x0239, -+ 0x023e, 0x0243, 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0261, -+ 0x0266, 0x026b, 0x0270, 0x0275, 0x027a, 0x027e, 0x0282, 0x0287, -+ // Entry C0 - FF -+ 0x0289, 0x028e, 0x0293, 0x0297, 0x029b, 0x02a0, 0x02a5, 0x02aa, -+ 0x02af, 0x02b1, 0x02b6, 0x02bb, 0x02c0, 0x02c2, 0x02c7, 0x02c8, -+ 0x02cd, 0x02d1, 0x02d5, 0x02da, 0x02e0, 0x02e9, 0x02ef, 0x02f8, -+ 0x02fa, 0x02fc, 0x02fe, 0x0300, 0x030c, 0x030d, 0x030e, 0x030f, -+ 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, -+ 0x0319, 0x031b, 0x031d, 0x031e, 0x0320, 0x0322, 0x0324, 0x0326, -+ 0x0328, 0x032a, 0x032c, 0x032e, 0x0330, 0x0335, 0x033a, 0x0340, -+ 0x0345, 0x034a, 0x034f, 0x0354, 0x0359, 0x035e, 0x0363, 0x0368, -+ // Entry 100 - 13F -+ 0x036d, 0x0372, 0x0377, 0x037c, 0x0380, 0x0382, 0x0384, 0x0386, -+ 0x038a, 0x038c, 0x038e, 0x0393, 0x0399, 0x03a2, 0x03a8, 0x03b1, -+ 0x03b3, 0x03b5, 0x03b7, 0x03b9, 0x03bb, 0x03bd, 0x03bf, 0x03c1, -+ 0x03c3, 0x03c5, 0x03c7, 0x03cb, 0x03cf, 0x03d3, 0x03d7, 0x03db, -+ 0x03df, 0x03e3, 0x03e7, 0x03eb, 0x03ef, 0x03f3, 0x03ff, 0x0401, -+ 0x0406, 0x0408, 0x040a, 0x040c, 0x040e, 0x040f, 0x0413, 0x0417, -+ 0x041d, 0x0423, 0x0428, 0x042d, 0x0432, 0x0437, 0x043c, 0x0441, -+ 0x0446, 0x044b, 0x0450, 0x0455, 0x045a, 0x045f, 0x0464, 0x0469, -+ // Entry 140 - 17F -+ 0x046e, 0x0473, 0x0478, 0x047d, 0x0482, 0x0487, 0x048c, 0x0491, -+ 0x0496, 0x049b, 0x04a0, 0x04a5, 0x04aa, 0x04af, 0x04b4, 0x04bc, -+ 0x04c4, 0x04c9, 0x04ce, 0x04d3, 0x04d8, 0x04dd, 0x04e2, 0x04e7, -+ 0x04ec, 0x04f1, 0x04f6, 0x04fb, 0x0500, 0x0505, 0x050a, 0x050f, -+ 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, -+ 0x053c, 0x0541, 0x0546, 0x054b, 0x0550, 0x0555, 0x055a, 0x055f, -+ 0x0564, 0x0569, 0x056e, 0x0573, 0x0578, 0x057a, 0x057c, 0x057e, -+ 0x0580, 0x0582, 0x0584, 0x0586, 0x0588, 0x058a, 0x058c, 0x058e, -+ // Entry 180 - 1BF -+ 0x0590, 0x0592, 0x0594, 0x0596, 0x059c, 0x05a2, 0x05a4, 0x05a6, -+ 0x05a8, 0x05aa, 0x05ac, 0x05ae, 0x05b0, 0x05b2, 0x05b4, 0x05b6, -+ 0x05b8, 0x05ba, 0x05bc, 0x05be, 0x05c0, 0x05c4, 0x05c8, 0x05cc, -+ 0x05d0, 0x05d4, 0x05d8, 0x05dc, 0x05e0, 0x05e4, 0x05e9, 0x05ee, -+ 0x05f3, 0x05f5, 0x05f7, 0x05fd, 0x0609, 0x0615, 0x0621, 0x062a, -+ 0x0636, 0x063f, 0x0648, 0x0657, 0x0663, 0x066c, 0x0675, 0x067e, -+ 0x068a, 0x0696, 0x069f, 0x06a8, 0x06ae, 0x06b7, 0x06c3, 0x06cf, -+ 0x06d5, 0x06e4, 0x06f6, 0x0705, 0x070e, 0x071d, 0x072c, 0x0738, -+ // Entry 1C0 - 1FF -+ 0x0741, 0x074a, 0x0753, 0x075f, 0x076e, 0x077a, 0x0783, 0x078c, -+ 0x0795, 0x079b, 0x07a1, 0x07a7, 0x07ad, 0x07b6, 0x07bf, 0x07ce, -+ 0x07d7, 0x07e3, 0x07f2, 0x07fb, 0x0801, 0x0807, 0x0816, 0x0822, -+ 0x0831, 0x083a, 0x0849, 0x084f, 0x0858, 0x0861, 0x086a, 0x0873, -+ 0x087c, 0x0888, 0x0891, 0x0897, 0x08a0, 0x08a9, 0x08b2, 0x08be, -+ 0x08c7, 0x08d0, 0x08d9, 0x08e8, 0x08f4, 0x08fa, 0x0909, 0x090f, -+ 0x091b, 0x0927, 0x0930, 0x0939, 0x0942, 0x094e, 0x0954, 0x095d, -+ 0x0969, 0x096f, 0x097e, 0x0987, 0x098b, 0x098f, 0x0993, 0x0997, -+ // Entry 200 - 23F -+ 0x099b, 0x099f, 0x09a3, 0x09a7, 0x09ab, 0x09af, 0x09b4, 0x09b9, -+ 0x09be, 0x09c3, 0x09c8, 0x09cd, 0x09d2, 0x09d7, 0x09dc, 0x09e1, -+ 0x09e6, 0x09eb, 0x09f0, 0x09f5, 0x09fa, 0x09fc, 0x09fe, 0x0a00, -+ 0x0a02, 0x0a04, 0x0a06, 0x0a0c, 0x0a12, 0x0a18, 0x0a1e, 0x0a2a, -+ 0x0a2c, 0x0a2e, 0x0a30, 0x0a32, 0x0a34, 0x0a36, 0x0a38, 0x0a3c, -+ 0x0a3e, 0x0a40, 0x0a42, 0x0a44, 0x0a46, 0x0a48, 0x0a4a, 0x0a4c, -+ 0x0a4e, 0x0a50, 0x0a52, 0x0a54, 0x0a56, 0x0a58, 0x0a5a, 0x0a5f, -+ 0x0a65, 0x0a6c, 0x0a74, 0x0a76, 0x0a78, 0x0a7a, 0x0a7c, 0x0a7e, -+ // Entry 240 - 27F -+ 0x0a80, 0x0a82, 0x0a84, 0x0a86, 0x0a88, 0x0a8a, 0x0a8c, 0x0a8e, -+ 0x0a90, 0x0a96, 0x0a98, 0x0a9a, 0x0a9c, 0x0a9e, 0x0aa0, 0x0aa2, -+ 0x0aa4, 0x0aa6, 0x0aa8, 0x0aaa, 0x0aac, 0x0aae, 0x0ab0, 0x0ab2, -+ 0x0ab4, 0x0ab9, 0x0abe, 0x0ac2, 0x0ac6, 0x0aca, 0x0ace, 0x0ad2, -+ 0x0ad6, 0x0ada, 0x0ade, 0x0ae2, 0x0ae7, 0x0aec, 0x0af1, 0x0af6, -+ 0x0afb, 0x0b00, 0x0b05, 0x0b0a, 0x0b0f, 0x0b14, 0x0b19, 0x0b1e, -+ 0x0b23, 0x0b28, 0x0b2d, 0x0b32, 0x0b37, 0x0b3c, 0x0b41, 0x0b46, -+ 0x0b4b, 0x0b50, 0x0b52, 0x0b54, 0x0b56, 0x0b58, 0x0b5a, 0x0b5c, -+ // Entry 280 - 2BF -+ 0x0b5e, 0x0b62, 0x0b66, 0x0b6a, 0x0b6e, 0x0b72, 0x0b76, 0x0b7a, -+ 0x0b7c, 0x0b7e, 0x0b80, 0x0b82, 0x0b86, 0x0b8a, 0x0b8e, 0x0b92, -+ 0x0b96, 0x0b9a, 0x0b9e, 0x0ba0, 0x0ba2, 0x0ba4, 0x0ba6, 0x0ba8, -+ 0x0baa, 0x0bac, 0x0bb0, 0x0bb4, 0x0bba, 0x0bc0, 0x0bc4, 0x0bc8, -+ 0x0bcc, 0x0bd0, 0x0bd4, 0x0bd8, 0x0bdc, 0x0be0, 0x0be4, 0x0be8, -+ 0x0bec, 0x0bf0, 0x0bf4, 0x0bf8, 0x0bfc, 0x0c00, 0x0c04, 0x0c08, -+ 0x0c0c, 0x0c10, 0x0c14, 0x0c18, 0x0c1c, 0x0c20, 0x0c24, 0x0c28, -+ 0x0c2c, 0x0c30, 0x0c34, 0x0c36, 0x0c38, 0x0c3a, 0x0c3c, 0x0c3e, -+ // Entry 2C0 - 2FF -+ 0x0c40, 0x0c42, 0x0c44, 0x0c46, 0x0c48, 0x0c4a, 0x0c4c, 0x0c4e, -+ 0x0c50, 0x0c52, 0x0c54, 0x0c56, 0x0c58, 0x0c5a, 0x0c5c, 0x0c5e, -+ 0x0c60, 0x0c62, 0x0c64, 0x0c66, 0x0c68, 0x0c6a, 0x0c6c, 0x0c6e, -+ 0x0c70, 0x0c72, 0x0c74, 0x0c76, 0x0c78, 0x0c7a, 0x0c7c, 0x0c7e, -+ 0x0c80, 0x0c82, 0x0c86, 0x0c8a, 0x0c8e, 0x0c92, 0x0c96, 0x0c9a, -+ 0x0c9e, 0x0ca2, 0x0ca4, 0x0ca8, 0x0cac, 0x0cb0, 0x0cb4, 0x0cb8, -+ 0x0cbc, 0x0cc0, 0x0cc4, 0x0cc8, 0x0ccc, 0x0cd0, 0x0cd4, 0x0cd8, -+ 0x0cdc, 0x0ce0, 0x0ce4, 0x0ce8, 0x0cec, 0x0cf0, 0x0cf4, 0x0cf8, -+ // Entry 300 - 33F -+ 0x0cfc, 0x0d00, 0x0d04, 0x0d08, 0x0d0c, 0x0d10, 0x0d14, 0x0d18, -+ 0x0d1c, 0x0d20, 0x0d24, 0x0d28, 0x0d2c, 0x0d30, 0x0d34, 0x0d38, -+ 0x0d3c, 0x0d40, 0x0d44, 0x0d48, 0x0d4c, 0x0d50, 0x0d54, 0x0d58, -+ 0x0d5c, 0x0d60, 0x0d64, 0x0d68, 0x0d6c, 0x0d70, 0x0d74, 0x0d78, -+ 0x0d7c, 0x0d80, 0x0d84, 0x0d88, 0x0d8c, 0x0d90, 0x0d94, 0x0d98, -+ 0x0d9c, 0x0da0, 0x0da4, 0x0da8, 0x0dac, 0x0db0, 0x0db4, 0x0db8, -+ 0x0dbc, 0x0dc0, 0x0dc4, 0x0dc8, 0x0dcc, 0x0dd0, 0x0dd4, 0x0dd8, -+ 0x0ddc, 0x0de0, 0x0de4, 0x0de8, 0x0dec, 0x0df0, 0x0df4, 0x0df8, -+ // Entry 340 - 37F -+ 0x0dfc, 0x0e00, 0x0e04, 0x0e08, 0x0e0c, 0x0e10, 0x0e14, 0x0e18, -+ 0x0e1d, 0x0e22, 0x0e27, 0x0e2c, 0x0e31, 0x0e36, 0x0e3a, 0x0e3e, -+ 0x0e42, 0x0e46, 0x0e4a, 0x0e4e, 0x0e52, 0x0e56, 0x0e5a, 0x0e5e, -+ 0x0e62, 0x0e66, 0x0e6a, 0x0e6e, 0x0e72, 0x0e76, 0x0e7a, 0x0e7e, -+ 0x0e82, 0x0e86, 0x0e8a, 0x0e8e, 0x0e92, 0x0e96, 0x0e9a, 0x0e9e, -+ 0x0ea2, 0x0ea6, 0x0eaa, 0x0eae, 0x0eb2, 0x0eb6, 0x0ebc, 0x0ec2, -+ 0x0ec8, 0x0ecc, 0x0ed0, 0x0ed4, 0x0ed8, 0x0edc, 0x0ee0, 0x0ee4, -+ 0x0ee8, 0x0eec, 0x0ef0, 0x0ef4, 0x0ef8, 0x0efc, 0x0f00, 0x0f04, -+ // Entry 380 - 3BF -+ 0x0f08, 0x0f0c, 0x0f10, 0x0f14, 0x0f18, 0x0f1c, 0x0f20, 0x0f24, -+ 0x0f28, 0x0f2c, 0x0f30, 0x0f34, 0x0f38, 0x0f3e, 0x0f44, 0x0f4a, -+ 0x0f50, 0x0f56, 0x0f5c, 0x0f62, 0x0f68, 0x0f6e, 0x0f74, 0x0f7a, -+ 0x0f80, 0x0f86, 0x0f8c, 0x0f92, 0x0f98, 0x0f9e, 0x0fa4, 0x0faa, -+ 0x0fb0, 0x0fb6, 0x0fbc, 0x0fc2, 0x0fc8, 0x0fce, 0x0fd4, 0x0fda, -+ 0x0fe0, 0x0fe6, 0x0fec, 0x0ff2, 0x0ff8, 0x0ffe, 0x1004, 0x100a, -+ 0x1010, 0x1016, 0x101c, 0x1022, 0x1028, 0x102e, 0x1034, 0x103a, -+ 0x1040, 0x1046, 0x104c, 0x1052, 0x1058, 0x105e, 0x1064, 0x106a, -+ // Entry 3C0 - 3FF -+ 0x1070, 0x1076, 0x107c, 0x1082, 0x1088, 0x108e, 0x1094, 0x109a, -+ 0x10a0, 0x10a6, 0x10ac, 0x10b2, 0x10b8, 0x10be, 0x10c4, 0x10ca, -+ 0x10d0, 0x10d6, 0x10dc, 0x10e2, 0x10e8, 0x10ee, 0x10f4, 0x10fa, -+ 0x1100, 0x1106, 0x110c, 0x1112, 0x1118, 0x111e, 0x1124, 0x112a, -+ 0x1130, 0x1136, 0x113c, 0x1142, 0x1148, 0x114e, 0x1154, 0x115a, -+ 0x1160, 0x1166, 0x116c, 0x1172, 0x1178, 0x1180, 0x1188, 0x1190, -+ 0x1198, 0x11a0, 0x11a8, 0x11b0, 0x11b6, 0x11d7, 0x11e6, 0x11ee, -+ 0x11ef, 0x11f0, 0x11f1, 0x11f2, 0x11f3, 0x11f4, 0x11f5, 0x11f6, -+ // Entry 400 - 43F -+ 0x11f7, 0x11f8, 0x11f9, 0x11fa, 0x11fb, 0x11fc, 0x11fd, 0x11fe, -+ 0x11ff, 0x1200, 0x1201, 0x1205, 0x1209, 0x120d, 0x1211, 0x1215, -+ 0x1219, 0x121b, 0x121d, 0x121f, 0x1221, 0x1223, 0x1225, 0x1227, -+ 0x1229, 0x122b, 0x122d, 0x122f, 0x1231, 0x1233, 0x1235, 0x1237, -+ 0x1239, 0x123b, 0x123d, 0x123f, 0x1241, 0x1243, 0x1245, 0x1247, -+ 0x1249, 0x124b, 0x124d, 0x124f, 0x1251, 0x1253, 0x1255, 0x1257, -+ 0x1259, 0x125b, 0x125d, 0x125f, 0x1263, 0x1267, 0x126b, 0x126f, -+ 0x1270, 0x1271, 0x1272, 0x1273, 0x1274, 0x1275, 0x1277, 0x1279, -+ // Entry 440 - 47F -+ 0x127b, 0x127d, 0x127f, 0x1281, 0x1283, 0x1285, 0x1287, 0x1289, -+ 0x128c, 0x128e, 0x1290, 0x1292, 0x1294, 0x1297, 0x1299, 0x129b, -+ 0x129d, 0x129f, 0x12a1, 0x12a3, 0x12a5, 0x12a7, 0x12a9, 0x12ab, -+ 0x12ad, 0x12af, 0x12b2, 0x12b4, 0x12b6, 0x12b8, 0x12ba, 0x12bc, -+ 0x12be, 0x12c0, 0x12c2, 0x12c4, 0x12c6, 0x12c9, 0x12cb, 0x12cd, -+ 0x12d0, 0x12d2, 0x12d4, 0x12d6, 0x12d8, 0x12da, 0x12dc, 0x12de, -+ 0x12e6, 0x12ee, 0x12fa, 0x1306, 0x1312, 0x131e, 0x132a, 0x1332, -+ 0x133a, 0x1346, 0x1352, 0x135e, 0x136a, 0x136c, 0x136e, 0x1370, -+ // Entry 480 - 4BF -+ 0x1372, 0x1374, 0x1376, 0x1378, 0x137a, 0x137c, 0x137e, 0x1380, -+ 0x1382, 0x1384, 0x1386, 0x1388, 0x138a, 0x138d, 0x1390, 0x1392, -+ 0x1394, 0x1396, 0x1398, 0x139a, 0x139c, 0x139e, 0x13a0, 0x13a2, -+ 0x13a4, 0x13a6, 0x13a8, 0x13aa, 0x13ac, 0x13ae, 0x13b0, 0x13b2, -+ 0x13b4, 0x13b6, 0x13b8, 0x13ba, 0x13bc, 0x13bf, 0x13c1, 0x13c3, -+ 0x13c5, 0x13c7, 0x13c9, 0x13cb, 0x13cd, 0x13cf, 0x13d1, 0x13d3, -+ 0x13d6, 0x13d8, 0x13da, 0x13dc, 0x13de, 0x13e0, 0x13e2, 0x13e4, -+ 0x13e6, 0x13e8, 0x13ea, 0x13ec, 0x13ee, 0x13f0, 0x13f2, 0x13f5, -+ // Entry 4C0 - 4FF -+ 0x13f8, 0x13fb, 0x13fe, 0x1401, 0x1404, 0x1407, 0x140a, 0x140d, -+ 0x1410, 0x1413, 0x1416, 0x1419, 0x141c, 0x141f, 0x1422, 0x1425, -+ 0x1428, 0x142b, 0x142e, 0x1431, 0x1434, 0x1437, 0x143a, 0x143d, -+ 0x1440, 0x1447, 0x1449, 0x144b, 0x144d, 0x1450, 0x1452, 0x1454, -+ 0x1456, 0x1458, 0x145a, 0x1460, 0x1466, 0x1469, 0x146c, 0x146f, -+ 0x1472, 0x1475, 0x1478, 0x147b, 0x147e, 0x1481, 0x1484, 0x1487, -+ 0x148a, 0x148d, 0x1490, 0x1493, 0x1496, 0x1499, 0x149c, 0x149f, -+ 0x14a2, 0x14a5, 0x14a8, 0x14ab, 0x14ae, 0x14b1, 0x14b4, 0x14b7, -+ // Entry 500 - 53F -+ 0x14ba, 0x14bd, 0x14c0, 0x14c3, 0x14c6, 0x14c9, 0x14cc, 0x14cf, -+ 0x14d2, 0x14d5, 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, 0x14e7, -+ 0x14ea, 0x14ed, 0x14f6, 0x14ff, 0x1508, 0x1511, 0x151a, 0x1523, -+ 0x152c, 0x1535, 0x153e, 0x1541, 0x1544, 0x1547, 0x154a, 0x154d, -+ 0x1550, 0x1553, 0x1556, 0x1559, 0x155c, 0x155f, 0x1562, 0x1565, -+ 0x1568, 0x156b, 0x156e, 0x1571, 0x1574, 0x1577, 0x157a, 0x157d, -+ 0x1580, 0x1583, 0x1586, 0x1589, 0x158c, 0x158f, 0x1592, 0x1595, -+ 0x1598, 0x159b, 0x159e, 0x15a1, 0x15a4, 0x15a7, 0x15aa, 0x15ad, -+ // Entry 540 - 57F -+ 0x15b0, 0x15b3, 0x15b6, 0x15b9, 0x15bc, 0x15bf, 0x15c2, 0x15c5, -+ 0x15c8, 0x15cb, 0x15ce, 0x15d1, 0x15d4, 0x15d7, 0x15da, 0x15dd, -+ 0x15e0, 0x15e3, 0x15e6, 0x15e9, 0x15ec, 0x15ef, 0x15f2, 0x15f5, -+ 0x15f8, 0x15fb, 0x15fe, 0x1601, 0x1604, 0x1607, 0x160a, 0x160d, -+ 0x1610, 0x1613, 0x1616, 0x1619, 0x161c, 0x161f, 0x1622, 0x1625, -+ 0x1628, 0x162b, 0x162e, 0x1631, 0x1634, 0x1637, 0x163a, 0x163d, -+ 0x1640, 0x1643, 0x1646, 0x1649, 0x164c, 0x164f, 0x1652, 0x1655, -+ 0x1658, 0x165b, 0x165e, 0x1661, 0x1664, 0x1667, 0x166a, 0x166d, -+ // Entry 580 - 5BF -+ 0x1670, 0x1673, 0x1676, 0x1679, 0x167c, 0x167f, 0x1682, 0x1685, -+ 0x1688, 0x168b, 0x168e, 0x1691, 0x1694, 0x1697, 0x169a, 0x169d, -+ 0x16a0, 0x16a3, 0x16a6, 0x16a9, 0x16ac, 0x16af, 0x16b2, 0x16b5, -+ 0x16b8, 0x16bb, 0x16be, 0x16c1, 0x16c4, 0x16c7, 0x16ca, 0x16cd, -+ 0x16d0, 0x16d3, 0x16d6, 0x16d9, 0x16dc, 0x16df, 0x16e2, 0x16e5, -+ 0x16e8, 0x16eb, 0x16ee, 0x16f1, 0x16f4, 0x16f7, 0x16fa, 0x16fd, -+ 0x1700, 0x1703, 0x1706, 0x1709, 0x170c, 0x170f, 0x1712, 0x1715, -+ 0x1718, 0x171b, 0x171e, 0x1721, 0x1724, 0x1727, 0x172a, 0x172d, -+ // Entry 5C0 - 5FF -+ 0x1730, 0x1733, 0x1736, 0x1739, 0x173c, 0x173f, 0x1742, 0x1745, -+ 0x1748, 0x174b, 0x174e, 0x1751, 0x1754, 0x1757, 0x175a, 0x175d, -+ 0x1760, 0x1763, 0x1766, 0x1769, 0x176c, 0x176f, 0x1772, 0x1775, -+ 0x1778, 0x177b, 0x177e, 0x1781, 0x1784, 0x1787, 0x178a, 0x178d, -+ 0x1790, 0x1793, 0x1796, 0x1799, 0x179c, 0x179f, 0x17a2, 0x17a5, -+ 0x17a8, 0x17ab, 0x17ae, 0x17b1, 0x17b4, 0x17b7, 0x17ba, 0x17bd, -+ 0x17c0, 0x17c3, 0x17c6, 0x17c9, 0x17cc, 0x17cf, 0x17d2, 0x17d5, -+ 0x17d8, 0x17db, 0x17de, 0x17e1, 0x17e4, 0x17e7, 0x17ea, 0x17ed, -+ // Entry 600 - 63F -+ 0x17f0, 0x17f3, 0x17f6, 0x17f9, 0x17fc, 0x17ff, 0x1802, 0x1805, -+ 0x1808, 0x180b, 0x180e, 0x1811, 0x1814, 0x1817, 0x181a, 0x181d, -+ 0x1820, 0x1823, 0x1826, 0x1829, 0x182c, 0x182f, 0x1832, 0x1835, -+ 0x1838, 0x183b, 0x183e, 0x1841, 0x1844, 0x1847, 0x184a, 0x184d, -+ 0x1850, 0x1853, 0x1856, 0x1859, 0x185c, 0x185f, 0x1862, 0x1865, -+ 0x1868, 0x186b, 0x186e, 0x1871, 0x1874, 0x1877, 0x187a, 0x187d, -+ 0x1880, 0x1883, 0x1886, 0x1889, 0x188c, 0x188f, 0x1892, 0x1895, -+ 0x1898, 0x189b, 0x189e, 0x18a1, 0x18a4, 0x18a7, 0x18aa, 0x18ad, -+ // Entry 640 - 67F -+ 0x18b0, 0x18b3, 0x18b6, 0x18b9, 0x18bc, 0x18bf, 0x18c2, 0x18c5, -+ 0x18c8, 0x18cb, 0x18ce, 0x18d1, 0x18d4, 0x18d7, 0x18da, 0x18dd, -+ 0x18e0, 0x18e3, 0x18e6, 0x18e9, 0x18ec, 0x18ef, 0x18f2, 0x18f5, -+ 0x18f8, 0x18fb, 0x18fe, 0x1901, 0x1904, 0x1907, 0x190a, 0x190d, -+ 0x1910, 0x1913, 0x1916, 0x1919, 0x191c, 0x191f, 0x1922, 0x1925, -+ 0x1928, 0x192b, 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, -+ 0x1940, 0x1943, 0x1946, 0x1949, 0x194c, 0x194f, 0x1952, 0x1955, -+ 0x1958, 0x195b, 0x195e, 0x1961, 0x1964, 0x1967, 0x196a, 0x196d, -+ // Entry 680 - 6BF -+ 0x1970, 0x1973, 0x1976, 0x1979, 0x197c, 0x197f, 0x1982, 0x1985, -+ 0x1988, 0x198b, 0x198e, 0x1991, 0x1994, 0x1997, 0x199a, 0x199d, -+ 0x19a0, 0x19a3, 0x19a6, 0x19a9, 0x19ac, 0x19af, 0x19b2, 0x19b5, -+ 0x19b8, 0x19bb, 0x19be, 0x19c1, 0x19c4, 0x19c7, 0x19ca, 0x19cd, -+ 0x19d0, 0x19d3, 0x19d6, 0x19d9, 0x19dc, 0x19df, 0x19e2, 0x19e5, -+ 0x19e8, 0x19eb, 0x19ee, 0x19f1, 0x19f4, 0x19f7, 0x19fa, 0x19fd, -+ 0x1a00, 0x1a03, 0x1a06, 0x1a09, 0x1a0c, 0x1a0f, 0x1a12, 0x1a15, -+ 0x1a18, 0x1a1b, 0x1a1e, 0x1a21, 0x1a24, 0x1a27, 0x1a2a, 0x1a2d, -+ // Entry 6C0 - 6FF -+ 0x1a30, -+} // Size: 3482 bytes -+ -+var xorData string = "" + // Size: 4907 bytes -+ "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + -+ "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + -+ "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + -+ "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + -+ "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + -+ "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + -+ "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + -+ "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + -+ "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + -+ "\x03\x037 \x03\x0b+\x03\x021\x00\x02\x01\x04\x02\x01\x02\x02\x019\x02" + -+ "\x03\x1c\x02\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03" + -+ "\xc1r\x02\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<" + -+ "\x03\xc1s*\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03" + -+ "\x83\xab\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96" + -+ "\xe1\xcd\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03" + -+ "\x9a\xec\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c" + -+ "!\x03\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03" + -+ "ʦ\x93\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7" + -+ "\x03\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca" + -+ "\xfa\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e" + -+ "\x03\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca" + -+ "\xe3\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99" + -+ "\x03\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca" + -+ "\xe8\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03" + -+ "\x0b\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06" + -+ "\x05\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03" + -+ "\x0786\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/" + -+ "\x03\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f" + -+ "\x03\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-" + -+ "\x03\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03" + -+ "\x07\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03" + -+ "\x07\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03" + -+ "\x07\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b" + -+ "\x0a\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03" + -+ "\x07\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+" + -+ "\x03\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03" + -+ "\x044\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03" + -+ "\x04+ \x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!" + -+ "\x22\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04" + -+ "\x03\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>" + -+ "\x03\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03" + -+ "\x054\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03" + -+ "\x05):\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$" + -+ "\x1e\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226" + -+ "\x03\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05" + -+ "\x1b\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05" + -+ "\x03\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03" + -+ "\x06\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08" + -+ "\x03\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03" + -+ "\x0a6\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a" + -+ "\x1f\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03" + -+ "\x0a\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f" + -+ "\x02\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/" + -+ "\x03\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a" + -+ "\x00\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+" + -+ "\x10\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#" + -+ "<\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!" + -+ "\x00\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18." + -+ "\x03\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15" + -+ "\x22\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b" + -+ "\x12\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05" + -+ "<\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + -+ "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + -+ "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + -+ "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + -+ "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + -+ "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + -+ "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + -+ "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + -+ "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + -+ "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + -+ "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + -+ "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + -+ "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + -+ "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + -+ "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + -+ "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + -+ "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + -+ "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + -+ "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + -+ "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + -+ "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + -+ "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + -+ "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + -+ "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + -+ "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + -+ "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + -+ "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + -+ "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + -+ "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + -+ "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + -+ "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + -+ "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + -+ ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + -+ "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + -+ "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + -+ "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + -+ "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + -+ "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + -+ "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + -+ "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + -+ "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + -+ "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + -+ "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + -+ "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + -+ "(\x04\x023 \x03\x0b)\x08\x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!" + -+ "\x10\x03\x0b!0\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b" + -+ "\x03\x09\x1f\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14" + -+ "\x03\x0a\x01\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03" + -+ "\x08='\x03\x08\x1a\x0a\x03\x07\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07" + -+ "\x01\x00\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03" + -+ "\x09\x11\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03" + -+ "\x0a/1\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03" + -+ "\x07<3\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06" + -+ "\x13\x00\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(" + -+ ";\x03\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08" + -+ "\x14$\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03" + -+ "\x0a\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19" + -+ "\x01\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18" + -+ "\x03\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03" + -+ "\x07\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03" + -+ "\x0a\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03" + -+ "\x0b\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03" + -+ "\x08\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05" + -+ "\x03\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11" + -+ "\x03\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03" + -+ "\x09\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a" + -+ ".\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + -+ "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + -+ "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + -+ "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + -+ "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + -+ "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + -+ "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + -+ "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + -+ "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + -+ "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + -+ "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + -+ "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + -+ "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + -+ "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + -+ "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + -+ "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + -+ "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + -+ "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + -+ "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + -+ "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + -+ "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + -+ "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + -+ "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + -+ "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + -+ "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + -+ "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + -+ "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + -+ "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + -+ "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + -+ "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + -+ "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + -+ "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + -+ "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + -+ "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + -+ "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + -+ "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + -+ "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + -+ "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + -+ "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + -+ "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + -+ "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + -+ "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + -+ "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + -+ "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + -+ "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + -+ "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + -+ "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + -+ "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + -+ "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + -+ "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + -+ "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + -+ "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + -+ "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + -+ "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + -+ "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + -+ "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + -+ "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + -+ "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + -+ "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + -+ "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + -+ "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + -+ "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + -+ "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + -+ "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + -+ "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + -+ "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + -+ "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + -+ "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + -+ "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + -+ "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + -+ "\x04\x03\x0c?\x05\x03\x0c" + -+ "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + -+ "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + -+ "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + -+ "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + -+ "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + -+ "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x03'\x02\x03)\x02\x03+" + -+ "\x02\x03/\x02\x03\x19\x02\x03\x1b\x02\x03\x1f\x03\x0d\x22\x18\x03\x0d" + -+ "\x22\x1a\x03\x0d\x22'\x03\x0d\x22/\x03\x0d\x223\x03\x0d\x22$\x02\x01\x1e" + -+ "\x03\x0f$!\x03\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08" + -+ "\x18\x03\x0f\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$" + -+ "\x03\x0e\x0d)\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d" + -+ "\x03\x0d. \x03\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03" + -+ "\x0d\x0d\x0f\x03\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03" + -+ "\x0c\x09:\x03\x0e\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18" + -+ "\x03\x0c\x1f\x1c\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03" + -+ "\x0b<+\x03\x0b8\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d" + -+ "\x22&\x03\x0b\x1a\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03" + -+ "\x0a!\x1a\x03\x0a!7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03" + -+ "\x0a\x00 \x03\x0a\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a" + -+ "\x1b-\x03\x09-\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091" + -+ "\x1f\x03\x093\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(" + -+ "\x16\x03\x09\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!" + -+ "\x03\x09\x1a\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03" + -+ "\x08\x02*\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03" + -+ "\x070\x0c\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x06" + -+ "71\x03\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 " + -+ "\x1d\x03\x05\x22\x05\x03\x050\x1d" -+ -+// lookup returns the trie value for the first UTF-8 encoding in s and -+// the width in bytes of this encoding. The size will be 0 if s does not -+// hold enough bytes to complete the encoding. len(s) must be greater than 0. -+func (t *idnaTrie) lookup(s []byte) (v uint16, sz int) { -+ c0 := s[0] -+ switch { -+ case c0 < 0x80: // is ASCII -+ return idnaValues[c0], 1 -+ case c0 < 0xC2: -+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII. -+ case c0 < 0xE0: // 2-byte UTF-8 -+ if len(s) < 2 { -+ return 0, 0 -+ } -+ i := idnaIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c1), 2 -+ case c0 < 0xF0: // 3-byte UTF-8 -+ if len(s) < 3 { -+ return 0, 0 -+ } -+ i := idnaIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = idnaIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c2), 3 -+ case c0 < 0xF8: // 4-byte UTF-8 -+ if len(s) < 4 { -+ return 0, 0 -+ } -+ i := idnaIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = idnaIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ o = uint32(i)<<6 + uint32(c2) -+ i = idnaIndex[o] -+ c3 := s[3] -+ if c3 < 0x80 || 0xC0 <= c3 { -+ return 0, 3 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c3), 4 -+ } -+ // Illegal rune -+ return 0, 1 -+} -+ -+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -+// s must start with a full and valid UTF-8 encoded rune. -+func (t *idnaTrie) lookupUnsafe(s []byte) uint16 { -+ c0 := s[0] -+ if c0 < 0x80 { // is ASCII -+ return idnaValues[c0] -+ } -+ i := idnaIndex[c0] -+ if c0 < 0xE0 { // 2-byte UTF-8 -+ return t.lookupValue(uint32(i), s[1]) -+ } -+ i = idnaIndex[uint32(i)<<6+uint32(s[1])] -+ if c0 < 0xF0 { // 3-byte UTF-8 -+ return t.lookupValue(uint32(i), s[2]) -+ } -+ i = idnaIndex[uint32(i)<<6+uint32(s[2])] -+ if c0 < 0xF8 { // 4-byte UTF-8 -+ return t.lookupValue(uint32(i), s[3]) -+ } -+ return 0 -+} -+ -+// lookupString returns the trie value for the first UTF-8 encoding in s and -+// the width in bytes of this encoding. The size will be 0 if s does not -+// hold enough bytes to complete the encoding. len(s) must be greater than 0. -+func (t *idnaTrie) lookupString(s string) (v uint16, sz int) { -+ c0 := s[0] -+ switch { -+ case c0 < 0x80: // is ASCII -+ return idnaValues[c0], 1 -+ case c0 < 0xC2: -+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII. -+ case c0 < 0xE0: // 2-byte UTF-8 -+ if len(s) < 2 { -+ return 0, 0 -+ } -+ i := idnaIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c1), 2 -+ case c0 < 0xF0: // 3-byte UTF-8 -+ if len(s) < 3 { -+ return 0, 0 -+ } -+ i := idnaIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = idnaIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c2), 3 -+ case c0 < 0xF8: // 4-byte UTF-8 -+ if len(s) < 4 { -+ return 0, 0 -+ } -+ i := idnaIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = idnaIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ o = uint32(i)<<6 + uint32(c2) -+ i = idnaIndex[o] -+ c3 := s[3] -+ if c3 < 0x80 || 0xC0 <= c3 { -+ return 0, 3 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c3), 4 -+ } -+ // Illegal rune -+ return 0, 1 -+} -+ -+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -+// s must start with a full and valid UTF-8 encoded rune. -+func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { -+ c0 := s[0] -+ if c0 < 0x80 { // is ASCII -+ return idnaValues[c0] -+ } -+ i := idnaIndex[c0] -+ if c0 < 0xE0 { // 2-byte UTF-8 -+ return t.lookupValue(uint32(i), s[1]) -+ } -+ i = idnaIndex[uint32(i)<<6+uint32(s[1])] -+ if c0 < 0xF0 { // 3-byte UTF-8 -+ return t.lookupValue(uint32(i), s[2]) -+ } -+ i = idnaIndex[uint32(i)<<6+uint32(s[2])] -+ if c0 < 0xF8 { // 4-byte UTF-8 -+ return t.lookupValue(uint32(i), s[3]) -+ } -+ return 0 -+} -+ -+// idnaTrie. Total size: 31598 bytes (30.86 KiB). Checksum: d3118eda0d6b5360. -+type idnaTrie struct{} -+ -+func newIdnaTrie(i int) *idnaTrie { -+ return &idnaTrie{} -+} -+ -+// lookupValue determines the type of block n and looks up the value for b. -+func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { -+ switch { -+ case n < 133: -+ return uint16(idnaValues[n<<6+uint32(b)]) -+ default: -+ n -= 133 -+ return uint16(idnaSparse.lookup(n, b)) -+ } -+} -+ -+// idnaValues: 135 blocks, 8640 entries, 17280 bytes -+// The third block is the zero block. -+var idnaValues = [8640]uint16{ -+ // Block 0x0, offset 0x0 -+ 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, -+ 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, -+ 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, -+ 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, -+ 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, -+ 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, -+ 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, -+ 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, -+ 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, -+ 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, -+ 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, -+ // Block 0x1, offset 0x40 -+ 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, -+ 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, -+ 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, -+ 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, -+ 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, -+ 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, -+ 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, -+ 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, -+ 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, -+ 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, -+ 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, -+ // Block 0x2, offset 0x80 -+ // Block 0x3, offset 0xc0 -+ 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, -+ 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, -+ 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, -+ 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, -+ 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, -+ 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, -+ 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x0012, 0xe9: 0x0018, -+ 0xea: 0x0019, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x0022, -+ 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0029, 0xf3: 0x0031, 0xf4: 0x003a, 0xf5: 0x0005, -+ 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x0042, 0xf9: 0x0049, 0xfa: 0x0051, 0xfb: 0x0018, -+ 0xfc: 0x0059, 0xfd: 0x0061, 0xfe: 0x0069, 0xff: 0x0018, -+ // Block 0x4, offset 0x100 -+ 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, -+ 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, -+ 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, -+ 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, -+ 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, -+ 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, -+ 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, -+ 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, -+ 0x130: 0x0071, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, -+ 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, -+ 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0079, -+ // Block 0x5, offset 0x140 -+ 0x140: 0x0079, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, -+ 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x0081, 0x14a: 0xe00d, 0x14b: 0x0008, -+ 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, -+ 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, -+ 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, -+ 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, -+ 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, -+ 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, -+ 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, -+ 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, -+ 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x0089, -+ // Block 0x6, offset 0x180 -+ 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, -+ 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, -+ 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, -+ 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, -+ 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, -+ 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, -+ 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, -+ 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, -+ 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, -+ 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, -+ 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, -+ // Block 0x7, offset 0x1c0 -+ 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x0091, 0x1c5: 0x0091, -+ 0x1c6: 0x0091, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, -+ 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, -+ 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, -+ 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, -+ 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, -+ 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, -+ 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, -+ 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, -+ 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, -+ 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, -+ // Block 0x8, offset 0x200 -+ 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, -+ 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, -+ 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, -+ 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, -+ 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, -+ 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, -+ 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, -+ 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, -+ 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, -+ 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0099, 0x23b: 0xe03d, -+ 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x00a1, 0x23f: 0x0008, -+ // Block 0x9, offset 0x240 -+ 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, -+ 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, -+ 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, -+ 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, -+ 0x258: 0x00d2, 0x259: 0x00da, 0x25a: 0x00e2, 0x25b: 0x00ea, 0x25c: 0x00f2, 0x25d: 0x00fa, -+ 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0101, 0x262: 0x0089, 0x263: 0x0109, -+ 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, -+ 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, -+ 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, -+ 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, -+ 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, -+ // Block 0xa, offset 0x280 -+ 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0111, 0x285: 0x040d, -+ 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, -+ 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, -+ 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, -+ 0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308, -+ 0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308, -+ 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, -+ 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, -+ 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, -+ 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x011a, 0x2bb: 0x0008, -+ 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x0122, 0x2bf: 0x043d, -+ // Block 0xb, offset 0x2c0 -+ 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x003a, 0x2c5: 0x012a, -+ 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, -+ 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, -+ 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, -+ 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, -+ 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, -+ 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, -+ 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, -+ 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, -+ 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, -+ 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, -+ // Block 0xc, offset 0x300 -+ 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, -+ 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, -+ 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, -+ 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, -+ 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, -+ 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, -+ 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, -+ 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, -+ 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, -+ 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, -+ 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, -+ // Block 0xd, offset 0x340 -+ 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, -+ 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, -+ 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, -+ 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, -+ 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, -+ 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, -+ 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, -+ 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, -+ 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, -+ 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, -+ 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, -+ // Block 0xe, offset 0x380 -+ 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308, -+ 0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008, -+ 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, -+ 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, -+ 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, -+ 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, -+ 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, -+ 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, -+ 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, -+ 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, -+ 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, -+ // Block 0xf, offset 0x3c0 -+ 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, -+ 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, -+ 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, -+ 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, -+ 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, -+ 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, -+ 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, -+ 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, -+ 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, -+ 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, -+ 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, -+ // Block 0x10, offset 0x400 -+ 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, -+ 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, -+ 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, -+ 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, -+ 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, -+ 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, -+ 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, -+ 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, -+ 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, -+ 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, -+ 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, -+ // Block 0x11, offset 0x440 -+ 0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840, -+ 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818, -+ 0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308, -+ 0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308, -+ 0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0818, -+ 0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08, -+ 0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08, -+ 0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08, -+ 0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08, -+ 0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08, -+ 0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08, -+ // Block 0x12, offset 0x480 -+ 0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08, -+ 0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308, -+ 0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308, -+ 0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308, -+ 0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308, -+ 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, -+ 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, -+ 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, -+ 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0139, -+ 0x4b6: 0x0141, 0x4b7: 0x0149, 0x4b8: 0x0151, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, -+ 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, -+ // Block 0x13, offset 0x4c0 -+ 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, -+ 0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08, -+ 0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08, -+ 0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308, -+ 0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840, -+ 0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308, -+ 0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018, -+ 0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08, -+ 0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008, -+ 0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08, -+ 0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08, -+ // Block 0x14, offset 0x500 -+ 0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818, -+ 0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818, -+ 0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308, -+ 0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08, -+ 0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08, -+ 0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08, -+ 0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08, -+ 0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08, -+ 0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308, -+ 0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308, -+ 0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308, -+ // Block 0x15, offset 0x540 -+ 0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08, -+ 0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08, -+ 0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08, -+ 0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0c08, 0x557: 0x0c08, -+ 0x558: 0x0c08, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040, -+ 0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08, -+ 0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08, -+ 0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040, -+ 0x570: 0x0c08, 0x571: 0x0c08, 0x572: 0x0c08, 0x573: 0x0c08, 0x574: 0x0c08, 0x575: 0x0c08, -+ 0x576: 0x0c08, 0x577: 0x0c08, 0x578: 0x0c08, 0x579: 0x0c08, 0x57a: 0x0c08, 0x57b: 0x0c08, -+ 0x57c: 0x0c08, 0x57d: 0x0c08, 0x57e: 0x0c08, 0x57f: 0x0c08, -+ // Block 0x16, offset 0x580 -+ 0x580: 0x0c08, 0x581: 0x0c08, 0x582: 0x0c08, 0x583: 0x0808, 0x584: 0x0808, 0x585: 0x0808, -+ 0x586: 0x0a08, 0x587: 0x0808, 0x588: 0x0818, 0x589: 0x0a08, 0x58a: 0x0a08, 0x58b: 0x0a08, -+ 0x58c: 0x0a08, 0x58d: 0x0a08, 0x58e: 0x0c08, 0x58f: 0x0040, 0x590: 0x0840, 0x591: 0x0840, -+ 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x0040, -+ 0x598: 0x3308, 0x599: 0x3308, 0x59a: 0x3308, 0x59b: 0x3308, 0x59c: 0x3308, 0x59d: 0x3308, -+ 0x59e: 0x3308, 0x59f: 0x3308, 0x5a0: 0x0a08, 0x5a1: 0x0a08, 0x5a2: 0x0a08, 0x5a3: 0x0a08, -+ 0x5a4: 0x0a08, 0x5a5: 0x0a08, 0x5a6: 0x0a08, 0x5a7: 0x0a08, 0x5a8: 0x0a08, 0x5a9: 0x0a08, -+ 0x5aa: 0x0c08, 0x5ab: 0x0c08, 0x5ac: 0x0c08, 0x5ad: 0x0808, 0x5ae: 0x0c08, 0x5af: 0x0a08, -+ 0x5b0: 0x0a08, 0x5b1: 0x0c08, 0x5b2: 0x0c08, 0x5b3: 0x0a08, 0x5b4: 0x0a08, 0x5b5: 0x0a08, -+ 0x5b6: 0x0a08, 0x5b7: 0x0a08, 0x5b8: 0x0a08, 0x5b9: 0x0c08, 0x5ba: 0x0a08, 0x5bb: 0x0a08, -+ 0x5bc: 0x0a08, 0x5bd: 0x0a08, 0x5be: 0x0a08, 0x5bf: 0x0a08, -+ // Block 0x17, offset 0x5c0 -+ 0x5c0: 0x3008, 0x5c1: 0x3308, 0x5c2: 0x3308, 0x5c3: 0x3308, 0x5c4: 0x3308, 0x5c5: 0x3308, -+ 0x5c6: 0x3308, 0x5c7: 0x3308, 0x5c8: 0x3308, 0x5c9: 0x3008, 0x5ca: 0x3008, 0x5cb: 0x3008, -+ 0x5cc: 0x3008, 0x5cd: 0x3b08, 0x5ce: 0x3008, 0x5cf: 0x3008, 0x5d0: 0x0008, 0x5d1: 0x3308, -+ 0x5d2: 0x3308, 0x5d3: 0x3308, 0x5d4: 0x3308, 0x5d5: 0x3308, 0x5d6: 0x3308, 0x5d7: 0x3308, -+ 0x5d8: 0x0159, 0x5d9: 0x0161, 0x5da: 0x0169, 0x5db: 0x0171, 0x5dc: 0x0179, 0x5dd: 0x0181, -+ 0x5de: 0x0189, 0x5df: 0x0191, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x3308, 0x5e3: 0x3308, -+ 0x5e4: 0x0018, 0x5e5: 0x0018, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0008, -+ 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, -+ 0x5f0: 0x0018, 0x5f1: 0x0008, 0x5f2: 0x0008, 0x5f3: 0x0008, 0x5f4: 0x0008, 0x5f5: 0x0008, -+ 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0008, 0x5fb: 0x0008, -+ 0x5fc: 0x0008, 0x5fd: 0x0008, 0x5fe: 0x0008, 0x5ff: 0x0008, -+ // Block 0x18, offset 0x600 -+ 0x600: 0x0008, 0x601: 0x3308, 0x602: 0x3008, 0x603: 0x3008, 0x604: 0x0040, 0x605: 0x0008, -+ 0x606: 0x0008, 0x607: 0x0008, 0x608: 0x0008, 0x609: 0x0008, 0x60a: 0x0008, 0x60b: 0x0008, -+ 0x60c: 0x0008, 0x60d: 0x0040, 0x60e: 0x0040, 0x60f: 0x0008, 0x610: 0x0008, 0x611: 0x0040, -+ 0x612: 0x0040, 0x613: 0x0008, 0x614: 0x0008, 0x615: 0x0008, 0x616: 0x0008, 0x617: 0x0008, -+ 0x618: 0x0008, 0x619: 0x0008, 0x61a: 0x0008, 0x61b: 0x0008, 0x61c: 0x0008, 0x61d: 0x0008, -+ 0x61e: 0x0008, 0x61f: 0x0008, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x0008, 0x623: 0x0008, -+ 0x624: 0x0008, 0x625: 0x0008, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0040, -+ 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, -+ 0x630: 0x0008, 0x631: 0x0040, 0x632: 0x0008, 0x633: 0x0040, 0x634: 0x0040, 0x635: 0x0040, -+ 0x636: 0x0008, 0x637: 0x0008, 0x638: 0x0008, 0x639: 0x0008, 0x63a: 0x0040, 0x63b: 0x0040, -+ 0x63c: 0x3308, 0x63d: 0x0008, 0x63e: 0x3008, 0x63f: 0x3008, -+ // Block 0x19, offset 0x640 -+ 0x640: 0x3008, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3308, 0x644: 0x3308, 0x645: 0x0040, -+ 0x646: 0x0040, 0x647: 0x3008, 0x648: 0x3008, 0x649: 0x0040, 0x64a: 0x0040, 0x64b: 0x3008, -+ 0x64c: 0x3008, 0x64d: 0x3b08, 0x64e: 0x0008, 0x64f: 0x0040, 0x650: 0x0040, 0x651: 0x0040, -+ 0x652: 0x0040, 0x653: 0x0040, 0x654: 0x0040, 0x655: 0x0040, 0x656: 0x0040, 0x657: 0x3008, -+ 0x658: 0x0040, 0x659: 0x0040, 0x65a: 0x0040, 0x65b: 0x0040, 0x65c: 0x0199, 0x65d: 0x01a1, -+ 0x65e: 0x0040, 0x65f: 0x01a9, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x3308, 0x663: 0x3308, -+ 0x664: 0x0040, 0x665: 0x0040, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0008, -+ 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, -+ 0x670: 0x0008, 0x671: 0x0008, 0x672: 0x0018, 0x673: 0x0018, 0x674: 0x0018, 0x675: 0x0018, -+ 0x676: 0x0018, 0x677: 0x0018, 0x678: 0x0018, 0x679: 0x0018, 0x67a: 0x0018, 0x67b: 0x0018, -+ 0x67c: 0x0008, 0x67d: 0x0018, 0x67e: 0x3308, 0x67f: 0x0040, -+ // Block 0x1a, offset 0x680 -+ 0x680: 0x0040, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x3008, 0x684: 0x0040, 0x685: 0x0008, -+ 0x686: 0x0008, 0x687: 0x0008, 0x688: 0x0008, 0x689: 0x0008, 0x68a: 0x0008, 0x68b: 0x0040, -+ 0x68c: 0x0040, 0x68d: 0x0040, 0x68e: 0x0040, 0x68f: 0x0008, 0x690: 0x0008, 0x691: 0x0040, -+ 0x692: 0x0040, 0x693: 0x0008, 0x694: 0x0008, 0x695: 0x0008, 0x696: 0x0008, 0x697: 0x0008, -+ 0x698: 0x0008, 0x699: 0x0008, 0x69a: 0x0008, 0x69b: 0x0008, 0x69c: 0x0008, 0x69d: 0x0008, -+ 0x69e: 0x0008, 0x69f: 0x0008, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x0008, 0x6a3: 0x0008, -+ 0x6a4: 0x0008, 0x6a5: 0x0008, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0040, -+ 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, -+ 0x6b0: 0x0008, 0x6b1: 0x0040, 0x6b2: 0x0008, 0x6b3: 0x01b1, 0x6b4: 0x0040, 0x6b5: 0x0008, -+ 0x6b6: 0x01b9, 0x6b7: 0x0040, 0x6b8: 0x0008, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, -+ 0x6bc: 0x3308, 0x6bd: 0x0040, 0x6be: 0x3008, 0x6bf: 0x3008, -+ // Block 0x1b, offset 0x6c0 -+ 0x6c0: 0x3008, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x0040, 0x6c4: 0x0040, 0x6c5: 0x0040, -+ 0x6c6: 0x0040, 0x6c7: 0x3308, 0x6c8: 0x3308, 0x6c9: 0x0040, 0x6ca: 0x0040, 0x6cb: 0x3308, -+ 0x6cc: 0x3308, 0x6cd: 0x3b08, 0x6ce: 0x0040, 0x6cf: 0x0040, 0x6d0: 0x0040, 0x6d1: 0x3308, -+ 0x6d2: 0x0040, 0x6d3: 0x0040, 0x6d4: 0x0040, 0x6d5: 0x0040, 0x6d6: 0x0040, 0x6d7: 0x0040, -+ 0x6d8: 0x0040, 0x6d9: 0x01c1, 0x6da: 0x01c9, 0x6db: 0x01d1, 0x6dc: 0x0008, 0x6dd: 0x0040, -+ 0x6de: 0x01d9, 0x6df: 0x0040, 0x6e0: 0x0040, 0x6e1: 0x0040, 0x6e2: 0x0040, 0x6e3: 0x0040, -+ 0x6e4: 0x0040, 0x6e5: 0x0040, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0008, -+ 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, -+ 0x6f0: 0x3308, 0x6f1: 0x3308, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0008, 0x6f5: 0x3308, -+ 0x6f6: 0x0018, 0x6f7: 0x0040, 0x6f8: 0x0040, 0x6f9: 0x0040, 0x6fa: 0x0040, 0x6fb: 0x0040, -+ 0x6fc: 0x0040, 0x6fd: 0x0040, 0x6fe: 0x0040, 0x6ff: 0x0040, -+ // Block 0x1c, offset 0x700 -+ 0x700: 0x0040, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3008, 0x704: 0x0040, 0x705: 0x0008, -+ 0x706: 0x0008, 0x707: 0x0008, 0x708: 0x0008, 0x709: 0x0008, 0x70a: 0x0008, 0x70b: 0x0008, -+ 0x70c: 0x0008, 0x70d: 0x0008, 0x70e: 0x0040, 0x70f: 0x0008, 0x710: 0x0008, 0x711: 0x0008, -+ 0x712: 0x0040, 0x713: 0x0008, 0x714: 0x0008, 0x715: 0x0008, 0x716: 0x0008, 0x717: 0x0008, -+ 0x718: 0x0008, 0x719: 0x0008, 0x71a: 0x0008, 0x71b: 0x0008, 0x71c: 0x0008, 0x71d: 0x0008, -+ 0x71e: 0x0008, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x0008, 0x723: 0x0008, -+ 0x724: 0x0008, 0x725: 0x0008, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0040, -+ 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, -+ 0x730: 0x0008, 0x731: 0x0040, 0x732: 0x0008, 0x733: 0x0008, 0x734: 0x0040, 0x735: 0x0008, -+ 0x736: 0x0008, 0x737: 0x0008, 0x738: 0x0008, 0x739: 0x0008, 0x73a: 0x0040, 0x73b: 0x0040, -+ 0x73c: 0x3308, 0x73d: 0x0008, 0x73e: 0x3008, 0x73f: 0x3008, -+ // Block 0x1d, offset 0x740 -+ 0x740: 0x3008, 0x741: 0x3308, 0x742: 0x3308, 0x743: 0x3308, 0x744: 0x3308, 0x745: 0x3308, -+ 0x746: 0x0040, 0x747: 0x3308, 0x748: 0x3308, 0x749: 0x3008, 0x74a: 0x0040, 0x74b: 0x3008, -+ 0x74c: 0x3008, 0x74d: 0x3b08, 0x74e: 0x0040, 0x74f: 0x0040, 0x750: 0x0008, 0x751: 0x0040, -+ 0x752: 0x0040, 0x753: 0x0040, 0x754: 0x0040, 0x755: 0x0040, 0x756: 0x0040, 0x757: 0x0040, -+ 0x758: 0x0040, 0x759: 0x0040, 0x75a: 0x0040, 0x75b: 0x0040, 0x75c: 0x0040, 0x75d: 0x0040, -+ 0x75e: 0x0040, 0x75f: 0x0040, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x3308, 0x763: 0x3308, -+ 0x764: 0x0040, 0x765: 0x0040, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0008, -+ 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, -+ 0x770: 0x0018, 0x771: 0x0018, 0x772: 0x0040, 0x773: 0x0040, 0x774: 0x0040, 0x775: 0x0040, -+ 0x776: 0x0040, 0x777: 0x0040, 0x778: 0x0040, 0x779: 0x0008, 0x77a: 0x3308, 0x77b: 0x3308, -+ 0x77c: 0x3308, 0x77d: 0x3308, 0x77e: 0x3308, 0x77f: 0x3308, -+ // Block 0x1e, offset 0x780 -+ 0x780: 0x0040, 0x781: 0x3308, 0x782: 0x3008, 0x783: 0x3008, 0x784: 0x0040, 0x785: 0x0008, -+ 0x786: 0x0008, 0x787: 0x0008, 0x788: 0x0008, 0x789: 0x0008, 0x78a: 0x0008, 0x78b: 0x0008, -+ 0x78c: 0x0008, 0x78d: 0x0040, 0x78e: 0x0040, 0x78f: 0x0008, 0x790: 0x0008, 0x791: 0x0040, -+ 0x792: 0x0040, 0x793: 0x0008, 0x794: 0x0008, 0x795: 0x0008, 0x796: 0x0008, 0x797: 0x0008, -+ 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0008, 0x79c: 0x0008, 0x79d: 0x0008, -+ 0x79e: 0x0008, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x0008, 0x7a3: 0x0008, -+ 0x7a4: 0x0008, 0x7a5: 0x0008, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0040, -+ 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, -+ 0x7b0: 0x0008, 0x7b1: 0x0040, 0x7b2: 0x0008, 0x7b3: 0x0008, 0x7b4: 0x0040, 0x7b5: 0x0008, -+ 0x7b6: 0x0008, 0x7b7: 0x0008, 0x7b8: 0x0008, 0x7b9: 0x0008, 0x7ba: 0x0040, 0x7bb: 0x0040, -+ 0x7bc: 0x3308, 0x7bd: 0x0008, 0x7be: 0x3008, 0x7bf: 0x3308, -+ // Block 0x1f, offset 0x7c0 -+ 0x7c0: 0x3008, 0x7c1: 0x3308, 0x7c2: 0x3308, 0x7c3: 0x3308, 0x7c4: 0x3308, 0x7c5: 0x0040, -+ 0x7c6: 0x0040, 0x7c7: 0x3008, 0x7c8: 0x3008, 0x7c9: 0x0040, 0x7ca: 0x0040, 0x7cb: 0x3008, -+ 0x7cc: 0x3008, 0x7cd: 0x3b08, 0x7ce: 0x0040, 0x7cf: 0x0040, 0x7d0: 0x0040, 0x7d1: 0x0040, -+ 0x7d2: 0x0040, 0x7d3: 0x0040, 0x7d4: 0x0040, 0x7d5: 0x3308, 0x7d6: 0x3308, 0x7d7: 0x3008, -+ 0x7d8: 0x0040, 0x7d9: 0x0040, 0x7da: 0x0040, 0x7db: 0x0040, 0x7dc: 0x01e1, 0x7dd: 0x01e9, -+ 0x7de: 0x0040, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x3308, 0x7e3: 0x3308, -+ 0x7e4: 0x0040, 0x7e5: 0x0040, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0008, -+ 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008, -+ 0x7f0: 0x0018, 0x7f1: 0x0008, 0x7f2: 0x0018, 0x7f3: 0x0018, 0x7f4: 0x0018, 0x7f5: 0x0018, -+ 0x7f6: 0x0018, 0x7f7: 0x0018, 0x7f8: 0x0040, 0x7f9: 0x0040, 0x7fa: 0x0040, 0x7fb: 0x0040, -+ 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x0040, 0x7ff: 0x0040, -+ // Block 0x20, offset 0x800 -+ 0x800: 0x0040, 0x801: 0x0040, 0x802: 0x3308, 0x803: 0x0008, 0x804: 0x0040, 0x805: 0x0008, -+ 0x806: 0x0008, 0x807: 0x0008, 0x808: 0x0008, 0x809: 0x0008, 0x80a: 0x0008, 0x80b: 0x0040, -+ 0x80c: 0x0040, 0x80d: 0x0040, 0x80e: 0x0008, 0x80f: 0x0008, 0x810: 0x0008, 0x811: 0x0040, -+ 0x812: 0x0008, 0x813: 0x0008, 0x814: 0x0008, 0x815: 0x0008, 0x816: 0x0040, 0x817: 0x0040, -+ 0x818: 0x0040, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0008, 0x81d: 0x0040, -+ 0x81e: 0x0008, 0x81f: 0x0008, 0x820: 0x0040, 0x821: 0x0040, 0x822: 0x0040, 0x823: 0x0008, -+ 0x824: 0x0008, 0x825: 0x0040, 0x826: 0x0040, 0x827: 0x0040, 0x828: 0x0008, 0x829: 0x0008, -+ 0x82a: 0x0008, 0x82b: 0x0040, 0x82c: 0x0040, 0x82d: 0x0040, 0x82e: 0x0008, 0x82f: 0x0008, -+ 0x830: 0x0008, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0008, 0x834: 0x0008, 0x835: 0x0008, -+ 0x836: 0x0008, 0x837: 0x0008, 0x838: 0x0008, 0x839: 0x0008, 0x83a: 0x0040, 0x83b: 0x0040, -+ 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x3008, 0x83f: 0x3008, -+ // Block 0x21, offset 0x840 -+ 0x840: 0x3308, 0x841: 0x3008, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x3008, 0x845: 0x0040, -+ 0x846: 0x3308, 0x847: 0x3308, 0x848: 0x3308, 0x849: 0x0040, 0x84a: 0x3308, 0x84b: 0x3308, -+ 0x84c: 0x3308, 0x84d: 0x3b08, 0x84e: 0x0040, 0x84f: 0x0040, 0x850: 0x0040, 0x851: 0x0040, -+ 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0040, 0x855: 0x3308, 0x856: 0x3308, 0x857: 0x0040, -+ 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0040, 0x85c: 0x0040, 0x85d: 0x0008, -+ 0x85e: 0x0040, 0x85f: 0x0040, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x3308, 0x863: 0x3308, -+ 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008, -+ 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, -+ 0x870: 0x0040, 0x871: 0x0040, 0x872: 0x0040, 0x873: 0x0040, 0x874: 0x0040, 0x875: 0x0040, -+ 0x876: 0x0040, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0018, 0x87b: 0x0018, -+ 0x87c: 0x0018, 0x87d: 0x0018, 0x87e: 0x0018, 0x87f: 0x0018, -+ // Block 0x22, offset 0x880 -+ 0x880: 0x0008, 0x881: 0x3308, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x0018, 0x885: 0x0008, -+ 0x886: 0x0008, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0008, 0x88a: 0x0008, 0x88b: 0x0008, -+ 0x88c: 0x0008, 0x88d: 0x0040, 0x88e: 0x0008, 0x88f: 0x0008, 0x890: 0x0008, 0x891: 0x0040, -+ 0x892: 0x0008, 0x893: 0x0008, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008, -+ 0x898: 0x0008, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008, -+ 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008, -+ 0x8a4: 0x0008, 0x8a5: 0x0008, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0040, -+ 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, -+ 0x8b0: 0x0008, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0008, 0x8b4: 0x0040, 0x8b5: 0x0008, -+ 0x8b6: 0x0008, 0x8b7: 0x0008, 0x8b8: 0x0008, 0x8b9: 0x0008, 0x8ba: 0x0040, 0x8bb: 0x0040, -+ 0x8bc: 0x3308, 0x8bd: 0x0008, 0x8be: 0x3008, 0x8bf: 0x3308, -+ // Block 0x23, offset 0x8c0 -+ 0x8c0: 0x3008, 0x8c1: 0x3008, 0x8c2: 0x3008, 0x8c3: 0x3008, 0x8c4: 0x3008, 0x8c5: 0x0040, -+ 0x8c6: 0x3308, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, -+ 0x8cc: 0x3308, 0x8cd: 0x3b08, 0x8ce: 0x0040, 0x8cf: 0x0040, 0x8d0: 0x0040, 0x8d1: 0x0040, -+ 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0040, 0x8d5: 0x3008, 0x8d6: 0x3008, 0x8d7: 0x0040, -+ 0x8d8: 0x0040, 0x8d9: 0x0040, 0x8da: 0x0040, 0x8db: 0x0040, 0x8dc: 0x0040, 0x8dd: 0x0008, -+ 0x8de: 0x0008, 0x8df: 0x0040, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308, -+ 0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008, -+ 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008, -+ 0x8f0: 0x0040, 0x8f1: 0x0008, 0x8f2: 0x0008, 0x8f3: 0x3008, 0x8f4: 0x0040, 0x8f5: 0x0040, -+ 0x8f6: 0x0040, 0x8f7: 0x0040, 0x8f8: 0x0040, 0x8f9: 0x0040, 0x8fa: 0x0040, 0x8fb: 0x0040, -+ 0x8fc: 0x0040, 0x8fd: 0x0040, 0x8fe: 0x0040, 0x8ff: 0x0040, -+ // Block 0x24, offset 0x900 -+ 0x900: 0x3008, 0x901: 0x3308, 0x902: 0x3308, 0x903: 0x3308, 0x904: 0x3308, 0x905: 0x0040, -+ 0x906: 0x3008, 0x907: 0x3008, 0x908: 0x3008, 0x909: 0x0040, 0x90a: 0x3008, 0x90b: 0x3008, -+ 0x90c: 0x3008, 0x90d: 0x3b08, 0x90e: 0x0008, 0x90f: 0x0018, 0x910: 0x0040, 0x911: 0x0040, -+ 0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x3008, -+ 0x918: 0x0018, 0x919: 0x0018, 0x91a: 0x0018, 0x91b: 0x0018, 0x91c: 0x0018, 0x91d: 0x0018, -+ 0x91e: 0x0018, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x3308, 0x923: 0x3308, -+ 0x924: 0x0040, 0x925: 0x0040, 0x926: 0x0008, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0008, -+ 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, -+ 0x930: 0x0018, 0x931: 0x0018, 0x932: 0x0018, 0x933: 0x0018, 0x934: 0x0018, 0x935: 0x0018, -+ 0x936: 0x0018, 0x937: 0x0018, 0x938: 0x0018, 0x939: 0x0018, 0x93a: 0x0008, 0x93b: 0x0008, -+ 0x93c: 0x0008, 0x93d: 0x0008, 0x93e: 0x0008, 0x93f: 0x0008, -+ // Block 0x25, offset 0x940 -+ 0x940: 0x0040, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0040, 0x944: 0x0008, 0x945: 0x0040, -+ 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0040, -+ 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, -+ 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008, -+ 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008, -+ 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, -+ 0x964: 0x0040, 0x965: 0x0008, 0x966: 0x0040, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008, -+ 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0008, 0x96e: 0x0008, 0x96f: 0x0008, -+ 0x970: 0x0008, 0x971: 0x3308, 0x972: 0x0008, 0x973: 0x01f9, 0x974: 0x3308, 0x975: 0x3308, -+ 0x976: 0x3308, 0x977: 0x3308, 0x978: 0x3308, 0x979: 0x3308, 0x97a: 0x3b08, 0x97b: 0x3308, -+ 0x97c: 0x3308, 0x97d: 0x0008, 0x97e: 0x0040, 0x97f: 0x0040, -+ // Block 0x26, offset 0x980 -+ 0x980: 0x0008, 0x981: 0x0008, 0x982: 0x0008, 0x983: 0x0211, 0x984: 0x0008, 0x985: 0x0008, -+ 0x986: 0x0008, 0x987: 0x0008, 0x988: 0x0040, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, -+ 0x98c: 0x0008, 0x98d: 0x0219, 0x98e: 0x0008, 0x98f: 0x0008, 0x990: 0x0008, 0x991: 0x0008, -+ 0x992: 0x0221, 0x993: 0x0008, 0x994: 0x0008, 0x995: 0x0008, 0x996: 0x0008, 0x997: 0x0229, -+ 0x998: 0x0008, 0x999: 0x0008, 0x99a: 0x0008, 0x99b: 0x0008, 0x99c: 0x0231, 0x99d: 0x0008, -+ 0x99e: 0x0008, 0x99f: 0x0008, 0x9a0: 0x0008, 0x9a1: 0x0008, 0x9a2: 0x0008, 0x9a3: 0x0008, -+ 0x9a4: 0x0008, 0x9a5: 0x0008, 0x9a6: 0x0008, 0x9a7: 0x0008, 0x9a8: 0x0008, 0x9a9: 0x0239, -+ 0x9aa: 0x0008, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0040, 0x9ae: 0x0040, 0x9af: 0x0040, -+ 0x9b0: 0x0040, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x0241, 0x9b4: 0x3308, 0x9b5: 0x0249, -+ 0x9b6: 0x0251, 0x9b7: 0x0259, 0x9b8: 0x0261, 0x9b9: 0x0269, 0x9ba: 0x3308, 0x9bb: 0x3308, -+ 0x9bc: 0x3308, 0x9bd: 0x3308, 0x9be: 0x3308, 0x9bf: 0x3008, -+ // Block 0x27, offset 0x9c0 -+ 0x9c0: 0x3308, 0x9c1: 0x0271, 0x9c2: 0x3308, 0x9c3: 0x3308, 0x9c4: 0x3b08, 0x9c5: 0x0018, -+ 0x9c6: 0x3308, 0x9c7: 0x3308, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, -+ 0x9cc: 0x0008, 0x9cd: 0x3308, 0x9ce: 0x3308, 0x9cf: 0x3308, 0x9d0: 0x3308, 0x9d1: 0x3308, -+ 0x9d2: 0x3308, 0x9d3: 0x0279, 0x9d4: 0x3308, 0x9d5: 0x3308, 0x9d6: 0x3308, 0x9d7: 0x3308, -+ 0x9d8: 0x0040, 0x9d9: 0x3308, 0x9da: 0x3308, 0x9db: 0x3308, 0x9dc: 0x3308, 0x9dd: 0x0281, -+ 0x9de: 0x3308, 0x9df: 0x3308, 0x9e0: 0x3308, 0x9e1: 0x3308, 0x9e2: 0x0289, 0x9e3: 0x3308, -+ 0x9e4: 0x3308, 0x9e5: 0x3308, 0x9e6: 0x3308, 0x9e7: 0x0291, 0x9e8: 0x3308, 0x9e9: 0x3308, -+ 0x9ea: 0x3308, 0x9eb: 0x3308, 0x9ec: 0x0299, 0x9ed: 0x3308, 0x9ee: 0x3308, 0x9ef: 0x3308, -+ 0x9f0: 0x3308, 0x9f1: 0x3308, 0x9f2: 0x3308, 0x9f3: 0x3308, 0x9f4: 0x3308, 0x9f5: 0x3308, -+ 0x9f6: 0x3308, 0x9f7: 0x3308, 0x9f8: 0x3308, 0x9f9: 0x02a1, 0x9fa: 0x3308, 0x9fb: 0x3308, -+ 0x9fc: 0x3308, 0x9fd: 0x0040, 0x9fe: 0x0018, 0x9ff: 0x0018, -+ // Block 0x28, offset 0xa00 -+ 0xa00: 0x0008, 0xa01: 0x0008, 0xa02: 0x0008, 0xa03: 0x0008, 0xa04: 0x0008, 0xa05: 0x0008, -+ 0xa06: 0x0008, 0xa07: 0x0008, 0xa08: 0x0008, 0xa09: 0x0008, 0xa0a: 0x0008, 0xa0b: 0x0008, -+ 0xa0c: 0x0008, 0xa0d: 0x0008, 0xa0e: 0x0008, 0xa0f: 0x0008, 0xa10: 0x0008, 0xa11: 0x0008, -+ 0xa12: 0x0008, 0xa13: 0x0008, 0xa14: 0x0008, 0xa15: 0x0008, 0xa16: 0x0008, 0xa17: 0x0008, -+ 0xa18: 0x0008, 0xa19: 0x0008, 0xa1a: 0x0008, 0xa1b: 0x0008, 0xa1c: 0x0008, 0xa1d: 0x0008, -+ 0xa1e: 0x0008, 0xa1f: 0x0008, 0xa20: 0x0008, 0xa21: 0x0008, 0xa22: 0x0008, 0xa23: 0x0008, -+ 0xa24: 0x0008, 0xa25: 0x0008, 0xa26: 0x0008, 0xa27: 0x0008, 0xa28: 0x0008, 0xa29: 0x0008, -+ 0xa2a: 0x0008, 0xa2b: 0x0008, 0xa2c: 0x0019, 0xa2d: 0x02e1, 0xa2e: 0x02e9, 0xa2f: 0x0008, -+ 0xa30: 0x02f1, 0xa31: 0x02f9, 0xa32: 0x0301, 0xa33: 0x0309, 0xa34: 0x00a9, 0xa35: 0x0311, -+ 0xa36: 0x00b1, 0xa37: 0x0319, 0xa38: 0x0101, 0xa39: 0x0321, 0xa3a: 0x0329, 0xa3b: 0x0008, -+ 0xa3c: 0x0051, 0xa3d: 0x0331, 0xa3e: 0x0339, 0xa3f: 0x00b9, -+ // Block 0x29, offset 0xa40 -+ 0xa40: 0x0341, 0xa41: 0x0349, 0xa42: 0x00c1, 0xa43: 0x0019, 0xa44: 0x0351, 0xa45: 0x0359, -+ 0xa46: 0x05b5, 0xa47: 0x02e9, 0xa48: 0x02f1, 0xa49: 0x02f9, 0xa4a: 0x0361, 0xa4b: 0x0369, -+ 0xa4c: 0x0371, 0xa4d: 0x0309, 0xa4e: 0x0008, 0xa4f: 0x0319, 0xa50: 0x0321, 0xa51: 0x0379, -+ 0xa52: 0x0051, 0xa53: 0x0381, 0xa54: 0x05cd, 0xa55: 0x05cd, 0xa56: 0x0339, 0xa57: 0x0341, -+ 0xa58: 0x0349, 0xa59: 0x05b5, 0xa5a: 0x0389, 0xa5b: 0x0391, 0xa5c: 0x05e5, 0xa5d: 0x0399, -+ 0xa5e: 0x03a1, 0xa5f: 0x03a9, 0xa60: 0x03b1, 0xa61: 0x03b9, 0xa62: 0x0311, 0xa63: 0x00b9, -+ 0xa64: 0x0349, 0xa65: 0x0391, 0xa66: 0x0399, 0xa67: 0x03a1, 0xa68: 0x03c1, 0xa69: 0x03b1, -+ 0xa6a: 0x03b9, 0xa6b: 0x0008, 0xa6c: 0x0008, 0xa6d: 0x0008, 0xa6e: 0x0008, 0xa6f: 0x0008, -+ 0xa70: 0x0008, 0xa71: 0x0008, 0xa72: 0x0008, 0xa73: 0x0008, 0xa74: 0x0008, 0xa75: 0x0008, -+ 0xa76: 0x0008, 0xa77: 0x0008, 0xa78: 0x03c9, 0xa79: 0x0008, 0xa7a: 0x0008, 0xa7b: 0x0008, -+ 0xa7c: 0x0008, 0xa7d: 0x0008, 0xa7e: 0x0008, 0xa7f: 0x0008, -+ // Block 0x2a, offset 0xa80 -+ 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008, -+ 0xa86: 0x0008, 0xa87: 0x0008, 0xa88: 0x0008, 0xa89: 0x0008, 0xa8a: 0x0008, 0xa8b: 0x0008, -+ 0xa8c: 0x0008, 0xa8d: 0x0008, 0xa8e: 0x0008, 0xa8f: 0x0008, 0xa90: 0x0008, 0xa91: 0x0008, -+ 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, -+ 0xa98: 0x0008, 0xa99: 0x0008, 0xa9a: 0x0008, 0xa9b: 0x03d1, 0xa9c: 0x03d9, 0xa9d: 0x03e1, -+ 0xa9e: 0x03e9, 0xa9f: 0x0371, 0xaa0: 0x03f1, 0xaa1: 0x03f9, 0xaa2: 0x0401, 0xaa3: 0x0409, -+ 0xaa4: 0x0411, 0xaa5: 0x0419, 0xaa6: 0x0421, 0xaa7: 0x05fd, 0xaa8: 0x0429, 0xaa9: 0x0431, -+ 0xaaa: 0xe17d, 0xaab: 0x0439, 0xaac: 0x0441, 0xaad: 0x0449, 0xaae: 0x0451, 0xaaf: 0x0459, -+ 0xab0: 0x0461, 0xab1: 0x0469, 0xab2: 0x0471, 0xab3: 0x0479, 0xab4: 0x0481, 0xab5: 0x0489, -+ 0xab6: 0x0491, 0xab7: 0x0499, 0xab8: 0x0615, 0xab9: 0x04a1, 0xaba: 0x04a9, 0xabb: 0x04b1, -+ 0xabc: 0x04b9, 0xabd: 0x04c1, 0xabe: 0x04c9, 0xabf: 0x04d1, -+ // Block 0x2b, offset 0xac0 -+ 0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008, -+ 0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008, -+ 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, -+ 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0xe00d, 0xad7: 0x0008, -+ 0xad8: 0xe00d, 0xad9: 0x0008, 0xada: 0xe00d, 0xadb: 0x0008, 0xadc: 0xe00d, 0xadd: 0x0008, -+ 0xade: 0xe00d, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, -+ 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, -+ 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, -+ 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, -+ 0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008, -+ 0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008, -+ // Block 0x2c, offset 0xb00 -+ 0xb00: 0xe00d, 0xb01: 0x0008, 0xb02: 0xe00d, 0xb03: 0x0008, 0xb04: 0xe00d, 0xb05: 0x0008, -+ 0xb06: 0xe00d, 0xb07: 0x0008, 0xb08: 0xe00d, 0xb09: 0x0008, 0xb0a: 0xe00d, 0xb0b: 0x0008, -+ 0xb0c: 0xe00d, 0xb0d: 0x0008, 0xb0e: 0xe00d, 0xb0f: 0x0008, 0xb10: 0xe00d, 0xb11: 0x0008, -+ 0xb12: 0xe00d, 0xb13: 0x0008, 0xb14: 0xe00d, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, -+ 0xb18: 0x0008, 0xb19: 0x0008, 0xb1a: 0x062d, 0xb1b: 0x064d, 0xb1c: 0x0008, 0xb1d: 0x0008, -+ 0xb1e: 0x04d9, 0xb1f: 0x0008, 0xb20: 0xe00d, 0xb21: 0x0008, 0xb22: 0xe00d, 0xb23: 0x0008, -+ 0xb24: 0xe00d, 0xb25: 0x0008, 0xb26: 0xe00d, 0xb27: 0x0008, 0xb28: 0xe00d, 0xb29: 0x0008, -+ 0xb2a: 0xe00d, 0xb2b: 0x0008, 0xb2c: 0xe00d, 0xb2d: 0x0008, 0xb2e: 0xe00d, 0xb2f: 0x0008, -+ 0xb30: 0xe00d, 0xb31: 0x0008, 0xb32: 0xe00d, 0xb33: 0x0008, 0xb34: 0xe00d, 0xb35: 0x0008, -+ 0xb36: 0xe00d, 0xb37: 0x0008, 0xb38: 0xe00d, 0xb39: 0x0008, 0xb3a: 0xe00d, 0xb3b: 0x0008, -+ 0xb3c: 0xe00d, 0xb3d: 0x0008, 0xb3e: 0xe00d, 0xb3f: 0x0008, -+ // Block 0x2d, offset 0xb40 -+ 0xb40: 0x0008, 0xb41: 0x0008, 0xb42: 0x0008, 0xb43: 0x0008, 0xb44: 0x0008, 0xb45: 0x0008, -+ 0xb46: 0x0040, 0xb47: 0x0040, 0xb48: 0xe045, 0xb49: 0xe045, 0xb4a: 0xe045, 0xb4b: 0xe045, -+ 0xb4c: 0xe045, 0xb4d: 0xe045, 0xb4e: 0x0040, 0xb4f: 0x0040, 0xb50: 0x0008, 0xb51: 0x0008, -+ 0xb52: 0x0008, 0xb53: 0x0008, 0xb54: 0x0008, 0xb55: 0x0008, 0xb56: 0x0008, 0xb57: 0x0008, -+ 0xb58: 0x0040, 0xb59: 0xe045, 0xb5a: 0x0040, 0xb5b: 0xe045, 0xb5c: 0x0040, 0xb5d: 0xe045, -+ 0xb5e: 0x0040, 0xb5f: 0xe045, 0xb60: 0x0008, 0xb61: 0x0008, 0xb62: 0x0008, 0xb63: 0x0008, -+ 0xb64: 0x0008, 0xb65: 0x0008, 0xb66: 0x0008, 0xb67: 0x0008, 0xb68: 0xe045, 0xb69: 0xe045, -+ 0xb6a: 0xe045, 0xb6b: 0xe045, 0xb6c: 0xe045, 0xb6d: 0xe045, 0xb6e: 0xe045, 0xb6f: 0xe045, -+ 0xb70: 0x0008, 0xb71: 0x04e1, 0xb72: 0x0008, 0xb73: 0x04e9, 0xb74: 0x0008, 0xb75: 0x04f1, -+ 0xb76: 0x0008, 0xb77: 0x04f9, 0xb78: 0x0008, 0xb79: 0x0501, 0xb7a: 0x0008, 0xb7b: 0x0509, -+ 0xb7c: 0x0008, 0xb7d: 0x0511, 0xb7e: 0x0040, 0xb7f: 0x0040, -+ // Block 0x2e, offset 0xb80 -+ 0xb80: 0x0519, 0xb81: 0x0521, 0xb82: 0x0529, 0xb83: 0x0531, 0xb84: 0x0539, 0xb85: 0x0541, -+ 0xb86: 0x0549, 0xb87: 0x0551, 0xb88: 0x0519, 0xb89: 0x0521, 0xb8a: 0x0529, 0xb8b: 0x0531, -+ 0xb8c: 0x0539, 0xb8d: 0x0541, 0xb8e: 0x0549, 0xb8f: 0x0551, 0xb90: 0x0559, 0xb91: 0x0561, -+ 0xb92: 0x0569, 0xb93: 0x0571, 0xb94: 0x0579, 0xb95: 0x0581, 0xb96: 0x0589, 0xb97: 0x0591, -+ 0xb98: 0x0559, 0xb99: 0x0561, 0xb9a: 0x0569, 0xb9b: 0x0571, 0xb9c: 0x0579, 0xb9d: 0x0581, -+ 0xb9e: 0x0589, 0xb9f: 0x0591, 0xba0: 0x0599, 0xba1: 0x05a1, 0xba2: 0x05a9, 0xba3: 0x05b1, -+ 0xba4: 0x05b9, 0xba5: 0x05c1, 0xba6: 0x05c9, 0xba7: 0x05d1, 0xba8: 0x0599, 0xba9: 0x05a1, -+ 0xbaa: 0x05a9, 0xbab: 0x05b1, 0xbac: 0x05b9, 0xbad: 0x05c1, 0xbae: 0x05c9, 0xbaf: 0x05d1, -+ 0xbb0: 0x0008, 0xbb1: 0x0008, 0xbb2: 0x05d9, 0xbb3: 0x05e1, 0xbb4: 0x05e9, 0xbb5: 0x0040, -+ 0xbb6: 0x0008, 0xbb7: 0x05f1, 0xbb8: 0xe045, 0xbb9: 0xe045, 0xbba: 0x0665, 0xbbb: 0x04e1, -+ 0xbbc: 0x05e1, 0xbbd: 0x067e, 0xbbe: 0x05f9, 0xbbf: 0x069e, -+ // Block 0x2f, offset 0xbc0 -+ 0xbc0: 0x06be, 0xbc1: 0x0602, 0xbc2: 0x0609, 0xbc3: 0x0611, 0xbc4: 0x0619, 0xbc5: 0x0040, -+ 0xbc6: 0x0008, 0xbc7: 0x0621, 0xbc8: 0x06dd, 0xbc9: 0x04e9, 0xbca: 0x06f5, 0xbcb: 0x04f1, -+ 0xbcc: 0x0611, 0xbcd: 0x062a, 0xbce: 0x0632, 0xbcf: 0x063a, 0xbd0: 0x0008, 0xbd1: 0x0008, -+ 0xbd2: 0x0008, 0xbd3: 0x0641, 0xbd4: 0x0040, 0xbd5: 0x0040, 0xbd6: 0x0008, 0xbd7: 0x0008, -+ 0xbd8: 0xe045, 0xbd9: 0xe045, 0xbda: 0x070d, 0xbdb: 0x04f9, 0xbdc: 0x0040, 0xbdd: 0x064a, -+ 0xbde: 0x0652, 0xbdf: 0x065a, 0xbe0: 0x0008, 0xbe1: 0x0008, 0xbe2: 0x0008, 0xbe3: 0x0661, -+ 0xbe4: 0x0008, 0xbe5: 0x0008, 0xbe6: 0x0008, 0xbe7: 0x0008, 0xbe8: 0xe045, 0xbe9: 0xe045, -+ 0xbea: 0x0725, 0xbeb: 0x0509, 0xbec: 0xe04d, 0xbed: 0x066a, 0xbee: 0x012a, 0xbef: 0x0672, -+ 0xbf0: 0x0040, 0xbf1: 0x0040, 0xbf2: 0x0679, 0xbf3: 0x0681, 0xbf4: 0x0689, 0xbf5: 0x0040, -+ 0xbf6: 0x0008, 0xbf7: 0x0691, 0xbf8: 0x073d, 0xbf9: 0x0501, 0xbfa: 0x0515, 0xbfb: 0x0511, -+ 0xbfc: 0x0681, 0xbfd: 0x0756, 0xbfe: 0x0776, 0xbff: 0x0040, -+ // Block 0x30, offset 0xc00 -+ 0xc00: 0x000a, 0xc01: 0x000a, 0xc02: 0x000a, 0xc03: 0x000a, 0xc04: 0x000a, 0xc05: 0x000a, -+ 0xc06: 0x000a, 0xc07: 0x000a, 0xc08: 0x000a, 0xc09: 0x000a, 0xc0a: 0x000a, 0xc0b: 0x03c0, -+ 0xc0c: 0x0003, 0xc0d: 0x0003, 0xc0e: 0x0340, 0xc0f: 0x0b40, 0xc10: 0x0018, 0xc11: 0xe00d, -+ 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x0796, -+ 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, -+ 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x0018, 0xc21: 0x0018, 0xc22: 0x0018, 0xc23: 0x0018, -+ 0xc24: 0x0040, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0018, 0xc28: 0x0040, 0xc29: 0x0040, -+ 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x000a, -+ 0xc30: 0x0018, 0xc31: 0x0018, 0xc32: 0x0018, 0xc33: 0x0699, 0xc34: 0x06a1, 0xc35: 0x0018, -+ 0xc36: 0x06a9, 0xc37: 0x06b1, 0xc38: 0x0018, 0xc39: 0x0018, 0xc3a: 0x0018, 0xc3b: 0x0018, -+ 0xc3c: 0x06ba, 0xc3d: 0x0018, 0xc3e: 0x07b6, 0xc3f: 0x0018, -+ // Block 0x31, offset 0xc40 -+ 0xc40: 0x0018, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0018, -+ 0xc46: 0x0018, 0xc47: 0x06c2, 0xc48: 0x06ca, 0xc49: 0x06d2, 0xc4a: 0x0018, 0xc4b: 0x0018, -+ 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0018, 0xc4f: 0x0018, 0xc50: 0x0018, 0xc51: 0x0018, -+ 0xc52: 0x0018, 0xc53: 0x0018, 0xc54: 0x0018, 0xc55: 0x0018, 0xc56: 0x0018, 0xc57: 0x06d9, -+ 0xc58: 0x0018, 0xc59: 0x0018, 0xc5a: 0x0018, 0xc5b: 0x0018, 0xc5c: 0x0018, 0xc5d: 0x0018, -+ 0xc5e: 0x0018, 0xc5f: 0x000a, 0xc60: 0x03c0, 0xc61: 0x0340, 0xc62: 0x0340, 0xc63: 0x0340, -+ 0xc64: 0x03c0, 0xc65: 0x0040, 0xc66: 0x0040, 0xc67: 0x0040, 0xc68: 0x0040, 0xc69: 0x0040, -+ 0xc6a: 0x0340, 0xc6b: 0x0340, 0xc6c: 0x0340, 0xc6d: 0x0340, 0xc6e: 0x0340, 0xc6f: 0x0340, -+ 0xc70: 0x06e1, 0xc71: 0x0311, 0xc72: 0x0040, 0xc73: 0x0040, 0xc74: 0x06e9, 0xc75: 0x06f1, -+ 0xc76: 0x06f9, 0xc77: 0x0701, 0xc78: 0x0709, 0xc79: 0x0711, 0xc7a: 0x071a, 0xc7b: 0x07d5, -+ 0xc7c: 0x0722, 0xc7d: 0x072a, 0xc7e: 0x0732, 0xc7f: 0x0329, -+ // Block 0x32, offset 0xc80 -+ 0xc80: 0x06e1, 0xc81: 0x0049, 0xc82: 0x0029, 0xc83: 0x0031, 0xc84: 0x06e9, 0xc85: 0x06f1, -+ 0xc86: 0x06f9, 0xc87: 0x0701, 0xc88: 0x0709, 0xc89: 0x0711, 0xc8a: 0x071a, 0xc8b: 0x07ed, -+ 0xc8c: 0x0722, 0xc8d: 0x072a, 0xc8e: 0x0732, 0xc8f: 0x0040, 0xc90: 0x0019, 0xc91: 0x02f9, -+ 0xc92: 0x0051, 0xc93: 0x0109, 0xc94: 0x0361, 0xc95: 0x00a9, 0xc96: 0x0319, 0xc97: 0x0101, -+ 0xc98: 0x0321, 0xc99: 0x0329, 0xc9a: 0x0339, 0xc9b: 0x0089, 0xc9c: 0x0341, 0xc9d: 0x0040, -+ 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x0018, 0xca1: 0x0018, 0xca2: 0x0018, 0xca3: 0x0018, -+ 0xca4: 0x0018, 0xca5: 0x0018, 0xca6: 0x0018, 0xca7: 0x0018, 0xca8: 0x0739, 0xca9: 0x0018, -+ 0xcaa: 0x0018, 0xcab: 0x0018, 0xcac: 0x0018, 0xcad: 0x0018, 0xcae: 0x0018, 0xcaf: 0x0018, -+ 0xcb0: 0x0018, 0xcb1: 0x0018, 0xcb2: 0x0018, 0xcb3: 0x0018, 0xcb4: 0x0018, 0xcb5: 0x0018, -+ 0xcb6: 0x0018, 0xcb7: 0x0018, 0xcb8: 0x0018, 0xcb9: 0x0018, 0xcba: 0x0018, 0xcbb: 0x0018, -+ 0xcbc: 0x0018, 0xcbd: 0x0018, 0xcbe: 0x0018, 0xcbf: 0x0018, -+ // Block 0x33, offset 0xcc0 -+ 0xcc0: 0x0806, 0xcc1: 0x0826, 0xcc2: 0x03d9, 0xcc3: 0x0845, 0xcc4: 0x0018, 0xcc5: 0x0866, -+ 0xcc6: 0x0886, 0xcc7: 0x0369, 0xcc8: 0x0018, 0xcc9: 0x08a5, 0xcca: 0x0309, 0xccb: 0x00a9, -+ 0xccc: 0x00a9, 0xccd: 0x00a9, 0xcce: 0x00a9, 0xccf: 0x0741, 0xcd0: 0x0311, 0xcd1: 0x0311, -+ 0xcd2: 0x0101, 0xcd3: 0x0101, 0xcd4: 0x0018, 0xcd5: 0x0329, 0xcd6: 0x0749, 0xcd7: 0x0018, -+ 0xcd8: 0x0018, 0xcd9: 0x0339, 0xcda: 0x0751, 0xcdb: 0x00b9, 0xcdc: 0x00b9, 0xcdd: 0x00b9, -+ 0xcde: 0x0018, 0xcdf: 0x0018, 0xce0: 0x0759, 0xce1: 0x08c5, 0xce2: 0x0761, 0xce3: 0x0018, -+ 0xce4: 0x04b1, 0xce5: 0x0018, 0xce6: 0x0769, 0xce7: 0x0018, 0xce8: 0x04b1, 0xce9: 0x0018, -+ 0xcea: 0x0319, 0xceb: 0x0771, 0xcec: 0x02e9, 0xced: 0x03d9, 0xcee: 0x0018, 0xcef: 0x02f9, -+ 0xcf0: 0x02f9, 0xcf1: 0x03f1, 0xcf2: 0x0040, 0xcf3: 0x0321, 0xcf4: 0x0051, 0xcf5: 0x0779, -+ 0xcf6: 0x0781, 0xcf7: 0x0789, 0xcf8: 0x0791, 0xcf9: 0x0311, 0xcfa: 0x0018, 0xcfb: 0x08e5, -+ 0xcfc: 0x0799, 0xcfd: 0x03a1, 0xcfe: 0x03a1, 0xcff: 0x0799, -+ // Block 0x34, offset 0xd00 -+ 0xd00: 0x0905, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x02f1, -+ 0xd06: 0x02f1, 0xd07: 0x02f9, 0xd08: 0x0311, 0xd09: 0x00b1, 0xd0a: 0x0018, 0xd0b: 0x0018, -+ 0xd0c: 0x0018, 0xd0d: 0x0018, 0xd0e: 0x0008, 0xd0f: 0x0018, 0xd10: 0x07a1, 0xd11: 0x07a9, -+ 0xd12: 0x07b1, 0xd13: 0x07b9, 0xd14: 0x07c1, 0xd15: 0x07c9, 0xd16: 0x07d1, 0xd17: 0x07d9, -+ 0xd18: 0x07e1, 0xd19: 0x07e9, 0xd1a: 0x07f1, 0xd1b: 0x07f9, 0xd1c: 0x0801, 0xd1d: 0x0809, -+ 0xd1e: 0x0811, 0xd1f: 0x0819, 0xd20: 0x0311, 0xd21: 0x0821, 0xd22: 0x091d, 0xd23: 0x0829, -+ 0xd24: 0x0391, 0xd25: 0x0831, 0xd26: 0x093d, 0xd27: 0x0839, 0xd28: 0x0841, 0xd29: 0x0109, -+ 0xd2a: 0x0849, 0xd2b: 0x095d, 0xd2c: 0x0101, 0xd2d: 0x03d9, 0xd2e: 0x02f1, 0xd2f: 0x0321, -+ 0xd30: 0x0311, 0xd31: 0x0821, 0xd32: 0x097d, 0xd33: 0x0829, 0xd34: 0x0391, 0xd35: 0x0831, -+ 0xd36: 0x099d, 0xd37: 0x0839, 0xd38: 0x0841, 0xd39: 0x0109, 0xd3a: 0x0849, 0xd3b: 0x09bd, -+ 0xd3c: 0x0101, 0xd3d: 0x03d9, 0xd3e: 0x02f1, 0xd3f: 0x0321, -+ // Block 0x35, offset 0xd40 -+ 0xd40: 0x0018, 0xd41: 0x0018, 0xd42: 0x0018, 0xd43: 0x0018, 0xd44: 0x0018, 0xd45: 0x0018, -+ 0xd46: 0x0018, 0xd47: 0x0018, 0xd48: 0x0018, 0xd49: 0x0018, 0xd4a: 0x0018, 0xd4b: 0x0040, -+ 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, -+ 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, -+ 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0040, 0xd5d: 0x0040, -+ 0xd5e: 0x0040, 0xd5f: 0x0040, 0xd60: 0x0049, 0xd61: 0x0029, 0xd62: 0x0031, 0xd63: 0x06e9, -+ 0xd64: 0x06f1, 0xd65: 0x06f9, 0xd66: 0x0701, 0xd67: 0x0709, 0xd68: 0x0711, 0xd69: 0x0879, -+ 0xd6a: 0x0881, 0xd6b: 0x0889, 0xd6c: 0x0891, 0xd6d: 0x0899, 0xd6e: 0x08a1, 0xd6f: 0x08a9, -+ 0xd70: 0x08b1, 0xd71: 0x08b9, 0xd72: 0x08c1, 0xd73: 0x08c9, 0xd74: 0x0a1e, 0xd75: 0x0a3e, -+ 0xd76: 0x0a5e, 0xd77: 0x0a7e, 0xd78: 0x0a9e, 0xd79: 0x0abe, 0xd7a: 0x0ade, 0xd7b: 0x0afe, -+ 0xd7c: 0x0b1e, 0xd7d: 0x08d2, 0xd7e: 0x08da, 0xd7f: 0x08e2, -+ // Block 0x36, offset 0xd80 -+ 0xd80: 0x08ea, 0xd81: 0x08f2, 0xd82: 0x08fa, 0xd83: 0x0902, 0xd84: 0x090a, 0xd85: 0x0912, -+ 0xd86: 0x091a, 0xd87: 0x0922, 0xd88: 0x0040, 0xd89: 0x0040, 0xd8a: 0x0040, 0xd8b: 0x0040, -+ 0xd8c: 0x0040, 0xd8d: 0x0040, 0xd8e: 0x0040, 0xd8f: 0x0040, 0xd90: 0x0040, 0xd91: 0x0040, -+ 0xd92: 0x0040, 0xd93: 0x0040, 0xd94: 0x0040, 0xd95: 0x0040, 0xd96: 0x0040, 0xd97: 0x0040, -+ 0xd98: 0x0040, 0xd99: 0x0040, 0xd9a: 0x0040, 0xd9b: 0x0040, 0xd9c: 0x0b3e, 0xd9d: 0x0b5e, -+ 0xd9e: 0x0b7e, 0xd9f: 0x0b9e, 0xda0: 0x0bbe, 0xda1: 0x0bde, 0xda2: 0x0bfe, 0xda3: 0x0c1e, -+ 0xda4: 0x0c3e, 0xda5: 0x0c5e, 0xda6: 0x0c7e, 0xda7: 0x0c9e, 0xda8: 0x0cbe, 0xda9: 0x0cde, -+ 0xdaa: 0x0cfe, 0xdab: 0x0d1e, 0xdac: 0x0d3e, 0xdad: 0x0d5e, 0xdae: 0x0d7e, 0xdaf: 0x0d9e, -+ 0xdb0: 0x0dbe, 0xdb1: 0x0dde, 0xdb2: 0x0dfe, 0xdb3: 0x0e1e, 0xdb4: 0x0e3e, 0xdb5: 0x0e5e, -+ 0xdb6: 0x0019, 0xdb7: 0x02e9, 0xdb8: 0x03d9, 0xdb9: 0x02f1, 0xdba: 0x02f9, 0xdbb: 0x03f1, -+ 0xdbc: 0x0309, 0xdbd: 0x00a9, 0xdbe: 0x0311, 0xdbf: 0x00b1, -+ // Block 0x37, offset 0xdc0 -+ 0xdc0: 0x0319, 0xdc1: 0x0101, 0xdc2: 0x0321, 0xdc3: 0x0329, 0xdc4: 0x0051, 0xdc5: 0x0339, -+ 0xdc6: 0x0751, 0xdc7: 0x00b9, 0xdc8: 0x0089, 0xdc9: 0x0341, 0xdca: 0x0349, 0xdcb: 0x0391, -+ 0xdcc: 0x00c1, 0xdcd: 0x0109, 0xdce: 0x00c9, 0xdcf: 0x04b1, 0xdd0: 0x0019, 0xdd1: 0x02e9, -+ 0xdd2: 0x03d9, 0xdd3: 0x02f1, 0xdd4: 0x02f9, 0xdd5: 0x03f1, 0xdd6: 0x0309, 0xdd7: 0x00a9, -+ 0xdd8: 0x0311, 0xdd9: 0x00b1, 0xdda: 0x0319, 0xddb: 0x0101, 0xddc: 0x0321, 0xddd: 0x0329, -+ 0xdde: 0x0051, 0xddf: 0x0339, 0xde0: 0x0751, 0xde1: 0x00b9, 0xde2: 0x0089, 0xde3: 0x0341, -+ 0xde4: 0x0349, 0xde5: 0x0391, 0xde6: 0x00c1, 0xde7: 0x0109, 0xde8: 0x00c9, 0xde9: 0x04b1, -+ 0xdea: 0x06e1, 0xdeb: 0x0018, 0xdec: 0x0018, 0xded: 0x0018, 0xdee: 0x0018, 0xdef: 0x0018, -+ 0xdf0: 0x0018, 0xdf1: 0x0018, 0xdf2: 0x0018, 0xdf3: 0x0018, 0xdf4: 0x0018, 0xdf5: 0x0018, -+ 0xdf6: 0x0018, 0xdf7: 0x0018, 0xdf8: 0x0018, 0xdf9: 0x0018, 0xdfa: 0x0018, 0xdfb: 0x0018, -+ 0xdfc: 0x0018, 0xdfd: 0x0018, 0xdfe: 0x0018, 0xdff: 0x0018, -+ // Block 0x38, offset 0xe00 -+ 0xe00: 0x0008, 0xe01: 0x0008, 0xe02: 0x0008, 0xe03: 0x0008, 0xe04: 0x0008, 0xe05: 0x0008, -+ 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0008, 0xe09: 0x0008, 0xe0a: 0x0008, 0xe0b: 0x0008, -+ 0xe0c: 0x0008, 0xe0d: 0x0008, 0xe0e: 0x0008, 0xe0f: 0x0008, 0xe10: 0x0008, 0xe11: 0x0008, -+ 0xe12: 0x0008, 0xe13: 0x0008, 0xe14: 0x0008, 0xe15: 0x0008, 0xe16: 0x0008, 0xe17: 0x0008, -+ 0xe18: 0x0008, 0xe19: 0x0008, 0xe1a: 0x0008, 0xe1b: 0x0008, 0xe1c: 0x0008, 0xe1d: 0x0008, -+ 0xe1e: 0x0008, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0x0941, 0xe23: 0x0ed5, -+ 0xe24: 0x0949, 0xe25: 0x0008, 0xe26: 0x0008, 0xe27: 0xe07d, 0xe28: 0x0008, 0xe29: 0xe01d, -+ 0xe2a: 0x0008, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0x0359, 0xe2e: 0x0441, 0xe2f: 0x0351, -+ 0xe30: 0x03d1, 0xe31: 0x0008, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0008, 0xe35: 0xe01d, -+ 0xe36: 0x0008, 0xe37: 0x0008, 0xe38: 0x0008, 0xe39: 0x0008, 0xe3a: 0x0008, 0xe3b: 0x0008, -+ 0xe3c: 0x00b1, 0xe3d: 0x0391, 0xe3e: 0x0951, 0xe3f: 0x0959, -+ // Block 0x39, offset 0xe40 -+ 0xe40: 0xe00d, 0xe41: 0x0008, 0xe42: 0xe00d, 0xe43: 0x0008, 0xe44: 0xe00d, 0xe45: 0x0008, -+ 0xe46: 0xe00d, 0xe47: 0x0008, 0xe48: 0xe00d, 0xe49: 0x0008, 0xe4a: 0xe00d, 0xe4b: 0x0008, -+ 0xe4c: 0xe00d, 0xe4d: 0x0008, 0xe4e: 0xe00d, 0xe4f: 0x0008, 0xe50: 0xe00d, 0xe51: 0x0008, -+ 0xe52: 0xe00d, 0xe53: 0x0008, 0xe54: 0xe00d, 0xe55: 0x0008, 0xe56: 0xe00d, 0xe57: 0x0008, -+ 0xe58: 0xe00d, 0xe59: 0x0008, 0xe5a: 0xe00d, 0xe5b: 0x0008, 0xe5c: 0xe00d, 0xe5d: 0x0008, -+ 0xe5e: 0xe00d, 0xe5f: 0x0008, 0xe60: 0xe00d, 0xe61: 0x0008, 0xe62: 0xe00d, 0xe63: 0x0008, -+ 0xe64: 0x0008, 0xe65: 0x0018, 0xe66: 0x0018, 0xe67: 0x0018, 0xe68: 0x0018, 0xe69: 0x0018, -+ 0xe6a: 0x0018, 0xe6b: 0xe03d, 0xe6c: 0x0008, 0xe6d: 0xe01d, 0xe6e: 0x0008, 0xe6f: 0x3308, -+ 0xe70: 0x3308, 0xe71: 0x3308, 0xe72: 0xe00d, 0xe73: 0x0008, 0xe74: 0x0040, 0xe75: 0x0040, -+ 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0018, 0xe7a: 0x0018, 0xe7b: 0x0018, -+ 0xe7c: 0x0018, 0xe7d: 0x0018, 0xe7e: 0x0018, 0xe7f: 0x0018, -+ // Block 0x3a, offset 0xe80 -+ 0xe80: 0x2715, 0xe81: 0x2735, 0xe82: 0x2755, 0xe83: 0x2775, 0xe84: 0x2795, 0xe85: 0x27b5, -+ 0xe86: 0x27d5, 0xe87: 0x27f5, 0xe88: 0x2815, 0xe89: 0x2835, 0xe8a: 0x2855, 0xe8b: 0x2875, -+ 0xe8c: 0x2895, 0xe8d: 0x28b5, 0xe8e: 0x28d5, 0xe8f: 0x28f5, 0xe90: 0x2915, 0xe91: 0x2935, -+ 0xe92: 0x2955, 0xe93: 0x2975, 0xe94: 0x2995, 0xe95: 0x29b5, 0xe96: 0x0040, 0xe97: 0x0040, -+ 0xe98: 0x0040, 0xe99: 0x0040, 0xe9a: 0x0040, 0xe9b: 0x0040, 0xe9c: 0x0040, 0xe9d: 0x0040, -+ 0xe9e: 0x0040, 0xe9f: 0x0040, 0xea0: 0x0040, 0xea1: 0x0040, 0xea2: 0x0040, 0xea3: 0x0040, -+ 0xea4: 0x0040, 0xea5: 0x0040, 0xea6: 0x0040, 0xea7: 0x0040, 0xea8: 0x0040, 0xea9: 0x0040, -+ 0xeaa: 0x0040, 0xeab: 0x0040, 0xeac: 0x0040, 0xead: 0x0040, 0xeae: 0x0040, 0xeaf: 0x0040, -+ 0xeb0: 0x0040, 0xeb1: 0x0040, 0xeb2: 0x0040, 0xeb3: 0x0040, 0xeb4: 0x0040, 0xeb5: 0x0040, -+ 0xeb6: 0x0040, 0xeb7: 0x0040, 0xeb8: 0x0040, 0xeb9: 0x0040, 0xeba: 0x0040, 0xebb: 0x0040, -+ 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040, -+ // Block 0x3b, offset 0xec0 -+ 0xec0: 0x000a, 0xec1: 0x0018, 0xec2: 0x0961, 0xec3: 0x0018, 0xec4: 0x0018, 0xec5: 0x0008, -+ 0xec6: 0x0008, 0xec7: 0x0008, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018, -+ 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x0018, 0xed1: 0x0018, -+ 0xed2: 0x0018, 0xed3: 0x0018, 0xed4: 0x0018, 0xed5: 0x0018, 0xed6: 0x0018, 0xed7: 0x0018, -+ 0xed8: 0x0018, 0xed9: 0x0018, 0xeda: 0x0018, 0xedb: 0x0018, 0xedc: 0x0018, 0xedd: 0x0018, -+ 0xede: 0x0018, 0xedf: 0x0018, 0xee0: 0x0018, 0xee1: 0x0018, 0xee2: 0x0018, 0xee3: 0x0018, -+ 0xee4: 0x0018, 0xee5: 0x0018, 0xee6: 0x0018, 0xee7: 0x0018, 0xee8: 0x0018, 0xee9: 0x0018, -+ 0xeea: 0x3308, 0xeeb: 0x3308, 0xeec: 0x3308, 0xeed: 0x3308, 0xeee: 0x3018, 0xeef: 0x3018, -+ 0xef0: 0x0018, 0xef1: 0x0018, 0xef2: 0x0018, 0xef3: 0x0018, 0xef4: 0x0018, 0xef5: 0x0018, -+ 0xef6: 0xe125, 0xef7: 0x0018, 0xef8: 0x29d5, 0xef9: 0x29f5, 0xefa: 0x2a15, 0xefb: 0x0018, -+ 0xefc: 0x0008, 0xefd: 0x0018, 0xefe: 0x0018, 0xeff: 0x0018, -+ // Block 0x3c, offset 0xf00 -+ 0xf00: 0x2b55, 0xf01: 0x2b75, 0xf02: 0x2b95, 0xf03: 0x2bb5, 0xf04: 0x2bd5, 0xf05: 0x2bf5, -+ 0xf06: 0x2bf5, 0xf07: 0x2bf5, 0xf08: 0x2c15, 0xf09: 0x2c15, 0xf0a: 0x2c15, 0xf0b: 0x2c15, -+ 0xf0c: 0x2c35, 0xf0d: 0x2c35, 0xf0e: 0x2c35, 0xf0f: 0x2c55, 0xf10: 0x2c75, 0xf11: 0x2c75, -+ 0xf12: 0x2a95, 0xf13: 0x2a95, 0xf14: 0x2c75, 0xf15: 0x2c75, 0xf16: 0x2c95, 0xf17: 0x2c95, -+ 0xf18: 0x2c75, 0xf19: 0x2c75, 0xf1a: 0x2a95, 0xf1b: 0x2a95, 0xf1c: 0x2c75, 0xf1d: 0x2c75, -+ 0xf1e: 0x2c55, 0xf1f: 0x2c55, 0xf20: 0x2cb5, 0xf21: 0x2cb5, 0xf22: 0x2cd5, 0xf23: 0x2cd5, -+ 0xf24: 0x0040, 0xf25: 0x2cf5, 0xf26: 0x2d15, 0xf27: 0x2d35, 0xf28: 0x2d35, 0xf29: 0x2d55, -+ 0xf2a: 0x2d75, 0xf2b: 0x2d95, 0xf2c: 0x2db5, 0xf2d: 0x2dd5, 0xf2e: 0x2df5, 0xf2f: 0x2e15, -+ 0xf30: 0x2e35, 0xf31: 0x2e55, 0xf32: 0x2e55, 0xf33: 0x2e75, 0xf34: 0x2e95, 0xf35: 0x2e95, -+ 0xf36: 0x2eb5, 0xf37: 0x2ed5, 0xf38: 0x2e75, 0xf39: 0x2ef5, 0xf3a: 0x2f15, 0xf3b: 0x2ef5, -+ 0xf3c: 0x2e75, 0xf3d: 0x2f35, 0xf3e: 0x2f55, 0xf3f: 0x2f75, -+ // Block 0x3d, offset 0xf40 -+ 0xf40: 0x2f95, 0xf41: 0x2fb5, 0xf42: 0x2d15, 0xf43: 0x2cf5, 0xf44: 0x2fd5, 0xf45: 0x2ff5, -+ 0xf46: 0x3015, 0xf47: 0x3035, 0xf48: 0x3055, 0xf49: 0x3075, 0xf4a: 0x3095, 0xf4b: 0x30b5, -+ 0xf4c: 0x30d5, 0xf4d: 0x30f5, 0xf4e: 0x3115, 0xf4f: 0x0040, 0xf50: 0x0018, 0xf51: 0x0018, -+ 0xf52: 0x3135, 0xf53: 0x3155, 0xf54: 0x3175, 0xf55: 0x3195, 0xf56: 0x31b5, 0xf57: 0x31d5, -+ 0xf58: 0x31f5, 0xf59: 0x3215, 0xf5a: 0x3235, 0xf5b: 0x3255, 0xf5c: 0x3175, 0xf5d: 0x3275, -+ 0xf5e: 0x3295, 0xf5f: 0x32b5, 0xf60: 0x0008, 0xf61: 0x0008, 0xf62: 0x0008, 0xf63: 0x0008, -+ 0xf64: 0x0008, 0xf65: 0x0008, 0xf66: 0x0008, 0xf67: 0x0008, 0xf68: 0x0008, 0xf69: 0x0008, -+ 0xf6a: 0x0008, 0xf6b: 0x0008, 0xf6c: 0x0008, 0xf6d: 0x0008, 0xf6e: 0x0008, 0xf6f: 0x0008, -+ 0xf70: 0x0008, 0xf71: 0x0008, 0xf72: 0x0008, 0xf73: 0x0008, 0xf74: 0x0008, 0xf75: 0x0008, -+ 0xf76: 0x0008, 0xf77: 0x0008, 0xf78: 0x0008, 0xf79: 0x0008, 0xf7a: 0x0008, 0xf7b: 0x0008, -+ 0xf7c: 0x0008, 0xf7d: 0x0008, 0xf7e: 0x0008, 0xf7f: 0x0008, -+ // Block 0x3e, offset 0xf80 -+ 0xf80: 0x0b82, 0xf81: 0x0b8a, 0xf82: 0x0b92, 0xf83: 0x0b9a, 0xf84: 0x32d5, 0xf85: 0x32f5, -+ 0xf86: 0x3315, 0xf87: 0x3335, 0xf88: 0x0018, 0xf89: 0x0018, 0xf8a: 0x0018, 0xf8b: 0x0018, -+ 0xf8c: 0x0018, 0xf8d: 0x0018, 0xf8e: 0x0018, 0xf8f: 0x0018, 0xf90: 0x3355, 0xf91: 0x0ba1, -+ 0xf92: 0x0ba9, 0xf93: 0x0bb1, 0xf94: 0x0bb9, 0xf95: 0x0bc1, 0xf96: 0x0bc9, 0xf97: 0x0bd1, -+ 0xf98: 0x0bd9, 0xf99: 0x0be1, 0xf9a: 0x0be9, 0xf9b: 0x0bf1, 0xf9c: 0x0bf9, 0xf9d: 0x0c01, -+ 0xf9e: 0x0c09, 0xf9f: 0x0c11, 0xfa0: 0x3375, 0xfa1: 0x3395, 0xfa2: 0x33b5, 0xfa3: 0x33d5, -+ 0xfa4: 0x33f5, 0xfa5: 0x33f5, 0xfa6: 0x3415, 0xfa7: 0x3435, 0xfa8: 0x3455, 0xfa9: 0x3475, -+ 0xfaa: 0x3495, 0xfab: 0x34b5, 0xfac: 0x34d5, 0xfad: 0x34f5, 0xfae: 0x3515, 0xfaf: 0x3535, -+ 0xfb0: 0x3555, 0xfb1: 0x3575, 0xfb2: 0x3595, 0xfb3: 0x35b5, 0xfb4: 0x35d5, 0xfb5: 0x35f5, -+ 0xfb6: 0x3615, 0xfb7: 0x3635, 0xfb8: 0x3655, 0xfb9: 0x3675, 0xfba: 0x3695, 0xfbb: 0x36b5, -+ 0xfbc: 0x0c19, 0xfbd: 0x0c21, 0xfbe: 0x36d5, 0xfbf: 0x0018, -+ // Block 0x3f, offset 0xfc0 -+ 0xfc0: 0x36f5, 0xfc1: 0x3715, 0xfc2: 0x3735, 0xfc3: 0x3755, 0xfc4: 0x3775, 0xfc5: 0x3795, -+ 0xfc6: 0x37b5, 0xfc7: 0x37d5, 0xfc8: 0x37f5, 0xfc9: 0x3815, 0xfca: 0x3835, 0xfcb: 0x3855, -+ 0xfcc: 0x3875, 0xfcd: 0x3895, 0xfce: 0x38b5, 0xfcf: 0x38d5, 0xfd0: 0x38f5, 0xfd1: 0x3915, -+ 0xfd2: 0x3935, 0xfd3: 0x3955, 0xfd4: 0x3975, 0xfd5: 0x3995, 0xfd6: 0x39b5, 0xfd7: 0x39d5, -+ 0xfd8: 0x39f5, 0xfd9: 0x3a15, 0xfda: 0x3a35, 0xfdb: 0x3a55, 0xfdc: 0x3a75, 0xfdd: 0x3a95, -+ 0xfde: 0x3ab5, 0xfdf: 0x3ad5, 0xfe0: 0x3af5, 0xfe1: 0x3b15, 0xfe2: 0x3b35, 0xfe3: 0x3b55, -+ 0xfe4: 0x3b75, 0xfe5: 0x3b95, 0xfe6: 0x1295, 0xfe7: 0x3bb5, 0xfe8: 0x3bd5, 0xfe9: 0x3bf5, -+ 0xfea: 0x3c15, 0xfeb: 0x3c35, 0xfec: 0x3c55, 0xfed: 0x3c75, 0xfee: 0x23b5, 0xfef: 0x3c95, -+ 0xff0: 0x3cb5, 0xff1: 0x0c29, 0xff2: 0x0c31, 0xff3: 0x0c39, 0xff4: 0x0c41, 0xff5: 0x0c49, -+ 0xff6: 0x0c51, 0xff7: 0x0c59, 0xff8: 0x0c61, 0xff9: 0x0c69, 0xffa: 0x0c71, 0xffb: 0x0c79, -+ 0xffc: 0x0c81, 0xffd: 0x0c89, 0xffe: 0x0c91, 0xfff: 0x0c99, -+ // Block 0x40, offset 0x1000 -+ 0x1000: 0x0ca1, 0x1001: 0x0ca9, 0x1002: 0x0cb1, 0x1003: 0x0cb9, 0x1004: 0x0cc1, 0x1005: 0x0cc9, -+ 0x1006: 0x0cd1, 0x1007: 0x0cd9, 0x1008: 0x0ce1, 0x1009: 0x0ce9, 0x100a: 0x0cf1, 0x100b: 0x0cf9, -+ 0x100c: 0x0d01, 0x100d: 0x3cd5, 0x100e: 0x0d09, 0x100f: 0x3cf5, 0x1010: 0x3d15, 0x1011: 0x3d2d, -+ 0x1012: 0x3d45, 0x1013: 0x3d5d, 0x1014: 0x3d75, 0x1015: 0x3d75, 0x1016: 0x3d5d, 0x1017: 0x3d8d, -+ 0x1018: 0x07d5, 0x1019: 0x3da5, 0x101a: 0x3dbd, 0x101b: 0x3dd5, 0x101c: 0x3ded, 0x101d: 0x3e05, -+ 0x101e: 0x3e1d, 0x101f: 0x3e35, 0x1020: 0x3e4d, 0x1021: 0x3e65, 0x1022: 0x3e7d, 0x1023: 0x3e95, -+ 0x1024: 0x3ead, 0x1025: 0x3ead, 0x1026: 0x3ec5, 0x1027: 0x3ec5, 0x1028: 0x3edd, 0x1029: 0x3edd, -+ 0x102a: 0x3ef5, 0x102b: 0x3f0d, 0x102c: 0x3f25, 0x102d: 0x3f3d, 0x102e: 0x3f55, 0x102f: 0x3f55, -+ 0x1030: 0x3f6d, 0x1031: 0x3f6d, 0x1032: 0x3f6d, 0x1033: 0x3f85, 0x1034: 0x3f9d, 0x1035: 0x3fb5, -+ 0x1036: 0x3fcd, 0x1037: 0x3fb5, 0x1038: 0x3fe5, 0x1039: 0x3ffd, 0x103a: 0x3f85, 0x103b: 0x4015, -+ 0x103c: 0x402d, 0x103d: 0x402d, 0x103e: 0x402d, 0x103f: 0x0d11, -+ // Block 0x41, offset 0x1040 -+ 0x1040: 0x10f9, 0x1041: 0x1101, 0x1042: 0x40a5, 0x1043: 0x1109, 0x1044: 0x1111, 0x1045: 0x1119, -+ 0x1046: 0x1121, 0x1047: 0x1129, 0x1048: 0x40c5, 0x1049: 0x1131, 0x104a: 0x1139, 0x104b: 0x1141, -+ 0x104c: 0x40e5, 0x104d: 0x40e5, 0x104e: 0x1149, 0x104f: 0x1151, 0x1050: 0x1159, 0x1051: 0x4105, -+ 0x1052: 0x4125, 0x1053: 0x4145, 0x1054: 0x4165, 0x1055: 0x4185, 0x1056: 0x1161, 0x1057: 0x1169, -+ 0x1058: 0x1171, 0x1059: 0x1179, 0x105a: 0x1181, 0x105b: 0x41a5, 0x105c: 0x1189, 0x105d: 0x1191, -+ 0x105e: 0x1199, 0x105f: 0x41c5, 0x1060: 0x41e5, 0x1061: 0x11a1, 0x1062: 0x4205, 0x1063: 0x4225, -+ 0x1064: 0x4245, 0x1065: 0x11a9, 0x1066: 0x4265, 0x1067: 0x11b1, 0x1068: 0x11b9, 0x1069: 0x10f9, -+ 0x106a: 0x4285, 0x106b: 0x42a5, 0x106c: 0x42c5, 0x106d: 0x42e5, 0x106e: 0x11c1, 0x106f: 0x11c9, -+ 0x1070: 0x11d1, 0x1071: 0x11d9, 0x1072: 0x4305, 0x1073: 0x11e1, 0x1074: 0x11e9, 0x1075: 0x11f1, -+ 0x1076: 0x4325, 0x1077: 0x11f9, 0x1078: 0x1201, 0x1079: 0x11f9, 0x107a: 0x1209, 0x107b: 0x1211, -+ 0x107c: 0x4345, 0x107d: 0x1219, 0x107e: 0x1221, 0x107f: 0x1219, -+ // Block 0x42, offset 0x1080 -+ 0x1080: 0x4365, 0x1081: 0x4385, 0x1082: 0x0040, 0x1083: 0x1229, 0x1084: 0x1231, 0x1085: 0x1239, -+ 0x1086: 0x1241, 0x1087: 0x0040, 0x1088: 0x1249, 0x1089: 0x1251, 0x108a: 0x1259, 0x108b: 0x1261, -+ 0x108c: 0x1269, 0x108d: 0x1271, 0x108e: 0x1199, 0x108f: 0x1279, 0x1090: 0x1281, 0x1091: 0x1289, -+ 0x1092: 0x43a5, 0x1093: 0x1291, 0x1094: 0x1121, 0x1095: 0x43c5, 0x1096: 0x43e5, 0x1097: 0x1299, -+ 0x1098: 0x0040, 0x1099: 0x4405, 0x109a: 0x12a1, 0x109b: 0x12a9, 0x109c: 0x12b1, 0x109d: 0x12b9, -+ 0x109e: 0x12c1, 0x109f: 0x12c9, 0x10a0: 0x12d1, 0x10a1: 0x12d9, 0x10a2: 0x12e1, 0x10a3: 0x12e9, -+ 0x10a4: 0x12f1, 0x10a5: 0x12f9, 0x10a6: 0x1301, 0x10a7: 0x1309, 0x10a8: 0x1311, 0x10a9: 0x1319, -+ 0x10aa: 0x1321, 0x10ab: 0x1329, 0x10ac: 0x1331, 0x10ad: 0x1339, 0x10ae: 0x1341, 0x10af: 0x1349, -+ 0x10b0: 0x1351, 0x10b1: 0x1359, 0x10b2: 0x1361, 0x10b3: 0x1369, 0x10b4: 0x1371, 0x10b5: 0x1379, -+ 0x10b6: 0x1381, 0x10b7: 0x1389, 0x10b8: 0x1391, 0x10b9: 0x1399, 0x10ba: 0x13a1, 0x10bb: 0x13a9, -+ 0x10bc: 0x13b1, 0x10bd: 0x13b9, 0x10be: 0x13c1, 0x10bf: 0x4425, -+ // Block 0x43, offset 0x10c0 -+ 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, -+ 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, -+ 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, -+ 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, -+ 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0xe00d, 0x10dd: 0x0008, -+ 0x10de: 0xe00d, 0x10df: 0x0008, 0x10e0: 0xe00d, 0x10e1: 0x0008, 0x10e2: 0xe00d, 0x10e3: 0x0008, -+ 0x10e4: 0xe00d, 0x10e5: 0x0008, 0x10e6: 0xe00d, 0x10e7: 0x0008, 0x10e8: 0xe00d, 0x10e9: 0x0008, -+ 0x10ea: 0xe00d, 0x10eb: 0x0008, 0x10ec: 0xe00d, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x3308, -+ 0x10f0: 0x3318, 0x10f1: 0x3318, 0x10f2: 0x3318, 0x10f3: 0x0018, 0x10f4: 0x3308, 0x10f5: 0x3308, -+ 0x10f6: 0x3308, 0x10f7: 0x3308, 0x10f8: 0x3308, 0x10f9: 0x3308, 0x10fa: 0x3308, 0x10fb: 0x3308, -+ 0x10fc: 0x3308, 0x10fd: 0x3308, 0x10fe: 0x0018, 0x10ff: 0x0008, -+ // Block 0x44, offset 0x1100 -+ 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, -+ 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, -+ 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, -+ 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, -+ 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0x02d1, 0x111d: 0x13c9, -+ 0x111e: 0x3308, 0x111f: 0x3308, 0x1120: 0x0008, 0x1121: 0x0008, 0x1122: 0x0008, 0x1123: 0x0008, -+ 0x1124: 0x0008, 0x1125: 0x0008, 0x1126: 0x0008, 0x1127: 0x0008, 0x1128: 0x0008, 0x1129: 0x0008, -+ 0x112a: 0x0008, 0x112b: 0x0008, 0x112c: 0x0008, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x0008, -+ 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0x0008, 0x1133: 0x0008, 0x1134: 0x0008, 0x1135: 0x0008, -+ 0x1136: 0x0008, 0x1137: 0x0008, 0x1138: 0x0008, 0x1139: 0x0008, 0x113a: 0x0008, 0x113b: 0x0008, -+ 0x113c: 0x0008, 0x113d: 0x0008, 0x113e: 0x0008, 0x113f: 0x0008, -+ // Block 0x45, offset 0x1140 -+ 0x1140: 0x0018, 0x1141: 0x0018, 0x1142: 0x0018, 0x1143: 0x0018, 0x1144: 0x0018, 0x1145: 0x0018, -+ 0x1146: 0x0018, 0x1147: 0x0018, 0x1148: 0x0018, 0x1149: 0x0018, 0x114a: 0x0018, 0x114b: 0x0018, -+ 0x114c: 0x0018, 0x114d: 0x0018, 0x114e: 0x0018, 0x114f: 0x0018, 0x1150: 0x0018, 0x1151: 0x0018, -+ 0x1152: 0x0018, 0x1153: 0x0018, 0x1154: 0x0018, 0x1155: 0x0018, 0x1156: 0x0018, 0x1157: 0x0008, -+ 0x1158: 0x0008, 0x1159: 0x0008, 0x115a: 0x0008, 0x115b: 0x0008, 0x115c: 0x0008, 0x115d: 0x0008, -+ 0x115e: 0x0008, 0x115f: 0x0008, 0x1160: 0x0018, 0x1161: 0x0018, 0x1162: 0xe00d, 0x1163: 0x0008, -+ 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, -+ 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, -+ 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0xe00d, 0x1173: 0x0008, 0x1174: 0xe00d, 0x1175: 0x0008, -+ 0x1176: 0xe00d, 0x1177: 0x0008, 0x1178: 0xe00d, 0x1179: 0x0008, 0x117a: 0xe00d, 0x117b: 0x0008, -+ 0x117c: 0xe00d, 0x117d: 0x0008, 0x117e: 0xe00d, 0x117f: 0x0008, -+ // Block 0x46, offset 0x1180 -+ 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, -+ 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0xe00d, 0x1189: 0x0008, 0x118a: 0xe00d, 0x118b: 0x0008, -+ 0x118c: 0xe00d, 0x118d: 0x0008, 0x118e: 0xe00d, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, -+ 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0xe00d, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, -+ 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, -+ 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, -+ 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, -+ 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, -+ 0x11b0: 0xe0fd, 0x11b1: 0x0008, 0x11b2: 0x0008, 0x11b3: 0x0008, 0x11b4: 0x0008, 0x11b5: 0x0008, -+ 0x11b6: 0x0008, 0x11b7: 0x0008, 0x11b8: 0x0008, 0x11b9: 0xe01d, 0x11ba: 0x0008, 0x11bb: 0xe03d, -+ 0x11bc: 0x0008, 0x11bd: 0x4445, 0x11be: 0xe00d, 0x11bf: 0x0008, -+ // Block 0x47, offset 0x11c0 -+ 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, -+ 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0x0008, 0x11c9: 0x0018, 0x11ca: 0x0018, 0x11cb: 0xe03d, -+ 0x11cc: 0x0008, 0x11cd: 0x0409, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, -+ 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, -+ 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, -+ 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, -+ 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, -+ 0x11ea: 0x13d1, 0x11eb: 0x0371, 0x11ec: 0x0401, 0x11ed: 0x13d9, 0x11ee: 0x0421, 0x11ef: 0x0008, -+ 0x11f0: 0x13e1, 0x11f1: 0x13e9, 0x11f2: 0x0429, 0x11f3: 0x4465, 0x11f4: 0xe00d, 0x11f5: 0x0008, -+ 0x11f6: 0xe00d, 0x11f7: 0x0008, 0x11f8: 0xe00d, 0x11f9: 0x0008, 0x11fa: 0xe00d, 0x11fb: 0x0008, -+ 0x11fc: 0xe00d, 0x11fd: 0x0008, 0x11fe: 0xe00d, 0x11ff: 0x0008, -+ // Block 0x48, offset 0x1200 -+ 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0x03f5, 0x1205: 0x0479, -+ 0x1206: 0x447d, 0x1207: 0xe07d, 0x1208: 0x0008, 0x1209: 0xe01d, 0x120a: 0x0008, 0x120b: 0x0040, -+ 0x120c: 0x0040, 0x120d: 0x0040, 0x120e: 0x0040, 0x120f: 0x0040, 0x1210: 0xe00d, 0x1211: 0x0008, -+ 0x1212: 0x0040, 0x1213: 0x0008, 0x1214: 0x0040, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, -+ 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, -+ 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, -+ 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, -+ 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, -+ 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x03d9, 0x1233: 0x03f1, 0x1234: 0x0751, 0x1235: 0xe01d, -+ 0x1236: 0x0008, 0x1237: 0x0008, 0x1238: 0x0741, 0x1239: 0x13f1, 0x123a: 0x0008, 0x123b: 0x0008, -+ 0x123c: 0x0008, 0x123d: 0x0008, 0x123e: 0x0008, 0x123f: 0x0008, -+ // Block 0x49, offset 0x1240 -+ 0x1240: 0x650d, 0x1241: 0x652d, 0x1242: 0x654d, 0x1243: 0x656d, 0x1244: 0x658d, 0x1245: 0x65ad, -+ 0x1246: 0x65cd, 0x1247: 0x65ed, 0x1248: 0x660d, 0x1249: 0x662d, 0x124a: 0x664d, 0x124b: 0x666d, -+ 0x124c: 0x668d, 0x124d: 0x66ad, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x66cd, 0x1251: 0x0008, -+ 0x1252: 0x66ed, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x670d, 0x1256: 0x672d, 0x1257: 0x674d, -+ 0x1258: 0x676d, 0x1259: 0x678d, 0x125a: 0x67ad, 0x125b: 0x67cd, 0x125c: 0x67ed, 0x125d: 0x680d, -+ 0x125e: 0x682d, 0x125f: 0x0008, 0x1260: 0x684d, 0x1261: 0x0008, 0x1262: 0x686d, 0x1263: 0x0008, -+ 0x1264: 0x0008, 0x1265: 0x688d, 0x1266: 0x68ad, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, -+ 0x126a: 0x68cd, 0x126b: 0x68ed, 0x126c: 0x690d, 0x126d: 0x692d, 0x126e: 0x694d, 0x126f: 0x696d, -+ 0x1270: 0x698d, 0x1271: 0x69ad, 0x1272: 0x69cd, 0x1273: 0x69ed, 0x1274: 0x6a0d, 0x1275: 0x6a2d, -+ 0x1276: 0x6a4d, 0x1277: 0x6a6d, 0x1278: 0x6a8d, 0x1279: 0x6aad, 0x127a: 0x6acd, 0x127b: 0x6aed, -+ 0x127c: 0x6b0d, 0x127d: 0x6b2d, 0x127e: 0x6b4d, 0x127f: 0x6b6d, -+ // Block 0x4a, offset 0x1280 -+ 0x1280: 0x7acd, 0x1281: 0x7aed, 0x1282: 0x7b0d, 0x1283: 0x7b2d, 0x1284: 0x7b4d, 0x1285: 0x7b6d, -+ 0x1286: 0x7b8d, 0x1287: 0x7bad, 0x1288: 0x7bcd, 0x1289: 0x7bed, 0x128a: 0x7c0d, 0x128b: 0x7c2d, -+ 0x128c: 0x7c4d, 0x128d: 0x7c6d, 0x128e: 0x7c8d, 0x128f: 0x1409, 0x1290: 0x1411, 0x1291: 0x1419, -+ 0x1292: 0x7cad, 0x1293: 0x7ccd, 0x1294: 0x7ced, 0x1295: 0x1421, 0x1296: 0x1429, 0x1297: 0x1431, -+ 0x1298: 0x7d0d, 0x1299: 0x7d2d, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, -+ 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, -+ 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, -+ 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, -+ 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, -+ 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, -+ 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, -+ // Block 0x4b, offset 0x12c0 -+ 0x12c0: 0x1439, 0x12c1: 0x1441, 0x12c2: 0x1449, 0x12c3: 0x7d4d, 0x12c4: 0x7d6d, 0x12c5: 0x1451, -+ 0x12c6: 0x1451, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, -+ 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, -+ 0x12d2: 0x0040, 0x12d3: 0x1459, 0x12d4: 0x1461, 0x12d5: 0x1469, 0x12d6: 0x1471, 0x12d7: 0x1479, -+ 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x1481, -+ 0x12de: 0x3308, 0x12df: 0x1489, 0x12e0: 0x1491, 0x12e1: 0x0779, 0x12e2: 0x0791, 0x12e3: 0x1499, -+ 0x12e4: 0x14a1, 0x12e5: 0x14a9, 0x12e6: 0x14b1, 0x12e7: 0x14b9, 0x12e8: 0x14c1, 0x12e9: 0x071a, -+ 0x12ea: 0x14c9, 0x12eb: 0x14d1, 0x12ec: 0x14d9, 0x12ed: 0x14e1, 0x12ee: 0x14e9, 0x12ef: 0x14f1, -+ 0x12f0: 0x14f9, 0x12f1: 0x1501, 0x12f2: 0x1509, 0x12f3: 0x1511, 0x12f4: 0x1519, 0x12f5: 0x1521, -+ 0x12f6: 0x1529, 0x12f7: 0x0040, 0x12f8: 0x1531, 0x12f9: 0x1539, 0x12fa: 0x1541, 0x12fb: 0x1549, -+ 0x12fc: 0x1551, 0x12fd: 0x0040, 0x12fe: 0x1559, 0x12ff: 0x0040, -+ // Block 0x4c, offset 0x1300 -+ 0x1300: 0x1561, 0x1301: 0x1569, 0x1302: 0x0040, 0x1303: 0x1571, 0x1304: 0x1579, 0x1305: 0x0040, -+ 0x1306: 0x1581, 0x1307: 0x1589, 0x1308: 0x1591, 0x1309: 0x1599, 0x130a: 0x15a1, 0x130b: 0x15a9, -+ 0x130c: 0x15b1, 0x130d: 0x15b9, 0x130e: 0x15c1, 0x130f: 0x15c9, 0x1310: 0x15d1, 0x1311: 0x15d1, -+ 0x1312: 0x15d9, 0x1313: 0x15d9, 0x1314: 0x15d9, 0x1315: 0x15d9, 0x1316: 0x15e1, 0x1317: 0x15e1, -+ 0x1318: 0x15e1, 0x1319: 0x15e1, 0x131a: 0x15e9, 0x131b: 0x15e9, 0x131c: 0x15e9, 0x131d: 0x15e9, -+ 0x131e: 0x15f1, 0x131f: 0x15f1, 0x1320: 0x15f1, 0x1321: 0x15f1, 0x1322: 0x15f9, 0x1323: 0x15f9, -+ 0x1324: 0x15f9, 0x1325: 0x15f9, 0x1326: 0x1601, 0x1327: 0x1601, 0x1328: 0x1601, 0x1329: 0x1601, -+ 0x132a: 0x1609, 0x132b: 0x1609, 0x132c: 0x1609, 0x132d: 0x1609, 0x132e: 0x1611, 0x132f: 0x1611, -+ 0x1330: 0x1611, 0x1331: 0x1611, 0x1332: 0x1619, 0x1333: 0x1619, 0x1334: 0x1619, 0x1335: 0x1619, -+ 0x1336: 0x1621, 0x1337: 0x1621, 0x1338: 0x1621, 0x1339: 0x1621, 0x133a: 0x1629, 0x133b: 0x1629, -+ 0x133c: 0x1629, 0x133d: 0x1629, 0x133e: 0x1631, 0x133f: 0x1631, -+ // Block 0x4d, offset 0x1340 -+ 0x1340: 0x1631, 0x1341: 0x1631, 0x1342: 0x1639, 0x1343: 0x1639, 0x1344: 0x1641, 0x1345: 0x1641, -+ 0x1346: 0x1649, 0x1347: 0x1649, 0x1348: 0x1651, 0x1349: 0x1651, 0x134a: 0x1659, 0x134b: 0x1659, -+ 0x134c: 0x1661, 0x134d: 0x1661, 0x134e: 0x1669, 0x134f: 0x1669, 0x1350: 0x1669, 0x1351: 0x1669, -+ 0x1352: 0x1671, 0x1353: 0x1671, 0x1354: 0x1671, 0x1355: 0x1671, 0x1356: 0x1679, 0x1357: 0x1679, -+ 0x1358: 0x1679, 0x1359: 0x1679, 0x135a: 0x1681, 0x135b: 0x1681, 0x135c: 0x1681, 0x135d: 0x1681, -+ 0x135e: 0x1689, 0x135f: 0x1689, 0x1360: 0x1691, 0x1361: 0x1691, 0x1362: 0x1691, 0x1363: 0x1691, -+ 0x1364: 0x1699, 0x1365: 0x1699, 0x1366: 0x16a1, 0x1367: 0x16a1, 0x1368: 0x16a1, 0x1369: 0x16a1, -+ 0x136a: 0x16a9, 0x136b: 0x16a9, 0x136c: 0x16a9, 0x136d: 0x16a9, 0x136e: 0x16b1, 0x136f: 0x16b1, -+ 0x1370: 0x16b9, 0x1371: 0x16b9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, -+ 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, -+ 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, -+ // Block 0x4e, offset 0x1380 -+ 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0818, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, -+ 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, -+ 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, -+ 0x1392: 0x0040, 0x1393: 0x16c1, 0x1394: 0x16c1, 0x1395: 0x16c1, 0x1396: 0x16c1, 0x1397: 0x16c9, -+ 0x1398: 0x16c9, 0x1399: 0x16d1, 0x139a: 0x16d1, 0x139b: 0x16d9, 0x139c: 0x16d9, 0x139d: 0x0149, -+ 0x139e: 0x16e1, 0x139f: 0x16e1, 0x13a0: 0x16e9, 0x13a1: 0x16e9, 0x13a2: 0x16f1, 0x13a3: 0x16f1, -+ 0x13a4: 0x16f9, 0x13a5: 0x16f9, 0x13a6: 0x16f9, 0x13a7: 0x16f9, 0x13a8: 0x1701, 0x13a9: 0x1701, -+ 0x13aa: 0x1709, 0x13ab: 0x1709, 0x13ac: 0x1711, 0x13ad: 0x1711, 0x13ae: 0x1719, 0x13af: 0x1719, -+ 0x13b0: 0x1721, 0x13b1: 0x1721, 0x13b2: 0x1729, 0x13b3: 0x1729, 0x13b4: 0x1731, 0x13b5: 0x1731, -+ 0x13b6: 0x1739, 0x13b7: 0x1739, 0x13b8: 0x1739, 0x13b9: 0x1741, 0x13ba: 0x1741, 0x13bb: 0x1741, -+ 0x13bc: 0x1749, 0x13bd: 0x1749, 0x13be: 0x1749, 0x13bf: 0x1749, -+ // Block 0x4f, offset 0x13c0 -+ 0x13c0: 0x1949, 0x13c1: 0x1951, 0x13c2: 0x1959, 0x13c3: 0x1961, 0x13c4: 0x1969, 0x13c5: 0x1971, -+ 0x13c6: 0x1979, 0x13c7: 0x1981, 0x13c8: 0x1989, 0x13c9: 0x1991, 0x13ca: 0x1999, 0x13cb: 0x19a1, -+ 0x13cc: 0x19a9, 0x13cd: 0x19b1, 0x13ce: 0x19b9, 0x13cf: 0x19c1, 0x13d0: 0x19c9, 0x13d1: 0x19d1, -+ 0x13d2: 0x19d9, 0x13d3: 0x19e1, 0x13d4: 0x19e9, 0x13d5: 0x19f1, 0x13d6: 0x19f9, 0x13d7: 0x1a01, -+ 0x13d8: 0x1a09, 0x13d9: 0x1a11, 0x13da: 0x1a19, 0x13db: 0x1a21, 0x13dc: 0x1a29, 0x13dd: 0x1a31, -+ 0x13de: 0x1a3a, 0x13df: 0x1a42, 0x13e0: 0x1a4a, 0x13e1: 0x1a52, 0x13e2: 0x1a5a, 0x13e3: 0x1a62, -+ 0x13e4: 0x1a69, 0x13e5: 0x1a71, 0x13e6: 0x1761, 0x13e7: 0x1a79, 0x13e8: 0x1741, 0x13e9: 0x1769, -+ 0x13ea: 0x1a81, 0x13eb: 0x1a89, 0x13ec: 0x1789, 0x13ed: 0x1a91, 0x13ee: 0x1791, 0x13ef: 0x1799, -+ 0x13f0: 0x1a99, 0x13f1: 0x1aa1, 0x13f2: 0x17b9, 0x13f3: 0x1aa9, 0x13f4: 0x17c1, 0x13f5: 0x17c9, -+ 0x13f6: 0x1ab1, 0x13f7: 0x1ab9, 0x13f8: 0x17d9, 0x13f9: 0x1ac1, 0x13fa: 0x17e1, 0x13fb: 0x17e9, -+ 0x13fc: 0x18d1, 0x13fd: 0x18d9, 0x13fe: 0x18f1, 0x13ff: 0x18f9, -+ // Block 0x50, offset 0x1400 -+ 0x1400: 0x1901, 0x1401: 0x1921, 0x1402: 0x1929, 0x1403: 0x1931, 0x1404: 0x1939, 0x1405: 0x1959, -+ 0x1406: 0x1961, 0x1407: 0x1969, 0x1408: 0x1ac9, 0x1409: 0x1989, 0x140a: 0x1ad1, 0x140b: 0x1ad9, -+ 0x140c: 0x19b9, 0x140d: 0x1ae1, 0x140e: 0x19c1, 0x140f: 0x19c9, 0x1410: 0x1a31, 0x1411: 0x1ae9, -+ 0x1412: 0x1af1, 0x1413: 0x1a09, 0x1414: 0x1af9, 0x1415: 0x1a11, 0x1416: 0x1a19, 0x1417: 0x1751, -+ 0x1418: 0x1759, 0x1419: 0x1b01, 0x141a: 0x1761, 0x141b: 0x1b09, 0x141c: 0x1771, 0x141d: 0x1779, -+ 0x141e: 0x1781, 0x141f: 0x1789, 0x1420: 0x1b11, 0x1421: 0x17a1, 0x1422: 0x17a9, 0x1423: 0x17b1, -+ 0x1424: 0x17b9, 0x1425: 0x1b19, 0x1426: 0x17d9, 0x1427: 0x17f1, 0x1428: 0x17f9, 0x1429: 0x1801, -+ 0x142a: 0x1809, 0x142b: 0x1811, 0x142c: 0x1821, 0x142d: 0x1829, 0x142e: 0x1831, 0x142f: 0x1839, -+ 0x1430: 0x1841, 0x1431: 0x1849, 0x1432: 0x1b21, 0x1433: 0x1851, 0x1434: 0x1859, 0x1435: 0x1861, -+ 0x1436: 0x1869, 0x1437: 0x1871, 0x1438: 0x1879, 0x1439: 0x1889, 0x143a: 0x1891, 0x143b: 0x1899, -+ 0x143c: 0x18a1, 0x143d: 0x18a9, 0x143e: 0x18b1, 0x143f: 0x18b9, -+ // Block 0x51, offset 0x1440 -+ 0x1440: 0x18c1, 0x1441: 0x18c9, 0x1442: 0x18e1, 0x1443: 0x18e9, 0x1444: 0x1909, 0x1445: 0x1911, -+ 0x1446: 0x1919, 0x1447: 0x1921, 0x1448: 0x1929, 0x1449: 0x1941, 0x144a: 0x1949, 0x144b: 0x1951, -+ 0x144c: 0x1959, 0x144d: 0x1b29, 0x144e: 0x1971, 0x144f: 0x1979, 0x1450: 0x1981, 0x1451: 0x1989, -+ 0x1452: 0x19a1, 0x1453: 0x19a9, 0x1454: 0x19b1, 0x1455: 0x19b9, 0x1456: 0x1b31, 0x1457: 0x19d1, -+ 0x1458: 0x19d9, 0x1459: 0x1b39, 0x145a: 0x19f1, 0x145b: 0x19f9, 0x145c: 0x1a01, 0x145d: 0x1a09, -+ 0x145e: 0x1b41, 0x145f: 0x1761, 0x1460: 0x1b09, 0x1461: 0x1789, 0x1462: 0x1b11, 0x1463: 0x17b9, -+ 0x1464: 0x1b19, 0x1465: 0x17d9, 0x1466: 0x1b49, 0x1467: 0x1841, 0x1468: 0x1b51, 0x1469: 0x1b59, -+ 0x146a: 0x1b61, 0x146b: 0x1921, 0x146c: 0x1929, 0x146d: 0x1959, 0x146e: 0x19b9, 0x146f: 0x1b31, -+ 0x1470: 0x1a09, 0x1471: 0x1b41, 0x1472: 0x1b69, 0x1473: 0x1b71, 0x1474: 0x1b79, 0x1475: 0x1b81, -+ 0x1476: 0x1b89, 0x1477: 0x1b91, 0x1478: 0x1b99, 0x1479: 0x1ba1, 0x147a: 0x1ba9, 0x147b: 0x1bb1, -+ 0x147c: 0x1bb9, 0x147d: 0x1bc1, 0x147e: 0x1bc9, 0x147f: 0x1bd1, -+ // Block 0x52, offset 0x1480 -+ 0x1480: 0x1bd9, 0x1481: 0x1be1, 0x1482: 0x1be9, 0x1483: 0x1bf1, 0x1484: 0x1bf9, 0x1485: 0x1c01, -+ 0x1486: 0x1c09, 0x1487: 0x1c11, 0x1488: 0x1c19, 0x1489: 0x1c21, 0x148a: 0x1c29, 0x148b: 0x1c31, -+ 0x148c: 0x1b59, 0x148d: 0x1c39, 0x148e: 0x1c41, 0x148f: 0x1c49, 0x1490: 0x1c51, 0x1491: 0x1b81, -+ 0x1492: 0x1b89, 0x1493: 0x1b91, 0x1494: 0x1b99, 0x1495: 0x1ba1, 0x1496: 0x1ba9, 0x1497: 0x1bb1, -+ 0x1498: 0x1bb9, 0x1499: 0x1bc1, 0x149a: 0x1bc9, 0x149b: 0x1bd1, 0x149c: 0x1bd9, 0x149d: 0x1be1, -+ 0x149e: 0x1be9, 0x149f: 0x1bf1, 0x14a0: 0x1bf9, 0x14a1: 0x1c01, 0x14a2: 0x1c09, 0x14a3: 0x1c11, -+ 0x14a4: 0x1c19, 0x14a5: 0x1c21, 0x14a6: 0x1c29, 0x14a7: 0x1c31, 0x14a8: 0x1b59, 0x14a9: 0x1c39, -+ 0x14aa: 0x1c41, 0x14ab: 0x1c49, 0x14ac: 0x1c51, 0x14ad: 0x1c21, 0x14ae: 0x1c29, 0x14af: 0x1c31, -+ 0x14b0: 0x1b59, 0x14b1: 0x1b51, 0x14b2: 0x1b61, 0x14b3: 0x1881, 0x14b4: 0x1829, 0x14b5: 0x1831, -+ 0x14b6: 0x1839, 0x14b7: 0x1c21, 0x14b8: 0x1c29, 0x14b9: 0x1c31, 0x14ba: 0x1881, 0x14bb: 0x1889, -+ 0x14bc: 0x1c59, 0x14bd: 0x1c59, 0x14be: 0x0018, 0x14bf: 0x0018, -+ // Block 0x53, offset 0x14c0 -+ 0x14c0: 0x0018, 0x14c1: 0x0018, 0x14c2: 0x0018, 0x14c3: 0x0018, 0x14c4: 0x0018, 0x14c5: 0x0018, -+ 0x14c6: 0x0018, 0x14c7: 0x0018, 0x14c8: 0x0018, 0x14c9: 0x0018, 0x14ca: 0x0018, 0x14cb: 0x0018, -+ 0x14cc: 0x0018, 0x14cd: 0x0018, 0x14ce: 0x0018, 0x14cf: 0x0018, 0x14d0: 0x1c61, 0x14d1: 0x1c69, -+ 0x14d2: 0x1c69, 0x14d3: 0x1c71, 0x14d4: 0x1c79, 0x14d5: 0x1c81, 0x14d6: 0x1c89, 0x14d7: 0x1c91, -+ 0x14d8: 0x1c99, 0x14d9: 0x1c99, 0x14da: 0x1ca1, 0x14db: 0x1ca9, 0x14dc: 0x1cb1, 0x14dd: 0x1cb9, -+ 0x14de: 0x1cc1, 0x14df: 0x1cc9, 0x14e0: 0x1cc9, 0x14e1: 0x1cd1, 0x14e2: 0x1cd9, 0x14e3: 0x1cd9, -+ 0x14e4: 0x1ce1, 0x14e5: 0x1ce1, 0x14e6: 0x1ce9, 0x14e7: 0x1cf1, 0x14e8: 0x1cf1, 0x14e9: 0x1cf9, -+ 0x14ea: 0x1d01, 0x14eb: 0x1d01, 0x14ec: 0x1d09, 0x14ed: 0x1d09, 0x14ee: 0x1d11, 0x14ef: 0x1d19, -+ 0x14f0: 0x1d19, 0x14f1: 0x1d21, 0x14f2: 0x1d21, 0x14f3: 0x1d29, 0x14f4: 0x1d31, 0x14f5: 0x1d39, -+ 0x14f6: 0x1d41, 0x14f7: 0x1d41, 0x14f8: 0x1d49, 0x14f9: 0x1d51, 0x14fa: 0x1d59, 0x14fb: 0x1d61, -+ 0x14fc: 0x1d69, 0x14fd: 0x1d69, 0x14fe: 0x1d71, 0x14ff: 0x1d79, -+ // Block 0x54, offset 0x1500 -+ 0x1500: 0x1f29, 0x1501: 0x1f31, 0x1502: 0x1f39, 0x1503: 0x1f11, 0x1504: 0x1d39, 0x1505: 0x1ce9, -+ 0x1506: 0x1f41, 0x1507: 0x1f49, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, -+ 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0018, 0x1510: 0x0040, 0x1511: 0x0040, -+ 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, -+ 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, -+ 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, -+ 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, -+ 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, -+ 0x1530: 0x1f51, 0x1531: 0x1f59, 0x1532: 0x1f61, 0x1533: 0x1f69, 0x1534: 0x1f71, 0x1535: 0x1f79, -+ 0x1536: 0x1f81, 0x1537: 0x1f89, 0x1538: 0x1f91, 0x1539: 0x1f99, 0x153a: 0x1fa2, 0x153b: 0x1faa, -+ 0x153c: 0x1fb1, 0x153d: 0x0018, 0x153e: 0x0018, 0x153f: 0x0018, -+ // Block 0x55, offset 0x1540 -+ 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, -+ 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, -+ 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0x1fba, 0x1551: 0x7d8d, -+ 0x1552: 0x0040, 0x1553: 0x1fc2, 0x1554: 0x0122, 0x1555: 0x1fca, 0x1556: 0x1fd2, 0x1557: 0x7dad, -+ 0x1558: 0x7dcd, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, -+ 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, -+ 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, -+ 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, -+ 0x1570: 0x0040, 0x1571: 0x7ded, 0x1572: 0x7e0d, 0x1573: 0x1fda, 0x1574: 0x1fda, 0x1575: 0x072a, -+ 0x1576: 0x0732, 0x1577: 0x1fe2, 0x1578: 0x1fea, 0x1579: 0x7e2d, 0x157a: 0x7e4d, 0x157b: 0x7e6d, -+ 0x157c: 0x7e2d, 0x157d: 0x7e8d, 0x157e: 0x7ead, 0x157f: 0x7e8d, -+ // Block 0x56, offset 0x1580 -+ 0x1580: 0x7ecd, 0x1581: 0x7eed, 0x1582: 0x7f0d, 0x1583: 0x7eed, 0x1584: 0x7f2d, 0x1585: 0x0018, -+ 0x1586: 0x0018, 0x1587: 0x1ff2, 0x1588: 0x1ffa, 0x1589: 0x7f4e, 0x158a: 0x7f6e, 0x158b: 0x7f8e, -+ 0x158c: 0x7fae, 0x158d: 0x1fda, 0x158e: 0x1fda, 0x158f: 0x1fda, 0x1590: 0x1fba, 0x1591: 0x7fcd, -+ 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x0122, 0x1595: 0x1fc2, 0x1596: 0x1fd2, 0x1597: 0x1fca, -+ 0x1598: 0x7fed, 0x1599: 0x072a, 0x159a: 0x0732, 0x159b: 0x1fe2, 0x159c: 0x1fea, 0x159d: 0x7ecd, -+ 0x159e: 0x7f2d, 0x159f: 0x2002, 0x15a0: 0x200a, 0x15a1: 0x2012, 0x15a2: 0x071a, 0x15a3: 0x2019, -+ 0x15a4: 0x2022, 0x15a5: 0x202a, 0x15a6: 0x0722, 0x15a7: 0x0040, 0x15a8: 0x2032, 0x15a9: 0x203a, -+ 0x15aa: 0x2042, 0x15ab: 0x204a, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, -+ 0x15b0: 0x800e, 0x15b1: 0x2051, 0x15b2: 0x802e, 0x15b3: 0x0808, 0x15b4: 0x804e, 0x15b5: 0x0040, -+ 0x15b6: 0x806e, 0x15b7: 0x2059, 0x15b8: 0x808e, 0x15b9: 0x2061, 0x15ba: 0x80ae, 0x15bb: 0x2069, -+ 0x15bc: 0x80ce, 0x15bd: 0x2071, 0x15be: 0x80ee, 0x15bf: 0x2079, -+ // Block 0x57, offset 0x15c0 -+ 0x15c0: 0x2081, 0x15c1: 0x2089, 0x15c2: 0x2089, 0x15c3: 0x2091, 0x15c4: 0x2091, 0x15c5: 0x2099, -+ 0x15c6: 0x2099, 0x15c7: 0x20a1, 0x15c8: 0x20a1, 0x15c9: 0x20a9, 0x15ca: 0x20a9, 0x15cb: 0x20a9, -+ 0x15cc: 0x20a9, 0x15cd: 0x20b1, 0x15ce: 0x20b1, 0x15cf: 0x20b9, 0x15d0: 0x20b9, 0x15d1: 0x20b9, -+ 0x15d2: 0x20b9, 0x15d3: 0x20c1, 0x15d4: 0x20c1, 0x15d5: 0x20c9, 0x15d6: 0x20c9, 0x15d7: 0x20c9, -+ 0x15d8: 0x20c9, 0x15d9: 0x20d1, 0x15da: 0x20d1, 0x15db: 0x20d1, 0x15dc: 0x20d1, 0x15dd: 0x20d9, -+ 0x15de: 0x20d9, 0x15df: 0x20d9, 0x15e0: 0x20d9, 0x15e1: 0x20e1, 0x15e2: 0x20e1, 0x15e3: 0x20e1, -+ 0x15e4: 0x20e1, 0x15e5: 0x20e9, 0x15e6: 0x20e9, 0x15e7: 0x20e9, 0x15e8: 0x20e9, 0x15e9: 0x20f1, -+ 0x15ea: 0x20f1, 0x15eb: 0x20f9, 0x15ec: 0x20f9, 0x15ed: 0x2101, 0x15ee: 0x2101, 0x15ef: 0x2109, -+ 0x15f0: 0x2109, 0x15f1: 0x2111, 0x15f2: 0x2111, 0x15f3: 0x2111, 0x15f4: 0x2111, 0x15f5: 0x2119, -+ 0x15f6: 0x2119, 0x15f7: 0x2119, 0x15f8: 0x2119, 0x15f9: 0x2121, 0x15fa: 0x2121, 0x15fb: 0x2121, -+ 0x15fc: 0x2121, 0x15fd: 0x2129, 0x15fe: 0x2129, 0x15ff: 0x2129, -+ // Block 0x58, offset 0x1600 -+ 0x1600: 0x2129, 0x1601: 0x2131, 0x1602: 0x2131, 0x1603: 0x2131, 0x1604: 0x2131, 0x1605: 0x2139, -+ 0x1606: 0x2139, 0x1607: 0x2139, 0x1608: 0x2139, 0x1609: 0x2141, 0x160a: 0x2141, 0x160b: 0x2141, -+ 0x160c: 0x2141, 0x160d: 0x2149, 0x160e: 0x2149, 0x160f: 0x2149, 0x1610: 0x2149, 0x1611: 0x2151, -+ 0x1612: 0x2151, 0x1613: 0x2151, 0x1614: 0x2151, 0x1615: 0x2159, 0x1616: 0x2159, 0x1617: 0x2159, -+ 0x1618: 0x2159, 0x1619: 0x2161, 0x161a: 0x2161, 0x161b: 0x2161, 0x161c: 0x2161, 0x161d: 0x2169, -+ 0x161e: 0x2169, 0x161f: 0x2169, 0x1620: 0x2169, 0x1621: 0x2171, 0x1622: 0x2171, 0x1623: 0x2171, -+ 0x1624: 0x2171, 0x1625: 0x2179, 0x1626: 0x2179, 0x1627: 0x2179, 0x1628: 0x2179, 0x1629: 0x2181, -+ 0x162a: 0x2181, 0x162b: 0x2181, 0x162c: 0x2181, 0x162d: 0x2189, 0x162e: 0x2189, 0x162f: 0x1701, -+ 0x1630: 0x1701, 0x1631: 0x2191, 0x1632: 0x2191, 0x1633: 0x2191, 0x1634: 0x2191, 0x1635: 0x2199, -+ 0x1636: 0x2199, 0x1637: 0x21a1, 0x1638: 0x21a1, 0x1639: 0x21a9, 0x163a: 0x21a9, 0x163b: 0x21b1, -+ 0x163c: 0x21b1, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, -+ // Block 0x59, offset 0x1640 -+ 0x1640: 0x0040, 0x1641: 0x1fca, 0x1642: 0x21ba, 0x1643: 0x2002, 0x1644: 0x203a, 0x1645: 0x2042, -+ 0x1646: 0x200a, 0x1647: 0x21c2, 0x1648: 0x072a, 0x1649: 0x0732, 0x164a: 0x2012, 0x164b: 0x071a, -+ 0x164c: 0x1fba, 0x164d: 0x2019, 0x164e: 0x0961, 0x164f: 0x21ca, 0x1650: 0x06e1, 0x1651: 0x0049, -+ 0x1652: 0x0029, 0x1653: 0x0031, 0x1654: 0x06e9, 0x1655: 0x06f1, 0x1656: 0x06f9, 0x1657: 0x0701, -+ 0x1658: 0x0709, 0x1659: 0x0711, 0x165a: 0x1fc2, 0x165b: 0x0122, 0x165c: 0x2022, 0x165d: 0x0722, -+ 0x165e: 0x202a, 0x165f: 0x1fd2, 0x1660: 0x204a, 0x1661: 0x0019, 0x1662: 0x02e9, 0x1663: 0x03d9, -+ 0x1664: 0x02f1, 0x1665: 0x02f9, 0x1666: 0x03f1, 0x1667: 0x0309, 0x1668: 0x00a9, 0x1669: 0x0311, -+ 0x166a: 0x00b1, 0x166b: 0x0319, 0x166c: 0x0101, 0x166d: 0x0321, 0x166e: 0x0329, 0x166f: 0x0051, -+ 0x1670: 0x0339, 0x1671: 0x0751, 0x1672: 0x00b9, 0x1673: 0x0089, 0x1674: 0x0341, 0x1675: 0x0349, -+ 0x1676: 0x0391, 0x1677: 0x00c1, 0x1678: 0x0109, 0x1679: 0x00c9, 0x167a: 0x04b1, 0x167b: 0x1ff2, -+ 0x167c: 0x2032, 0x167d: 0x1ffa, 0x167e: 0x21d2, 0x167f: 0x1fda, -+ // Block 0x5a, offset 0x1680 -+ 0x1680: 0x0672, 0x1681: 0x0019, 0x1682: 0x02e9, 0x1683: 0x03d9, 0x1684: 0x02f1, 0x1685: 0x02f9, -+ 0x1686: 0x03f1, 0x1687: 0x0309, 0x1688: 0x00a9, 0x1689: 0x0311, 0x168a: 0x00b1, 0x168b: 0x0319, -+ 0x168c: 0x0101, 0x168d: 0x0321, 0x168e: 0x0329, 0x168f: 0x0051, 0x1690: 0x0339, 0x1691: 0x0751, -+ 0x1692: 0x00b9, 0x1693: 0x0089, 0x1694: 0x0341, 0x1695: 0x0349, 0x1696: 0x0391, 0x1697: 0x00c1, -+ 0x1698: 0x0109, 0x1699: 0x00c9, 0x169a: 0x04b1, 0x169b: 0x1fe2, 0x169c: 0x21da, 0x169d: 0x1fea, -+ 0x169e: 0x21e2, 0x169f: 0x810d, 0x16a0: 0x812d, 0x16a1: 0x0961, 0x16a2: 0x814d, 0x16a3: 0x814d, -+ 0x16a4: 0x816d, 0x16a5: 0x818d, 0x16a6: 0x81ad, 0x16a7: 0x81cd, 0x16a8: 0x81ed, 0x16a9: 0x820d, -+ 0x16aa: 0x822d, 0x16ab: 0x824d, 0x16ac: 0x826d, 0x16ad: 0x828d, 0x16ae: 0x82ad, 0x16af: 0x82cd, -+ 0x16b0: 0x82ed, 0x16b1: 0x830d, 0x16b2: 0x832d, 0x16b3: 0x834d, 0x16b4: 0x836d, 0x16b5: 0x838d, -+ 0x16b6: 0x83ad, 0x16b7: 0x83cd, 0x16b8: 0x83ed, 0x16b9: 0x840d, 0x16ba: 0x842d, 0x16bb: 0x844d, -+ 0x16bc: 0x81ed, 0x16bd: 0x846d, 0x16be: 0x848d, 0x16bf: 0x824d, -+ // Block 0x5b, offset 0x16c0 -+ 0x16c0: 0x84ad, 0x16c1: 0x84cd, 0x16c2: 0x84ed, 0x16c3: 0x850d, 0x16c4: 0x852d, 0x16c5: 0x854d, -+ 0x16c6: 0x856d, 0x16c7: 0x858d, 0x16c8: 0x850d, 0x16c9: 0x85ad, 0x16ca: 0x850d, 0x16cb: 0x85cd, -+ 0x16cc: 0x85cd, 0x16cd: 0x85ed, 0x16ce: 0x85ed, 0x16cf: 0x860d, 0x16d0: 0x854d, 0x16d1: 0x862d, -+ 0x16d2: 0x864d, 0x16d3: 0x862d, 0x16d4: 0x866d, 0x16d5: 0x864d, 0x16d6: 0x868d, 0x16d7: 0x868d, -+ 0x16d8: 0x86ad, 0x16d9: 0x86ad, 0x16da: 0x86cd, 0x16db: 0x86cd, 0x16dc: 0x864d, 0x16dd: 0x814d, -+ 0x16de: 0x86ed, 0x16df: 0x870d, 0x16e0: 0x0040, 0x16e1: 0x872d, 0x16e2: 0x874d, 0x16e3: 0x876d, -+ 0x16e4: 0x878d, 0x16e5: 0x876d, 0x16e6: 0x87ad, 0x16e7: 0x87cd, 0x16e8: 0x87ed, 0x16e9: 0x87ed, -+ 0x16ea: 0x880d, 0x16eb: 0x880d, 0x16ec: 0x882d, 0x16ed: 0x882d, 0x16ee: 0x880d, 0x16ef: 0x880d, -+ 0x16f0: 0x884d, 0x16f1: 0x886d, 0x16f2: 0x888d, 0x16f3: 0x88ad, 0x16f4: 0x88cd, 0x16f5: 0x88ed, -+ 0x16f6: 0x88ed, 0x16f7: 0x88ed, 0x16f8: 0x890d, 0x16f9: 0x890d, 0x16fa: 0x890d, 0x16fb: 0x890d, -+ 0x16fc: 0x87ed, 0x16fd: 0x87ed, 0x16fe: 0x87ed, 0x16ff: 0x0040, -+ // Block 0x5c, offset 0x1700 -+ 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x874d, 0x1703: 0x872d, 0x1704: 0x892d, 0x1705: 0x872d, -+ 0x1706: 0x874d, 0x1707: 0x872d, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x894d, 0x170b: 0x874d, -+ 0x170c: 0x896d, 0x170d: 0x892d, 0x170e: 0x896d, 0x170f: 0x874d, 0x1710: 0x0040, 0x1711: 0x0040, -+ 0x1712: 0x898d, 0x1713: 0x89ad, 0x1714: 0x88ad, 0x1715: 0x896d, 0x1716: 0x892d, 0x1717: 0x896d, -+ 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x89cd, 0x171b: 0x89ed, 0x171c: 0x89cd, 0x171d: 0x0040, -+ 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x21e9, 0x1721: 0x21f1, 0x1722: 0x21f9, 0x1723: 0x8a0e, -+ 0x1724: 0x2201, 0x1725: 0x2209, 0x1726: 0x8a2d, 0x1727: 0x0040, 0x1728: 0x8a4d, 0x1729: 0x8a6d, -+ 0x172a: 0x8a8d, 0x172b: 0x8a6d, 0x172c: 0x8aad, 0x172d: 0x8acd, 0x172e: 0x8aed, 0x172f: 0x0040, -+ 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, -+ 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, -+ 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, -+ // Block 0x5d, offset 0x1740 -+ 0x1740: 0x0008, 0x1741: 0x0008, 0x1742: 0x0008, 0x1743: 0x0008, 0x1744: 0x0008, 0x1745: 0x0008, -+ 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, -+ 0x174c: 0x0008, 0x174d: 0x0008, 0x174e: 0x0008, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0008, -+ 0x1752: 0x0008, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, -+ 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, -+ 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, -+ 0x1764: 0x0040, 0x1765: 0x0040, 0x1766: 0x0040, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, -+ 0x176a: 0x0040, 0x176b: 0x0040, 0x176c: 0x0040, 0x176d: 0x0040, 0x176e: 0x0040, 0x176f: 0x0018, -+ 0x1770: 0x8b3d, 0x1771: 0x8b55, 0x1772: 0x8b6d, 0x1773: 0x8b55, 0x1774: 0x8b85, 0x1775: 0x8b55, -+ 0x1776: 0x8b6d, 0x1777: 0x8b55, 0x1778: 0x8b3d, 0x1779: 0x8b9d, 0x177a: 0x8bb5, 0x177b: 0x0040, -+ 0x177c: 0x8bcd, 0x177d: 0x8b9d, 0x177e: 0x8bb5, 0x177f: 0x8b9d, -+ // Block 0x5e, offset 0x1780 -+ 0x1780: 0xe13d, 0x1781: 0xe14d, 0x1782: 0xe15d, 0x1783: 0xe14d, 0x1784: 0xe17d, 0x1785: 0xe14d, -+ 0x1786: 0xe15d, 0x1787: 0xe14d, 0x1788: 0xe13d, 0x1789: 0xe1cd, 0x178a: 0xe1dd, 0x178b: 0x0040, -+ 0x178c: 0xe1fd, 0x178d: 0xe1cd, 0x178e: 0xe1dd, 0x178f: 0xe1cd, 0x1790: 0xe13d, 0x1791: 0xe14d, -+ 0x1792: 0xe15d, 0x1793: 0x0040, 0x1794: 0xe17d, 0x1795: 0xe14d, 0x1796: 0x0040, 0x1797: 0x0008, -+ 0x1798: 0x0008, 0x1799: 0x0008, 0x179a: 0x0008, 0x179b: 0x0008, 0x179c: 0x0008, 0x179d: 0x0008, -+ 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x0040, 0x17a3: 0x0008, -+ 0x17a4: 0x0008, 0x17a5: 0x0008, 0x17a6: 0x0008, 0x17a7: 0x0008, 0x17a8: 0x0008, 0x17a9: 0x0008, -+ 0x17aa: 0x0008, 0x17ab: 0x0008, 0x17ac: 0x0008, 0x17ad: 0x0008, 0x17ae: 0x0008, 0x17af: 0x0008, -+ 0x17b0: 0x0008, 0x17b1: 0x0008, 0x17b2: 0x0040, 0x17b3: 0x0008, 0x17b4: 0x0008, 0x17b5: 0x0008, -+ 0x17b6: 0x0008, 0x17b7: 0x0008, 0x17b8: 0x0008, 0x17b9: 0x0008, 0x17ba: 0x0040, 0x17bb: 0x0008, -+ 0x17bc: 0x0008, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, -+ // Block 0x5f, offset 0x17c0 -+ 0x17c0: 0x0008, 0x17c1: 0x2211, 0x17c2: 0x2219, 0x17c3: 0x02e1, 0x17c4: 0x2221, 0x17c5: 0x2229, -+ 0x17c6: 0x0040, 0x17c7: 0x2231, 0x17c8: 0x2239, 0x17c9: 0x2241, 0x17ca: 0x2249, 0x17cb: 0x2251, -+ 0x17cc: 0x2259, 0x17cd: 0x2261, 0x17ce: 0x2269, 0x17cf: 0x2271, 0x17d0: 0x2279, 0x17d1: 0x2281, -+ 0x17d2: 0x2289, 0x17d3: 0x2291, 0x17d4: 0x2299, 0x17d5: 0x0741, 0x17d6: 0x22a1, 0x17d7: 0x22a9, -+ 0x17d8: 0x22b1, 0x17d9: 0x22b9, 0x17da: 0x22c1, 0x17db: 0x13d9, 0x17dc: 0x8be5, 0x17dd: 0x22c9, -+ 0x17de: 0x22d1, 0x17df: 0x8c05, 0x17e0: 0x22d9, 0x17e1: 0x8c25, 0x17e2: 0x22e1, 0x17e3: 0x22e9, -+ 0x17e4: 0x22f1, 0x17e5: 0x0751, 0x17e6: 0x22f9, 0x17e7: 0x8c45, 0x17e8: 0x0949, 0x17e9: 0x2301, -+ 0x17ea: 0x2309, 0x17eb: 0x2311, 0x17ec: 0x2319, 0x17ed: 0x2321, 0x17ee: 0x2329, 0x17ef: 0x2331, -+ 0x17f0: 0x2339, 0x17f1: 0x0040, 0x17f2: 0x2341, 0x17f3: 0x2349, 0x17f4: 0x2351, 0x17f5: 0x2359, -+ 0x17f6: 0x2361, 0x17f7: 0x2369, 0x17f8: 0x2371, 0x17f9: 0x8c65, 0x17fa: 0x8c85, 0x17fb: 0x0040, -+ 0x17fc: 0x0040, 0x17fd: 0x0040, 0x17fe: 0x0040, 0x17ff: 0x0040, -+ // Block 0x60, offset 0x1800 -+ 0x1800: 0x0a08, 0x1801: 0x0a08, 0x1802: 0x0a08, 0x1803: 0x0a08, 0x1804: 0x0a08, 0x1805: 0x0c08, -+ 0x1806: 0x0808, 0x1807: 0x0c08, 0x1808: 0x0818, 0x1809: 0x0c08, 0x180a: 0x0c08, 0x180b: 0x0808, -+ 0x180c: 0x0808, 0x180d: 0x0908, 0x180e: 0x0c08, 0x180f: 0x0c08, 0x1810: 0x0c08, 0x1811: 0x0c08, -+ 0x1812: 0x0c08, 0x1813: 0x0a08, 0x1814: 0x0a08, 0x1815: 0x0a08, 0x1816: 0x0a08, 0x1817: 0x0908, -+ 0x1818: 0x0a08, 0x1819: 0x0a08, 0x181a: 0x0a08, 0x181b: 0x0a08, 0x181c: 0x0a08, 0x181d: 0x0c08, -+ 0x181e: 0x0a08, 0x181f: 0x0a08, 0x1820: 0x0a08, 0x1821: 0x0c08, 0x1822: 0x0808, 0x1823: 0x0808, -+ 0x1824: 0x0c08, 0x1825: 0x3308, 0x1826: 0x3308, 0x1827: 0x0040, 0x1828: 0x0040, 0x1829: 0x0040, -+ 0x182a: 0x0040, 0x182b: 0x0a18, 0x182c: 0x0a18, 0x182d: 0x0a18, 0x182e: 0x0a18, 0x182f: 0x0c18, -+ 0x1830: 0x0818, 0x1831: 0x0818, 0x1832: 0x0818, 0x1833: 0x0818, 0x1834: 0x0818, 0x1835: 0x0818, -+ 0x1836: 0x0818, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, -+ 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, -+ // Block 0x61, offset 0x1840 -+ 0x1840: 0x0a08, 0x1841: 0x0c08, 0x1842: 0x0a08, 0x1843: 0x0c08, 0x1844: 0x0c08, 0x1845: 0x0c08, -+ 0x1846: 0x0a08, 0x1847: 0x0a08, 0x1848: 0x0a08, 0x1849: 0x0c08, 0x184a: 0x0a08, 0x184b: 0x0a08, -+ 0x184c: 0x0c08, 0x184d: 0x0a08, 0x184e: 0x0c08, 0x184f: 0x0c08, 0x1850: 0x0a08, 0x1851: 0x0c08, -+ 0x1852: 0x0040, 0x1853: 0x0040, 0x1854: 0x0040, 0x1855: 0x0040, 0x1856: 0x0040, 0x1857: 0x0040, -+ 0x1858: 0x0040, 0x1859: 0x0818, 0x185a: 0x0818, 0x185b: 0x0818, 0x185c: 0x0818, 0x185d: 0x0040, -+ 0x185e: 0x0040, 0x185f: 0x0040, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0040, 0x1863: 0x0040, -+ 0x1864: 0x0040, 0x1865: 0x0040, 0x1866: 0x0040, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0c18, -+ 0x186a: 0x0c18, 0x186b: 0x0c18, 0x186c: 0x0c18, 0x186d: 0x0a18, 0x186e: 0x0a18, 0x186f: 0x0818, -+ 0x1870: 0x0040, 0x1871: 0x0040, 0x1872: 0x0040, 0x1873: 0x0040, 0x1874: 0x0040, 0x1875: 0x0040, -+ 0x1876: 0x0040, 0x1877: 0x0040, 0x1878: 0x0040, 0x1879: 0x0040, 0x187a: 0x0040, 0x187b: 0x0040, -+ 0x187c: 0x0040, 0x187d: 0x0040, 0x187e: 0x0040, 0x187f: 0x0040, -+ // Block 0x62, offset 0x1880 -+ 0x1880: 0x3308, 0x1881: 0x3308, 0x1882: 0x3008, 0x1883: 0x3008, 0x1884: 0x0040, 0x1885: 0x0008, -+ 0x1886: 0x0008, 0x1887: 0x0008, 0x1888: 0x0008, 0x1889: 0x0008, 0x188a: 0x0008, 0x188b: 0x0008, -+ 0x188c: 0x0008, 0x188d: 0x0040, 0x188e: 0x0040, 0x188f: 0x0008, 0x1890: 0x0008, 0x1891: 0x0040, -+ 0x1892: 0x0040, 0x1893: 0x0008, 0x1894: 0x0008, 0x1895: 0x0008, 0x1896: 0x0008, 0x1897: 0x0008, -+ 0x1898: 0x0008, 0x1899: 0x0008, 0x189a: 0x0008, 0x189b: 0x0008, 0x189c: 0x0008, 0x189d: 0x0008, -+ 0x189e: 0x0008, 0x189f: 0x0008, 0x18a0: 0x0008, 0x18a1: 0x0008, 0x18a2: 0x0008, 0x18a3: 0x0008, -+ 0x18a4: 0x0008, 0x18a5: 0x0008, 0x18a6: 0x0008, 0x18a7: 0x0008, 0x18a8: 0x0008, 0x18a9: 0x0040, -+ 0x18aa: 0x0008, 0x18ab: 0x0008, 0x18ac: 0x0008, 0x18ad: 0x0008, 0x18ae: 0x0008, 0x18af: 0x0008, -+ 0x18b0: 0x0008, 0x18b1: 0x0040, 0x18b2: 0x0008, 0x18b3: 0x0008, 0x18b4: 0x0040, 0x18b5: 0x0008, -+ 0x18b6: 0x0008, 0x18b7: 0x0008, 0x18b8: 0x0008, 0x18b9: 0x0008, 0x18ba: 0x0040, 0x18bb: 0x3308, -+ 0x18bc: 0x3308, 0x18bd: 0x0008, 0x18be: 0x3008, 0x18bf: 0x3008, -+ // Block 0x63, offset 0x18c0 -+ 0x18c0: 0x3308, 0x18c1: 0x3008, 0x18c2: 0x3008, 0x18c3: 0x3008, 0x18c4: 0x3008, 0x18c5: 0x0040, -+ 0x18c6: 0x0040, 0x18c7: 0x3008, 0x18c8: 0x3008, 0x18c9: 0x0040, 0x18ca: 0x0040, 0x18cb: 0x3008, -+ 0x18cc: 0x3008, 0x18cd: 0x3808, 0x18ce: 0x0040, 0x18cf: 0x0040, 0x18d0: 0x0008, 0x18d1: 0x0040, -+ 0x18d2: 0x0040, 0x18d3: 0x0040, 0x18d4: 0x0040, 0x18d5: 0x0040, 0x18d6: 0x0040, 0x18d7: 0x3008, -+ 0x18d8: 0x0040, 0x18d9: 0x0040, 0x18da: 0x0040, 0x18db: 0x0040, 0x18dc: 0x0040, 0x18dd: 0x0008, -+ 0x18de: 0x0008, 0x18df: 0x0008, 0x18e0: 0x0008, 0x18e1: 0x0008, 0x18e2: 0x3008, 0x18e3: 0x3008, -+ 0x18e4: 0x0040, 0x18e5: 0x0040, 0x18e6: 0x3308, 0x18e7: 0x3308, 0x18e8: 0x3308, 0x18e9: 0x3308, -+ 0x18ea: 0x3308, 0x18eb: 0x3308, 0x18ec: 0x3308, 0x18ed: 0x0040, 0x18ee: 0x0040, 0x18ef: 0x0040, -+ 0x18f0: 0x3308, 0x18f1: 0x3308, 0x18f2: 0x3308, 0x18f3: 0x3308, 0x18f4: 0x3308, 0x18f5: 0x0040, -+ 0x18f6: 0x0040, 0x18f7: 0x0040, 0x18f8: 0x0040, 0x18f9: 0x0040, 0x18fa: 0x0040, 0x18fb: 0x0040, -+ 0x18fc: 0x0040, 0x18fd: 0x0040, 0x18fe: 0x0040, 0x18ff: 0x0040, -+ // Block 0x64, offset 0x1900 -+ 0x1900: 0x0008, 0x1901: 0x0008, 0x1902: 0x0008, 0x1903: 0x0008, 0x1904: 0x0008, 0x1905: 0x0008, -+ 0x1906: 0x0008, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0008, 0x190a: 0x0040, 0x190b: 0x0040, -+ 0x190c: 0x0008, 0x190d: 0x0008, 0x190e: 0x0008, 0x190f: 0x0008, 0x1910: 0x0008, 0x1911: 0x0008, -+ 0x1912: 0x0008, 0x1913: 0x0008, 0x1914: 0x0040, 0x1915: 0x0008, 0x1916: 0x0008, 0x1917: 0x0040, -+ 0x1918: 0x0008, 0x1919: 0x0008, 0x191a: 0x0008, 0x191b: 0x0008, 0x191c: 0x0008, 0x191d: 0x0008, -+ 0x191e: 0x0008, 0x191f: 0x0008, 0x1920: 0x0008, 0x1921: 0x0008, 0x1922: 0x0008, 0x1923: 0x0008, -+ 0x1924: 0x0008, 0x1925: 0x0008, 0x1926: 0x0008, 0x1927: 0x0008, 0x1928: 0x0008, 0x1929: 0x0008, -+ 0x192a: 0x0008, 0x192b: 0x0008, 0x192c: 0x0008, 0x192d: 0x0008, 0x192e: 0x0008, 0x192f: 0x0008, -+ 0x1930: 0x3008, 0x1931: 0x3008, 0x1932: 0x3008, 0x1933: 0x3008, 0x1934: 0x3008, 0x1935: 0x3008, -+ 0x1936: 0x0040, 0x1937: 0x3008, 0x1938: 0x3008, 0x1939: 0x0040, 0x193a: 0x0040, 0x193b: 0x3308, -+ 0x193c: 0x3308, 0x193d: 0x3808, 0x193e: 0x3b08, 0x193f: 0x0008, -+ // Block 0x65, offset 0x1940 -+ 0x1940: 0x0019, 0x1941: 0x02e9, 0x1942: 0x03d9, 0x1943: 0x02f1, 0x1944: 0x02f9, 0x1945: 0x03f1, -+ 0x1946: 0x0309, 0x1947: 0x00a9, 0x1948: 0x0311, 0x1949: 0x00b1, 0x194a: 0x0319, 0x194b: 0x0101, -+ 0x194c: 0x0321, 0x194d: 0x0329, 0x194e: 0x0051, 0x194f: 0x0339, 0x1950: 0x0751, 0x1951: 0x00b9, -+ 0x1952: 0x0089, 0x1953: 0x0341, 0x1954: 0x0349, 0x1955: 0x0391, 0x1956: 0x00c1, 0x1957: 0x0109, -+ 0x1958: 0x00c9, 0x1959: 0x04b1, 0x195a: 0x0019, 0x195b: 0x02e9, 0x195c: 0x03d9, 0x195d: 0x02f1, -+ 0x195e: 0x02f9, 0x195f: 0x03f1, 0x1960: 0x0309, 0x1961: 0x00a9, 0x1962: 0x0311, 0x1963: 0x00b1, -+ 0x1964: 0x0319, 0x1965: 0x0101, 0x1966: 0x0321, 0x1967: 0x0329, 0x1968: 0x0051, 0x1969: 0x0339, -+ 0x196a: 0x0751, 0x196b: 0x00b9, 0x196c: 0x0089, 0x196d: 0x0341, 0x196e: 0x0349, 0x196f: 0x0391, -+ 0x1970: 0x00c1, 0x1971: 0x0109, 0x1972: 0x00c9, 0x1973: 0x04b1, 0x1974: 0x0019, 0x1975: 0x02e9, -+ 0x1976: 0x03d9, 0x1977: 0x02f1, 0x1978: 0x02f9, 0x1979: 0x03f1, 0x197a: 0x0309, 0x197b: 0x00a9, -+ 0x197c: 0x0311, 0x197d: 0x00b1, 0x197e: 0x0319, 0x197f: 0x0101, -+ // Block 0x66, offset 0x1980 -+ 0x1980: 0x0321, 0x1981: 0x0329, 0x1982: 0x0051, 0x1983: 0x0339, 0x1984: 0x0751, 0x1985: 0x00b9, -+ 0x1986: 0x0089, 0x1987: 0x0341, 0x1988: 0x0349, 0x1989: 0x0391, 0x198a: 0x00c1, 0x198b: 0x0109, -+ 0x198c: 0x00c9, 0x198d: 0x04b1, 0x198e: 0x0019, 0x198f: 0x02e9, 0x1990: 0x03d9, 0x1991: 0x02f1, -+ 0x1992: 0x02f9, 0x1993: 0x03f1, 0x1994: 0x0309, 0x1995: 0x0040, 0x1996: 0x0311, 0x1997: 0x00b1, -+ 0x1998: 0x0319, 0x1999: 0x0101, 0x199a: 0x0321, 0x199b: 0x0329, 0x199c: 0x0051, 0x199d: 0x0339, -+ 0x199e: 0x0751, 0x199f: 0x00b9, 0x19a0: 0x0089, 0x19a1: 0x0341, 0x19a2: 0x0349, 0x19a3: 0x0391, -+ 0x19a4: 0x00c1, 0x19a5: 0x0109, 0x19a6: 0x00c9, 0x19a7: 0x04b1, 0x19a8: 0x0019, 0x19a9: 0x02e9, -+ 0x19aa: 0x03d9, 0x19ab: 0x02f1, 0x19ac: 0x02f9, 0x19ad: 0x03f1, 0x19ae: 0x0309, 0x19af: 0x00a9, -+ 0x19b0: 0x0311, 0x19b1: 0x00b1, 0x19b2: 0x0319, 0x19b3: 0x0101, 0x19b4: 0x0321, 0x19b5: 0x0329, -+ 0x19b6: 0x0051, 0x19b7: 0x0339, 0x19b8: 0x0751, 0x19b9: 0x00b9, 0x19ba: 0x0089, 0x19bb: 0x0341, -+ 0x19bc: 0x0349, 0x19bd: 0x0391, 0x19be: 0x00c1, 0x19bf: 0x0109, -+ // Block 0x67, offset 0x19c0 -+ 0x19c0: 0x00c9, 0x19c1: 0x04b1, 0x19c2: 0x0019, 0x19c3: 0x02e9, 0x19c4: 0x03d9, 0x19c5: 0x02f1, -+ 0x19c6: 0x02f9, 0x19c7: 0x03f1, 0x19c8: 0x0309, 0x19c9: 0x00a9, 0x19ca: 0x0311, 0x19cb: 0x00b1, -+ 0x19cc: 0x0319, 0x19cd: 0x0101, 0x19ce: 0x0321, 0x19cf: 0x0329, 0x19d0: 0x0051, 0x19d1: 0x0339, -+ 0x19d2: 0x0751, 0x19d3: 0x00b9, 0x19d4: 0x0089, 0x19d5: 0x0341, 0x19d6: 0x0349, 0x19d7: 0x0391, -+ 0x19d8: 0x00c1, 0x19d9: 0x0109, 0x19da: 0x00c9, 0x19db: 0x04b1, 0x19dc: 0x0019, 0x19dd: 0x0040, -+ 0x19de: 0x03d9, 0x19df: 0x02f1, 0x19e0: 0x0040, 0x19e1: 0x0040, 0x19e2: 0x0309, 0x19e3: 0x0040, -+ 0x19e4: 0x0040, 0x19e5: 0x00b1, 0x19e6: 0x0319, 0x19e7: 0x0040, 0x19e8: 0x0040, 0x19e9: 0x0329, -+ 0x19ea: 0x0051, 0x19eb: 0x0339, 0x19ec: 0x0751, 0x19ed: 0x0040, 0x19ee: 0x0089, 0x19ef: 0x0341, -+ 0x19f0: 0x0349, 0x19f1: 0x0391, 0x19f2: 0x00c1, 0x19f3: 0x0109, 0x19f4: 0x00c9, 0x19f5: 0x04b1, -+ 0x19f6: 0x0019, 0x19f7: 0x02e9, 0x19f8: 0x03d9, 0x19f9: 0x02f1, 0x19fa: 0x0040, 0x19fb: 0x03f1, -+ 0x19fc: 0x0040, 0x19fd: 0x00a9, 0x19fe: 0x0311, 0x19ff: 0x00b1, -+ // Block 0x68, offset 0x1a00 -+ 0x1a00: 0x0319, 0x1a01: 0x0101, 0x1a02: 0x0321, 0x1a03: 0x0329, 0x1a04: 0x0040, 0x1a05: 0x0339, -+ 0x1a06: 0x0751, 0x1a07: 0x00b9, 0x1a08: 0x0089, 0x1a09: 0x0341, 0x1a0a: 0x0349, 0x1a0b: 0x0391, -+ 0x1a0c: 0x00c1, 0x1a0d: 0x0109, 0x1a0e: 0x00c9, 0x1a0f: 0x04b1, 0x1a10: 0x0019, 0x1a11: 0x02e9, -+ 0x1a12: 0x03d9, 0x1a13: 0x02f1, 0x1a14: 0x02f9, 0x1a15: 0x03f1, 0x1a16: 0x0309, 0x1a17: 0x00a9, -+ 0x1a18: 0x0311, 0x1a19: 0x00b1, 0x1a1a: 0x0319, 0x1a1b: 0x0101, 0x1a1c: 0x0321, 0x1a1d: 0x0329, -+ 0x1a1e: 0x0051, 0x1a1f: 0x0339, 0x1a20: 0x0751, 0x1a21: 0x00b9, 0x1a22: 0x0089, 0x1a23: 0x0341, -+ 0x1a24: 0x0349, 0x1a25: 0x0391, 0x1a26: 0x00c1, 0x1a27: 0x0109, 0x1a28: 0x00c9, 0x1a29: 0x04b1, -+ 0x1a2a: 0x0019, 0x1a2b: 0x02e9, 0x1a2c: 0x03d9, 0x1a2d: 0x02f1, 0x1a2e: 0x02f9, 0x1a2f: 0x03f1, -+ 0x1a30: 0x0309, 0x1a31: 0x00a9, 0x1a32: 0x0311, 0x1a33: 0x00b1, 0x1a34: 0x0319, 0x1a35: 0x0101, -+ 0x1a36: 0x0321, 0x1a37: 0x0329, 0x1a38: 0x0051, 0x1a39: 0x0339, 0x1a3a: 0x0751, 0x1a3b: 0x00b9, -+ 0x1a3c: 0x0089, 0x1a3d: 0x0341, 0x1a3e: 0x0349, 0x1a3f: 0x0391, -+ // Block 0x69, offset 0x1a40 -+ 0x1a40: 0x00c1, 0x1a41: 0x0109, 0x1a42: 0x00c9, 0x1a43: 0x04b1, 0x1a44: 0x0019, 0x1a45: 0x02e9, -+ 0x1a46: 0x0040, 0x1a47: 0x02f1, 0x1a48: 0x02f9, 0x1a49: 0x03f1, 0x1a4a: 0x0309, 0x1a4b: 0x0040, -+ 0x1a4c: 0x0040, 0x1a4d: 0x00b1, 0x1a4e: 0x0319, 0x1a4f: 0x0101, 0x1a50: 0x0321, 0x1a51: 0x0329, -+ 0x1a52: 0x0051, 0x1a53: 0x0339, 0x1a54: 0x0751, 0x1a55: 0x0040, 0x1a56: 0x0089, 0x1a57: 0x0341, -+ 0x1a58: 0x0349, 0x1a59: 0x0391, 0x1a5a: 0x00c1, 0x1a5b: 0x0109, 0x1a5c: 0x00c9, 0x1a5d: 0x0040, -+ 0x1a5e: 0x0019, 0x1a5f: 0x02e9, 0x1a60: 0x03d9, 0x1a61: 0x02f1, 0x1a62: 0x02f9, 0x1a63: 0x03f1, -+ 0x1a64: 0x0309, 0x1a65: 0x00a9, 0x1a66: 0x0311, 0x1a67: 0x00b1, 0x1a68: 0x0319, 0x1a69: 0x0101, -+ 0x1a6a: 0x0321, 0x1a6b: 0x0329, 0x1a6c: 0x0051, 0x1a6d: 0x0339, 0x1a6e: 0x0751, 0x1a6f: 0x00b9, -+ 0x1a70: 0x0089, 0x1a71: 0x0341, 0x1a72: 0x0349, 0x1a73: 0x0391, 0x1a74: 0x00c1, 0x1a75: 0x0109, -+ 0x1a76: 0x00c9, 0x1a77: 0x04b1, 0x1a78: 0x0019, 0x1a79: 0x02e9, 0x1a7a: 0x0040, 0x1a7b: 0x02f1, -+ 0x1a7c: 0x02f9, 0x1a7d: 0x03f1, 0x1a7e: 0x0309, 0x1a7f: 0x0040, -+ // Block 0x6a, offset 0x1a80 -+ 0x1a80: 0x0311, 0x1a81: 0x00b1, 0x1a82: 0x0319, 0x1a83: 0x0101, 0x1a84: 0x0321, 0x1a85: 0x0040, -+ 0x1a86: 0x0051, 0x1a87: 0x0040, 0x1a88: 0x0040, 0x1a89: 0x0040, 0x1a8a: 0x0089, 0x1a8b: 0x0341, -+ 0x1a8c: 0x0349, 0x1a8d: 0x0391, 0x1a8e: 0x00c1, 0x1a8f: 0x0109, 0x1a90: 0x00c9, 0x1a91: 0x0040, -+ 0x1a92: 0x0019, 0x1a93: 0x02e9, 0x1a94: 0x03d9, 0x1a95: 0x02f1, 0x1a96: 0x02f9, 0x1a97: 0x03f1, -+ 0x1a98: 0x0309, 0x1a99: 0x00a9, 0x1a9a: 0x0311, 0x1a9b: 0x00b1, 0x1a9c: 0x0319, 0x1a9d: 0x0101, -+ 0x1a9e: 0x0321, 0x1a9f: 0x0329, 0x1aa0: 0x0051, 0x1aa1: 0x0339, 0x1aa2: 0x0751, 0x1aa3: 0x00b9, -+ 0x1aa4: 0x0089, 0x1aa5: 0x0341, 0x1aa6: 0x0349, 0x1aa7: 0x0391, 0x1aa8: 0x00c1, 0x1aa9: 0x0109, -+ 0x1aaa: 0x00c9, 0x1aab: 0x04b1, 0x1aac: 0x0019, 0x1aad: 0x02e9, 0x1aae: 0x03d9, 0x1aaf: 0x02f1, -+ 0x1ab0: 0x02f9, 0x1ab1: 0x03f1, 0x1ab2: 0x0309, 0x1ab3: 0x00a9, 0x1ab4: 0x0311, 0x1ab5: 0x00b1, -+ 0x1ab6: 0x0319, 0x1ab7: 0x0101, 0x1ab8: 0x0321, 0x1ab9: 0x0329, 0x1aba: 0x0051, 0x1abb: 0x0339, -+ 0x1abc: 0x0751, 0x1abd: 0x00b9, 0x1abe: 0x0089, 0x1abf: 0x0341, -+ // Block 0x6b, offset 0x1ac0 -+ 0x1ac0: 0x0349, 0x1ac1: 0x0391, 0x1ac2: 0x00c1, 0x1ac3: 0x0109, 0x1ac4: 0x00c9, 0x1ac5: 0x04b1, -+ 0x1ac6: 0x0019, 0x1ac7: 0x02e9, 0x1ac8: 0x03d9, 0x1ac9: 0x02f1, 0x1aca: 0x02f9, 0x1acb: 0x03f1, -+ 0x1acc: 0x0309, 0x1acd: 0x00a9, 0x1ace: 0x0311, 0x1acf: 0x00b1, 0x1ad0: 0x0319, 0x1ad1: 0x0101, -+ 0x1ad2: 0x0321, 0x1ad3: 0x0329, 0x1ad4: 0x0051, 0x1ad5: 0x0339, 0x1ad6: 0x0751, 0x1ad7: 0x00b9, -+ 0x1ad8: 0x0089, 0x1ad9: 0x0341, 0x1ada: 0x0349, 0x1adb: 0x0391, 0x1adc: 0x00c1, 0x1add: 0x0109, -+ 0x1ade: 0x00c9, 0x1adf: 0x04b1, 0x1ae0: 0x0019, 0x1ae1: 0x02e9, 0x1ae2: 0x03d9, 0x1ae3: 0x02f1, -+ 0x1ae4: 0x02f9, 0x1ae5: 0x03f1, 0x1ae6: 0x0309, 0x1ae7: 0x00a9, 0x1ae8: 0x0311, 0x1ae9: 0x00b1, -+ 0x1aea: 0x0319, 0x1aeb: 0x0101, 0x1aec: 0x0321, 0x1aed: 0x0329, 0x1aee: 0x0051, 0x1aef: 0x0339, -+ 0x1af0: 0x0751, 0x1af1: 0x00b9, 0x1af2: 0x0089, 0x1af3: 0x0341, 0x1af4: 0x0349, 0x1af5: 0x0391, -+ 0x1af6: 0x00c1, 0x1af7: 0x0109, 0x1af8: 0x00c9, 0x1af9: 0x04b1, 0x1afa: 0x0019, 0x1afb: 0x02e9, -+ 0x1afc: 0x03d9, 0x1afd: 0x02f1, 0x1afe: 0x02f9, 0x1aff: 0x03f1, -+ // Block 0x6c, offset 0x1b00 -+ 0x1b00: 0x0309, 0x1b01: 0x00a9, 0x1b02: 0x0311, 0x1b03: 0x00b1, 0x1b04: 0x0319, 0x1b05: 0x0101, -+ 0x1b06: 0x0321, 0x1b07: 0x0329, 0x1b08: 0x0051, 0x1b09: 0x0339, 0x1b0a: 0x0751, 0x1b0b: 0x00b9, -+ 0x1b0c: 0x0089, 0x1b0d: 0x0341, 0x1b0e: 0x0349, 0x1b0f: 0x0391, 0x1b10: 0x00c1, 0x1b11: 0x0109, -+ 0x1b12: 0x00c9, 0x1b13: 0x04b1, 0x1b14: 0x0019, 0x1b15: 0x02e9, 0x1b16: 0x03d9, 0x1b17: 0x02f1, -+ 0x1b18: 0x02f9, 0x1b19: 0x03f1, 0x1b1a: 0x0309, 0x1b1b: 0x00a9, 0x1b1c: 0x0311, 0x1b1d: 0x00b1, -+ 0x1b1e: 0x0319, 0x1b1f: 0x0101, 0x1b20: 0x0321, 0x1b21: 0x0329, 0x1b22: 0x0051, 0x1b23: 0x0339, -+ 0x1b24: 0x0751, 0x1b25: 0x00b9, 0x1b26: 0x0089, 0x1b27: 0x0341, 0x1b28: 0x0349, 0x1b29: 0x0391, -+ 0x1b2a: 0x00c1, 0x1b2b: 0x0109, 0x1b2c: 0x00c9, 0x1b2d: 0x04b1, 0x1b2e: 0x0019, 0x1b2f: 0x02e9, -+ 0x1b30: 0x03d9, 0x1b31: 0x02f1, 0x1b32: 0x02f9, 0x1b33: 0x03f1, 0x1b34: 0x0309, 0x1b35: 0x00a9, -+ 0x1b36: 0x0311, 0x1b37: 0x00b1, 0x1b38: 0x0319, 0x1b39: 0x0101, 0x1b3a: 0x0321, 0x1b3b: 0x0329, -+ 0x1b3c: 0x0051, 0x1b3d: 0x0339, 0x1b3e: 0x0751, 0x1b3f: 0x00b9, -+ // Block 0x6d, offset 0x1b40 -+ 0x1b40: 0x0089, 0x1b41: 0x0341, 0x1b42: 0x0349, 0x1b43: 0x0391, 0x1b44: 0x00c1, 0x1b45: 0x0109, -+ 0x1b46: 0x00c9, 0x1b47: 0x04b1, 0x1b48: 0x0019, 0x1b49: 0x02e9, 0x1b4a: 0x03d9, 0x1b4b: 0x02f1, -+ 0x1b4c: 0x02f9, 0x1b4d: 0x03f1, 0x1b4e: 0x0309, 0x1b4f: 0x00a9, 0x1b50: 0x0311, 0x1b51: 0x00b1, -+ 0x1b52: 0x0319, 0x1b53: 0x0101, 0x1b54: 0x0321, 0x1b55: 0x0329, 0x1b56: 0x0051, 0x1b57: 0x0339, -+ 0x1b58: 0x0751, 0x1b59: 0x00b9, 0x1b5a: 0x0089, 0x1b5b: 0x0341, 0x1b5c: 0x0349, 0x1b5d: 0x0391, -+ 0x1b5e: 0x00c1, 0x1b5f: 0x0109, 0x1b60: 0x00c9, 0x1b61: 0x04b1, 0x1b62: 0x0019, 0x1b63: 0x02e9, -+ 0x1b64: 0x03d9, 0x1b65: 0x02f1, 0x1b66: 0x02f9, 0x1b67: 0x03f1, 0x1b68: 0x0309, 0x1b69: 0x00a9, -+ 0x1b6a: 0x0311, 0x1b6b: 0x00b1, 0x1b6c: 0x0319, 0x1b6d: 0x0101, 0x1b6e: 0x0321, 0x1b6f: 0x0329, -+ 0x1b70: 0x0051, 0x1b71: 0x0339, 0x1b72: 0x0751, 0x1b73: 0x00b9, 0x1b74: 0x0089, 0x1b75: 0x0341, -+ 0x1b76: 0x0349, 0x1b77: 0x0391, 0x1b78: 0x00c1, 0x1b79: 0x0109, 0x1b7a: 0x00c9, 0x1b7b: 0x04b1, -+ 0x1b7c: 0x0019, 0x1b7d: 0x02e9, 0x1b7e: 0x03d9, 0x1b7f: 0x02f1, -+ // Block 0x6e, offset 0x1b80 -+ 0x1b80: 0x02f9, 0x1b81: 0x03f1, 0x1b82: 0x0309, 0x1b83: 0x00a9, 0x1b84: 0x0311, 0x1b85: 0x00b1, -+ 0x1b86: 0x0319, 0x1b87: 0x0101, 0x1b88: 0x0321, 0x1b89: 0x0329, 0x1b8a: 0x0051, 0x1b8b: 0x0339, -+ 0x1b8c: 0x0751, 0x1b8d: 0x00b9, 0x1b8e: 0x0089, 0x1b8f: 0x0341, 0x1b90: 0x0349, 0x1b91: 0x0391, -+ 0x1b92: 0x00c1, 0x1b93: 0x0109, 0x1b94: 0x00c9, 0x1b95: 0x04b1, 0x1b96: 0x0019, 0x1b97: 0x02e9, -+ 0x1b98: 0x03d9, 0x1b99: 0x02f1, 0x1b9a: 0x02f9, 0x1b9b: 0x03f1, 0x1b9c: 0x0309, 0x1b9d: 0x00a9, -+ 0x1b9e: 0x0311, 0x1b9f: 0x00b1, 0x1ba0: 0x0319, 0x1ba1: 0x0101, 0x1ba2: 0x0321, 0x1ba3: 0x0329, -+ 0x1ba4: 0x0051, 0x1ba5: 0x0339, 0x1ba6: 0x0751, 0x1ba7: 0x00b9, 0x1ba8: 0x0089, 0x1ba9: 0x0341, -+ 0x1baa: 0x0349, 0x1bab: 0x0391, 0x1bac: 0x00c1, 0x1bad: 0x0109, 0x1bae: 0x00c9, 0x1baf: 0x04b1, -+ 0x1bb0: 0x0019, 0x1bb1: 0x02e9, 0x1bb2: 0x03d9, 0x1bb3: 0x02f1, 0x1bb4: 0x02f9, 0x1bb5: 0x03f1, -+ 0x1bb6: 0x0309, 0x1bb7: 0x00a9, 0x1bb8: 0x0311, 0x1bb9: 0x00b1, 0x1bba: 0x0319, 0x1bbb: 0x0101, -+ 0x1bbc: 0x0321, 0x1bbd: 0x0329, 0x1bbe: 0x0051, 0x1bbf: 0x0339, -+ // Block 0x6f, offset 0x1bc0 -+ 0x1bc0: 0x0751, 0x1bc1: 0x00b9, 0x1bc2: 0x0089, 0x1bc3: 0x0341, 0x1bc4: 0x0349, 0x1bc5: 0x0391, -+ 0x1bc6: 0x00c1, 0x1bc7: 0x0109, 0x1bc8: 0x00c9, 0x1bc9: 0x04b1, 0x1bca: 0x0019, 0x1bcb: 0x02e9, -+ 0x1bcc: 0x03d9, 0x1bcd: 0x02f1, 0x1bce: 0x02f9, 0x1bcf: 0x03f1, 0x1bd0: 0x0309, 0x1bd1: 0x00a9, -+ 0x1bd2: 0x0311, 0x1bd3: 0x00b1, 0x1bd4: 0x0319, 0x1bd5: 0x0101, 0x1bd6: 0x0321, 0x1bd7: 0x0329, -+ 0x1bd8: 0x0051, 0x1bd9: 0x0339, 0x1bda: 0x0751, 0x1bdb: 0x00b9, 0x1bdc: 0x0089, 0x1bdd: 0x0341, -+ 0x1bde: 0x0349, 0x1bdf: 0x0391, 0x1be0: 0x00c1, 0x1be1: 0x0109, 0x1be2: 0x00c9, 0x1be3: 0x04b1, -+ 0x1be4: 0x23e1, 0x1be5: 0x23e9, 0x1be6: 0x0040, 0x1be7: 0x0040, 0x1be8: 0x23f1, 0x1be9: 0x0399, -+ 0x1bea: 0x03a1, 0x1beb: 0x03a9, 0x1bec: 0x23f9, 0x1bed: 0x2401, 0x1bee: 0x2409, 0x1bef: 0x04d1, -+ 0x1bf0: 0x05f9, 0x1bf1: 0x2411, 0x1bf2: 0x2419, 0x1bf3: 0x2421, 0x1bf4: 0x2429, 0x1bf5: 0x2431, -+ 0x1bf6: 0x2439, 0x1bf7: 0x0799, 0x1bf8: 0x03c1, 0x1bf9: 0x04d1, 0x1bfa: 0x2441, 0x1bfb: 0x2449, -+ 0x1bfc: 0x2451, 0x1bfd: 0x03b1, 0x1bfe: 0x03b9, 0x1bff: 0x2459, -+ // Block 0x70, offset 0x1c00 -+ 0x1c00: 0x0769, 0x1c01: 0x2461, 0x1c02: 0x23f1, 0x1c03: 0x0399, 0x1c04: 0x03a1, 0x1c05: 0x03a9, -+ 0x1c06: 0x23f9, 0x1c07: 0x2401, 0x1c08: 0x2409, 0x1c09: 0x04d1, 0x1c0a: 0x05f9, 0x1c0b: 0x2411, -+ 0x1c0c: 0x2419, 0x1c0d: 0x2421, 0x1c0e: 0x2429, 0x1c0f: 0x2431, 0x1c10: 0x2439, 0x1c11: 0x0799, -+ 0x1c12: 0x03c1, 0x1c13: 0x2441, 0x1c14: 0x2441, 0x1c15: 0x2449, 0x1c16: 0x2451, 0x1c17: 0x03b1, -+ 0x1c18: 0x03b9, 0x1c19: 0x2459, 0x1c1a: 0x0769, 0x1c1b: 0x2469, 0x1c1c: 0x23f9, 0x1c1d: 0x04d1, -+ 0x1c1e: 0x2411, 0x1c1f: 0x03b1, 0x1c20: 0x03c1, 0x1c21: 0x0799, 0x1c22: 0x23f1, 0x1c23: 0x0399, -+ 0x1c24: 0x03a1, 0x1c25: 0x03a9, 0x1c26: 0x23f9, 0x1c27: 0x2401, 0x1c28: 0x2409, 0x1c29: 0x04d1, -+ 0x1c2a: 0x05f9, 0x1c2b: 0x2411, 0x1c2c: 0x2419, 0x1c2d: 0x2421, 0x1c2e: 0x2429, 0x1c2f: 0x2431, -+ 0x1c30: 0x2439, 0x1c31: 0x0799, 0x1c32: 0x03c1, 0x1c33: 0x04d1, 0x1c34: 0x2441, 0x1c35: 0x2449, -+ 0x1c36: 0x2451, 0x1c37: 0x03b1, 0x1c38: 0x03b9, 0x1c39: 0x2459, 0x1c3a: 0x0769, 0x1c3b: 0x2461, -+ 0x1c3c: 0x23f1, 0x1c3d: 0x0399, 0x1c3e: 0x03a1, 0x1c3f: 0x03a9, -+ // Block 0x71, offset 0x1c40 -+ 0x1c40: 0x23f9, 0x1c41: 0x2401, 0x1c42: 0x2409, 0x1c43: 0x04d1, 0x1c44: 0x05f9, 0x1c45: 0x2411, -+ 0x1c46: 0x2419, 0x1c47: 0x2421, 0x1c48: 0x2429, 0x1c49: 0x2431, 0x1c4a: 0x2439, 0x1c4b: 0x0799, -+ 0x1c4c: 0x03c1, 0x1c4d: 0x2441, 0x1c4e: 0x2441, 0x1c4f: 0x2449, 0x1c50: 0x2451, 0x1c51: 0x03b1, -+ 0x1c52: 0x03b9, 0x1c53: 0x2459, 0x1c54: 0x0769, 0x1c55: 0x2469, 0x1c56: 0x23f9, 0x1c57: 0x04d1, -+ 0x1c58: 0x2411, 0x1c59: 0x03b1, 0x1c5a: 0x03c1, 0x1c5b: 0x0799, 0x1c5c: 0x23f1, 0x1c5d: 0x0399, -+ 0x1c5e: 0x03a1, 0x1c5f: 0x03a9, 0x1c60: 0x23f9, 0x1c61: 0x2401, 0x1c62: 0x2409, 0x1c63: 0x04d1, -+ 0x1c64: 0x05f9, 0x1c65: 0x2411, 0x1c66: 0x2419, 0x1c67: 0x2421, 0x1c68: 0x2429, 0x1c69: 0x2431, -+ 0x1c6a: 0x2439, 0x1c6b: 0x0799, 0x1c6c: 0x03c1, 0x1c6d: 0x04d1, 0x1c6e: 0x2441, 0x1c6f: 0x2449, -+ 0x1c70: 0x2451, 0x1c71: 0x03b1, 0x1c72: 0x03b9, 0x1c73: 0x2459, 0x1c74: 0x0769, 0x1c75: 0x2461, -+ 0x1c76: 0x23f1, 0x1c77: 0x0399, 0x1c78: 0x03a1, 0x1c79: 0x03a9, 0x1c7a: 0x23f9, 0x1c7b: 0x2401, -+ 0x1c7c: 0x2409, 0x1c7d: 0x04d1, 0x1c7e: 0x05f9, 0x1c7f: 0x2411, -+ // Block 0x72, offset 0x1c80 -+ 0x1c80: 0x2419, 0x1c81: 0x2421, 0x1c82: 0x2429, 0x1c83: 0x2431, 0x1c84: 0x2439, 0x1c85: 0x0799, -+ 0x1c86: 0x03c1, 0x1c87: 0x2441, 0x1c88: 0x2441, 0x1c89: 0x2449, 0x1c8a: 0x2451, 0x1c8b: 0x03b1, -+ 0x1c8c: 0x03b9, 0x1c8d: 0x2459, 0x1c8e: 0x0769, 0x1c8f: 0x2469, 0x1c90: 0x23f9, 0x1c91: 0x04d1, -+ 0x1c92: 0x2411, 0x1c93: 0x03b1, 0x1c94: 0x03c1, 0x1c95: 0x0799, 0x1c96: 0x23f1, 0x1c97: 0x0399, -+ 0x1c98: 0x03a1, 0x1c99: 0x03a9, 0x1c9a: 0x23f9, 0x1c9b: 0x2401, 0x1c9c: 0x2409, 0x1c9d: 0x04d1, -+ 0x1c9e: 0x05f9, 0x1c9f: 0x2411, 0x1ca0: 0x2419, 0x1ca1: 0x2421, 0x1ca2: 0x2429, 0x1ca3: 0x2431, -+ 0x1ca4: 0x2439, 0x1ca5: 0x0799, 0x1ca6: 0x03c1, 0x1ca7: 0x04d1, 0x1ca8: 0x2441, 0x1ca9: 0x2449, -+ 0x1caa: 0x2451, 0x1cab: 0x03b1, 0x1cac: 0x03b9, 0x1cad: 0x2459, 0x1cae: 0x0769, 0x1caf: 0x2461, -+ 0x1cb0: 0x23f1, 0x1cb1: 0x0399, 0x1cb2: 0x03a1, 0x1cb3: 0x03a9, 0x1cb4: 0x23f9, 0x1cb5: 0x2401, -+ 0x1cb6: 0x2409, 0x1cb7: 0x04d1, 0x1cb8: 0x05f9, 0x1cb9: 0x2411, 0x1cba: 0x2419, 0x1cbb: 0x2421, -+ 0x1cbc: 0x2429, 0x1cbd: 0x2431, 0x1cbe: 0x2439, 0x1cbf: 0x0799, -+ // Block 0x73, offset 0x1cc0 -+ 0x1cc0: 0x03c1, 0x1cc1: 0x2441, 0x1cc2: 0x2441, 0x1cc3: 0x2449, 0x1cc4: 0x2451, 0x1cc5: 0x03b1, -+ 0x1cc6: 0x03b9, 0x1cc7: 0x2459, 0x1cc8: 0x0769, 0x1cc9: 0x2469, 0x1cca: 0x23f9, 0x1ccb: 0x04d1, -+ 0x1ccc: 0x2411, 0x1ccd: 0x03b1, 0x1cce: 0x03c1, 0x1ccf: 0x0799, 0x1cd0: 0x23f1, 0x1cd1: 0x0399, -+ 0x1cd2: 0x03a1, 0x1cd3: 0x03a9, 0x1cd4: 0x23f9, 0x1cd5: 0x2401, 0x1cd6: 0x2409, 0x1cd7: 0x04d1, -+ 0x1cd8: 0x05f9, 0x1cd9: 0x2411, 0x1cda: 0x2419, 0x1cdb: 0x2421, 0x1cdc: 0x2429, 0x1cdd: 0x2431, -+ 0x1cde: 0x2439, 0x1cdf: 0x0799, 0x1ce0: 0x03c1, 0x1ce1: 0x04d1, 0x1ce2: 0x2441, 0x1ce3: 0x2449, -+ 0x1ce4: 0x2451, 0x1ce5: 0x03b1, 0x1ce6: 0x03b9, 0x1ce7: 0x2459, 0x1ce8: 0x0769, 0x1ce9: 0x2461, -+ 0x1cea: 0x23f1, 0x1ceb: 0x0399, 0x1cec: 0x03a1, 0x1ced: 0x03a9, 0x1cee: 0x23f9, 0x1cef: 0x2401, -+ 0x1cf0: 0x2409, 0x1cf1: 0x04d1, 0x1cf2: 0x05f9, 0x1cf3: 0x2411, 0x1cf4: 0x2419, 0x1cf5: 0x2421, -+ 0x1cf6: 0x2429, 0x1cf7: 0x2431, 0x1cf8: 0x2439, 0x1cf9: 0x0799, 0x1cfa: 0x03c1, 0x1cfb: 0x2441, -+ 0x1cfc: 0x2441, 0x1cfd: 0x2449, 0x1cfe: 0x2451, 0x1cff: 0x03b1, -+ // Block 0x74, offset 0x1d00 -+ 0x1d00: 0x03b9, 0x1d01: 0x2459, 0x1d02: 0x0769, 0x1d03: 0x2469, 0x1d04: 0x23f9, 0x1d05: 0x04d1, -+ 0x1d06: 0x2411, 0x1d07: 0x03b1, 0x1d08: 0x03c1, 0x1d09: 0x0799, 0x1d0a: 0x2471, 0x1d0b: 0x2471, -+ 0x1d0c: 0x0040, 0x1d0d: 0x0040, 0x1d0e: 0x06e1, 0x1d0f: 0x0049, 0x1d10: 0x0029, 0x1d11: 0x0031, -+ 0x1d12: 0x06e9, 0x1d13: 0x06f1, 0x1d14: 0x06f9, 0x1d15: 0x0701, 0x1d16: 0x0709, 0x1d17: 0x0711, -+ 0x1d18: 0x06e1, 0x1d19: 0x0049, 0x1d1a: 0x0029, 0x1d1b: 0x0031, 0x1d1c: 0x06e9, 0x1d1d: 0x06f1, -+ 0x1d1e: 0x06f9, 0x1d1f: 0x0701, 0x1d20: 0x0709, 0x1d21: 0x0711, 0x1d22: 0x06e1, 0x1d23: 0x0049, -+ 0x1d24: 0x0029, 0x1d25: 0x0031, 0x1d26: 0x06e9, 0x1d27: 0x06f1, 0x1d28: 0x06f9, 0x1d29: 0x0701, -+ 0x1d2a: 0x0709, 0x1d2b: 0x0711, 0x1d2c: 0x06e1, 0x1d2d: 0x0049, 0x1d2e: 0x0029, 0x1d2f: 0x0031, -+ 0x1d30: 0x06e9, 0x1d31: 0x06f1, 0x1d32: 0x06f9, 0x1d33: 0x0701, 0x1d34: 0x0709, 0x1d35: 0x0711, -+ 0x1d36: 0x06e1, 0x1d37: 0x0049, 0x1d38: 0x0029, 0x1d39: 0x0031, 0x1d3a: 0x06e9, 0x1d3b: 0x06f1, -+ 0x1d3c: 0x06f9, 0x1d3d: 0x0701, 0x1d3e: 0x0709, 0x1d3f: 0x0711, -+ // Block 0x75, offset 0x1d40 -+ 0x1d40: 0x3308, 0x1d41: 0x3308, 0x1d42: 0x3308, 0x1d43: 0x3308, 0x1d44: 0x3308, 0x1d45: 0x3308, -+ 0x1d46: 0x3308, 0x1d47: 0x0040, 0x1d48: 0x3308, 0x1d49: 0x3308, 0x1d4a: 0x3308, 0x1d4b: 0x3308, -+ 0x1d4c: 0x3308, 0x1d4d: 0x3308, 0x1d4e: 0x3308, 0x1d4f: 0x3308, 0x1d50: 0x3308, 0x1d51: 0x3308, -+ 0x1d52: 0x3308, 0x1d53: 0x3308, 0x1d54: 0x3308, 0x1d55: 0x3308, 0x1d56: 0x3308, 0x1d57: 0x3308, -+ 0x1d58: 0x3308, 0x1d59: 0x0040, 0x1d5a: 0x0040, 0x1d5b: 0x3308, 0x1d5c: 0x3308, 0x1d5d: 0x3308, -+ 0x1d5e: 0x3308, 0x1d5f: 0x3308, 0x1d60: 0x3308, 0x1d61: 0x3308, 0x1d62: 0x0040, 0x1d63: 0x3308, -+ 0x1d64: 0x3308, 0x1d65: 0x0040, 0x1d66: 0x3308, 0x1d67: 0x3308, 0x1d68: 0x3308, 0x1d69: 0x3308, -+ 0x1d6a: 0x3308, 0x1d6b: 0x0040, 0x1d6c: 0x0040, 0x1d6d: 0x0040, 0x1d6e: 0x0040, 0x1d6f: 0x0040, -+ 0x1d70: 0x2479, 0x1d71: 0x2481, 0x1d72: 0x02a9, 0x1d73: 0x2489, 0x1d74: 0x02b1, 0x1d75: 0x2491, -+ 0x1d76: 0x2499, 0x1d77: 0x24a1, 0x1d78: 0x24a9, 0x1d79: 0x24b1, 0x1d7a: 0x24b9, 0x1d7b: 0x24c1, -+ 0x1d7c: 0x02b9, 0x1d7d: 0x24c9, 0x1d7e: 0x24d1, 0x1d7f: 0x02c1, -+ // Block 0x76, offset 0x1d80 -+ 0x1d80: 0x02c9, 0x1d81: 0x24d9, 0x1d82: 0x24e1, 0x1d83: 0x24e9, 0x1d84: 0x24f1, 0x1d85: 0x24f9, -+ 0x1d86: 0x2501, 0x1d87: 0x2509, 0x1d88: 0x2511, 0x1d89: 0x2519, 0x1d8a: 0x2521, 0x1d8b: 0x2529, -+ 0x1d8c: 0x2531, 0x1d8d: 0x2539, 0x1d8e: 0x2541, 0x1d8f: 0x2549, 0x1d90: 0x2551, 0x1d91: 0x2479, -+ 0x1d92: 0x2481, 0x1d93: 0x02a9, 0x1d94: 0x2489, 0x1d95: 0x02b1, 0x1d96: 0x2491, 0x1d97: 0x2499, -+ 0x1d98: 0x24a1, 0x1d99: 0x24a9, 0x1d9a: 0x24b1, 0x1d9b: 0x24b9, 0x1d9c: 0x02b9, 0x1d9d: 0x24c9, -+ 0x1d9e: 0x02c1, 0x1d9f: 0x24d9, 0x1da0: 0x24e1, 0x1da1: 0x24e9, 0x1da2: 0x24f1, 0x1da3: 0x24f9, -+ 0x1da4: 0x2501, 0x1da5: 0x02d1, 0x1da6: 0x2509, 0x1da7: 0x2559, 0x1da8: 0x2531, 0x1da9: 0x2561, -+ 0x1daa: 0x2569, 0x1dab: 0x2571, 0x1dac: 0x2579, 0x1dad: 0x2581, 0x1dae: 0x0040, 0x1daf: 0x0040, -+ 0x1db0: 0x0040, 0x1db1: 0x0040, 0x1db2: 0x0040, 0x1db3: 0x0040, 0x1db4: 0x0040, 0x1db5: 0x0040, -+ 0x1db6: 0x0040, 0x1db7: 0x0040, 0x1db8: 0x0040, 0x1db9: 0x0040, 0x1dba: 0x0040, 0x1dbb: 0x0040, -+ 0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040, -+ // Block 0x77, offset 0x1dc0 -+ 0x1dc0: 0xe115, 0x1dc1: 0xe115, 0x1dc2: 0xe135, 0x1dc3: 0xe135, 0x1dc4: 0xe115, 0x1dc5: 0xe115, -+ 0x1dc6: 0xe175, 0x1dc7: 0xe175, 0x1dc8: 0xe115, 0x1dc9: 0xe115, 0x1dca: 0xe135, 0x1dcb: 0xe135, -+ 0x1dcc: 0xe115, 0x1dcd: 0xe115, 0x1dce: 0xe1f5, 0x1dcf: 0xe1f5, 0x1dd0: 0xe115, 0x1dd1: 0xe115, -+ 0x1dd2: 0xe135, 0x1dd3: 0xe135, 0x1dd4: 0xe115, 0x1dd5: 0xe115, 0x1dd6: 0xe175, 0x1dd7: 0xe175, -+ 0x1dd8: 0xe115, 0x1dd9: 0xe115, 0x1dda: 0xe135, 0x1ddb: 0xe135, 0x1ddc: 0xe115, 0x1ddd: 0xe115, -+ 0x1dde: 0x8ca5, 0x1ddf: 0x8ca5, 0x1de0: 0x04b5, 0x1de1: 0x04b5, 0x1de2: 0x0a08, 0x1de3: 0x0a08, -+ 0x1de4: 0x0a08, 0x1de5: 0x0a08, 0x1de6: 0x0a08, 0x1de7: 0x0a08, 0x1de8: 0x0a08, 0x1de9: 0x0a08, -+ 0x1dea: 0x0a08, 0x1deb: 0x0a08, 0x1dec: 0x0a08, 0x1ded: 0x0a08, 0x1dee: 0x0a08, 0x1def: 0x0a08, -+ 0x1df0: 0x0a08, 0x1df1: 0x0a08, 0x1df2: 0x0a08, 0x1df3: 0x0a08, 0x1df4: 0x0a08, 0x1df5: 0x0a08, -+ 0x1df6: 0x0a08, 0x1df7: 0x0a08, 0x1df8: 0x0a08, 0x1df9: 0x0a08, 0x1dfa: 0x0a08, 0x1dfb: 0x0a08, -+ 0x1dfc: 0x0a08, 0x1dfd: 0x0a08, 0x1dfe: 0x0a08, 0x1dff: 0x0a08, -+ // Block 0x78, offset 0x1e00 -+ 0x1e00: 0x20b1, 0x1e01: 0x20b9, 0x1e02: 0x20d9, 0x1e03: 0x20f1, 0x1e04: 0x0040, 0x1e05: 0x2189, -+ 0x1e06: 0x2109, 0x1e07: 0x20e1, 0x1e08: 0x2131, 0x1e09: 0x2191, 0x1e0a: 0x2161, 0x1e0b: 0x2169, -+ 0x1e0c: 0x2171, 0x1e0d: 0x2179, 0x1e0e: 0x2111, 0x1e0f: 0x2141, 0x1e10: 0x2151, 0x1e11: 0x2121, -+ 0x1e12: 0x2159, 0x1e13: 0x2101, 0x1e14: 0x2119, 0x1e15: 0x20c9, 0x1e16: 0x20d1, 0x1e17: 0x20e9, -+ 0x1e18: 0x20f9, 0x1e19: 0x2129, 0x1e1a: 0x2139, 0x1e1b: 0x2149, 0x1e1c: 0x2589, 0x1e1d: 0x1689, -+ 0x1e1e: 0x2591, 0x1e1f: 0x2599, 0x1e20: 0x0040, 0x1e21: 0x20b9, 0x1e22: 0x20d9, 0x1e23: 0x0040, -+ 0x1e24: 0x2181, 0x1e25: 0x0040, 0x1e26: 0x0040, 0x1e27: 0x20e1, 0x1e28: 0x0040, 0x1e29: 0x2191, -+ 0x1e2a: 0x2161, 0x1e2b: 0x2169, 0x1e2c: 0x2171, 0x1e2d: 0x2179, 0x1e2e: 0x2111, 0x1e2f: 0x2141, -+ 0x1e30: 0x2151, 0x1e31: 0x2121, 0x1e32: 0x2159, 0x1e33: 0x0040, 0x1e34: 0x2119, 0x1e35: 0x20c9, -+ 0x1e36: 0x20d1, 0x1e37: 0x20e9, 0x1e38: 0x0040, 0x1e39: 0x2129, 0x1e3a: 0x0040, 0x1e3b: 0x2149, -+ 0x1e3c: 0x0040, 0x1e3d: 0x0040, 0x1e3e: 0x0040, 0x1e3f: 0x0040, -+ // Block 0x79, offset 0x1e40 -+ 0x1e40: 0x0040, 0x1e41: 0x0040, 0x1e42: 0x20d9, 0x1e43: 0x0040, 0x1e44: 0x0040, 0x1e45: 0x0040, -+ 0x1e46: 0x0040, 0x1e47: 0x20e1, 0x1e48: 0x0040, 0x1e49: 0x2191, 0x1e4a: 0x0040, 0x1e4b: 0x2169, -+ 0x1e4c: 0x0040, 0x1e4d: 0x2179, 0x1e4e: 0x2111, 0x1e4f: 0x2141, 0x1e50: 0x0040, 0x1e51: 0x2121, -+ 0x1e52: 0x2159, 0x1e53: 0x0040, 0x1e54: 0x2119, 0x1e55: 0x0040, 0x1e56: 0x0040, 0x1e57: 0x20e9, -+ 0x1e58: 0x0040, 0x1e59: 0x2129, 0x1e5a: 0x0040, 0x1e5b: 0x2149, 0x1e5c: 0x0040, 0x1e5d: 0x1689, -+ 0x1e5e: 0x0040, 0x1e5f: 0x2599, 0x1e60: 0x0040, 0x1e61: 0x20b9, 0x1e62: 0x20d9, 0x1e63: 0x0040, -+ 0x1e64: 0x2181, 0x1e65: 0x0040, 0x1e66: 0x0040, 0x1e67: 0x20e1, 0x1e68: 0x2131, 0x1e69: 0x2191, -+ 0x1e6a: 0x2161, 0x1e6b: 0x0040, 0x1e6c: 0x2171, 0x1e6d: 0x2179, 0x1e6e: 0x2111, 0x1e6f: 0x2141, -+ 0x1e70: 0x2151, 0x1e71: 0x2121, 0x1e72: 0x2159, 0x1e73: 0x0040, 0x1e74: 0x2119, 0x1e75: 0x20c9, -+ 0x1e76: 0x20d1, 0x1e77: 0x20e9, 0x1e78: 0x0040, 0x1e79: 0x2129, 0x1e7a: 0x2139, 0x1e7b: 0x2149, -+ 0x1e7c: 0x2589, 0x1e7d: 0x0040, 0x1e7e: 0x2591, 0x1e7f: 0x0040, -+ // Block 0x7a, offset 0x1e80 -+ 0x1e80: 0x20b1, 0x1e81: 0x20b9, 0x1e82: 0x20d9, 0x1e83: 0x20f1, 0x1e84: 0x2181, 0x1e85: 0x2189, -+ 0x1e86: 0x2109, 0x1e87: 0x20e1, 0x1e88: 0x2131, 0x1e89: 0x2191, 0x1e8a: 0x0040, 0x1e8b: 0x2169, -+ 0x1e8c: 0x2171, 0x1e8d: 0x2179, 0x1e8e: 0x2111, 0x1e8f: 0x2141, 0x1e90: 0x2151, 0x1e91: 0x2121, -+ 0x1e92: 0x2159, 0x1e93: 0x2101, 0x1e94: 0x2119, 0x1e95: 0x20c9, 0x1e96: 0x20d1, 0x1e97: 0x20e9, -+ 0x1e98: 0x20f9, 0x1e99: 0x2129, 0x1e9a: 0x2139, 0x1e9b: 0x2149, 0x1e9c: 0x0040, 0x1e9d: 0x0040, -+ 0x1e9e: 0x0040, 0x1e9f: 0x0040, 0x1ea0: 0x0040, 0x1ea1: 0x20b9, 0x1ea2: 0x20d9, 0x1ea3: 0x20f1, -+ 0x1ea4: 0x0040, 0x1ea5: 0x2189, 0x1ea6: 0x2109, 0x1ea7: 0x20e1, 0x1ea8: 0x2131, 0x1ea9: 0x2191, -+ 0x1eaa: 0x0040, 0x1eab: 0x2169, 0x1eac: 0x2171, 0x1ead: 0x2179, 0x1eae: 0x2111, 0x1eaf: 0x2141, -+ 0x1eb0: 0x2151, 0x1eb1: 0x2121, 0x1eb2: 0x2159, 0x1eb3: 0x2101, 0x1eb4: 0x2119, 0x1eb5: 0x20c9, -+ 0x1eb6: 0x20d1, 0x1eb7: 0x20e9, 0x1eb8: 0x20f9, 0x1eb9: 0x2129, 0x1eba: 0x2139, 0x1ebb: 0x2149, -+ 0x1ebc: 0x0040, 0x1ebd: 0x0040, 0x1ebe: 0x0040, 0x1ebf: 0x0040, -+ // Block 0x7b, offset 0x1ec0 -+ 0x1ec0: 0x0040, 0x1ec1: 0x25a2, 0x1ec2: 0x25aa, 0x1ec3: 0x25b2, 0x1ec4: 0x25ba, 0x1ec5: 0x25c2, -+ 0x1ec6: 0x25ca, 0x1ec7: 0x25d2, 0x1ec8: 0x25da, 0x1ec9: 0x25e2, 0x1eca: 0x25ea, 0x1ecb: 0x0018, -+ 0x1ecc: 0x0018, 0x1ecd: 0x0018, 0x1ece: 0x0018, 0x1ecf: 0x0018, 0x1ed0: 0x25f2, 0x1ed1: 0x25fa, -+ 0x1ed2: 0x2602, 0x1ed3: 0x260a, 0x1ed4: 0x2612, 0x1ed5: 0x261a, 0x1ed6: 0x2622, 0x1ed7: 0x262a, -+ 0x1ed8: 0x2632, 0x1ed9: 0x263a, 0x1eda: 0x2642, 0x1edb: 0x264a, 0x1edc: 0x2652, 0x1edd: 0x265a, -+ 0x1ede: 0x2662, 0x1edf: 0x266a, 0x1ee0: 0x2672, 0x1ee1: 0x267a, 0x1ee2: 0x2682, 0x1ee3: 0x268a, -+ 0x1ee4: 0x2692, 0x1ee5: 0x269a, 0x1ee6: 0x26a2, 0x1ee7: 0x26aa, 0x1ee8: 0x26b2, 0x1ee9: 0x26ba, -+ 0x1eea: 0x26c1, 0x1eeb: 0x03d9, 0x1eec: 0x00b9, 0x1eed: 0x1239, 0x1eee: 0x26c9, 0x1eef: 0x0018, -+ 0x1ef0: 0x0019, 0x1ef1: 0x02e9, 0x1ef2: 0x03d9, 0x1ef3: 0x02f1, 0x1ef4: 0x02f9, 0x1ef5: 0x03f1, -+ 0x1ef6: 0x0309, 0x1ef7: 0x00a9, 0x1ef8: 0x0311, 0x1ef9: 0x00b1, 0x1efa: 0x0319, 0x1efb: 0x0101, -+ 0x1efc: 0x0321, 0x1efd: 0x0329, 0x1efe: 0x0051, 0x1eff: 0x0339, -+ // Block 0x7c, offset 0x1f00 -+ 0x1f00: 0x0751, 0x1f01: 0x00b9, 0x1f02: 0x0089, 0x1f03: 0x0341, 0x1f04: 0x0349, 0x1f05: 0x0391, -+ 0x1f06: 0x00c1, 0x1f07: 0x0109, 0x1f08: 0x00c9, 0x1f09: 0x04b1, 0x1f0a: 0x26d1, 0x1f0b: 0x11f9, -+ 0x1f0c: 0x26d9, 0x1f0d: 0x04d9, 0x1f0e: 0x26e1, 0x1f0f: 0x26e9, 0x1f10: 0x0018, 0x1f11: 0x0018, -+ 0x1f12: 0x0018, 0x1f13: 0x0018, 0x1f14: 0x0018, 0x1f15: 0x0018, 0x1f16: 0x0018, 0x1f17: 0x0018, -+ 0x1f18: 0x0018, 0x1f19: 0x0018, 0x1f1a: 0x0018, 0x1f1b: 0x0018, 0x1f1c: 0x0018, 0x1f1d: 0x0018, -+ 0x1f1e: 0x0018, 0x1f1f: 0x0018, 0x1f20: 0x0018, 0x1f21: 0x0018, 0x1f22: 0x0018, 0x1f23: 0x0018, -+ 0x1f24: 0x0018, 0x1f25: 0x0018, 0x1f26: 0x0018, 0x1f27: 0x0018, 0x1f28: 0x0018, 0x1f29: 0x0018, -+ 0x1f2a: 0x26f1, 0x1f2b: 0x26f9, 0x1f2c: 0x2701, 0x1f2d: 0x0018, 0x1f2e: 0x0018, 0x1f2f: 0x0018, -+ 0x1f30: 0x0018, 0x1f31: 0x0018, 0x1f32: 0x0018, 0x1f33: 0x0018, 0x1f34: 0x0018, 0x1f35: 0x0018, -+ 0x1f36: 0x0018, 0x1f37: 0x0018, 0x1f38: 0x0018, 0x1f39: 0x0018, 0x1f3a: 0x0018, 0x1f3b: 0x0018, -+ 0x1f3c: 0x0018, 0x1f3d: 0x0018, 0x1f3e: 0x0018, 0x1f3f: 0x0018, -+ // Block 0x7d, offset 0x1f40 -+ 0x1f40: 0x2711, 0x1f41: 0x2719, 0x1f42: 0x2721, 0x1f43: 0x0040, 0x1f44: 0x0040, 0x1f45: 0x0040, -+ 0x1f46: 0x0040, 0x1f47: 0x0040, 0x1f48: 0x0040, 0x1f49: 0x0040, 0x1f4a: 0x0040, 0x1f4b: 0x0040, -+ 0x1f4c: 0x0040, 0x1f4d: 0x0040, 0x1f4e: 0x0040, 0x1f4f: 0x0040, 0x1f50: 0x2729, 0x1f51: 0x2731, -+ 0x1f52: 0x2739, 0x1f53: 0x2741, 0x1f54: 0x2749, 0x1f55: 0x2751, 0x1f56: 0x2759, 0x1f57: 0x2761, -+ 0x1f58: 0x2769, 0x1f59: 0x2771, 0x1f5a: 0x2779, 0x1f5b: 0x2781, 0x1f5c: 0x2789, 0x1f5d: 0x2791, -+ 0x1f5e: 0x2799, 0x1f5f: 0x27a1, 0x1f60: 0x27a9, 0x1f61: 0x27b1, 0x1f62: 0x27b9, 0x1f63: 0x27c1, -+ 0x1f64: 0x27c9, 0x1f65: 0x27d1, 0x1f66: 0x27d9, 0x1f67: 0x27e1, 0x1f68: 0x27e9, 0x1f69: 0x27f1, -+ 0x1f6a: 0x27f9, 0x1f6b: 0x2801, 0x1f6c: 0x2809, 0x1f6d: 0x2811, 0x1f6e: 0x2819, 0x1f6f: 0x2821, -+ 0x1f70: 0x2829, 0x1f71: 0x2831, 0x1f72: 0x2839, 0x1f73: 0x2841, 0x1f74: 0x2849, 0x1f75: 0x2851, -+ 0x1f76: 0x2859, 0x1f77: 0x2861, 0x1f78: 0x2869, 0x1f79: 0x2871, 0x1f7a: 0x2879, 0x1f7b: 0x2881, -+ 0x1f7c: 0x0040, 0x1f7d: 0x0040, 0x1f7e: 0x0040, 0x1f7f: 0x0040, -+ // Block 0x7e, offset 0x1f80 -+ 0x1f80: 0x28e1, 0x1f81: 0x28e9, 0x1f82: 0x28f1, 0x1f83: 0x8cbd, 0x1f84: 0x28f9, 0x1f85: 0x2901, -+ 0x1f86: 0x2909, 0x1f87: 0x2911, 0x1f88: 0x2919, 0x1f89: 0x2921, 0x1f8a: 0x2929, 0x1f8b: 0x2931, -+ 0x1f8c: 0x2939, 0x1f8d: 0x8cdd, 0x1f8e: 0x2941, 0x1f8f: 0x2949, 0x1f90: 0x2951, 0x1f91: 0x2959, -+ 0x1f92: 0x8cfd, 0x1f93: 0x2961, 0x1f94: 0x2969, 0x1f95: 0x2799, 0x1f96: 0x8d1d, 0x1f97: 0x2971, -+ 0x1f98: 0x2979, 0x1f99: 0x2981, 0x1f9a: 0x2989, 0x1f9b: 0x2991, 0x1f9c: 0x8d3d, 0x1f9d: 0x2999, -+ 0x1f9e: 0x29a1, 0x1f9f: 0x29a9, 0x1fa0: 0x29b1, 0x1fa1: 0x29b9, 0x1fa2: 0x2871, 0x1fa3: 0x29c1, -+ 0x1fa4: 0x29c9, 0x1fa5: 0x29d1, 0x1fa6: 0x29d9, 0x1fa7: 0x29e1, 0x1fa8: 0x29e9, 0x1fa9: 0x29f1, -+ 0x1faa: 0x29f9, 0x1fab: 0x2a01, 0x1fac: 0x2a09, 0x1fad: 0x2a11, 0x1fae: 0x2a19, 0x1faf: 0x2a21, -+ 0x1fb0: 0x2a29, 0x1fb1: 0x2a31, 0x1fb2: 0x2a31, 0x1fb3: 0x2a31, 0x1fb4: 0x8d5d, 0x1fb5: 0x2a39, -+ 0x1fb6: 0x2a41, 0x1fb7: 0x2a49, 0x1fb8: 0x8d7d, 0x1fb9: 0x2a51, 0x1fba: 0x2a59, 0x1fbb: 0x2a61, -+ 0x1fbc: 0x2a69, 0x1fbd: 0x2a71, 0x1fbe: 0x2a79, 0x1fbf: 0x2a81, -+ // Block 0x7f, offset 0x1fc0 -+ 0x1fc0: 0x2a89, 0x1fc1: 0x2a91, 0x1fc2: 0x2a99, 0x1fc3: 0x2aa1, 0x1fc4: 0x2aa9, 0x1fc5: 0x2ab1, -+ 0x1fc6: 0x2ab1, 0x1fc7: 0x2ab9, 0x1fc8: 0x2ac1, 0x1fc9: 0x2ac9, 0x1fca: 0x2ad1, 0x1fcb: 0x2ad9, -+ 0x1fcc: 0x2ae1, 0x1fcd: 0x2ae9, 0x1fce: 0x2af1, 0x1fcf: 0x2af9, 0x1fd0: 0x2b01, 0x1fd1: 0x2b09, -+ 0x1fd2: 0x2b11, 0x1fd3: 0x2b19, 0x1fd4: 0x2b21, 0x1fd5: 0x2b29, 0x1fd6: 0x2b31, 0x1fd7: 0x2b39, -+ 0x1fd8: 0x2b41, 0x1fd9: 0x8d9d, 0x1fda: 0x2b49, 0x1fdb: 0x2b51, 0x1fdc: 0x2b59, 0x1fdd: 0x2751, -+ 0x1fde: 0x2b61, 0x1fdf: 0x2b69, 0x1fe0: 0x8dbd, 0x1fe1: 0x8ddd, 0x1fe2: 0x2b71, 0x1fe3: 0x2b79, -+ 0x1fe4: 0x2b81, 0x1fe5: 0x2b89, 0x1fe6: 0x2b91, 0x1fe7: 0x2b99, 0x1fe8: 0x2040, 0x1fe9: 0x2ba1, -+ 0x1fea: 0x2ba9, 0x1feb: 0x2ba9, 0x1fec: 0x8dfd, 0x1fed: 0x2bb1, 0x1fee: 0x2bb9, 0x1fef: 0x2bc1, -+ 0x1ff0: 0x2bc9, 0x1ff1: 0x8e1d, 0x1ff2: 0x2bd1, 0x1ff3: 0x2bd9, 0x1ff4: 0x2040, 0x1ff5: 0x2be1, -+ 0x1ff6: 0x2be9, 0x1ff7: 0x2bf1, 0x1ff8: 0x2bf9, 0x1ff9: 0x2c01, 0x1ffa: 0x2c09, 0x1ffb: 0x8e3d, -+ 0x1ffc: 0x2c11, 0x1ffd: 0x8e5d, 0x1ffe: 0x2c19, 0x1fff: 0x2c21, -+ // Block 0x80, offset 0x2000 -+ 0x2000: 0x2c29, 0x2001: 0x2c31, 0x2002: 0x2c39, 0x2003: 0x2c41, 0x2004: 0x2c49, 0x2005: 0x2c51, -+ 0x2006: 0x2c59, 0x2007: 0x2c61, 0x2008: 0x2c69, 0x2009: 0x8e7d, 0x200a: 0x2c71, 0x200b: 0x2c79, -+ 0x200c: 0x2c81, 0x200d: 0x2c89, 0x200e: 0x2c91, 0x200f: 0x8e9d, 0x2010: 0x2c99, 0x2011: 0x8ebd, -+ 0x2012: 0x8edd, 0x2013: 0x2ca1, 0x2014: 0x2ca9, 0x2015: 0x2ca9, 0x2016: 0x2cb1, 0x2017: 0x8efd, -+ 0x2018: 0x8f1d, 0x2019: 0x2cb9, 0x201a: 0x2cc1, 0x201b: 0x2cc9, 0x201c: 0x2cd1, 0x201d: 0x2cd9, -+ 0x201e: 0x2ce1, 0x201f: 0x2ce9, 0x2020: 0x2cf1, 0x2021: 0x2cf9, 0x2022: 0x2d01, 0x2023: 0x2d09, -+ 0x2024: 0x8f3d, 0x2025: 0x2d11, 0x2026: 0x2d19, 0x2027: 0x2d21, 0x2028: 0x2d29, 0x2029: 0x2d21, -+ 0x202a: 0x2d31, 0x202b: 0x2d39, 0x202c: 0x2d41, 0x202d: 0x2d49, 0x202e: 0x2d51, 0x202f: 0x2d59, -+ 0x2030: 0x2d61, 0x2031: 0x2d69, 0x2032: 0x2d71, 0x2033: 0x2d79, 0x2034: 0x2d81, 0x2035: 0x2d89, -+ 0x2036: 0x2d91, 0x2037: 0x2d99, 0x2038: 0x8f5d, 0x2039: 0x2da1, 0x203a: 0x2da9, 0x203b: 0x2db1, -+ 0x203c: 0x2db9, 0x203d: 0x2dc1, 0x203e: 0x8f7d, 0x203f: 0x2dc9, -+ // Block 0x81, offset 0x2040 -+ 0x2040: 0x2dd1, 0x2041: 0x2dd9, 0x2042: 0x2de1, 0x2043: 0x2de9, 0x2044: 0x2df1, 0x2045: 0x2df9, -+ 0x2046: 0x2e01, 0x2047: 0x2e09, 0x2048: 0x2e11, 0x2049: 0x2e19, 0x204a: 0x8f9d, 0x204b: 0x2e21, -+ 0x204c: 0x2e29, 0x204d: 0x2e31, 0x204e: 0x2e39, 0x204f: 0x2e41, 0x2050: 0x2e49, 0x2051: 0x2e51, -+ 0x2052: 0x2e59, 0x2053: 0x2e61, 0x2054: 0x2e69, 0x2055: 0x2e71, 0x2056: 0x2e79, 0x2057: 0x2e81, -+ 0x2058: 0x2e89, 0x2059: 0x2e91, 0x205a: 0x2e99, 0x205b: 0x2ea1, 0x205c: 0x2ea9, 0x205d: 0x8fbd, -+ 0x205e: 0x2eb1, 0x205f: 0x2eb9, 0x2060: 0x2ec1, 0x2061: 0x2ec9, 0x2062: 0x2ed1, 0x2063: 0x8fdd, -+ 0x2064: 0x2ed9, 0x2065: 0x2ee1, 0x2066: 0x2ee9, 0x2067: 0x2ef1, 0x2068: 0x2ef9, 0x2069: 0x2f01, -+ 0x206a: 0x2f09, 0x206b: 0x2f11, 0x206c: 0x7f0d, 0x206d: 0x2f19, 0x206e: 0x2f21, 0x206f: 0x2f29, -+ 0x2070: 0x8ffd, 0x2071: 0x2f31, 0x2072: 0x2f39, 0x2073: 0x2f41, 0x2074: 0x2f49, 0x2075: 0x2f51, -+ 0x2076: 0x2f59, 0x2077: 0x901d, 0x2078: 0x903d, 0x2079: 0x905d, 0x207a: 0x2f61, 0x207b: 0x907d, -+ 0x207c: 0x2f69, 0x207d: 0x2f71, 0x207e: 0x2f79, 0x207f: 0x2f81, -+ // Block 0x82, offset 0x2080 -+ 0x2080: 0x2f89, 0x2081: 0x2f91, 0x2082: 0x2f99, 0x2083: 0x2fa1, 0x2084: 0x2fa9, 0x2085: 0x2fb1, -+ 0x2086: 0x909d, 0x2087: 0x2fb9, 0x2088: 0x2fc1, 0x2089: 0x2fc9, 0x208a: 0x2fd1, 0x208b: 0x2fd9, -+ 0x208c: 0x2fe1, 0x208d: 0x90bd, 0x208e: 0x2fe9, 0x208f: 0x2ff1, 0x2090: 0x90dd, 0x2091: 0x90fd, -+ 0x2092: 0x2ff9, 0x2093: 0x3001, 0x2094: 0x3009, 0x2095: 0x3011, 0x2096: 0x3019, 0x2097: 0x3021, -+ 0x2098: 0x3029, 0x2099: 0x3031, 0x209a: 0x3039, 0x209b: 0x911d, 0x209c: 0x3041, 0x209d: 0x913d, -+ 0x209e: 0x3049, 0x209f: 0x2040, 0x20a0: 0x3051, 0x20a1: 0x3059, 0x20a2: 0x3061, 0x20a3: 0x915d, -+ 0x20a4: 0x3069, 0x20a5: 0x3071, 0x20a6: 0x917d, 0x20a7: 0x919d, 0x20a8: 0x3079, 0x20a9: 0x3081, -+ 0x20aa: 0x3089, 0x20ab: 0x3091, 0x20ac: 0x3099, 0x20ad: 0x3099, 0x20ae: 0x30a1, 0x20af: 0x30a9, -+ 0x20b0: 0x30b1, 0x20b1: 0x30b9, 0x20b2: 0x30c1, 0x20b3: 0x30c9, 0x20b4: 0x30d1, 0x20b5: 0x91bd, -+ 0x20b6: 0x30d9, 0x20b7: 0x91dd, 0x20b8: 0x30e1, 0x20b9: 0x91fd, 0x20ba: 0x30e9, 0x20bb: 0x921d, -+ 0x20bc: 0x923d, 0x20bd: 0x925d, 0x20be: 0x30f1, 0x20bf: 0x30f9, -+ // Block 0x83, offset 0x20c0 -+ 0x20c0: 0x3101, 0x20c1: 0x927d, 0x20c2: 0x929d, 0x20c3: 0x92bd, 0x20c4: 0x92dd, 0x20c5: 0x3109, -+ 0x20c6: 0x3111, 0x20c7: 0x3111, 0x20c8: 0x3119, 0x20c9: 0x3121, 0x20ca: 0x3129, 0x20cb: 0x3131, -+ 0x20cc: 0x3139, 0x20cd: 0x92fd, 0x20ce: 0x3141, 0x20cf: 0x3149, 0x20d0: 0x3151, 0x20d1: 0x3159, -+ 0x20d2: 0x931d, 0x20d3: 0x3161, 0x20d4: 0x933d, 0x20d5: 0x935d, 0x20d6: 0x3169, 0x20d7: 0x3171, -+ 0x20d8: 0x3179, 0x20d9: 0x3181, 0x20da: 0x3189, 0x20db: 0x3191, 0x20dc: 0x937d, 0x20dd: 0x939d, -+ 0x20de: 0x93bd, 0x20df: 0x2040, 0x20e0: 0x3199, 0x20e1: 0x93dd, 0x20e2: 0x31a1, 0x20e3: 0x31a9, -+ 0x20e4: 0x31b1, 0x20e5: 0x93fd, 0x20e6: 0x31b9, 0x20e7: 0x31c1, 0x20e8: 0x31c9, 0x20e9: 0x31d1, -+ 0x20ea: 0x31d9, 0x20eb: 0x941d, 0x20ec: 0x31e1, 0x20ed: 0x31e9, 0x20ee: 0x31f1, 0x20ef: 0x31f9, -+ 0x20f0: 0x3201, 0x20f1: 0x3209, 0x20f2: 0x943d, 0x20f3: 0x945d, 0x20f4: 0x3211, 0x20f5: 0x947d, -+ 0x20f6: 0x3219, 0x20f7: 0x949d, 0x20f8: 0x3221, 0x20f9: 0x3229, 0x20fa: 0x3231, 0x20fb: 0x94bd, -+ 0x20fc: 0x94dd, 0x20fd: 0x3239, 0x20fe: 0x94fd, 0x20ff: 0x3241, -+ // Block 0x84, offset 0x2100 -+ 0x2100: 0x951d, 0x2101: 0x3249, 0x2102: 0x3251, 0x2103: 0x3259, 0x2104: 0x3261, 0x2105: 0x3269, -+ 0x2106: 0x3271, 0x2107: 0x953d, 0x2108: 0x955d, 0x2109: 0x957d, 0x210a: 0x959d, 0x210b: 0x2ca1, -+ 0x210c: 0x3279, 0x210d: 0x3281, 0x210e: 0x3289, 0x210f: 0x3291, 0x2110: 0x3299, 0x2111: 0x32a1, -+ 0x2112: 0x32a9, 0x2113: 0x32b1, 0x2114: 0x32b9, 0x2115: 0x32c1, 0x2116: 0x32c9, 0x2117: 0x95bd, -+ 0x2118: 0x32d1, 0x2119: 0x32d9, 0x211a: 0x32e1, 0x211b: 0x32e9, 0x211c: 0x32f1, 0x211d: 0x32f9, -+ 0x211e: 0x3301, 0x211f: 0x3309, 0x2120: 0x3311, 0x2121: 0x3319, 0x2122: 0x3321, 0x2123: 0x3329, -+ 0x2124: 0x95dd, 0x2125: 0x95fd, 0x2126: 0x961d, 0x2127: 0x3331, 0x2128: 0x3339, 0x2129: 0x3341, -+ 0x212a: 0x3349, 0x212b: 0x963d, 0x212c: 0x3351, 0x212d: 0x965d, 0x212e: 0x3359, 0x212f: 0x3361, -+ 0x2130: 0x967d, 0x2131: 0x969d, 0x2132: 0x3369, 0x2133: 0x3371, 0x2134: 0x3379, 0x2135: 0x3381, -+ 0x2136: 0x3389, 0x2137: 0x3391, 0x2138: 0x3399, 0x2139: 0x33a1, 0x213a: 0x33a9, 0x213b: 0x33b1, -+ 0x213c: 0x33b9, 0x213d: 0x33c1, 0x213e: 0x33c9, 0x213f: 0x2040, -+ // Block 0x85, offset 0x2140 -+ 0x2140: 0x33d1, 0x2141: 0x33d9, 0x2142: 0x33e1, 0x2143: 0x33e9, 0x2144: 0x33f1, 0x2145: 0x96bd, -+ 0x2146: 0x33f9, 0x2147: 0x3401, 0x2148: 0x3409, 0x2149: 0x3411, 0x214a: 0x3419, 0x214b: 0x96dd, -+ 0x214c: 0x96fd, 0x214d: 0x3421, 0x214e: 0x3429, 0x214f: 0x3431, 0x2150: 0x3439, 0x2151: 0x3441, -+ 0x2152: 0x3449, 0x2153: 0x971d, 0x2154: 0x3451, 0x2155: 0x3459, 0x2156: 0x3461, 0x2157: 0x3469, -+ 0x2158: 0x973d, 0x2159: 0x975d, 0x215a: 0x3471, 0x215b: 0x3479, 0x215c: 0x3481, 0x215d: 0x977d, -+ 0x215e: 0x3489, 0x215f: 0x3491, 0x2160: 0x684d, 0x2161: 0x979d, 0x2162: 0x3499, 0x2163: 0x34a1, -+ 0x2164: 0x34a9, 0x2165: 0x97bd, 0x2166: 0x34b1, 0x2167: 0x34b9, 0x2168: 0x34c1, 0x2169: 0x34c9, -+ 0x216a: 0x34d1, 0x216b: 0x34d9, 0x216c: 0x34e1, 0x216d: 0x97dd, 0x216e: 0x34e9, 0x216f: 0x34f1, -+ 0x2170: 0x34f9, 0x2171: 0x97fd, 0x2172: 0x3501, 0x2173: 0x3509, 0x2174: 0x3511, 0x2175: 0x3519, -+ 0x2176: 0x7b6d, 0x2177: 0x981d, 0x2178: 0x3521, 0x2179: 0x3529, 0x217a: 0x3531, 0x217b: 0x983d, -+ 0x217c: 0x3539, 0x217d: 0x985d, 0x217e: 0x3541, 0x217f: 0x3541, -+ // Block 0x86, offset 0x2180 -+ 0x2180: 0x3549, 0x2181: 0x987d, 0x2182: 0x3551, 0x2183: 0x3559, 0x2184: 0x3561, 0x2185: 0x3569, -+ 0x2186: 0x3571, 0x2187: 0x3579, 0x2188: 0x3581, 0x2189: 0x989d, 0x218a: 0x3589, 0x218b: 0x3591, -+ 0x218c: 0x3599, 0x218d: 0x35a1, 0x218e: 0x35a9, 0x218f: 0x35b1, 0x2190: 0x98bd, 0x2191: 0x35b9, -+ 0x2192: 0x98dd, 0x2193: 0x98fd, 0x2194: 0x991d, 0x2195: 0x35c1, 0x2196: 0x35c9, 0x2197: 0x35d1, -+ 0x2198: 0x35d9, 0x2199: 0x35e1, 0x219a: 0x35e9, 0x219b: 0x35f1, 0x219c: 0x35f9, 0x219d: 0x993d, -+ 0x219e: 0x0040, 0x219f: 0x0040, 0x21a0: 0x0040, 0x21a1: 0x0040, 0x21a2: 0x0040, 0x21a3: 0x0040, -+ 0x21a4: 0x0040, 0x21a5: 0x0040, 0x21a6: 0x0040, 0x21a7: 0x0040, 0x21a8: 0x0040, 0x21a9: 0x0040, -+ 0x21aa: 0x0040, 0x21ab: 0x0040, 0x21ac: 0x0040, 0x21ad: 0x0040, 0x21ae: 0x0040, 0x21af: 0x0040, -+ 0x21b0: 0x0040, 0x21b1: 0x0040, 0x21b2: 0x0040, 0x21b3: 0x0040, 0x21b4: 0x0040, 0x21b5: 0x0040, -+ 0x21b6: 0x0040, 0x21b7: 0x0040, 0x21b8: 0x0040, 0x21b9: 0x0040, 0x21ba: 0x0040, 0x21bb: 0x0040, -+ 0x21bc: 0x0040, 0x21bd: 0x0040, 0x21be: 0x0040, 0x21bf: 0x0040, -+} -+ -+// idnaIndex: 39 blocks, 2496 entries, 4992 bytes -+// Block 0 is the zero block. -+var idnaIndex = [2496]uint16{ -+ // Block 0x0, offset 0x0 -+ // Block 0x1, offset 0x40 -+ // Block 0x2, offset 0x80 -+ // Block 0x3, offset 0xc0 -+ 0xc2: 0x01, 0xc3: 0x85, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, -+ 0xc8: 0x06, 0xc9: 0x86, 0xca: 0x87, 0xcb: 0x07, 0xcc: 0x88, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, -+ 0xd0: 0x89, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x8a, 0xd6: 0x8b, 0xd7: 0x8c, -+ 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x8d, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x8e, 0xde: 0x8f, 0xdf: 0x90, -+ 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, -+ 0xe8: 0x07, 0xe9: 0x07, 0xea: 0x08, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x09, 0xee: 0x0a, 0xef: 0x0b, -+ 0xf0: 0x20, 0xf1: 0x21, 0xf2: 0x21, 0xf3: 0x23, 0xf4: 0x24, -+ // Block 0x4, offset 0x100 -+ 0x120: 0x91, 0x121: 0x13, 0x122: 0x14, 0x123: 0x92, 0x124: 0x93, 0x125: 0x15, 0x126: 0x16, 0x127: 0x17, -+ 0x128: 0x18, 0x129: 0x19, 0x12a: 0x1a, 0x12b: 0x1b, 0x12c: 0x1c, 0x12d: 0x1d, 0x12e: 0x1e, 0x12f: 0x94, -+ 0x130: 0x95, 0x131: 0x1f, 0x132: 0x20, 0x133: 0x21, 0x134: 0x96, 0x135: 0x22, 0x136: 0x97, 0x137: 0x98, -+ 0x138: 0x99, 0x139: 0x9a, 0x13a: 0x23, 0x13b: 0x9b, 0x13c: 0x9c, 0x13d: 0x24, 0x13e: 0x25, 0x13f: 0x9d, -+ // Block 0x5, offset 0x140 -+ 0x140: 0x9e, 0x141: 0x9f, 0x142: 0xa0, 0x143: 0xa1, 0x144: 0xa2, 0x145: 0xa3, 0x146: 0xa4, 0x147: 0xa5, -+ 0x148: 0xa6, 0x149: 0xa7, 0x14a: 0xa8, 0x14b: 0xa9, 0x14c: 0xaa, 0x14d: 0xab, 0x14e: 0xac, 0x14f: 0xad, -+ 0x150: 0xae, 0x151: 0xa6, 0x152: 0xa6, 0x153: 0xa6, 0x154: 0xa6, 0x155: 0xa6, 0x156: 0xa6, 0x157: 0xa6, -+ 0x158: 0xa6, 0x159: 0xaf, 0x15a: 0xb0, 0x15b: 0xb1, 0x15c: 0xb2, 0x15d: 0xb3, 0x15e: 0xb4, 0x15f: 0xb5, -+ 0x160: 0xb6, 0x161: 0xb7, 0x162: 0xb8, 0x163: 0xb9, 0x164: 0xba, 0x165: 0xbb, 0x166: 0xbc, 0x167: 0xbd, -+ 0x168: 0xbe, 0x169: 0xbf, 0x16a: 0xc0, 0x16b: 0xc1, 0x16c: 0xc2, 0x16d: 0xc3, 0x16e: 0xc4, 0x16f: 0xc5, -+ 0x170: 0xc6, 0x171: 0xc7, 0x172: 0xc8, 0x173: 0xc9, 0x174: 0x26, 0x175: 0x27, 0x176: 0x28, 0x177: 0x88, -+ 0x178: 0x29, 0x179: 0x29, 0x17a: 0x2a, 0x17b: 0x29, 0x17c: 0xca, 0x17d: 0x2b, 0x17e: 0x2c, 0x17f: 0x2d, -+ // Block 0x6, offset 0x180 -+ 0x180: 0x2e, 0x181: 0x2f, 0x182: 0x30, 0x183: 0xcb, 0x184: 0x31, 0x185: 0x32, 0x186: 0xcc, 0x187: 0xa2, -+ 0x188: 0xcd, 0x189: 0xce, 0x18a: 0xa2, 0x18b: 0xa2, 0x18c: 0xcf, 0x18d: 0xa2, 0x18e: 0xa2, 0x18f: 0xa2, -+ 0x190: 0xd0, 0x191: 0x33, 0x192: 0x34, 0x193: 0x35, 0x194: 0xa2, 0x195: 0xa2, 0x196: 0xa2, 0x197: 0xa2, -+ 0x198: 0xa2, 0x199: 0xa2, 0x19a: 0xa2, 0x19b: 0xa2, 0x19c: 0xa2, 0x19d: 0xa2, 0x19e: 0xa2, 0x19f: 0xa2, -+ 0x1a0: 0xa2, 0x1a1: 0xa2, 0x1a2: 0xa2, 0x1a3: 0xa2, 0x1a4: 0xa2, 0x1a5: 0xa2, 0x1a6: 0xa2, 0x1a7: 0xa2, -+ 0x1a8: 0xd1, 0x1a9: 0xd2, 0x1aa: 0xa2, 0x1ab: 0xd3, 0x1ac: 0xa2, 0x1ad: 0xd4, 0x1ae: 0xd5, 0x1af: 0xa2, -+ 0x1b0: 0xd6, 0x1b1: 0x36, 0x1b2: 0x29, 0x1b3: 0x37, 0x1b4: 0xd7, 0x1b5: 0xd8, 0x1b6: 0xd9, 0x1b7: 0xda, -+ 0x1b8: 0xdb, 0x1b9: 0xdc, 0x1ba: 0xdd, 0x1bb: 0xde, 0x1bc: 0xdf, 0x1bd: 0xe0, 0x1be: 0xe1, 0x1bf: 0x38, -+ // Block 0x7, offset 0x1c0 -+ 0x1c0: 0x39, 0x1c1: 0xe2, 0x1c2: 0xe3, 0x1c3: 0xe4, 0x1c4: 0xe5, 0x1c5: 0x3a, 0x1c6: 0x3b, 0x1c7: 0xe6, -+ 0x1c8: 0xe7, 0x1c9: 0x3c, 0x1ca: 0x3d, 0x1cb: 0x3e, 0x1cc: 0xe8, 0x1cd: 0xe9, 0x1ce: 0x3f, 0x1cf: 0x40, -+ 0x1d0: 0xa6, 0x1d1: 0xa6, 0x1d2: 0xa6, 0x1d3: 0xa6, 0x1d4: 0xa6, 0x1d5: 0xa6, 0x1d6: 0xa6, 0x1d7: 0xa6, -+ 0x1d8: 0xa6, 0x1d9: 0xa6, 0x1da: 0xa6, 0x1db: 0xa6, 0x1dc: 0xa6, 0x1dd: 0xa6, 0x1de: 0xa6, 0x1df: 0xa6, -+ 0x1e0: 0xa6, 0x1e1: 0xa6, 0x1e2: 0xa6, 0x1e3: 0xa6, 0x1e4: 0xa6, 0x1e5: 0xa6, 0x1e6: 0xa6, 0x1e7: 0xa6, -+ 0x1e8: 0xa6, 0x1e9: 0xa6, 0x1ea: 0xa6, 0x1eb: 0xa6, 0x1ec: 0xa6, 0x1ed: 0xa6, 0x1ee: 0xa6, 0x1ef: 0xa6, -+ 0x1f0: 0xa6, 0x1f1: 0xa6, 0x1f2: 0xa6, 0x1f3: 0xa6, 0x1f4: 0xa6, 0x1f5: 0xa6, 0x1f6: 0xa6, 0x1f7: 0xa6, -+ 0x1f8: 0xa6, 0x1f9: 0xa6, 0x1fa: 0xa6, 0x1fb: 0xa6, 0x1fc: 0xa6, 0x1fd: 0xa6, 0x1fe: 0xa6, 0x1ff: 0xa6, -+ // Block 0x8, offset 0x200 -+ 0x200: 0xa6, 0x201: 0xa6, 0x202: 0xa6, 0x203: 0xa6, 0x204: 0xa6, 0x205: 0xa6, 0x206: 0xa6, 0x207: 0xa6, -+ 0x208: 0xa6, 0x209: 0xa6, 0x20a: 0xa6, 0x20b: 0xa6, 0x20c: 0xa6, 0x20d: 0xa6, 0x20e: 0xa6, 0x20f: 0xa6, -+ 0x210: 0xa6, 0x211: 0xa6, 0x212: 0xa6, 0x213: 0xa6, 0x214: 0xa6, 0x215: 0xa6, 0x216: 0xa6, 0x217: 0xa6, -+ 0x218: 0xa6, 0x219: 0xa6, 0x21a: 0xa6, 0x21b: 0xa6, 0x21c: 0xa6, 0x21d: 0xa6, 0x21e: 0xa6, 0x21f: 0xa6, -+ 0x220: 0xa6, 0x221: 0xa6, 0x222: 0xa6, 0x223: 0xa6, 0x224: 0xa6, 0x225: 0xa6, 0x226: 0xa6, 0x227: 0xa6, -+ 0x228: 0xa6, 0x229: 0xa6, 0x22a: 0xa6, 0x22b: 0xa6, 0x22c: 0xa6, 0x22d: 0xa6, 0x22e: 0xa6, 0x22f: 0xa6, -+ 0x230: 0xa6, 0x231: 0xa6, 0x232: 0xa6, 0x233: 0xa6, 0x234: 0xa6, 0x235: 0xa6, 0x236: 0xa6, 0x237: 0xa2, -+ 0x238: 0xa6, 0x239: 0xa6, 0x23a: 0xa6, 0x23b: 0xa6, 0x23c: 0xa6, 0x23d: 0xa6, 0x23e: 0xa6, 0x23f: 0xa6, -+ // Block 0x9, offset 0x240 -+ 0x240: 0xa6, 0x241: 0xa6, 0x242: 0xa6, 0x243: 0xa6, 0x244: 0xa6, 0x245: 0xa6, 0x246: 0xa6, 0x247: 0xa6, -+ 0x248: 0xa6, 0x249: 0xa6, 0x24a: 0xa6, 0x24b: 0xa6, 0x24c: 0xa6, 0x24d: 0xa6, 0x24e: 0xa6, 0x24f: 0xa6, -+ 0x250: 0xa6, 0x251: 0xa6, 0x252: 0xa6, 0x253: 0xa6, 0x254: 0xa6, 0x255: 0xa6, 0x256: 0xa6, 0x257: 0xa6, -+ 0x258: 0xa6, 0x259: 0xa6, 0x25a: 0xa6, 0x25b: 0xa6, 0x25c: 0xa6, 0x25d: 0xa6, 0x25e: 0xa6, 0x25f: 0xa6, -+ 0x260: 0xa6, 0x261: 0xa6, 0x262: 0xa6, 0x263: 0xa6, 0x264: 0xa6, 0x265: 0xa6, 0x266: 0xa6, 0x267: 0xa6, -+ 0x268: 0xa6, 0x269: 0xa6, 0x26a: 0xa6, 0x26b: 0xa6, 0x26c: 0xa6, 0x26d: 0xa6, 0x26e: 0xa6, 0x26f: 0xa6, -+ 0x270: 0xa6, 0x271: 0xa6, 0x272: 0xa6, 0x273: 0xa6, 0x274: 0xa6, 0x275: 0xa6, 0x276: 0xa6, 0x277: 0xa6, -+ 0x278: 0xa6, 0x279: 0xa6, 0x27a: 0xa6, 0x27b: 0xa6, 0x27c: 0xa6, 0x27d: 0xa6, 0x27e: 0xa6, 0x27f: 0xa6, -+ // Block 0xa, offset 0x280 -+ 0x280: 0xa6, 0x281: 0xa6, 0x282: 0xa6, 0x283: 0xa6, 0x284: 0xa6, 0x285: 0xa6, 0x286: 0xa6, 0x287: 0xa6, -+ 0x288: 0xa6, 0x289: 0xa6, 0x28a: 0xa6, 0x28b: 0xa6, 0x28c: 0xa6, 0x28d: 0xa6, 0x28e: 0xa6, 0x28f: 0xa6, -+ 0x290: 0xa6, 0x291: 0xa6, 0x292: 0xea, 0x293: 0xeb, 0x294: 0xa6, 0x295: 0xa6, 0x296: 0xa6, 0x297: 0xa6, -+ 0x298: 0xec, 0x299: 0x41, 0x29a: 0x42, 0x29b: 0xed, 0x29c: 0x43, 0x29d: 0x44, 0x29e: 0x45, 0x29f: 0x46, -+ 0x2a0: 0xee, 0x2a1: 0xef, 0x2a2: 0xf0, 0x2a3: 0xf1, 0x2a4: 0xf2, 0x2a5: 0xf3, 0x2a6: 0xf4, 0x2a7: 0xf5, -+ 0x2a8: 0xf6, 0x2a9: 0xf7, 0x2aa: 0xf8, 0x2ab: 0xf9, 0x2ac: 0xfa, 0x2ad: 0xfb, 0x2ae: 0xfc, 0x2af: 0xfd, -+ 0x2b0: 0xa6, 0x2b1: 0xa6, 0x2b2: 0xa6, 0x2b3: 0xa6, 0x2b4: 0xa6, 0x2b5: 0xa6, 0x2b6: 0xa6, 0x2b7: 0xa6, -+ 0x2b8: 0xa6, 0x2b9: 0xa6, 0x2ba: 0xa6, 0x2bb: 0xa6, 0x2bc: 0xa6, 0x2bd: 0xa6, 0x2be: 0xa6, 0x2bf: 0xa6, -+ // Block 0xb, offset 0x2c0 -+ 0x2c0: 0xa6, 0x2c1: 0xa6, 0x2c2: 0xa6, 0x2c3: 0xa6, 0x2c4: 0xa6, 0x2c5: 0xa6, 0x2c6: 0xa6, 0x2c7: 0xa6, -+ 0x2c8: 0xa6, 0x2c9: 0xa6, 0x2ca: 0xa6, 0x2cb: 0xa6, 0x2cc: 0xa6, 0x2cd: 0xa6, 0x2ce: 0xa6, 0x2cf: 0xa6, -+ 0x2d0: 0xa6, 0x2d1: 0xa6, 0x2d2: 0xa6, 0x2d3: 0xa6, 0x2d4: 0xa6, 0x2d5: 0xa6, 0x2d6: 0xa6, 0x2d7: 0xa6, -+ 0x2d8: 0xa6, 0x2d9: 0xa6, 0x2da: 0xa6, 0x2db: 0xa6, 0x2dc: 0xa6, 0x2dd: 0xa6, 0x2de: 0xfe, 0x2df: 0xff, -+ // Block 0xc, offset 0x300 -+ 0x300: 0x100, 0x301: 0x100, 0x302: 0x100, 0x303: 0x100, 0x304: 0x100, 0x305: 0x100, 0x306: 0x100, 0x307: 0x100, -+ 0x308: 0x100, 0x309: 0x100, 0x30a: 0x100, 0x30b: 0x100, 0x30c: 0x100, 0x30d: 0x100, 0x30e: 0x100, 0x30f: 0x100, -+ 0x310: 0x100, 0x311: 0x100, 0x312: 0x100, 0x313: 0x100, 0x314: 0x100, 0x315: 0x100, 0x316: 0x100, 0x317: 0x100, -+ 0x318: 0x100, 0x319: 0x100, 0x31a: 0x100, 0x31b: 0x100, 0x31c: 0x100, 0x31d: 0x100, 0x31e: 0x100, 0x31f: 0x100, -+ 0x320: 0x100, 0x321: 0x100, 0x322: 0x100, 0x323: 0x100, 0x324: 0x100, 0x325: 0x100, 0x326: 0x100, 0x327: 0x100, -+ 0x328: 0x100, 0x329: 0x100, 0x32a: 0x100, 0x32b: 0x100, 0x32c: 0x100, 0x32d: 0x100, 0x32e: 0x100, 0x32f: 0x100, -+ 0x330: 0x100, 0x331: 0x100, 0x332: 0x100, 0x333: 0x100, 0x334: 0x100, 0x335: 0x100, 0x336: 0x100, 0x337: 0x100, -+ 0x338: 0x100, 0x339: 0x100, 0x33a: 0x100, 0x33b: 0x100, 0x33c: 0x100, 0x33d: 0x100, 0x33e: 0x100, 0x33f: 0x100, -+ // Block 0xd, offset 0x340 -+ 0x340: 0x100, 0x341: 0x100, 0x342: 0x100, 0x343: 0x100, 0x344: 0x100, 0x345: 0x100, 0x346: 0x100, 0x347: 0x100, -+ 0x348: 0x100, 0x349: 0x100, 0x34a: 0x100, 0x34b: 0x100, 0x34c: 0x100, 0x34d: 0x100, 0x34e: 0x100, 0x34f: 0x100, -+ 0x350: 0x100, 0x351: 0x100, 0x352: 0x100, 0x353: 0x100, 0x354: 0x100, 0x355: 0x100, 0x356: 0x100, 0x357: 0x100, -+ 0x358: 0x100, 0x359: 0x100, 0x35a: 0x100, 0x35b: 0x100, 0x35c: 0x100, 0x35d: 0x100, 0x35e: 0x100, 0x35f: 0x100, -+ 0x360: 0x100, 0x361: 0x100, 0x362: 0x100, 0x363: 0x100, 0x364: 0x101, 0x365: 0x102, 0x366: 0x103, 0x367: 0x104, -+ 0x368: 0x47, 0x369: 0x105, 0x36a: 0x106, 0x36b: 0x48, 0x36c: 0x49, 0x36d: 0x4a, 0x36e: 0x4b, 0x36f: 0x4c, -+ 0x370: 0x107, 0x371: 0x4d, 0x372: 0x4e, 0x373: 0x4f, 0x374: 0x50, 0x375: 0x51, 0x376: 0x108, 0x377: 0x52, -+ 0x378: 0x53, 0x379: 0x54, 0x37a: 0x55, 0x37b: 0x56, 0x37c: 0x57, 0x37d: 0x58, 0x37e: 0x59, 0x37f: 0x5a, -+ // Block 0xe, offset 0x380 -+ 0x380: 0x109, 0x381: 0x10a, 0x382: 0xa6, 0x383: 0x10b, 0x384: 0x10c, 0x385: 0xa2, 0x386: 0x10d, 0x387: 0x10e, -+ 0x388: 0x100, 0x389: 0x100, 0x38a: 0x10f, 0x38b: 0x110, 0x38c: 0x111, 0x38d: 0x112, 0x38e: 0x113, 0x38f: 0x114, -+ 0x390: 0x115, 0x391: 0xa6, 0x392: 0x116, 0x393: 0x117, 0x394: 0x118, 0x395: 0x5b, 0x396: 0x5c, 0x397: 0x100, -+ 0x398: 0xa6, 0x399: 0xa6, 0x39a: 0xa6, 0x39b: 0xa6, 0x39c: 0x119, 0x39d: 0x11a, 0x39e: 0x5d, 0x39f: 0x100, -+ 0x3a0: 0x11b, 0x3a1: 0x11c, 0x3a2: 0x11d, 0x3a3: 0x11e, 0x3a4: 0x11f, 0x3a5: 0x100, 0x3a6: 0x120, 0x3a7: 0x121, -+ 0x3a8: 0x122, 0x3a9: 0x123, 0x3aa: 0x124, 0x3ab: 0x5e, 0x3ac: 0x125, 0x3ad: 0x126, 0x3ae: 0x5f, 0x3af: 0x100, -+ 0x3b0: 0x127, 0x3b1: 0x128, 0x3b2: 0x129, 0x3b3: 0x12a, 0x3b4: 0x12b, 0x3b5: 0x100, 0x3b6: 0x100, 0x3b7: 0x100, -+ 0x3b8: 0x100, 0x3b9: 0x12c, 0x3ba: 0x12d, 0x3bb: 0x12e, 0x3bc: 0x12f, 0x3bd: 0x130, 0x3be: 0x131, 0x3bf: 0x132, -+ // Block 0xf, offset 0x3c0 -+ 0x3c0: 0x133, 0x3c1: 0x134, 0x3c2: 0x135, 0x3c3: 0x136, 0x3c4: 0x137, 0x3c5: 0x138, 0x3c6: 0x139, 0x3c7: 0x13a, -+ 0x3c8: 0x13b, 0x3c9: 0x13c, 0x3ca: 0x13d, 0x3cb: 0x13e, 0x3cc: 0x60, 0x3cd: 0x61, 0x3ce: 0x100, 0x3cf: 0x100, -+ 0x3d0: 0x13f, 0x3d1: 0x140, 0x3d2: 0x141, 0x3d3: 0x142, 0x3d4: 0x100, 0x3d5: 0x100, 0x3d6: 0x143, 0x3d7: 0x144, -+ 0x3d8: 0x145, 0x3d9: 0x146, 0x3da: 0x147, 0x3db: 0x148, 0x3dc: 0x149, 0x3dd: 0x14a, 0x3de: 0x100, 0x3df: 0x100, -+ 0x3e0: 0x14b, 0x3e1: 0x100, 0x3e2: 0x14c, 0x3e3: 0x14d, 0x3e4: 0x62, 0x3e5: 0x14e, 0x3e6: 0x14f, 0x3e7: 0x150, -+ 0x3e8: 0x151, 0x3e9: 0x152, 0x3ea: 0x153, 0x3eb: 0x154, 0x3ec: 0x155, 0x3ed: 0x100, 0x3ee: 0x100, 0x3ef: 0x100, -+ 0x3f0: 0x156, 0x3f1: 0x157, 0x3f2: 0x158, 0x3f3: 0x100, 0x3f4: 0x159, 0x3f5: 0x15a, 0x3f6: 0x15b, 0x3f7: 0x100, -+ 0x3f8: 0x100, 0x3f9: 0x100, 0x3fa: 0x100, 0x3fb: 0x15c, 0x3fc: 0x15d, 0x3fd: 0x15e, 0x3fe: 0x15f, 0x3ff: 0x160, -+ // Block 0x10, offset 0x400 -+ 0x400: 0xa6, 0x401: 0xa6, 0x402: 0xa6, 0x403: 0xa6, 0x404: 0xa6, 0x405: 0xa6, 0x406: 0xa6, 0x407: 0xa6, -+ 0x408: 0xa6, 0x409: 0xa6, 0x40a: 0xa6, 0x40b: 0xa6, 0x40c: 0xa6, 0x40d: 0xa6, 0x40e: 0x161, 0x40f: 0x100, -+ 0x410: 0xa2, 0x411: 0x162, 0x412: 0xa6, 0x413: 0xa6, 0x414: 0xa6, 0x415: 0x163, 0x416: 0x100, 0x417: 0x100, -+ 0x418: 0x100, 0x419: 0x100, 0x41a: 0x100, 0x41b: 0x100, 0x41c: 0x100, 0x41d: 0x100, 0x41e: 0x100, 0x41f: 0x100, -+ 0x420: 0x100, 0x421: 0x100, 0x422: 0x100, 0x423: 0x100, 0x424: 0x100, 0x425: 0x100, 0x426: 0x100, 0x427: 0x100, -+ 0x428: 0x100, 0x429: 0x100, 0x42a: 0x100, 0x42b: 0x100, 0x42c: 0x100, 0x42d: 0x100, 0x42e: 0x100, 0x42f: 0x100, -+ 0x430: 0x100, 0x431: 0x100, 0x432: 0x100, 0x433: 0x100, 0x434: 0x100, 0x435: 0x100, 0x436: 0x100, 0x437: 0x100, -+ 0x438: 0x100, 0x439: 0x100, 0x43a: 0x100, 0x43b: 0x100, 0x43c: 0x100, 0x43d: 0x100, 0x43e: 0x164, 0x43f: 0x165, -+ // Block 0x11, offset 0x440 -+ 0x440: 0xa6, 0x441: 0xa6, 0x442: 0xa6, 0x443: 0xa6, 0x444: 0xa6, 0x445: 0xa6, 0x446: 0xa6, 0x447: 0xa6, -+ 0x448: 0xa6, 0x449: 0xa6, 0x44a: 0xa6, 0x44b: 0xa6, 0x44c: 0xa6, 0x44d: 0xa6, 0x44e: 0xa6, 0x44f: 0xa6, -+ 0x450: 0x166, 0x451: 0x167, 0x452: 0x100, 0x453: 0x100, 0x454: 0x100, 0x455: 0x100, 0x456: 0x100, 0x457: 0x100, -+ 0x458: 0x100, 0x459: 0x100, 0x45a: 0x100, 0x45b: 0x100, 0x45c: 0x100, 0x45d: 0x100, 0x45e: 0x100, 0x45f: 0x100, -+ 0x460: 0x100, 0x461: 0x100, 0x462: 0x100, 0x463: 0x100, 0x464: 0x100, 0x465: 0x100, 0x466: 0x100, 0x467: 0x100, -+ 0x468: 0x100, 0x469: 0x100, 0x46a: 0x100, 0x46b: 0x100, 0x46c: 0x100, 0x46d: 0x100, 0x46e: 0x100, 0x46f: 0x100, -+ 0x470: 0x100, 0x471: 0x100, 0x472: 0x100, 0x473: 0x100, 0x474: 0x100, 0x475: 0x100, 0x476: 0x100, 0x477: 0x100, -+ 0x478: 0x100, 0x479: 0x100, 0x47a: 0x100, 0x47b: 0x100, 0x47c: 0x100, 0x47d: 0x100, 0x47e: 0x100, 0x47f: 0x100, -+ // Block 0x12, offset 0x480 -+ 0x480: 0x100, 0x481: 0x100, 0x482: 0x100, 0x483: 0x100, 0x484: 0x100, 0x485: 0x100, 0x486: 0x100, 0x487: 0x100, -+ 0x488: 0x100, 0x489: 0x100, 0x48a: 0x100, 0x48b: 0x100, 0x48c: 0x100, 0x48d: 0x100, 0x48e: 0x100, 0x48f: 0x100, -+ 0x490: 0xa6, 0x491: 0xa6, 0x492: 0xa6, 0x493: 0xa6, 0x494: 0xa6, 0x495: 0xa6, 0x496: 0xa6, 0x497: 0xa6, -+ 0x498: 0xa6, 0x499: 0x14a, 0x49a: 0x100, 0x49b: 0x100, 0x49c: 0x100, 0x49d: 0x100, 0x49e: 0x100, 0x49f: 0x100, -+ 0x4a0: 0x100, 0x4a1: 0x100, 0x4a2: 0x100, 0x4a3: 0x100, 0x4a4: 0x100, 0x4a5: 0x100, 0x4a6: 0x100, 0x4a7: 0x100, -+ 0x4a8: 0x100, 0x4a9: 0x100, 0x4aa: 0x100, 0x4ab: 0x100, 0x4ac: 0x100, 0x4ad: 0x100, 0x4ae: 0x100, 0x4af: 0x100, -+ 0x4b0: 0x100, 0x4b1: 0x100, 0x4b2: 0x100, 0x4b3: 0x100, 0x4b4: 0x100, 0x4b5: 0x100, 0x4b6: 0x100, 0x4b7: 0x100, -+ 0x4b8: 0x100, 0x4b9: 0x100, 0x4ba: 0x100, 0x4bb: 0x100, 0x4bc: 0x100, 0x4bd: 0x100, 0x4be: 0x100, 0x4bf: 0x100, -+ // Block 0x13, offset 0x4c0 -+ 0x4c0: 0x100, 0x4c1: 0x100, 0x4c2: 0x100, 0x4c3: 0x100, 0x4c4: 0x100, 0x4c5: 0x100, 0x4c6: 0x100, 0x4c7: 0x100, -+ 0x4c8: 0x100, 0x4c9: 0x100, 0x4ca: 0x100, 0x4cb: 0x100, 0x4cc: 0x100, 0x4cd: 0x100, 0x4ce: 0x100, 0x4cf: 0x100, -+ 0x4d0: 0x100, 0x4d1: 0x100, 0x4d2: 0x100, 0x4d3: 0x100, 0x4d4: 0x100, 0x4d5: 0x100, 0x4d6: 0x100, 0x4d7: 0x100, -+ 0x4d8: 0x100, 0x4d9: 0x100, 0x4da: 0x100, 0x4db: 0x100, 0x4dc: 0x100, 0x4dd: 0x100, 0x4de: 0x100, 0x4df: 0x100, -+ 0x4e0: 0xa6, 0x4e1: 0xa6, 0x4e2: 0xa6, 0x4e3: 0xa6, 0x4e4: 0xa6, 0x4e5: 0xa6, 0x4e6: 0xa6, 0x4e7: 0xa6, -+ 0x4e8: 0x154, 0x4e9: 0x168, 0x4ea: 0x169, 0x4eb: 0x16a, 0x4ec: 0x16b, 0x4ed: 0x16c, 0x4ee: 0x16d, 0x4ef: 0x100, -+ 0x4f0: 0x100, 0x4f1: 0x100, 0x4f2: 0x100, 0x4f3: 0x100, 0x4f4: 0x100, 0x4f5: 0x100, 0x4f6: 0x100, 0x4f7: 0x100, -+ 0x4f8: 0x100, 0x4f9: 0x16e, 0x4fa: 0x16f, 0x4fb: 0x100, 0x4fc: 0xa6, 0x4fd: 0x170, 0x4fe: 0x171, 0x4ff: 0x172, -+ // Block 0x14, offset 0x500 -+ 0x500: 0xa6, 0x501: 0xa6, 0x502: 0xa6, 0x503: 0xa6, 0x504: 0xa6, 0x505: 0xa6, 0x506: 0xa6, 0x507: 0xa6, -+ 0x508: 0xa6, 0x509: 0xa6, 0x50a: 0xa6, 0x50b: 0xa6, 0x50c: 0xa6, 0x50d: 0xa6, 0x50e: 0xa6, 0x50f: 0xa6, -+ 0x510: 0xa6, 0x511: 0xa6, 0x512: 0xa6, 0x513: 0xa6, 0x514: 0xa6, 0x515: 0xa6, 0x516: 0xa6, 0x517: 0xa6, -+ 0x518: 0xa6, 0x519: 0xa6, 0x51a: 0xa6, 0x51b: 0xa6, 0x51c: 0xa6, 0x51d: 0xa6, 0x51e: 0xa6, 0x51f: 0x173, -+ 0x520: 0xa6, 0x521: 0xa6, 0x522: 0xa6, 0x523: 0xa6, 0x524: 0xa6, 0x525: 0xa6, 0x526: 0xa6, 0x527: 0xa6, -+ 0x528: 0xa6, 0x529: 0xa6, 0x52a: 0xa6, 0x52b: 0xa6, 0x52c: 0xa6, 0x52d: 0xa6, 0x52e: 0xa6, 0x52f: 0xa6, -+ 0x530: 0xa6, 0x531: 0xa6, 0x532: 0xa6, 0x533: 0x174, 0x534: 0x175, 0x535: 0x100, 0x536: 0x100, 0x537: 0x100, -+ 0x538: 0x100, 0x539: 0x100, 0x53a: 0x100, 0x53b: 0x100, 0x53c: 0x100, 0x53d: 0x100, 0x53e: 0x100, 0x53f: 0x100, -+ // Block 0x15, offset 0x540 -+ 0x540: 0x100, 0x541: 0x100, 0x542: 0x100, 0x543: 0x100, 0x544: 0x100, 0x545: 0x100, 0x546: 0x100, 0x547: 0x100, -+ 0x548: 0x100, 0x549: 0x100, 0x54a: 0x100, 0x54b: 0x100, 0x54c: 0x100, 0x54d: 0x100, 0x54e: 0x100, 0x54f: 0x100, -+ 0x550: 0x100, 0x551: 0x100, 0x552: 0x100, 0x553: 0x100, 0x554: 0x100, 0x555: 0x100, 0x556: 0x100, 0x557: 0x100, -+ 0x558: 0x100, 0x559: 0x100, 0x55a: 0x100, 0x55b: 0x100, 0x55c: 0x100, 0x55d: 0x100, 0x55e: 0x100, 0x55f: 0x100, -+ 0x560: 0x100, 0x561: 0x100, 0x562: 0x100, 0x563: 0x100, 0x564: 0x100, 0x565: 0x100, 0x566: 0x100, 0x567: 0x100, -+ 0x568: 0x100, 0x569: 0x100, 0x56a: 0x100, 0x56b: 0x100, 0x56c: 0x100, 0x56d: 0x100, 0x56e: 0x100, 0x56f: 0x100, -+ 0x570: 0x100, 0x571: 0x100, 0x572: 0x100, 0x573: 0x100, 0x574: 0x100, 0x575: 0x100, 0x576: 0x100, 0x577: 0x100, -+ 0x578: 0x100, 0x579: 0x100, 0x57a: 0x100, 0x57b: 0x100, 0x57c: 0x100, 0x57d: 0x100, 0x57e: 0x100, 0x57f: 0x176, -+ // Block 0x16, offset 0x580 -+ 0x580: 0xa6, 0x581: 0xa6, 0x582: 0xa6, 0x583: 0xa6, 0x584: 0x177, 0x585: 0x178, 0x586: 0xa6, 0x587: 0xa6, -+ 0x588: 0xa6, 0x589: 0xa6, 0x58a: 0xa6, 0x58b: 0x179, 0x58c: 0x100, 0x58d: 0x100, 0x58e: 0x100, 0x58f: 0x100, -+ 0x590: 0x100, 0x591: 0x100, 0x592: 0x100, 0x593: 0x100, 0x594: 0x100, 0x595: 0x100, 0x596: 0x100, 0x597: 0x100, -+ 0x598: 0x100, 0x599: 0x100, 0x59a: 0x100, 0x59b: 0x100, 0x59c: 0x100, 0x59d: 0x100, 0x59e: 0x100, 0x59f: 0x100, -+ 0x5a0: 0x100, 0x5a1: 0x100, 0x5a2: 0x100, 0x5a3: 0x100, 0x5a4: 0x100, 0x5a5: 0x100, 0x5a6: 0x100, 0x5a7: 0x100, -+ 0x5a8: 0x100, 0x5a9: 0x100, 0x5aa: 0x100, 0x5ab: 0x100, 0x5ac: 0x100, 0x5ad: 0x100, 0x5ae: 0x100, 0x5af: 0x100, -+ 0x5b0: 0xa6, 0x5b1: 0x17a, 0x5b2: 0x17b, 0x5b3: 0x100, 0x5b4: 0x100, 0x5b5: 0x100, 0x5b6: 0x100, 0x5b7: 0x100, -+ 0x5b8: 0x100, 0x5b9: 0x100, 0x5ba: 0x100, 0x5bb: 0x100, 0x5bc: 0x100, 0x5bd: 0x100, 0x5be: 0x100, 0x5bf: 0x100, -+ // Block 0x17, offset 0x5c0 -+ 0x5c0: 0x100, 0x5c1: 0x100, 0x5c2: 0x100, 0x5c3: 0x100, 0x5c4: 0x100, 0x5c5: 0x100, 0x5c6: 0x100, 0x5c7: 0x100, -+ 0x5c8: 0x100, 0x5c9: 0x100, 0x5ca: 0x100, 0x5cb: 0x100, 0x5cc: 0x100, 0x5cd: 0x100, 0x5ce: 0x100, 0x5cf: 0x100, -+ 0x5d0: 0x100, 0x5d1: 0x100, 0x5d2: 0x100, 0x5d3: 0x100, 0x5d4: 0x100, 0x5d5: 0x100, 0x5d6: 0x100, 0x5d7: 0x100, -+ 0x5d8: 0x100, 0x5d9: 0x100, 0x5da: 0x100, 0x5db: 0x100, 0x5dc: 0x100, 0x5dd: 0x100, 0x5de: 0x100, 0x5df: 0x100, -+ 0x5e0: 0x100, 0x5e1: 0x100, 0x5e2: 0x100, 0x5e3: 0x100, 0x5e4: 0x100, 0x5e5: 0x100, 0x5e6: 0x100, 0x5e7: 0x100, -+ 0x5e8: 0x100, 0x5e9: 0x100, 0x5ea: 0x100, 0x5eb: 0x100, 0x5ec: 0x100, 0x5ed: 0x100, 0x5ee: 0x100, 0x5ef: 0x100, -+ 0x5f0: 0x100, 0x5f1: 0x100, 0x5f2: 0x100, 0x5f3: 0x100, 0x5f4: 0x100, 0x5f5: 0x100, 0x5f6: 0x100, 0x5f7: 0x100, -+ 0x5f8: 0x100, 0x5f9: 0x100, 0x5fa: 0x100, 0x5fb: 0x100, 0x5fc: 0x17c, 0x5fd: 0x17d, 0x5fe: 0xa2, 0x5ff: 0x17e, -+ // Block 0x18, offset 0x600 -+ 0x600: 0xa2, 0x601: 0xa2, 0x602: 0xa2, 0x603: 0x17f, 0x604: 0x180, 0x605: 0x181, 0x606: 0x182, 0x607: 0x183, -+ 0x608: 0xa2, 0x609: 0x184, 0x60a: 0x100, 0x60b: 0x185, 0x60c: 0xa2, 0x60d: 0x186, 0x60e: 0x100, 0x60f: 0x100, -+ 0x610: 0x63, 0x611: 0x64, 0x612: 0x65, 0x613: 0x66, 0x614: 0x67, 0x615: 0x68, 0x616: 0x69, 0x617: 0x6a, -+ 0x618: 0x6b, 0x619: 0x6c, 0x61a: 0x6d, 0x61b: 0x6e, 0x61c: 0x6f, 0x61d: 0x70, 0x61e: 0x71, 0x61f: 0x72, -+ 0x620: 0xa2, 0x621: 0xa2, 0x622: 0xa2, 0x623: 0xa2, 0x624: 0xa2, 0x625: 0xa2, 0x626: 0xa2, 0x627: 0xa2, -+ 0x628: 0x187, 0x629: 0x188, 0x62a: 0x189, 0x62b: 0x100, 0x62c: 0x100, 0x62d: 0x100, 0x62e: 0x100, 0x62f: 0x100, -+ 0x630: 0x100, 0x631: 0x100, 0x632: 0x100, 0x633: 0x100, 0x634: 0x100, 0x635: 0x100, 0x636: 0x100, 0x637: 0x100, -+ 0x638: 0x100, 0x639: 0x100, 0x63a: 0x100, 0x63b: 0x100, 0x63c: 0x18a, 0x63d: 0x100, 0x63e: 0x100, 0x63f: 0x100, -+ // Block 0x19, offset 0x640 -+ 0x640: 0x73, 0x641: 0x74, 0x642: 0x18b, 0x643: 0x100, 0x644: 0x18c, 0x645: 0x18d, 0x646: 0x100, 0x647: 0x100, -+ 0x648: 0x100, 0x649: 0x100, 0x64a: 0x18e, 0x64b: 0x18f, 0x64c: 0x100, 0x64d: 0x100, 0x64e: 0x100, 0x64f: 0x100, -+ 0x650: 0x100, 0x651: 0x100, 0x652: 0x100, 0x653: 0x190, 0x654: 0x100, 0x655: 0x100, 0x656: 0x100, 0x657: 0x100, -+ 0x658: 0x100, 0x659: 0x100, 0x65a: 0x100, 0x65b: 0x100, 0x65c: 0x100, 0x65d: 0x100, 0x65e: 0x100, 0x65f: 0x191, -+ 0x660: 0x127, 0x661: 0x127, 0x662: 0x127, 0x663: 0x192, 0x664: 0x75, 0x665: 0x193, 0x666: 0x100, 0x667: 0x100, -+ 0x668: 0x100, 0x669: 0x100, 0x66a: 0x100, 0x66b: 0x100, 0x66c: 0x100, 0x66d: 0x100, 0x66e: 0x100, 0x66f: 0x100, -+ 0x670: 0x100, 0x671: 0x194, 0x672: 0x195, 0x673: 0x100, 0x674: 0x196, 0x675: 0x100, 0x676: 0x100, 0x677: 0x100, -+ 0x678: 0x76, 0x679: 0x77, 0x67a: 0x78, 0x67b: 0x197, 0x67c: 0x100, 0x67d: 0x100, 0x67e: 0x100, 0x67f: 0x100, -+ // Block 0x1a, offset 0x680 -+ 0x680: 0x198, 0x681: 0xa2, 0x682: 0x199, 0x683: 0x19a, 0x684: 0x79, 0x685: 0x7a, 0x686: 0x19b, 0x687: 0x19c, -+ 0x688: 0x7b, 0x689: 0x19d, 0x68a: 0x100, 0x68b: 0x100, 0x68c: 0xa2, 0x68d: 0xa2, 0x68e: 0xa2, 0x68f: 0xa2, -+ 0x690: 0xa2, 0x691: 0xa2, 0x692: 0xa2, 0x693: 0xa2, 0x694: 0xa2, 0x695: 0xa2, 0x696: 0xa2, 0x697: 0xa2, -+ 0x698: 0xa2, 0x699: 0xa2, 0x69a: 0xa2, 0x69b: 0x19e, 0x69c: 0xa2, 0x69d: 0x19f, 0x69e: 0xa2, 0x69f: 0x1a0, -+ 0x6a0: 0x1a1, 0x6a1: 0x1a2, 0x6a2: 0x1a3, 0x6a3: 0x100, 0x6a4: 0xa2, 0x6a5: 0xa2, 0x6a6: 0xa2, 0x6a7: 0xa2, -+ 0x6a8: 0xa2, 0x6a9: 0x1a4, 0x6aa: 0x1a5, 0x6ab: 0x1a6, 0x6ac: 0xa2, 0x6ad: 0xa2, 0x6ae: 0x1a7, 0x6af: 0x1a8, -+ 0x6b0: 0x100, 0x6b1: 0x100, 0x6b2: 0x100, 0x6b3: 0x100, 0x6b4: 0x100, 0x6b5: 0x100, 0x6b6: 0x100, 0x6b7: 0x100, -+ 0x6b8: 0x100, 0x6b9: 0x100, 0x6ba: 0x100, 0x6bb: 0x100, 0x6bc: 0x100, 0x6bd: 0x100, 0x6be: 0x100, 0x6bf: 0x100, -+ // Block 0x1b, offset 0x6c0 -+ 0x6c0: 0xa6, 0x6c1: 0xa6, 0x6c2: 0xa6, 0x6c3: 0xa6, 0x6c4: 0xa6, 0x6c5: 0xa6, 0x6c6: 0xa6, 0x6c7: 0xa6, -+ 0x6c8: 0xa6, 0x6c9: 0xa6, 0x6ca: 0xa6, 0x6cb: 0xa6, 0x6cc: 0xa6, 0x6cd: 0xa6, 0x6ce: 0xa6, 0x6cf: 0xa6, -+ 0x6d0: 0xa6, 0x6d1: 0xa6, 0x6d2: 0xa6, 0x6d3: 0xa6, 0x6d4: 0xa6, 0x6d5: 0xa6, 0x6d6: 0xa6, 0x6d7: 0xa6, -+ 0x6d8: 0xa6, 0x6d9: 0xa6, 0x6da: 0xa6, 0x6db: 0x1a9, 0x6dc: 0xa6, 0x6dd: 0xa6, 0x6de: 0xa6, 0x6df: 0xa6, -+ 0x6e0: 0xa6, 0x6e1: 0xa6, 0x6e2: 0xa6, 0x6e3: 0xa6, 0x6e4: 0xa6, 0x6e5: 0xa6, 0x6e6: 0xa6, 0x6e7: 0xa6, -+ 0x6e8: 0xa6, 0x6e9: 0xa6, 0x6ea: 0xa6, 0x6eb: 0xa6, 0x6ec: 0xa6, 0x6ed: 0xa6, 0x6ee: 0xa6, 0x6ef: 0xa6, -+ 0x6f0: 0xa6, 0x6f1: 0xa6, 0x6f2: 0xa6, 0x6f3: 0xa6, 0x6f4: 0xa6, 0x6f5: 0xa6, 0x6f6: 0xa6, 0x6f7: 0xa6, -+ 0x6f8: 0xa6, 0x6f9: 0xa6, 0x6fa: 0xa6, 0x6fb: 0xa6, 0x6fc: 0xa6, 0x6fd: 0xa6, 0x6fe: 0xa6, 0x6ff: 0xa6, -+ // Block 0x1c, offset 0x700 -+ 0x700: 0xa6, 0x701: 0xa6, 0x702: 0xa6, 0x703: 0xa6, 0x704: 0xa6, 0x705: 0xa6, 0x706: 0xa6, 0x707: 0xa6, -+ 0x708: 0xa6, 0x709: 0xa6, 0x70a: 0xa6, 0x70b: 0xa6, 0x70c: 0xa6, 0x70d: 0xa6, 0x70e: 0xa6, 0x70f: 0xa6, -+ 0x710: 0xa6, 0x711: 0xa6, 0x712: 0xa6, 0x713: 0xa6, 0x714: 0xa6, 0x715: 0xa6, 0x716: 0xa6, 0x717: 0xa6, -+ 0x718: 0xa6, 0x719: 0xa6, 0x71a: 0xa6, 0x71b: 0xa6, 0x71c: 0x1aa, 0x71d: 0xa6, 0x71e: 0xa6, 0x71f: 0xa6, -+ 0x720: 0x1ab, 0x721: 0xa6, 0x722: 0xa6, 0x723: 0xa6, 0x724: 0xa6, 0x725: 0xa6, 0x726: 0xa6, 0x727: 0xa6, -+ 0x728: 0xa6, 0x729: 0xa6, 0x72a: 0xa6, 0x72b: 0xa6, 0x72c: 0xa6, 0x72d: 0xa6, 0x72e: 0xa6, 0x72f: 0xa6, -+ 0x730: 0xa6, 0x731: 0xa6, 0x732: 0xa6, 0x733: 0xa6, 0x734: 0xa6, 0x735: 0xa6, 0x736: 0xa6, 0x737: 0xa6, -+ 0x738: 0xa6, 0x739: 0xa6, 0x73a: 0xa6, 0x73b: 0xa6, 0x73c: 0xa6, 0x73d: 0xa6, 0x73e: 0xa6, 0x73f: 0xa6, -+ // Block 0x1d, offset 0x740 -+ 0x740: 0xa6, 0x741: 0xa6, 0x742: 0xa6, 0x743: 0xa6, 0x744: 0xa6, 0x745: 0xa6, 0x746: 0xa6, 0x747: 0xa6, -+ 0x748: 0xa6, 0x749: 0xa6, 0x74a: 0xa6, 0x74b: 0xa6, 0x74c: 0xa6, 0x74d: 0xa6, 0x74e: 0xa6, 0x74f: 0xa6, -+ 0x750: 0xa6, 0x751: 0xa6, 0x752: 0xa6, 0x753: 0xa6, 0x754: 0xa6, 0x755: 0xa6, 0x756: 0xa6, 0x757: 0xa6, -+ 0x758: 0xa6, 0x759: 0xa6, 0x75a: 0xa6, 0x75b: 0xa6, 0x75c: 0xa6, 0x75d: 0xa6, 0x75e: 0xa6, 0x75f: 0xa6, -+ 0x760: 0xa6, 0x761: 0xa6, 0x762: 0xa6, 0x763: 0xa6, 0x764: 0xa6, 0x765: 0xa6, 0x766: 0xa6, 0x767: 0xa6, -+ 0x768: 0xa6, 0x769: 0xa6, 0x76a: 0xa6, 0x76b: 0xa6, 0x76c: 0xa6, 0x76d: 0xa6, 0x76e: 0xa6, 0x76f: 0xa6, -+ 0x770: 0xa6, 0x771: 0xa6, 0x772: 0xa6, 0x773: 0xa6, 0x774: 0xa6, 0x775: 0xa6, 0x776: 0xa6, 0x777: 0xa6, -+ 0x778: 0xa6, 0x779: 0xa6, 0x77a: 0x1ac, 0x77b: 0xa6, 0x77c: 0xa6, 0x77d: 0xa6, 0x77e: 0xa6, 0x77f: 0xa6, -+ // Block 0x1e, offset 0x780 -+ 0x780: 0xa6, 0x781: 0xa6, 0x782: 0xa6, 0x783: 0xa6, 0x784: 0xa6, 0x785: 0xa6, 0x786: 0xa6, 0x787: 0xa6, -+ 0x788: 0xa6, 0x789: 0xa6, 0x78a: 0xa6, 0x78b: 0xa6, 0x78c: 0xa6, 0x78d: 0xa6, 0x78e: 0xa6, 0x78f: 0xa6, -+ 0x790: 0xa6, 0x791: 0xa6, 0x792: 0xa6, 0x793: 0xa6, 0x794: 0xa6, 0x795: 0xa6, 0x796: 0xa6, 0x797: 0xa6, -+ 0x798: 0xa6, 0x799: 0xa6, 0x79a: 0xa6, 0x79b: 0xa6, 0x79c: 0xa6, 0x79d: 0xa6, 0x79e: 0xa6, 0x79f: 0xa6, -+ 0x7a0: 0xa6, 0x7a1: 0xa6, 0x7a2: 0xa6, 0x7a3: 0xa6, 0x7a4: 0xa6, 0x7a5: 0xa6, 0x7a6: 0xa6, 0x7a7: 0xa6, -+ 0x7a8: 0xa6, 0x7a9: 0xa6, 0x7aa: 0xa6, 0x7ab: 0xa6, 0x7ac: 0xa6, 0x7ad: 0xa6, 0x7ae: 0xa6, 0x7af: 0x1ad, -+ 0x7b0: 0x100, 0x7b1: 0x100, 0x7b2: 0x100, 0x7b3: 0x100, 0x7b4: 0x100, 0x7b5: 0x100, 0x7b6: 0x100, 0x7b7: 0x100, -+ 0x7b8: 0x100, 0x7b9: 0x100, 0x7ba: 0x100, 0x7bb: 0x100, 0x7bc: 0x100, 0x7bd: 0x100, 0x7be: 0x100, 0x7bf: 0x100, -+ // Block 0x1f, offset 0x7c0 -+ 0x7c0: 0x100, 0x7c1: 0x100, 0x7c2: 0x100, 0x7c3: 0x100, 0x7c4: 0x100, 0x7c5: 0x100, 0x7c6: 0x100, 0x7c7: 0x100, -+ 0x7c8: 0x100, 0x7c9: 0x100, 0x7ca: 0x100, 0x7cb: 0x100, 0x7cc: 0x100, 0x7cd: 0x100, 0x7ce: 0x100, 0x7cf: 0x100, -+ 0x7d0: 0x100, 0x7d1: 0x100, 0x7d2: 0x100, 0x7d3: 0x100, 0x7d4: 0x100, 0x7d5: 0x100, 0x7d6: 0x100, 0x7d7: 0x100, -+ 0x7d8: 0x100, 0x7d9: 0x100, 0x7da: 0x100, 0x7db: 0x100, 0x7dc: 0x100, 0x7dd: 0x100, 0x7de: 0x100, 0x7df: 0x100, -+ 0x7e0: 0x7c, 0x7e1: 0x7d, 0x7e2: 0x7e, 0x7e3: 0x7f, 0x7e4: 0x80, 0x7e5: 0x81, 0x7e6: 0x82, 0x7e7: 0x83, -+ 0x7e8: 0x84, 0x7e9: 0x100, 0x7ea: 0x100, 0x7eb: 0x100, 0x7ec: 0x100, 0x7ed: 0x100, 0x7ee: 0x100, 0x7ef: 0x100, -+ 0x7f0: 0x100, 0x7f1: 0x100, 0x7f2: 0x100, 0x7f3: 0x100, 0x7f4: 0x100, 0x7f5: 0x100, 0x7f6: 0x100, 0x7f7: 0x100, -+ 0x7f8: 0x100, 0x7f9: 0x100, 0x7fa: 0x100, 0x7fb: 0x100, 0x7fc: 0x100, 0x7fd: 0x100, 0x7fe: 0x100, 0x7ff: 0x100, -+ // Block 0x20, offset 0x800 -+ 0x800: 0xa6, 0x801: 0xa6, 0x802: 0xa6, 0x803: 0xa6, 0x804: 0xa6, 0x805: 0xa6, 0x806: 0xa6, 0x807: 0xa6, -+ 0x808: 0xa6, 0x809: 0xa6, 0x80a: 0xa6, 0x80b: 0xa6, 0x80c: 0xa6, 0x80d: 0x1ae, 0x80e: 0xa6, 0x80f: 0xa6, -+ 0x810: 0xa6, 0x811: 0xa6, 0x812: 0xa6, 0x813: 0xa6, 0x814: 0xa6, 0x815: 0xa6, 0x816: 0xa6, 0x817: 0xa6, -+ 0x818: 0xa6, 0x819: 0xa6, 0x81a: 0xa6, 0x81b: 0xa6, 0x81c: 0xa6, 0x81d: 0xa6, 0x81e: 0xa6, 0x81f: 0xa6, -+ 0x820: 0xa6, 0x821: 0xa6, 0x822: 0xa6, 0x823: 0xa6, 0x824: 0xa6, 0x825: 0xa6, 0x826: 0xa6, 0x827: 0xa6, -+ 0x828: 0xa6, 0x829: 0xa6, 0x82a: 0xa6, 0x82b: 0xa6, 0x82c: 0xa6, 0x82d: 0xa6, 0x82e: 0xa6, 0x82f: 0xa6, -+ 0x830: 0xa6, 0x831: 0xa6, 0x832: 0xa6, 0x833: 0xa6, 0x834: 0xa6, 0x835: 0xa6, 0x836: 0xa6, 0x837: 0xa6, -+ 0x838: 0xa6, 0x839: 0xa6, 0x83a: 0xa6, 0x83b: 0xa6, 0x83c: 0xa6, 0x83d: 0xa6, 0x83e: 0xa6, 0x83f: 0xa6, -+ // Block 0x21, offset 0x840 -+ 0x840: 0xa6, 0x841: 0xa6, 0x842: 0xa6, 0x843: 0xa6, 0x844: 0xa6, 0x845: 0xa6, 0x846: 0xa6, 0x847: 0xa6, -+ 0x848: 0xa6, 0x849: 0xa6, 0x84a: 0xa6, 0x84b: 0xa6, 0x84c: 0xa6, 0x84d: 0xa6, 0x84e: 0x1af, 0x84f: 0x100, -+ 0x850: 0x100, 0x851: 0x100, 0x852: 0x100, 0x853: 0x100, 0x854: 0x100, 0x855: 0x100, 0x856: 0x100, 0x857: 0x100, -+ 0x858: 0x100, 0x859: 0x100, 0x85a: 0x100, 0x85b: 0x100, 0x85c: 0x100, 0x85d: 0x100, 0x85e: 0x100, 0x85f: 0x100, -+ 0x860: 0x100, 0x861: 0x100, 0x862: 0x100, 0x863: 0x100, 0x864: 0x100, 0x865: 0x100, 0x866: 0x100, 0x867: 0x100, -+ 0x868: 0x100, 0x869: 0x100, 0x86a: 0x100, 0x86b: 0x100, 0x86c: 0x100, 0x86d: 0x100, 0x86e: 0x100, 0x86f: 0x100, -+ 0x870: 0x100, 0x871: 0x100, 0x872: 0x100, 0x873: 0x100, 0x874: 0x100, 0x875: 0x100, 0x876: 0x100, 0x877: 0x100, -+ 0x878: 0x100, 0x879: 0x100, 0x87a: 0x100, 0x87b: 0x100, 0x87c: 0x100, 0x87d: 0x100, 0x87e: 0x100, 0x87f: 0x100, -+ // Block 0x22, offset 0x880 -+ 0x890: 0x0c, 0x891: 0x0d, 0x892: 0x0e, 0x893: 0x0f, 0x894: 0x10, 0x895: 0x0a, 0x896: 0x11, 0x897: 0x07, -+ 0x898: 0x12, 0x899: 0x0a, 0x89a: 0x13, 0x89b: 0x14, 0x89c: 0x15, 0x89d: 0x16, 0x89e: 0x17, 0x89f: 0x18, -+ 0x8a0: 0x07, 0x8a1: 0x07, 0x8a2: 0x07, 0x8a3: 0x07, 0x8a4: 0x07, 0x8a5: 0x07, 0x8a6: 0x07, 0x8a7: 0x07, -+ 0x8a8: 0x07, 0x8a9: 0x07, 0x8aa: 0x19, 0x8ab: 0x1a, 0x8ac: 0x1b, 0x8ad: 0x07, 0x8ae: 0x1c, 0x8af: 0x1d, -+ 0x8b0: 0x07, 0x8b1: 0x1e, 0x8b2: 0x1f, 0x8b3: 0x0a, 0x8b4: 0x0a, 0x8b5: 0x0a, 0x8b6: 0x0a, 0x8b7: 0x0a, -+ 0x8b8: 0x0a, 0x8b9: 0x0a, 0x8ba: 0x0a, 0x8bb: 0x0a, 0x8bc: 0x0a, 0x8bd: 0x0a, 0x8be: 0x0a, 0x8bf: 0x0a, -+ // Block 0x23, offset 0x8c0 -+ 0x8c0: 0x0a, 0x8c1: 0x0a, 0x8c2: 0x0a, 0x8c3: 0x0a, 0x8c4: 0x0a, 0x8c5: 0x0a, 0x8c6: 0x0a, 0x8c7: 0x0a, -+ 0x8c8: 0x0a, 0x8c9: 0x0a, 0x8ca: 0x0a, 0x8cb: 0x0a, 0x8cc: 0x0a, 0x8cd: 0x0a, 0x8ce: 0x0a, 0x8cf: 0x0a, -+ 0x8d0: 0x0a, 0x8d1: 0x0a, 0x8d2: 0x0a, 0x8d3: 0x0a, 0x8d4: 0x0a, 0x8d5: 0x0a, 0x8d6: 0x0a, 0x8d7: 0x0a, -+ 0x8d8: 0x0a, 0x8d9: 0x0a, 0x8da: 0x0a, 0x8db: 0x0a, 0x8dc: 0x0a, 0x8dd: 0x0a, 0x8de: 0x0a, 0x8df: 0x0a, -+ 0x8e0: 0x0a, 0x8e1: 0x0a, 0x8e2: 0x0a, 0x8e3: 0x0a, 0x8e4: 0x0a, 0x8e5: 0x0a, 0x8e6: 0x0a, 0x8e7: 0x0a, -+ 0x8e8: 0x0a, 0x8e9: 0x0a, 0x8ea: 0x0a, 0x8eb: 0x0a, 0x8ec: 0x0a, 0x8ed: 0x0a, 0x8ee: 0x0a, 0x8ef: 0x0a, -+ 0x8f0: 0x0a, 0x8f1: 0x0a, 0x8f2: 0x0a, 0x8f3: 0x0a, 0x8f4: 0x0a, 0x8f5: 0x0a, 0x8f6: 0x0a, 0x8f7: 0x0a, -+ 0x8f8: 0x0a, 0x8f9: 0x0a, 0x8fa: 0x0a, 0x8fb: 0x0a, 0x8fc: 0x0a, 0x8fd: 0x0a, 0x8fe: 0x0a, 0x8ff: 0x0a, -+ // Block 0x24, offset 0x900 -+ 0x900: 0x1b0, 0x901: 0x1b1, 0x902: 0x100, 0x903: 0x100, 0x904: 0x1b2, 0x905: 0x1b2, 0x906: 0x1b2, 0x907: 0x1b3, -+ 0x908: 0x100, 0x909: 0x100, 0x90a: 0x100, 0x90b: 0x100, 0x90c: 0x100, 0x90d: 0x100, 0x90e: 0x100, 0x90f: 0x100, -+ 0x910: 0x100, 0x911: 0x100, 0x912: 0x100, 0x913: 0x100, 0x914: 0x100, 0x915: 0x100, 0x916: 0x100, 0x917: 0x100, -+ 0x918: 0x100, 0x919: 0x100, 0x91a: 0x100, 0x91b: 0x100, 0x91c: 0x100, 0x91d: 0x100, 0x91e: 0x100, 0x91f: 0x100, -+ 0x920: 0x100, 0x921: 0x100, 0x922: 0x100, 0x923: 0x100, 0x924: 0x100, 0x925: 0x100, 0x926: 0x100, 0x927: 0x100, -+ 0x928: 0x100, 0x929: 0x100, 0x92a: 0x100, 0x92b: 0x100, 0x92c: 0x100, 0x92d: 0x100, 0x92e: 0x100, 0x92f: 0x100, -+ 0x930: 0x100, 0x931: 0x100, 0x932: 0x100, 0x933: 0x100, 0x934: 0x100, 0x935: 0x100, 0x936: 0x100, 0x937: 0x100, -+ 0x938: 0x100, 0x939: 0x100, 0x93a: 0x100, 0x93b: 0x100, 0x93c: 0x100, 0x93d: 0x100, 0x93e: 0x100, 0x93f: 0x100, -+ // Block 0x25, offset 0x940 -+ 0x940: 0x0a, 0x941: 0x0a, 0x942: 0x0a, 0x943: 0x0a, 0x944: 0x0a, 0x945: 0x0a, 0x946: 0x0a, 0x947: 0x0a, -+ 0x948: 0x0a, 0x949: 0x0a, 0x94a: 0x0a, 0x94b: 0x0a, 0x94c: 0x0a, 0x94d: 0x0a, 0x94e: 0x0a, 0x94f: 0x0a, -+ 0x950: 0x0a, 0x951: 0x0a, 0x952: 0x0a, 0x953: 0x0a, 0x954: 0x0a, 0x955: 0x0a, 0x956: 0x0a, 0x957: 0x0a, -+ 0x958: 0x0a, 0x959: 0x0a, 0x95a: 0x0a, 0x95b: 0x0a, 0x95c: 0x0a, 0x95d: 0x0a, 0x95e: 0x0a, 0x95f: 0x0a, -+ 0x960: 0x22, 0x961: 0x0a, 0x962: 0x0a, 0x963: 0x0a, 0x964: 0x0a, 0x965: 0x0a, 0x966: 0x0a, 0x967: 0x0a, -+ 0x968: 0x0a, 0x969: 0x0a, 0x96a: 0x0a, 0x96b: 0x0a, 0x96c: 0x0a, 0x96d: 0x0a, 0x96e: 0x0a, 0x96f: 0x0a, -+ 0x970: 0x0a, 0x971: 0x0a, 0x972: 0x0a, 0x973: 0x0a, 0x974: 0x0a, 0x975: 0x0a, 0x976: 0x0a, 0x977: 0x0a, -+ 0x978: 0x0a, 0x979: 0x0a, 0x97a: 0x0a, 0x97b: 0x0a, 0x97c: 0x0a, 0x97d: 0x0a, 0x97e: 0x0a, 0x97f: 0x0a, -+ // Block 0x26, offset 0x980 -+ 0x980: 0x0a, 0x981: 0x0a, 0x982: 0x0a, 0x983: 0x0a, 0x984: 0x0a, 0x985: 0x0a, 0x986: 0x0a, 0x987: 0x0a, -+ 0x988: 0x0a, 0x989: 0x0a, 0x98a: 0x0a, 0x98b: 0x0a, 0x98c: 0x0a, 0x98d: 0x0a, 0x98e: 0x0a, 0x98f: 0x0a, -+} -+ -+// idnaSparseOffset: 303 entries, 606 bytes -+var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x7e, 0x87, 0x97, 0xa6, 0xb1, 0xbe, 0xcf, 0xd9, 0xe0, 0xed, 0xfe, 0x105, 0x110, 0x11f, 0x12d, 0x137, 0x139, 0x13e, 0x141, 0x144, 0x146, 0x152, 0x15d, 0x165, 0x16b, 0x171, 0x176, 0x17b, 0x17e, 0x182, 0x188, 0x18d, 0x198, 0x1a2, 0x1a8, 0x1b9, 0x1c4, 0x1c7, 0x1cf, 0x1d2, 0x1df, 0x1e7, 0x1eb, 0x1f2, 0x1fa, 0x20a, 0x216, 0x219, 0x223, 0x22f, 0x23b, 0x247, 0x24f, 0x254, 0x261, 0x272, 0x27d, 0x282, 0x28b, 0x293, 0x299, 0x29e, 0x2a1, 0x2a5, 0x2ab, 0x2af, 0x2b3, 0x2b7, 0x2bc, 0x2c4, 0x2cb, 0x2d6, 0x2e0, 0x2e4, 0x2e7, 0x2ed, 0x2f1, 0x2f3, 0x2f6, 0x2f8, 0x2fb, 0x305, 0x308, 0x317, 0x31b, 0x31f, 0x321, 0x32a, 0x32e, 0x333, 0x338, 0x33e, 0x34e, 0x354, 0x358, 0x367, 0x36c, 0x374, 0x37e, 0x389, 0x391, 0x3a2, 0x3ab, 0x3bb, 0x3c8, 0x3d4, 0x3d9, 0x3e6, 0x3ea, 0x3ef, 0x3f1, 0x3f3, 0x3f7, 0x3f9, 0x3fd, 0x406, 0x40c, 0x410, 0x420, 0x42a, 0x42f, 0x432, 0x438, 0x43f, 0x444, 0x448, 0x44e, 0x453, 0x45c, 0x461, 0x467, 0x46e, 0x475, 0x47c, 0x480, 0x483, 0x488, 0x494, 0x49a, 0x49f, 0x4a6, 0x4ae, 0x4b3, 0x4b7, 0x4c7, 0x4ce, 0x4d2, 0x4d6, 0x4dd, 0x4df, 0x4e2, 0x4e5, 0x4e9, 0x4f2, 0x4f6, 0x4fe, 0x501, 0x509, 0x514, 0x523, 0x52f, 0x535, 0x542, 0x54e, 0x556, 0x55f, 0x56a, 0x571, 0x580, 0x58d, 0x591, 0x59e, 0x5a7, 0x5ab, 0x5ba, 0x5c2, 0x5cd, 0x5d6, 0x5dc, 0x5e4, 0x5ed, 0x5f9, 0x5fc, 0x608, 0x60b, 0x614, 0x617, 0x61c, 0x625, 0x62a, 0x637, 0x642, 0x64b, 0x656, 0x659, 0x65c, 0x666, 0x66f, 0x67b, 0x688, 0x695, 0x6a3, 0x6aa, 0x6b5, 0x6bc, 0x6c0, 0x6c4, 0x6c7, 0x6cc, 0x6cf, 0x6d2, 0x6d6, 0x6d9, 0x6de, 0x6e5, 0x6e8, 0x6f0, 0x6f4, 0x6ff, 0x702, 0x705, 0x708, 0x70e, 0x714, 0x71d, 0x720, 0x723, 0x726, 0x72e, 0x733, 0x73c, 0x73f, 0x744, 0x74e, 0x752, 0x756, 0x759, 0x75c, 0x760, 0x76f, 0x77b, 0x77f, 0x784, 0x789, 0x78e, 0x792, 0x797, 0x7a0, 0x7a5, 0x7a9, 0x7af, 0x7b5, 0x7ba, 0x7c0, 0x7c6, 0x7d0, 0x7d6, 0x7df, 0x7e2, 0x7e5, 0x7e9, 0x7ed, 0x7f1, 0x7f7, 0x7fd, 0x802, 0x805, 0x815, 0x81c, 0x820, 0x827, 0x82b, 0x831, 0x838, 0x83f, 0x845, 0x84e, 0x852, 0x860, 0x863, 0x866, 0x86a, 0x86e, 0x871, 0x875, 0x878, 0x87d, 0x87f, 0x881} -+ -+// idnaSparseValues: 2180 entries, 8720 bytes -+var idnaSparseValues = [2180]valueRange{ -+ // Block 0x0, offset 0x0 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0xe105, lo: 0x80, hi: 0x96}, -+ {value: 0x0018, lo: 0x97, hi: 0x97}, -+ {value: 0xe105, lo: 0x98, hi: 0x9e}, -+ {value: 0x001f, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xb6}, -+ {value: 0x0018, lo: 0xb7, hi: 0xb7}, -+ {value: 0x0008, lo: 0xb8, hi: 0xbf}, -+ // Block 0x1, offset 0x8 -+ {value: 0x0000, lo: 0x10}, -+ {value: 0x0008, lo: 0x80, hi: 0x80}, -+ {value: 0xe01d, lo: 0x81, hi: 0x81}, -+ {value: 0x0008, lo: 0x82, hi: 0x82}, -+ {value: 0x0335, lo: 0x83, hi: 0x83}, -+ {value: 0x034d, lo: 0x84, hi: 0x84}, -+ {value: 0x0365, lo: 0x85, hi: 0x85}, -+ {value: 0xe00d, lo: 0x86, hi: 0x86}, -+ {value: 0x0008, lo: 0x87, hi: 0x87}, -+ {value: 0xe00d, lo: 0x88, hi: 0x88}, -+ {value: 0x0008, lo: 0x89, hi: 0x89}, -+ {value: 0xe00d, lo: 0x8a, hi: 0x8a}, -+ {value: 0x0008, lo: 0x8b, hi: 0x8b}, -+ {value: 0xe00d, lo: 0x8c, hi: 0x8c}, -+ {value: 0x0008, lo: 0x8d, hi: 0x8d}, -+ {value: 0xe00d, lo: 0x8e, hi: 0x8e}, -+ {value: 0x0008, lo: 0x8f, hi: 0xbf}, -+ // Block 0x2, offset 0x19 -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0008, lo: 0x80, hi: 0xaf}, -+ {value: 0x00a9, lo: 0xb0, hi: 0xb0}, -+ {value: 0x037d, lo: 0xb1, hi: 0xb1}, -+ {value: 0x00b1, lo: 0xb2, hi: 0xb2}, -+ {value: 0x00b9, lo: 0xb3, hi: 0xb3}, -+ {value: 0x034d, lo: 0xb4, hi: 0xb4}, -+ {value: 0x0395, lo: 0xb5, hi: 0xb5}, -+ {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, -+ {value: 0x00c1, lo: 0xb7, hi: 0xb7}, -+ {value: 0x00c9, lo: 0xb8, hi: 0xb8}, -+ {value: 0x0008, lo: 0xb9, hi: 0xbf}, -+ // Block 0x3, offset 0x25 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x3308, lo: 0x80, hi: 0xbf}, -+ // Block 0x4, offset 0x27 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x03f5, lo: 0x80, hi: 0x8f}, -+ {value: 0xe105, lo: 0x90, hi: 0x9f}, -+ {value: 0x049d, lo: 0xa0, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x5, offset 0x2c -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xe185, lo: 0x80, hi: 0x8f}, -+ {value: 0x0545, lo: 0x90, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x98}, -+ {value: 0x0008, lo: 0x99, hi: 0x99}, -+ {value: 0x0018, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0x6, offset 0x33 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0x86}, -+ {value: 0x0131, lo: 0x87, hi: 0x87}, -+ {value: 0x0008, lo: 0x88, hi: 0x88}, -+ {value: 0x0018, lo: 0x89, hi: 0x8a}, -+ {value: 0x0040, lo: 0x8b, hi: 0x8c}, -+ {value: 0x0018, lo: 0x8d, hi: 0x8f}, -+ {value: 0x0040, lo: 0x90, hi: 0x90}, -+ {value: 0x3308, lo: 0x91, hi: 0xbd}, -+ {value: 0x0818, lo: 0xbe, hi: 0xbe}, -+ {value: 0x3308, lo: 0xbf, hi: 0xbf}, -+ // Block 0x7, offset 0x3e -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0818, lo: 0x80, hi: 0x80}, -+ {value: 0x3308, lo: 0x81, hi: 0x82}, -+ {value: 0x0818, lo: 0x83, hi: 0x83}, -+ {value: 0x3308, lo: 0x84, hi: 0x85}, -+ {value: 0x0818, lo: 0x86, hi: 0x86}, -+ {value: 0x3308, lo: 0x87, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8f}, -+ {value: 0x0808, lo: 0x90, hi: 0xaa}, -+ {value: 0x0040, lo: 0xab, hi: 0xae}, -+ {value: 0x0808, lo: 0xaf, hi: 0xb4}, -+ {value: 0x0040, lo: 0xb5, hi: 0xbf}, -+ // Block 0x8, offset 0x4a -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0a08, lo: 0x80, hi: 0x87}, -+ {value: 0x0c08, lo: 0x88, hi: 0x99}, -+ {value: 0x0a08, lo: 0x9a, hi: 0xbf}, -+ // Block 0x9, offset 0x4e -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x3308, lo: 0x80, hi: 0x8a}, -+ {value: 0x0040, lo: 0x8b, hi: 0x8c}, -+ {value: 0x0c08, lo: 0x8d, hi: 0x8d}, -+ {value: 0x0a08, lo: 0x8e, hi: 0x98}, -+ {value: 0x0c08, lo: 0x99, hi: 0x9b}, -+ {value: 0x0a08, lo: 0x9c, hi: 0xaa}, -+ {value: 0x0c08, lo: 0xab, hi: 0xac}, -+ {value: 0x0a08, lo: 0xad, hi: 0xb0}, -+ {value: 0x0c08, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0a08, lo: 0xb2, hi: 0xb2}, -+ {value: 0x0c08, lo: 0xb3, hi: 0xb4}, -+ {value: 0x0a08, lo: 0xb5, hi: 0xb7}, -+ {value: 0x0c08, lo: 0xb8, hi: 0xb9}, -+ {value: 0x0a08, lo: 0xba, hi: 0xbf}, -+ // Block 0xa, offset 0x5d -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0808, lo: 0x80, hi: 0xa5}, -+ {value: 0x3308, lo: 0xa6, hi: 0xb0}, -+ {value: 0x0808, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0040, lo: 0xb2, hi: 0xbf}, -+ // Block 0xb, offset 0x62 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0808, lo: 0x80, hi: 0x89}, -+ {value: 0x0a08, lo: 0x8a, hi: 0xaa}, -+ {value: 0x3308, lo: 0xab, hi: 0xb3}, -+ {value: 0x0808, lo: 0xb4, hi: 0xb5}, -+ {value: 0x0018, lo: 0xb6, hi: 0xb9}, -+ {value: 0x0818, lo: 0xba, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbc}, -+ {value: 0x3308, lo: 0xbd, hi: 0xbd}, -+ {value: 0x0818, lo: 0xbe, hi: 0xbf}, -+ // Block 0xc, offset 0x6c -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0808, lo: 0x80, hi: 0x95}, -+ {value: 0x3308, lo: 0x96, hi: 0x99}, -+ {value: 0x0808, lo: 0x9a, hi: 0x9a}, -+ {value: 0x3308, lo: 0x9b, hi: 0xa3}, -+ {value: 0x0808, lo: 0xa4, hi: 0xa4}, -+ {value: 0x3308, lo: 0xa5, hi: 0xa7}, -+ {value: 0x0808, lo: 0xa8, hi: 0xa8}, -+ {value: 0x3308, lo: 0xa9, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x0818, lo: 0xb0, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0xd, offset 0x78 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0a08, lo: 0x80, hi: 0x88}, -+ {value: 0x0808, lo: 0x89, hi: 0x89}, -+ {value: 0x3308, lo: 0x8a, hi: 0xa1}, -+ {value: 0x0840, lo: 0xa2, hi: 0xa2}, -+ {value: 0x3308, lo: 0xa3, hi: 0xbf}, -+ // Block 0xe, offset 0x7e -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x3308, lo: 0x80, hi: 0x82}, -+ {value: 0x3008, lo: 0x83, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0xb9}, -+ {value: 0x3308, lo: 0xba, hi: 0xba}, -+ {value: 0x3008, lo: 0xbb, hi: 0xbb}, -+ {value: 0x3308, lo: 0xbc, hi: 0xbc}, -+ {value: 0x0008, lo: 0xbd, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbf}, -+ // Block 0xf, offset 0x87 -+ {value: 0x0000, lo: 0x0f}, -+ {value: 0x3308, lo: 0x80, hi: 0x80}, -+ {value: 0x3008, lo: 0x81, hi: 0x82}, -+ {value: 0x0040, lo: 0x83, hi: 0x85}, -+ {value: 0x3008, lo: 0x86, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x89}, -+ {value: 0x3008, lo: 0x8a, hi: 0x8c}, -+ {value: 0x3b08, lo: 0x8d, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x90}, -+ {value: 0x0040, lo: 0x91, hi: 0x96}, -+ {value: 0x3008, lo: 0x97, hi: 0x97}, -+ {value: 0x0040, lo: 0x98, hi: 0xa5}, -+ {value: 0x0008, lo: 0xa6, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbf}, -+ // Block 0x10, offset 0x97 -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x3308, lo: 0x80, hi: 0x80}, -+ {value: 0x3008, lo: 0x81, hi: 0x83}, -+ {value: 0x3308, lo: 0x84, hi: 0x84}, -+ {value: 0x0008, lo: 0x85, hi: 0x8c}, -+ {value: 0x0040, lo: 0x8d, hi: 0x8d}, -+ {value: 0x0008, lo: 0x8e, hi: 0x90}, -+ {value: 0x0040, lo: 0x91, hi: 0x91}, -+ {value: 0x0008, lo: 0x92, hi: 0xa8}, -+ {value: 0x0040, lo: 0xa9, hi: 0xa9}, -+ {value: 0x0008, lo: 0xaa, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbb}, -+ {value: 0x3308, lo: 0xbc, hi: 0xbc}, -+ {value: 0x0008, lo: 0xbd, hi: 0xbd}, -+ {value: 0x3308, lo: 0xbe, hi: 0xbf}, -+ // Block 0x11, offset 0xa6 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x3308, lo: 0x80, hi: 0x81}, -+ {value: 0x3008, lo: 0x82, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0x8c}, -+ {value: 0x0040, lo: 0x8d, hi: 0x8d}, -+ {value: 0x0008, lo: 0x8e, hi: 0x90}, -+ {value: 0x0040, lo: 0x91, hi: 0x91}, -+ {value: 0x0008, lo: 0x92, hi: 0xba}, -+ {value: 0x3b08, lo: 0xbb, hi: 0xbc}, -+ {value: 0x0008, lo: 0xbd, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbf}, -+ // Block 0x12, offset 0xb1 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0040, lo: 0x80, hi: 0x80}, -+ {value: 0x3308, lo: 0x81, hi: 0x81}, -+ {value: 0x3008, lo: 0x82, hi: 0x83}, -+ {value: 0x0040, lo: 0x84, hi: 0x84}, -+ {value: 0x0008, lo: 0x85, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x99}, -+ {value: 0x0008, lo: 0x9a, hi: 0xb1}, -+ {value: 0x0040, lo: 0xb2, hi: 0xb2}, -+ {value: 0x0008, lo: 0xb3, hi: 0xbb}, -+ {value: 0x0040, lo: 0xbc, hi: 0xbc}, -+ {value: 0x0008, lo: 0xbd, hi: 0xbd}, -+ {value: 0x0040, lo: 0xbe, hi: 0xbf}, -+ // Block 0x13, offset 0xbe -+ {value: 0x0000, lo: 0x10}, -+ {value: 0x0008, lo: 0x80, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x89}, -+ {value: 0x3b08, lo: 0x8a, hi: 0x8a}, -+ {value: 0x0040, lo: 0x8b, hi: 0x8e}, -+ {value: 0x3008, lo: 0x8f, hi: 0x91}, -+ {value: 0x3308, lo: 0x92, hi: 0x94}, -+ {value: 0x0040, lo: 0x95, hi: 0x95}, -+ {value: 0x3308, lo: 0x96, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x97}, -+ {value: 0x3008, lo: 0x98, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xa5}, -+ {value: 0x0008, lo: 0xa6, hi: 0xaf}, -+ {value: 0x0040, lo: 0xb0, hi: 0xb1}, -+ {value: 0x3008, lo: 0xb2, hi: 0xb3}, -+ {value: 0x0018, lo: 0xb4, hi: 0xb4}, -+ {value: 0x0040, lo: 0xb5, hi: 0xbf}, -+ // Block 0x14, offset 0xcf -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0040, lo: 0x80, hi: 0x80}, -+ {value: 0x0008, lo: 0x81, hi: 0xb0}, -+ {value: 0x3308, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0008, lo: 0xb2, hi: 0xb2}, -+ {value: 0x01f1, lo: 0xb3, hi: 0xb3}, -+ {value: 0x3308, lo: 0xb4, hi: 0xb9}, -+ {value: 0x3b08, lo: 0xba, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbe}, -+ {value: 0x0018, lo: 0xbf, hi: 0xbf}, -+ // Block 0x15, offset 0xd9 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0008, lo: 0x80, hi: 0x86}, -+ {value: 0x3308, lo: 0x87, hi: 0x8e}, -+ {value: 0x0018, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0018, lo: 0x9a, hi: 0x9b}, -+ {value: 0x0040, lo: 0x9c, hi: 0xbf}, -+ // Block 0x16, offset 0xe0 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0008, lo: 0x80, hi: 0x84}, -+ {value: 0x0040, lo: 0x85, hi: 0x85}, -+ {value: 0x0008, lo: 0x86, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x87}, -+ {value: 0x3308, lo: 0x88, hi: 0x8e}, -+ {value: 0x0040, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9b}, -+ {value: 0x0201, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0209, lo: 0x9d, hi: 0x9d}, -+ {value: 0x0008, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xbf}, -+ // Block 0x17, offset 0xed -+ {value: 0x0000, lo: 0x10}, -+ {value: 0x0008, lo: 0x80, hi: 0x80}, -+ {value: 0x0018, lo: 0x81, hi: 0x8a}, -+ {value: 0x0008, lo: 0x8b, hi: 0x8b}, -+ {value: 0xe03d, lo: 0x8c, hi: 0x8c}, -+ {value: 0x0018, lo: 0x8d, hi: 0x97}, -+ {value: 0x3308, lo: 0x98, hi: 0x99}, -+ {value: 0x0018, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa9}, -+ {value: 0x0018, lo: 0xaa, hi: 0xb4}, -+ {value: 0x3308, lo: 0xb5, hi: 0xb5}, -+ {value: 0x0018, lo: 0xb6, hi: 0xb6}, -+ {value: 0x3308, lo: 0xb7, hi: 0xb7}, -+ {value: 0x0018, lo: 0xb8, hi: 0xb8}, -+ {value: 0x3308, lo: 0xb9, hi: 0xb9}, -+ {value: 0x0018, lo: 0xba, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbf}, -+ // Block 0x18, offset 0xfe -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0018, lo: 0x80, hi: 0x85}, -+ {value: 0x3308, lo: 0x86, hi: 0x86}, -+ {value: 0x0018, lo: 0x87, hi: 0x8c}, -+ {value: 0x0040, lo: 0x8d, hi: 0x8d}, -+ {value: 0x0018, lo: 0x8e, hi: 0x9a}, -+ {value: 0x0040, lo: 0x9b, hi: 0xbf}, -+ // Block 0x19, offset 0x105 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0xaa}, -+ {value: 0x3008, lo: 0xab, hi: 0xac}, -+ {value: 0x3308, lo: 0xad, hi: 0xb0}, -+ {value: 0x3008, lo: 0xb1, hi: 0xb1}, -+ {value: 0x3308, lo: 0xb2, hi: 0xb7}, -+ {value: 0x3008, lo: 0xb8, hi: 0xb8}, -+ {value: 0x3b08, lo: 0xb9, hi: 0xba}, -+ {value: 0x3008, lo: 0xbb, hi: 0xbc}, -+ {value: 0x3308, lo: 0xbd, hi: 0xbe}, -+ {value: 0x0008, lo: 0xbf, hi: 0xbf}, -+ // Block 0x1a, offset 0x110 -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x0018, lo: 0x8a, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x95}, -+ {value: 0x3008, lo: 0x96, hi: 0x97}, -+ {value: 0x3308, lo: 0x98, hi: 0x99}, -+ {value: 0x0008, lo: 0x9a, hi: 0x9d}, -+ {value: 0x3308, lo: 0x9e, hi: 0xa0}, -+ {value: 0x0008, lo: 0xa1, hi: 0xa1}, -+ {value: 0x3008, lo: 0xa2, hi: 0xa4}, -+ {value: 0x0008, lo: 0xa5, hi: 0xa6}, -+ {value: 0x3008, lo: 0xa7, hi: 0xad}, -+ {value: 0x0008, lo: 0xae, hi: 0xb0}, -+ {value: 0x3308, lo: 0xb1, hi: 0xb4}, -+ {value: 0x0008, lo: 0xb5, hi: 0xbf}, -+ // Block 0x1b, offset 0x11f -+ {value: 0x0000, lo: 0x0d}, -+ {value: 0x0008, lo: 0x80, hi: 0x81}, -+ {value: 0x3308, lo: 0x82, hi: 0x82}, -+ {value: 0x3008, lo: 0x83, hi: 0x84}, -+ {value: 0x3308, lo: 0x85, hi: 0x86}, -+ {value: 0x3008, lo: 0x87, hi: 0x8c}, -+ {value: 0x3308, lo: 0x8d, hi: 0x8d}, -+ {value: 0x0008, lo: 0x8e, hi: 0x8e}, -+ {value: 0x3008, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x3008, lo: 0x9a, hi: 0x9c}, -+ {value: 0x3308, lo: 0x9d, hi: 0x9d}, -+ {value: 0x0018, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xbf}, -+ // Block 0x1c, offset 0x12d -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0040, lo: 0x80, hi: 0x86}, -+ {value: 0x055d, lo: 0x87, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8c}, -+ {value: 0x055d, lo: 0x8d, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xba}, -+ {value: 0x0018, lo: 0xbb, hi: 0xbb}, -+ {value: 0xe105, lo: 0xbc, hi: 0xbc}, -+ {value: 0x0008, lo: 0xbd, hi: 0xbf}, -+ // Block 0x1d, offset 0x137 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x0018, lo: 0x80, hi: 0xbf}, -+ // Block 0x1e, offset 0x139 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0x9e}, -+ {value: 0x0040, lo: 0x9f, hi: 0xa0}, -+ {value: 0x2018, lo: 0xa1, hi: 0xb5}, -+ {value: 0x0018, lo: 0xb6, hi: 0xbf}, -+ // Block 0x1f, offset 0x13e -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0018, lo: 0x80, hi: 0xa7}, -+ {value: 0x2018, lo: 0xa8, hi: 0xbf}, -+ // Block 0x20, offset 0x141 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x2018, lo: 0x80, hi: 0x82}, -+ {value: 0x0018, lo: 0x83, hi: 0xbf}, -+ // Block 0x21, offset 0x144 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x0008, lo: 0x80, hi: 0xbf}, -+ // Block 0x22, offset 0x146 -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0008, lo: 0x80, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x89}, -+ {value: 0x0008, lo: 0x8a, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x97}, -+ {value: 0x0008, lo: 0x98, hi: 0x98}, -+ {value: 0x0040, lo: 0x99, hi: 0x99}, -+ {value: 0x0008, lo: 0x9a, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0x23, offset 0x152 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x89}, -+ {value: 0x0008, lo: 0x8a, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xb0}, -+ {value: 0x0040, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0008, lo: 0xb2, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xb7}, -+ {value: 0x0008, lo: 0xb8, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0x24, offset 0x15d -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0x80}, -+ {value: 0x0040, lo: 0x81, hi: 0x81}, -+ {value: 0x0008, lo: 0x82, hi: 0x85}, -+ {value: 0x0040, lo: 0x86, hi: 0x87}, -+ {value: 0x0008, lo: 0x88, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x97}, -+ {value: 0x0008, lo: 0x98, hi: 0xbf}, -+ // Block 0x25, offset 0x165 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0x90}, -+ {value: 0x0040, lo: 0x91, hi: 0x91}, -+ {value: 0x0008, lo: 0x92, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0x97}, -+ {value: 0x0008, lo: 0x98, hi: 0xbf}, -+ // Block 0x26, offset 0x16b -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0x9a}, -+ {value: 0x0040, lo: 0x9b, hi: 0x9c}, -+ {value: 0x3308, lo: 0x9d, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xbc}, -+ {value: 0x0040, lo: 0xbd, hi: 0xbf}, -+ // Block 0x27, offset 0x171 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0x28, offset 0x176 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xb7}, -+ {value: 0xe045, lo: 0xb8, hi: 0xbd}, -+ {value: 0x0040, lo: 0xbe, hi: 0xbf}, -+ // Block 0x29, offset 0x17b -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0018, lo: 0x80, hi: 0x80}, -+ {value: 0x0008, lo: 0x81, hi: 0xbf}, -+ // Block 0x2a, offset 0x17e -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0xac}, -+ {value: 0x0018, lo: 0xad, hi: 0xae}, -+ {value: 0x0008, lo: 0xaf, hi: 0xbf}, -+ // Block 0x2b, offset 0x182 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0040, lo: 0x80, hi: 0x80}, -+ {value: 0x0008, lo: 0x81, hi: 0x9a}, -+ {value: 0x0018, lo: 0x9b, hi: 0x9c}, -+ {value: 0x0040, lo: 0x9d, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0x2c, offset 0x188 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0xaa}, -+ {value: 0x0018, lo: 0xab, hi: 0xb0}, -+ {value: 0x0008, lo: 0xb1, hi: 0xb8}, -+ {value: 0x0040, lo: 0xb9, hi: 0xbf}, -+ // Block 0x2d, offset 0x18d -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0x91}, -+ {value: 0x3308, lo: 0x92, hi: 0x93}, -+ {value: 0x3b08, lo: 0x94, hi: 0x94}, -+ {value: 0x3808, lo: 0x95, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0x9e}, -+ {value: 0x0008, lo: 0x9f, hi: 0xb1}, -+ {value: 0x3308, lo: 0xb2, hi: 0xb3}, -+ {value: 0x3808, lo: 0xb4, hi: 0xb4}, -+ {value: 0x0018, lo: 0xb5, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xbf}, -+ // Block 0x2e, offset 0x198 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0008, lo: 0x80, hi: 0x91}, -+ {value: 0x3308, lo: 0x92, hi: 0x93}, -+ {value: 0x0040, lo: 0x94, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xac}, -+ {value: 0x0040, lo: 0xad, hi: 0xad}, -+ {value: 0x0008, lo: 0xae, hi: 0xb0}, -+ {value: 0x0040, lo: 0xb1, hi: 0xb1}, -+ {value: 0x3308, lo: 0xb2, hi: 0xb3}, -+ {value: 0x0040, lo: 0xb4, hi: 0xbf}, -+ // Block 0x2f, offset 0x1a2 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0xb3}, -+ {value: 0x3340, lo: 0xb4, hi: 0xb5}, -+ {value: 0x3008, lo: 0xb6, hi: 0xb6}, -+ {value: 0x3308, lo: 0xb7, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbf}, -+ // Block 0x30, offset 0x1a8 -+ {value: 0x0000, lo: 0x10}, -+ {value: 0x3008, lo: 0x80, hi: 0x85}, -+ {value: 0x3308, lo: 0x86, hi: 0x86}, -+ {value: 0x3008, lo: 0x87, hi: 0x88}, -+ {value: 0x3308, lo: 0x89, hi: 0x91}, -+ {value: 0x3b08, lo: 0x92, hi: 0x92}, -+ {value: 0x3308, lo: 0x93, hi: 0x93}, -+ {value: 0x0018, lo: 0x94, hi: 0x96}, -+ {value: 0x0008, lo: 0x97, hi: 0x97}, -+ {value: 0x0018, lo: 0x98, hi: 0x9b}, -+ {value: 0x0008, lo: 0x9c, hi: 0x9c}, -+ {value: 0x3308, lo: 0x9d, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa9}, -+ {value: 0x0040, lo: 0xaa, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0x31, offset 0x1b9 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0018, lo: 0x80, hi: 0x85}, -+ {value: 0x0040, lo: 0x86, hi: 0x86}, -+ {value: 0x0218, lo: 0x87, hi: 0x87}, -+ {value: 0x0018, lo: 0x88, hi: 0x8a}, -+ {value: 0x33c0, lo: 0x8b, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8e}, -+ {value: 0x33c0, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0208, lo: 0xa0, hi: 0xbf}, -+ // Block 0x32, offset 0x1c4 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0208, lo: 0x80, hi: 0xb8}, -+ {value: 0x0040, lo: 0xb9, hi: 0xbf}, -+ // Block 0x33, offset 0x1c7 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0x84}, -+ {value: 0x3308, lo: 0x85, hi: 0x86}, -+ {value: 0x0208, lo: 0x87, hi: 0xa8}, -+ {value: 0x3308, lo: 0xa9, hi: 0xa9}, -+ {value: 0x0208, lo: 0xaa, hi: 0xaa}, -+ {value: 0x0040, lo: 0xab, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x34, offset 0x1cf -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xbf}, -+ // Block 0x35, offset 0x1d2 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0008, lo: 0x80, hi: 0x9e}, -+ {value: 0x0040, lo: 0x9f, hi: 0x9f}, -+ {value: 0x3308, lo: 0xa0, hi: 0xa2}, -+ {value: 0x3008, lo: 0xa3, hi: 0xa6}, -+ {value: 0x3308, lo: 0xa7, hi: 0xa8}, -+ {value: 0x3008, lo: 0xa9, hi: 0xab}, -+ {value: 0x0040, lo: 0xac, hi: 0xaf}, -+ {value: 0x3008, lo: 0xb0, hi: 0xb1}, -+ {value: 0x3308, lo: 0xb2, hi: 0xb2}, -+ {value: 0x3008, lo: 0xb3, hi: 0xb8}, -+ {value: 0x3308, lo: 0xb9, hi: 0xbb}, -+ {value: 0x0040, lo: 0xbc, hi: 0xbf}, -+ // Block 0x36, offset 0x1df -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0018, lo: 0x80, hi: 0x80}, -+ {value: 0x0040, lo: 0x81, hi: 0x83}, -+ {value: 0x0018, lo: 0x84, hi: 0x85}, -+ {value: 0x0008, lo: 0x86, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb4}, -+ {value: 0x0040, lo: 0xb5, hi: 0xbf}, -+ // Block 0x37, offset 0x1e7 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0xab}, -+ {value: 0x0040, lo: 0xac, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x38, offset 0x1eb -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0028, lo: 0x9a, hi: 0x9a}, -+ {value: 0x0040, lo: 0x9b, hi: 0x9d}, -+ {value: 0x0018, lo: 0x9e, hi: 0xbf}, -+ // Block 0x39, offset 0x1f2 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0x96}, -+ {value: 0x3308, lo: 0x97, hi: 0x98}, -+ {value: 0x3008, lo: 0x99, hi: 0x9a}, -+ {value: 0x3308, lo: 0x9b, hi: 0x9b}, -+ {value: 0x0040, lo: 0x9c, hi: 0x9d}, -+ {value: 0x0018, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0x3a, offset 0x1fa -+ {value: 0x0000, lo: 0x0f}, -+ {value: 0x0008, lo: 0x80, hi: 0x94}, -+ {value: 0x3008, lo: 0x95, hi: 0x95}, -+ {value: 0x3308, lo: 0x96, hi: 0x96}, -+ {value: 0x3008, lo: 0x97, hi: 0x97}, -+ {value: 0x3308, lo: 0x98, hi: 0x9e}, -+ {value: 0x0040, lo: 0x9f, hi: 0x9f}, -+ {value: 0x3b08, lo: 0xa0, hi: 0xa0}, -+ {value: 0x3008, lo: 0xa1, hi: 0xa1}, -+ {value: 0x3308, lo: 0xa2, hi: 0xa2}, -+ {value: 0x3008, lo: 0xa3, hi: 0xa4}, -+ {value: 0x3308, lo: 0xa5, hi: 0xac}, -+ {value: 0x3008, lo: 0xad, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xbc}, -+ {value: 0x0040, lo: 0xbd, hi: 0xbe}, -+ {value: 0x3308, lo: 0xbf, hi: 0xbf}, -+ // Block 0x3b, offset 0x20a -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xa6}, -+ {value: 0x0008, lo: 0xa7, hi: 0xa7}, -+ {value: 0x0018, lo: 0xa8, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xbd}, -+ {value: 0x3318, lo: 0xbe, hi: 0xbe}, -+ {value: 0x3308, lo: 0xbf, hi: 0xbf}, -+ // Block 0x3c, offset 0x216 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x3308, lo: 0x80, hi: 0x8e}, -+ {value: 0x0040, lo: 0x8f, hi: 0xbf}, -+ // Block 0x3d, offset 0x219 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x3308, lo: 0x80, hi: 0x83}, -+ {value: 0x3008, lo: 0x84, hi: 0x84}, -+ {value: 0x0008, lo: 0x85, hi: 0xb3}, -+ {value: 0x3308, lo: 0xb4, hi: 0xb4}, -+ {value: 0x3008, lo: 0xb5, hi: 0xb5}, -+ {value: 0x3308, lo: 0xb6, hi: 0xba}, -+ {value: 0x3008, lo: 0xbb, hi: 0xbb}, -+ {value: 0x3308, lo: 0xbc, hi: 0xbc}, -+ {value: 0x3008, lo: 0xbd, hi: 0xbf}, -+ // Block 0x3e, offset 0x223 -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x3008, lo: 0x80, hi: 0x81}, -+ {value: 0x3308, lo: 0x82, hi: 0x82}, -+ {value: 0x3008, lo: 0x83, hi: 0x83}, -+ {value: 0x3808, lo: 0x84, hi: 0x84}, -+ {value: 0x0008, lo: 0x85, hi: 0x8c}, -+ {value: 0x0040, lo: 0x8d, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0018, lo: 0x9a, hi: 0xaa}, -+ {value: 0x3308, lo: 0xab, hi: 0xb3}, -+ {value: 0x0018, lo: 0xb4, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0x3f, offset 0x22f -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x3308, lo: 0x80, hi: 0x81}, -+ {value: 0x3008, lo: 0x82, hi: 0x82}, -+ {value: 0x0008, lo: 0x83, hi: 0xa0}, -+ {value: 0x3008, lo: 0xa1, hi: 0xa1}, -+ {value: 0x3308, lo: 0xa2, hi: 0xa5}, -+ {value: 0x3008, lo: 0xa6, hi: 0xa7}, -+ {value: 0x3308, lo: 0xa8, hi: 0xa9}, -+ {value: 0x3808, lo: 0xaa, hi: 0xaa}, -+ {value: 0x3b08, lo: 0xab, hi: 0xab}, -+ {value: 0x3308, lo: 0xac, hi: 0xad}, -+ {value: 0x0008, lo: 0xae, hi: 0xbf}, -+ // Block 0x40, offset 0x23b -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0008, lo: 0x80, hi: 0xa5}, -+ {value: 0x3308, lo: 0xa6, hi: 0xa6}, -+ {value: 0x3008, lo: 0xa7, hi: 0xa7}, -+ {value: 0x3308, lo: 0xa8, hi: 0xa9}, -+ {value: 0x3008, lo: 0xaa, hi: 0xac}, -+ {value: 0x3308, lo: 0xad, hi: 0xad}, -+ {value: 0x3008, lo: 0xae, hi: 0xae}, -+ {value: 0x3308, lo: 0xaf, hi: 0xb1}, -+ {value: 0x3808, lo: 0xb2, hi: 0xb3}, -+ {value: 0x0040, lo: 0xb4, hi: 0xbb}, -+ {value: 0x0018, lo: 0xbc, hi: 0xbf}, -+ // Block 0x41, offset 0x247 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0xa3}, -+ {value: 0x3008, lo: 0xa4, hi: 0xab}, -+ {value: 0x3308, lo: 0xac, hi: 0xb3}, -+ {value: 0x3008, lo: 0xb4, hi: 0xb5}, -+ {value: 0x3308, lo: 0xb6, hi: 0xb7}, -+ {value: 0x0040, lo: 0xb8, hi: 0xba}, -+ {value: 0x0018, lo: 0xbb, hi: 0xbf}, -+ // Block 0x42, offset 0x24f -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0x8c}, -+ {value: 0x0008, lo: 0x8d, hi: 0xbd}, -+ {value: 0x0018, lo: 0xbe, hi: 0xbf}, -+ // Block 0x43, offset 0x254 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x02a9, lo: 0x80, hi: 0x80}, -+ {value: 0x02b1, lo: 0x81, hi: 0x81}, -+ {value: 0x02b9, lo: 0x82, hi: 0x82}, -+ {value: 0x02c1, lo: 0x83, hi: 0x83}, -+ {value: 0x02c9, lo: 0x84, hi: 0x85}, -+ {value: 0x02d1, lo: 0x86, hi: 0x86}, -+ {value: 0x02d9, lo: 0x87, hi: 0x87}, -+ {value: 0x057d, lo: 0x88, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x8f}, -+ {value: 0x059d, lo: 0x90, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbc}, -+ {value: 0x059d, lo: 0xbd, hi: 0xbf}, -+ // Block 0x44, offset 0x261 -+ {value: 0x0000, lo: 0x10}, -+ {value: 0x0018, lo: 0x80, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8f}, -+ {value: 0x3308, lo: 0x90, hi: 0x92}, -+ {value: 0x0018, lo: 0x93, hi: 0x93}, -+ {value: 0x3308, lo: 0x94, hi: 0xa0}, -+ {value: 0x3008, lo: 0xa1, hi: 0xa1}, -+ {value: 0x3308, lo: 0xa2, hi: 0xa8}, -+ {value: 0x0008, lo: 0xa9, hi: 0xac}, -+ {value: 0x3308, lo: 0xad, hi: 0xad}, -+ {value: 0x0008, lo: 0xae, hi: 0xb3}, -+ {value: 0x3308, lo: 0xb4, hi: 0xb4}, -+ {value: 0x0008, lo: 0xb5, hi: 0xb6}, -+ {value: 0x3008, lo: 0xb7, hi: 0xb7}, -+ {value: 0x3308, lo: 0xb8, hi: 0xb9}, -+ {value: 0x0008, lo: 0xba, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbf}, -+ // Block 0x45, offset 0x272 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0x87}, -+ {value: 0xe045, lo: 0x88, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0x97}, -+ {value: 0xe045, lo: 0x98, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa7}, -+ {value: 0xe045, lo: 0xa8, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb7}, -+ {value: 0xe045, lo: 0xb8, hi: 0xbf}, -+ // Block 0x46, offset 0x27d -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0x80}, -+ {value: 0x0040, lo: 0x81, hi: 0x8f}, -+ {value: 0x3318, lo: 0x90, hi: 0xb0}, -+ {value: 0x0040, lo: 0xb1, hi: 0xbf}, -+ // Block 0x47, offset 0x282 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0018, lo: 0x80, hi: 0x82}, -+ {value: 0x0040, lo: 0x83, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0x84}, -+ {value: 0x0018, lo: 0x85, hi: 0x88}, -+ {value: 0x0851, lo: 0x89, hi: 0x89}, -+ {value: 0x0018, lo: 0x8a, hi: 0x8b}, -+ {value: 0x0040, lo: 0x8c, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0xbf}, -+ // Block 0x48, offset 0x28b -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0018, lo: 0x80, hi: 0xab}, -+ {value: 0x0859, lo: 0xac, hi: 0xac}, -+ {value: 0x0861, lo: 0xad, hi: 0xad}, -+ {value: 0x0018, lo: 0xae, hi: 0xae}, -+ {value: 0x0869, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0871, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0018, lo: 0xb1, hi: 0xbf}, -+ // Block 0x49, offset 0x293 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0018, lo: 0x80, hi: 0x9f}, -+ {value: 0x0080, lo: 0xa0, hi: 0xa0}, -+ {value: 0x0018, lo: 0xa1, hi: 0xad}, -+ {value: 0x0080, lo: 0xae, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xbf}, -+ // Block 0x4a, offset 0x299 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0xa8}, -+ {value: 0x09dd, lo: 0xa9, hi: 0xa9}, -+ {value: 0x09fd, lo: 0xaa, hi: 0xaa}, -+ {value: 0x0018, lo: 0xab, hi: 0xbf}, -+ // Block 0x4b, offset 0x29e -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0018, lo: 0x80, hi: 0xa6}, -+ {value: 0x0040, lo: 0xa7, hi: 0xbf}, -+ // Block 0x4c, offset 0x2a1 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0x8b}, -+ {value: 0x0929, lo: 0x8c, hi: 0x8c}, -+ {value: 0x0018, lo: 0x8d, hi: 0xbf}, -+ // Block 0x4d, offset 0x2a5 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0018, lo: 0x80, hi: 0xb3}, -+ {value: 0x0e7e, lo: 0xb4, hi: 0xb4}, -+ {value: 0x0932, lo: 0xb5, hi: 0xb5}, -+ {value: 0x0e9e, lo: 0xb6, hi: 0xb6}, -+ {value: 0x0018, lo: 0xb7, hi: 0xbf}, -+ // Block 0x4e, offset 0x2ab -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0x9b}, -+ {value: 0x0939, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0018, lo: 0x9d, hi: 0xbf}, -+ // Block 0x4f, offset 0x2af -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0xb3}, -+ {value: 0x0040, lo: 0xb4, hi: 0xb5}, -+ {value: 0x0018, lo: 0xb6, hi: 0xbf}, -+ // Block 0x50, offset 0x2b3 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0x96}, -+ {value: 0x0018, lo: 0x97, hi: 0xbf}, -+ // Block 0x51, offset 0x2b7 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0xe185, lo: 0x80, hi: 0x8f}, -+ {value: 0x03f5, lo: 0x90, hi: 0x9f}, -+ {value: 0x0ebd, lo: 0xa0, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x52, offset 0x2bc -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0xa5}, -+ {value: 0x0040, lo: 0xa6, hi: 0xa6}, -+ {value: 0x0008, lo: 0xa7, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xac}, -+ {value: 0x0008, lo: 0xad, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x53, offset 0x2c4 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0008, lo: 0x80, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xae}, -+ {value: 0xe075, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0040, lo: 0xb1, hi: 0xbe}, -+ {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -+ // Block 0x54, offset 0x2cb -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa6}, -+ {value: 0x0040, lo: 0xa7, hi: 0xa7}, -+ {value: 0x0008, lo: 0xa8, hi: 0xae}, -+ {value: 0x0040, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xb7}, -+ {value: 0x0008, lo: 0xb8, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0x55, offset 0x2d6 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0008, lo: 0x80, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x87}, -+ {value: 0x0008, lo: 0x88, hi: 0x8e}, -+ {value: 0x0040, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x97}, -+ {value: 0x0008, lo: 0x98, hi: 0x9e}, -+ {value: 0x0040, lo: 0x9f, hi: 0x9f}, -+ {value: 0x3308, lo: 0xa0, hi: 0xbf}, -+ // Block 0x56, offset 0x2e0 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0xae}, -+ {value: 0x0008, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xbf}, -+ // Block 0x57, offset 0x2e4 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0018, lo: 0x80, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0xbf}, -+ // Block 0x58, offset 0x2e7 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0018, lo: 0x80, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9a}, -+ {value: 0x0018, lo: 0x9b, hi: 0x9e}, -+ {value: 0x0ef5, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xbf}, -+ // Block 0x59, offset 0x2ed -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0xb2}, -+ {value: 0x0f15, lo: 0xb3, hi: 0xb3}, -+ {value: 0x0040, lo: 0xb4, hi: 0xbf}, -+ // Block 0x5a, offset 0x2f1 -+ {value: 0x0020, lo: 0x01}, -+ {value: 0x0f35, lo: 0x80, hi: 0xbf}, -+ // Block 0x5b, offset 0x2f3 -+ {value: 0x0020, lo: 0x02}, -+ {value: 0x1735, lo: 0x80, hi: 0x8f}, -+ {value: 0x1915, lo: 0x90, hi: 0xbf}, -+ // Block 0x5c, offset 0x2f6 -+ {value: 0x0020, lo: 0x01}, -+ {value: 0x1f15, lo: 0x80, hi: 0xbf}, -+ // Block 0x5d, offset 0x2f8 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0040, lo: 0x80, hi: 0x80}, -+ {value: 0x0008, lo: 0x81, hi: 0xbf}, -+ // Block 0x5e, offset 0x2fb -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0008, lo: 0x80, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x98}, -+ {value: 0x3308, lo: 0x99, hi: 0x9a}, -+ {value: 0x096a, lo: 0x9b, hi: 0x9b}, -+ {value: 0x0972, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0008, lo: 0x9d, hi: 0x9e}, -+ {value: 0x0979, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xa0}, -+ {value: 0x0008, lo: 0xa1, hi: 0xbf}, -+ // Block 0x5f, offset 0x305 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xbe}, -+ {value: 0x0981, lo: 0xbf, hi: 0xbf}, -+ // Block 0x60, offset 0x308 -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x0040, lo: 0x80, hi: 0x84}, -+ {value: 0x0008, lo: 0x85, hi: 0xaf}, -+ {value: 0x0040, lo: 0xb0, hi: 0xb0}, -+ {value: 0x2a35, lo: 0xb1, hi: 0xb1}, -+ {value: 0x2a55, lo: 0xb2, hi: 0xb2}, -+ {value: 0x2a75, lo: 0xb3, hi: 0xb3}, -+ {value: 0x2a95, lo: 0xb4, hi: 0xb4}, -+ {value: 0x2a75, lo: 0xb5, hi: 0xb5}, -+ {value: 0x2ab5, lo: 0xb6, hi: 0xb6}, -+ {value: 0x2ad5, lo: 0xb7, hi: 0xb7}, -+ {value: 0x2af5, lo: 0xb8, hi: 0xb9}, -+ {value: 0x2b15, lo: 0xba, hi: 0xbb}, -+ {value: 0x2b35, lo: 0xbc, hi: 0xbd}, -+ {value: 0x2b15, lo: 0xbe, hi: 0xbf}, -+ // Block 0x61, offset 0x317 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0xa3}, -+ {value: 0x0040, lo: 0xa4, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x62, offset 0x31b -+ {value: 0x0008, lo: 0x03}, -+ {value: 0x098a, lo: 0x80, hi: 0x9e}, -+ {value: 0x0040, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0a82, lo: 0xa0, hi: 0xbf}, -+ // Block 0x63, offset 0x31f -+ {value: 0x0008, lo: 0x01}, -+ {value: 0x0d19, lo: 0x80, hi: 0xbf}, -+ // Block 0x64, offset 0x321 -+ {value: 0x0008, lo: 0x08}, -+ {value: 0x0f19, lo: 0x80, hi: 0xb0}, -+ {value: 0x4045, lo: 0xb1, hi: 0xb1}, -+ {value: 0x10a1, lo: 0xb2, hi: 0xb3}, -+ {value: 0x4065, lo: 0xb4, hi: 0xb4}, -+ {value: 0x10b1, lo: 0xb5, hi: 0xb7}, -+ {value: 0x4085, lo: 0xb8, hi: 0xb8}, -+ {value: 0x4085, lo: 0xb9, hi: 0xb9}, -+ {value: 0x10c9, lo: 0xba, hi: 0xbf}, -+ // Block 0x65, offset 0x32a -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0x8c}, -+ {value: 0x0040, lo: 0x8d, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0xbf}, -+ // Block 0x66, offset 0x32e -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xbd}, -+ {value: 0x0018, lo: 0xbe, hi: 0xbf}, -+ // Block 0x67, offset 0x333 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0x8c}, -+ {value: 0x0018, lo: 0x8d, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xab}, -+ {value: 0x0040, lo: 0xac, hi: 0xbf}, -+ // Block 0x68, offset 0x338 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0xa5}, -+ {value: 0x0018, lo: 0xa6, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xb1}, -+ {value: 0x0018, lo: 0xb2, hi: 0xb7}, -+ {value: 0x0040, lo: 0xb8, hi: 0xbf}, -+ // Block 0x69, offset 0x33e -+ {value: 0x0000, lo: 0x0f}, -+ {value: 0x0008, lo: 0x80, hi: 0x81}, -+ {value: 0x3308, lo: 0x82, hi: 0x82}, -+ {value: 0x0008, lo: 0x83, hi: 0x85}, -+ {value: 0x3b08, lo: 0x86, hi: 0x86}, -+ {value: 0x0008, lo: 0x87, hi: 0x8a}, -+ {value: 0x3308, lo: 0x8b, hi: 0x8b}, -+ {value: 0x0008, lo: 0x8c, hi: 0xa2}, -+ {value: 0x3008, lo: 0xa3, hi: 0xa4}, -+ {value: 0x3308, lo: 0xa5, hi: 0xa6}, -+ {value: 0x3008, lo: 0xa7, hi: 0xa7}, -+ {value: 0x0018, lo: 0xa8, hi: 0xab}, -+ {value: 0x3b08, lo: 0xac, hi: 0xac}, -+ {value: 0x0040, lo: 0xad, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0x6a, offset 0x34e -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0208, lo: 0x80, hi: 0xb1}, -+ {value: 0x0108, lo: 0xb2, hi: 0xb2}, -+ {value: 0x0008, lo: 0xb3, hi: 0xb3}, -+ {value: 0x0018, lo: 0xb4, hi: 0xb7}, -+ {value: 0x0040, lo: 0xb8, hi: 0xbf}, -+ // Block 0x6b, offset 0x354 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x3008, lo: 0x80, hi: 0x81}, -+ {value: 0x0008, lo: 0x82, hi: 0xb3}, -+ {value: 0x3008, lo: 0xb4, hi: 0xbf}, -+ // Block 0x6c, offset 0x358 -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x3008, lo: 0x80, hi: 0x83}, -+ {value: 0x3b08, lo: 0x84, hi: 0x84}, -+ {value: 0x3308, lo: 0x85, hi: 0x85}, -+ {value: 0x0040, lo: 0x86, hi: 0x8d}, -+ {value: 0x0018, lo: 0x8e, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9f}, -+ {value: 0x3308, lo: 0xa0, hi: 0xb1}, -+ {value: 0x0008, lo: 0xb2, hi: 0xb7}, -+ {value: 0x0018, lo: 0xb8, hi: 0xba}, -+ {value: 0x0008, lo: 0xbb, hi: 0xbb}, -+ {value: 0x0018, lo: 0xbc, hi: 0xbc}, -+ {value: 0x0008, lo: 0xbd, hi: 0xbe}, -+ {value: 0x3308, lo: 0xbf, hi: 0xbf}, -+ // Block 0x6d, offset 0x367 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0xa5}, -+ {value: 0x3308, lo: 0xa6, hi: 0xad}, -+ {value: 0x0018, lo: 0xae, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x6e, offset 0x36c -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0x86}, -+ {value: 0x3308, lo: 0x87, hi: 0x91}, -+ {value: 0x3008, lo: 0x92, hi: 0x92}, -+ {value: 0x3808, lo: 0x93, hi: 0x93}, -+ {value: 0x0040, lo: 0x94, hi: 0x9e}, -+ {value: 0x0018, lo: 0x9f, hi: 0xbc}, -+ {value: 0x0040, lo: 0xbd, hi: 0xbf}, -+ // Block 0x6f, offset 0x374 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x3308, lo: 0x80, hi: 0x82}, -+ {value: 0x3008, lo: 0x83, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xb3}, -+ {value: 0x3008, lo: 0xb4, hi: 0xb5}, -+ {value: 0x3308, lo: 0xb6, hi: 0xb9}, -+ {value: 0x3008, lo: 0xba, hi: 0xbb}, -+ {value: 0x3308, lo: 0xbc, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbf}, -+ // Block 0x70, offset 0x37e -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x3808, lo: 0x80, hi: 0x80}, -+ {value: 0x0018, lo: 0x81, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8e}, -+ {value: 0x0008, lo: 0x8f, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9d}, -+ {value: 0x0018, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa4}, -+ {value: 0x3308, lo: 0xa5, hi: 0xa5}, -+ {value: 0x0008, lo: 0xa6, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0x71, offset 0x389 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0xa8}, -+ {value: 0x3308, lo: 0xa9, hi: 0xae}, -+ {value: 0x3008, lo: 0xaf, hi: 0xb0}, -+ {value: 0x3308, lo: 0xb1, hi: 0xb2}, -+ {value: 0x3008, lo: 0xb3, hi: 0xb4}, -+ {value: 0x3308, lo: 0xb5, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xbf}, -+ // Block 0x72, offset 0x391 -+ {value: 0x0000, lo: 0x10}, -+ {value: 0x0008, lo: 0x80, hi: 0x82}, -+ {value: 0x3308, lo: 0x83, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0x8b}, -+ {value: 0x3308, lo: 0x8c, hi: 0x8c}, -+ {value: 0x3008, lo: 0x8d, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9b}, -+ {value: 0x0018, lo: 0x9c, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xb6}, -+ {value: 0x0018, lo: 0xb7, hi: 0xb9}, -+ {value: 0x0008, lo: 0xba, hi: 0xba}, -+ {value: 0x3008, lo: 0xbb, hi: 0xbb}, -+ {value: 0x3308, lo: 0xbc, hi: 0xbc}, -+ {value: 0x3008, lo: 0xbd, hi: 0xbd}, -+ {value: 0x0008, lo: 0xbe, hi: 0xbf}, -+ // Block 0x73, offset 0x3a2 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0008, lo: 0x80, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0008, lo: 0xb1, hi: 0xb1}, -+ {value: 0x3308, lo: 0xb2, hi: 0xb4}, -+ {value: 0x0008, lo: 0xb5, hi: 0xb6}, -+ {value: 0x3308, lo: 0xb7, hi: 0xb8}, -+ {value: 0x0008, lo: 0xb9, hi: 0xbd}, -+ {value: 0x3308, lo: 0xbe, hi: 0xbf}, -+ // Block 0x74, offset 0x3ab -+ {value: 0x0000, lo: 0x0f}, -+ {value: 0x0008, lo: 0x80, hi: 0x80}, -+ {value: 0x3308, lo: 0x81, hi: 0x81}, -+ {value: 0x0008, lo: 0x82, hi: 0x82}, -+ {value: 0x0040, lo: 0x83, hi: 0x9a}, -+ {value: 0x0008, lo: 0x9b, hi: 0x9d}, -+ {value: 0x0018, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xaa}, -+ {value: 0x3008, lo: 0xab, hi: 0xab}, -+ {value: 0x3308, lo: 0xac, hi: 0xad}, -+ {value: 0x3008, lo: 0xae, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb1}, -+ {value: 0x0008, lo: 0xb2, hi: 0xb4}, -+ {value: 0x3008, lo: 0xb5, hi: 0xb5}, -+ {value: 0x3b08, lo: 0xb6, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xbf}, -+ // Block 0x75, offset 0x3bb -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0040, lo: 0x80, hi: 0x80}, -+ {value: 0x0008, lo: 0x81, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x88}, -+ {value: 0x0008, lo: 0x89, hi: 0x8e}, -+ {value: 0x0040, lo: 0x8f, hi: 0x90}, -+ {value: 0x0008, lo: 0x91, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa6}, -+ {value: 0x0040, lo: 0xa7, hi: 0xa7}, -+ {value: 0x0008, lo: 0xa8, hi: 0xae}, -+ {value: 0x0040, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x76, offset 0x3c8 -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0008, lo: 0x80, hi: 0x9a}, -+ {value: 0x0018, lo: 0x9b, hi: 0x9b}, -+ {value: 0x449d, lo: 0x9c, hi: 0x9c}, -+ {value: 0x44b5, lo: 0x9d, hi: 0x9d}, -+ {value: 0x0941, lo: 0x9e, hi: 0x9e}, -+ {value: 0xe06d, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa8}, -+ {value: 0x13f9, lo: 0xa9, hi: 0xa9}, -+ {value: 0x0018, lo: 0xaa, hi: 0xab}, -+ {value: 0x0040, lo: 0xac, hi: 0xaf}, -+ {value: 0x44cd, lo: 0xb0, hi: 0xbf}, -+ // Block 0x77, offset 0x3d4 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x44ed, lo: 0x80, hi: 0x8f}, -+ {value: 0x450d, lo: 0x90, hi: 0x9f}, -+ {value: 0x452d, lo: 0xa0, hi: 0xaf}, -+ {value: 0x450d, lo: 0xb0, hi: 0xbf}, -+ // Block 0x78, offset 0x3d9 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0008, lo: 0x80, hi: 0xa2}, -+ {value: 0x3008, lo: 0xa3, hi: 0xa4}, -+ {value: 0x3308, lo: 0xa5, hi: 0xa5}, -+ {value: 0x3008, lo: 0xa6, hi: 0xa7}, -+ {value: 0x3308, lo: 0xa8, hi: 0xa8}, -+ {value: 0x3008, lo: 0xa9, hi: 0xaa}, -+ {value: 0x0018, lo: 0xab, hi: 0xab}, -+ {value: 0x3008, lo: 0xac, hi: 0xac}, -+ {value: 0x3b08, lo: 0xad, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0x79, offset 0x3e6 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0xa3}, -+ {value: 0x0040, lo: 0xa4, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xbf}, -+ // Block 0x7a, offset 0x3ea -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x8a}, -+ {value: 0x0018, lo: 0x8b, hi: 0xbb}, -+ {value: 0x0040, lo: 0xbc, hi: 0xbf}, -+ // Block 0x7b, offset 0x3ef -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x0040, lo: 0x80, hi: 0xbf}, -+ // Block 0x7c, offset 0x3f1 -+ {value: 0x0020, lo: 0x01}, -+ {value: 0x454d, lo: 0x80, hi: 0xbf}, -+ // Block 0x7d, offset 0x3f3 -+ {value: 0x0020, lo: 0x03}, -+ {value: 0x4d4d, lo: 0x80, hi: 0x94}, -+ {value: 0x4b0d, lo: 0x95, hi: 0x95}, -+ {value: 0x4fed, lo: 0x96, hi: 0xbf}, -+ // Block 0x7e, offset 0x3f7 -+ {value: 0x0020, lo: 0x01}, -+ {value: 0x552d, lo: 0x80, hi: 0xbf}, -+ // Block 0x7f, offset 0x3f9 -+ {value: 0x0020, lo: 0x03}, -+ {value: 0x5d2d, lo: 0x80, hi: 0x84}, -+ {value: 0x568d, lo: 0x85, hi: 0x85}, -+ {value: 0x5dcd, lo: 0x86, hi: 0xbf}, -+ // Block 0x80, offset 0x3fd -+ {value: 0x0020, lo: 0x08}, -+ {value: 0x6b8d, lo: 0x80, hi: 0x8f}, -+ {value: 0x6d4d, lo: 0x90, hi: 0x90}, -+ {value: 0x6d8d, lo: 0x91, hi: 0xab}, -+ {value: 0x1401, lo: 0xac, hi: 0xac}, -+ {value: 0x70ed, lo: 0xad, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xae}, -+ {value: 0x0040, lo: 0xaf, hi: 0xaf}, -+ {value: 0x710d, lo: 0xb0, hi: 0xbf}, -+ // Block 0x81, offset 0x406 -+ {value: 0x0020, lo: 0x05}, -+ {value: 0x730d, lo: 0x80, hi: 0xad}, -+ {value: 0x656d, lo: 0xae, hi: 0xae}, -+ {value: 0x78cd, lo: 0xaf, hi: 0xb5}, -+ {value: 0x6f8d, lo: 0xb6, hi: 0xb6}, -+ {value: 0x79ad, lo: 0xb7, hi: 0xbf}, -+ // Block 0x82, offset 0x40c -+ {value: 0x0008, lo: 0x03}, -+ {value: 0x1751, lo: 0x80, hi: 0x82}, -+ {value: 0x1741, lo: 0x83, hi: 0x83}, -+ {value: 0x1769, lo: 0x84, hi: 0xbf}, -+ // Block 0x83, offset 0x410 -+ {value: 0x0008, lo: 0x0f}, -+ {value: 0x1d81, lo: 0x80, hi: 0x83}, -+ {value: 0x1d99, lo: 0x84, hi: 0x85}, -+ {value: 0x1da1, lo: 0x86, hi: 0x87}, -+ {value: 0x1da9, lo: 0x88, hi: 0x8f}, -+ {value: 0x0040, lo: 0x90, hi: 0x90}, -+ {value: 0x0040, lo: 0x91, hi: 0x91}, -+ {value: 0x1de9, lo: 0x92, hi: 0x97}, -+ {value: 0x1e11, lo: 0x98, hi: 0x9c}, -+ {value: 0x1e31, lo: 0x9d, hi: 0xb3}, -+ {value: 0x1d71, lo: 0xb4, hi: 0xb4}, -+ {value: 0x1d81, lo: 0xb5, hi: 0xb5}, -+ {value: 0x1ee9, lo: 0xb6, hi: 0xbb}, -+ {value: 0x1f09, lo: 0xbc, hi: 0xbc}, -+ {value: 0x1ef9, lo: 0xbd, hi: 0xbd}, -+ {value: 0x1f19, lo: 0xbe, hi: 0xbf}, -+ // Block 0x84, offset 0x420 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0008, lo: 0x80, hi: 0x8b}, -+ {value: 0x0040, lo: 0x8c, hi: 0x8c}, -+ {value: 0x0008, lo: 0x8d, hi: 0xa6}, -+ {value: 0x0040, lo: 0xa7, hi: 0xa7}, -+ {value: 0x0008, lo: 0xa8, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbb}, -+ {value: 0x0008, lo: 0xbc, hi: 0xbd}, -+ {value: 0x0040, lo: 0xbe, hi: 0xbe}, -+ {value: 0x0008, lo: 0xbf, hi: 0xbf}, -+ // Block 0x85, offset 0x42a -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0xbf}, -+ // Block 0x86, offset 0x42f -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbf}, -+ // Block 0x87, offset 0x432 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0018, lo: 0x80, hi: 0x82}, -+ {value: 0x0040, lo: 0x83, hi: 0x86}, -+ {value: 0x0018, lo: 0x87, hi: 0xb3}, -+ {value: 0x0040, lo: 0xb4, hi: 0xb6}, -+ {value: 0x0018, lo: 0xb7, hi: 0xbf}, -+ // Block 0x88, offset 0x438 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0018, lo: 0x80, hi: 0x8e}, -+ {value: 0x0040, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0x9c}, -+ {value: 0x0040, lo: 0x9d, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xa0}, -+ {value: 0x0040, lo: 0xa1, hi: 0xbf}, -+ // Block 0x89, offset 0x43f -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0040, lo: 0x80, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0xbc}, -+ {value: 0x3308, lo: 0xbd, hi: 0xbd}, -+ {value: 0x0040, lo: 0xbe, hi: 0xbf}, -+ // Block 0x8a, offset 0x444 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0x9c}, -+ {value: 0x0040, lo: 0x9d, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0x8b, offset 0x448 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0x90}, -+ {value: 0x0040, lo: 0x91, hi: 0x9f}, -+ {value: 0x3308, lo: 0xa0, hi: 0xa0}, -+ {value: 0x0018, lo: 0xa1, hi: 0xbb}, -+ {value: 0x0040, lo: 0xbc, hi: 0xbf}, -+ // Block 0x8c, offset 0x44e -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xa3}, -+ {value: 0x0040, lo: 0xa4, hi: 0xac}, -+ {value: 0x0008, lo: 0xad, hi: 0xbf}, -+ // Block 0x8d, offset 0x453 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0008, lo: 0x80, hi: 0x80}, -+ {value: 0x0018, lo: 0x81, hi: 0x81}, -+ {value: 0x0008, lo: 0x82, hi: 0x89}, -+ {value: 0x0018, lo: 0x8a, hi: 0x8a}, -+ {value: 0x0040, lo: 0x8b, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xb5}, -+ {value: 0x3308, lo: 0xb6, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbf}, -+ // Block 0x8e, offset 0x45c -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0x9e}, -+ {value: 0x0018, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0x8f, offset 0x461 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0x83}, -+ {value: 0x0040, lo: 0x84, hi: 0x87}, -+ {value: 0x0008, lo: 0x88, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0xbf}, -+ // Block 0x90, offset 0x467 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xe145, lo: 0x80, hi: 0x87}, -+ {value: 0xe1c5, lo: 0x88, hi: 0x8f}, -+ {value: 0xe145, lo: 0x90, hi: 0x97}, -+ {value: 0x8b0d, lo: 0x98, hi: 0x9f}, -+ {value: 0x8b25, lo: 0xa0, hi: 0xa7}, -+ {value: 0x0008, lo: 0xa8, hi: 0xbf}, -+ // Block 0x91, offset 0x46e -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0008, lo: 0x80, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa9}, -+ {value: 0x0040, lo: 0xaa, hi: 0xaf}, -+ {value: 0x8b25, lo: 0xb0, hi: 0xb7}, -+ {value: 0x8b0d, lo: 0xb8, hi: 0xbf}, -+ // Block 0x92, offset 0x475 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xe145, lo: 0x80, hi: 0x87}, -+ {value: 0xe1c5, lo: 0x88, hi: 0x8f}, -+ {value: 0xe145, lo: 0x90, hi: 0x93}, -+ {value: 0x0040, lo: 0x94, hi: 0x97}, -+ {value: 0x0008, lo: 0x98, hi: 0xbb}, -+ {value: 0x0040, lo: 0xbc, hi: 0xbf}, -+ // Block 0x93, offset 0x47c -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x94, offset 0x480 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xbf}, -+ // Block 0x95, offset 0x483 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xbf}, -+ // Block 0x96, offset 0x488 -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0808, lo: 0x80, hi: 0x85}, -+ {value: 0x0040, lo: 0x86, hi: 0x87}, -+ {value: 0x0808, lo: 0x88, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x89}, -+ {value: 0x0808, lo: 0x8a, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xb6}, -+ {value: 0x0808, lo: 0xb7, hi: 0xb8}, -+ {value: 0x0040, lo: 0xb9, hi: 0xbb}, -+ {value: 0x0808, lo: 0xbc, hi: 0xbc}, -+ {value: 0x0040, lo: 0xbd, hi: 0xbe}, -+ {value: 0x0808, lo: 0xbf, hi: 0xbf}, -+ // Block 0x97, offset 0x494 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0808, lo: 0x80, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0x96}, -+ {value: 0x0818, lo: 0x97, hi: 0x9f}, -+ {value: 0x0808, lo: 0xa0, hi: 0xb6}, -+ {value: 0x0818, lo: 0xb7, hi: 0xbf}, -+ // Block 0x98, offset 0x49a -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0808, lo: 0x80, hi: 0x9e}, -+ {value: 0x0040, lo: 0x9f, hi: 0xa6}, -+ {value: 0x0818, lo: 0xa7, hi: 0xaf}, -+ {value: 0x0040, lo: 0xb0, hi: 0xbf}, -+ // Block 0x99, offset 0x49f -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0040, lo: 0x80, hi: 0x9f}, -+ {value: 0x0808, lo: 0xa0, hi: 0xb2}, -+ {value: 0x0040, lo: 0xb3, hi: 0xb3}, -+ {value: 0x0808, lo: 0xb4, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xba}, -+ {value: 0x0818, lo: 0xbb, hi: 0xbf}, -+ // Block 0x9a, offset 0x4a6 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0808, lo: 0x80, hi: 0x95}, -+ {value: 0x0818, lo: 0x96, hi: 0x9b}, -+ {value: 0x0040, lo: 0x9c, hi: 0x9e}, -+ {value: 0x0018, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0808, lo: 0xa0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbe}, -+ {value: 0x0818, lo: 0xbf, hi: 0xbf}, -+ // Block 0x9b, offset 0x4ae -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0808, lo: 0x80, hi: 0xb7}, -+ {value: 0x0040, lo: 0xb8, hi: 0xbb}, -+ {value: 0x0818, lo: 0xbc, hi: 0xbd}, -+ {value: 0x0808, lo: 0xbe, hi: 0xbf}, -+ // Block 0x9c, offset 0x4b3 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0818, lo: 0x80, hi: 0x8f}, -+ {value: 0x0040, lo: 0x90, hi: 0x91}, -+ {value: 0x0818, lo: 0x92, hi: 0xbf}, -+ // Block 0x9d, offset 0x4b7 -+ {value: 0x0000, lo: 0x0f}, -+ {value: 0x0808, lo: 0x80, hi: 0x80}, -+ {value: 0x3308, lo: 0x81, hi: 0x83}, -+ {value: 0x0040, lo: 0x84, hi: 0x84}, -+ {value: 0x3308, lo: 0x85, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x8b}, -+ {value: 0x3308, lo: 0x8c, hi: 0x8f}, -+ {value: 0x0808, lo: 0x90, hi: 0x93}, -+ {value: 0x0040, lo: 0x94, hi: 0x94}, -+ {value: 0x0808, lo: 0x95, hi: 0x97}, -+ {value: 0x0040, lo: 0x98, hi: 0x98}, -+ {value: 0x0808, lo: 0x99, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xb7}, -+ {value: 0x3308, lo: 0xb8, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbe}, -+ {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -+ // Block 0x9e, offset 0x4c7 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0818, lo: 0x80, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x8f}, -+ {value: 0x0818, lo: 0x90, hi: 0x98}, -+ {value: 0x0040, lo: 0x99, hi: 0x9f}, -+ {value: 0x0808, lo: 0xa0, hi: 0xbc}, -+ {value: 0x0818, lo: 0xbd, hi: 0xbf}, -+ // Block 0x9f, offset 0x4ce -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0808, lo: 0x80, hi: 0x9c}, -+ {value: 0x0818, lo: 0x9d, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xbf}, -+ // Block 0xa0, offset 0x4d2 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0808, lo: 0x80, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xb8}, -+ {value: 0x0018, lo: 0xb9, hi: 0xbf}, -+ // Block 0xa1, offset 0x4d6 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0808, lo: 0x80, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0x97}, -+ {value: 0x0818, lo: 0x98, hi: 0x9f}, -+ {value: 0x0808, lo: 0xa0, hi: 0xb2}, -+ {value: 0x0040, lo: 0xb3, hi: 0xb7}, -+ {value: 0x0818, lo: 0xb8, hi: 0xbf}, -+ // Block 0xa2, offset 0x4dd -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x0808, lo: 0x80, hi: 0xbf}, -+ // Block 0xa3, offset 0x4df -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0808, lo: 0x80, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0xbf}, -+ // Block 0xa4, offset 0x4e2 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x03dd, lo: 0x80, hi: 0xb2}, -+ {value: 0x0040, lo: 0xb3, hi: 0xbf}, -+ // Block 0xa5, offset 0x4e5 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0808, lo: 0x80, hi: 0xb2}, -+ {value: 0x0040, lo: 0xb3, hi: 0xb9}, -+ {value: 0x0818, lo: 0xba, hi: 0xbf}, -+ // Block 0xa6, offset 0x4e9 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0908, lo: 0x80, hi: 0x80}, -+ {value: 0x0a08, lo: 0x81, hi: 0xa1}, -+ {value: 0x0c08, lo: 0xa2, hi: 0xa2}, -+ {value: 0x0a08, lo: 0xa3, hi: 0xa3}, -+ {value: 0x3308, lo: 0xa4, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xaf}, -+ {value: 0x0808, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0xa7, offset 0x4f2 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0040, lo: 0x80, hi: 0x9f}, -+ {value: 0x0818, lo: 0xa0, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0xa8, offset 0x4f6 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0808, lo: 0x80, hi: 0xa9}, -+ {value: 0x0040, lo: 0xaa, hi: 0xaa}, -+ {value: 0x3308, lo: 0xab, hi: 0xac}, -+ {value: 0x0818, lo: 0xad, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x0808, lo: 0xb0, hi: 0xb1}, -+ {value: 0x0040, lo: 0xb2, hi: 0xbf}, -+ // Block 0xa9, offset 0x4fe -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0040, lo: 0x80, hi: 0xbc}, -+ {value: 0x3308, lo: 0xbd, hi: 0xbf}, -+ // Block 0xaa, offset 0x501 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0808, lo: 0x80, hi: 0x9c}, -+ {value: 0x0818, lo: 0x9d, hi: 0xa6}, -+ {value: 0x0808, lo: 0xa7, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xaf}, -+ {value: 0x0a08, lo: 0xb0, hi: 0xb2}, -+ {value: 0x0c08, lo: 0xb3, hi: 0xb3}, -+ {value: 0x0a08, lo: 0xb4, hi: 0xbf}, -+ // Block 0xab, offset 0x509 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0a08, lo: 0x80, hi: 0x84}, -+ {value: 0x0808, lo: 0x85, hi: 0x85}, -+ {value: 0x3308, lo: 0x86, hi: 0x90}, -+ {value: 0x0a18, lo: 0x91, hi: 0x93}, -+ {value: 0x0c18, lo: 0x94, hi: 0x94}, -+ {value: 0x0818, lo: 0x95, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0xaf}, -+ {value: 0x0a08, lo: 0xb0, hi: 0xb3}, -+ {value: 0x0c08, lo: 0xb4, hi: 0xb5}, -+ {value: 0x0a08, lo: 0xb6, hi: 0xbf}, -+ // Block 0xac, offset 0x514 -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x0a08, lo: 0x80, hi: 0x81}, -+ {value: 0x3308, lo: 0x82, hi: 0x85}, -+ {value: 0x0818, lo: 0x86, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0xaf}, -+ {value: 0x0a08, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0808, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0a08, lo: 0xb2, hi: 0xb3}, -+ {value: 0x0c08, lo: 0xb4, hi: 0xb6}, -+ {value: 0x0808, lo: 0xb7, hi: 0xb7}, -+ {value: 0x0a08, lo: 0xb8, hi: 0xb8}, -+ {value: 0x0c08, lo: 0xb9, hi: 0xba}, -+ {value: 0x0a08, lo: 0xbb, hi: 0xbc}, -+ {value: 0x0c08, lo: 0xbd, hi: 0xbd}, -+ {value: 0x0a08, lo: 0xbe, hi: 0xbf}, -+ // Block 0xad, offset 0x523 -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0808, lo: 0x80, hi: 0x80}, -+ {value: 0x0a08, lo: 0x81, hi: 0x81}, -+ {value: 0x0c08, lo: 0x82, hi: 0x83}, -+ {value: 0x0a08, lo: 0x84, hi: 0x84}, -+ {value: 0x0818, lo: 0x85, hi: 0x88}, -+ {value: 0x0c18, lo: 0x89, hi: 0x89}, -+ {value: 0x0a18, lo: 0x8a, hi: 0x8a}, -+ {value: 0x0918, lo: 0x8b, hi: 0x8b}, -+ {value: 0x0040, lo: 0x8c, hi: 0x9f}, -+ {value: 0x0808, lo: 0xa0, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xbf}, -+ // Block 0xae, offset 0x52f -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x3008, lo: 0x80, hi: 0x80}, -+ {value: 0x3308, lo: 0x81, hi: 0x81}, -+ {value: 0x3008, lo: 0x82, hi: 0x82}, -+ {value: 0x0008, lo: 0x83, hi: 0xb7}, -+ {value: 0x3308, lo: 0xb8, hi: 0xbf}, -+ // Block 0xaf, offset 0x535 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x3308, lo: 0x80, hi: 0x85}, -+ {value: 0x3b08, lo: 0x86, hi: 0x86}, -+ {value: 0x0018, lo: 0x87, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x91}, -+ {value: 0x0018, lo: 0x92, hi: 0xa5}, -+ {value: 0x0008, lo: 0xa6, hi: 0xaf}, -+ {value: 0x3b08, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0008, lo: 0xb1, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xb4}, -+ {value: 0x0008, lo: 0xb5, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xbe}, -+ {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -+ // Block 0xb0, offset 0x542 -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x3308, lo: 0x80, hi: 0x81}, -+ {value: 0x3008, lo: 0x82, hi: 0x82}, -+ {value: 0x0008, lo: 0x83, hi: 0xaf}, -+ {value: 0x3008, lo: 0xb0, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xb6}, -+ {value: 0x3008, lo: 0xb7, hi: 0xb8}, -+ {value: 0x3b08, lo: 0xb9, hi: 0xb9}, -+ {value: 0x3308, lo: 0xba, hi: 0xba}, -+ {value: 0x0018, lo: 0xbb, hi: 0xbc}, -+ {value: 0x0040, lo: 0xbd, hi: 0xbd}, -+ {value: 0x0018, lo: 0xbe, hi: 0xbf}, -+ // Block 0xb1, offset 0x54e -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0018, lo: 0x80, hi: 0x81}, -+ {value: 0x3308, lo: 0x82, hi: 0x82}, -+ {value: 0x0040, lo: 0x83, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xa8}, -+ {value: 0x0040, lo: 0xa9, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0xb2, offset 0x556 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x3308, lo: 0x80, hi: 0x82}, -+ {value: 0x0008, lo: 0x83, hi: 0xa6}, -+ {value: 0x3308, lo: 0xa7, hi: 0xab}, -+ {value: 0x3008, lo: 0xac, hi: 0xac}, -+ {value: 0x3308, lo: 0xad, hi: 0xb2}, -+ {value: 0x3b08, lo: 0xb3, hi: 0xb4}, -+ {value: 0x0040, lo: 0xb5, hi: 0xb5}, -+ {value: 0x0008, lo: 0xb6, hi: 0xbf}, -+ // Block 0xb3, offset 0x55f -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0018, lo: 0x80, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0x84}, -+ {value: 0x3008, lo: 0x85, hi: 0x86}, -+ {value: 0x0008, lo: 0x87, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xb3}, -+ {value: 0x0018, lo: 0xb4, hi: 0xb5}, -+ {value: 0x0008, lo: 0xb6, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xbf}, -+ // Block 0xb4, offset 0x56a -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x3308, lo: 0x80, hi: 0x81}, -+ {value: 0x3008, lo: 0x82, hi: 0x82}, -+ {value: 0x0008, lo: 0x83, hi: 0xb2}, -+ {value: 0x3008, lo: 0xb3, hi: 0xb5}, -+ {value: 0x3308, lo: 0xb6, hi: 0xbe}, -+ {value: 0x3008, lo: 0xbf, hi: 0xbf}, -+ // Block 0xb5, offset 0x571 -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x3808, lo: 0x80, hi: 0x80}, -+ {value: 0x0008, lo: 0x81, hi: 0x84}, -+ {value: 0x0018, lo: 0x85, hi: 0x88}, -+ {value: 0x3308, lo: 0x89, hi: 0x8c}, -+ {value: 0x0018, lo: 0x8d, hi: 0x8d}, -+ {value: 0x3008, lo: 0x8e, hi: 0x8e}, -+ {value: 0x3308, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x9a}, -+ {value: 0x0018, lo: 0x9b, hi: 0x9b}, -+ {value: 0x0008, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0018, lo: 0x9d, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xa0}, -+ {value: 0x0018, lo: 0xa1, hi: 0xb4}, -+ {value: 0x0040, lo: 0xb5, hi: 0xbf}, -+ // Block 0xb6, offset 0x580 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0008, lo: 0x80, hi: 0x91}, -+ {value: 0x0040, lo: 0x92, hi: 0x92}, -+ {value: 0x0008, lo: 0x93, hi: 0xab}, -+ {value: 0x3008, lo: 0xac, hi: 0xae}, -+ {value: 0x3308, lo: 0xaf, hi: 0xb1}, -+ {value: 0x3008, lo: 0xb2, hi: 0xb3}, -+ {value: 0x3308, lo: 0xb4, hi: 0xb4}, -+ {value: 0x3808, lo: 0xb5, hi: 0xb5}, -+ {value: 0x3308, lo: 0xb6, hi: 0xb7}, -+ {value: 0x0018, lo: 0xb8, hi: 0xbd}, -+ {value: 0x3308, lo: 0xbe, hi: 0xbe}, -+ {value: 0x0008, lo: 0xbf, hi: 0xbf}, -+ // Block 0xb7, offset 0x58d -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0x80}, -+ {value: 0x3308, lo: 0x81, hi: 0x81}, -+ {value: 0x0040, lo: 0x82, hi: 0xbf}, -+ // Block 0xb8, offset 0x591 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0008, lo: 0x80, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x87}, -+ {value: 0x0008, lo: 0x88, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x89}, -+ {value: 0x0008, lo: 0x8a, hi: 0x8d}, -+ {value: 0x0040, lo: 0x8e, hi: 0x8e}, -+ {value: 0x0008, lo: 0x8f, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0x9e}, -+ {value: 0x0008, lo: 0x9f, hi: 0xa8}, -+ {value: 0x0018, lo: 0xa9, hi: 0xa9}, -+ {value: 0x0040, lo: 0xaa, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0xb9, offset 0x59e -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0008, lo: 0x80, hi: 0x9e}, -+ {value: 0x3308, lo: 0x9f, hi: 0x9f}, -+ {value: 0x3008, lo: 0xa0, hi: 0xa2}, -+ {value: 0x3308, lo: 0xa3, hi: 0xa9}, -+ {value: 0x3b08, lo: 0xaa, hi: 0xaa}, -+ {value: 0x0040, lo: 0xab, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0xba, offset 0x5a7 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0xb4}, -+ {value: 0x3008, lo: 0xb5, hi: 0xb7}, -+ {value: 0x3308, lo: 0xb8, hi: 0xbf}, -+ // Block 0xbb, offset 0x5ab -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x3008, lo: 0x80, hi: 0x81}, -+ {value: 0x3b08, lo: 0x82, hi: 0x82}, -+ {value: 0x3308, lo: 0x83, hi: 0x84}, -+ {value: 0x3008, lo: 0x85, hi: 0x85}, -+ {value: 0x3308, lo: 0x86, hi: 0x86}, -+ {value: 0x0008, lo: 0x87, hi: 0x8a}, -+ {value: 0x0018, lo: 0x8b, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0018, lo: 0x9a, hi: 0x9b}, -+ {value: 0x0040, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0018, lo: 0x9d, hi: 0x9d}, -+ {value: 0x3308, lo: 0x9e, hi: 0x9e}, -+ {value: 0x0008, lo: 0x9f, hi: 0xa1}, -+ {value: 0x0040, lo: 0xa2, hi: 0xbf}, -+ // Block 0xbc, offset 0x5ba -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0xaf}, -+ {value: 0x3008, lo: 0xb0, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xb8}, -+ {value: 0x3008, lo: 0xb9, hi: 0xb9}, -+ {value: 0x3308, lo: 0xba, hi: 0xba}, -+ {value: 0x3008, lo: 0xbb, hi: 0xbe}, -+ {value: 0x3308, lo: 0xbf, hi: 0xbf}, -+ // Block 0xbd, offset 0x5c2 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x3308, lo: 0x80, hi: 0x80}, -+ {value: 0x3008, lo: 0x81, hi: 0x81}, -+ {value: 0x3b08, lo: 0x82, hi: 0x82}, -+ {value: 0x3308, lo: 0x83, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0x85}, -+ {value: 0x0018, lo: 0x86, hi: 0x86}, -+ {value: 0x0008, lo: 0x87, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0xbf}, -+ // Block 0xbe, offset 0x5cd -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0008, lo: 0x80, hi: 0xae}, -+ {value: 0x3008, lo: 0xaf, hi: 0xb1}, -+ {value: 0x3308, lo: 0xb2, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xb7}, -+ {value: 0x3008, lo: 0xb8, hi: 0xbb}, -+ {value: 0x3308, lo: 0xbc, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbe}, -+ {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -+ // Block 0xbf, offset 0x5d6 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x3308, lo: 0x80, hi: 0x80}, -+ {value: 0x0018, lo: 0x81, hi: 0x97}, -+ {value: 0x0008, lo: 0x98, hi: 0x9b}, -+ {value: 0x3308, lo: 0x9c, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0xbf}, -+ // Block 0xc0, offset 0x5dc -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0xaf}, -+ {value: 0x3008, lo: 0xb0, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xba}, -+ {value: 0x3008, lo: 0xbb, hi: 0xbc}, -+ {value: 0x3308, lo: 0xbd, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbe}, -+ {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -+ // Block 0xc1, offset 0x5e4 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x3308, lo: 0x80, hi: 0x80}, -+ {value: 0x0018, lo: 0x81, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0x84}, -+ {value: 0x0040, lo: 0x85, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xac}, -+ {value: 0x0040, lo: 0xad, hi: 0xbf}, -+ // Block 0xc2, offset 0x5ed -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0008, lo: 0x80, hi: 0xaa}, -+ {value: 0x3308, lo: 0xab, hi: 0xab}, -+ {value: 0x3008, lo: 0xac, hi: 0xac}, -+ {value: 0x3308, lo: 0xad, hi: 0xad}, -+ {value: 0x3008, lo: 0xae, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xb5}, -+ {value: 0x3808, lo: 0xb6, hi: 0xb6}, -+ {value: 0x3308, lo: 0xb7, hi: 0xb7}, -+ {value: 0x0008, lo: 0xb8, hi: 0xb8}, -+ {value: 0x0018, lo: 0xb9, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0xc3, offset 0x5f9 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0xbf}, -+ // Block 0xc4, offset 0x5fc -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0008, lo: 0x80, hi: 0x9a}, -+ {value: 0x0040, lo: 0x9b, hi: 0x9c}, -+ {value: 0x3308, lo: 0x9d, hi: 0x9f}, -+ {value: 0x3008, lo: 0xa0, hi: 0xa1}, -+ {value: 0x3308, lo: 0xa2, hi: 0xa5}, -+ {value: 0x3008, lo: 0xa6, hi: 0xa6}, -+ {value: 0x3308, lo: 0xa7, hi: 0xaa}, -+ {value: 0x3b08, lo: 0xab, hi: 0xab}, -+ {value: 0x0040, lo: 0xac, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0018, lo: 0xba, hi: 0xbf}, -+ // Block 0xc5, offset 0x608 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0xbf}, -+ // Block 0xc6, offset 0x60b -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0008, lo: 0x80, hi: 0xab}, -+ {value: 0x3008, lo: 0xac, hi: 0xae}, -+ {value: 0x3308, lo: 0xaf, hi: 0xb7}, -+ {value: 0x3008, lo: 0xb8, hi: 0xb8}, -+ {value: 0x3b08, lo: 0xb9, hi: 0xb9}, -+ {value: 0x3308, lo: 0xba, hi: 0xba}, -+ {value: 0x0018, lo: 0xbb, hi: 0xbb}, -+ {value: 0x0040, lo: 0xbc, hi: 0xbf}, -+ // Block 0xc7, offset 0x614 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0040, lo: 0x80, hi: 0x9f}, -+ {value: 0x049d, lo: 0xa0, hi: 0xbf}, -+ // Block 0xc8, offset 0x617 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0xa9}, -+ {value: 0x0018, lo: 0xaa, hi: 0xb2}, -+ {value: 0x0040, lo: 0xb3, hi: 0xbe}, -+ {value: 0x0008, lo: 0xbf, hi: 0xbf}, -+ // Block 0xc9, offset 0x61c -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x3008, lo: 0x80, hi: 0x80}, -+ {value: 0x0008, lo: 0x81, hi: 0x81}, -+ {value: 0x3008, lo: 0x82, hi: 0x82}, -+ {value: 0x3308, lo: 0x83, hi: 0x83}, -+ {value: 0x0018, lo: 0x84, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0xbf}, -+ // Block 0xca, offset 0x625 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0040, lo: 0x80, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xa9}, -+ {value: 0x0008, lo: 0xaa, hi: 0xbf}, -+ // Block 0xcb, offset 0x62a -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0008, lo: 0x80, hi: 0x90}, -+ {value: 0x3008, lo: 0x91, hi: 0x93}, -+ {value: 0x3308, lo: 0x94, hi: 0x97}, -+ {value: 0x0040, lo: 0x98, hi: 0x99}, -+ {value: 0x3308, lo: 0x9a, hi: 0x9b}, -+ {value: 0x3008, lo: 0x9c, hi: 0x9f}, -+ {value: 0x3b08, lo: 0xa0, hi: 0xa0}, -+ {value: 0x0008, lo: 0xa1, hi: 0xa1}, -+ {value: 0x0018, lo: 0xa2, hi: 0xa2}, -+ {value: 0x0008, lo: 0xa3, hi: 0xa3}, -+ {value: 0x3008, lo: 0xa4, hi: 0xa4}, -+ {value: 0x0040, lo: 0xa5, hi: 0xbf}, -+ // Block 0xcc, offset 0x637 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0x80}, -+ {value: 0x3308, lo: 0x81, hi: 0x8a}, -+ {value: 0x0008, lo: 0x8b, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xb3}, -+ {value: 0x3b08, lo: 0xb4, hi: 0xb4}, -+ {value: 0x3308, lo: 0xb5, hi: 0xb8}, -+ {value: 0x3008, lo: 0xb9, hi: 0xb9}, -+ {value: 0x0008, lo: 0xba, hi: 0xba}, -+ {value: 0x3308, lo: 0xbb, hi: 0xbe}, -+ {value: 0x0018, lo: 0xbf, hi: 0xbf}, -+ // Block 0xcd, offset 0x642 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0018, lo: 0x80, hi: 0x86}, -+ {value: 0x3b08, lo: 0x87, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x90}, -+ {value: 0x3308, lo: 0x91, hi: 0x96}, -+ {value: 0x3008, lo: 0x97, hi: 0x98}, -+ {value: 0x3308, lo: 0x99, hi: 0x9b}, -+ {value: 0x0008, lo: 0x9c, hi: 0xbf}, -+ // Block 0xce, offset 0x64b -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x3308, lo: 0x8a, hi: 0x96}, -+ {value: 0x3008, lo: 0x97, hi: 0x97}, -+ {value: 0x3308, lo: 0x98, hi: 0x98}, -+ {value: 0x3b08, lo: 0x99, hi: 0x99}, -+ {value: 0x0018, lo: 0x9a, hi: 0x9c}, -+ {value: 0x0008, lo: 0x9d, hi: 0x9d}, -+ {value: 0x0018, lo: 0x9e, hi: 0xa2}, -+ {value: 0x0040, lo: 0xa3, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0xcf, offset 0x656 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xb8}, -+ {value: 0x0040, lo: 0xb9, hi: 0xbf}, -+ // Block 0xd0, offset 0x659 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0018, lo: 0x80, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0xbf}, -+ // Block 0xd1, offset 0x65c -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0008, lo: 0x80, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x89}, -+ {value: 0x0008, lo: 0x8a, hi: 0xae}, -+ {value: 0x3008, lo: 0xaf, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xb7}, -+ {value: 0x3308, lo: 0xb8, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbe}, -+ {value: 0x3b08, lo: 0xbf, hi: 0xbf}, -+ // Block 0xd2, offset 0x666 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0008, lo: 0x80, hi: 0x80}, -+ {value: 0x0018, lo: 0x81, hi: 0x85}, -+ {value: 0x0040, lo: 0x86, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0018, lo: 0x9a, hi: 0xac}, -+ {value: 0x0040, lo: 0xad, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb1}, -+ {value: 0x0008, lo: 0xb2, hi: 0xbf}, -+ // Block 0xd3, offset 0x66f -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x0008, lo: 0x80, hi: 0x8f}, -+ {value: 0x0040, lo: 0x90, hi: 0x91}, -+ {value: 0x3308, lo: 0x92, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xa8}, -+ {value: 0x3008, lo: 0xa9, hi: 0xa9}, -+ {value: 0x3308, lo: 0xaa, hi: 0xb0}, -+ {value: 0x3008, lo: 0xb1, hi: 0xb1}, -+ {value: 0x3308, lo: 0xb2, hi: 0xb3}, -+ {value: 0x3008, lo: 0xb4, hi: 0xb4}, -+ {value: 0x3308, lo: 0xb5, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xbf}, -+ // Block 0xd4, offset 0x67b -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x0008, lo: 0x80, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x87}, -+ {value: 0x0008, lo: 0x88, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0x8a}, -+ {value: 0x0008, lo: 0x8b, hi: 0xb0}, -+ {value: 0x3308, lo: 0xb1, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xb9}, -+ {value: 0x3308, lo: 0xba, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbb}, -+ {value: 0x3308, lo: 0xbc, hi: 0xbd}, -+ {value: 0x0040, lo: 0xbe, hi: 0xbe}, -+ {value: 0x3308, lo: 0xbf, hi: 0xbf}, -+ // Block 0xd5, offset 0x688 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x3308, lo: 0x80, hi: 0x83}, -+ {value: 0x3b08, lo: 0x84, hi: 0x85}, -+ {value: 0x0008, lo: 0x86, hi: 0x86}, -+ {value: 0x3308, lo: 0x87, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa5}, -+ {value: 0x0040, lo: 0xa6, hi: 0xa6}, -+ {value: 0x0008, lo: 0xa7, hi: 0xa8}, -+ {value: 0x0040, lo: 0xa9, hi: 0xa9}, -+ {value: 0x0008, lo: 0xaa, hi: 0xbf}, -+ // Block 0xd6, offset 0x695 -+ {value: 0x0000, lo: 0x0d}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x3008, lo: 0x8a, hi: 0x8e}, -+ {value: 0x0040, lo: 0x8f, hi: 0x8f}, -+ {value: 0x3308, lo: 0x90, hi: 0x91}, -+ {value: 0x0040, lo: 0x92, hi: 0x92}, -+ {value: 0x3008, lo: 0x93, hi: 0x94}, -+ {value: 0x3308, lo: 0x95, hi: 0x95}, -+ {value: 0x3008, lo: 0x96, hi: 0x96}, -+ {value: 0x3b08, lo: 0x97, hi: 0x97}, -+ {value: 0x0008, lo: 0x98, hi: 0x98}, -+ {value: 0x0040, lo: 0x99, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa9}, -+ {value: 0x0040, lo: 0xaa, hi: 0xbf}, -+ // Block 0xd7, offset 0x6a3 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0040, lo: 0x80, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xb2}, -+ {value: 0x3308, lo: 0xb3, hi: 0xb4}, -+ {value: 0x3008, lo: 0xb5, hi: 0xb6}, -+ {value: 0x0018, lo: 0xb7, hi: 0xb8}, -+ {value: 0x0040, lo: 0xb9, hi: 0xbf}, -+ // Block 0xd8, offset 0x6aa -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x3308, lo: 0x80, hi: 0x81}, -+ {value: 0x0008, lo: 0x82, hi: 0x82}, -+ {value: 0x3008, lo: 0x83, hi: 0x83}, -+ {value: 0x0008, lo: 0x84, hi: 0x90}, -+ {value: 0x0040, lo: 0x91, hi: 0x91}, -+ {value: 0x0008, lo: 0x92, hi: 0xb3}, -+ {value: 0x3008, lo: 0xb4, hi: 0xb5}, -+ {value: 0x3308, lo: 0xb6, hi: 0xba}, -+ {value: 0x0040, lo: 0xbb, hi: 0xbd}, -+ {value: 0x3008, lo: 0xbe, hi: 0xbf}, -+ // Block 0xd9, offset 0x6b5 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x3308, lo: 0x80, hi: 0x80}, -+ {value: 0x3808, lo: 0x81, hi: 0x81}, -+ {value: 0x3b08, lo: 0x82, hi: 0x82}, -+ {value: 0x0018, lo: 0x83, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0xbf}, -+ // Block 0xda, offset 0x6bc -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0040, lo: 0x80, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0040, lo: 0xb1, hi: 0xbf}, -+ // Block 0xdb, offset 0x6c0 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0xb1}, -+ {value: 0x0040, lo: 0xb2, hi: 0xbe}, -+ {value: 0x0018, lo: 0xbf, hi: 0xbf}, -+ // Block 0xdc, offset 0x6c4 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0xbf}, -+ // Block 0xdd, offset 0x6c7 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0xae}, -+ {value: 0x0040, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb4}, -+ {value: 0x0040, lo: 0xb5, hi: 0xbf}, -+ // Block 0xde, offset 0x6cc -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0x83}, -+ {value: 0x0040, lo: 0x84, hi: 0xbf}, -+ // Block 0xdf, offset 0x6cf -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0040, lo: 0x80, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xbf}, -+ // Block 0xe0, offset 0x6d2 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0xb0}, -+ {value: 0x0018, lo: 0xb1, hi: 0xb2}, -+ {value: 0x0040, lo: 0xb3, hi: 0xbf}, -+ // Block 0xe1, offset 0x6d6 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xaf}, -+ {value: 0x0340, lo: 0xb0, hi: 0xbf}, -+ // Block 0xe2, offset 0x6d9 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x3308, lo: 0x80, hi: 0x80}, -+ {value: 0x0008, lo: 0x81, hi: 0x86}, -+ {value: 0x3308, lo: 0x87, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0xbf}, -+ // Block 0xe3, offset 0x6de -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0008, lo: 0x80, hi: 0x9e}, -+ {value: 0x0040, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa9}, -+ {value: 0x0040, lo: 0xaa, hi: 0xad}, -+ {value: 0x0018, lo: 0xae, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0xe4, offset 0x6e5 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0xe5, offset 0x6e8 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xb4}, -+ {value: 0x0018, lo: 0xb5, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xbf}, -+ // Block 0xe6, offset 0x6f0 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xb6}, -+ {value: 0x0018, lo: 0xb7, hi: 0xbf}, -+ // Block 0xe7, offset 0x6f4 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x0008, lo: 0x80, hi: 0x83}, -+ {value: 0x0018, lo: 0x84, hi: 0x85}, -+ {value: 0x0040, lo: 0x86, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9a}, -+ {value: 0x0018, lo: 0x9b, hi: 0xa1}, -+ {value: 0x0040, lo: 0xa2, hi: 0xa2}, -+ {value: 0x0008, lo: 0xa3, hi: 0xb7}, -+ {value: 0x0040, lo: 0xb8, hi: 0xbc}, -+ {value: 0x0008, lo: 0xbd, hi: 0xbf}, -+ // Block 0xe8, offset 0x6ff -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0x8f}, -+ {value: 0x0040, lo: 0x90, hi: 0xbf}, -+ // Block 0xe9, offset 0x702 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0xe105, lo: 0x80, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0xea, offset 0x705 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0018, lo: 0x80, hi: 0x9a}, -+ {value: 0x0040, lo: 0x9b, hi: 0xbf}, -+ // Block 0xeb, offset 0x708 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0x8a}, -+ {value: 0x0040, lo: 0x8b, hi: 0x8e}, -+ {value: 0x3308, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x90}, -+ {value: 0x3008, lo: 0x91, hi: 0xbf}, -+ // Block 0xec, offset 0x70e -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x3008, lo: 0x80, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8e}, -+ {value: 0x3308, lo: 0x8f, hi: 0x92}, -+ {value: 0x0008, lo: 0x93, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xbf}, -+ // Block 0xed, offset 0x714 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0040, lo: 0x80, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa1}, -+ {value: 0x0018, lo: 0xa2, hi: 0xa2}, -+ {value: 0x0008, lo: 0xa3, hi: 0xa3}, -+ {value: 0x3308, lo: 0xa4, hi: 0xa4}, -+ {value: 0x0040, lo: 0xa5, hi: 0xaf}, -+ {value: 0x3008, lo: 0xb0, hi: 0xb1}, -+ {value: 0x0040, lo: 0xb2, hi: 0xbf}, -+ // Block 0xee, offset 0x71d -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xb7}, -+ {value: 0x0040, lo: 0xb8, hi: 0xbf}, -+ // Block 0xef, offset 0x720 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0xbf}, -+ // Block 0xf0, offset 0x723 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0xbf}, -+ // Block 0xf1, offset 0x726 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x0040, lo: 0x80, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb3}, -+ {value: 0x0040, lo: 0xb4, hi: 0xb4}, -+ {value: 0x0008, lo: 0xb5, hi: 0xbb}, -+ {value: 0x0040, lo: 0xbc, hi: 0xbc}, -+ {value: 0x0008, lo: 0xbd, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0xf2, offset 0x72e -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0xa2}, -+ {value: 0x0040, lo: 0xa3, hi: 0xb1}, -+ {value: 0x0008, lo: 0xb2, hi: 0xb2}, -+ {value: 0x0040, lo: 0xb3, hi: 0xbf}, -+ // Block 0xf3, offset 0x733 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0040, lo: 0x80, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x92}, -+ {value: 0x0040, lo: 0x93, hi: 0x94}, -+ {value: 0x0008, lo: 0x95, hi: 0x95}, -+ {value: 0x0040, lo: 0x96, hi: 0xa3}, -+ {value: 0x0008, lo: 0xa4, hi: 0xa7}, -+ {value: 0x0040, lo: 0xa8, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0xf4, offset 0x73c -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xbb}, -+ {value: 0x0040, lo: 0xbc, hi: 0xbf}, -+ // Block 0xf5, offset 0x73f -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0xaa}, -+ {value: 0x0040, lo: 0xab, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbc}, -+ {value: 0x0040, lo: 0xbd, hi: 0xbf}, -+ // Block 0xf6, offset 0x744 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0008, lo: 0x80, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9b}, -+ {value: 0x0018, lo: 0x9c, hi: 0x9c}, -+ {value: 0x3308, lo: 0x9d, hi: 0x9e}, -+ {value: 0x0018, lo: 0x9f, hi: 0x9f}, -+ {value: 0x03c0, lo: 0xa0, hi: 0xa3}, -+ {value: 0x0040, lo: 0xa4, hi: 0xbf}, -+ // Block 0xf7, offset 0x74e -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x3308, lo: 0x80, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xbf}, -+ // Block 0xf8, offset 0x752 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x3308, lo: 0x80, hi: 0x86}, -+ {value: 0x0040, lo: 0x87, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0xbf}, -+ // Block 0xf9, offset 0x756 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0018, lo: 0x80, hi: 0x83}, -+ {value: 0x0040, lo: 0x84, hi: 0xbf}, -+ // Block 0xfa, offset 0x759 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0018, lo: 0x80, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xbf}, -+ // Block 0xfb, offset 0x75c -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0xa6}, -+ {value: 0x0040, lo: 0xa7, hi: 0xa8}, -+ {value: 0x0018, lo: 0xa9, hi: 0xbf}, -+ // Block 0xfc, offset 0x760 -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x0018, lo: 0x80, hi: 0x9d}, -+ {value: 0x2379, lo: 0x9e, hi: 0x9e}, -+ {value: 0x2381, lo: 0x9f, hi: 0x9f}, -+ {value: 0x2389, lo: 0xa0, hi: 0xa0}, -+ {value: 0x2391, lo: 0xa1, hi: 0xa1}, -+ {value: 0x2399, lo: 0xa2, hi: 0xa2}, -+ {value: 0x23a1, lo: 0xa3, hi: 0xa3}, -+ {value: 0x23a9, lo: 0xa4, hi: 0xa4}, -+ {value: 0x3018, lo: 0xa5, hi: 0xa6}, -+ {value: 0x3318, lo: 0xa7, hi: 0xa9}, -+ {value: 0x0018, lo: 0xaa, hi: 0xac}, -+ {value: 0x3018, lo: 0xad, hi: 0xb2}, -+ {value: 0x0340, lo: 0xb3, hi: 0xba}, -+ {value: 0x3318, lo: 0xbb, hi: 0xbf}, -+ // Block 0xfd, offset 0x76f -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x3318, lo: 0x80, hi: 0x82}, -+ {value: 0x0018, lo: 0x83, hi: 0x84}, -+ {value: 0x3318, lo: 0x85, hi: 0x8b}, -+ {value: 0x0018, lo: 0x8c, hi: 0xa9}, -+ {value: 0x3318, lo: 0xaa, hi: 0xad}, -+ {value: 0x0018, lo: 0xae, hi: 0xba}, -+ {value: 0x23b1, lo: 0xbb, hi: 0xbb}, -+ {value: 0x23b9, lo: 0xbc, hi: 0xbc}, -+ {value: 0x23c1, lo: 0xbd, hi: 0xbd}, -+ {value: 0x23c9, lo: 0xbe, hi: 0xbe}, -+ {value: 0x23d1, lo: 0xbf, hi: 0xbf}, -+ // Block 0xfe, offset 0x77b -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x23d9, lo: 0x80, hi: 0x80}, -+ {value: 0x0018, lo: 0x81, hi: 0xaa}, -+ {value: 0x0040, lo: 0xab, hi: 0xbf}, -+ // Block 0xff, offset 0x77f -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0x81}, -+ {value: 0x3318, lo: 0x82, hi: 0x84}, -+ {value: 0x0018, lo: 0x85, hi: 0x85}, -+ {value: 0x0040, lo: 0x86, hi: 0xbf}, -+ // Block 0x100, offset 0x784 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0x93}, -+ {value: 0x0040, lo: 0x94, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xb3}, -+ {value: 0x0040, lo: 0xb4, hi: 0xbf}, -+ // Block 0x101, offset 0x789 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xb8}, -+ {value: 0x0040, lo: 0xb9, hi: 0xbf}, -+ // Block 0x102, offset 0x78e -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x3308, lo: 0x80, hi: 0xb6}, -+ {value: 0x0018, lo: 0xb7, hi: 0xba}, -+ {value: 0x3308, lo: 0xbb, hi: 0xbf}, -+ // Block 0x103, offset 0x792 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x3308, lo: 0x80, hi: 0xac}, -+ {value: 0x0018, lo: 0xad, hi: 0xb4}, -+ {value: 0x3308, lo: 0xb5, hi: 0xb5}, -+ {value: 0x0018, lo: 0xb6, hi: 0xbf}, -+ // Block 0x104, offset 0x797 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0018, lo: 0x80, hi: 0x83}, -+ {value: 0x3308, lo: 0x84, hi: 0x84}, -+ {value: 0x0018, lo: 0x85, hi: 0x8b}, -+ {value: 0x0040, lo: 0x8c, hi: 0x9a}, -+ {value: 0x3308, lo: 0x9b, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xa0}, -+ {value: 0x3308, lo: 0xa1, hi: 0xaf}, -+ {value: 0x0040, lo: 0xb0, hi: 0xbf}, -+ // Block 0x105, offset 0x7a0 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0008, lo: 0x80, hi: 0x9e}, -+ {value: 0x0040, lo: 0x9f, hi: 0xa4}, -+ {value: 0x0008, lo: 0xa5, hi: 0xaa}, -+ {value: 0x0040, lo: 0xab, hi: 0xbf}, -+ // Block 0x106, offset 0x7a5 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0040, lo: 0x80, hi: 0x8e}, -+ {value: 0x3308, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0040, lo: 0x90, hi: 0xbf}, -+ // Block 0x107, offset 0x7a9 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0xac}, -+ {value: 0x0040, lo: 0xad, hi: 0xaf}, -+ {value: 0x3308, lo: 0xb0, hi: 0xb6}, -+ {value: 0x0008, lo: 0xb7, hi: 0xbd}, -+ {value: 0x0040, lo: 0xbe, hi: 0xbf}, -+ // Block 0x108, offset 0x7af -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0x89}, -+ {value: 0x0040, lo: 0x8a, hi: 0x8d}, -+ {value: 0x0008, lo: 0x8e, hi: 0x8e}, -+ {value: 0x0018, lo: 0x8f, hi: 0x8f}, -+ {value: 0x0040, lo: 0x90, hi: 0xbf}, -+ // Block 0x109, offset 0x7b5 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0040, lo: 0x80, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xad}, -+ {value: 0x3308, lo: 0xae, hi: 0xae}, -+ {value: 0x0040, lo: 0xaf, hi: 0xbf}, -+ // Block 0x10a, offset 0x7ba -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0008, lo: 0x80, hi: 0xab}, -+ {value: 0x3308, lo: 0xac, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbe}, -+ {value: 0x0018, lo: 0xbf, hi: 0xbf}, -+ // Block 0x10b, offset 0x7c0 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0040, lo: 0x80, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xab}, -+ {value: 0x3308, lo: 0xac, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0x10c, offset 0x7c6 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x0040, lo: 0x80, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xa6}, -+ {value: 0x0040, lo: 0xa7, hi: 0xa7}, -+ {value: 0x0008, lo: 0xa8, hi: 0xab}, -+ {value: 0x0040, lo: 0xac, hi: 0xac}, -+ {value: 0x0008, lo: 0xad, hi: 0xae}, -+ {value: 0x0040, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbe}, -+ {value: 0x0040, lo: 0xbf, hi: 0xbf}, -+ // Block 0x10d, offset 0x7d0 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0808, lo: 0x80, hi: 0x84}, -+ {value: 0x0040, lo: 0x85, hi: 0x86}, -+ {value: 0x0818, lo: 0x87, hi: 0x8f}, -+ {value: 0x3308, lo: 0x90, hi: 0x96}, -+ {value: 0x0040, lo: 0x97, hi: 0xbf}, -+ // Block 0x10e, offset 0x7d6 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0a08, lo: 0x80, hi: 0x83}, -+ {value: 0x3308, lo: 0x84, hi: 0x8a}, -+ {value: 0x0b08, lo: 0x8b, hi: 0x8b}, -+ {value: 0x0040, lo: 0x8c, hi: 0x8f}, -+ {value: 0x0808, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9d}, -+ {value: 0x0818, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xbf}, -+ // Block 0x10f, offset 0x7df -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0040, lo: 0x80, hi: 0xb0}, -+ {value: 0x0818, lo: 0xb1, hi: 0xbf}, -+ // Block 0x110, offset 0x7e2 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0818, lo: 0x80, hi: 0xb4}, -+ {value: 0x0040, lo: 0xb5, hi: 0xbf}, -+ // Block 0x111, offset 0x7e5 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0040, lo: 0x80, hi: 0x80}, -+ {value: 0x0818, lo: 0x81, hi: 0xbd}, -+ {value: 0x0040, lo: 0xbe, hi: 0xbf}, -+ // Block 0x112, offset 0x7e9 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0040, lo: 0x80, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb1}, -+ {value: 0x0040, lo: 0xb2, hi: 0xbf}, -+ // Block 0x113, offset 0x7ed -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0xab}, -+ {value: 0x0040, lo: 0xac, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xbf}, -+ // Block 0x114, offset 0x7f1 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0018, lo: 0x80, hi: 0x93}, -+ {value: 0x0040, lo: 0x94, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xae}, -+ {value: 0x0040, lo: 0xaf, hi: 0xb0}, -+ {value: 0x0018, lo: 0xb1, hi: 0xbf}, -+ // Block 0x115, offset 0x7f7 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0040, lo: 0x80, hi: 0x80}, -+ {value: 0x0018, lo: 0x81, hi: 0x8f}, -+ {value: 0x0040, lo: 0x90, hi: 0x90}, -+ {value: 0x0018, lo: 0x91, hi: 0xb5}, -+ {value: 0x0040, lo: 0xb6, hi: 0xbf}, -+ // Block 0x116, offset 0x7fd -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0018, lo: 0x80, hi: 0x8f}, -+ {value: 0x2709, lo: 0x90, hi: 0x90}, -+ {value: 0x0018, lo: 0x91, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xbf}, -+ // Block 0x117, offset 0x802 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0040, lo: 0x80, hi: 0xa5}, -+ {value: 0x0018, lo: 0xa6, hi: 0xbf}, -+ // Block 0x118, offset 0x805 -+ {value: 0x0000, lo: 0x0f}, -+ {value: 0x2889, lo: 0x80, hi: 0x80}, -+ {value: 0x2891, lo: 0x81, hi: 0x81}, -+ {value: 0x2899, lo: 0x82, hi: 0x82}, -+ {value: 0x28a1, lo: 0x83, hi: 0x83}, -+ {value: 0x28a9, lo: 0x84, hi: 0x84}, -+ {value: 0x28b1, lo: 0x85, hi: 0x85}, -+ {value: 0x28b9, lo: 0x86, hi: 0x86}, -+ {value: 0x28c1, lo: 0x87, hi: 0x87}, -+ {value: 0x28c9, lo: 0x88, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x8f}, -+ {value: 0x28d1, lo: 0x90, hi: 0x90}, -+ {value: 0x28d9, lo: 0x91, hi: 0x91}, -+ {value: 0x0040, lo: 0x92, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xa5}, -+ {value: 0x0040, lo: 0xa6, hi: 0xbf}, -+ // Block 0x119, offset 0x815 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0018, lo: 0x80, hi: 0x97}, -+ {value: 0x0040, lo: 0x98, hi: 0x9b}, -+ {value: 0x0018, lo: 0x9c, hi: 0xac}, -+ {value: 0x0040, lo: 0xad, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xbc}, -+ {value: 0x0040, lo: 0xbd, hi: 0xbf}, -+ // Block 0x11a, offset 0x81c -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0xb6}, -+ {value: 0x0040, lo: 0xb7, hi: 0xba}, -+ {value: 0x0018, lo: 0xbb, hi: 0xbf}, -+ // Block 0x11b, offset 0x820 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0018, lo: 0x80, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xab}, -+ {value: 0x0040, lo: 0xac, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0040, lo: 0xb1, hi: 0xbf}, -+ // Block 0x11c, offset 0x827 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0x8b}, -+ {value: 0x0040, lo: 0x8c, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0xbf}, -+ // Block 0x11d, offset 0x82b -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0018, lo: 0x80, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0x99}, -+ {value: 0x0040, lo: 0x9a, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xbf}, -+ // Block 0x11e, offset 0x831 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0018, lo: 0x80, hi: 0x87}, -+ {value: 0x0040, lo: 0x88, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb1}, -+ {value: 0x0040, lo: 0xb2, hi: 0xbf}, -+ // Block 0x11f, offset 0x838 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x0018, lo: 0x80, hi: 0x93}, -+ {value: 0x0040, lo: 0x94, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xad}, -+ {value: 0x0040, lo: 0xae, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xbc}, -+ {value: 0x0040, lo: 0xbd, hi: 0xbf}, -+ // Block 0x120, offset 0x83f -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x0018, lo: 0x80, hi: 0x88}, -+ {value: 0x0040, lo: 0x89, hi: 0x8f}, -+ {value: 0x0018, lo: 0x90, hi: 0xbd}, -+ {value: 0x0040, lo: 0xbe, hi: 0xbe}, -+ {value: 0x0018, lo: 0xbf, hi: 0xbf}, -+ // Block 0x121, offset 0x845 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x0018, lo: 0x80, hi: 0x85}, -+ {value: 0x0040, lo: 0x86, hi: 0x8d}, -+ {value: 0x0018, lo: 0x8e, hi: 0x9b}, -+ {value: 0x0040, lo: 0x9c, hi: 0x9f}, -+ {value: 0x0018, lo: 0xa0, hi: 0xa8}, -+ {value: 0x0040, lo: 0xa9, hi: 0xaf}, -+ {value: 0x0018, lo: 0xb0, hi: 0xb8}, -+ {value: 0x0040, lo: 0xb9, hi: 0xbf}, -+ // Block 0x122, offset 0x84e -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0018, lo: 0x80, hi: 0x92}, -+ {value: 0x0040, lo: 0x93, hi: 0x93}, -+ {value: 0x0018, lo: 0x94, hi: 0xbf}, -+ // Block 0x123, offset 0x852 -+ {value: 0x0000, lo: 0x0d}, -+ {value: 0x0018, lo: 0x80, hi: 0x8a}, -+ {value: 0x0040, lo: 0x8b, hi: 0xaf}, -+ {value: 0x06e1, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0049, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0029, lo: 0xb2, hi: 0xb2}, -+ {value: 0x0031, lo: 0xb3, hi: 0xb3}, -+ {value: 0x06e9, lo: 0xb4, hi: 0xb4}, -+ {value: 0x06f1, lo: 0xb5, hi: 0xb5}, -+ {value: 0x06f9, lo: 0xb6, hi: 0xb6}, -+ {value: 0x0701, lo: 0xb7, hi: 0xb7}, -+ {value: 0x0709, lo: 0xb8, hi: 0xb8}, -+ {value: 0x0711, lo: 0xb9, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0x124, offset 0x860 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0x9f}, -+ {value: 0x0040, lo: 0xa0, hi: 0xbf}, -+ // Block 0x125, offset 0x863 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xb9}, -+ {value: 0x0040, lo: 0xba, hi: 0xbf}, -+ // Block 0x126, offset 0x866 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0x9d}, -+ {value: 0x0040, lo: 0x9e, hi: 0x9f}, -+ {value: 0x0008, lo: 0xa0, hi: 0xbf}, -+ // Block 0x127, offset 0x86a -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0xa1}, -+ {value: 0x0040, lo: 0xa2, hi: 0xaf}, -+ {value: 0x0008, lo: 0xb0, hi: 0xbf}, -+ // Block 0x128, offset 0x86e -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xa0}, -+ {value: 0x0040, lo: 0xa1, hi: 0xbf}, -+ // Block 0x129, offset 0x871 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x0008, lo: 0x80, hi: 0x8a}, -+ {value: 0x0040, lo: 0x8b, hi: 0x8f}, -+ {value: 0x0008, lo: 0x90, hi: 0xbf}, -+ // Block 0x12a, offset 0x875 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0008, lo: 0x80, hi: 0xaf}, -+ {value: 0x0040, lo: 0xb0, hi: 0xbf}, -+ // Block 0x12b, offset 0x878 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x0040, lo: 0x80, hi: 0x80}, -+ {value: 0x0340, lo: 0x81, hi: 0x81}, -+ {value: 0x0040, lo: 0x82, hi: 0x9f}, -+ {value: 0x0340, lo: 0xa0, hi: 0xbf}, -+ // Block 0x12c, offset 0x87d -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x0340, lo: 0x80, hi: 0xbf}, -+ // Block 0x12d, offset 0x87f -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x33c0, lo: 0x80, hi: 0xbf}, -+ // Block 0x12e, offset 0x881 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x33c0, lo: 0x80, hi: 0xaf}, -+ {value: 0x0040, lo: 0xb0, hi: 0xbf}, -+} -+ -+// Total table size 46723 bytes (45KiB); checksum: 4CF3143A -diff --git a/vendor/golang.org/x/net/idna/tables9.0.0.go b/vendor/golang.org/x/net/idna/tables9.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/idna/trie.go b/vendor/golang.org/x/net/idna/trie.go -old mode 100644 -new mode 100755 -index c4ef847..4212741 ---- a/vendor/golang.org/x/net/idna/trie.go -+++ b/vendor/golang.org/x/net/idna/trie.go -@@ -6,27 +6,6 @@ - - package idna - --// appendMapping appends the mapping for the respective rune. isMapped must be --// true. A mapping is a categorization of a rune as defined in UTS #46. --func (c info) appendMapping(b []byte, s string) []byte { -- index := int(c >> indexShift) -- if c&xorBit == 0 { -- s := mappings[index:] -- return append(b, s[1:s[0]+1]...) -- } -- b = append(b, s...) -- if c&inlineXOR == inlineXOR { -- // TODO: support and handle two-byte inline masks -- b[len(b)-1] ^= byte(index) -- } else { -- for p := len(b) - int(xorData[index]); p < len(b); p++ { -- index++ -- b[p] ^= xorData[index] -- } -- } -- return b --} -- - // Sparse block handling code. - - type valueRange struct { -diff --git a/vendor/golang.org/x/net/idna/trie12.0.0.go b/vendor/golang.org/x/net/idna/trie12.0.0.go -new file mode 100755 -index 0000000..bb63f90 ---- /dev/null -+++ b/vendor/golang.org/x/net/idna/trie12.0.0.go -@@ -0,0 +1,31 @@ -+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -+ -+// Copyright 2016 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build !go1.16 -+// +build !go1.16 -+ -+package idna -+ -+// appendMapping appends the mapping for the respective rune. isMapped must be -+// true. A mapping is a categorization of a rune as defined in UTS #46. -+func (c info) appendMapping(b []byte, s string) []byte { -+ index := int(c >> indexShift) -+ if c&xorBit == 0 { -+ s := mappings[index:] -+ return append(b, s[1:s[0]+1]...) -+ } -+ b = append(b, s...) -+ if c&inlineXOR == inlineXOR { -+ // TODO: support and handle two-byte inline masks -+ b[len(b)-1] ^= byte(index) -+ } else { -+ for p := len(b) - int(xorData[index]); p < len(b); p++ { -+ index++ -+ b[p] ^= xorData[index] -+ } -+ } -+ return b -+} -diff --git a/vendor/golang.org/x/net/idna/trie13.0.0.go b/vendor/golang.org/x/net/idna/trie13.0.0.go -new file mode 100755 -index 0000000..7d68a8d ---- /dev/null -+++ b/vendor/golang.org/x/net/idna/trie13.0.0.go -@@ -0,0 +1,31 @@ -+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -+ -+// Copyright 2016 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build go1.16 -+// +build go1.16 -+ -+package idna -+ -+// appendMapping appends the mapping for the respective rune. isMapped must be -+// true. A mapping is a categorization of a rune as defined in UTS #46. -+func (c info) appendMapping(b []byte, s string) []byte { -+ index := int(c >> indexShift) -+ if c&xorBit == 0 { -+ p := index -+ return append(b, mappings[mappingIndex[p]:mappingIndex[p+1]]...) -+ } -+ b = append(b, s...) -+ if c&inlineXOR == inlineXOR { -+ // TODO: support and handle two-byte inline masks -+ b[len(b)-1] ^= byte(index) -+ } else { -+ for p := len(b) - int(xorData[index]); p < len(b); p++ { -+ index++ -+ b[p] ^= xorData[index] -+ } -+ } -+ return b -+} -diff --git a/vendor/golang.org/x/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/net/internal/timeseries/timeseries.go b/vendor/golang.org/x/net/internal/timeseries/timeseries.go -new file mode 100755 -index 0000000..dc5225b ---- /dev/null -+++ b/vendor/golang.org/x/net/internal/timeseries/timeseries.go -@@ -0,0 +1,525 @@ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Package timeseries implements a time series structure for stats collection. -+package timeseries // import "golang.org/x/net/internal/timeseries" -+ -+import ( -+ "fmt" -+ "log" -+ "time" -+) -+ -+const ( -+ timeSeriesNumBuckets = 64 -+ minuteHourSeriesNumBuckets = 60 -+) -+ -+var timeSeriesResolutions = []time.Duration{ -+ 1 * time.Second, -+ 10 * time.Second, -+ 1 * time.Minute, -+ 10 * time.Minute, -+ 1 * time.Hour, -+ 6 * time.Hour, -+ 24 * time.Hour, // 1 day -+ 7 * 24 * time.Hour, // 1 week -+ 4 * 7 * 24 * time.Hour, // 4 weeks -+ 16 * 7 * 24 * time.Hour, // 16 weeks -+} -+ -+var minuteHourSeriesResolutions = []time.Duration{ -+ 1 * time.Second, -+ 1 * time.Minute, -+} -+ -+// An Observable is a kind of data that can be aggregated in a time series. -+type Observable interface { -+ Multiply(ratio float64) // Multiplies the data in self by a given ratio -+ Add(other Observable) // Adds the data from a different observation to self -+ Clear() // Clears the observation so it can be reused. -+ CopyFrom(other Observable) // Copies the contents of a given observation to self -+} -+ -+// Float attaches the methods of Observable to a float64. -+type Float float64 -+ -+// NewFloat returns a Float. -+func NewFloat() Observable { -+ f := Float(0) -+ return &f -+} -+ -+// String returns the float as a string. -+func (f *Float) String() string { return fmt.Sprintf("%g", f.Value()) } -+ -+// Value returns the float's value. -+func (f *Float) Value() float64 { return float64(*f) } -+ -+func (f *Float) Multiply(ratio float64) { *f *= Float(ratio) } -+ -+func (f *Float) Add(other Observable) { -+ o := other.(*Float) -+ *f += *o -+} -+ -+func (f *Float) Clear() { *f = 0 } -+ -+func (f *Float) CopyFrom(other Observable) { -+ o := other.(*Float) -+ *f = *o -+} -+ -+// A Clock tells the current time. -+type Clock interface { -+ Time() time.Time -+} -+ -+type defaultClock int -+ -+var defaultClockInstance defaultClock -+ -+func (defaultClock) Time() time.Time { return time.Now() } -+ -+// Information kept per level. Each level consists of a circular list of -+// observations. The start of the level may be derived from end and the -+// len(buckets) * sizeInMillis. -+type tsLevel struct { -+ oldest int // index to oldest bucketed Observable -+ newest int // index to newest bucketed Observable -+ end time.Time // end timestamp for this level -+ size time.Duration // duration of the bucketed Observable -+ buckets []Observable // collections of observations -+ provider func() Observable // used for creating new Observable -+} -+ -+func (l *tsLevel) Clear() { -+ l.oldest = 0 -+ l.newest = len(l.buckets) - 1 -+ l.end = time.Time{} -+ for i := range l.buckets { -+ if l.buckets[i] != nil { -+ l.buckets[i].Clear() -+ l.buckets[i] = nil -+ } -+ } -+} -+ -+func (l *tsLevel) InitLevel(size time.Duration, numBuckets int, f func() Observable) { -+ l.size = size -+ l.provider = f -+ l.buckets = make([]Observable, numBuckets) -+} -+ -+// Keeps a sequence of levels. Each level is responsible for storing data at -+// a given resolution. For example, the first level stores data at a one -+// minute resolution while the second level stores data at a one hour -+// resolution. -+ -+// Each level is represented by a sequence of buckets. Each bucket spans an -+// interval equal to the resolution of the level. New observations are added -+// to the last bucket. -+type timeSeries struct { -+ provider func() Observable // make more Observable -+ numBuckets int // number of buckets in each level -+ levels []*tsLevel // levels of bucketed Observable -+ lastAdd time.Time // time of last Observable tracked -+ total Observable // convenient aggregation of all Observable -+ clock Clock // Clock for getting current time -+ pending Observable // observations not yet bucketed -+ pendingTime time.Time // what time are we keeping in pending -+ dirty bool // if there are pending observations -+} -+ -+// init initializes a level according to the supplied criteria. -+func (ts *timeSeries) init(resolutions []time.Duration, f func() Observable, numBuckets int, clock Clock) { -+ ts.provider = f -+ ts.numBuckets = numBuckets -+ ts.clock = clock -+ ts.levels = make([]*tsLevel, len(resolutions)) -+ -+ for i := range resolutions { -+ if i > 0 && resolutions[i-1] >= resolutions[i] { -+ log.Print("timeseries: resolutions must be monotonically increasing") -+ break -+ } -+ newLevel := new(tsLevel) -+ newLevel.InitLevel(resolutions[i], ts.numBuckets, ts.provider) -+ ts.levels[i] = newLevel -+ } -+ -+ ts.Clear() -+} -+ -+// Clear removes all observations from the time series. -+func (ts *timeSeries) Clear() { -+ ts.lastAdd = time.Time{} -+ ts.total = ts.resetObservation(ts.total) -+ ts.pending = ts.resetObservation(ts.pending) -+ ts.pendingTime = time.Time{} -+ ts.dirty = false -+ -+ for i := range ts.levels { -+ ts.levels[i].Clear() -+ } -+} -+ -+// Add records an observation at the current time. -+func (ts *timeSeries) Add(observation Observable) { -+ ts.AddWithTime(observation, ts.clock.Time()) -+} -+ -+// AddWithTime records an observation at the specified time. -+func (ts *timeSeries) AddWithTime(observation Observable, t time.Time) { -+ -+ smallBucketDuration := ts.levels[0].size -+ -+ if t.After(ts.lastAdd) { -+ ts.lastAdd = t -+ } -+ -+ if t.After(ts.pendingTime) { -+ ts.advance(t) -+ ts.mergePendingUpdates() -+ ts.pendingTime = ts.levels[0].end -+ ts.pending.CopyFrom(observation) -+ ts.dirty = true -+ } else if t.After(ts.pendingTime.Add(-1 * smallBucketDuration)) { -+ // The observation is close enough to go into the pending bucket. -+ // This compensates for clock skewing and small scheduling delays -+ // by letting the update stay in the fast path. -+ ts.pending.Add(observation) -+ ts.dirty = true -+ } else { -+ ts.mergeValue(observation, t) -+ } -+} -+ -+// mergeValue inserts the observation at the specified time in the past into all levels. -+func (ts *timeSeries) mergeValue(observation Observable, t time.Time) { -+ for _, level := range ts.levels { -+ index := (ts.numBuckets - 1) - int(level.end.Sub(t)/level.size) -+ if 0 <= index && index < ts.numBuckets { -+ bucketNumber := (level.oldest + index) % ts.numBuckets -+ if level.buckets[bucketNumber] == nil { -+ level.buckets[bucketNumber] = level.provider() -+ } -+ level.buckets[bucketNumber].Add(observation) -+ } -+ } -+ ts.total.Add(observation) -+} -+ -+// mergePendingUpdates applies the pending updates into all levels. -+func (ts *timeSeries) mergePendingUpdates() { -+ if ts.dirty { -+ ts.mergeValue(ts.pending, ts.pendingTime) -+ ts.pending = ts.resetObservation(ts.pending) -+ ts.dirty = false -+ } -+} -+ -+// advance cycles the buckets at each level until the latest bucket in -+// each level can hold the time specified. -+func (ts *timeSeries) advance(t time.Time) { -+ if !t.After(ts.levels[0].end) { -+ return -+ } -+ for i := 0; i < len(ts.levels); i++ { -+ level := ts.levels[i] -+ if !level.end.Before(t) { -+ break -+ } -+ -+ // If the time is sufficiently far, just clear the level and advance -+ // directly. -+ if !t.Before(level.end.Add(level.size * time.Duration(ts.numBuckets))) { -+ for _, b := range level.buckets { -+ ts.resetObservation(b) -+ } -+ level.end = time.Unix(0, (t.UnixNano()/level.size.Nanoseconds())*level.size.Nanoseconds()) -+ } -+ -+ for t.After(level.end) { -+ level.end = level.end.Add(level.size) -+ level.newest = level.oldest -+ level.oldest = (level.oldest + 1) % ts.numBuckets -+ ts.resetObservation(level.buckets[level.newest]) -+ } -+ -+ t = level.end -+ } -+} -+ -+// Latest returns the sum of the num latest buckets from the level. -+func (ts *timeSeries) Latest(level, num int) Observable { -+ now := ts.clock.Time() -+ if ts.levels[0].end.Before(now) { -+ ts.advance(now) -+ } -+ -+ ts.mergePendingUpdates() -+ -+ result := ts.provider() -+ l := ts.levels[level] -+ index := l.newest -+ -+ for i := 0; i < num; i++ { -+ if l.buckets[index] != nil { -+ result.Add(l.buckets[index]) -+ } -+ if index == 0 { -+ index = ts.numBuckets -+ } -+ index-- -+ } -+ -+ return result -+} -+ -+// LatestBuckets returns a copy of the num latest buckets from level. -+func (ts *timeSeries) LatestBuckets(level, num int) []Observable { -+ if level < 0 || level > len(ts.levels) { -+ log.Print("timeseries: bad level argument: ", level) -+ return nil -+ } -+ if num < 0 || num >= ts.numBuckets { -+ log.Print("timeseries: bad num argument: ", num) -+ return nil -+ } -+ -+ results := make([]Observable, num) -+ now := ts.clock.Time() -+ if ts.levels[0].end.Before(now) { -+ ts.advance(now) -+ } -+ -+ ts.mergePendingUpdates() -+ -+ l := ts.levels[level] -+ index := l.newest -+ -+ for i := 0; i < num; i++ { -+ result := ts.provider() -+ results[i] = result -+ if l.buckets[index] != nil { -+ result.CopyFrom(l.buckets[index]) -+ } -+ -+ if index == 0 { -+ index = ts.numBuckets -+ } -+ index -= 1 -+ } -+ return results -+} -+ -+// ScaleBy updates observations by scaling by factor. -+func (ts *timeSeries) ScaleBy(factor float64) { -+ for _, l := range ts.levels { -+ for i := 0; i < ts.numBuckets; i++ { -+ l.buckets[i].Multiply(factor) -+ } -+ } -+ -+ ts.total.Multiply(factor) -+ ts.pending.Multiply(factor) -+} -+ -+// Range returns the sum of observations added over the specified time range. -+// If start or finish times don't fall on bucket boundaries of the same -+// level, then return values are approximate answers. -+func (ts *timeSeries) Range(start, finish time.Time) Observable { -+ return ts.ComputeRange(start, finish, 1)[0] -+} -+ -+// Recent returns the sum of observations from the last delta. -+func (ts *timeSeries) Recent(delta time.Duration) Observable { -+ now := ts.clock.Time() -+ return ts.Range(now.Add(-delta), now) -+} -+ -+// Total returns the total of all observations. -+func (ts *timeSeries) Total() Observable { -+ ts.mergePendingUpdates() -+ return ts.total -+} -+ -+// ComputeRange computes a specified number of values into a slice using -+// the observations recorded over the specified time period. The return -+// values are approximate if the start or finish times don't fall on the -+// bucket boundaries at the same level or if the number of buckets spanning -+// the range is not an integral multiple of num. -+func (ts *timeSeries) ComputeRange(start, finish time.Time, num int) []Observable { -+ if start.After(finish) { -+ log.Printf("timeseries: start > finish, %v>%v", start, finish) -+ return nil -+ } -+ -+ if num < 0 { -+ log.Printf("timeseries: num < 0, %v", num) -+ return nil -+ } -+ -+ results := make([]Observable, num) -+ -+ for _, l := range ts.levels { -+ if !start.Before(l.end.Add(-l.size * time.Duration(ts.numBuckets))) { -+ ts.extract(l, start, finish, num, results) -+ return results -+ } -+ } -+ -+ // Failed to find a level that covers the desired range. So just -+ // extract from the last level, even if it doesn't cover the entire -+ // desired range. -+ ts.extract(ts.levels[len(ts.levels)-1], start, finish, num, results) -+ -+ return results -+} -+ -+// RecentList returns the specified number of values in slice over the most -+// recent time period of the specified range. -+func (ts *timeSeries) RecentList(delta time.Duration, num int) []Observable { -+ if delta < 0 { -+ return nil -+ } -+ now := ts.clock.Time() -+ return ts.ComputeRange(now.Add(-delta), now, num) -+} -+ -+// extract returns a slice of specified number of observations from a given -+// level over a given range. -+func (ts *timeSeries) extract(l *tsLevel, start, finish time.Time, num int, results []Observable) { -+ ts.mergePendingUpdates() -+ -+ srcInterval := l.size -+ dstInterval := finish.Sub(start) / time.Duration(num) -+ dstStart := start -+ srcStart := l.end.Add(-srcInterval * time.Duration(ts.numBuckets)) -+ -+ srcIndex := 0 -+ -+ // Where should scanning start? -+ if dstStart.After(srcStart) { -+ advance := int(dstStart.Sub(srcStart) / srcInterval) -+ srcIndex += advance -+ srcStart = srcStart.Add(time.Duration(advance) * srcInterval) -+ } -+ -+ // The i'th value is computed as show below. -+ // interval = (finish/start)/num -+ // i'th value = sum of observation in range -+ // [ start + i * interval, -+ // start + (i + 1) * interval ) -+ for i := 0; i < num; i++ { -+ results[i] = ts.resetObservation(results[i]) -+ dstEnd := dstStart.Add(dstInterval) -+ for srcIndex < ts.numBuckets && srcStart.Before(dstEnd) { -+ srcEnd := srcStart.Add(srcInterval) -+ if srcEnd.After(ts.lastAdd) { -+ srcEnd = ts.lastAdd -+ } -+ -+ if !srcEnd.Before(dstStart) { -+ srcValue := l.buckets[(srcIndex+l.oldest)%ts.numBuckets] -+ if !srcStart.Before(dstStart) && !srcEnd.After(dstEnd) { -+ // dst completely contains src. -+ if srcValue != nil { -+ results[i].Add(srcValue) -+ } -+ } else { -+ // dst partially overlaps src. -+ overlapStart := maxTime(srcStart, dstStart) -+ overlapEnd := minTime(srcEnd, dstEnd) -+ base := srcEnd.Sub(srcStart) -+ fraction := overlapEnd.Sub(overlapStart).Seconds() / base.Seconds() -+ -+ used := ts.provider() -+ if srcValue != nil { -+ used.CopyFrom(srcValue) -+ } -+ used.Multiply(fraction) -+ results[i].Add(used) -+ } -+ -+ if srcEnd.After(dstEnd) { -+ break -+ } -+ } -+ srcIndex++ -+ srcStart = srcStart.Add(srcInterval) -+ } -+ dstStart = dstStart.Add(dstInterval) -+ } -+} -+ -+// resetObservation clears the content so the struct may be reused. -+func (ts *timeSeries) resetObservation(observation Observable) Observable { -+ if observation == nil { -+ observation = ts.provider() -+ } else { -+ observation.Clear() -+ } -+ return observation -+} -+ -+// TimeSeries tracks data at granularities from 1 second to 16 weeks. -+type TimeSeries struct { -+ timeSeries -+} -+ -+// NewTimeSeries creates a new TimeSeries using the function provided for creating new Observable. -+func NewTimeSeries(f func() Observable) *TimeSeries { -+ return NewTimeSeriesWithClock(f, defaultClockInstance) -+} -+ -+// NewTimeSeriesWithClock creates a new TimeSeries using the function provided for creating new Observable and the clock for -+// assigning timestamps. -+func NewTimeSeriesWithClock(f func() Observable, clock Clock) *TimeSeries { -+ ts := new(TimeSeries) -+ ts.timeSeries.init(timeSeriesResolutions, f, timeSeriesNumBuckets, clock) -+ return ts -+} -+ -+// MinuteHourSeries tracks data at granularities of 1 minute and 1 hour. -+type MinuteHourSeries struct { -+ timeSeries -+} -+ -+// NewMinuteHourSeries creates a new MinuteHourSeries using the function provided for creating new Observable. -+func NewMinuteHourSeries(f func() Observable) *MinuteHourSeries { -+ return NewMinuteHourSeriesWithClock(f, defaultClockInstance) -+} -+ -+// NewMinuteHourSeriesWithClock creates a new MinuteHourSeries using the function provided for creating new Observable and the clock for -+// assigning timestamps. -+func NewMinuteHourSeriesWithClock(f func() Observable, clock Clock) *MinuteHourSeries { -+ ts := new(MinuteHourSeries) -+ ts.timeSeries.init(minuteHourSeriesResolutions, f, -+ minuteHourSeriesNumBuckets, clock) -+ return ts -+} -+ -+func (ts *MinuteHourSeries) Minute() Observable { -+ return ts.timeSeries.Latest(0, 60) -+} -+ -+func (ts *MinuteHourSeries) Hour() Observable { -+ return ts.timeSeries.Latest(1, 60) -+} -+ -+func minTime(a, b time.Time) time.Time { -+ if a.Before(b) { -+ return a -+ } -+ return b -+} -+ -+func maxTime(a, b time.Time) time.Time { -+ if a.After(b) { -+ return a -+ } -+ return b -+} -diff --git a/vendor/golang.org/x/net/trace/events.go b/vendor/golang.org/x/net/trace/events.go -new file mode 100755 -index 0000000..c646a69 ---- /dev/null -+++ b/vendor/golang.org/x/net/trace/events.go -@@ -0,0 +1,532 @@ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package trace -+ -+import ( -+ "bytes" -+ "fmt" -+ "html/template" -+ "io" -+ "log" -+ "net/http" -+ "runtime" -+ "sort" -+ "strconv" -+ "strings" -+ "sync" -+ "sync/atomic" -+ "text/tabwriter" -+ "time" -+) -+ -+const maxEventsPerLog = 100 -+ -+type bucket struct { -+ MaxErrAge time.Duration -+ String string -+} -+ -+var buckets = []bucket{ -+ {0, "total"}, -+ {10 * time.Second, "errs<10s"}, -+ {1 * time.Minute, "errs<1m"}, -+ {10 * time.Minute, "errs<10m"}, -+ {1 * time.Hour, "errs<1h"}, -+ {10 * time.Hour, "errs<10h"}, -+ {24000 * time.Hour, "errors"}, -+} -+ -+// RenderEvents renders the HTML page typically served at /debug/events. -+// It does not do any auth checking. The request may be nil. -+// -+// Most users will use the Events handler. -+func RenderEvents(w http.ResponseWriter, req *http.Request, sensitive bool) { -+ now := time.Now() -+ data := &struct { -+ Families []string // family names -+ Buckets []bucket -+ Counts [][]int // eventLog count per family/bucket -+ -+ // Set when a bucket has been selected. -+ Family string -+ Bucket int -+ EventLogs eventLogs -+ Expanded bool -+ }{ -+ Buckets: buckets, -+ } -+ -+ data.Families = make([]string, 0, len(families)) -+ famMu.RLock() -+ for name := range families { -+ data.Families = append(data.Families, name) -+ } -+ famMu.RUnlock() -+ sort.Strings(data.Families) -+ -+ // Count the number of eventLogs in each family for each error age. -+ data.Counts = make([][]int, len(data.Families)) -+ for i, name := range data.Families { -+ // TODO(sameer): move this loop under the family lock. -+ f := getEventFamily(name) -+ data.Counts[i] = make([]int, len(data.Buckets)) -+ for j, b := range data.Buckets { -+ data.Counts[i][j] = f.Count(now, b.MaxErrAge) -+ } -+ } -+ -+ if req != nil { -+ var ok bool -+ data.Family, data.Bucket, ok = parseEventsArgs(req) -+ if !ok { -+ // No-op -+ } else { -+ data.EventLogs = getEventFamily(data.Family).Copy(now, buckets[data.Bucket].MaxErrAge) -+ } -+ if data.EventLogs != nil { -+ defer data.EventLogs.Free() -+ sort.Sort(data.EventLogs) -+ } -+ if exp, err := strconv.ParseBool(req.FormValue("exp")); err == nil { -+ data.Expanded = exp -+ } -+ } -+ -+ famMu.RLock() -+ defer famMu.RUnlock() -+ if err := eventsTmpl().Execute(w, data); err != nil { -+ log.Printf("net/trace: Failed executing template: %v", err) -+ } -+} -+ -+func parseEventsArgs(req *http.Request) (fam string, b int, ok bool) { -+ fam, bStr := req.FormValue("fam"), req.FormValue("b") -+ if fam == "" || bStr == "" { -+ return "", 0, false -+ } -+ b, err := strconv.Atoi(bStr) -+ if err != nil || b < 0 || b >= len(buckets) { -+ return "", 0, false -+ } -+ return fam, b, true -+} -+ -+// An EventLog provides a log of events associated with a specific object. -+type EventLog interface { -+ // Printf formats its arguments with fmt.Sprintf and adds the -+ // result to the event log. -+ Printf(format string, a ...interface{}) -+ -+ // Errorf is like Printf, but it marks this event as an error. -+ Errorf(format string, a ...interface{}) -+ -+ // Finish declares that this event log is complete. -+ // The event log should not be used after calling this method. -+ Finish() -+} -+ -+// NewEventLog returns a new EventLog with the specified family name -+// and title. -+func NewEventLog(family, title string) EventLog { -+ el := newEventLog() -+ el.ref() -+ el.Family, el.Title = family, title -+ el.Start = time.Now() -+ el.events = make([]logEntry, 0, maxEventsPerLog) -+ el.stack = make([]uintptr, 32) -+ n := runtime.Callers(2, el.stack) -+ el.stack = el.stack[:n] -+ -+ getEventFamily(family).add(el) -+ return el -+} -+ -+func (el *eventLog) Finish() { -+ getEventFamily(el.Family).remove(el) -+ el.unref() // matches ref in New -+} -+ -+var ( -+ famMu sync.RWMutex -+ families = make(map[string]*eventFamily) // family name => family -+) -+ -+func getEventFamily(fam string) *eventFamily { -+ famMu.Lock() -+ defer famMu.Unlock() -+ f := families[fam] -+ if f == nil { -+ f = &eventFamily{} -+ families[fam] = f -+ } -+ return f -+} -+ -+type eventFamily struct { -+ mu sync.RWMutex -+ eventLogs eventLogs -+} -+ -+func (f *eventFamily) add(el *eventLog) { -+ f.mu.Lock() -+ f.eventLogs = append(f.eventLogs, el) -+ f.mu.Unlock() -+} -+ -+func (f *eventFamily) remove(el *eventLog) { -+ f.mu.Lock() -+ defer f.mu.Unlock() -+ for i, el0 := range f.eventLogs { -+ if el == el0 { -+ copy(f.eventLogs[i:], f.eventLogs[i+1:]) -+ f.eventLogs = f.eventLogs[:len(f.eventLogs)-1] -+ return -+ } -+ } -+} -+ -+func (f *eventFamily) Count(now time.Time, maxErrAge time.Duration) (n int) { -+ f.mu.RLock() -+ defer f.mu.RUnlock() -+ for _, el := range f.eventLogs { -+ if el.hasRecentError(now, maxErrAge) { -+ n++ -+ } -+ } -+ return -+} -+ -+func (f *eventFamily) Copy(now time.Time, maxErrAge time.Duration) (els eventLogs) { -+ f.mu.RLock() -+ defer f.mu.RUnlock() -+ els = make(eventLogs, 0, len(f.eventLogs)) -+ for _, el := range f.eventLogs { -+ if el.hasRecentError(now, maxErrAge) { -+ el.ref() -+ els = append(els, el) -+ } -+ } -+ return -+} -+ -+type eventLogs []*eventLog -+ -+// Free calls unref on each element of the list. -+func (els eventLogs) Free() { -+ for _, el := range els { -+ el.unref() -+ } -+} -+ -+// eventLogs may be sorted in reverse chronological order. -+func (els eventLogs) Len() int { return len(els) } -+func (els eventLogs) Less(i, j int) bool { return els[i].Start.After(els[j].Start) } -+func (els eventLogs) Swap(i, j int) { els[i], els[j] = els[j], els[i] } -+ -+// A logEntry is a timestamped log entry in an event log. -+type logEntry struct { -+ When time.Time -+ Elapsed time.Duration // since previous event in log -+ NewDay bool // whether this event is on a different day to the previous event -+ What string -+ IsErr bool -+} -+ -+// WhenString returns a string representation of the elapsed time of the event. -+// It will include the date if midnight was crossed. -+func (e logEntry) WhenString() string { -+ if e.NewDay { -+ return e.When.Format("2006/01/02 15:04:05.000000") -+ } -+ return e.When.Format("15:04:05.000000") -+} -+ -+// An eventLog represents an active event log. -+type eventLog struct { -+ // Family is the top-level grouping of event logs to which this belongs. -+ Family string -+ -+ // Title is the title of this event log. -+ Title string -+ -+ // Timing information. -+ Start time.Time -+ -+ // Call stack where this event log was created. -+ stack []uintptr -+ -+ // Append-only sequence of events. -+ // -+ // TODO(sameer): change this to a ring buffer to avoid the array copy -+ // when we hit maxEventsPerLog. -+ mu sync.RWMutex -+ events []logEntry -+ LastErrorTime time.Time -+ discarded int -+ -+ refs int32 // how many buckets this is in -+} -+ -+func (el *eventLog) reset() { -+ // Clear all but the mutex. Mutexes may not be copied, even when unlocked. -+ el.Family = "" -+ el.Title = "" -+ el.Start = time.Time{} -+ el.stack = nil -+ el.events = nil -+ el.LastErrorTime = time.Time{} -+ el.discarded = 0 -+ el.refs = 0 -+} -+ -+func (el *eventLog) hasRecentError(now time.Time, maxErrAge time.Duration) bool { -+ if maxErrAge == 0 { -+ return true -+ } -+ el.mu.RLock() -+ defer el.mu.RUnlock() -+ return now.Sub(el.LastErrorTime) < maxErrAge -+} -+ -+// delta returns the elapsed time since the last event or the log start, -+// and whether it spans midnight. -+// L >= el.mu -+func (el *eventLog) delta(t time.Time) (time.Duration, bool) { -+ if len(el.events) == 0 { -+ return t.Sub(el.Start), false -+ } -+ prev := el.events[len(el.events)-1].When -+ return t.Sub(prev), prev.Day() != t.Day() -+ -+} -+ -+func (el *eventLog) Printf(format string, a ...interface{}) { -+ el.printf(false, format, a...) -+} -+ -+func (el *eventLog) Errorf(format string, a ...interface{}) { -+ el.printf(true, format, a...) -+} -+ -+func (el *eventLog) printf(isErr bool, format string, a ...interface{}) { -+ e := logEntry{When: time.Now(), IsErr: isErr, What: fmt.Sprintf(format, a...)} -+ el.mu.Lock() -+ e.Elapsed, e.NewDay = el.delta(e.When) -+ if len(el.events) < maxEventsPerLog { -+ el.events = append(el.events, e) -+ } else { -+ // Discard the oldest event. -+ if el.discarded == 0 { -+ // el.discarded starts at two to count for the event it -+ // is replacing, plus the next one that we are about to -+ // drop. -+ el.discarded = 2 -+ } else { -+ el.discarded++ -+ } -+ // TODO(sameer): if this causes allocations on a critical path, -+ // change eventLog.What to be a fmt.Stringer, as in trace.go. -+ el.events[0].What = fmt.Sprintf("(%d events discarded)", el.discarded) -+ // The timestamp of the discarded meta-event should be -+ // the time of the last event it is representing. -+ el.events[0].When = el.events[1].When -+ copy(el.events[1:], el.events[2:]) -+ el.events[maxEventsPerLog-1] = e -+ } -+ if e.IsErr { -+ el.LastErrorTime = e.When -+ } -+ el.mu.Unlock() -+} -+ -+func (el *eventLog) ref() { -+ atomic.AddInt32(&el.refs, 1) -+} -+ -+func (el *eventLog) unref() { -+ if atomic.AddInt32(&el.refs, -1) == 0 { -+ freeEventLog(el) -+ } -+} -+ -+func (el *eventLog) When() string { -+ return el.Start.Format("2006/01/02 15:04:05.000000") -+} -+ -+func (el *eventLog) ElapsedTime() string { -+ elapsed := time.Since(el.Start) -+ return fmt.Sprintf("%.6f", elapsed.Seconds()) -+} -+ -+func (el *eventLog) Stack() string { -+ buf := new(bytes.Buffer) -+ tw := tabwriter.NewWriter(buf, 1, 8, 1, '\t', 0) -+ printStackRecord(tw, el.stack) -+ tw.Flush() -+ return buf.String() -+} -+ -+// printStackRecord prints the function + source line information -+// for a single stack trace. -+// Adapted from runtime/pprof/pprof.go. -+func printStackRecord(w io.Writer, stk []uintptr) { -+ for _, pc := range stk { -+ f := runtime.FuncForPC(pc) -+ if f == nil { -+ continue -+ } -+ file, line := f.FileLine(pc) -+ name := f.Name() -+ // Hide runtime.goexit and any runtime functions at the beginning. -+ if strings.HasPrefix(name, "runtime.") { -+ continue -+ } -+ fmt.Fprintf(w, "# %s\t%s:%d\n", name, file, line) -+ } -+} -+ -+func (el *eventLog) Events() []logEntry { -+ el.mu.RLock() -+ defer el.mu.RUnlock() -+ return el.events -+} -+ -+// freeEventLogs is a freelist of *eventLog -+var freeEventLogs = make(chan *eventLog, 1000) -+ -+// newEventLog returns a event log ready to use. -+func newEventLog() *eventLog { -+ select { -+ case el := <-freeEventLogs: -+ return el -+ default: -+ return new(eventLog) -+ } -+} -+ -+// freeEventLog adds el to freeEventLogs if there's room. -+// This is non-blocking. -+func freeEventLog(el *eventLog) { -+ el.reset() -+ select { -+ case freeEventLogs <- el: -+ default: -+ } -+} -+ -+var eventsTmplCache *template.Template -+var eventsTmplOnce sync.Once -+ -+func eventsTmpl() *template.Template { -+ eventsTmplOnce.Do(func() { -+ eventsTmplCache = template.Must(template.New("events").Funcs(template.FuncMap{ -+ "elapsed": elapsed, -+ "trimSpace": strings.TrimSpace, -+ }).Parse(eventsHTML)) -+ }) -+ return eventsTmplCache -+} -+ -+const eventsHTML = ` -+ -+ -+ events -+ -+ -+ -+ -+

/debug/events

-+ -+ -+ {{range $i, $fam := .Families}} -+ -+ -+ -+ {{range $j, $bucket := $.Buckets}} -+ {{$n := index $.Counts $i $j}} -+ -+ {{end}} -+ -+ {{end}} -+
{{$fam}} -+ {{if $n}}{{end}} -+ [{{$n}} {{$bucket.String}}] -+ {{if $n}}{{end}} -+
-+ -+{{if $.EventLogs}} -+
-+

Family: {{$.Family}}

-+ -+{{if $.Expanded}}{{end}} -+[Summary]{{if $.Expanded}}{{end}} -+ -+{{if not $.Expanded}}{{end}} -+[Expanded]{{if not $.Expanded}}{{end}} -+ -+ -+ -+ {{range $el := $.EventLogs}} -+ -+ -+ -+ -+ {{if $.Expanded}} -+ -+ -+ -+ -+ -+ {{range $el.Events}} -+ -+ -+ -+ -+ -+ {{end}} -+ {{end}} -+ {{end}} -+
WhenElapsed
{{$el.When}}{{$el.ElapsedTime}}{{$el.Title}} -+
{{$el.Stack|trimSpace}}
{{.WhenString}}{{elapsed .Elapsed}}.{{if .IsErr}}E{{else}}.{{end}}. {{.What}}
-+{{end}} -+ -+ -+` -diff --git a/vendor/golang.org/x/net/trace/histogram.go b/vendor/golang.org/x/net/trace/histogram.go -new file mode 100755 -index 0000000..d6c7110 ---- /dev/null -+++ b/vendor/golang.org/x/net/trace/histogram.go -@@ -0,0 +1,365 @@ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package trace -+ -+// This file implements histogramming for RPC statistics collection. -+ -+import ( -+ "bytes" -+ "fmt" -+ "html/template" -+ "log" -+ "math" -+ "sync" -+ -+ "golang.org/x/net/internal/timeseries" -+) -+ -+const ( -+ bucketCount = 38 -+) -+ -+// histogram keeps counts of values in buckets that are spaced -+// out in powers of 2: 0-1, 2-3, 4-7... -+// histogram implements timeseries.Observable -+type histogram struct { -+ sum int64 // running total of measurements -+ sumOfSquares float64 // square of running total -+ buckets []int64 // bucketed values for histogram -+ value int // holds a single value as an optimization -+ valueCount int64 // number of values recorded for single value -+} -+ -+// addMeasurement records a value measurement observation to the histogram. -+func (h *histogram) addMeasurement(value int64) { -+ // TODO: assert invariant -+ h.sum += value -+ h.sumOfSquares += float64(value) * float64(value) -+ -+ bucketIndex := getBucket(value) -+ -+ if h.valueCount == 0 || (h.valueCount > 0 && h.value == bucketIndex) { -+ h.value = bucketIndex -+ h.valueCount++ -+ } else { -+ h.allocateBuckets() -+ h.buckets[bucketIndex]++ -+ } -+} -+ -+func (h *histogram) allocateBuckets() { -+ if h.buckets == nil { -+ h.buckets = make([]int64, bucketCount) -+ h.buckets[h.value] = h.valueCount -+ h.value = 0 -+ h.valueCount = -1 -+ } -+} -+ -+func log2(i int64) int { -+ n := 0 -+ for ; i >= 0x100; i >>= 8 { -+ n += 8 -+ } -+ for ; i > 0; i >>= 1 { -+ n += 1 -+ } -+ return n -+} -+ -+func getBucket(i int64) (index int) { -+ index = log2(i) - 1 -+ if index < 0 { -+ index = 0 -+ } -+ if index >= bucketCount { -+ index = bucketCount - 1 -+ } -+ return -+} -+ -+// Total returns the number of recorded observations. -+func (h *histogram) total() (total int64) { -+ if h.valueCount >= 0 { -+ total = h.valueCount -+ } -+ for _, val := range h.buckets { -+ total += int64(val) -+ } -+ return -+} -+ -+// Average returns the average value of recorded observations. -+func (h *histogram) average() float64 { -+ t := h.total() -+ if t == 0 { -+ return 0 -+ } -+ return float64(h.sum) / float64(t) -+} -+ -+// Variance returns the variance of recorded observations. -+func (h *histogram) variance() float64 { -+ t := float64(h.total()) -+ if t == 0 { -+ return 0 -+ } -+ s := float64(h.sum) / t -+ return h.sumOfSquares/t - s*s -+} -+ -+// StandardDeviation returns the standard deviation of recorded observations. -+func (h *histogram) standardDeviation() float64 { -+ return math.Sqrt(h.variance()) -+} -+ -+// PercentileBoundary estimates the value that the given fraction of recorded -+// observations are less than. -+func (h *histogram) percentileBoundary(percentile float64) int64 { -+ total := h.total() -+ -+ // Corner cases (make sure result is strictly less than Total()) -+ if total == 0 { -+ return 0 -+ } else if total == 1 { -+ return int64(h.average()) -+ } -+ -+ percentOfTotal := round(float64(total) * percentile) -+ var runningTotal int64 -+ -+ for i := range h.buckets { -+ value := h.buckets[i] -+ runningTotal += value -+ if runningTotal == percentOfTotal { -+ // We hit an exact bucket boundary. If the next bucket has data, it is a -+ // good estimate of the value. If the bucket is empty, we interpolate the -+ // midpoint between the next bucket's boundary and the next non-zero -+ // bucket. If the remaining buckets are all empty, then we use the -+ // boundary for the next bucket as the estimate. -+ j := uint8(i + 1) -+ min := bucketBoundary(j) -+ if runningTotal < total { -+ for h.buckets[j] == 0 { -+ j++ -+ } -+ } -+ max := bucketBoundary(j) -+ return min + round(float64(max-min)/2) -+ } else if runningTotal > percentOfTotal { -+ // The value is in this bucket. Interpolate the value. -+ delta := runningTotal - percentOfTotal -+ percentBucket := float64(value-delta) / float64(value) -+ bucketMin := bucketBoundary(uint8(i)) -+ nextBucketMin := bucketBoundary(uint8(i + 1)) -+ bucketSize := nextBucketMin - bucketMin -+ return bucketMin + round(percentBucket*float64(bucketSize)) -+ } -+ } -+ return bucketBoundary(bucketCount - 1) -+} -+ -+// Median returns the estimated median of the observed values. -+func (h *histogram) median() int64 { -+ return h.percentileBoundary(0.5) -+} -+ -+// Add adds other to h. -+func (h *histogram) Add(other timeseries.Observable) { -+ o := other.(*histogram) -+ if o.valueCount == 0 { -+ // Other histogram is empty -+ } else if h.valueCount >= 0 && o.valueCount > 0 && h.value == o.value { -+ // Both have a single bucketed value, aggregate them -+ h.valueCount += o.valueCount -+ } else { -+ // Two different values necessitate buckets in this histogram -+ h.allocateBuckets() -+ if o.valueCount >= 0 { -+ h.buckets[o.value] += o.valueCount -+ } else { -+ for i := range h.buckets { -+ h.buckets[i] += o.buckets[i] -+ } -+ } -+ } -+ h.sumOfSquares += o.sumOfSquares -+ h.sum += o.sum -+} -+ -+// Clear resets the histogram to an empty state, removing all observed values. -+func (h *histogram) Clear() { -+ h.buckets = nil -+ h.value = 0 -+ h.valueCount = 0 -+ h.sum = 0 -+ h.sumOfSquares = 0 -+} -+ -+// CopyFrom copies from other, which must be a *histogram, into h. -+func (h *histogram) CopyFrom(other timeseries.Observable) { -+ o := other.(*histogram) -+ if o.valueCount == -1 { -+ h.allocateBuckets() -+ copy(h.buckets, o.buckets) -+ } -+ h.sum = o.sum -+ h.sumOfSquares = o.sumOfSquares -+ h.value = o.value -+ h.valueCount = o.valueCount -+} -+ -+// Multiply scales the histogram by the specified ratio. -+func (h *histogram) Multiply(ratio float64) { -+ if h.valueCount == -1 { -+ for i := range h.buckets { -+ h.buckets[i] = int64(float64(h.buckets[i]) * ratio) -+ } -+ } else { -+ h.valueCount = int64(float64(h.valueCount) * ratio) -+ } -+ h.sum = int64(float64(h.sum) * ratio) -+ h.sumOfSquares = h.sumOfSquares * ratio -+} -+ -+// New creates a new histogram. -+func (h *histogram) New() timeseries.Observable { -+ r := new(histogram) -+ r.Clear() -+ return r -+} -+ -+func (h *histogram) String() string { -+ return fmt.Sprintf("%d, %f, %d, %d, %v", -+ h.sum, h.sumOfSquares, h.value, h.valueCount, h.buckets) -+} -+ -+// round returns the closest int64 to the argument -+func round(in float64) int64 { -+ return int64(math.Floor(in + 0.5)) -+} -+ -+// bucketBoundary returns the first value in the bucket. -+func bucketBoundary(bucket uint8) int64 { -+ if bucket == 0 { -+ return 0 -+ } -+ return 1 << bucket -+} -+ -+// bucketData holds data about a specific bucket for use in distTmpl. -+type bucketData struct { -+ Lower, Upper int64 -+ N int64 -+ Pct, CumulativePct float64 -+ GraphWidth int -+} -+ -+// data holds data about a Distribution for use in distTmpl. -+type data struct { -+ Buckets []*bucketData -+ Count, Median int64 -+ Mean, StandardDeviation float64 -+} -+ -+// maxHTMLBarWidth is the maximum width of the HTML bar for visualizing buckets. -+const maxHTMLBarWidth = 350.0 -+ -+// newData returns data representing h for use in distTmpl. -+func (h *histogram) newData() *data { -+ // Force the allocation of buckets to simplify the rendering implementation -+ h.allocateBuckets() -+ // We scale the bars on the right so that the largest bar is -+ // maxHTMLBarWidth pixels in width. -+ maxBucket := int64(0) -+ for _, n := range h.buckets { -+ if n > maxBucket { -+ maxBucket = n -+ } -+ } -+ total := h.total() -+ barsizeMult := maxHTMLBarWidth / float64(maxBucket) -+ var pctMult float64 -+ if total == 0 { -+ pctMult = 1.0 -+ } else { -+ pctMult = 100.0 / float64(total) -+ } -+ -+ buckets := make([]*bucketData, len(h.buckets)) -+ runningTotal := int64(0) -+ for i, n := range h.buckets { -+ if n == 0 { -+ continue -+ } -+ runningTotal += n -+ var upperBound int64 -+ if i < bucketCount-1 { -+ upperBound = bucketBoundary(uint8(i + 1)) -+ } else { -+ upperBound = math.MaxInt64 -+ } -+ buckets[i] = &bucketData{ -+ Lower: bucketBoundary(uint8(i)), -+ Upper: upperBound, -+ N: n, -+ Pct: float64(n) * pctMult, -+ CumulativePct: float64(runningTotal) * pctMult, -+ GraphWidth: int(float64(n) * barsizeMult), -+ } -+ } -+ return &data{ -+ Buckets: buckets, -+ Count: total, -+ Median: h.median(), -+ Mean: h.average(), -+ StandardDeviation: h.standardDeviation(), -+ } -+} -+ -+func (h *histogram) html() template.HTML { -+ buf := new(bytes.Buffer) -+ if err := distTmpl().Execute(buf, h.newData()); err != nil { -+ buf.Reset() -+ log.Printf("net/trace: couldn't execute template: %v", err) -+ } -+ return template.HTML(buf.String()) -+} -+ -+var distTmplCache *template.Template -+var distTmplOnce sync.Once -+ -+func distTmpl() *template.Template { -+ distTmplOnce.Do(func() { -+ // Input: data -+ distTmplCache = template.Must(template.New("distTmpl").Parse(` -+ -+ -+ -+ -+ -+ -+ -+
Count: {{.Count}}Mean: {{printf "%.0f" .Mean}}StdDev: {{printf "%.0f" .StandardDeviation}}Median: {{.Median}}
-+
-+ -+{{range $b := .Buckets}} -+{{if $b}} -+ -+ -+ -+ -+ -+ -+ -+ -+ -+{{end}} -+{{end}} -+
[{{.Lower}},{{.Upper}}){{.N}}{{printf "%#.3f" .Pct}}%{{printf "%#.3f" .CumulativePct}}%
-+`)) -+ }) -+ return distTmplCache -+} -diff --git a/vendor/golang.org/x/net/trace/trace.go b/vendor/golang.org/x/net/trace/trace.go -new file mode 100755 -index 0000000..eae2a99 ---- /dev/null -+++ b/vendor/golang.org/x/net/trace/trace.go -@@ -0,0 +1,1130 @@ -+// Copyright 2015 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+/* -+Package trace implements tracing of requests and long-lived objects. -+It exports HTTP interfaces on /debug/requests and /debug/events. -+ -+A trace.Trace provides tracing for short-lived objects, usually requests. -+A request handler might be implemented like this: -+ -+ func fooHandler(w http.ResponseWriter, req *http.Request) { -+ tr := trace.New("mypkg.Foo", req.URL.Path) -+ defer tr.Finish() -+ ... -+ tr.LazyPrintf("some event %q happened", str) -+ ... -+ if err := somethingImportant(); err != nil { -+ tr.LazyPrintf("somethingImportant failed: %v", err) -+ tr.SetError() -+ } -+ } -+ -+The /debug/requests HTTP endpoint organizes the traces by family, -+errors, and duration. It also provides histogram of request duration -+for each family. -+ -+A trace.EventLog provides tracing for long-lived objects, such as RPC -+connections. -+ -+ // A Fetcher fetches URL paths for a single domain. -+ type Fetcher struct { -+ domain string -+ events trace.EventLog -+ } -+ -+ func NewFetcher(domain string) *Fetcher { -+ return &Fetcher{ -+ domain, -+ trace.NewEventLog("mypkg.Fetcher", domain), -+ } -+ } -+ -+ func (f *Fetcher) Fetch(path string) (string, error) { -+ resp, err := http.Get("http://" + f.domain + "/" + path) -+ if err != nil { -+ f.events.Errorf("Get(%q) = %v", path, err) -+ return "", err -+ } -+ f.events.Printf("Get(%q) = %s", path, resp.Status) -+ ... -+ } -+ -+ func (f *Fetcher) Close() error { -+ f.events.Finish() -+ return nil -+ } -+ -+The /debug/events HTTP endpoint organizes the event logs by family and -+by time since the last error. The expanded view displays recent log -+entries and the log's call stack. -+*/ -+package trace // import "golang.org/x/net/trace" -+ -+import ( -+ "bytes" -+ "context" -+ "fmt" -+ "html/template" -+ "io" -+ "log" -+ "net" -+ "net/http" -+ "net/url" -+ "runtime" -+ "sort" -+ "strconv" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "golang.org/x/net/internal/timeseries" -+) -+ -+// DebugUseAfterFinish controls whether to debug uses of Trace values after finishing. -+// FOR DEBUGGING ONLY. This will slow down the program. -+var DebugUseAfterFinish = false -+ -+// HTTP ServeMux paths. -+const ( -+ debugRequestsPath = "/debug/requests" -+ debugEventsPath = "/debug/events" -+) -+ -+// AuthRequest determines whether a specific request is permitted to load the -+// /debug/requests or /debug/events pages. -+// -+// It returns two bools; the first indicates whether the page may be viewed at all, -+// and the second indicates whether sensitive events will be shown. -+// -+// AuthRequest may be replaced by a program to customize its authorization requirements. -+// -+// The default AuthRequest function returns (true, true) if and only if the request -+// comes from localhost/127.0.0.1/[::1]. -+var AuthRequest = func(req *http.Request) (any, sensitive bool) { -+ // RemoteAddr is commonly in the form "IP" or "IP:port". -+ // If it is in the form "IP:port", split off the port. -+ host, _, err := net.SplitHostPort(req.RemoteAddr) -+ if err != nil { -+ host = req.RemoteAddr -+ } -+ switch host { -+ case "localhost", "127.0.0.1", "::1": -+ return true, true -+ default: -+ return false, false -+ } -+} -+ -+func init() { -+ _, pat := http.DefaultServeMux.Handler(&http.Request{URL: &url.URL{Path: debugRequestsPath}}) -+ if pat == debugRequestsPath { -+ panic("/debug/requests is already registered. You may have two independent copies of " + -+ "golang.org/x/net/trace in your binary, trying to maintain separate state. This may " + -+ "involve a vendored copy of golang.org/x/net/trace.") -+ } -+ -+ // TODO(jbd): Serve Traces from /debug/traces in the future? -+ // There is no requirement for a request to be present to have traces. -+ http.HandleFunc(debugRequestsPath, Traces) -+ http.HandleFunc(debugEventsPath, Events) -+} -+ -+// NewContext returns a copy of the parent context -+// and associates it with a Trace. -+func NewContext(ctx context.Context, tr Trace) context.Context { -+ return context.WithValue(ctx, contextKey, tr) -+} -+ -+// FromContext returns the Trace bound to the context, if any. -+func FromContext(ctx context.Context) (tr Trace, ok bool) { -+ tr, ok = ctx.Value(contextKey).(Trace) -+ return -+} -+ -+// Traces responds with traces from the program. -+// The package initialization registers it in http.DefaultServeMux -+// at /debug/requests. -+// -+// It performs authorization by running AuthRequest. -+func Traces(w http.ResponseWriter, req *http.Request) { -+ any, sensitive := AuthRequest(req) -+ if !any { -+ http.Error(w, "not allowed", http.StatusUnauthorized) -+ return -+ } -+ w.Header().Set("Content-Type", "text/html; charset=utf-8") -+ Render(w, req, sensitive) -+} -+ -+// Events responds with a page of events collected by EventLogs. -+// The package initialization registers it in http.DefaultServeMux -+// at /debug/events. -+// -+// It performs authorization by running AuthRequest. -+func Events(w http.ResponseWriter, req *http.Request) { -+ any, sensitive := AuthRequest(req) -+ if !any { -+ http.Error(w, "not allowed", http.StatusUnauthorized) -+ return -+ } -+ w.Header().Set("Content-Type", "text/html; charset=utf-8") -+ RenderEvents(w, req, sensitive) -+} -+ -+// Render renders the HTML page typically served at /debug/requests. -+// It does not do any auth checking. The request may be nil. -+// -+// Most users will use the Traces handler. -+func Render(w io.Writer, req *http.Request, sensitive bool) { -+ data := &struct { -+ Families []string -+ ActiveTraceCount map[string]int -+ CompletedTraces map[string]*family -+ -+ // Set when a bucket has been selected. -+ Traces traceList -+ Family string -+ Bucket int -+ Expanded bool -+ Traced bool -+ Active bool -+ ShowSensitive bool // whether to show sensitive events -+ -+ Histogram template.HTML -+ HistogramWindow string // e.g. "last minute", "last hour", "all time" -+ -+ // If non-zero, the set of traces is a partial set, -+ // and this is the total number. -+ Total int -+ }{ -+ CompletedTraces: completedTraces, -+ } -+ -+ data.ShowSensitive = sensitive -+ if req != nil { -+ // Allow show_sensitive=0 to force hiding of sensitive data for testing. -+ // This only goes one way; you can't use show_sensitive=1 to see things. -+ if req.FormValue("show_sensitive") == "0" { -+ data.ShowSensitive = false -+ } -+ -+ if exp, err := strconv.ParseBool(req.FormValue("exp")); err == nil { -+ data.Expanded = exp -+ } -+ if exp, err := strconv.ParseBool(req.FormValue("rtraced")); err == nil { -+ data.Traced = exp -+ } -+ } -+ -+ completedMu.RLock() -+ data.Families = make([]string, 0, len(completedTraces)) -+ for fam := range completedTraces { -+ data.Families = append(data.Families, fam) -+ } -+ completedMu.RUnlock() -+ sort.Strings(data.Families) -+ -+ // We are careful here to minimize the time spent locking activeMu, -+ // since that lock is required every time an RPC starts and finishes. -+ data.ActiveTraceCount = make(map[string]int, len(data.Families)) -+ activeMu.RLock() -+ for fam, s := range activeTraces { -+ data.ActiveTraceCount[fam] = s.Len() -+ } -+ activeMu.RUnlock() -+ -+ var ok bool -+ data.Family, data.Bucket, ok = parseArgs(req) -+ switch { -+ case !ok: -+ // No-op -+ case data.Bucket == -1: -+ data.Active = true -+ n := data.ActiveTraceCount[data.Family] -+ data.Traces = getActiveTraces(data.Family) -+ if len(data.Traces) < n { -+ data.Total = n -+ } -+ case data.Bucket < bucketsPerFamily: -+ if b := lookupBucket(data.Family, data.Bucket); b != nil { -+ data.Traces = b.Copy(data.Traced) -+ } -+ default: -+ if f := getFamily(data.Family, false); f != nil { -+ var obs timeseries.Observable -+ f.LatencyMu.RLock() -+ switch o := data.Bucket - bucketsPerFamily; o { -+ case 0: -+ obs = f.Latency.Minute() -+ data.HistogramWindow = "last minute" -+ case 1: -+ obs = f.Latency.Hour() -+ data.HistogramWindow = "last hour" -+ case 2: -+ obs = f.Latency.Total() -+ data.HistogramWindow = "all time" -+ } -+ f.LatencyMu.RUnlock() -+ if obs != nil { -+ data.Histogram = obs.(*histogram).html() -+ } -+ } -+ } -+ -+ if data.Traces != nil { -+ defer data.Traces.Free() -+ sort.Sort(data.Traces) -+ } -+ -+ completedMu.RLock() -+ defer completedMu.RUnlock() -+ if err := pageTmpl().ExecuteTemplate(w, "Page", data); err != nil { -+ log.Printf("net/trace: Failed executing template: %v", err) -+ } -+} -+ -+func parseArgs(req *http.Request) (fam string, b int, ok bool) { -+ if req == nil { -+ return "", 0, false -+ } -+ fam, bStr := req.FormValue("fam"), req.FormValue("b") -+ if fam == "" || bStr == "" { -+ return "", 0, false -+ } -+ b, err := strconv.Atoi(bStr) -+ if err != nil || b < -1 { -+ return "", 0, false -+ } -+ -+ return fam, b, true -+} -+ -+func lookupBucket(fam string, b int) *traceBucket { -+ f := getFamily(fam, false) -+ if f == nil || b < 0 || b >= len(f.Buckets) { -+ return nil -+ } -+ return f.Buckets[b] -+} -+ -+type contextKeyT string -+ -+var contextKey = contextKeyT("golang.org/x/net/trace.Trace") -+ -+// Trace represents an active request. -+type Trace interface { -+ // LazyLog adds x to the event log. It will be evaluated each time the -+ // /debug/requests page is rendered. Any memory referenced by x will be -+ // pinned until the trace is finished and later discarded. -+ LazyLog(x fmt.Stringer, sensitive bool) -+ -+ // LazyPrintf evaluates its arguments with fmt.Sprintf each time the -+ // /debug/requests page is rendered. Any memory referenced by a will be -+ // pinned until the trace is finished and later discarded. -+ LazyPrintf(format string, a ...interface{}) -+ -+ // SetError declares that this trace resulted in an error. -+ SetError() -+ -+ // SetRecycler sets a recycler for the trace. -+ // f will be called for each event passed to LazyLog at a time when -+ // it is no longer required, whether while the trace is still active -+ // and the event is discarded, or when a completed trace is discarded. -+ SetRecycler(f func(interface{})) -+ -+ // SetTraceInfo sets the trace info for the trace. -+ // This is currently unused. -+ SetTraceInfo(traceID, spanID uint64) -+ -+ // SetMaxEvents sets the maximum number of events that will be stored -+ // in the trace. This has no effect if any events have already been -+ // added to the trace. -+ SetMaxEvents(m int) -+ -+ // Finish declares that this trace is complete. -+ // The trace should not be used after calling this method. -+ Finish() -+} -+ -+type lazySprintf struct { -+ format string -+ a []interface{} -+} -+ -+func (l *lazySprintf) String() string { -+ return fmt.Sprintf(l.format, l.a...) -+} -+ -+// New returns a new Trace with the specified family and title. -+func New(family, title string) Trace { -+ tr := newTrace() -+ tr.ref() -+ tr.Family, tr.Title = family, title -+ tr.Start = time.Now() -+ tr.maxEvents = maxEventsPerTrace -+ tr.events = tr.eventsBuf[:0] -+ -+ activeMu.RLock() -+ s := activeTraces[tr.Family] -+ activeMu.RUnlock() -+ if s == nil { -+ activeMu.Lock() -+ s = activeTraces[tr.Family] // check again -+ if s == nil { -+ s = new(traceSet) -+ activeTraces[tr.Family] = s -+ } -+ activeMu.Unlock() -+ } -+ s.Add(tr) -+ -+ // Trigger allocation of the completed trace structure for this family. -+ // This will cause the family to be present in the request page during -+ // the first trace of this family. We don't care about the return value, -+ // nor is there any need for this to run inline, so we execute it in its -+ // own goroutine, but only if the family isn't allocated yet. -+ completedMu.RLock() -+ if _, ok := completedTraces[tr.Family]; !ok { -+ go allocFamily(tr.Family) -+ } -+ completedMu.RUnlock() -+ -+ return tr -+} -+ -+func (tr *trace) Finish() { -+ elapsed := time.Since(tr.Start) -+ tr.mu.Lock() -+ tr.Elapsed = elapsed -+ tr.mu.Unlock() -+ -+ if DebugUseAfterFinish { -+ buf := make([]byte, 4<<10) // 4 KB should be enough -+ n := runtime.Stack(buf, false) -+ tr.finishStack = buf[:n] -+ } -+ -+ activeMu.RLock() -+ m := activeTraces[tr.Family] -+ activeMu.RUnlock() -+ m.Remove(tr) -+ -+ f := getFamily(tr.Family, true) -+ tr.mu.RLock() // protects tr fields in Cond.match calls -+ for _, b := range f.Buckets { -+ if b.Cond.match(tr) { -+ b.Add(tr) -+ } -+ } -+ tr.mu.RUnlock() -+ -+ // Add a sample of elapsed time as microseconds to the family's timeseries -+ h := new(histogram) -+ h.addMeasurement(elapsed.Nanoseconds() / 1e3) -+ f.LatencyMu.Lock() -+ f.Latency.Add(h) -+ f.LatencyMu.Unlock() -+ -+ tr.unref() // matches ref in New -+} -+ -+const ( -+ bucketsPerFamily = 9 -+ tracesPerBucket = 10 -+ maxActiveTraces = 20 // Maximum number of active traces to show. -+ maxEventsPerTrace = 10 -+ numHistogramBuckets = 38 -+) -+ -+var ( -+ // The active traces. -+ activeMu sync.RWMutex -+ activeTraces = make(map[string]*traceSet) // family -> traces -+ -+ // Families of completed traces. -+ completedMu sync.RWMutex -+ completedTraces = make(map[string]*family) // family -> traces -+) -+ -+type traceSet struct { -+ mu sync.RWMutex -+ m map[*trace]bool -+ -+ // We could avoid the entire map scan in FirstN by having a slice of all the traces -+ // ordered by start time, and an index into that from the trace struct, with a periodic -+ // repack of the slice after enough traces finish; we could also use a skip list or similar. -+ // However, that would shift some of the expense from /debug/requests time to RPC time, -+ // which is probably the wrong trade-off. -+} -+ -+func (ts *traceSet) Len() int { -+ ts.mu.RLock() -+ defer ts.mu.RUnlock() -+ return len(ts.m) -+} -+ -+func (ts *traceSet) Add(tr *trace) { -+ ts.mu.Lock() -+ if ts.m == nil { -+ ts.m = make(map[*trace]bool) -+ } -+ ts.m[tr] = true -+ ts.mu.Unlock() -+} -+ -+func (ts *traceSet) Remove(tr *trace) { -+ ts.mu.Lock() -+ delete(ts.m, tr) -+ ts.mu.Unlock() -+} -+ -+// FirstN returns the first n traces ordered by time. -+func (ts *traceSet) FirstN(n int) traceList { -+ ts.mu.RLock() -+ defer ts.mu.RUnlock() -+ -+ if n > len(ts.m) { -+ n = len(ts.m) -+ } -+ trl := make(traceList, 0, n) -+ -+ // Fast path for when no selectivity is needed. -+ if n == len(ts.m) { -+ for tr := range ts.m { -+ tr.ref() -+ trl = append(trl, tr) -+ } -+ sort.Sort(trl) -+ return trl -+ } -+ -+ // Pick the oldest n traces. -+ // This is inefficient. See the comment in the traceSet struct. -+ for tr := range ts.m { -+ // Put the first n traces into trl in the order they occur. -+ // When we have n, sort trl, and thereafter maintain its order. -+ if len(trl) < n { -+ tr.ref() -+ trl = append(trl, tr) -+ if len(trl) == n { -+ // This is guaranteed to happen exactly once during this loop. -+ sort.Sort(trl) -+ } -+ continue -+ } -+ if tr.Start.After(trl[n-1].Start) { -+ continue -+ } -+ -+ // Find where to insert this one. -+ tr.ref() -+ i := sort.Search(n, func(i int) bool { return trl[i].Start.After(tr.Start) }) -+ trl[n-1].unref() -+ copy(trl[i+1:], trl[i:]) -+ trl[i] = tr -+ } -+ -+ return trl -+} -+ -+func getActiveTraces(fam string) traceList { -+ activeMu.RLock() -+ s := activeTraces[fam] -+ activeMu.RUnlock() -+ if s == nil { -+ return nil -+ } -+ return s.FirstN(maxActiveTraces) -+} -+ -+func getFamily(fam string, allocNew bool) *family { -+ completedMu.RLock() -+ f := completedTraces[fam] -+ completedMu.RUnlock() -+ if f == nil && allocNew { -+ f = allocFamily(fam) -+ } -+ return f -+} -+ -+func allocFamily(fam string) *family { -+ completedMu.Lock() -+ defer completedMu.Unlock() -+ f := completedTraces[fam] -+ if f == nil { -+ f = newFamily() -+ completedTraces[fam] = f -+ } -+ return f -+} -+ -+// family represents a set of trace buckets and associated latency information. -+type family struct { -+ // traces may occur in multiple buckets. -+ Buckets [bucketsPerFamily]*traceBucket -+ -+ // latency time series -+ LatencyMu sync.RWMutex -+ Latency *timeseries.MinuteHourSeries -+} -+ -+func newFamily() *family { -+ return &family{ -+ Buckets: [bucketsPerFamily]*traceBucket{ -+ {Cond: minCond(0)}, -+ {Cond: minCond(50 * time.Millisecond)}, -+ {Cond: minCond(100 * time.Millisecond)}, -+ {Cond: minCond(200 * time.Millisecond)}, -+ {Cond: minCond(500 * time.Millisecond)}, -+ {Cond: minCond(1 * time.Second)}, -+ {Cond: minCond(10 * time.Second)}, -+ {Cond: minCond(100 * time.Second)}, -+ {Cond: errorCond{}}, -+ }, -+ Latency: timeseries.NewMinuteHourSeries(func() timeseries.Observable { return new(histogram) }), -+ } -+} -+ -+// traceBucket represents a size-capped bucket of historic traces, -+// along with a condition for a trace to belong to the bucket. -+type traceBucket struct { -+ Cond cond -+ -+ // Ring buffer implementation of a fixed-size FIFO queue. -+ mu sync.RWMutex -+ buf [tracesPerBucket]*trace -+ start int // < tracesPerBucket -+ length int // <= tracesPerBucket -+} -+ -+func (b *traceBucket) Add(tr *trace) { -+ b.mu.Lock() -+ defer b.mu.Unlock() -+ -+ i := b.start + b.length -+ if i >= tracesPerBucket { -+ i -= tracesPerBucket -+ } -+ if b.length == tracesPerBucket { -+ // "Remove" an element from the bucket. -+ b.buf[i].unref() -+ b.start++ -+ if b.start == tracesPerBucket { -+ b.start = 0 -+ } -+ } -+ b.buf[i] = tr -+ if b.length < tracesPerBucket { -+ b.length++ -+ } -+ tr.ref() -+} -+ -+// Copy returns a copy of the traces in the bucket. -+// If tracedOnly is true, only the traces with trace information will be returned. -+// The logs will be ref'd before returning; the caller should call -+// the Free method when it is done with them. -+// TODO(dsymonds): keep track of traced requests in separate buckets. -+func (b *traceBucket) Copy(tracedOnly bool) traceList { -+ b.mu.RLock() -+ defer b.mu.RUnlock() -+ -+ trl := make(traceList, 0, b.length) -+ for i, x := 0, b.start; i < b.length; i++ { -+ tr := b.buf[x] -+ if !tracedOnly || tr.spanID != 0 { -+ tr.ref() -+ trl = append(trl, tr) -+ } -+ x++ -+ if x == b.length { -+ x = 0 -+ } -+ } -+ return trl -+} -+ -+func (b *traceBucket) Empty() bool { -+ b.mu.RLock() -+ defer b.mu.RUnlock() -+ return b.length == 0 -+} -+ -+// cond represents a condition on a trace. -+type cond interface { -+ match(t *trace) bool -+ String() string -+} -+ -+type minCond time.Duration -+ -+func (m minCond) match(t *trace) bool { return t.Elapsed >= time.Duration(m) } -+func (m minCond) String() string { return fmt.Sprintf("≥%gs", time.Duration(m).Seconds()) } -+ -+type errorCond struct{} -+ -+func (e errorCond) match(t *trace) bool { return t.IsError } -+func (e errorCond) String() string { return "errors" } -+ -+type traceList []*trace -+ -+// Free calls unref on each element of the list. -+func (trl traceList) Free() { -+ for _, t := range trl { -+ t.unref() -+ } -+} -+ -+// traceList may be sorted in reverse chronological order. -+func (trl traceList) Len() int { return len(trl) } -+func (trl traceList) Less(i, j int) bool { return trl[i].Start.After(trl[j].Start) } -+func (trl traceList) Swap(i, j int) { trl[i], trl[j] = trl[j], trl[i] } -+ -+// An event is a timestamped log entry in a trace. -+type event struct { -+ When time.Time -+ Elapsed time.Duration // since previous event in trace -+ NewDay bool // whether this event is on a different day to the previous event -+ Recyclable bool // whether this event was passed via LazyLog -+ Sensitive bool // whether this event contains sensitive information -+ What interface{} // string or fmt.Stringer -+} -+ -+// WhenString returns a string representation of the elapsed time of the event. -+// It will include the date if midnight was crossed. -+func (e event) WhenString() string { -+ if e.NewDay { -+ return e.When.Format("2006/01/02 15:04:05.000000") -+ } -+ return e.When.Format("15:04:05.000000") -+} -+ -+// discarded represents a number of discarded events. -+// It is stored as *discarded to make it easier to update in-place. -+type discarded int -+ -+func (d *discarded) String() string { -+ return fmt.Sprintf("(%d events discarded)", int(*d)) -+} -+ -+// trace represents an active or complete request, -+// either sent or received by this program. -+type trace struct { -+ // Family is the top-level grouping of traces to which this belongs. -+ Family string -+ -+ // Title is the title of this trace. -+ Title string -+ -+ // Start time of the this trace. -+ Start time.Time -+ -+ mu sync.RWMutex -+ events []event // Append-only sequence of events (modulo discards). -+ maxEvents int -+ recycler func(interface{}) -+ IsError bool // Whether this trace resulted in an error. -+ Elapsed time.Duration // Elapsed time for this trace, zero while active. -+ traceID uint64 // Trace information if non-zero. -+ spanID uint64 -+ -+ refs int32 // how many buckets this is in -+ disc discarded // scratch space to avoid allocation -+ -+ finishStack []byte // where finish was called, if DebugUseAfterFinish is set -+ -+ eventsBuf [4]event // preallocated buffer in case we only log a few events -+} -+ -+func (tr *trace) reset() { -+ // Clear all but the mutex. Mutexes may not be copied, even when unlocked. -+ tr.Family = "" -+ tr.Title = "" -+ tr.Start = time.Time{} -+ -+ tr.mu.Lock() -+ tr.Elapsed = 0 -+ tr.traceID = 0 -+ tr.spanID = 0 -+ tr.IsError = false -+ tr.maxEvents = 0 -+ tr.events = nil -+ tr.recycler = nil -+ tr.mu.Unlock() -+ -+ tr.refs = 0 -+ tr.disc = 0 -+ tr.finishStack = nil -+ for i := range tr.eventsBuf { -+ tr.eventsBuf[i] = event{} -+ } -+} -+ -+// delta returns the elapsed time since the last event or the trace start, -+// and whether it spans midnight. -+// L >= tr.mu -+func (tr *trace) delta(t time.Time) (time.Duration, bool) { -+ if len(tr.events) == 0 { -+ return t.Sub(tr.Start), false -+ } -+ prev := tr.events[len(tr.events)-1].When -+ return t.Sub(prev), prev.Day() != t.Day() -+} -+ -+func (tr *trace) addEvent(x interface{}, recyclable, sensitive bool) { -+ if DebugUseAfterFinish && tr.finishStack != nil { -+ buf := make([]byte, 4<<10) // 4 KB should be enough -+ n := runtime.Stack(buf, false) -+ log.Printf("net/trace: trace used after finish:\nFinished at:\n%s\nUsed at:\n%s", tr.finishStack, buf[:n]) -+ } -+ -+ /* -+ NOTE TO DEBUGGERS -+ -+ If you are here because your program panicked in this code, -+ it is almost definitely the fault of code using this package, -+ and very unlikely to be the fault of this code. -+ -+ The most likely scenario is that some code elsewhere is using -+ a trace.Trace after its Finish method is called. -+ You can temporarily set the DebugUseAfterFinish var -+ to help discover where that is; do not leave that var set, -+ since it makes this package much less efficient. -+ */ -+ -+ e := event{When: time.Now(), What: x, Recyclable: recyclable, Sensitive: sensitive} -+ tr.mu.Lock() -+ e.Elapsed, e.NewDay = tr.delta(e.When) -+ if len(tr.events) < tr.maxEvents { -+ tr.events = append(tr.events, e) -+ } else { -+ // Discard the middle events. -+ di := int((tr.maxEvents - 1) / 2) -+ if d, ok := tr.events[di].What.(*discarded); ok { -+ (*d)++ -+ } else { -+ // disc starts at two to count for the event it is replacing, -+ // plus the next one that we are about to drop. -+ tr.disc = 2 -+ if tr.recycler != nil && tr.events[di].Recyclable { -+ go tr.recycler(tr.events[di].What) -+ } -+ tr.events[di].What = &tr.disc -+ } -+ // The timestamp of the discarded meta-event should be -+ // the time of the last event it is representing. -+ tr.events[di].When = tr.events[di+1].When -+ -+ if tr.recycler != nil && tr.events[di+1].Recyclable { -+ go tr.recycler(tr.events[di+1].What) -+ } -+ copy(tr.events[di+1:], tr.events[di+2:]) -+ tr.events[tr.maxEvents-1] = e -+ } -+ tr.mu.Unlock() -+} -+ -+func (tr *trace) LazyLog(x fmt.Stringer, sensitive bool) { -+ tr.addEvent(x, true, sensitive) -+} -+ -+func (tr *trace) LazyPrintf(format string, a ...interface{}) { -+ tr.addEvent(&lazySprintf{format, a}, false, false) -+} -+ -+func (tr *trace) SetError() { -+ tr.mu.Lock() -+ tr.IsError = true -+ tr.mu.Unlock() -+} -+ -+func (tr *trace) SetRecycler(f func(interface{})) { -+ tr.mu.Lock() -+ tr.recycler = f -+ tr.mu.Unlock() -+} -+ -+func (tr *trace) SetTraceInfo(traceID, spanID uint64) { -+ tr.mu.Lock() -+ tr.traceID, tr.spanID = traceID, spanID -+ tr.mu.Unlock() -+} -+ -+func (tr *trace) SetMaxEvents(m int) { -+ tr.mu.Lock() -+ // Always keep at least three events: first, discarded count, last. -+ if len(tr.events) == 0 && m > 3 { -+ tr.maxEvents = m -+ } -+ tr.mu.Unlock() -+} -+ -+func (tr *trace) ref() { -+ atomic.AddInt32(&tr.refs, 1) -+} -+ -+func (tr *trace) unref() { -+ if atomic.AddInt32(&tr.refs, -1) == 0 { -+ tr.mu.RLock() -+ if tr.recycler != nil { -+ // freeTrace clears tr, so we hold tr.recycler and tr.events here. -+ go func(f func(interface{}), es []event) { -+ for _, e := range es { -+ if e.Recyclable { -+ f(e.What) -+ } -+ } -+ }(tr.recycler, tr.events) -+ } -+ tr.mu.RUnlock() -+ -+ freeTrace(tr) -+ } -+} -+ -+func (tr *trace) When() string { -+ return tr.Start.Format("2006/01/02 15:04:05.000000") -+} -+ -+func (tr *trace) ElapsedTime() string { -+ tr.mu.RLock() -+ t := tr.Elapsed -+ tr.mu.RUnlock() -+ -+ if t == 0 { -+ // Active trace. -+ t = time.Since(tr.Start) -+ } -+ return fmt.Sprintf("%.6f", t.Seconds()) -+} -+ -+func (tr *trace) Events() []event { -+ tr.mu.RLock() -+ defer tr.mu.RUnlock() -+ return tr.events -+} -+ -+var traceFreeList = make(chan *trace, 1000) // TODO(dsymonds): Use sync.Pool? -+ -+// newTrace returns a trace ready to use. -+func newTrace() *trace { -+ select { -+ case tr := <-traceFreeList: -+ return tr -+ default: -+ return new(trace) -+ } -+} -+ -+// freeTrace adds tr to traceFreeList if there's room. -+// This is non-blocking. -+func freeTrace(tr *trace) { -+ if DebugUseAfterFinish { -+ return // never reuse -+ } -+ tr.reset() -+ select { -+ case traceFreeList <- tr: -+ default: -+ } -+} -+ -+func elapsed(d time.Duration) string { -+ b := []byte(fmt.Sprintf("%.6f", d.Seconds())) -+ -+ // For subsecond durations, blank all zeros before decimal point, -+ // and all zeros between the decimal point and the first non-zero digit. -+ if d < time.Second { -+ dot := bytes.IndexByte(b, '.') -+ for i := 0; i < dot; i++ { -+ b[i] = ' ' -+ } -+ for i := dot + 1; i < len(b); i++ { -+ if b[i] == '0' { -+ b[i] = ' ' -+ } else { -+ break -+ } -+ } -+ } -+ -+ return string(b) -+} -+ -+var pageTmplCache *template.Template -+var pageTmplOnce sync.Once -+ -+func pageTmpl() *template.Template { -+ pageTmplOnce.Do(func() { -+ pageTmplCache = template.Must(template.New("Page").Funcs(template.FuncMap{ -+ "elapsed": elapsed, -+ "add": func(a, b int) int { return a + b }, -+ }).Parse(pageHTML)) -+ }) -+ return pageTmplCache -+} -+ -+const pageHTML = ` -+{{template "Prolog" .}} -+{{template "StatusTable" .}} -+{{template "Epilog" .}} -+ -+{{define "Prolog"}} -+ -+ -+ /debug/requests -+ -+ -+ -+ -+

/debug/requests

-+{{end}} {{/* end of Prolog */}} -+ -+{{define "StatusTable"}} -+ -+ {{range $fam := .Families}} -+ -+ -+ -+ {{$n := index $.ActiveTraceCount $fam}} -+ -+ -+ {{$f := index $.CompletedTraces $fam}} -+ {{range $i, $b := $f.Buckets}} -+ {{$empty := $b.Empty}} -+ -+ {{end}} -+ -+ {{$nb := len $f.Buckets}} -+ -+ -+ -+ -+ -+ {{end}} -+
{{$fam}} -+ {{if $n}}{{end}} -+ [{{$n}} active] -+ {{if $n}}{{end}} -+ -+ {{if not $empty}}{{end}} -+ [{{.Cond}}] -+ {{if not $empty}}{{end}} -+ -+ [minute] -+ -+ [hour] -+ -+ [total] -+
-+{{end}} {{/* end of StatusTable */}} -+ -+{{define "Epilog"}} -+{{if $.Traces}} -+
-+

Family: {{$.Family}}

-+ -+{{if or $.Expanded $.Traced}} -+ [Normal/Summary] -+{{else}} -+ [Normal/Summary] -+{{end}} -+ -+{{if or (not $.Expanded) $.Traced}} -+ [Normal/Expanded] -+{{else}} -+ [Normal/Expanded] -+{{end}} -+ -+{{if not $.Active}} -+ {{if or $.Expanded (not $.Traced)}} -+ [Traced/Summary] -+ {{else}} -+ [Traced/Summary] -+ {{end}} -+ {{if or (not $.Expanded) (not $.Traced)}} -+ [Traced/Expanded] -+ {{else}} -+ [Traced/Expanded] -+ {{end}} -+{{end}} -+ -+{{if $.Total}} -+

Showing {{len $.Traces}} of {{$.Total}} traces.

-+{{end}} -+ -+ -+ -+ -+ {{range $tr := $.Traces}} -+ -+ -+ -+ -+ {{/* TODO: include traceID/spanID */}} -+ -+ {{if $.Expanded}} -+ {{range $tr.Events}} -+ -+ -+ -+ -+ -+ {{end}} -+ {{end}} -+ {{end}} -+
-+ {{if $.Active}}Active{{else}}Completed{{end}} Requests -+
WhenElapsed (s)
{{$tr.When}}{{$tr.ElapsedTime}}{{$tr.Title}}
{{.WhenString}}{{elapsed .Elapsed}}{{if or $.ShowSensitive (not .Sensitive)}}... {{.What}}{{else}}[redacted]{{end}}
-+{{end}} {{/* if $.Traces */}} -+ -+{{if $.Histogram}} -+

Latency (µs) of {{$.Family}} over {{$.HistogramWindow}}

-+{{$.Histogram}} -+{{end}} {{/* if $.Histogram */}} -+ -+ -+ -+{{end}} {{/* end of Epilog */}} -+` -diff --git a/vendor/golang.org/x/oauth2/.travis.yml b/vendor/golang.org/x/oauth2/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/oauth2/AUTHORS b/vendor/golang.org/x/oauth2/AUTHORS -deleted file mode 100644 -index 15167cd..0000000 ---- a/vendor/golang.org/x/oauth2/AUTHORS -+++ /dev/null -@@ -1,3 +0,0 @@ --# This source code refers to The Go Authors for copyright purposes. --# The master list of authors is in the main Go distribution, --# visible at http://tip.golang.org/AUTHORS. -diff --git a/vendor/golang.org/x/oauth2/CONTRIBUTING.md b/vendor/golang.org/x/oauth2/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/oauth2/CONTRIBUTORS b/vendor/golang.org/x/oauth2/CONTRIBUTORS -deleted file mode 100644 -index 1c4577e..0000000 ---- a/vendor/golang.org/x/oauth2/CONTRIBUTORS -+++ /dev/null -@@ -1,3 +0,0 @@ --# This source code was written by the Go contributors. --# The master list of contributors is in the main Go distribution, --# visible at http://tip.golang.org/CONTRIBUTORS. -diff --git a/vendor/golang.org/x/oauth2/LICENSE b/vendor/golang.org/x/oauth2/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/oauth2/README.md b/vendor/golang.org/x/oauth2/README.md -old mode 100644 -new mode 100755 -index 1473e12..781770c ---- a/vendor/golang.org/x/oauth2/README.md -+++ b/vendor/golang.org/x/oauth2/README.md -@@ -19,7 +19,7 @@ See pkg.go.dev for further documentation and examples. - * [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2) - * [pkg.go.dev/golang.org/x/oauth2/google](https://pkg.go.dev/golang.org/x/oauth2/google) - --## Policy for new packages -+## Policy for new endpoints - - We no longer accept new provider-specific packages in this repo if all - they do is add a single endpoint variable. If you just want to add a -@@ -29,8 +29,12 @@ package. - - ## Report Issues / Send Patches - --This repository uses Gerrit for code changes. To learn how to submit changes to --this repository, see https://golang.org/doc/contribute.html. -- - The main issue tracker for the oauth2 repository is located at - https://github.com/golang/oauth2/issues. -+ -+This repository uses Gerrit for code changes. To learn how to submit changes to -+this repository, see https://golang.org/doc/contribute.html. In particular: -+ -+* Excluding trivial changes, all contributions should be connected to an existing issue. -+* API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted. -+* The code owners are listed at [dev.golang.org/owners](https://dev.golang.org/owners#:~:text=x/oauth2). -diff --git a/vendor/golang.org/x/oauth2/internal/client_appengine.go b/vendor/golang.org/x/oauth2/internal/client_appengine.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/oauth2/internal/doc.go b/vendor/golang.org/x/oauth2/internal/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/oauth2/internal/oauth2.go b/vendor/golang.org/x/oauth2/internal/oauth2.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/oauth2/internal/token.go b/vendor/golang.org/x/oauth2/internal/token.go -old mode 100644 -new mode 100755 -index 355c386..b4723fc ---- a/vendor/golang.org/x/oauth2/internal/token.go -+++ b/vendor/golang.org/x/oauth2/internal/token.go -@@ -19,8 +19,6 @@ import ( - "strings" - "sync" - "time" -- -- "golang.org/x/net/context/ctxhttp" - ) - - // Token represents the credentials used to authorize -@@ -229,7 +227,7 @@ func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, - } - - func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { -- r, err := ctxhttp.Do(ctx, ContextClient(ctx), req) -+ r, err := ContextClient(ctx).Do(req.WithContext(ctx)) - if err != nil { - return nil, err - } -diff --git a/vendor/golang.org/x/oauth2/internal/transport.go b/vendor/golang.org/x/oauth2/internal/transport.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/oauth2/oauth2.go b/vendor/golang.org/x/oauth2/oauth2.go -old mode 100644 -new mode 100755 -index 291df5c..9085fab ---- a/vendor/golang.org/x/oauth2/oauth2.go -+++ b/vendor/golang.org/x/oauth2/oauth2.go -@@ -16,6 +16,7 @@ import ( - "net/url" - "strings" - "sync" -+ "time" - - "golang.org/x/oauth2/internal" - ) -@@ -140,7 +141,7 @@ func SetAuthURLParam(key, value string) AuthCodeOption { - // - // State is a token to protect the user from CSRF attacks. You must - // always provide a non-empty string and validate that it matches the --// the state query parameter on your redirect callback. -+// state query parameter on your redirect callback. - // See http://tools.ietf.org/html/rfc6749#section-10.12 for more info. - // - // Opts may include AccessTypeOnline or AccessTypeOffline, as well -@@ -290,6 +291,8 @@ type reuseTokenSource struct { - - mu sync.Mutex // guards t - t *Token -+ -+ expiryDelta time.Duration - } - - // Token returns the current token if it's still valid, else will -@@ -305,6 +308,7 @@ func (s *reuseTokenSource) Token() (*Token, error) { - if err != nil { - return nil, err - } -+ t.expiryDelta = s.expiryDelta - s.t = t - return t, nil - } -@@ -379,3 +383,30 @@ func ReuseTokenSource(t *Token, src TokenSource) TokenSource { - new: src, - } - } -+ -+// ReuseTokenSource returns a TokenSource that acts in the same manner as the -+// TokenSource returned by ReuseTokenSource, except the expiry buffer is -+// configurable. The expiration time of a token is calculated as -+// t.Expiry.Add(-earlyExpiry). -+func ReuseTokenSourceWithExpiry(t *Token, src TokenSource, earlyExpiry time.Duration) TokenSource { -+ // Don't wrap a reuseTokenSource in itself. That would work, -+ // but cause an unnecessary number of mutex operations. -+ // Just build the equivalent one. -+ if rt, ok := src.(*reuseTokenSource); ok { -+ if t == nil { -+ // Just use it directly, but set the expiryDelta to earlyExpiry, -+ // so the behavior matches what the user expects. -+ rt.expiryDelta = earlyExpiry -+ return rt -+ } -+ src = rt.new -+ } -+ if t != nil { -+ t.expiryDelta = earlyExpiry -+ } -+ return &reuseTokenSource{ -+ t: t, -+ new: src, -+ expiryDelta: earlyExpiry, -+ } -+} -diff --git a/vendor/golang.org/x/oauth2/token.go b/vendor/golang.org/x/oauth2/token.go -old mode 100644 -new mode 100755 -index 8227203..7c64006 ---- a/vendor/golang.org/x/oauth2/token.go -+++ b/vendor/golang.org/x/oauth2/token.go -@@ -16,10 +16,10 @@ import ( - "golang.org/x/oauth2/internal" - ) - --// expiryDelta determines how earlier a token should be considered -+// defaultExpiryDelta determines how earlier a token should be considered - // expired than its actual expiration time. It is used to avoid late - // expirations due to client-server time mismatches. --const expiryDelta = 10 * time.Second -+const defaultExpiryDelta = 10 * time.Second - - // Token represents the credentials used to authorize - // the requests to access protected resources on the OAuth 2.0 -@@ -52,6 +52,11 @@ type Token struct { - // raw optionally contains extra metadata from the server - // when updating a token. - raw interface{} -+ -+ // expiryDelta is used to calculate when a token is considered -+ // expired, by subtracting from Expiry. If zero, defaultExpiryDelta -+ // is used. -+ expiryDelta time.Duration - } - - // Type returns t.TokenType if non-empty, else "Bearer". -@@ -127,6 +132,11 @@ func (t *Token) expired() bool { - if t.Expiry.IsZero() { - return false - } -+ -+ expiryDelta := defaultExpiryDelta -+ if t.expiryDelta != 0 { -+ expiryDelta = t.expiryDelta -+ } - return t.Expiry.Round(0).Add(-expiryDelta).Before(timeNow()) - } - -diff --git a/vendor/golang.org/x/oauth2/transport.go b/vendor/golang.org/x/oauth2/transport.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/LICENSE b/vendor/golang.org/x/sys/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/PATENTS b/vendor/golang.org/x/sys/PATENTS -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go b/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go -deleted file mode 100644 -index e07899b..0000000 ---- a/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go -+++ /dev/null -@@ -1,30 +0,0 @@ --// Copyright 2020 The Go Authors. All rights reserved. --// Use of this source code is governed by a BSD-style --// license that can be found in the LICENSE file. -- --// Package unsafeheader contains header declarations for the Go runtime's --// slice and string implementations. --// --// This package allows x/sys to use types equivalent to --// reflect.SliceHeader and reflect.StringHeader without introducing --// a dependency on the (relatively heavy) "reflect" package. --package unsafeheader -- --import ( -- "unsafe" --) -- --// Slice is the runtime representation of a slice. --// It cannot be used safely or portably and its representation may change in a later release. --type Slice struct { -- Data unsafe.Pointer -- Len int -- Cap int --} -- --// String is the runtime representation of a string. --// It cannot be used safely or portably and its representation may change in a later release. --type String struct { -- Data unsafe.Pointer -- Len int --} -diff --git a/vendor/golang.org/x/sys/plan9/asm.s b/vendor/golang.org/x/sys/plan9/asm.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_386.s b/vendor/golang.org/x/sys/plan9/asm_plan9_386.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s b/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_arm.s b/vendor/golang.org/x/sys/plan9/asm_plan9_arm.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/const_plan9.go b/vendor/golang.org/x/sys/plan9/const_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/dir_plan9.go b/vendor/golang.org/x/sys/plan9/dir_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/env_plan9.go b/vendor/golang.org/x/sys/plan9/env_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/errors_plan9.go b/vendor/golang.org/x/sys/plan9/errors_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/mkall.sh b/vendor/golang.org/x/sys/plan9/mkall.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/mkerrors.sh b/vendor/golang.org/x/sys/plan9/mkerrors.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh b/vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go b/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/pwd_plan9.go b/vendor/golang.org/x/sys/plan9/pwd_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/race.go b/vendor/golang.org/x/sys/plan9/race.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/race0.go b/vendor/golang.org/x/sys/plan9/race0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/str.go b/vendor/golang.org/x/sys/plan9/str.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/syscall.go b/vendor/golang.org/x/sys/plan9/syscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/syscall_plan9.go b/vendor/golang.org/x/sys/plan9/syscall_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go b/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/.gitignore b/vendor/golang.org/x/sys/unix/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/golang.org/x/sys/unix/affinity_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/aliases.go b/vendor/golang.org/x/sys/unix/aliases.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s b/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_386.s b/vendor/golang.org/x/sys/unix/asm_bsd_386.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_arm.s b/vendor/golang.org/x/sys/unix/asm_bsd_arm.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s b/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s b/vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s b/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/golang.org/x/sys/unix/asm_linux_386.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/golang.org/x/sys/unix/asm_linux_arm.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_loong64.s b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s b/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/asm_zos_s390x.s b/vendor/golang.org/x/sys/unix/asm_zos_s390x.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/bluetooth_linux.go b/vendor/golang.org/x/sys/unix/bluetooth_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/cap_freebsd.go b/vendor/golang.org/x/sys/unix/cap_freebsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/constants.go b/vendor/golang.org/x/sys/unix/constants.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_darwin.go b/vendor/golang.org/x/sys/unix/dev_darwin.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_dragonfly.go b/vendor/golang.org/x/sys/unix/dev_dragonfly.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_freebsd.go b/vendor/golang.org/x/sys/unix/dev_freebsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_linux.go b/vendor/golang.org/x/sys/unix/dev_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_netbsd.go b/vendor/golang.org/x/sys/unix/dev_netbsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_openbsd.go b/vendor/golang.org/x/sys/unix/dev_openbsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dev_zos.go b/vendor/golang.org/x/sys/unix/dev_zos.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/endian_big.go b/vendor/golang.org/x/sys/unix/endian_big.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/epoll_zos.go b/vendor/golang.org/x/sys/unix/epoll_zos.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/fcntl.go b/vendor/golang.org/x/sys/unix/fcntl.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/fcntl_darwin.go b/vendor/golang.org/x/sys/unix/fcntl_darwin.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go b/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/fdset.go b/vendor/golang.org/x/sys/unix/fdset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/fstatfs_zos.go b/vendor/golang.org/x/sys/unix/fstatfs_zos.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go -old mode 100644 -new mode 100755 -index 0dee232..b06f52d ---- a/vendor/golang.org/x/sys/unix/gccgo.go -+++ b/vendor/golang.org/x/sys/unix/gccgo.go -@@ -2,8 +2,8 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --//go:build gccgo && !aix --// +build gccgo,!aix -+//go:build gccgo && !aix && !hurd -+// +build gccgo,!aix,!hurd - - package unix - -diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c -old mode 100644 -new mode 100755 -index 2cb1fef..f98a1c5 ---- a/vendor/golang.org/x/sys/unix/gccgo_c.c -+++ b/vendor/golang.org/x/sys/unix/gccgo_c.c -@@ -2,8 +2,8 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --// +build gccgo --// +build !aix -+//go:build gccgo && !aix && !hurd -+// +build gccgo,!aix,!hurd - - #include - #include -diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ioctl_signed.go b/vendor/golang.org/x/sys/unix/ioctl_signed.go -new file mode 100755 -index 0000000..7def958 ---- /dev/null -+++ b/vendor/golang.org/x/sys/unix/ioctl_signed.go -@@ -0,0 +1,70 @@ -+// Copyright 2018 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build aix || solaris -+// +build aix solaris -+ -+package unix -+ -+import ( -+ "unsafe" -+) -+ -+// ioctl itself should not be exposed directly, but additional get/set -+// functions for specific types are permissible. -+ -+// IoctlSetInt performs an ioctl operation which sets an integer value -+// on fd, using the specified request number. -+func IoctlSetInt(fd int, req int, value int) error { -+ return ioctl(fd, req, uintptr(value)) -+} -+ -+// IoctlSetPointerInt performs an ioctl operation which sets an -+// integer value on fd, using the specified request number. The ioctl -+// argument is called with a pointer to the integer value, rather than -+// passing the integer value directly. -+func IoctlSetPointerInt(fd int, req int, value int) error { -+ v := int32(value) -+ return ioctlPtr(fd, req, unsafe.Pointer(&v)) -+} -+ -+// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. -+// -+// To change fd's window size, the req argument should be TIOCSWINSZ. -+func IoctlSetWinsize(fd int, req int, value *Winsize) error { -+ // TODO: if we get the chance, remove the req parameter and -+ // hardcode TIOCSWINSZ. -+ return ioctlPtr(fd, req, unsafe.Pointer(value)) -+} -+ -+// IoctlSetTermios performs an ioctl on fd with a *Termios. -+// -+// The req value will usually be TCSETA or TIOCSETA. -+func IoctlSetTermios(fd int, req int, value *Termios) error { -+ // TODO: if we get the chance, remove the req parameter. -+ return ioctlPtr(fd, req, unsafe.Pointer(value)) -+} -+ -+// IoctlGetInt performs an ioctl operation which gets an integer value -+// from fd, using the specified request number. -+// -+// A few ioctl requests use the return value as an output parameter; -+// for those, IoctlRetInt should be used instead of this function. -+func IoctlGetInt(fd int, req int) (int, error) { -+ var value int -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) -+ return value, err -+} -+ -+func IoctlGetWinsize(fd int, req int) (*Winsize, error) { -+ var value Winsize -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) -+ return &value, err -+} -+ -+func IoctlGetTermios(fd int, req int) (*Termios, error) { -+ var value Termios -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) -+ return &value, err -+} -diff --git a/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/golang.org/x/sys/unix/ioctl_unsigned.go -old mode 100644 -new mode 100755 -similarity index 77% -rename from vendor/golang.org/x/sys/unix/ioctl.go -rename to vendor/golang.org/x/sys/unix/ioctl_unsigned.go -index 6c7ad05..649913d ---- a/vendor/golang.org/x/sys/unix/ioctl.go -+++ b/vendor/golang.org/x/sys/unix/ioctl_unsigned.go -@@ -2,13 +2,12 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris --// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris -+//go:build darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd -+// +build darwin dragonfly freebsd hurd linux netbsd openbsd - - package unix - - import ( -- "runtime" - "unsafe" - ) - -@@ -27,7 +26,7 @@ func IoctlSetInt(fd int, req uint, value int) error { - // passing the integer value directly. - func IoctlSetPointerInt(fd int, req uint, value int) error { - v := int32(value) -- return ioctl(fd, req, uintptr(unsafe.Pointer(&v))) -+ return ioctlPtr(fd, req, unsafe.Pointer(&v)) - } - - // IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. -@@ -36,9 +35,7 @@ func IoctlSetPointerInt(fd int, req uint, value int) error { - func IoctlSetWinsize(fd int, req uint, value *Winsize) error { - // TODO: if we get the chance, remove the req parameter and - // hardcode TIOCSWINSZ. -- err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) -- runtime.KeepAlive(value) -- return err -+ return ioctlPtr(fd, req, unsafe.Pointer(value)) - } - - // IoctlSetTermios performs an ioctl on fd with a *Termios. -@@ -46,9 +43,7 @@ func IoctlSetWinsize(fd int, req uint, value *Winsize) error { - // The req value will usually be TCSETA or TIOCSETA. - func IoctlSetTermios(fd int, req uint, value *Termios) error { - // TODO: if we get the chance, remove the req parameter. -- err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) -- runtime.KeepAlive(value) -- return err -+ return ioctlPtr(fd, req, unsafe.Pointer(value)) - } - - // IoctlGetInt performs an ioctl operation which gets an integer value -@@ -58,18 +53,18 @@ func IoctlSetTermios(fd int, req uint, value *Termios) error { - // for those, IoctlRetInt should be used instead of this function. - func IoctlGetInt(fd int, req uint) (int, error) { - var value int -- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) - return value, err - } - - func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { - var value Winsize -- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) - return &value, err - } - - func IoctlGetTermios(fd int, req uint) (*Termios, error) { - var value Termios -- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) - return &value, err - } -diff --git a/vendor/golang.org/x/sys/unix/ioctl_zos.go b/vendor/golang.org/x/sys/unix/ioctl_zos.go -old mode 100644 -new mode 100755 -index 5384e7d..cdc21bf ---- a/vendor/golang.org/x/sys/unix/ioctl_zos.go -+++ b/vendor/golang.org/x/sys/unix/ioctl_zos.go -@@ -17,25 +17,23 @@ import ( - - // IoctlSetInt performs an ioctl operation which sets an integer value - // on fd, using the specified request number. --func IoctlSetInt(fd int, req uint, value int) error { -+func IoctlSetInt(fd int, req int, value int) error { - return ioctl(fd, req, uintptr(value)) - } - - // IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. - // - // To change fd's window size, the req argument should be TIOCSWINSZ. --func IoctlSetWinsize(fd int, req uint, value *Winsize) error { -+func IoctlSetWinsize(fd int, req int, value *Winsize) error { - // TODO: if we get the chance, remove the req parameter and - // hardcode TIOCSWINSZ. -- err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) -- runtime.KeepAlive(value) -- return err -+ return ioctlPtr(fd, req, unsafe.Pointer(value)) - } - - // IoctlSetTermios performs an ioctl on fd with a *Termios. - // - // The req value is expected to be TCSETS, TCSETSW, or TCSETSF --func IoctlSetTermios(fd int, req uint, value *Termios) error { -+func IoctlSetTermios(fd int, req int, value *Termios) error { - if (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) { - return ENOSYS - } -@@ -49,22 +47,22 @@ func IoctlSetTermios(fd int, req uint, value *Termios) error { - // - // A few ioctl requests use the return value as an output parameter; - // for those, IoctlRetInt should be used instead of this function. --func IoctlGetInt(fd int, req uint) (int, error) { -+func IoctlGetInt(fd int, req int) (int, error) { - var value int -- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) - return value, err - } - --func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { -+func IoctlGetWinsize(fd int, req int) (*Winsize, error) { - var value Winsize -- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) - return &value, err - } - - // IoctlGetTermios performs an ioctl on fd with a *Termios. - // - // The req value is expected to be TCGETS --func IoctlGetTermios(fd int, req uint) (*Termios, error) { -+func IoctlGetTermios(fd int, req int) (*Termios, error) { - var value Termios - if req != TCGETS { - return &value, ENOSYS -diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh -old mode 100644 -new mode 100755 -index 727cba2..e6f31d3 ---- a/vendor/golang.org/x/sys/unix/mkall.sh -+++ b/vendor/golang.org/x/sys/unix/mkall.sh -@@ -50,7 +50,7 @@ if [[ "$GOOS" = "linux" ]]; then - # Use the Docker-based build system - # Files generated through docker (use $cmd so you can Ctl-C the build or run) - $cmd docker build --tag generate:$GOOS $GOOS -- $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && /bin/pwd):/build generate:$GOOS -+ $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && pwd):/build generate:$GOOS - exit - fi - -@@ -174,10 +174,10 @@ openbsd_arm64) - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" - ;; - openbsd_mips64) -+ mkasm="go run mkasm.go" - mkerrors="$mkerrors -m64" -- mksyscall="go run mksyscall.go -openbsd" -+ mksyscall="go run mksyscall.go -openbsd -libc" - mksysctl="go run mksysctl_openbsd.go" -- mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" - # Let the type of C char be signed for making the bare syscall - # API consistent across platforms. - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" -diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh -old mode 100644 -new mode 100755 -index 7456d9d..47fa6a7 ---- a/vendor/golang.org/x/sys/unix/mkerrors.sh -+++ b/vendor/golang.org/x/sys/unix/mkerrors.sh -@@ -66,6 +66,7 @@ includes_Darwin=' - #include - #include - #include -+#include - #include - #include - #include -@@ -203,6 +204,7 @@ struct ltchars { - #include - #include - #include -+#include - #include - #include - #include -@@ -517,10 +519,11 @@ ccflags="$@" - $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || - $2 ~ /^LO_(KEY|NAME)_SIZE$/ || - $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || -- $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT)_/ || -+ $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || - $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || - $2 ~ /^NFC_.*_(MAX)?SIZE$/ || - $2 ~ /^RAW_PAYLOAD_/ || -+ $2 ~ /^[US]F_/ || - $2 ~ /^TP_STATUS_/ || - $2 ~ /^FALLOC_/ || - $2 ~ /^ICMPV?6?_(FILTER|SEC)/ || -@@ -580,6 +583,7 @@ ccflags="$@" - $2 ~ /^PERF_/ || - $2 ~ /^SECCOMP_MODE_/ || - $2 ~ /^SEEK_/ || -+ $2 ~ /^SCHED_/ || - $2 ~ /^SPLICE_/ || - $2 ~ /^SYNC_FILE_RANGE_/ || - $2 !~ /IOC_MAGIC/ && -@@ -621,7 +625,7 @@ ccflags="$@" - $2 ~ /^MEM/ || - $2 ~ /^WG/ || - $2 ~ /^FIB_RULE_/ || -- $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} -+ $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE|IOMIN$|IOOPT$|ALIGNOFF$|DISCARD|ROTATIONAL$|ZEROOUT$|GETDISKSEQ$)/ {printf("\t%s = C.%s\n", $2, $2)} - $2 ~ /^__WCOREFLAG$/ {next} - $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} - -@@ -738,7 +742,8 @@ main(void) - e = errors[i].num; - if(i > 0 && errors[i-1].num == e) - continue; -- strcpy(buf, strerror(e)); -+ strncpy(buf, strerror(e), sizeof(buf) - 1); -+ buf[sizeof(buf) - 1] = '\0'; - // lowercase first letter: Bad -> bad, but STREAM -> STREAM. - if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) - buf[0] += a - A; -@@ -757,7 +762,8 @@ main(void) - e = signals[i].num; - if(i > 0 && signals[i-1].num == e) - continue; -- strcpy(buf, strsignal(e)); -+ strncpy(buf, strsignal(e), sizeof(buf) - 1); -+ buf[sizeof(buf) - 1] = '\0'; - // lowercase first letter: Bad -> bad, but STREAM -> STREAM. - if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) - buf[0] += a - A; -diff --git a/vendor/golang.org/x/sys/unix/mmap_nomremap.go b/vendor/golang.org/x/sys/unix/mmap_nomremap.go -new file mode 100755 -index 0000000..ca05136 ---- /dev/null -+++ b/vendor/golang.org/x/sys/unix/mmap_nomremap.go -@@ -0,0 +1,14 @@ -+// Copyright 2023 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris -+// +build aix darwin dragonfly freebsd openbsd solaris -+ -+package unix -+ -+var mapper = &mmapper{ -+ active: make(map[*byte][]byte), -+ mmap: mmap, -+ munmap: munmap, -+} -diff --git a/vendor/golang.org/x/sys/unix/mremap.go b/vendor/golang.org/x/sys/unix/mremap.go -new file mode 100755 -index 0000000..fa93d0a ---- /dev/null -+++ b/vendor/golang.org/x/sys/unix/mremap.go -@@ -0,0 +1,53 @@ -+// Copyright 2023 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build linux || netbsd -+// +build linux netbsd -+ -+package unix -+ -+import "unsafe" -+ -+type mremapMmapper struct { -+ mmapper -+ mremap func(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) -+} -+ -+var mapper = &mremapMmapper{ -+ mmapper: mmapper{ -+ active: make(map[*byte][]byte), -+ mmap: mmap, -+ munmap: munmap, -+ }, -+ mremap: mremap, -+} -+ -+func (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { -+ if newLength <= 0 || len(oldData) == 0 || len(oldData) != cap(oldData) || flags&mremapFixed != 0 { -+ return nil, EINVAL -+ } -+ -+ pOld := &oldData[cap(oldData)-1] -+ m.Lock() -+ defer m.Unlock() -+ bOld := m.active[pOld] -+ if bOld == nil || &bOld[0] != &oldData[0] { -+ return nil, EINVAL -+ } -+ newAddr, errno := m.mremap(uintptr(unsafe.Pointer(&bOld[0])), uintptr(len(bOld)), uintptr(newLength), flags, 0) -+ if errno != nil { -+ return nil, errno -+ } -+ bNew := unsafe.Slice((*byte)(unsafe.Pointer(newAddr)), newLength) -+ pNew := &bNew[cap(bNew)-1] -+ if flags&mremapDontunmap == 0 { -+ delete(m.active, pOld) -+ } -+ m.active[pNew] = bNew -+ return bNew, nil -+} -+ -+func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { -+ return mapper.Mremap(oldData, newLength, flags) -+} -diff --git a/vendor/golang.org/x/sys/unix/pagesize_unix.go b/vendor/golang.org/x/sys/unix/pagesize_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/pledge_openbsd.go b/vendor/golang.org/x/sys/unix/pledge_openbsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ptrace_darwin.go b/vendor/golang.org/x/sys/unix/ptrace_darwin.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ptrace_ios.go b/vendor/golang.org/x/sys/unix/ptrace_ios.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/race.go b/vendor/golang.org/x/sys/unix/race.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/race0.go b/vendor/golang.org/x/sys/unix/race0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/readdirent_getdents.go b/vendor/golang.org/x/sys/unix/readdirent_getdents.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go b/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go b/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go -old mode 100644 -new mode 100755 -index 2db1b51..e94e6cd ---- a/vendor/golang.org/x/sys/unix/syscall_aix.go -+++ b/vendor/golang.org/x/sys/unix/syscall_aix.go -@@ -292,9 +292,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - break - } - } -- -- bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] -- sa.Name = string(bytes) -+ sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n)) - return sa, nil - - case AF_INET: -@@ -410,7 +408,8 @@ func (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 } - - func (w WaitStatus) TrapCause() int { return -1 } - --//sys ioctl(fd int, req uint, arg uintptr) (err error) -+//sys ioctl(fd int, req int, arg uintptr) (err error) -+//sys ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = ioctl - - // fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX - // There is no way to create a custom fcntl and to keep //sys fcntl easily, -@@ -488,8 +487,6 @@ func Fsync(fd int) error { - //sys Unlinkat(dirfd int, path string, flags int) (err error) - //sys Ustat(dev int, ubuf *Ustat_t) (err error) - //sys write(fd int, p []byte) (n int, err error) --//sys readlen(fd int, p *byte, np int) (n int, err error) = read --//sys writelen(fd int, p *byte, np int) (n int, err error) = write - - //sys Dup2(oldfd int, newfd int) (err error) - //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64 -@@ -536,21 +533,6 @@ func Fsync(fd int) error { - //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg - - //sys munmap(addr uintptr, length uintptr) (err error) -- --var mapper = &mmapper{ -- active: make(map[*byte][]byte), -- mmap: mmap, -- munmap: munmap, --} -- --func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { -- return mapper.Mmap(fd, offset, length, prot, flags) --} -- --func Munmap(b []byte) (err error) { -- return mapper.Munmap(b) --} -- - //sys Madvise(b []byte, advice int) (err error) - //sys Mprotect(b []byte, prot int) (err error) - //sys Mlock(b []byte) (err error) -diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go -old mode 100644 -new mode 100755 -index e92a0be..f2871fa ---- a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go -+++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go -@@ -8,7 +8,6 @@ - package unix - - //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64 --//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64 - //sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64 - - //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) -diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go -old mode 100644 -new mode 100755 -index 16eed17..75718ec ---- a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go -@@ -8,7 +8,6 @@ - package unix - - //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) --//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) - //sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek - - //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64 -diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go -old mode 100644 -new mode 100755 -index eda4267..4217de5 ---- a/vendor/golang.org/x/sys/unix/syscall_bsd.go -+++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go -@@ -245,8 +245,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - break - } - } -- bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] -- sa.Name = string(bytes) -+ sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n)) - return sa, nil - - case AF_INET: -@@ -602,20 +601,6 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { - // Gethostuuid(uuid *byte, timeout *Timespec) (err error) - // Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) - --var mapper = &mmapper{ -- active: make(map[*byte][]byte), -- mmap: mmap, -- munmap: munmap, --} -- --func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { -- return mapper.Mmap(fd, offset, length, prot, flags) --} -- --func Munmap(b []byte) (err error) { -- return mapper.Munmap(b) --} -- - //sys Madvise(b []byte, behav int) (err error) - //sys Mlock(b []byte) (err error) - //sys Mlockall(flags int) (err error) -diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go -old mode 100644 -new mode 100755 -index 1f63382..59542a8 ---- a/vendor/golang.org/x/sys/unix/syscall_darwin.go -+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go -@@ -14,7 +14,6 @@ package unix - - import ( - "fmt" -- "runtime" - "syscall" - "unsafe" - ) -@@ -230,6 +229,7 @@ func direntNamlen(buf []byte) (uint64, bool) { - - func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } - func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } -+func PtraceDenyAttach() (err error) { return ptrace(PT_DENY_ATTACH, 0, 0, 0) } - - //sysnb pipe(p *[2]int32) (err error) - -@@ -375,11 +375,10 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) { - func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } - - //sys ioctl(fd int, req uint, arg uintptr) (err error) -+//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL - - func IoctlCtlInfo(fd int, ctlInfo *CtlInfo) error { -- err := ioctl(fd, CTLIOCGINFO, uintptr(unsafe.Pointer(ctlInfo))) -- runtime.KeepAlive(ctlInfo) -- return err -+ return ioctlPtr(fd, CTLIOCGINFO, unsafe.Pointer(ctlInfo)) - } - - // IfreqMTU is struct ifreq used to get or set a network device's MTU. -@@ -393,16 +392,14 @@ type IfreqMTU struct { - func IoctlGetIfreqMTU(fd int, ifname string) (*IfreqMTU, error) { - var ifreq IfreqMTU - copy(ifreq.Name[:], ifname) -- err := ioctl(fd, SIOCGIFMTU, uintptr(unsafe.Pointer(&ifreq))) -+ err := ioctlPtr(fd, SIOCGIFMTU, unsafe.Pointer(&ifreq)) - return &ifreq, err - } - - // IoctlSetIfreqMTU performs the SIOCSIFMTU ioctl operation on fd to set the MTU - // of the network device specified by ifreq.Name. - func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error { -- err := ioctl(fd, SIOCSIFMTU, uintptr(unsafe.Pointer(ifreq))) -- runtime.KeepAlive(ifreq) -- return err -+ return ioctlPtr(fd, SIOCSIFMTU, unsafe.Pointer(ifreq)) - } - - //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL -@@ -513,30 +510,36 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { - return nil, err - } - -- // Find size. -- n := uintptr(0) -- if err := sysctl(mib, nil, &n, nil, 0); err != nil { -- return nil, err -- } -- if n == 0 { -- return nil, nil -- } -- if n%SizeofKinfoProc != 0 { -- return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) -- } -+ for { -+ // Find size. -+ n := uintptr(0) -+ if err := sysctl(mib, nil, &n, nil, 0); err != nil { -+ return nil, err -+ } -+ if n == 0 { -+ return nil, nil -+ } -+ if n%SizeofKinfoProc != 0 { -+ return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) -+ } - -- // Read into buffer of that size. -- buf := make([]KinfoProc, n/SizeofKinfoProc) -- if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { -- return nil, err -- } -- if n%SizeofKinfoProc != 0 { -- return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) -- } -+ // Read into buffer of that size. -+ buf := make([]KinfoProc, n/SizeofKinfoProc) -+ if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { -+ if err == ENOMEM { -+ // Process table grew. Try again. -+ continue -+ } -+ return nil, err -+ } -+ if n%SizeofKinfoProc != 0 { -+ return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) -+ } - -- // The actual call may return less than the original reported required -- // size so ensure we deal with that. -- return buf[:n/SizeofKinfoProc], nil -+ // The actual call may return less than the original reported required -+ // size so ensure we deal with that. -+ return buf[:n/SizeofKinfoProc], nil -+ } - } - - //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) -@@ -616,6 +619,7 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { - //sys Rmdir(path string) (err error) - //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK - //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -+//sys Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) - //sys Setegid(egid int) (err error) - //sysnb Seteuid(euid int) (err error) - //sysnb Setgid(gid int) (err error) -@@ -625,7 +629,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { - //sys Setprivexec(flag int) (err error) - //sysnb Setregid(rgid int, egid int) (err error) - //sysnb Setreuid(ruid int, euid int) (err error) --//sysnb Setrlimit(which int, lim *Rlimit) (err error) - //sysnb Setsid() (pid int, err error) - //sysnb Settimeofday(tp *Timeval) (err error) - //sysnb Setuid(uid int) (err error) -@@ -641,190 +644,3 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { - //sys write(fd int, p []byte) (n int, err error) - //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) - //sys munmap(addr uintptr, length uintptr) (err error) --//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ --//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE -- --/* -- * Unimplemented -- */ --// Profil --// Sigaction --// Sigprocmask --// Getlogin --// Sigpending --// Sigaltstack --// Ioctl --// Reboot --// Execve --// Vfork --// Sbrk --// Sstk --// Ovadvise --// Mincore --// Setitimer --// Swapon --// Select --// Sigsuspend --// Readv --// Writev --// Nfssvc --// Getfh --// Quotactl --// Csops --// Waitid --// Add_profil --// Kdebug_trace --// Sigreturn --// Atsocket --// Kqueue_from_portset_np --// Kqueue_portset --// Getattrlist --// Setattrlist --// Getdirentriesattr --// Searchfs --// Delete --// Copyfile --// Watchevent --// Waitevent --// Modwatch --// Fsctl --// Initgroups --// Posix_spawn --// Nfsclnt --// Fhopen --// Minherit --// Semsys --// Msgsys --// Shmsys --// Semctl --// Semget --// Semop --// Msgctl --// Msgget --// Msgsnd --// Msgrcv --// Shm_open --// Shm_unlink --// Sem_open --// Sem_close --// Sem_unlink --// Sem_wait --// Sem_trywait --// Sem_post --// Sem_getvalue --// Sem_init --// Sem_destroy --// Open_extended --// Umask_extended --// Stat_extended --// Lstat_extended --// Fstat_extended --// Chmod_extended --// Fchmod_extended --// Access_extended --// Settid --// Gettid --// Setsgroups --// Getsgroups --// Setwgroups --// Getwgroups --// Mkfifo_extended --// Mkdir_extended --// Identitysvc --// Shared_region_check_np --// Shared_region_map_np --// __pthread_mutex_destroy --// __pthread_mutex_init --// __pthread_mutex_lock --// __pthread_mutex_trylock --// __pthread_mutex_unlock --// __pthread_cond_init --// __pthread_cond_destroy --// __pthread_cond_broadcast --// __pthread_cond_signal --// Setsid_with_pid --// __pthread_cond_timedwait --// Aio_fsync --// Aio_return --// Aio_suspend --// Aio_cancel --// Aio_error --// Aio_read --// Aio_write --// Lio_listio --// __pthread_cond_wait --// Iopolicysys --// __pthread_kill --// __pthread_sigmask --// __sigwait --// __disable_threadsignal --// __pthread_markcancel --// __pthread_canceled --// __semwait_signal --// Proc_info --// sendfile --// Stat64_extended --// Lstat64_extended --// Fstat64_extended --// __pthread_chdir --// __pthread_fchdir --// Audit --// Auditon --// Getauid --// Setauid --// Getaudit --// Setaudit --// Getaudit_addr --// Setaudit_addr --// Auditctl --// Bsdthread_create --// Bsdthread_terminate --// Stack_snapshot --// Bsdthread_register --// Workq_open --// Workq_ops --// __mac_execve --// __mac_syscall --// __mac_get_file --// __mac_set_file --// __mac_get_link --// __mac_set_link --// __mac_get_proc --// __mac_set_proc --// __mac_get_fd --// __mac_set_fd --// __mac_get_pid --// __mac_get_lcid --// __mac_get_lctx --// __mac_set_lctx --// Setlcid --// Read_nocancel --// Write_nocancel --// Open_nocancel --// Close_nocancel --// Wait4_nocancel --// Recvmsg_nocancel --// Sendmsg_nocancel --// Recvfrom_nocancel --// Accept_nocancel --// Fcntl_nocancel --// Select_nocancel --// Fsync_nocancel --// Connect_nocancel --// Sigsuspend_nocancel --// Readv_nocancel --// Writev_nocancel --// Sendto_nocancel --// Pread_nocancel --// Pwrite_nocancel --// Waitid_nocancel --// Poll_nocancel --// Msgsnd_nocancel --// Msgrcv_nocancel --// Sem_wait_nocancel --// Aio_suspend_nocancel --// __sigwait_nocancel --// __semwait_signal_nocancel --// __mac_mount --// __mac_get_mount --// __mac_getfsstat -diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go -old mode 100644 -new mode 100755 -index 61c0d0d..97cb916 ---- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go -+++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go -@@ -172,6 +172,7 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { - } - - //sys ioctl(fd int, req uint, arg uintptr) (err error) -+//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL - - //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - -@@ -255,6 +256,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - //sys Chmod(path string, mode uint32) (err error) - //sys Chown(path string, uid int, gid int) (err error) - //sys Chroot(path string) (err error) -+//sys ClockGettime(clockid int32, time *Timespec) (err error) - //sys Close(fd int) (err error) - //sys Dup(fd int) (nfd int, err error) - //sys Dup2(from int, to int) (err error) -@@ -324,7 +326,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - //sysnb Setreuid(ruid int, euid int) (err error) - //sysnb Setresgid(rgid int, egid int, sgid int) (err error) - //sysnb Setresuid(ruid int, euid int, suid int) (err error) --//sysnb Setrlimit(which int, lim *Rlimit) (err error) - //sysnb Setsid() (pid int, err error) - //sysnb Settimeofday(tp *Timeval) (err error) - //sysnb Setuid(uid int) (err error) -@@ -342,203 +343,5 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - //sys write(fd int, p []byte) (n int, err error) - //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) - //sys munmap(addr uintptr, length uintptr) (err error) --//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ --//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE - //sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) - //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) -- --/* -- * Unimplemented -- * TODO(jsing): Update this list for DragonFly. -- */ --// Profil --// Sigaction --// Sigprocmask --// Getlogin --// Sigpending --// Sigaltstack --// Reboot --// Execve --// Vfork --// Sbrk --// Sstk --// Ovadvise --// Mincore --// Setitimer --// Swapon --// Select --// Sigsuspend --// Readv --// Writev --// Nfssvc --// Getfh --// Quotactl --// Mount --// Csops --// Waitid --// Add_profil --// Kdebug_trace --// Sigreturn --// Atsocket --// Kqueue_from_portset_np --// Kqueue_portset --// Getattrlist --// Setattrlist --// Getdirentriesattr --// Searchfs --// Delete --// Copyfile --// Watchevent --// Waitevent --// Modwatch --// Getxattr --// Fgetxattr --// Setxattr --// Fsetxattr --// Removexattr --// Fremovexattr --// Listxattr --// Flistxattr --// Fsctl --// Initgroups --// Posix_spawn --// Nfsclnt --// Fhopen --// Minherit --// Semsys --// Msgsys --// Shmsys --// Semctl --// Semget --// Semop --// Msgctl --// Msgget --// Msgsnd --// Msgrcv --// Shmat --// Shmctl --// Shmdt --// Shmget --// Shm_open --// Shm_unlink --// Sem_open --// Sem_close --// Sem_unlink --// Sem_wait --// Sem_trywait --// Sem_post --// Sem_getvalue --// Sem_init --// Sem_destroy --// Open_extended --// Umask_extended --// Stat_extended --// Lstat_extended --// Fstat_extended --// Chmod_extended --// Fchmod_extended --// Access_extended --// Settid --// Gettid --// Setsgroups --// Getsgroups --// Setwgroups --// Getwgroups --// Mkfifo_extended --// Mkdir_extended --// Identitysvc --// Shared_region_check_np --// Shared_region_map_np --// __pthread_mutex_destroy --// __pthread_mutex_init --// __pthread_mutex_lock --// __pthread_mutex_trylock --// __pthread_mutex_unlock --// __pthread_cond_init --// __pthread_cond_destroy --// __pthread_cond_broadcast --// __pthread_cond_signal --// Setsid_with_pid --// __pthread_cond_timedwait --// Aio_fsync --// Aio_return --// Aio_suspend --// Aio_cancel --// Aio_error --// Aio_read --// Aio_write --// Lio_listio --// __pthread_cond_wait --// Iopolicysys --// __pthread_kill --// __pthread_sigmask --// __sigwait --// __disable_threadsignal --// __pthread_markcancel --// __pthread_canceled --// __semwait_signal --// Proc_info --// Stat64_extended --// Lstat64_extended --// Fstat64_extended --// __pthread_chdir --// __pthread_fchdir --// Audit --// Auditon --// Getauid --// Setauid --// Getaudit --// Setaudit --// Getaudit_addr --// Setaudit_addr --// Auditctl --// Bsdthread_create --// Bsdthread_terminate --// Stack_snapshot --// Bsdthread_register --// Workq_open --// Workq_ops --// __mac_execve --// __mac_syscall --// __mac_get_file --// __mac_set_file --// __mac_get_link --// __mac_set_link --// __mac_get_proc --// __mac_set_proc --// __mac_get_fd --// __mac_set_fd --// __mac_get_pid --// __mac_get_lcid --// __mac_get_lctx --// __mac_set_lctx --// Setlcid --// Read_nocancel --// Write_nocancel --// Open_nocancel --// Close_nocancel --// Wait4_nocancel --// Recvmsg_nocancel --// Sendmsg_nocancel --// Recvfrom_nocancel --// Accept_nocancel --// Fcntl_nocancel --// Select_nocancel --// Fsync_nocancel --// Connect_nocancel --// Sigsuspend_nocancel --// Readv_nocancel --// Writev_nocancel --// Sendto_nocancel --// Pread_nocancel --// Pwrite_nocancel --// Waitid_nocancel --// Msgsnd_nocancel --// Msgrcv_nocancel --// Sem_wait_nocancel --// Aio_suspend_nocancel --// __sigwait_nocancel --// __semwait_signal_nocancel --// __mac_mount --// __mac_get_mount --// __mac_getfsstat -diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go -old mode 100644 -new mode 100755 -index de7c23e..64d1bb4 ---- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go -+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go -@@ -161,7 +161,8 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { - return - } - --//sys ioctl(fd int, req uint, arg uintptr) (err error) -+//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL -+//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL - - //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - -@@ -253,6 +254,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - } - - //sys ptrace(request int, pid int, addr uintptr, data int) (err error) -+//sys ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) = SYS_PTRACE - - func PtraceAttach(pid int) (err error) { - return ptrace(PT_ATTACH, pid, 0, 0) -@@ -267,19 +269,36 @@ func PtraceDetach(pid int) (err error) { - } - - func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) { -- return ptrace(PT_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0) -+ return ptracePtr(PT_GETFPREGS, pid, unsafe.Pointer(fpregsout), 0) - } - - func PtraceGetRegs(pid int, regsout *Reg) (err error) { -- return ptrace(PT_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0) -+ return ptracePtr(PT_GETREGS, pid, unsafe.Pointer(regsout), 0) -+} -+ -+func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) { -+ ioDesc := PtraceIoDesc{ -+ Op: int32(req), -+ Offs: offs, -+ } -+ if countin > 0 { -+ _ = out[:countin] // check bounds -+ ioDesc.Addr = &out[0] -+ } else if out != nil { -+ ioDesc.Addr = (*byte)(unsafe.Pointer(&_zero)) -+ } -+ ioDesc.SetLen(countin) -+ -+ err = ptracePtr(PT_IO, pid, unsafe.Pointer(&ioDesc), 0) -+ return int(ioDesc.Len), err - } - - func PtraceLwpEvents(pid int, enable int) (err error) { - return ptrace(PT_LWP_EVENTS, pid, 0, enable) - } - --func PtraceLwpInfo(pid int, info uintptr) (err error) { -- return ptrace(PT_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{}))) -+func PtraceLwpInfo(pid int, info *PtraceLwpInfoStruct) (err error) { -+ return ptracePtr(PT_LWPINFO, pid, unsafe.Pointer(info), int(unsafe.Sizeof(*info))) - } - - func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { -@@ -299,13 +318,25 @@ func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { - } - - func PtraceSetRegs(pid int, regs *Reg) (err error) { -- return ptrace(PT_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0) -+ return ptracePtr(PT_SETREGS, pid, unsafe.Pointer(regs), 0) - } - - func PtraceSingleStep(pid int) (err error) { - return ptrace(PT_STEP, pid, 1, 0) - } - -+func Dup3(oldfd, newfd, flags int) error { -+ if oldfd == newfd || flags&^O_CLOEXEC != 0 { -+ return EINVAL -+ } -+ how := F_DUP2FD -+ if flags&O_CLOEXEC != 0 { -+ how = F_DUP2FD_CLOEXEC -+ } -+ _, err := fcntl(oldfd, how, newfd) -+ return err -+} -+ - /* - * Exposed directly - */ -@@ -319,6 +350,7 @@ func PtraceSingleStep(pid int) (err error) { - //sys Chmod(path string, mode uint32) (err error) - //sys Chown(path string, uid int, gid int) (err error) - //sys Chroot(path string) (err error) -+//sys ClockGettime(clockid int32, time *Timespec) (err error) - //sys Close(fd int) (err error) - //sys Dup(fd int) (nfd int, err error) - //sys Dup2(from int, to int) (err error) -@@ -401,7 +433,6 @@ func PtraceSingleStep(pid int) (err error) { - //sysnb Setreuid(ruid int, euid int) (err error) - //sysnb Setresgid(rgid int, egid int, sgid int) (err error) - //sysnb Setresuid(ruid int, euid int, suid int) (err error) --//sysnb Setrlimit(which int, lim *Rlimit) (err error) - //sysnb Setsid() (pid int, err error) - //sysnb Settimeofday(tp *Timeval) (err error) - //sysnb Setuid(uid int) (err error) -@@ -418,197 +449,5 @@ func PtraceSingleStep(pid int) (err error) { - //sys write(fd int, p []byte) (n int, err error) - //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) - //sys munmap(addr uintptr, length uintptr) (err error) --//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ --//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE - //sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) - //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) -- --/* -- * Unimplemented -- */ --// Profil --// Sigaction --// Sigprocmask --// Getlogin --// Sigpending --// Sigaltstack --// Ioctl --// Reboot --// Execve --// Vfork --// Sbrk --// Sstk --// Ovadvise --// Mincore --// Setitimer --// Swapon --// Select --// Sigsuspend --// Readv --// Writev --// Nfssvc --// Getfh --// Quotactl --// Mount --// Csops --// Waitid --// Add_profil --// Kdebug_trace --// Sigreturn --// Atsocket --// Kqueue_from_portset_np --// Kqueue_portset --// Getattrlist --// Setattrlist --// Getdents --// Getdirentriesattr --// Searchfs --// Delete --// Copyfile --// Watchevent --// Waitevent --// Modwatch --// Fsctl --// Initgroups --// Posix_spawn --// Nfsclnt --// Fhopen --// Minherit --// Semsys --// Msgsys --// Shmsys --// Semctl --// Semget --// Semop --// Msgctl --// Msgget --// Msgsnd --// Msgrcv --// Shmat --// Shmctl --// Shmdt --// Shmget --// Shm_open --// Shm_unlink --// Sem_open --// Sem_close --// Sem_unlink --// Sem_wait --// Sem_trywait --// Sem_post --// Sem_getvalue --// Sem_init --// Sem_destroy --// Open_extended --// Umask_extended --// Stat_extended --// Lstat_extended --// Fstat_extended --// Chmod_extended --// Fchmod_extended --// Access_extended --// Settid --// Gettid --// Setsgroups --// Getsgroups --// Setwgroups --// Getwgroups --// Mkfifo_extended --// Mkdir_extended --// Identitysvc --// Shared_region_check_np --// Shared_region_map_np --// __pthread_mutex_destroy --// __pthread_mutex_init --// __pthread_mutex_lock --// __pthread_mutex_trylock --// __pthread_mutex_unlock --// __pthread_cond_init --// __pthread_cond_destroy --// __pthread_cond_broadcast --// __pthread_cond_signal --// Setsid_with_pid --// __pthread_cond_timedwait --// Aio_fsync --// Aio_return --// Aio_suspend --// Aio_cancel --// Aio_error --// Aio_read --// Aio_write --// Lio_listio --// __pthread_cond_wait --// Iopolicysys --// __pthread_kill --// __pthread_sigmask --// __sigwait --// __disable_threadsignal --// __pthread_markcancel --// __pthread_canceled --// __semwait_signal --// Proc_info --// Stat64_extended --// Lstat64_extended --// Fstat64_extended --// __pthread_chdir --// __pthread_fchdir --// Audit --// Auditon --// Getauid --// Setauid --// Getaudit --// Setaudit --// Getaudit_addr --// Setaudit_addr --// Auditctl --// Bsdthread_create --// Bsdthread_terminate --// Stack_snapshot --// Bsdthread_register --// Workq_open --// Workq_ops --// __mac_execve --// __mac_syscall --// __mac_get_file --// __mac_set_file --// __mac_get_link --// __mac_set_link --// __mac_get_proc --// __mac_set_proc --// __mac_get_fd --// __mac_set_fd --// __mac_get_pid --// __mac_get_lcid --// __mac_get_lctx --// __mac_set_lctx --// Setlcid --// Read_nocancel --// Write_nocancel --// Open_nocancel --// Close_nocancel --// Wait4_nocancel --// Recvmsg_nocancel --// Sendmsg_nocancel --// Recvfrom_nocancel --// Accept_nocancel --// Fcntl_nocancel --// Select_nocancel --// Fsync_nocancel --// Connect_nocancel --// Sigsuspend_nocancel --// Readv_nocancel --// Writev_nocancel --// Sendto_nocancel --// Pread_nocancel --// Pwrite_nocancel --// Waitid_nocancel --// Poll_nocancel --// Msgsnd_nocancel --// Msgrcv_nocancel --// Sem_wait_nocancel --// Aio_suspend_nocancel --// __sigwait_nocancel --// __semwait_signal_nocancel --// __mac_mount --// __mac_get_mount --// __mac_getfsstat -diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go -old mode 100644 -new mode 100755 -index b11ede8..b8da510 ---- a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go -+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go -@@ -42,6 +42,10 @@ func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) - } - -+func (d *PtraceIoDesc) SetLen(length int) { -+ d.Len = uint32(length) -+} -+ - func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) -@@ -57,11 +61,5 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - - func PtraceGetFsBase(pid int, fsbase *int64) (err error) { -- return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) --} -- --func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { -- ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint32(countin)} -- err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) -- return int(ioDesc.Len), err -+ return ptracePtr(PT_GETFSBASE, pid, unsafe.Pointer(fsbase), 0) - } -diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go -old mode 100644 -new mode 100755 -index 9ed8eec..47155c4 ---- a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go -@@ -42,6 +42,10 @@ func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) - } - -+func (d *PtraceIoDesc) SetLen(length int) { -+ d.Len = uint64(length) -+} -+ - func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) -@@ -57,11 +61,5 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - - func PtraceGetFsBase(pid int, fsbase *int64) (err error) { -- return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) --} -- --func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { -- ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} -- err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) -- return int(ioDesc.Len), err -+ return ptracePtr(PT_GETFSBASE, pid, unsafe.Pointer(fsbase), 0) - } -diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go -old mode 100644 -new mode 100755 -index f8ac982..0893209 ---- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go -@@ -42,6 +42,10 @@ func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) - } - -+func (d *PtraceIoDesc) SetLen(length int) { -+ d.Len = uint32(length) -+} -+ - func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) -@@ -55,9 +59,3 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - } - - func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) -- --func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { -- ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint32(countin)} -- err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) -- return int(ioDesc.Len), err --} -diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go -old mode 100644 -new mode 100755 -index 8e93203..d151a0d ---- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go -@@ -42,6 +42,10 @@ func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) - } - -+func (d *PtraceIoDesc) SetLen(length int) { -+ d.Len = uint64(length) -+} -+ - func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) -@@ -55,9 +59,3 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - } - - func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) -- --func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { -- ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} -- err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) -- return int(ioDesc.Len), err --} -diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go -old mode 100644 -new mode 100755 -index cbe1222..d5cd64b ---- a/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go -@@ -42,6 +42,10 @@ func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) - } - -+func (d *PtraceIoDesc) SetLen(length int) { -+ d.Len = uint64(length) -+} -+ - func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) -@@ -55,9 +59,3 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - } - - func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) -- --func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { -- ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} -- err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) -- return int(ioDesc.Len), err --} -diff --git a/vendor/golang.org/x/sys/unix/syscall_hurd.go b/vendor/golang.org/x/sys/unix/syscall_hurd.go -new file mode 100755 -index 0000000..381fd46 ---- /dev/null -+++ b/vendor/golang.org/x/sys/unix/syscall_hurd.go -@@ -0,0 +1,30 @@ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build hurd -+// +build hurd -+ -+package unix -+ -+/* -+#include -+int ioctl(int, unsigned long int, uintptr_t); -+*/ -+import "C" -+ -+func ioctl(fd int, req uint, arg uintptr) (err error) { -+ r0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(arg)) -+ if r0 == -1 && er != nil { -+ err = er -+ } -+ return -+} -+ -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ r0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(uintptr(arg))) -+ if r0 == -1 && er != nil { -+ err = er -+ } -+ return -+} -diff --git a/vendor/golang.org/x/sys/unix/syscall_hurd_386.go b/vendor/golang.org/x/sys/unix/syscall_hurd_386.go -new file mode 100755 -index 0000000..7cf54a3 ---- /dev/null -+++ b/vendor/golang.org/x/sys/unix/syscall_hurd_386.go -@@ -0,0 +1,29 @@ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+//go:build 386 && hurd -+// +build 386,hurd -+ -+package unix -+ -+const ( -+ TIOCGETA = 0x62251713 -+) -+ -+type Winsize struct { -+ Row uint16 -+ Col uint16 -+ Xpixel uint16 -+ Ypixel uint16 -+} -+ -+type Termios struct { -+ Iflag uint32 -+ Oflag uint32 -+ Cflag uint32 -+ Lflag uint32 -+ Cc [20]uint8 -+ Ispeed int32 -+ Ospeed int32 -+} -diff --git a/vendor/golang.org/x/sys/unix/syscall_illumos.go b/vendor/golang.org/x/sys/unix/syscall_illumos.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go -old mode 100644 -new mode 100755 -index c5a9844..fb4e502 ---- a/vendor/golang.org/x/sys/unix/syscall_linux.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go -@@ -693,10 +693,10 @@ type SockaddrALG struct { - - func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { - // Leave room for NUL byte terminator. -- if len(sa.Type) > 13 { -+ if len(sa.Type) > len(sa.raw.Type)-1 { - return nil, 0, EINVAL - } -- if len(sa.Name) > 63 { -+ if len(sa.Name) > len(sa.raw.Name)-1 { - return nil, 0, EINVAL - } - -@@ -704,17 +704,8 @@ func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Feat = sa.Feature - sa.raw.Mask = sa.Mask - -- typ, err := ByteSliceFromString(sa.Type) -- if err != nil { -- return nil, 0, err -- } -- name, err := ByteSliceFromString(sa.Name) -- if err != nil { -- return nil, 0, err -- } -- -- copy(sa.raw.Type[:], typ) -- copy(sa.raw.Name[:], name) -+ copy(sa.raw.Type[:], sa.Type) -+ copy(sa.raw.Name[:], sa.Name) - - return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil - } -@@ -1015,8 +1006,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - for n < len(pp.Path) && pp.Path[n] != 0 { - n++ - } -- bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] -- sa.Name = string(bytes) -+ sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n)) - return sa, nil - - case AF_INET: -@@ -1365,6 +1355,10 @@ func SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o))) - } - -+func SetsockoptTCPMD5Sig(fd, level, opt int, s *TCPMD5Sig) error { -+ return setsockopt(fd, level, opt, unsafe.Pointer(s), unsafe.Sizeof(*s)) -+} -+ - // Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) - - // KeyctlInt calls keyctl commands in which each argument is an int. -@@ -1579,6 +1573,7 @@ func BindToDevice(fd int, device string) (err error) { - } - - //sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) -+//sys ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) = SYS_PTRACE - - func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { - // The peek requests are machine-size oriented, so we wrap it -@@ -1596,7 +1591,7 @@ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err erro - // boundary. - n := 0 - if addr%SizeofPtr != 0 { -- err = ptrace(req, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) -+ err = ptracePtr(req, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0])) - if err != nil { - return 0, err - } -@@ -1608,7 +1603,7 @@ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err erro - for len(out) > 0 { - // We use an internal buffer to guarantee alignment. - // It's not documented if this is necessary, but we're paranoid. -- err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) -+ err = ptracePtr(req, pid, addr+uintptr(n), unsafe.Pointer(&buf[0])) - if err != nil { - return n, err - } -@@ -1640,7 +1635,7 @@ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (c - n := 0 - if addr%SizeofPtr != 0 { - var buf [SizeofPtr]byte -- err = ptrace(peekReq, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) -+ err = ptracePtr(peekReq, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0])) - if err != nil { - return 0, err - } -@@ -1667,7 +1662,7 @@ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (c - // Trailing edge. - if len(data) > 0 { - var buf [SizeofPtr]byte -- err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) -+ err = ptracePtr(peekReq, pid, addr+uintptr(n), unsafe.Pointer(&buf[0])) - if err != nil { - return n, err - } -@@ -1695,12 +1690,23 @@ func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { - return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data) - } - -+// elfNT_PRSTATUS is a copy of the debug/elf.NT_PRSTATUS constant so -+// x/sys/unix doesn't need to depend on debug/elf and thus -+// compress/zlib, debug/dwarf, and other packages. -+const elfNT_PRSTATUS = 1 -+ - func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ var iov Iovec -+ iov.Base = (*byte)(unsafe.Pointer(regsout)) -+ iov.SetLen(int(unsafe.Sizeof(*regsout))) -+ return ptracePtr(PTRACE_GETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov)) - } - - func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ var iov Iovec -+ iov.Base = (*byte)(unsafe.Pointer(regs)) -+ iov.SetLen(int(unsafe.Sizeof(*regs))) -+ return ptracePtr(PTRACE_SETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov)) - } - - func PtraceSetOptions(pid int, options int) (err error) { -@@ -1709,7 +1715,7 @@ func PtraceSetOptions(pid int, options int) (err error) { - - func PtraceGetEventMsg(pid int) (msg uint, err error) { - var data _C_long -- err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data))) -+ err = ptracePtr(PTRACE_GETEVENTMSG, pid, 0, unsafe.Pointer(&data)) - msg = uint(data) - return - } -@@ -1800,6 +1806,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - //sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error) - //sys Chdir(path string) (err error) - //sys Chroot(path string) (err error) -+//sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error) - //sys ClockGetres(clockid int32, res *Timespec) (err error) - //sys ClockGettime(clockid int32, time *Timespec) (err error) - //sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) -@@ -1868,9 +1875,8 @@ func Getpgrp() (pid int) { - //sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) - //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) - //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT --//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 - //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) --//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 -+//sys pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) - //sys read(fd int, p []byte) (n int, err error) - //sys Removexattr(path string, attr string) (err error) - //sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) -@@ -1882,6 +1888,15 @@ func Getpgrp() (pid int) { - //sysnb Settimeofday(tv *Timeval) (err error) - //sys Setns(fd int, nstype int) (err error) - -+//go:linkname syscall_prlimit syscall.prlimit -+func syscall_prlimit(pid, resource int, newlimit, old *syscall.Rlimit) error -+ -+func Prlimit(pid, resource int, newlimit, old *Rlimit) error { -+ // Just call the syscall version, because as of Go 1.21 -+ // it will affect starting a new process. -+ return syscall_prlimit(pid, resource, (*syscall.Rlimit)(newlimit), (*syscall.Rlimit)(old)) -+} -+ - // PrctlRetInt performs a prctl operation specified by option and further - // optional arguments arg2 through arg5 depending on option. It returns a - // non-negative integer that is returned by the prctl syscall. -@@ -1964,8 +1979,6 @@ func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) { - //sys Unshare(flags int) (err error) - //sys write(fd int, p []byte) (n int, err error) - //sys exitThread(code int) (err error) = SYS_EXIT --//sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ --//sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE - //sys readv(fd int, iovs []Iovec) (n int, err error) = SYS_READV - //sys writev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV - //sys preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV -@@ -1973,36 +1986,46 @@ func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) { - //sys preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2 - //sys pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2 - --func bytes2iovec(bs [][]byte) []Iovec { -- iovecs := make([]Iovec, len(bs)) -- for i, b := range bs { -- iovecs[i].SetLen(len(b)) -+// minIovec is the size of the small initial allocation used by -+// Readv, Writev, etc. -+// -+// This small allocation gets stack allocated, which lets the -+// common use case of len(iovs) <= minIovs avoid more expensive -+// heap allocations. -+const minIovec = 8 -+ -+// appendBytes converts bs to Iovecs and appends them to vecs. -+func appendBytes(vecs []Iovec, bs [][]byte) []Iovec { -+ for _, b := range bs { -+ var v Iovec -+ v.SetLen(len(b)) - if len(b) > 0 { -- iovecs[i].Base = &b[0] -+ v.Base = &b[0] - } else { -- iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero)) -+ v.Base = (*byte)(unsafe.Pointer(&_zero)) - } -+ vecs = append(vecs, v) - } -- return iovecs -+ return vecs - } - --// offs2lohi splits offs into its lower and upper unsigned long. On 64-bit --// systems, hi will always be 0. On 32-bit systems, offs will be split in half. --// preadv/pwritev chose this calling convention so they don't need to add a --// padding-register for alignment on ARM. -+// offs2lohi splits offs into its low and high order bits. - func offs2lohi(offs int64) (lo, hi uintptr) { -- return uintptr(offs), uintptr(uint64(offs) >> SizeofLong) -+ const longBits = SizeofLong * 8 -+ return uintptr(offs), uintptr(uint64(offs) >> (longBits - 1) >> 1) // two shifts to avoid false positive in vet - } - - func Readv(fd int, iovs [][]byte) (n int, err error) { -- iovecs := bytes2iovec(iovs) -+ iovecs := make([]Iovec, 0, minIovec) -+ iovecs = appendBytes(iovecs, iovs) - n, err = readv(fd, iovecs) - readvRacedetect(iovecs, n, err) - return n, err - } - - func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { -- iovecs := bytes2iovec(iovs) -+ iovecs := make([]Iovec, 0, minIovec) -+ iovecs = appendBytes(iovecs, iovs) - lo, hi := offs2lohi(offset) - n, err = preadv(fd, iovecs, lo, hi) - readvRacedetect(iovecs, n, err) -@@ -2010,7 +2033,8 @@ func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { - } - - func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { -- iovecs := bytes2iovec(iovs) -+ iovecs := make([]Iovec, 0, minIovec) -+ iovecs = appendBytes(iovecs, iovs) - lo, hi := offs2lohi(offset) - n, err = preadv2(fd, iovecs, lo, hi, flags) - readvRacedetect(iovecs, n, err) -@@ -2037,7 +2061,8 @@ func readvRacedetect(iovecs []Iovec, n int, err error) { - } - - func Writev(fd int, iovs [][]byte) (n int, err error) { -- iovecs := bytes2iovec(iovs) -+ iovecs := make([]Iovec, 0, minIovec) -+ iovecs = appendBytes(iovecs, iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } -@@ -2047,7 +2072,8 @@ func Writev(fd int, iovs [][]byte) (n int, err error) { - } - - func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { -- iovecs := bytes2iovec(iovs) -+ iovecs := make([]Iovec, 0, minIovec) -+ iovecs = appendBytes(iovecs, iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } -@@ -2058,7 +2084,8 @@ func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { - } - - func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { -- iovecs := bytes2iovec(iovs) -+ iovecs := make([]Iovec, 0, minIovec) -+ iovecs = appendBytes(iovecs, iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } -@@ -2086,21 +2113,7 @@ func writevRacedetect(iovecs []Iovec, n int) { - - // mmap varies by architecture; see syscall_linux_*.go. - //sys munmap(addr uintptr, length uintptr) (err error) -- --var mapper = &mmapper{ -- active: make(map[*byte][]byte), -- mmap: mmap, -- munmap: munmap, --} -- --func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { -- return mapper.Mmap(fd, offset, length, prot, flags) --} -- --func Munmap(b []byte) (err error) { -- return mapper.Munmap(b) --} -- -+//sys mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) - //sys Madvise(b []byte, advice int) (err error) - //sys Mprotect(b []byte, prot int) (err error) - //sys Mlock(b []byte) (err error) -@@ -2109,6 +2122,12 @@ func Munmap(b []byte) (err error) { - //sys Munlock(b []byte) (err error) - //sys Munlockall() (err error) - -+const ( -+ mremapFixed = MREMAP_FIXED -+ mremapDontunmap = MREMAP_DONTUNMAP -+ mremapMaymove = MREMAP_MAYMOVE -+) -+ - // Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, - // using the specified flags. - func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { -@@ -2139,6 +2158,14 @@ func isGroupMember(gid int) bool { - return false - } - -+func isCapDacOverrideSet() bool { -+ hdr := CapUserHeader{Version: LINUX_CAPABILITY_VERSION_3} -+ data := [2]CapUserData{} -+ err := Capget(&hdr, &data[0]) -+ -+ return err == nil && data[0].Effective&(1<> 63) // see math.intSize -+ -+ // A sigset stores one bit per signal, -+ // offset by 1 (because signal 0 does not exist). -+ // So the number of words needed is ⌈__C_NSIG - 1 / wordBits⌉. -+ sigsetWords := (_C__NSIG - 1 + wordBits - 1) / (wordBits) -+ -+ sigsetBytes := uintptr(sigsetWords * (wordBits / 8)) -+ kernelMask = &sigset_argpack{ -+ ss: sigmask, -+ ssLen: sigsetBytes, -+ } -+ } -+ -+ return pselect6(nfd, r, w, e, mutableTimeout, kernelMask) -+} -+ -+//sys schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) -+//sys schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) -+ -+// SchedSetAttr is a wrapper for sched_setattr(2) syscall. -+// https://man7.org/linux/man-pages/man2/sched_setattr.2.html -+func SchedSetAttr(pid int, attr *SchedAttr, flags uint) error { -+ if attr == nil { -+ return EINVAL -+ } -+ attr.Size = SizeofSchedAttr -+ return schedSetattr(pid, attr, flags) -+} -+ -+// SchedGetAttr is a wrapper for sched_getattr(2) syscall. -+// https://man7.org/linux/man-pages/man2/sched_getattr.2.html -+func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) { -+ attr := &SchedAttr{} -+ if err := schedGetattr(pid, attr, SizeofSchedAttr, flags); err != nil { -+ return nil, err -+ } -+ return attr, nil -+} -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go -old mode 100644 -new mode 100755 -index ff5b589..c7d9945 ---- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go -@@ -97,33 +97,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { - return - } - --//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT -- --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- err = Prlimit(0, resource, rlim, nil) -- if err != ENOSYS { -- return err -- } -- -- rl := rlimit32{} -- if rlim.Cur == rlimInf64 { -- rl.Cur = rlimInf32 -- } else if rlim.Cur < uint64(rlimInf32) { -- rl.Cur = uint32(rlim.Cur) -- } else { -- return EINVAL -- } -- if rlim.Max == rlimInf64 { -- rl.Max = rlimInf32 -- } else if rlim.Max < uint64(rlimInf32) { -- rl.Max = uint32(rlim.Max) -- } else { -- return EINVAL -- } -- -- return setrlimit(resource, &rl) --} -- - func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - newoffset, errno := seek(fd, offset, whence) - if errno != 0 { -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go b/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go -old mode 100644 -new mode 100755 -index 9b27035..70601ce ---- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go -@@ -40,13 +40,12 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } -- return Pselect(nfd, r, w, e, ts, nil) -+ return pselect6(nfd, r, w, e, ts, nil) - } - - //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) - //sys setfsgid(gid int) (prev int, err error) - //sys setfsuid(uid int) (prev int, err error) --//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) - //sys Shutdown(fd int, how int) (err error) - //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go -old mode 100644 -new mode 100755 -index 856ad1d..da29864 ---- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go -@@ -171,33 +171,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { - return - } - --//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT -- --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- err = Prlimit(0, resource, rlim, nil) -- if err != ENOSYS { -- return err -- } -- -- rl := rlimit32{} -- if rlim.Cur == rlimInf64 { -- rl.Cur = rlimInf32 -- } else if rlim.Cur < uint64(rlimInf32) { -- rl.Cur = uint32(rlim.Cur) -- } else { -- return EINVAL -- } -- if rlim.Max == rlimInf64 { -- rl.Max = rlimInf32 -- } else if rlim.Max < uint64(rlimInf32) { -- rl.Max = uint32(rlim.Max) -- } else { -- return EINVAL -- } -- -- return setrlimit(resource, &rl) --} -- - func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } - - func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go -old mode 100644 -new mode 100755 -index 6422704..f526668 ---- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go -@@ -33,13 +33,12 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } -- return Pselect(nfd, r, w, e, ts, nil) -+ return pselect6(nfd, r, w, e, ts, nil) - } - - //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) - //sys setfsgid(gid int) (prev int, err error) - //sys setfsuid(uid int) (prev int, err error) --//sysnb setrlimit(resource int, rlim *Rlimit) (err error) - //sys Shutdown(fd int, how int) (err error) - //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - -@@ -143,15 +142,6 @@ func Getrlimit(resource int, rlim *Rlimit) error { - return getrlimit(resource, rlim) - } - --// Setrlimit prefers the prlimit64 system call. See issue 38604. --func Setrlimit(resource int, rlim *Rlimit) error { -- err := Prlimit(0, resource, rlim, nil) -- if err != ENOSYS { -- return err -- } -- return setrlimit(resource, rlim) --} -- - func (r *PtraceRegs) PC() uint64 { return r.Pc } - - func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go -old mode 100644 -new mode 100755 -index 59dab51..f6ab02e ---- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go -@@ -28,7 +28,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } -- return Pselect(nfd, r, w, e, ts, nil) -+ return pselect6(nfd, r, w, e, ts, nil) - } - - //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -@@ -126,11 +126,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { - return - } - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- err = Prlimit(0, resource, rlim, nil) -- return --} -- - func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { - if tv == nil { - return utimensat(dirfd, path, nil, 0) -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go -old mode 100644 -new mode 100755 -index bfef09a..93fe59d ---- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go -@@ -31,13 +31,12 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } -- return Pselect(nfd, r, w, e, ts, nil) -+ return pselect6(nfd, r, w, e, ts, nil) - } - - //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) - //sys setfsgid(gid int) (prev int, err error) - //sys setfsuid(uid int) (prev int, err error) --//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) - //sys Shutdown(fd int, how int) (err error) - //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - //sys Statfs(path string, buf *Statfs_t) (err error) -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go -old mode 100644 -new mode 100755 -index ab30250..aae7f0f ---- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go -@@ -151,33 +151,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { - return - } - --//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT -- --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- err = Prlimit(0, resource, rlim, nil) -- if err != ENOSYS { -- return err -- } -- -- rl := rlimit32{} -- if rlim.Cur == rlimInf64 { -- rl.Cur = rlimInf32 -- } else if rlim.Cur < uint64(rlimInf32) { -- rl.Cur = uint32(rlim.Cur) -- } else { -- return EINVAL -- } -- if rlim.Max == rlimInf64 { -- rl.Max = rlimInf32 -- } else if rlim.Max < uint64(rlimInf32) { -- rl.Max = uint32(rlim.Max) -- } else { -- return EINVAL -- } -- -- return setrlimit(resource, &rl) --} -- - func (r *PtraceRegs) PC() uint64 { return r.Epc } - - func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go -old mode 100644 -new mode 100755 -index eac1cf1..66eff19 ---- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go -@@ -159,33 +159,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { - return - } - --//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT -- --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- err = Prlimit(0, resource, rlim, nil) -- if err != ENOSYS { -- return err -- } -- -- rl := rlimit32{} -- if rlim.Cur == rlimInf64 { -- rl.Cur = rlimInf32 -- } else if rlim.Cur < uint64(rlimInf32) { -- rl.Cur = uint32(rlim.Cur) -- } else { -- return EINVAL -- } -- if rlim.Max == rlimInf64 { -- rl.Max = rlimInf32 -- } else if rlim.Max < uint64(rlimInf32) { -- rl.Max = uint32(rlim.Max) -- } else { -- return EINVAL -- } -- -- return setrlimit(resource, &rl) --} -- - func (r *PtraceRegs) PC() uint32 { return r.Nip } - - func (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc } -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go -old mode 100644 -new mode 100755 -index 4df5661..806aa25 ---- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go -@@ -34,7 +34,6 @@ package unix - //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) - //sys setfsgid(gid int) (prev int, err error) - //sys setfsuid(uid int) (prev int, err error) --//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) - //sys Shutdown(fd int, how int) (err error) - //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - //sys Stat(path string, stat *Stat_t) (err error) -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go -old mode 100644 -new mode 100755 -index 5f4243d..5e6ceee ---- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go -@@ -32,13 +32,12 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } -- return Pselect(nfd, r, w, e, ts, nil) -+ return pselect6(nfd, r, w, e, ts, nil) - } - - //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) - //sys setfsgid(gid int) (prev int, err error) - //sys setfsuid(uid int) (prev int, err error) --//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) - //sys Shutdown(fd int, how int) (err error) - //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - -@@ -178,3 +177,14 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) - } -+ -+//sys riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) -+ -+func RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error) { -+ var setSize uintptr -+ -+ if set != nil { -+ setSize = uintptr(unsafe.Sizeof(*set)) -+ } -+ return riscvHWProbe(pairs, setSize, set, flags) -+} -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go -old mode 100644 -new mode 100755 -index d0a7d40..2f89e8f ---- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go -@@ -34,7 +34,6 @@ import ( - //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) - //sys setfsgid(gid int) (prev int, err error) - //sys setfsuid(uid int) (prev int, err error) --//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) - //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - //sys Stat(path string, stat *Stat_t) (err error) - //sys Statfs(path string, buf *Statfs_t) (err error) -diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go -old mode 100644 -new mode 100755 -index f5c793b..7ca064a ---- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go -@@ -31,7 +31,6 @@ package unix - //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) - //sys setfsgid(gid int) (prev int, err error) - //sys setfsuid(uid int) (prev int, err error) --//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) - //sys Shutdown(fd int, how int) (err error) - //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - //sys Stat(path string, stat *Stat_t) (err error) -diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go -old mode 100644 -new mode 100755 -index 666f0a1..8816209 ---- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go -+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go -@@ -13,7 +13,6 @@ - package unix - - import ( -- "runtime" - "syscall" - "unsafe" - ) -@@ -110,6 +109,20 @@ func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) - } - -+func SysctlUvmexp(name string) (*Uvmexp, error) { -+ mib, err := sysctlmib(name) -+ if err != nil { -+ return nil, err -+ } -+ -+ n := uintptr(SizeofUvmexp) -+ var u Uvmexp -+ if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil { -+ return nil, err -+ } -+ return &u, nil -+} -+ - func Pipe(p []int) (err error) { - return Pipe2(p, 0) - } -@@ -164,13 +177,13 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - } - - //sys ioctl(fd int, req uint, arg uintptr) (err error) -+//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL - - //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - - func IoctlGetPtmget(fd int, req uint) (*Ptmget, error) { - var value Ptmget -- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) -- runtime.KeepAlive(value) -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) - return &value, err - } - -@@ -245,6 +258,7 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { - //sys Chmod(path string, mode uint32) (err error) - //sys Chown(path string, uid int, gid int) (err error) - //sys Chroot(path string) (err error) -+//sys ClockGettime(clockid int32, time *Timespec) (err error) - //sys Close(fd int) (err error) - //sys Dup(fd int) (nfd int, err error) - //sys Dup2(from int, to int) (err error) -@@ -326,7 +340,6 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { - //sys Setpriority(which int, who int, prio int) (err error) - //sysnb Setregid(rgid int, egid int) (err error) - //sysnb Setreuid(ruid int, euid int) (err error) --//sysnb Setrlimit(which int, lim *Rlimit) (err error) - //sysnb Setsid() (pid int, err error) - //sysnb Settimeofday(tp *Timeval) (err error) - //sysnb Setuid(uid int) (err error) -@@ -343,267 +356,16 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { - //sys write(fd int, p []byte) (n int, err error) - //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) - //sys munmap(addr uintptr, length uintptr) (err error) --//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ --//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE - //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) - --/* -- * Unimplemented -- */ --// ____semctl13 --// __clone --// __fhopen40 --// __fhstat40 --// __fhstatvfs140 --// __fstat30 --// __getcwd --// __getfh30 --// __getlogin --// __lstat30 --// __mount50 --// __msgctl13 --// __msync13 --// __ntp_gettime30 --// __posix_chown --// __posix_fchown --// __posix_lchown --// __posix_rename --// __setlogin --// __shmctl13 --// __sigaction_sigtramp --// __sigaltstack14 --// __sigpending14 --// __sigprocmask14 --// __sigsuspend14 --// __sigtimedwait --// __stat30 --// __syscall --// __vfork14 --// _ksem_close --// _ksem_destroy --// _ksem_getvalue --// _ksem_init --// _ksem_open --// _ksem_post --// _ksem_trywait --// _ksem_unlink --// _ksem_wait --// _lwp_continue --// _lwp_create --// _lwp_ctl --// _lwp_detach --// _lwp_exit --// _lwp_getname --// _lwp_getprivate --// _lwp_kill --// _lwp_park --// _lwp_self --// _lwp_setname --// _lwp_setprivate --// _lwp_suspend --// _lwp_unpark --// _lwp_unpark_all --// _lwp_wait --// _lwp_wakeup --// _pset_bind --// _sched_getaffinity --// _sched_getparam --// _sched_setaffinity --// _sched_setparam --// acct --// aio_cancel --// aio_error --// aio_fsync --// aio_read --// aio_return --// aio_suspend --// aio_write --// break --// clock_getres --// clock_gettime --// clock_settime --// compat_09_ogetdomainname --// compat_09_osetdomainname --// compat_09_ouname --// compat_10_omsgsys --// compat_10_osemsys --// compat_10_oshmsys --// compat_12_fstat12 --// compat_12_getdirentries --// compat_12_lstat12 --// compat_12_msync --// compat_12_oreboot --// compat_12_oswapon --// compat_12_stat12 --// compat_13_sigaction13 --// compat_13_sigaltstack13 --// compat_13_sigpending13 --// compat_13_sigprocmask13 --// compat_13_sigreturn13 --// compat_13_sigsuspend13 --// compat_14___semctl --// compat_14_msgctl --// compat_14_shmctl --// compat_16___sigaction14 --// compat_16___sigreturn14 --// compat_20_fhstatfs --// compat_20_fstatfs --// compat_20_getfsstat --// compat_20_statfs --// compat_30___fhstat30 --// compat_30___fstat13 --// compat_30___lstat13 --// compat_30___stat13 --// compat_30_fhopen --// compat_30_fhstat --// compat_30_fhstatvfs1 --// compat_30_getdents --// compat_30_getfh --// compat_30_ntp_gettime --// compat_30_socket --// compat_40_mount --// compat_43_fstat43 --// compat_43_lstat43 --// compat_43_oaccept --// compat_43_ocreat --// compat_43_oftruncate --// compat_43_ogetdirentries --// compat_43_ogetdtablesize --// compat_43_ogethostid --// compat_43_ogethostname --// compat_43_ogetkerninfo --// compat_43_ogetpagesize --// compat_43_ogetpeername --// compat_43_ogetrlimit --// compat_43_ogetsockname --// compat_43_okillpg --// compat_43_olseek --// compat_43_ommap --// compat_43_oquota --// compat_43_orecv --// compat_43_orecvfrom --// compat_43_orecvmsg --// compat_43_osend --// compat_43_osendmsg --// compat_43_osethostid --// compat_43_osethostname --// compat_43_osetrlimit --// compat_43_osigblock --// compat_43_osigsetmask --// compat_43_osigstack --// compat_43_osigvec --// compat_43_otruncate --// compat_43_owait --// compat_43_stat43 --// execve --// extattr_delete_fd --// extattr_delete_file --// extattr_delete_link --// extattr_get_fd --// extattr_get_file --// extattr_get_link --// extattr_list_fd --// extattr_list_file --// extattr_list_link --// extattr_set_fd --// extattr_set_file --// extattr_set_link --// extattrctl --// fchroot --// fdatasync --// fgetxattr --// fktrace --// flistxattr --// fork --// fremovexattr --// fsetxattr --// fstatvfs1 --// fsync_range --// getcontext --// getitimer --// getvfsstat --// getxattr --// ktrace --// lchflags --// lchmod --// lfs_bmapv --// lfs_markv --// lfs_segclean --// lfs_segwait --// lgetxattr --// lio_listio --// listxattr --// llistxattr --// lremovexattr --// lseek --// lsetxattr --// lutimes --// madvise --// mincore --// minherit --// modctl --// mq_close --// mq_getattr --// mq_notify --// mq_open --// mq_receive --// mq_send --// mq_setattr --// mq_timedreceive --// mq_timedsend --// mq_unlink --// mremap --// msgget --// msgrcv --// msgsnd --// nfssvc --// ntp_adjtime --// pmc_control --// pmc_get_info --// pollts --// preadv --// profil --// pselect --// pset_assign --// pset_create --// pset_destroy --// ptrace --// pwritev --// quotactl --// rasctl --// readv --// reboot --// removexattr --// sa_enable --// sa_preempt --// sa_register --// sa_setconcurrency --// sa_stacks --// sa_yield --// sbrk --// sched_yield --// semconfig --// semget --// semop --// setcontext --// setitimer --// setxattr --// shmat --// shmdt --// shmget --// sstk --// statvfs1 --// swapctl --// sysarch --// syscall --// timer_create --// timer_delete --// timer_getoverrun --// timer_gettime --// timer_settime --// undelete --// utrace --// uuidgen --// vadvise --// vfork --// writev -+const ( -+ mremapFixed = MAP_FIXED -+ mremapDontunmap = 0 -+ mremapMaymove = 0 -+) -+ -+//sys mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) = SYS_MREMAP -+ -+func mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (uintptr, error) { -+ return mremapNetBSD(oldaddr, oldlength, newaddr, newlength, flags) -+} -diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go -old mode 100644 -new mode 100755 -index 78daceb..6f34479 ---- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go -+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go -@@ -151,7 +151,23 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { - return - } - -+//sysnb getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) -+//sysnb getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) -+ -+func Getresuid() (ruid, euid, suid int) { -+ var r, e, s _C_int -+ getresuid(&r, &e, &s) -+ return int(r), int(e), int(s) -+} -+ -+func Getresgid() (rgid, egid, sgid int) { -+ var r, e, s _C_int -+ getresgid(&r, &e, &s) -+ return int(r), int(e), int(s) -+} -+ - //sys ioctl(fd int, req uint, arg uintptr) (err error) -+//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL - - //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - -@@ -220,6 +236,7 @@ func Uname(uname *Utsname) error { - //sys Chmod(path string, mode uint32) (err error) - //sys Chown(path string, uid int, gid int) (err error) - //sys Chroot(path string) (err error) -+//sys ClockGettime(clockid int32, time *Timespec) (err error) - //sys Close(fd int) (err error) - //sys Dup(fd int) (nfd int, err error) - //sys Dup2(from int, to int) (err error) -@@ -292,7 +309,6 @@ func Uname(uname *Utsname) error { - //sysnb Setreuid(ruid int, euid int) (err error) - //sysnb Setresgid(rgid int, egid int, sgid int) (err error) - //sysnb Setresuid(ruid int, euid int, suid int) (err error) --//sysnb Setrlimit(which int, lim *Rlimit) (err error) - //sysnb Setrtable(rtable int) (err error) - //sysnb Setsid() (pid int, err error) - //sysnb Settimeofday(tp *Timeval) (err error) -@@ -310,80 +326,4 @@ func Uname(uname *Utsname) error { - //sys write(fd int, p []byte) (n int, err error) - //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) - //sys munmap(addr uintptr, length uintptr) (err error) --//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ --//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE - //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) -- --/* -- * Unimplemented -- */ --// __getcwd --// __semctl --// __syscall --// __sysctl --// adjfreq --// break --// clock_getres --// clock_gettime --// clock_settime --// closefrom --// execve --// fhopen --// fhstat --// fhstatfs --// fork --// futimens --// getfh --// getgid --// getitimer --// getlogin --// getresgid --// getresuid --// getthrid --// ktrace --// lfs_bmapv --// lfs_markv --// lfs_segclean --// lfs_segwait --// mincore --// minherit --// mount --// mquery --// msgctl --// msgget --// msgrcv --// msgsnd --// nfssvc --// nnpfspioctl --// preadv --// profil --// pwritev --// quotactl --// readv --// reboot --// renameat --// rfork --// sched_yield --// semget --// semop --// setgroups --// setitimer --// setsockopt --// shmat --// shmctl --// shmdt --// shmget --// sigaction --// sigaltstack --// sigpending --// sigprocmask --// sigreturn --// sigsuspend --// sysarch --// syscall --// threxit --// thrsigdivert --// thrsleep --// thrwakeup --// vfork --// writev -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go -old mode 100644 -new mode 100755 -index e23c539..04aa43f ---- a/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go -+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go -@@ -2,8 +2,8 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --//go:build openbsd && !mips64 --// +build openbsd,!mips64 -+//go:build openbsd -+// +build openbsd - - package unix - -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go -old mode 100644 -new mode 100755 -index 2109e56..b99cfa1 ---- a/vendor/golang.org/x/sys/unix/syscall_solaris.go -+++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go -@@ -408,8 +408,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - for n < len(pp.Path) && pp.Path[n] != 0 { - n++ - } -- bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] -- sa.Name = string(bytes) -+ sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n)) - return sa, nil - - case AF_INET: -@@ -546,22 +545,26 @@ func Minor(dev uint64) uint32 { - * Expose the ioctl function - */ - --//sys ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) = libc.ioctl -+//sys ioctlRet(fd int, req int, arg uintptr) (ret int, err error) = libc.ioctl -+//sys ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) = libc.ioctl - --func ioctl(fd int, req uint, arg uintptr) (err error) { -+func ioctl(fd int, req int, arg uintptr) (err error) { - _, err = ioctlRet(fd, req, arg) - return err - } - --func IoctlSetTermio(fd int, req uint, value *Termio) error { -- err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) -- runtime.KeepAlive(value) -+func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { -+ _, err = ioctlPtrRet(fd, req, arg) - return err - } - --func IoctlGetTermio(fd int, req uint) (*Termio, error) { -+func IoctlSetTermio(fd int, req int, value *Termio) error { -+ return ioctlPtr(fd, req, unsafe.Pointer(value)) -+} -+ -+func IoctlGetTermio(fd int, req int) (*Termio, error) { - var value Termio -- err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) -+ err := ioctlPtr(fd, req, unsafe.Pointer(&value)) - return &value, err - } - -@@ -590,6 +593,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - //sys Chmod(path string, mode uint32) (err error) - //sys Chown(path string, uid int, gid int) (err error) - //sys Chroot(path string) (err error) -+//sys ClockGettime(clockid int32, time *Timespec) (err error) - //sys Close(fd int) (err error) - //sys Creat(path string, mode uint32) (fd int, err error) - //sys Dup(fd int) (nfd int, err error) -@@ -661,7 +665,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - //sys Setpriority(which int, who int, prio int) (err error) - //sysnb Setregid(rgid int, egid int) (err error) - //sysnb Setreuid(ruid int, euid int) (err error) --//sysnb Setrlimit(which int, lim *Rlimit) (err error) - //sysnb Setsid() (pid int, err error) - //sysnb Setuid(uid int) (err error) - //sys Shutdown(s int, how int) (err error) = libsocket.shutdown -@@ -695,38 +698,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - //sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt - //sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) -- n = int(r0) -- if e1 != 0 { -- err = e1 -- } -- return --} -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) -- n = int(r0) -- if e1 != 0 { -- err = e1 -- } -- return --} -- --var mapper = &mmapper{ -- active: make(map[*byte][]byte), -- mmap: mmap, -- munmap: munmap, --} -- --func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { -- return mapper.Mmap(fd, offset, length, prot, flags) --} -- --func Munmap(b []byte) (err error) { -- return mapper.Munmap(b) --} -- - // Event Ports - - type fileObjCookie struct { -@@ -1076,14 +1047,14 @@ func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags - return retCl, retData, flags, nil - } - --func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) { -+func IoctlSetIntRetInt(fd int, req int, arg int) (int, error) { - return ioctlRet(fd, req, uintptr(arg)) - } - --func IoctlSetString(fd int, req uint, val string) error { -+func IoctlSetString(fd int, req int, val string) error { - bs := make([]byte, len(val)+1) - copy(bs[:len(bs)-1], val) -- err := ioctl(fd, req, uintptr(unsafe.Pointer(&bs[0]))) -+ err := ioctlPtr(fd, req, unsafe.Pointer(&bs[0])) - runtime.KeepAlive(&bs[0]) - return err - } -@@ -1116,8 +1087,8 @@ func (l *Lifreq) GetLifruUint() uint { - return *(*uint)(unsafe.Pointer(&l.Lifru[0])) - } - --func IoctlLifreq(fd int, req uint, l *Lifreq) error { -- return ioctl(fd, req, uintptr(unsafe.Pointer(l))) -+func IoctlLifreq(fd int, req int, l *Lifreq) error { -+ return ioctlPtr(fd, req, unsafe.Pointer(l)) - } - - // Strioctl Helpers -@@ -1127,6 +1098,6 @@ func (s *Strioctl) SetInt(i int) { - s.Dp = (*int8)(unsafe.Pointer(&i)) - } - --func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) { -- return ioctlRet(fd, req, uintptr(unsafe.Pointer(s))) -+func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) { -+ return ioctlPtrRet(fd, req, unsafe.Pointer(s)) - } -diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go -old mode 100644 -new mode 100755 -index 00bafda..f6eda27 ---- a/vendor/golang.org/x/sys/unix/syscall_unix.go -+++ b/vendor/golang.org/x/sys/unix/syscall_unix.go -@@ -147,6 +147,14 @@ func (m *mmapper) Munmap(data []byte) (err error) { - return nil - } - -+func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { -+ return mapper.Mmap(fd, offset, length, prot, flags) -+} -+ -+func Munmap(b []byte) (err error) { -+ return mapper.Munmap(b) -+} -+ - func Read(fd int, p []byte) (n int, err error) { - n, err = read(fd, p) - if raceenabled { -@@ -331,6 +339,19 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { - return - } - -+// Recvmsg receives a message from a socket using the recvmsg system call. The -+// received non-control data will be written to p, and any "out of band" -+// control data will be written to oob. The flags are passed to recvmsg. -+// -+// The results are: -+// - n is the number of non-control data bytes read into p -+// - oobn is the number of control data bytes read into oob; this may be interpreted using [ParseSocketControlMessage] -+// - recvflags is flags returned by recvmsg -+// - from is the address of the sender -+// -+// If the underlying socket type is not SOCK_DGRAM, a received message -+// containing oob data and a single '\0' of non-control data is treated as if -+// the message contained only control data, i.e. n will be zero on return. - func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { - var iov [1]Iovec - if len(p) > 0 { -@@ -346,13 +367,9 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from - return - } - --// RecvmsgBuffers receives a message from a socket using the recvmsg --// system call. The flags are passed to recvmsg. Any non-control data --// read is scattered into the buffers slices. The results are: --// - n is the number of non-control data read into bufs --// - oobn is the number of control data read into oob; this may be interpreted using [ParseSocketControlMessage] --// - recvflags is flags returned by recvmsg --// - from is the address of the sender -+// RecvmsgBuffers receives a message from a socket using the recvmsg system -+// call. This function is equivalent to Recvmsg, but non-control data read is -+// scattered into the buffers slices. - func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { - iov := make([]Iovec, len(buffers)) - for i := range buffers { -@@ -371,11 +388,38 @@ func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn in - return - } - -+// Sendmsg sends a message on a socket to an address using the sendmsg system -+// call. This function is equivalent to SendmsgN, but does not return the -+// number of bytes actually sent. - func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { - _, err = SendmsgN(fd, p, oob, to, flags) - return - } - -+// SendmsgN sends a message on a socket to an address using the sendmsg system -+// call. p contains the non-control data to send, and oob contains the "out of -+// band" control data. The flags are passed to sendmsg. The number of -+// non-control bytes actually written to the socket is returned. -+// -+// Some socket types do not support sending control data without accompanying -+// non-control data. If p is empty, and oob contains control data, and the -+// underlying socket type is not SOCK_DGRAM, p will be treated as containing a -+// single '\0' and the return value will indicate zero bytes sent. -+// -+// The Go function Recvmsg, if called with an empty p and a non-empty oob, -+// will read and ignore this additional '\0'. If the message is received by -+// code that does not use Recvmsg, or that does not use Go at all, that code -+// will need to be written to expect and ignore the additional '\0'. -+// -+// If you need to send non-empty oob with p actually empty, and if the -+// underlying socket type supports it, you can do so via a raw system call as -+// follows: -+// -+// msg := &unix.Msghdr{ -+// Control: &oob[0], -+// } -+// msg.SetControllen(len(oob)) -+// n, _, errno := unix.Syscall(unix.SYS_SENDMSG, uintptr(fd), uintptr(unsafe.Pointer(msg)), flags) - func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { - var iov [1]Iovec - if len(p) > 0 { -@@ -394,9 +438,8 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) - } - - // SendmsgBuffers sends a message on a socket to an address using the sendmsg --// system call. The flags are passed to sendmsg. Any non-control data written --// is gathered from buffers. The function returns the number of bytes written --// to the socket. -+// system call. This function is equivalent to SendmsgN, but the non-control -+// data is gathered from buffers. - func SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) { - iov := make([]Iovec, len(buffers)) - for i := range buffers { -@@ -506,6 +549,9 @@ func SetNonblock(fd int, nonblocking bool) (err error) { - if err != nil { - return err - } -+ if (flag&O_NONBLOCK != 0) == nonblocking { -+ return nil -+ } - if nonblocking { - flag |= O_NONBLOCK - } else { -@@ -543,7 +589,7 @@ func Lutimes(path string, tv []Timeval) error { - return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW) - } - --// emptyIovec reports whether there are no bytes in the slice of Iovec. -+// emptyIovecs reports whether there are no bytes in the slice of Iovec. - func emptyIovecs(iov []Iovec) bool { - for i := range iov { - if iov[i].Len > 0 { -@@ -552,3 +598,10 @@ func emptyIovecs(iov []Iovec) bool { - } - return true - } -+ -+// Setrlimit sets a resource limit. -+func Setrlimit(resource int, rlim *Rlimit) error { -+ // Just call the syscall version, because as of Go 1.21 -+ // it will affect starting a new process. -+ return syscall.Setrlimit(resource, (*syscall.Rlimit)(rlim)) -+} -diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go -old mode 100644 -new mode 100755 -index 68b2f3e..4596d04 ---- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go -+++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go -@@ -139,8 +139,7 @@ func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) { - for n < int(pp.Len) && pp.Path[n] != 0 { - n++ - } -- bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] -- sa.Name = string(bytes) -+ sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n)) - return sa, nil - - case AF_INET: -@@ -193,7 +192,6 @@ func (cmsg *Cmsghdr) SetLen(length int) { - - //sys fcntl(fd int, cmd int, arg int) (val int, err error) - //sys read(fd int, p []byte) (n int, err error) --//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ - //sys write(fd int, p []byte) (n int, err error) - - //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = SYS___ACCEPT_A -@@ -213,7 +211,8 @@ func (cmsg *Cmsghdr) SetLen(length int) { - //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___SENDMSG_A - //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) = SYS_MMAP - //sys munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP --//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL -+//sys ioctl(fd int, req int, arg uintptr) (err error) = SYS_IOCTL -+//sys ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = SYS_IOCTL - - //sys Access(path string, mode uint32) (err error) = SYS___ACCESS_A - //sys Chdir(path string) (err error) = SYS___CHDIR_A -@@ -285,25 +284,11 @@ func Close(fd int) (err error) { - return - } - --var mapper = &mmapper{ -- active: make(map[*byte][]byte), -- mmap: mmap, -- munmap: munmap, --} -- - // Dummy function: there are no semantics for Madvise on z/OS - func Madvise(b []byte, advice int) (err error) { - return - } - --func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { -- return mapper.Mmap(fd, offset, length, prot, flags) --} -- --func Munmap(b []byte) (err error) { -- return mapper.Munmap(b) --} -- - //sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A - //sysnb Getegid() (egid int) - //sysnb Geteuid() (uid int) -diff --git a/vendor/golang.org/x/sys/unix/sysvshm_linux.go b/vendor/golang.org/x/sys/unix/sysvshm_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix.go b/vendor/golang.org/x/sys/unix/sysvshm_unix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go b/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go -old mode 100644 -new mode 100755 -index 3d89304..616b1b2 ---- a/vendor/golang.org/x/sys/unix/timestruct.go -+++ b/vendor/golang.org/x/sys/unix/timestruct.go -@@ -9,7 +9,7 @@ package unix - - import "time" - --// TimespecToNSec returns the time stored in ts as nanoseconds. -+// TimespecToNsec returns the time stored in ts as nanoseconds. - func TimespecToNsec(ts Timespec) int64 { return ts.Nano() } - - // NsecToTimespec converts a number of nanoseconds into a Timespec. -diff --git a/vendor/golang.org/x/sys/unix/unveil_openbsd.go b/vendor/golang.org/x/sys/unix/unveil_openbsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go -old mode 100644 -new mode 100755 -index 663b377..f5f8e9f ---- a/vendor/golang.org/x/sys/unix/xattr_bsd.go -+++ b/vendor/golang.org/x/sys/unix/xattr_bsd.go -@@ -36,9 +36,14 @@ func xattrnamespace(fullattr string) (ns int, attr string, err error) { - func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) { - if len(dest) > idx { - return unsafe.Pointer(&dest[idx]) -- } else { -- return unsafe.Pointer(_zero) - } -+ if dest != nil { -+ // extattr_get_file and extattr_list_file treat NULL differently from -+ // a non-NULL pointer of length zero. Preserve the property of nilness, -+ // even if we can't use dest directly. -+ return unsafe.Pointer(&_zero) -+ } -+ return nil - } - - // FreeBSD and NetBSD implement their own syscalls to handle extended attributes -diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go -old mode 100644 -new mode 100755 -index 476a1c7..1430076 ---- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go -@@ -1270,6 +1270,16 @@ const ( - SEEK_END = 0x2 - SEEK_HOLE = 0x3 - SEEK_SET = 0x0 -+ SF_APPEND = 0x40000 -+ SF_ARCHIVED = 0x10000 -+ SF_DATALESS = 0x40000000 -+ SF_FIRMLINK = 0x800000 -+ SF_IMMUTABLE = 0x20000 -+ SF_NOUNLINK = 0x100000 -+ SF_RESTRICTED = 0x80000 -+ SF_SETTABLE = 0x3fff0000 -+ SF_SUPPORTED = 0x9f0000 -+ SF_SYNTHETIC = 0xc0000000 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 -@@ -1543,6 +1553,15 @@ const ( - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 -+ UF_APPEND = 0x4 -+ UF_COMPRESSED = 0x20 -+ UF_DATAVAULT = 0x80 -+ UF_HIDDEN = 0x8000 -+ UF_IMMUTABLE = 0x2 -+ UF_NODUMP = 0x1 -+ UF_OPAQUE = 0x8 -+ UF_SETTABLE = 0xffff -+ UF_TRACKED = 0x40 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go -old mode 100644 -new mode 100755 -index e36f517..ab044a7 ---- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go -@@ -1270,6 +1270,16 @@ const ( - SEEK_END = 0x2 - SEEK_HOLE = 0x3 - SEEK_SET = 0x0 -+ SF_APPEND = 0x40000 -+ SF_ARCHIVED = 0x10000 -+ SF_DATALESS = 0x40000000 -+ SF_FIRMLINK = 0x800000 -+ SF_IMMUTABLE = 0x20000 -+ SF_NOUNLINK = 0x100000 -+ SF_RESTRICTED = 0x80000 -+ SF_SETTABLE = 0x3fff0000 -+ SF_SUPPORTED = 0x9f0000 -+ SF_SYNTHETIC = 0xc0000000 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 -@@ -1543,6 +1553,15 @@ const ( - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 -+ UF_APPEND = 0x4 -+ UF_COMPRESSED = 0x20 -+ UF_DATAVAULT = 0x80 -+ UF_HIDDEN = 0x8000 -+ UF_IMMUTABLE = 0x2 -+ UF_NODUMP = 0x1 -+ UF_OPAQUE = 0x8 -+ UF_SETTABLE = 0xffff -+ UF_TRACKED = 0x40 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go -old mode 100644 -new mode 100755 -index 785d693..f9c7f47 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go -@@ -70,6 +70,7 @@ const ( - ALG_SET_DRBG_ENTROPY = 0x6 - ALG_SET_IV = 0x2 - ALG_SET_KEY = 0x1 -+ ALG_SET_KEY_BY_KEY_SERIAL = 0x7 - ALG_SET_OP = 0x3 - ANON_INODE_FS_MAGIC = 0x9041934 - ARPHRD_6LOWPAN = 0x339 -@@ -457,7 +458,6 @@ const ( - B600 = 0x8 - B75 = 0x2 - B9600 = 0xd -- BALLOON_KVM_MAGIC = 0x13661366 - BDEVFS_MAGIC = 0x62646576 - BINDERFS_SUPER_MAGIC = 0x6c6f6f70 - BINFMTFS_MAGIC = 0x42494e4d -@@ -493,6 +493,7 @@ const ( - BPF_F_TEST_RUN_ON_CPU = 0x1 - BPF_F_TEST_STATE_FREQ = 0x8 - BPF_F_TEST_XDP_LIVE_FRAMES = 0x2 -+ BPF_F_XDP_DEV_BOUND_ONLY = 0x40 - BPF_F_XDP_HAS_FRAGS = 0x20 - BPF_H = 0x8 - BPF_IMM = 0x0 -@@ -563,6 +564,7 @@ const ( - BUS_USB = 0x3 - BUS_VIRTUAL = 0x6 - CAN_BCM = 0x2 -+ CAN_BUS_OFF_THRESHOLD = 0x100 - CAN_CTRLMODE_3_SAMPLES = 0x4 - CAN_CTRLMODE_BERR_REPORTING = 0x10 - CAN_CTRLMODE_CC_LEN8_DLC = 0x100 -@@ -577,9 +579,12 @@ const ( - CAN_EFF_FLAG = 0x80000000 - CAN_EFF_ID_BITS = 0x1d - CAN_EFF_MASK = 0x1fffffff -+ CAN_ERROR_PASSIVE_THRESHOLD = 0x80 -+ CAN_ERROR_WARNING_THRESHOLD = 0x60 - CAN_ERR_ACK = 0x20 - CAN_ERR_BUSERROR = 0x80 - CAN_ERR_BUSOFF = 0x40 -+ CAN_ERR_CNT = 0x200 - CAN_ERR_CRTL = 0x4 - CAN_ERR_CRTL_ACTIVE = 0x40 - CAN_ERR_CRTL_RX_OVERFLOW = 0x1 -@@ -771,6 +776,8 @@ const ( - DEVLINK_GENL_MCGRP_CONFIG_NAME = "config" - DEVLINK_GENL_NAME = "devlink" - DEVLINK_GENL_VERSION = 0x1 -+ DEVLINK_PORT_FN_CAP_MIGRATABLE = 0x2 -+ DEVLINK_PORT_FN_CAP_ROCE = 0x1 - DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14 - DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS = 0x3 - DEVMEM_MAGIC = 0x454d444d -@@ -820,9 +827,9 @@ const ( - DM_UUID_FLAG = 0x4000 - DM_UUID_LEN = 0x81 - DM_VERSION = 0xc138fd00 -- DM_VERSION_EXTRA = "-ioctl (2022-02-22)" -+ DM_VERSION_EXTRA = "-ioctl (2023-03-01)" - DM_VERSION_MAJOR = 0x4 -- DM_VERSION_MINOR = 0x2e -+ DM_VERSION_MINOR = 0x30 - DM_VERSION_PATCHLEVEL = 0x0 - DT_BLK = 0x6 - DT_CHR = 0x2 -@@ -1049,6 +1056,7 @@ const ( - ETH_P_CAIF = 0xf7 - ETH_P_CAN = 0xc - ETH_P_CANFD = 0xd -+ ETH_P_CANXL = 0xe - ETH_P_CFM = 0x8902 - ETH_P_CONTROL = 0x16 - ETH_P_CUST = 0x6006 -@@ -1060,6 +1068,7 @@ const ( - ETH_P_DNA_RT = 0x6003 - ETH_P_DSA = 0x1b - ETH_P_DSA_8021Q = 0xdadb -+ ETH_P_DSA_A5PSW = 0xe001 - ETH_P_ECONET = 0x18 - ETH_P_EDSA = 0xdada - ETH_P_ERSPAN = 0x88be -@@ -1189,13 +1198,16 @@ const ( - FAN_EVENT_METADATA_LEN = 0x18 - FAN_EVENT_ON_CHILD = 0x8000000 - FAN_FS_ERROR = 0x8000 -+ FAN_INFO = 0x20 - FAN_MARK_ADD = 0x1 - FAN_MARK_DONT_FOLLOW = 0x4 - FAN_MARK_EVICTABLE = 0x200 - FAN_MARK_FILESYSTEM = 0x100 - FAN_MARK_FLUSH = 0x80 -+ FAN_MARK_IGNORE = 0x400 - FAN_MARK_IGNORED_MASK = 0x20 - FAN_MARK_IGNORED_SURV_MODIFY = 0x40 -+ FAN_MARK_IGNORE_SURV = 0x440 - FAN_MARK_INODE = 0x0 - FAN_MARK_MOUNT = 0x10 - FAN_MARK_ONLYDIR = 0x8 -@@ -1223,6 +1235,8 @@ const ( - FAN_REPORT_PIDFD = 0x80 - FAN_REPORT_TARGET_FID = 0x1000 - FAN_REPORT_TID = 0x100 -+ FAN_RESPONSE_INFO_AUDIT_RULE = 0x1 -+ FAN_RESPONSE_INFO_NONE = 0x0 - FAN_UNLIMITED_MARKS = 0x20 - FAN_UNLIMITED_QUEUE = 0x10 - FD_CLOEXEC = 0x1 -@@ -1253,7 +1267,10 @@ const ( - FSCRYPT_MODE_AES_128_CBC = 0x5 - FSCRYPT_MODE_AES_128_CTS = 0x6 - FSCRYPT_MODE_AES_256_CTS = 0x4 -+ FSCRYPT_MODE_AES_256_HCTR2 = 0xa - FSCRYPT_MODE_AES_256_XTS = 0x1 -+ FSCRYPT_MODE_SM4_CTS = 0x8 -+ FSCRYPT_MODE_SM4_XTS = 0x7 - FSCRYPT_POLICY_FLAGS_PAD_16 = 0x2 - FSCRYPT_POLICY_FLAGS_PAD_32 = 0x3 - FSCRYPT_POLICY_FLAGS_PAD_4 = 0x0 -@@ -1272,8 +1289,6 @@ const ( - FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 - FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 - FS_ENCRYPTION_MODE_INVALID = 0x0 -- FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 -- FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 - FS_IOC_ADD_ENCRYPTION_KEY = 0xc0506617 - FS_IOC_GET_ENCRYPTION_KEY_STATUS = 0xc080661a - FS_IOC_GET_ENCRYPTION_POLICY_EX = 0xc0096616 -@@ -1430,6 +1445,7 @@ const ( - IFF_NOARP = 0x80 - IFF_NOFILTER = 0x1000 - IFF_NOTRAILERS = 0x20 -+ IFF_NO_CARRIER = 0x40 - IFF_NO_PI = 0x1000 - IFF_ONE_QUEUE = 0x2000 - IFF_PERSIST = 0x800 -@@ -1761,6 +1777,7 @@ const ( - LANDLOCK_ACCESS_FS_REFER = 0x2000 - LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10 - LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20 -+ LANDLOCK_ACCESS_FS_TRUNCATE = 0x4000 - LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 - LANDLOCK_CREATE_RULESET_VERSION = 0x1 - LINUX_REBOOT_CMD_CAD_OFF = 0x0 -@@ -1800,11 +1817,13 @@ const ( - LWTUNNEL_IP_OPT_GENEVE_MAX = 0x3 - LWTUNNEL_IP_OPT_VXLAN_MAX = 0x1 - MADV_COLD = 0x14 -+ MADV_COLLAPSE = 0x19 - MADV_DODUMP = 0x11 - MADV_DOFORK = 0xb - MADV_DONTDUMP = 0x10 - MADV_DONTFORK = 0xa - MADV_DONTNEED = 0x4 -+ MADV_DONTNEED_LOCKED = 0x18 - MADV_FREE = 0x8 - MADV_HUGEPAGE = 0xe - MADV_HWPOISON = 0x64 -@@ -1845,8 +1864,9 @@ const ( - MEMWRITEOOB64 = 0xc0184d15 - MFD_ALLOW_SEALING = 0x2 - MFD_CLOEXEC = 0x1 -+ MFD_EXEC = 0x10 - MFD_HUGETLB = 0x4 -- MFD_HUGE_16GB = -0x78000000 -+ MFD_HUGE_16GB = 0x88000000 - MFD_HUGE_16MB = 0x60000000 - MFD_HUGE_1GB = 0x78000000 - MFD_HUGE_1MB = 0x50000000 -@@ -1860,6 +1880,7 @@ const ( - MFD_HUGE_8MB = 0x5c000000 - MFD_HUGE_MASK = 0x3f - MFD_HUGE_SHIFT = 0x1a -+ MFD_NOEXEC_SEAL = 0x8 - MINIX2_SUPER_MAGIC = 0x2468 - MINIX2_SUPER_MAGIC2 = 0x2478 - MINIX3_SUPER_MAGIC = 0x4d5a -@@ -1883,6 +1904,9 @@ const ( - MOUNT_ATTR_SIZE_VER0 = 0x20 - MOUNT_ATTR_STRICTATIME = 0x20 - MOUNT_ATTR__ATIME = 0x70 -+ MREMAP_DONTUNMAP = 0x4 -+ MREMAP_FIXED = 0x2 -+ MREMAP_MAYMOVE = 0x1 - MSDOS_SUPER_MAGIC = 0x4d44 - MSG_BATCH = 0x40000 - MSG_CMSG_CLOEXEC = 0x40000000 -@@ -2153,6 +2177,7 @@ const ( - PACKET_FANOUT_DATA = 0x16 - PACKET_FANOUT_EBPF = 0x7 - PACKET_FANOUT_FLAG_DEFRAG = 0x8000 -+ PACKET_FANOUT_FLAG_IGNORE_OUTGOING = 0x4000 - PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 - PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 - PACKET_FANOUT_HASH = 0x0 -@@ -2188,6 +2213,7 @@ const ( - PACKET_USER = 0x6 - PACKET_VERSION = 0xa - PACKET_VNET_HDR = 0xf -+ PACKET_VNET_HDR_SZ = 0x18 - PARITY_CRC16_PR0 = 0x2 - PARITY_CRC16_PR0_CCITT = 0x4 - PARITY_CRC16_PR1 = 0x3 -@@ -2205,6 +2231,7 @@ const ( - PERF_ATTR_SIZE_VER5 = 0x70 - PERF_ATTR_SIZE_VER6 = 0x78 - PERF_ATTR_SIZE_VER7 = 0x80 -+ PERF_ATTR_SIZE_VER8 = 0x88 - PERF_AUX_FLAG_COLLISION = 0x8 - PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0 - PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100 -@@ -2212,6 +2239,11 @@ const ( - PERF_AUX_FLAG_PARTIAL = 0x4 - PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00 - PERF_AUX_FLAG_TRUNCATED = 0x1 -+ PERF_BR_ARM64_DEBUG_DATA = 0x7 -+ PERF_BR_ARM64_DEBUG_EXIT = 0x5 -+ PERF_BR_ARM64_DEBUG_HALT = 0x4 -+ PERF_BR_ARM64_DEBUG_INST = 0x6 -+ PERF_BR_ARM64_FIQ = 0x3 - PERF_FLAG_FD_CLOEXEC = 0x8 - PERF_FLAG_FD_NO_GROUP = 0x1 - PERF_FLAG_FD_OUTPUT = 0x2 -@@ -2232,6 +2264,8 @@ const ( - PERF_MEM_LOCK_NA = 0x1 - PERF_MEM_LOCK_SHIFT = 0x18 - PERF_MEM_LVLNUM_ANY_CACHE = 0xb -+ PERF_MEM_LVLNUM_CXL = 0x9 -+ PERF_MEM_LVLNUM_IO = 0xa - PERF_MEM_LVLNUM_L1 = 0x1 - PERF_MEM_LVLNUM_L2 = 0x2 - PERF_MEM_LVLNUM_L3 = 0x3 -@@ -2265,6 +2299,7 @@ const ( - PERF_MEM_REMOTE_REMOTE = 0x1 - PERF_MEM_REMOTE_SHIFT = 0x25 - PERF_MEM_SNOOPX_FWD = 0x1 -+ PERF_MEM_SNOOPX_PEER = 0x2 - PERF_MEM_SNOOPX_SHIFT = 0x26 - PERF_MEM_SNOOP_HIT = 0x4 - PERF_MEM_SNOOP_HITM = 0x10 -@@ -2301,7 +2336,6 @@ const ( - PERF_SAMPLE_BRANCH_PLM_ALL = 0x7 - PERF_SAMPLE_WEIGHT_TYPE = 0x1004000 - PIPEFS_MAGIC = 0x50495045 -- PPC_CMM_MAGIC = 0xc7571590 - PPPIOCGNPMODE = 0xc008744c - PPPIOCNEWUNIT = 0xc004743e - PRIO_PGRP = 0x1 -@@ -2338,6 +2372,7 @@ const ( - PR_FP_EXC_UND = 0x40000 - PR_FP_MODE_FR = 0x1 - PR_FP_MODE_FRE = 0x2 -+ PR_GET_AUXV = 0x41555856 - PR_GET_CHILD_SUBREAPER = 0x25 - PR_GET_DUMPABLE = 0x3 - PR_GET_ENDIAN = 0x13 -@@ -2346,6 +2381,8 @@ const ( - PR_GET_FP_MODE = 0x2e - PR_GET_IO_FLUSHER = 0x3a - PR_GET_KEEPCAPS = 0x7 -+ PR_GET_MDWE = 0x42 -+ PR_GET_MEMORY_MERGE = 0x44 - PR_GET_NAME = 0x10 - PR_GET_NO_NEW_PRIVS = 0x27 - PR_GET_PDEATHSIG = 0x2 -@@ -2366,6 +2403,7 @@ const ( - PR_MCE_KILL_GET = 0x22 - PR_MCE_KILL_LATE = 0x0 - PR_MCE_KILL_SET = 0x1 -+ PR_MDWE_REFUSE_EXEC_GAIN = 0x1 - PR_MPX_DISABLE_MANAGEMENT = 0x2c - PR_MPX_ENABLE_MANAGEMENT = 0x2b - PR_MTE_TAG_MASK = 0x7fff8 -@@ -2383,6 +2421,15 @@ const ( - PR_PAC_GET_ENABLED_KEYS = 0x3d - PR_PAC_RESET_KEYS = 0x36 - PR_PAC_SET_ENABLED_KEYS = 0x3c -+ PR_RISCV_V_GET_CONTROL = 0x46 -+ PR_RISCV_V_SET_CONTROL = 0x45 -+ PR_RISCV_V_VSTATE_CTRL_CUR_MASK = 0x3 -+ PR_RISCV_V_VSTATE_CTRL_DEFAULT = 0x0 -+ PR_RISCV_V_VSTATE_CTRL_INHERIT = 0x10 -+ PR_RISCV_V_VSTATE_CTRL_MASK = 0x1f -+ PR_RISCV_V_VSTATE_CTRL_NEXT_MASK = 0xc -+ PR_RISCV_V_VSTATE_CTRL_OFF = 0x1 -+ PR_RISCV_V_VSTATE_CTRL_ON = 0x2 - PR_SCHED_CORE = 0x3e - PR_SCHED_CORE_CREATE = 0x1 - PR_SCHED_CORE_GET = 0x0 -@@ -2400,6 +2447,8 @@ const ( - PR_SET_FP_MODE = 0x2d - PR_SET_IO_FLUSHER = 0x39 - PR_SET_KEEPCAPS = 0x8 -+ PR_SET_MDWE = 0x41 -+ PR_SET_MEMORY_MERGE = 0x43 - PR_SET_MM = 0x23 - PR_SET_MM_ARG_END = 0x9 - PR_SET_MM_ARG_START = 0x8 -@@ -2483,6 +2532,7 @@ const ( - PTRACE_GETSIGMASK = 0x420a - PTRACE_GET_RSEQ_CONFIGURATION = 0x420f - PTRACE_GET_SYSCALL_INFO = 0x420e -+ PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG = 0x4211 - PTRACE_INTERRUPT = 0x4207 - PTRACE_KILL = 0x8 - PTRACE_LISTEN = 0x4208 -@@ -2513,6 +2563,7 @@ const ( - PTRACE_SETREGSET = 0x4205 - PTRACE_SETSIGINFO = 0x4203 - PTRACE_SETSIGMASK = 0x420b -+ PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG = 0x4210 - PTRACE_SINGLESTEP = 0x9 - PTRACE_SYSCALL = 0x18 - PTRACE_SYSCALL_INFO_ENTRY = 0x1 -@@ -2779,6 +2830,23 @@ const ( - RWF_SUPPORTED = 0x1f - RWF_SYNC = 0x4 - RWF_WRITE_LIFE_NOT_SET = 0x0 -+ SCHED_BATCH = 0x3 -+ SCHED_DEADLINE = 0x6 -+ SCHED_FIFO = 0x1 -+ SCHED_FLAG_ALL = 0x7f -+ SCHED_FLAG_DL_OVERRUN = 0x4 -+ SCHED_FLAG_KEEP_ALL = 0x18 -+ SCHED_FLAG_KEEP_PARAMS = 0x10 -+ SCHED_FLAG_KEEP_POLICY = 0x8 -+ SCHED_FLAG_RECLAIM = 0x2 -+ SCHED_FLAG_RESET_ON_FORK = 0x1 -+ SCHED_FLAG_UTIL_CLAMP = 0x60 -+ SCHED_FLAG_UTIL_CLAMP_MAX = 0x40 -+ SCHED_FLAG_UTIL_CLAMP_MIN = 0x20 -+ SCHED_IDLE = 0x5 -+ SCHED_NORMAL = 0x0 -+ SCHED_RESET_ON_FORK = 0x40000000 -+ SCHED_RR = 0x2 - SCM_CREDENTIALS = 0x2 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x1d -@@ -2944,6 +3012,7 @@ const ( - SOL_TCP = 0x6 - SOL_TIPC = 0x10f - SOL_TLS = 0x11a -+ SOL_UDP = 0x11 - SOL_X25 = 0x106 - SOL_XDP = 0x11b - SOMAXCONN = 0x1000 -@@ -2999,6 +3068,7 @@ const ( - STATX_BLOCKS = 0x400 - STATX_BTIME = 0x800 - STATX_CTIME = 0x80 -+ STATX_DIOALIGN = 0x2000 - STATX_GID = 0x10 - STATX_INO = 0x100 - STATX_MNT_ID = 0x1000 -@@ -3047,7 +3117,7 @@ const ( - TASKSTATS_GENL_NAME = "TASKSTATS" - TASKSTATS_GENL_VERSION = 0x1 - TASKSTATS_TYPE_MAX = 0x6 -- TASKSTATS_VERSION = 0xd -+ TASKSTATS_VERSION = 0xe - TCIFLUSH = 0x0 - TCIOFF = 0x2 - TCIOFLUSH = 0x2 -@@ -3213,6 +3283,7 @@ const ( - TP_STATUS_COPY = 0x2 - TP_STATUS_CSUMNOTREADY = 0x8 - TP_STATUS_CSUM_VALID = 0x80 -+ TP_STATUS_GSO_TCP = 0x100 - TP_STATUS_KERNEL = 0x0 - TP_STATUS_LOSING = 0x4 - TP_STATUS_SENDING = 0x2 -@@ -3227,6 +3298,19 @@ const ( - TRACEFS_MAGIC = 0x74726163 - TS_COMM_LEN = 0x20 - UDF_SUPER_MAGIC = 0x15013346 -+ UDP_CORK = 0x1 -+ UDP_ENCAP = 0x64 -+ UDP_ENCAP_ESPINUDP = 0x2 -+ UDP_ENCAP_ESPINUDP_NON_IKE = 0x1 -+ UDP_ENCAP_GTP0 = 0x4 -+ UDP_ENCAP_GTP1U = 0x5 -+ UDP_ENCAP_L2TPINUDP = 0x3 -+ UDP_GRO = 0x68 -+ UDP_NO_CHECK6_RX = 0x66 -+ UDP_NO_CHECK6_TX = 0x65 -+ UDP_SEGMENT = 0x67 -+ UDP_V4_FLOW = 0x2 -+ UDP_V6_FLOW = 0x6 - UMOUNT_NOFOLLOW = 0x8 - USBDEVICE_SUPER_MAGIC = 0x9fa2 - UTIME_NOW = 0x3fffffff -@@ -3392,9 +3476,7 @@ const ( - XDP_ZEROCOPY = 0x4 - XENFS_SUPER_MAGIC = 0xabba1974 - XFS_SUPER_MAGIC = 0x58465342 -- Z3FOLD_MAGIC = 0x33 - ZONEFS_MAGIC = 0x5a4f4653 -- ZSMALLOC_MAGIC = 0x58295829 - _HIDIOCGRAWNAME_LEN = 0x80 - _HIDIOCGRAWPHYS_LEN = 0x40 - _HIDIOCGRAWUNIQ_LEN = 0x40 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go -old mode 100644 -new mode 100755 -index 36c0dfc..30aee00 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x127a - BLKBSZGET = 0x80041270 - BLKBSZSET = 0x40041271 -+ BLKDISCARD = 0x1277 -+ BLKDISCARDZEROES = 0x127c - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 -+ BLKGETDISKSEQ = 0x80081280 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80041272 -+ BLKIOMIN = 0x1278 -+ BLKIOOPT = 0x1279 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d -+ BLKROTATIONAL = 0x127e - BLKRRPART = 0x125f -+ BLKSECDISCARD = 0x127d - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 -+ BLKZEROOUT = 0x127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -133,6 +142,7 @@ const ( - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 -+ MEMREAD = 0xc03c4d1a - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 -@@ -316,10 +326,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go -old mode 100644 -new mode 100755 -index 4ff9427..8ebfa51 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x127a - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 -+ BLKDISCARD = 0x1277 -+ BLKDISCARDZEROES = 0x127c - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 -+ BLKGETDISKSEQ = 0x80081280 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 -+ BLKIOMIN = 0x1278 -+ BLKIOOPT = 0x1279 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d -+ BLKROTATIONAL = 0x127e - BLKRRPART = 0x125f -+ BLKSECDISCARD = 0x127d - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 -+ BLKZEROOUT = 0x127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -133,6 +142,7 @@ const ( - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 -@@ -317,10 +327,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go -old mode 100644 -new mode 100755 -index 3eaa0fb..271a21c ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x127a - BLKBSZGET = 0x80041270 - BLKBSZSET = 0x40041271 -+ BLKDISCARD = 0x1277 -+ BLKDISCARDZEROES = 0x127c - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 -+ BLKGETDISKSEQ = 0x80081280 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80041272 -+ BLKIOMIN = 0x1278 -+ BLKIOOPT = 0x1279 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d -+ BLKROTATIONAL = 0x127e - BLKRRPART = 0x125f -+ BLKSECDISCARD = 0x127d - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 -+ BLKZEROOUT = 0x127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 -@@ -323,10 +333,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go -old mode 100644 -new mode 100755 -index d7995bd..910c330 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x127a - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 -+ BLKDISCARD = 0x1277 -+ BLKDISCARDZEROES = 0x127c - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 -+ BLKGETDISKSEQ = 0x80081280 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 -+ BLKIOMIN = 0x1278 -+ BLKIOOPT = 0x1279 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d -+ BLKROTATIONAL = 0x127e - BLKRRPART = 0x125f -+ BLKSECDISCARD = 0x127d - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 -+ BLKZEROOUT = 0x127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -134,6 +143,7 @@ const ( - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 -@@ -313,10 +323,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -@@ -442,6 +454,7 @@ const ( - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 -+ TPIDR2_MAGIC = 0x54504902 - TUNATTACHFILTER = 0x401054d5 - TUNDETACHFILTER = 0x401054d6 - TUNGETDEVNETNS = 0x54e3 -@@ -514,6 +527,7 @@ const ( - XCASE = 0x4 - XTABS = 0x1800 - ZA_MAGIC = 0x54366345 -+ ZT_MAGIC = 0x5a544e01 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go -old mode 100644 -new mode 100755 -index 928e24c..a640798 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x127a - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 -+ BLKDISCARD = 0x1277 -+ BLKDISCARDZEROES = 0x127c - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 -+ BLKGETDISKSEQ = 0x80081280 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 -+ BLKIOMIN = 0x1278 -+ BLKIOOPT = 0x1279 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d -+ BLKROTATIONAL = 0x127e - BLKRRPART = 0x125f -+ BLKSECDISCARD = 0x127d - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 -+ BLKZEROOUT = 0x127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -109,6 +118,8 @@ const ( - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 -+ LASX_CTX_MAGIC = 0x41535801 -+ LSX_CTX_MAGIC = 0x53580001 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 -@@ -132,6 +143,7 @@ const ( - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 -@@ -307,10 +319,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go -old mode 100644 -new mode 100755 -index 179bffb..0d5925d ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x2000127a - BLKBSZGET = 0x40041270 - BLKBSZSET = 0x80041271 -+ BLKDISCARD = 0x20001277 -+ BLKDISCARDZEROES = 0x2000127c - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 -+ BLKGETDISKSEQ = 0x40081280 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40041272 -+ BLKIOMIN = 0x20001278 -+ BLKIOOPT = 0x20001279 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d -+ BLKROTATIONAL = 0x2000127e - BLKRRPART = 0x2000125f -+ BLKSECDISCARD = 0x2000127d - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 -+ BLKZEROOUT = 0x2000127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 -@@ -316,10 +326,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x11 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x12 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x1028 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go -old mode 100644 -new mode 100755 -index 1fba17b..d72a00e ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x2000127a - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 -+ BLKDISCARD = 0x20001277 -+ BLKDISCARDZEROES = 0x2000127c - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 -+ BLKGETDISKSEQ = 0x40081280 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 -+ BLKIOMIN = 0x20001278 -+ BLKIOOPT = 0x20001279 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d -+ BLKROTATIONAL = 0x2000127e - BLKRRPART = 0x2000125f -+ BLKSECDISCARD = 0x2000127d - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 -+ BLKZEROOUT = 0x2000127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 -@@ -316,10 +326,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x11 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x12 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x1028 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go -old mode 100644 -new mode 100755 -index b77dde3..02ba129 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x2000127a - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 -+ BLKDISCARD = 0x20001277 -+ BLKDISCARDZEROES = 0x2000127c - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 -+ BLKGETDISKSEQ = 0x40081280 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 -+ BLKIOMIN = 0x20001278 -+ BLKIOOPT = 0x20001279 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d -+ BLKROTATIONAL = 0x2000127e - BLKRRPART = 0x2000125f -+ BLKSECDISCARD = 0x2000127d - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 -+ BLKZEROOUT = 0x2000127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 -@@ -316,10 +326,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x11 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x12 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x1028 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go -old mode 100644 -new mode 100755 -index 78c6c75..8daa6dd ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x2000127a - BLKBSZGET = 0x40041270 - BLKBSZSET = 0x80041271 -+ BLKDISCARD = 0x20001277 -+ BLKDISCARDZEROES = 0x2000127c - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 -+ BLKGETDISKSEQ = 0x40081280 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40041272 -+ BLKIOMIN = 0x20001278 -+ BLKIOOPT = 0x20001279 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d -+ BLKROTATIONAL = 0x2000127e - BLKRRPART = 0x2000125f -+ BLKSECDISCARD = 0x2000127d - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 -+ BLKZEROOUT = 0x2000127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 -@@ -316,10 +326,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x11 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x12 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x1028 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go -old mode 100644 -new mode 100755 -index 1c0d31f..63c8fa2 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x10 - B576000 = 0x15 - B921600 = 0x16 -+ BLKALIGNOFF = 0x2000127a - BLKBSZGET = 0x40041270 - BLKBSZSET = 0x80041271 -+ BLKDISCARD = 0x20001277 -+ BLKDISCARDZEROES = 0x2000127c - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 -+ BLKGETDISKSEQ = 0x40081280 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40041272 -+ BLKIOMIN = 0x20001278 -+ BLKIOOPT = 0x20001279 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d -+ BLKROTATIONAL = 0x2000127e - BLKRRPART = 0x2000125f -+ BLKSECDISCARD = 0x2000127d - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 -+ BLKZEROOUT = 0x2000127f - BOTHER = 0x1f - BS1 = 0x8000 - BSDLY = 0x8000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 -@@ -371,10 +381,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x14 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x15 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go -old mode 100644 -new mode 100755 -index 959dd9b..930799e ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x10 - B576000 = 0x15 - B921600 = 0x16 -+ BLKALIGNOFF = 0x2000127a - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 -+ BLKDISCARD = 0x20001277 -+ BLKDISCARDZEROES = 0x2000127c - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 -+ BLKGETDISKSEQ = 0x40081280 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 -+ BLKIOMIN = 0x20001278 -+ BLKIOOPT = 0x20001279 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d -+ BLKROTATIONAL = 0x2000127e - BLKRRPART = 0x2000125f -+ BLKSECDISCARD = 0x2000127d - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 -+ BLKZEROOUT = 0x2000127f - BOTHER = 0x1f - BS1 = 0x8000 - BSDLY = 0x8000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 -@@ -375,10 +385,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x14 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x15 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go -old mode 100644 -new mode 100755 -index 5a873cd..8605a7d ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x10 - B576000 = 0x15 - B921600 = 0x16 -+ BLKALIGNOFF = 0x2000127a - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 -+ BLKDISCARD = 0x20001277 -+ BLKDISCARDZEROES = 0x2000127c - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 -+ BLKGETDISKSEQ = 0x40081280 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 -+ BLKIOMIN = 0x20001278 -+ BLKIOOPT = 0x20001279 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d -+ BLKROTATIONAL = 0x2000127e - BLKRRPART = 0x2000125f -+ BLKSECDISCARD = 0x2000127d - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 -+ BLKZEROOUT = 0x2000127f - BOTHER = 0x1f - BS1 = 0x8000 - BSDLY = 0x8000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 -@@ -375,10 +385,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x14 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x15 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go -old mode 100644 -new mode 100755 -index e336d14..95a016f ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x127a - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 -+ BLKDISCARD = 0x1277 -+ BLKDISCARDZEROES = 0x127c - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 -+ BLKGETDISKSEQ = 0x80081280 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 -+ BLKIOMIN = 0x1278 -+ BLKIOOPT = 0x1279 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d -+ BLKROTATIONAL = 0x127e - BLKRRPART = 0x125f -+ BLKSECDISCARD = 0x127d - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 -+ BLKZEROOUT = 0x127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 -@@ -304,10 +314,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go -old mode 100644 -new mode 100755 -index 390c01d..1ae0108 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go -@@ -27,22 +27,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x127a - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 -+ BLKDISCARD = 0x1277 -+ BLKDISCARDZEROES = 0x127c - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 -+ BLKGETDISKSEQ = 0x80081280 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 -+ BLKIOMIN = 0x1278 -+ BLKIOOPT = 0x1279 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d -+ BLKROTATIONAL = 0x127e - BLKRRPART = 0x125f -+ BLKSECDISCARD = 0x127d - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 -+ BLKZEROOUT = 0x127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -131,6 +140,7 @@ const ( - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 -@@ -379,10 +389,12 @@ const ( - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 -+ SO_PASSPIDFD = 0x4c - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b -+ SO_PEERPIDFD = 0x4d - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go -old mode 100644 -new mode 100755 -index 98a6e5f..1bb7c63 ---- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go -@@ -30,22 +30,31 @@ const ( - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 -+ BLKALIGNOFF = 0x2000127a - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 -+ BLKDISCARD = 0x20001277 -+ BLKDISCARDZEROES = 0x2000127c - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 -+ BLKGETDISKSEQ = 0x40081280 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 -+ BLKIOMIN = 0x20001278 -+ BLKIOOPT = 0x20001279 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d -+ BLKROTATIONAL = 0x2000127e - BLKRRPART = 0x2000125f -+ BLKSECDISCARD = 0x2000127d - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 -+ BLKZEROOUT = 0x2000127f - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 -@@ -136,6 +145,7 @@ const ( - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 -+ MEMREAD = 0xc0404d1a - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 -@@ -328,6 +338,54 @@ const ( - SCM_WIFI_STATUS = 0x25 - SFD_CLOEXEC = 0x400000 - SFD_NONBLOCK = 0x4000 -+ SF_FP = 0x38 -+ SF_I0 = 0x20 -+ SF_I1 = 0x24 -+ SF_I2 = 0x28 -+ SF_I3 = 0x2c -+ SF_I4 = 0x30 -+ SF_I5 = 0x34 -+ SF_L0 = 0x0 -+ SF_L1 = 0x4 -+ SF_L2 = 0x8 -+ SF_L3 = 0xc -+ SF_L4 = 0x10 -+ SF_L5 = 0x14 -+ SF_L6 = 0x18 -+ SF_L7 = 0x1c -+ SF_PC = 0x3c -+ SF_RETP = 0x40 -+ SF_V9_FP = 0x70 -+ SF_V9_I0 = 0x40 -+ SF_V9_I1 = 0x48 -+ SF_V9_I2 = 0x50 -+ SF_V9_I3 = 0x58 -+ SF_V9_I4 = 0x60 -+ SF_V9_I5 = 0x68 -+ SF_V9_L0 = 0x0 -+ SF_V9_L1 = 0x8 -+ SF_V9_L2 = 0x10 -+ SF_V9_L3 = 0x18 -+ SF_V9_L4 = 0x20 -+ SF_V9_L5 = 0x28 -+ SF_V9_L6 = 0x30 -+ SF_V9_L7 = 0x38 -+ SF_V9_PC = 0x78 -+ SF_V9_RETP = 0x80 -+ SF_V9_XARG0 = 0x88 -+ SF_V9_XARG1 = 0x90 -+ SF_V9_XARG2 = 0x98 -+ SF_V9_XARG3 = 0xa0 -+ SF_V9_XARG4 = 0xa8 -+ SF_V9_XARG5 = 0xb0 -+ SF_V9_XXARG = 0xb8 -+ SF_XARG0 = 0x44 -+ SF_XARG1 = 0x48 -+ SF_XARG2 = 0x4c -+ SF_XARG3 = 0x50 -+ SF_XARG4 = 0x54 -+ SF_XARG5 = 0x58 -+ SF_XXARG = 0x5c - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x40108907 -@@ -370,10 +428,12 @@ const ( - SO_NOFCS = 0x27 - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x2 -+ SO_PASSPIDFD = 0x55 - SO_PASSSEC = 0x1f - SO_PEEK_OFF = 0x26 - SO_PEERCRED = 0x40 - SO_PEERGROUPS = 0x3d -+ SO_PEERPIDFD = 0x56 - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x48 - SO_PROTOCOL = 0x1028 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go -old mode 100644 -new mode 100755 -index 6d56edc..af20e47 ---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go -@@ -46,6 +46,7 @@ const ( - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 -+ ALTWERASE = 0x200 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 -@@ -108,6 +109,15 @@ const ( - BPF_DIRECTION_IN = 0x1 - BPF_DIRECTION_OUT = 0x2 - BPF_DIV = 0x30 -+ BPF_FILDROP_CAPTURE = 0x1 -+ BPF_FILDROP_DROP = 0x2 -+ BPF_FILDROP_PASS = 0x0 -+ BPF_F_DIR_IN = 0x10 -+ BPF_F_DIR_MASK = 0x30 -+ BPF_F_DIR_OUT = 0x20 -+ BPF_F_DIR_SHIFT = 0x4 -+ BPF_F_FLOWID = 0x8 -+ BPF_F_PRI_MASK = 0x7 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 -@@ -136,6 +146,7 @@ const ( - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 -+ BPF_RND = 0xc0 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 -@@ -147,6 +158,12 @@ const ( - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 -+ CLOCK_BOOTTIME = 0x6 -+ CLOCK_MONOTONIC = 0x3 -+ CLOCK_PROCESS_CPUTIME_ID = 0x2 -+ CLOCK_REALTIME = 0x0 -+ CLOCK_THREAD_CPUTIME_ID = 0x4 -+ CLOCK_UPTIME = 0x5 - CPUSTATES = 0x6 - CP_IDLE = 0x5 - CP_INTR = 0x4 -@@ -170,7 +187,65 @@ const ( - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 -+ DIOCADDQUEUE = 0xc100445d -+ DIOCADDRULE = 0xccc84404 -+ DIOCADDSTATE = 0xc1084425 -+ DIOCCHANGERULE = 0xccc8441a -+ DIOCCLRIFFLAG = 0xc024445a -+ DIOCCLRSRCNODES = 0x20004455 -+ DIOCCLRSTATES = 0xc0d04412 -+ DIOCCLRSTATUS = 0xc0244416 -+ DIOCGETLIMIT = 0xc0084427 -+ DIOCGETQSTATS = 0xc1084460 -+ DIOCGETQUEUE = 0xc100445f -+ DIOCGETQUEUES = 0xc100445e -+ DIOCGETRULE = 0xccc84407 -+ DIOCGETRULES = 0xccc84406 -+ DIOCGETRULESET = 0xc444443b -+ DIOCGETRULESETS = 0xc444443a -+ DIOCGETSRCNODES = 0xc0084454 -+ DIOCGETSTATE = 0xc1084413 -+ DIOCGETSTATES = 0xc0084419 -+ DIOCGETSTATUS = 0xc1e84415 -+ DIOCGETSYNFLWATS = 0xc0084463 -+ DIOCGETTIMEOUT = 0xc008441e -+ DIOCIGETIFACES = 0xc0244457 -+ DIOCKILLSRCNODES = 0xc068445b -+ DIOCKILLSTATES = 0xc0d04429 -+ DIOCNATLOOK = 0xc0504417 -+ DIOCOSFPADD = 0xc084444f - DIOCOSFPFLUSH = 0x2000444e -+ DIOCOSFPGET = 0xc0844450 -+ DIOCRADDADDRS = 0xc44c4443 -+ DIOCRADDTABLES = 0xc44c443d -+ DIOCRCLRADDRS = 0xc44c4442 -+ DIOCRCLRASTATS = 0xc44c4448 -+ DIOCRCLRTABLES = 0xc44c443c -+ DIOCRCLRTSTATS = 0xc44c4441 -+ DIOCRDELADDRS = 0xc44c4444 -+ DIOCRDELTABLES = 0xc44c443e -+ DIOCRGETADDRS = 0xc44c4446 -+ DIOCRGETASTATS = 0xc44c4447 -+ DIOCRGETTABLES = 0xc44c443f -+ DIOCRGETTSTATS = 0xc44c4440 -+ DIOCRINADEFINE = 0xc44c444d -+ DIOCRSETADDRS = 0xc44c4445 -+ DIOCRSETTFLAGS = 0xc44c444a -+ DIOCRTSTADDRS = 0xc44c4449 -+ DIOCSETDEBUG = 0xc0044418 -+ DIOCSETHOSTID = 0xc0044456 -+ DIOCSETIFFLAG = 0xc0244459 -+ DIOCSETLIMIT = 0xc0084428 -+ DIOCSETREASS = 0xc004445c -+ DIOCSETSTATUSIF = 0xc0244414 -+ DIOCSETSYNCOOKIES = 0xc0014462 -+ DIOCSETSYNFLWATS = 0xc0084461 -+ DIOCSETTIMEOUT = 0xc008441d -+ DIOCSTART = 0x20004401 -+ DIOCSTOP = 0x20004402 -+ DIOCXBEGIN = 0xc00c4451 -+ DIOCXCOMMIT = 0xc00c4452 -+ DIOCXROLLBACK = 0xc00c4453 - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 -@@ -186,6 +261,7 @@ const ( - DLT_LOOP = 0xc - DLT_MPLS = 0xdb - DLT_NULL = 0x0 -+ DLT_OPENFLOW = 0x10b - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPP = 0x9 -@@ -196,6 +272,23 @@ const ( - DLT_RAW = 0xe - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf -+ DLT_USBPCAP = 0xf9 -+ DLT_USER0 = 0x93 -+ DLT_USER1 = 0x94 -+ DLT_USER10 = 0x9d -+ DLT_USER11 = 0x9e -+ DLT_USER12 = 0x9f -+ DLT_USER13 = 0xa0 -+ DLT_USER14 = 0xa1 -+ DLT_USER15 = 0xa2 -+ DLT_USER2 = 0x95 -+ DLT_USER3 = 0x96 -+ DLT_USER4 = 0x97 -+ DLT_USER5 = 0x98 -+ DLT_USER6 = 0x99 -+ DLT_USER7 = 0x9a -+ DLT_USER8 = 0x9b -+ DLT_USER9 = 0x9c - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 -@@ -215,6 +308,8 @@ const ( - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 -+ ETH64_8021_RSVD_MASK = 0xfffffffffff0 -+ ETH64_8021_RSVD_PREFIX = 0x180c2000000 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 -@@ -267,6 +362,7 @@ const ( - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 -+ ETHERTYPE_EAPOL = 0x888e - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d -@@ -298,6 +394,7 @@ const ( - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 -+ ETHERTYPE_MACSEC = 0x88e5 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c -@@ -326,15 +423,17 @@ const ( - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 -+ ETHERTYPE_NHRP = 0x2001 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 -+ ETHERTYPE_NSH = 0x984f - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 -- ETHERTYPE_PAE = 0x888e -+ ETHERTYPE_PBB = 0x88e7 - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b -@@ -409,28 +508,40 @@ const ( - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_DIX_LEN = 0x600 -+ ETHER_MAX_HARDMTU_LEN = 0xff9b - ETHER_MAX_LEN = 0x5ee - ETHER_MIN_LEN = 0x40 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 -+ EVFILT_DEVICE = -0x8 -+ EVFILT_EXCEPT = -0x9 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 -- EVFILT_SYSCOUNT = 0x7 -+ EVFILT_SYSCOUNT = 0x9 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 -+ EVL_ENCAPLEN = 0x4 -+ EVL_PRIO_BITS = 0xd -+ EVL_PRIO_MAX = 0x7 -+ EVL_VLID_MASK = 0xfff -+ EVL_VLID_MAX = 0xffe -+ EVL_VLID_MIN = 0x1 -+ EVL_VLID_NULL = 0x0 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 -+ EV_DISPATCH = 0x80 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 -- EV_SYSFLAGS = 0xf000 -+ EV_RECEIPT = 0x40 -+ EV_SYSFLAGS = 0xf800 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 -@@ -443,6 +554,7 @@ const ( - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETOWN = 0x5 -+ F_ISATTY = 0xb - F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 -@@ -460,7 +572,6 @@ const ( - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 -- IFA_ROUTE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8e52 -@@ -471,12 +582,12 @@ const ( - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 -- IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 -+ IFF_STATICARP = 0x20 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 -@@ -605,6 +716,7 @@ const ( - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 -+ IFT_MBIM = 0xfa - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 -@@ -695,6 +807,7 @@ const ( - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 -+ IFT_WIREGUARD = 0xfb - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 -@@ -729,8 +842,6 @@ const ( - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DIVERT = 0x102 -- IPPROTO_DIVERT_INIT = 0x2 -- IPPROTO_DIVERT_RESP = 0x1 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 -@@ -762,9 +873,11 @@ const ( - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e -+ IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 -+ IPPROTO_UDPLITE = 0x88 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a -@@ -787,6 +900,7 @@ const ( - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff -+ IPV6_MINHOPCOUNT = 0x41 - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 -@@ -826,12 +940,12 @@ const ( - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 -- IP_DIVERTFL = 0x1022 - IP_DROP_MEMBERSHIP = 0xd - IP_ESP_NETWORK_LEVEL = 0x16 - IP_ESP_TRANS_LEVEL = 0x15 - IP_HDRINCL = 0x2 - IP_IPCOMP_LEVEL = 0x1d -+ IP_IPDEFTTL = 0x25 - IP_IPSECFLOWINFO = 0x24 - IP_IPSEC_LOCAL_AUTH = 0x1b - IP_IPSEC_LOCAL_CRED = 0x19 -@@ -865,10 +979,15 @@ const ( - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RTABLE = 0x1021 -+ IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 -+ ITIMER_PROF = 0x2 -+ ITIMER_REAL = 0x0 -+ ITIMER_VIRTUAL = 0x1 -+ IUCLC = 0x1000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 -@@ -900,10 +1019,11 @@ const ( - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 -- MAP_NOEXTEND = 0x100 -- MAP_NORESERVE = 0x40 -+ MAP_INHERIT_ZERO = 0x3 -+ MAP_NOEXTEND = 0x0 -+ MAP_NORESERVE = 0x0 - MAP_PRIVATE = 0x2 -- MAP_RENAME = 0x20 -+ MAP_RENAME = 0x0 - MAP_SHARED = 0x1 - MAP_STACK = 0x4000 - MAP_TRYFIXED = 0x0 -@@ -922,6 +1042,7 @@ const ( - MNT_NOATIME = 0x8000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 -+ MNT_NOPERM = 0x20 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 -@@ -929,13 +1050,29 @@ const ( - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x4000000 -+ MNT_STALLED = 0x100000 -+ MNT_SWAPPABLE = 0x200000 - MNT_SYNCHRONOUS = 0x2 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x400ffff - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 -+ MOUNT_AFS = "afs" -+ MOUNT_CD9660 = "cd9660" -+ MOUNT_EXT2FS = "ext2fs" -+ MOUNT_FFS = "ffs" -+ MOUNT_FUSEFS = "fuse" -+ MOUNT_MFS = "mfs" -+ MOUNT_MSDOS = "msdos" -+ MOUNT_NCPFS = "ncpfs" -+ MOUNT_NFS = "nfs" -+ MOUNT_NTFS = "ntfs" -+ MOUNT_TMPFS = "tmpfs" -+ MOUNT_UDF = "udf" -+ MOUNT_UFS = "ffs" - MSG_BCAST = 0x100 -+ MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 -@@ -946,6 +1083,7 @@ const ( - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 -+ MSG_WAITFORONE = 0x1000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 -@@ -953,12 +1091,16 @@ const ( - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 -- NET_RT_MAXID = 0x6 -+ NET_RT_IFNAMES = 0x6 -+ NET_RT_MAXID = 0x8 -+ NET_RT_SOURCE = 0x7 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 - NOFLSH = 0x80000000 -+ NOKERNINFO = 0x2000000 - NOTE_ATTRIB = 0x8 -+ NOTE_CHANGE = 0x1 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EOF = 0x2 -@@ -968,6 +1110,7 @@ const ( - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 -+ NOTE_OOB = 0x4 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 -@@ -977,11 +1120,13 @@ const ( - NOTE_TRUNCATE = 0x80 - NOTE_WRITE = 0x2 - OCRNL = 0x10 -+ OLCUC = 0x20 - ONLCR = 0x2 - ONLRET = 0x80 - ONOCR = 0x40 - ONOEOT = 0x8 - OPOST = 0x1 -+ OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 -@@ -1015,7 +1160,6 @@ const ( - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 -- PT_MASK = 0x3ff000 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 -@@ -1027,19 +1171,25 @@ const ( - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 -+ RTAX_BFD = 0xb - RTAX_BRD = 0x7 -+ RTAX_DNS = 0xc - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_LABEL = 0xa -- RTAX_MAX = 0xb -+ RTAX_MAX = 0xf - RTAX_NETMASK = 0x2 -+ RTAX_SEARCH = 0xe - RTAX_SRC = 0x8 - RTAX_SRCMASK = 0x9 -+ RTAX_STATIC = 0xd - RTA_AUTHOR = 0x40 -+ RTA_BFD = 0x800 - RTA_BRD = 0x80 -+ RTA_DNS = 0x1000 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 -@@ -1047,49 +1197,57 @@ const ( - RTA_IFP = 0x10 - RTA_LABEL = 0x400 - RTA_NETMASK = 0x4 -+ RTA_SEARCH = 0x4000 - RTA_SRC = 0x100 - RTA_SRCMASK = 0x200 -+ RTA_STATIC = 0x2000 - RTF_ANNOUNCE = 0x4000 -+ RTF_BFD = 0x1000000 - RTF_BLACKHOLE = 0x1000 -+ RTF_BROADCAST = 0x400000 -+ RTF_CACHED = 0x20000 - RTF_CLONED = 0x10000 - RTF_CLONING = 0x100 -+ RTF_CONNECTED = 0x800000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 -- RTF_FMASK = 0x10f808 -+ RTF_FMASK = 0x110fc08 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 -- RTF_MASK = 0x80 -+ RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MPATH = 0x40000 - RTF_MPLS = 0x100000 -+ RTF_MULTICAST = 0x200 - RTF_PERMANENT_ARP = 0x2000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x2000 - RTF_REJECT = 0x8 -- RTF_SOURCE = 0x20000 - RTF_STATIC = 0x800 -- RTF_TUNNEL = 0x100000 - RTF_UP = 0x1 - RTF_USETRAILERS = 0x8000 -- RTF_XRESOLVE = 0x200 -+ RTM_80211INFO = 0x15 - RTM_ADD = 0x1 -+ RTM_BFD = 0x12 - RTM_CHANGE = 0x3 -+ RTM_CHGADDRATTR = 0x14 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DESYNC = 0x10 - RTM_GET = 0x4 - RTM_IFANNOUNCE = 0xf - RTM_IFINFO = 0xe -- RTM_LOCK = 0x8 -+ RTM_INVALIDATE = 0x11 - RTM_LOSING = 0x5 - RTM_MAXSIZE = 0x800 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc -+ RTM_PROPOSAL = 0x13 - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb -- RTM_RTTUNIT = 0xf4240 -+ RTM_SOURCE = 0x16 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 -@@ -1099,67 +1257,74 @@ const ( - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 -+ RT_TABLEID_BITS = 0x8 -+ RT_TABLEID_MASK = 0xff - RT_TABLEID_MAX = 0xff - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 -+ SEEK_CUR = 0x1 -+ SEEK_END = 0x2 -+ SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80246987 -- SIOCALIFADDR = 0x8218691c - SIOCATMARK = 0x40047307 -- SIOCBRDGADD = 0x8054693c -- SIOCBRDGADDS = 0x80546941 -- SIOCBRDGARL = 0x806e694d -+ SIOCBRDGADD = 0x805c693c -+ SIOCBRDGADDL = 0x805c6949 -+ SIOCBRDGADDS = 0x805c6941 -+ SIOCBRDGARL = 0x808c694d - SIOCBRDGDADDR = 0x81286947 -- SIOCBRDGDEL = 0x8054693d -- SIOCBRDGDELS = 0x80546942 -- SIOCBRDGFLUSH = 0x80546948 -- SIOCBRDGFRL = 0x806e694e -+ SIOCBRDGDEL = 0x805c693d -+ SIOCBRDGDELS = 0x805c6942 -+ SIOCBRDGFLUSH = 0x805c6948 -+ SIOCBRDGFRL = 0x808c694e - SIOCBRDGGCACHE = 0xc0146941 - SIOCBRDGGFD = 0xc0146952 - SIOCBRDGGHT = 0xc0146951 -- SIOCBRDGGIFFLGS = 0xc054693e -+ SIOCBRDGGIFFLGS = 0xc05c693e - SIOCBRDGGMA = 0xc0146953 - SIOCBRDGGPARAM = 0xc03c6958 - SIOCBRDGGPRI = 0xc0146950 - SIOCBRDGGRL = 0xc028694f -- SIOCBRDGGSIFS = 0xc054693c - SIOCBRDGGTO = 0xc0146946 -- SIOCBRDGIFS = 0xc0546942 -+ SIOCBRDGIFS = 0xc05c6942 - SIOCBRDGRTS = 0xc0186943 - SIOCBRDGSADDR = 0xc1286944 - SIOCBRDGSCACHE = 0x80146940 - SIOCBRDGSFD = 0x80146952 - SIOCBRDGSHT = 0x80146951 -- SIOCBRDGSIFCOST = 0x80546955 -- SIOCBRDGSIFFLGS = 0x8054693f -- SIOCBRDGSIFPRIO = 0x80546954 -+ SIOCBRDGSIFCOST = 0x805c6955 -+ SIOCBRDGSIFFLGS = 0x805c693f -+ SIOCBRDGSIFPRIO = 0x805c6954 -+ SIOCBRDGSIFPROT = 0x805c694a - SIOCBRDGSMA = 0x80146953 - SIOCBRDGSPRI = 0x80146950 - SIOCBRDGSPROTO = 0x8014695a - SIOCBRDGSTO = 0x80146945 - SIOCBRDGSTXHC = 0x80146959 -+ SIOCDELLABEL = 0x80206997 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80246989 -+ SIOCDIFPARENT = 0x802069b4 - SIOCDIFPHYADDR = 0x80206949 -- SIOCDLIFADDR = 0x8218691e -+ SIOCDPWE3NEIGHBOR = 0x802069de -+ SIOCDVNETID = 0x802069af - SIOCGETKALIVE = 0xc01869a4 - SIOCGETLABEL = 0x8020699a -+ SIOCGETMPWCFG = 0xc02069ae - SIOCGETPFLOW = 0xc02069fe - SIOCGETPFSYNC = 0xc02069f8 - SIOCGETSGCNT = 0xc0147534 - SIOCGETVIFCNT = 0xc0147533 - SIOCGETVLAN = 0xc0206990 -- SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 -- SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCONF = 0xc0086924 - SIOCGIFDATA = 0xc020691b -@@ -1168,40 +1333,53 @@ const ( - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGATTR = 0xc024698b - SIOCGIFGENERIC = 0xc020693a -+ SIOCGIFGLIST = 0xc024698d - SIOCGIFGMEMB = 0xc024698a - SIOCGIFGROUP = 0xc0246988 - SIOCGIFHARDMTU = 0xc02069a5 -- SIOCGIFMEDIA = 0xc0286936 -+ SIOCGIFLLPRIO = 0xc02069b6 -+ SIOCGIFMEDIA = 0xc0386938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc020697e - SIOCGIFNETMASK = 0xc0206925 -- SIOCGIFPDSTADDR = 0xc0206948 -+ SIOCGIFPAIR = 0xc02069b1 -+ SIOCGIFPARENT = 0xc02069b3 - SIOCGIFPRIORITY = 0xc020699c -- SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRDOMAIN = 0xc02069a0 - SIOCGIFRTLABEL = 0xc0206983 -- SIOCGIFTIMESLOT = 0xc0206986 -+ SIOCGIFRXR = 0x802069aa -+ SIOCGIFSFFPAGE = 0xc1126939 - SIOCGIFXFLAGS = 0xc020699e -- SIOCGLIFADDR = 0xc218691d - SIOCGLIFPHYADDR = 0xc218694b -+ SIOCGLIFPHYDF = 0xc02069c2 -+ SIOCGLIFPHYECN = 0xc02069c8 - SIOCGLIFPHYRTABLE = 0xc02069a2 - SIOCGLIFPHYTTL = 0xc02069a9 -- SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 -+ SIOCGPWE3 = 0xc0206998 -+ SIOCGPWE3CTRLWORD = 0xc02069dc -+ SIOCGPWE3FAT = 0xc02069dd -+ SIOCGPWE3NEIGHBOR = 0xc21869de -+ SIOCGRXHPRIO = 0xc02069db - SIOCGSPPPPARAMS = 0xc0206994 -+ SIOCGTXHPRIO = 0xc02069c6 -+ SIOCGUMBINFO = 0xc02069be -+ SIOCGUMBPARAM = 0xc02069c0 - SIOCGVH = 0xc02069f6 -+ SIOCGVNETFLOWID = 0xc02069c4 - SIOCGVNETID = 0xc02069a7 -+ SIOCIFAFATTACH = 0x801169ab -+ SIOCIFAFDETACH = 0x801169ac - SIOCIFCREATE = 0x8020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCSETKALIVE = 0x801869a3 - SIOCSETLABEL = 0x80206999 -+ SIOCSETMPWCFG = 0x802069ad - SIOCSETPFLOW = 0x802069fd - SIOCSETPFSYNC = 0x802069f7 - SIOCSETVLAN = 0x8020698f -- SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c -- SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFDESCR = 0x80206980 - SIOCSIFDSTADDR = 0x8020690e -@@ -1209,25 +1387,37 @@ const ( - SIOCSIFGATTR = 0x8024698c - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020691f -- SIOCSIFMEDIA = 0xc0206935 -+ SIOCSIFLLPRIO = 0x802069b5 -+ SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x8020697f - SIOCSIFNETMASK = 0x80206916 -- SIOCSIFPHYADDR = 0x80406946 -+ SIOCSIFPAIR = 0x802069b0 -+ SIOCSIFPARENT = 0x802069b2 - SIOCSIFPRIORITY = 0x8020699b - SIOCSIFRDOMAIN = 0x8020699f - SIOCSIFRTLABEL = 0x80206982 -- SIOCSIFTIMESLOT = 0x80206985 - SIOCSIFXFLAGS = 0x8020699d - SIOCSLIFPHYADDR = 0x8218694a -+ SIOCSLIFPHYDF = 0x802069c1 -+ SIOCSLIFPHYECN = 0x802069c7 - SIOCSLIFPHYRTABLE = 0x802069a1 - SIOCSLIFPHYTTL = 0x802069a8 -- SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 -+ SIOCSPWE3CTRLWORD = 0x802069dc -+ SIOCSPWE3FAT = 0x802069dd -+ SIOCSPWE3NEIGHBOR = 0x821869de -+ SIOCSRXHPRIO = 0x802069db - SIOCSSPPPPARAMS = 0x80206993 -+ SIOCSTXHPRIO = 0x802069c5 -+ SIOCSUMBPARAM = 0x802069bf - SIOCSVH = 0xc02069f5 -+ SIOCSVNETFLOWID = 0x802069c3 - SIOCSVNETID = 0x802069a6 -+ SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 -+ SOCK_DNS = 0x1000 -+ SOCK_NONBLOCK = 0x4000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 -@@ -1238,6 +1428,7 @@ const ( - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 -+ SO_DOMAIN = 0x1024 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 -@@ -1245,6 +1436,7 @@ const ( - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 -+ SO_PROTOCOL = 0x1025 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 -@@ -1258,6 +1450,7 @@ const ( - SO_TIMESTAMP = 0x800 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 -+ SO_ZEROIZE = 0x2000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 -@@ -1287,9 +1480,24 @@ const ( - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TCIFLUSH = 0x1 -+ TCIOFF = 0x3 - TCIOFLUSH = 0x3 -+ TCION = 0x4 - TCOFLUSH = 0x2 -- TCP_MAXBURST = 0x4 -+ TCOOFF = 0x1 -+ TCOON = 0x2 -+ TCPOPT_EOL = 0x0 -+ TCPOPT_MAXSEG = 0x2 -+ TCPOPT_NOP = 0x1 -+ TCPOPT_SACK = 0x5 -+ TCPOPT_SACK_HDR = 0x1010500 -+ TCPOPT_SACK_PERMITTED = 0x4 -+ TCPOPT_SACK_PERMIT_HDR = 0x1010402 -+ TCPOPT_SIGNATURE = 0x13 -+ TCPOPT_TIMESTAMP = 0x8 -+ TCPOPT_TSTAMP_HDR = 0x101080a -+ TCPOPT_WINDOW = 0x3 -+ TCP_INFO = 0x9 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 -@@ -1298,11 +1506,15 @@ const ( - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 -- TCP_NSTATES = 0xb -+ TCP_SACKHOLE_LIMIT = 0x80 - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 -+ TIMER_ABSTIME = 0x1 -+ TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 -+ TIOCCHKVERAUTH = 0x2000741e -+ TIOCCLRVERAUTH = 0x2000741d - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d -@@ -1357,17 +1569,21 @@ const ( - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b -+ TIOCSETVERAUTH = 0x8004741c - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x8004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e -- TIOCSTAT = 0x80047465 -- TIOCSTI = 0x80017472 -+ TIOCSTAT = 0x20007465 - TIOCSTOP = 0x2000746f - TIOCSTSTAMP = 0x8008745a - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 -+ TIOCUCNTL_CBRK = 0x7a -+ TIOCUCNTL_SBRK = 0x7b - TOSTOP = 0x400000 -+ UTIME_NOW = -0x2 -+ UTIME_OMIT = -0x1 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 -@@ -1378,6 +1594,19 @@ const ( - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 -+ VM_ANONMIN = 0x7 -+ VM_LOADAVG = 0x2 -+ VM_MALLOC_CONF = 0xc -+ VM_MAXID = 0xd -+ VM_MAXSLP = 0xa -+ VM_METER = 0x1 -+ VM_NKMEMPAGES = 0x6 -+ VM_PSSTRINGS = 0x3 -+ VM_SWAPENCRYPT = 0x5 -+ VM_USPACE = 0xb -+ VM_UVMEXP = 0x4 -+ VM_VNODEMIN = 0x9 -+ VM_VTEXTMIN = 0x8 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc -@@ -1390,8 +1619,8 @@ const ( - WCONTINUED = 0x8 - WCOREFLAG = 0x80 - WNOHANG = 0x1 -- WSTOPPED = 0x7f - WUNTRACED = 0x2 -+ XCASE = 0x1000000 - ) - - // Errors -@@ -1405,6 +1634,7 @@ const ( - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) -+ EBADMSG = syscall.Errno(0x5c) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x58) -@@ -1431,7 +1661,7 @@ const ( - EIPSEC = syscall.Errno(0x52) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) -- ELAST = syscall.Errno(0x5b) -+ ELAST = syscall.Errno(0x5f) - ELOOP = syscall.Errno(0x3e) - EMEDIUMTYPE = syscall.Errno(0x56) - EMFILE = syscall.Errno(0x18) -@@ -1459,12 +1689,14 @@ const ( - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) -+ ENOTRECOVERABLE = syscall.Errno(0x5d) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x5b) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x57) -+ EOWNERDEAD = syscall.Errno(0x5e) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) -@@ -1472,6 +1704,7 @@ const ( - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) -+ EPROTO = syscall.Errno(0x5f) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) -@@ -1568,7 +1801,7 @@ var errorList = [...]struct { - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, -- {35, "EWOULDBLOCK", "resource temporarily unavailable"}, -+ {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, -@@ -1624,7 +1857,11 @@ var errorList = [...]struct { - {88, "ECANCELED", "operation canceled"}, - {89, "EIDRM", "identifier removed"}, - {90, "ENOMSG", "no message of desired type"}, -- {91, "ELAST", "not supported"}, -+ {91, "ENOTSUP", "not supported"}, -+ {92, "EBADMSG", "bad message"}, -+ {93, "ENOTRECOVERABLE", "state not recoverable"}, -+ {94, "EOWNERDEAD", "previous owner died"}, -+ {95, "ELAST", "protocol error"}, - } - - // Signal table -@@ -1638,7 +1875,7 @@ var signalList = [...]struct { - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, -- {6, "SIGABRT", "abort trap"}, -+ {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, -@@ -1665,4 +1902,5 @@ var signalList = [...]struct { - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -+ {28672, "SIGSTKSZ", "unknown signal"}, - } -diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go -old mode 100644 -new mode 100755 -index 25cb609..6015fcb ---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go -@@ -109,6 +109,15 @@ const ( - BPF_DIRECTION_IN = 0x1 - BPF_DIRECTION_OUT = 0x2 - BPF_DIV = 0x30 -+ BPF_FILDROP_CAPTURE = 0x1 -+ BPF_FILDROP_DROP = 0x2 -+ BPF_FILDROP_PASS = 0x0 -+ BPF_F_DIR_IN = 0x10 -+ BPF_F_DIR_MASK = 0x30 -+ BPF_F_DIR_OUT = 0x20 -+ BPF_F_DIR_SHIFT = 0x4 -+ BPF_F_FLOWID = 0x8 -+ BPF_F_PRI_MASK = 0x7 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 -@@ -137,6 +146,7 @@ const ( - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 -+ BPF_RND = 0xc0 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 -@@ -177,7 +187,65 @@ const ( - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 -+ DIOCADDQUEUE = 0xc110445d -+ DIOCADDRULE = 0xcd604404 -+ DIOCADDSTATE = 0xc1084425 -+ DIOCCHANGERULE = 0xcd60441a -+ DIOCCLRIFFLAG = 0xc028445a -+ DIOCCLRSRCNODES = 0x20004455 -+ DIOCCLRSTATES = 0xc0e04412 -+ DIOCCLRSTATUS = 0xc0284416 -+ DIOCGETLIMIT = 0xc0084427 -+ DIOCGETQSTATS = 0xc1204460 -+ DIOCGETQUEUE = 0xc110445f -+ DIOCGETQUEUES = 0xc110445e -+ DIOCGETRULE = 0xcd604407 -+ DIOCGETRULES = 0xcd604406 -+ DIOCGETRULESET = 0xc444443b -+ DIOCGETRULESETS = 0xc444443a -+ DIOCGETSRCNODES = 0xc0104454 -+ DIOCGETSTATE = 0xc1084413 -+ DIOCGETSTATES = 0xc0104419 -+ DIOCGETSTATUS = 0xc1e84415 -+ DIOCGETSYNFLWATS = 0xc0084463 -+ DIOCGETTIMEOUT = 0xc008441e -+ DIOCIGETIFACES = 0xc0284457 -+ DIOCKILLSRCNODES = 0xc080445b -+ DIOCKILLSTATES = 0xc0e04429 -+ DIOCNATLOOK = 0xc0504417 -+ DIOCOSFPADD = 0xc088444f - DIOCOSFPFLUSH = 0x2000444e -+ DIOCOSFPGET = 0xc0884450 -+ DIOCRADDADDRS = 0xc4504443 -+ DIOCRADDTABLES = 0xc450443d -+ DIOCRCLRADDRS = 0xc4504442 -+ DIOCRCLRASTATS = 0xc4504448 -+ DIOCRCLRTABLES = 0xc450443c -+ DIOCRCLRTSTATS = 0xc4504441 -+ DIOCRDELADDRS = 0xc4504444 -+ DIOCRDELTABLES = 0xc450443e -+ DIOCRGETADDRS = 0xc4504446 -+ DIOCRGETASTATS = 0xc4504447 -+ DIOCRGETTABLES = 0xc450443f -+ DIOCRGETTSTATS = 0xc4504440 -+ DIOCRINADEFINE = 0xc450444d -+ DIOCRSETADDRS = 0xc4504445 -+ DIOCRSETTFLAGS = 0xc450444a -+ DIOCRTSTADDRS = 0xc4504449 -+ DIOCSETDEBUG = 0xc0044418 -+ DIOCSETHOSTID = 0xc0044456 -+ DIOCSETIFFLAG = 0xc0284459 -+ DIOCSETLIMIT = 0xc0084428 -+ DIOCSETREASS = 0xc004445c -+ DIOCSETSTATUSIF = 0xc0284414 -+ DIOCSETSYNCOOKIES = 0xc0014462 -+ DIOCSETSYNFLWATS = 0xc0084461 -+ DIOCSETTIMEOUT = 0xc008441d -+ DIOCSTART = 0x20004401 -+ DIOCSTOP = 0x20004402 -+ DIOCXBEGIN = 0xc0104451 -+ DIOCXCOMMIT = 0xc0104452 -+ DIOCXROLLBACK = 0xc0104453 - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 -@@ -240,6 +308,8 @@ const ( - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 -+ ETH64_8021_RSVD_MASK = 0xfffffffffff0 -+ ETH64_8021_RSVD_PREFIX = 0x180c2000000 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 -@@ -292,6 +362,7 @@ const ( - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 -+ ETHERTYPE_EAPOL = 0x888e - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d -@@ -323,6 +394,7 @@ const ( - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 -+ ETHERTYPE_MACSEC = 0x88e5 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c -@@ -351,15 +423,17 @@ const ( - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 -+ ETHERTYPE_NHRP = 0x2001 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 -+ ETHERTYPE_NSH = 0x984f - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 -- ETHERTYPE_PAE = 0x888e -+ ETHERTYPE_PBB = 0x88e7 - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b -@@ -441,10 +515,11 @@ const ( - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 - EVFILT_DEVICE = -0x8 -+ EVFILT_EXCEPT = -0x9 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 -- EVFILT_SYSCOUNT = 0x8 -+ EVFILT_SYSCOUNT = 0x9 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 -@@ -466,7 +541,7 @@ const ( - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 -- EV_SYSFLAGS = 0xf000 -+ EV_SYSFLAGS = 0xf800 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 -@@ -732,6 +807,7 @@ const ( - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 -+ IFT_WIREGUARD = 0xfb - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 -@@ -797,9 +873,11 @@ const ( - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e -+ IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 -+ IPPROTO_UDPLITE = 0x88 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a -@@ -906,6 +984,9 @@ const ( - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 -+ ITIMER_PROF = 0x2 -+ ITIMER_REAL = 0x0 -+ ITIMER_VIRTUAL = 0x1 - IUCLC = 0x1000 - IXANY = 0x800 - IXOFF = 0x400 -@@ -970,12 +1051,26 @@ const ( - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x4000000 - MNT_STALLED = 0x100000 -+ MNT_SWAPPABLE = 0x200000 - MNT_SYNCHRONOUS = 0x2 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x400ffff - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 -+ MOUNT_AFS = "afs" -+ MOUNT_CD9660 = "cd9660" -+ MOUNT_EXT2FS = "ext2fs" -+ MOUNT_FFS = "ffs" -+ MOUNT_FUSEFS = "fuse" -+ MOUNT_MFS = "mfs" -+ MOUNT_MSDOS = "msdos" -+ MOUNT_NCPFS = "ncpfs" -+ MOUNT_NFS = "nfs" -+ MOUNT_NTFS = "ntfs" -+ MOUNT_TMPFS = "tmpfs" -+ MOUNT_UDF = "udf" -+ MOUNT_UFS = "ffs" - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 -@@ -988,6 +1083,7 @@ const ( - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 -+ MSG_WAITFORONE = 0x1000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 -@@ -996,7 +1092,8 @@ const ( - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFNAMES = 0x6 -- NET_RT_MAXID = 0x7 -+ NET_RT_MAXID = 0x8 -+ NET_RT_SOURCE = 0x7 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 -@@ -1013,6 +1110,7 @@ const ( - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 -+ NOTE_OOB = 0x4 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 -@@ -1130,9 +1228,11 @@ const ( - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_USETRAILERS = 0x8000 -+ RTM_80211INFO = 0x15 - RTM_ADD = 0x1 - RTM_BFD = 0x12 - RTM_CHANGE = 0x3 -+ RTM_CHGADDRATTR = 0x14 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DESYNC = 0x10 -@@ -1140,7 +1240,6 @@ const ( - RTM_IFANNOUNCE = 0xf - RTM_IFINFO = 0xe - RTM_INVALIDATE = 0x11 -- RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MAXSIZE = 0x800 - RTM_MISS = 0x7 -@@ -1148,7 +1247,7 @@ const ( - RTM_PROPOSAL = 0x13 - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb -- RTM_RTTUNIT = 0xf4240 -+ RTM_SOURCE = 0x16 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 -@@ -1166,6 +1265,9 @@ const ( - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 -+ SEEK_CUR = 0x1 -+ SEEK_END = 0x2 -+ SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 -@@ -1182,35 +1284,37 @@ const ( - SIOCBRDGDELS = 0x80606942 - SIOCBRDGFLUSH = 0x80606948 - SIOCBRDGFRL = 0x808c694e -- SIOCBRDGGCACHE = 0xc0186941 -- SIOCBRDGGFD = 0xc0186952 -- SIOCBRDGGHT = 0xc0186951 -+ SIOCBRDGGCACHE = 0xc0146941 -+ SIOCBRDGGFD = 0xc0146952 -+ SIOCBRDGGHT = 0xc0146951 - SIOCBRDGGIFFLGS = 0xc060693e -- SIOCBRDGGMA = 0xc0186953 -+ SIOCBRDGGMA = 0xc0146953 - SIOCBRDGGPARAM = 0xc0406958 -- SIOCBRDGGPRI = 0xc0186950 -+ SIOCBRDGGPRI = 0xc0146950 - SIOCBRDGGRL = 0xc030694f -- SIOCBRDGGTO = 0xc0186946 -+ SIOCBRDGGTO = 0xc0146946 - SIOCBRDGIFS = 0xc0606942 - SIOCBRDGRTS = 0xc0206943 - SIOCBRDGSADDR = 0xc1286944 -- SIOCBRDGSCACHE = 0x80186940 -- SIOCBRDGSFD = 0x80186952 -- SIOCBRDGSHT = 0x80186951 -+ SIOCBRDGSCACHE = 0x80146940 -+ SIOCBRDGSFD = 0x80146952 -+ SIOCBRDGSHT = 0x80146951 - SIOCBRDGSIFCOST = 0x80606955 - SIOCBRDGSIFFLGS = 0x8060693f - SIOCBRDGSIFPRIO = 0x80606954 - SIOCBRDGSIFPROT = 0x8060694a -- SIOCBRDGSMA = 0x80186953 -- SIOCBRDGSPRI = 0x80186950 -- SIOCBRDGSPROTO = 0x8018695a -- SIOCBRDGSTO = 0x80186945 -- SIOCBRDGSTXHC = 0x80186959 -+ SIOCBRDGSMA = 0x80146953 -+ SIOCBRDGSPRI = 0x80146950 -+ SIOCBRDGSPROTO = 0x8014695a -+ SIOCBRDGSTO = 0x80146945 -+ SIOCBRDGSTXHC = 0x80146959 -+ SIOCDELLABEL = 0x80206997 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPARENT = 0x802069b4 - SIOCDIFPHYADDR = 0x80206949 -+ SIOCDPWE3NEIGHBOR = 0x802069de - SIOCDVNETID = 0x802069af - SIOCGETKALIVE = 0xc01869a4 - SIOCGETLABEL = 0x8020699a -@@ -1229,6 +1333,7 @@ const ( - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGATTR = 0xc028698b - SIOCGIFGENERIC = 0xc020693a -+ SIOCGIFGLIST = 0xc028698d - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFHARDMTU = 0xc02069a5 -@@ -1243,13 +1348,21 @@ const ( - SIOCGIFRDOMAIN = 0xc02069a0 - SIOCGIFRTLABEL = 0xc0206983 - SIOCGIFRXR = 0x802069aa -+ SIOCGIFSFFPAGE = 0xc1126939 - SIOCGIFXFLAGS = 0xc020699e - SIOCGLIFPHYADDR = 0xc218694b - SIOCGLIFPHYDF = 0xc02069c2 -+ SIOCGLIFPHYECN = 0xc02069c8 - SIOCGLIFPHYRTABLE = 0xc02069a2 - SIOCGLIFPHYTTL = 0xc02069a9 - SIOCGPGRP = 0x40047309 -+ SIOCGPWE3 = 0xc0206998 -+ SIOCGPWE3CTRLWORD = 0xc02069dc -+ SIOCGPWE3FAT = 0xc02069dd -+ SIOCGPWE3NEIGHBOR = 0xc21869de -+ SIOCGRXHPRIO = 0xc02069db - SIOCGSPPPPARAMS = 0xc0206994 -+ SIOCGTXHPRIO = 0xc02069c6 - SIOCGUMBINFO = 0xc02069be - SIOCGUMBPARAM = 0xc02069c0 - SIOCGVH = 0xc02069f6 -@@ -1287,19 +1400,20 @@ const ( - SIOCSIFXFLAGS = 0x8020699d - SIOCSLIFPHYADDR = 0x8218694a - SIOCSLIFPHYDF = 0x802069c1 -+ SIOCSLIFPHYECN = 0x802069c7 - SIOCSLIFPHYRTABLE = 0x802069a1 - SIOCSLIFPHYTTL = 0x802069a8 - SIOCSPGRP = 0x80047308 -+ SIOCSPWE3CTRLWORD = 0x802069dc -+ SIOCSPWE3FAT = 0x802069dd -+ SIOCSPWE3NEIGHBOR = 0x821869de -+ SIOCSRXHPRIO = 0x802069db - SIOCSSPPPPARAMS = 0x80206993 -+ SIOCSTXHPRIO = 0x802069c5 - SIOCSUMBPARAM = 0x802069bf - SIOCSVH = 0xc02069f5 - SIOCSVNETFLOWID = 0x802069c3 - SIOCSVNETID = 0x802069a6 -- SIOCSWGDPID = 0xc018695b -- SIOCSWGMAXFLOW = 0xc0186960 -- SIOCSWGMAXGROUP = 0xc018695d -- SIOCSWSDPID = 0x8018695c -- SIOCSWSPORTNO = 0xc060695f - SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 - SOCK_DNS = 0x1000 -@@ -1314,6 +1428,7 @@ const ( - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 -+ SO_DOMAIN = 0x1024 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 -@@ -1321,6 +1436,7 @@ const ( - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 -+ SO_PROTOCOL = 0x1025 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 -@@ -1370,7 +1486,18 @@ const ( - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 -- TCP_MAXBURST = 0x4 -+ TCPOPT_EOL = 0x0 -+ TCPOPT_MAXSEG = 0x2 -+ TCPOPT_NOP = 0x1 -+ TCPOPT_SACK = 0x5 -+ TCPOPT_SACK_HDR = 0x1010500 -+ TCPOPT_SACK_PERMITTED = 0x4 -+ TCPOPT_SACK_PERMIT_HDR = 0x1010402 -+ TCPOPT_SIGNATURE = 0x13 -+ TCPOPT_TIMESTAMP = 0x8 -+ TCPOPT_TSTAMP_HDR = 0x101080a -+ TCPOPT_WINDOW = 0x3 -+ TCP_INFO = 0x9 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 -@@ -1379,8 +1506,11 @@ const ( - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 -+ TCP_SACKHOLE_LIMIT = 0x80 - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 -+ TIMER_ABSTIME = 0x1 -+ TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCHKVERAUTH = 0x2000741e -@@ -1445,7 +1575,6 @@ const ( - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 -- TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSTSTAMP = 0x8008745a - TIOCSWINSZ = 0x80087467 -@@ -1467,7 +1596,8 @@ const ( - VMIN = 0x10 - VM_ANONMIN = 0x7 - VM_LOADAVG = 0x2 -- VM_MAXID = 0xc -+ VM_MALLOC_CONF = 0xc -+ VM_MAXID = 0xd - VM_MAXSLP = 0xa - VM_METER = 0x1 - VM_NKMEMPAGES = 0x6 -@@ -1745,7 +1875,7 @@ var signalList = [...]struct { - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, -- {6, "SIGABRT", "abort trap"}, -+ {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, -@@ -1772,4 +1902,5 @@ var signalList = [...]struct { - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -+ {28672, "SIGSTKSZ", "unknown signal"}, - } -diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go -old mode 100644 -new mode 100755 -index aef6c08..8d44955 ---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go -@@ -46,6 +46,7 @@ const ( - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 -+ ALTWERASE = 0x200 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 -@@ -82,7 +83,7 @@ const ( - BIOCGFILDROP = 0x40044278 - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044273 -- BIOCGRTIMEOUT = 0x400c426e -+ BIOCGRTIMEOUT = 0x4010426e - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x20004276 -@@ -96,7 +97,7 @@ const ( - BIOCSFILDROP = 0x80044279 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044272 -- BIOCSRTIMEOUT = 0x800c426d -+ BIOCSRTIMEOUT = 0x8010426d - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 -@@ -108,6 +109,15 @@ const ( - BPF_DIRECTION_IN = 0x1 - BPF_DIRECTION_OUT = 0x2 - BPF_DIV = 0x30 -+ BPF_FILDROP_CAPTURE = 0x1 -+ BPF_FILDROP_DROP = 0x2 -+ BPF_FILDROP_PASS = 0x0 -+ BPF_F_DIR_IN = 0x10 -+ BPF_F_DIR_MASK = 0x30 -+ BPF_F_DIR_OUT = 0x20 -+ BPF_F_DIR_SHIFT = 0x4 -+ BPF_F_FLOWID = 0x8 -+ BPF_F_PRI_MASK = 0x7 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 -@@ -136,6 +146,7 @@ const ( - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 -+ BPF_RND = 0xc0 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 -@@ -147,6 +158,12 @@ const ( - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 -+ CLOCK_BOOTTIME = 0x6 -+ CLOCK_MONOTONIC = 0x3 -+ CLOCK_PROCESS_CPUTIME_ID = 0x2 -+ CLOCK_REALTIME = 0x0 -+ CLOCK_THREAD_CPUTIME_ID = 0x4 -+ CLOCK_UPTIME = 0x5 - CPUSTATES = 0x6 - CP_IDLE = 0x5 - CP_INTR = 0x4 -@@ -170,7 +187,65 @@ const ( - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 -+ DIOCADDQUEUE = 0xc100445d -+ DIOCADDRULE = 0xcce04404 -+ DIOCADDSTATE = 0xc1084425 -+ DIOCCHANGERULE = 0xcce0441a -+ DIOCCLRIFFLAG = 0xc024445a -+ DIOCCLRSRCNODES = 0x20004455 -+ DIOCCLRSTATES = 0xc0d04412 -+ DIOCCLRSTATUS = 0xc0244416 -+ DIOCGETLIMIT = 0xc0084427 -+ DIOCGETQSTATS = 0xc1084460 -+ DIOCGETQUEUE = 0xc100445f -+ DIOCGETQUEUES = 0xc100445e -+ DIOCGETRULE = 0xcce04407 -+ DIOCGETRULES = 0xcce04406 -+ DIOCGETRULESET = 0xc444443b -+ DIOCGETRULESETS = 0xc444443a -+ DIOCGETSRCNODES = 0xc0084454 -+ DIOCGETSTATE = 0xc1084413 -+ DIOCGETSTATES = 0xc0084419 -+ DIOCGETSTATUS = 0xc1e84415 -+ DIOCGETSYNFLWATS = 0xc0084463 -+ DIOCGETTIMEOUT = 0xc008441e -+ DIOCIGETIFACES = 0xc0244457 -+ DIOCKILLSRCNODES = 0xc068445b -+ DIOCKILLSTATES = 0xc0d04429 -+ DIOCNATLOOK = 0xc0504417 -+ DIOCOSFPADD = 0xc088444f - DIOCOSFPFLUSH = 0x2000444e -+ DIOCOSFPGET = 0xc0884450 -+ DIOCRADDADDRS = 0xc44c4443 -+ DIOCRADDTABLES = 0xc44c443d -+ DIOCRCLRADDRS = 0xc44c4442 -+ DIOCRCLRASTATS = 0xc44c4448 -+ DIOCRCLRTABLES = 0xc44c443c -+ DIOCRCLRTSTATS = 0xc44c4441 -+ DIOCRDELADDRS = 0xc44c4444 -+ DIOCRDELTABLES = 0xc44c443e -+ DIOCRGETADDRS = 0xc44c4446 -+ DIOCRGETASTATS = 0xc44c4447 -+ DIOCRGETTABLES = 0xc44c443f -+ DIOCRGETTSTATS = 0xc44c4440 -+ DIOCRINADEFINE = 0xc44c444d -+ DIOCRSETADDRS = 0xc44c4445 -+ DIOCRSETTFLAGS = 0xc44c444a -+ DIOCRTSTADDRS = 0xc44c4449 -+ DIOCSETDEBUG = 0xc0044418 -+ DIOCSETHOSTID = 0xc0044456 -+ DIOCSETIFFLAG = 0xc0244459 -+ DIOCSETLIMIT = 0xc0084428 -+ DIOCSETREASS = 0xc004445c -+ DIOCSETSTATUSIF = 0xc0244414 -+ DIOCSETSYNCOOKIES = 0xc0014462 -+ DIOCSETSYNFLWATS = 0xc0084461 -+ DIOCSETTIMEOUT = 0xc008441d -+ DIOCSTART = 0x20004401 -+ DIOCSTOP = 0x20004402 -+ DIOCXBEGIN = 0xc00c4451 -+ DIOCXCOMMIT = 0xc00c4452 -+ DIOCXROLLBACK = 0xc00c4453 - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 -@@ -186,6 +261,7 @@ const ( - DLT_LOOP = 0xc - DLT_MPLS = 0xdb - DLT_NULL = 0x0 -+ DLT_OPENFLOW = 0x10b - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPP = 0x9 -@@ -196,6 +272,23 @@ const ( - DLT_RAW = 0xe - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf -+ DLT_USBPCAP = 0xf9 -+ DLT_USER0 = 0x93 -+ DLT_USER1 = 0x94 -+ DLT_USER10 = 0x9d -+ DLT_USER11 = 0x9e -+ DLT_USER12 = 0x9f -+ DLT_USER13 = 0xa0 -+ DLT_USER14 = 0xa1 -+ DLT_USER15 = 0xa2 -+ DLT_USER2 = 0x95 -+ DLT_USER3 = 0x96 -+ DLT_USER4 = 0x97 -+ DLT_USER5 = 0x98 -+ DLT_USER6 = 0x99 -+ DLT_USER7 = 0x9a -+ DLT_USER8 = 0x9b -+ DLT_USER9 = 0x9c - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 -@@ -215,6 +308,8 @@ const ( - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 -+ ETH64_8021_RSVD_MASK = 0xfffffffffff0 -+ ETH64_8021_RSVD_PREFIX = 0x180c2000000 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 -@@ -267,6 +362,7 @@ const ( - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 -+ ETHERTYPE_EAPOL = 0x888e - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d -@@ -298,6 +394,7 @@ const ( - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 -+ ETHERTYPE_MACSEC = 0x88e5 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c -@@ -326,15 +423,17 @@ const ( - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 -+ ETHERTYPE_NHRP = 0x2001 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 -+ ETHERTYPE_NSH = 0x984f - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 -- ETHERTYPE_PAE = 0x888e -+ ETHERTYPE_PBB = 0x88e7 - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b -@@ -409,28 +508,40 @@ const ( - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_DIX_LEN = 0x600 -+ ETHER_MAX_HARDMTU_LEN = 0xff9b - ETHER_MAX_LEN = 0x5ee - ETHER_MIN_LEN = 0x40 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 -+ EVFILT_DEVICE = -0x8 -+ EVFILT_EXCEPT = -0x9 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 -- EVFILT_SYSCOUNT = 0x7 -+ EVFILT_SYSCOUNT = 0x9 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 -+ EVL_ENCAPLEN = 0x4 -+ EVL_PRIO_BITS = 0xd -+ EVL_PRIO_MAX = 0x7 -+ EVL_VLID_MASK = 0xfff -+ EVL_VLID_MAX = 0xffe -+ EVL_VLID_MIN = 0x1 -+ EVL_VLID_NULL = 0x0 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 -+ EV_DISPATCH = 0x80 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 -- EV_SYSFLAGS = 0xf000 -+ EV_RECEIPT = 0x40 -+ EV_SYSFLAGS = 0xf800 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 -@@ -443,6 +554,8 @@ const ( - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETOWN = 0x5 -+ F_ISATTY = 0xb -+ F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 -@@ -459,7 +572,6 @@ const ( - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 -- IFA_ROUTE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8e52 -@@ -470,12 +582,12 @@ const ( - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 -- IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 -+ IFF_STATICARP = 0x20 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 -@@ -604,6 +716,7 @@ const ( - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 -+ IFT_MBIM = 0xfa - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 -@@ -694,6 +807,7 @@ const ( - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 -+ IFT_WIREGUARD = 0xfb - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 -@@ -728,8 +842,6 @@ const ( - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DIVERT = 0x102 -- IPPROTO_DIVERT_INIT = 0x2 -- IPPROTO_DIVERT_RESP = 0x1 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 -@@ -761,9 +873,11 @@ const ( - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e -+ IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 -+ IPPROTO_UDPLITE = 0x88 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a -@@ -786,6 +900,7 @@ const ( - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff -+ IPV6_MINHOPCOUNT = 0x41 - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 -@@ -825,12 +940,12 @@ const ( - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 -- IP_DIVERTFL = 0x1022 - IP_DROP_MEMBERSHIP = 0xd - IP_ESP_NETWORK_LEVEL = 0x16 - IP_ESP_TRANS_LEVEL = 0x15 - IP_HDRINCL = 0x2 - IP_IPCOMP_LEVEL = 0x1d -+ IP_IPDEFTTL = 0x25 - IP_IPSECFLOWINFO = 0x24 - IP_IPSEC_LOCAL_AUTH = 0x1b - IP_IPSEC_LOCAL_CRED = 0x19 -@@ -864,10 +979,15 @@ const ( - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RTABLE = 0x1021 -+ IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 -+ ITIMER_PROF = 0x2 -+ ITIMER_REAL = 0x0 -+ ITIMER_VIRTUAL = 0x1 -+ IUCLC = 0x1000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 -@@ -922,6 +1042,7 @@ const ( - MNT_NOATIME = 0x8000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 -+ MNT_NOPERM = 0x20 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 -@@ -929,12 +1050,27 @@ const ( - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x4000000 -+ MNT_STALLED = 0x100000 -+ MNT_SWAPPABLE = 0x200000 - MNT_SYNCHRONOUS = 0x2 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x400ffff - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 -+ MOUNT_AFS = "afs" -+ MOUNT_CD9660 = "cd9660" -+ MOUNT_EXT2FS = "ext2fs" -+ MOUNT_FFS = "ffs" -+ MOUNT_FUSEFS = "fuse" -+ MOUNT_MFS = "mfs" -+ MOUNT_MSDOS = "msdos" -+ MOUNT_NCPFS = "ncpfs" -+ MOUNT_NFS = "nfs" -+ MOUNT_NTFS = "ntfs" -+ MOUNT_TMPFS = "tmpfs" -+ MOUNT_UDF = "udf" -+ MOUNT_UFS = "ffs" - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 -@@ -947,6 +1083,7 @@ const ( - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 -+ MSG_WAITFORONE = 0x1000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 -@@ -954,12 +1091,16 @@ const ( - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 -- NET_RT_MAXID = 0x6 -+ NET_RT_IFNAMES = 0x6 -+ NET_RT_MAXID = 0x8 -+ NET_RT_SOURCE = 0x7 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 - NOFLSH = 0x80000000 -+ NOKERNINFO = 0x2000000 - NOTE_ATTRIB = 0x8 -+ NOTE_CHANGE = 0x1 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EOF = 0x2 -@@ -969,6 +1110,7 @@ const ( - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 -+ NOTE_OOB = 0x4 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 -@@ -978,11 +1120,13 @@ const ( - NOTE_TRUNCATE = 0x80 - NOTE_WRITE = 0x2 - OCRNL = 0x10 -+ OLCUC = 0x20 - ONLCR = 0x2 - ONLRET = 0x80 - ONOCR = 0x40 - ONOEOT = 0x8 - OPOST = 0x1 -+ OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 -@@ -1027,19 +1171,25 @@ const ( - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 -+ RTAX_BFD = 0xb - RTAX_BRD = 0x7 -+ RTAX_DNS = 0xc - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_LABEL = 0xa -- RTAX_MAX = 0xb -+ RTAX_MAX = 0xf - RTAX_NETMASK = 0x2 -+ RTAX_SEARCH = 0xe - RTAX_SRC = 0x8 - RTAX_SRCMASK = 0x9 -+ RTAX_STATIC = 0xd - RTA_AUTHOR = 0x40 -+ RTA_BFD = 0x800 - RTA_BRD = 0x80 -+ RTA_DNS = 0x1000 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 -@@ -1047,24 +1197,29 @@ const ( - RTA_IFP = 0x10 - RTA_LABEL = 0x400 - RTA_NETMASK = 0x4 -+ RTA_SEARCH = 0x4000 - RTA_SRC = 0x100 - RTA_SRCMASK = 0x200 -+ RTA_STATIC = 0x2000 - RTF_ANNOUNCE = 0x4000 -+ RTF_BFD = 0x1000000 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 -+ RTF_CACHED = 0x20000 - RTF_CLONED = 0x10000 - RTF_CLONING = 0x100 -+ RTF_CONNECTED = 0x800000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 -- RTF_FMASK = 0x70f808 -+ RTF_FMASK = 0x110fc08 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 -- RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_MPATH = 0x40000 - RTF_MPLS = 0x100000 -+ RTF_MULTICAST = 0x200 - RTF_PERMANENT_ARP = 0x2000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 -@@ -1073,23 +1228,26 @@ const ( - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_USETRAILERS = 0x8000 -- RTF_XRESOLVE = 0x200 -+ RTM_80211INFO = 0x15 - RTM_ADD = 0x1 -+ RTM_BFD = 0x12 - RTM_CHANGE = 0x3 -+ RTM_CHGADDRATTR = 0x14 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DESYNC = 0x10 - RTM_GET = 0x4 - RTM_IFANNOUNCE = 0xf - RTM_IFINFO = 0xe -- RTM_LOCK = 0x8 -+ RTM_INVALIDATE = 0x11 - RTM_LOSING = 0x5 - RTM_MAXSIZE = 0x800 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc -+ RTM_PROPOSAL = 0x13 - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb -- RTM_RTTUNIT = 0xf4240 -+ RTM_SOURCE = 0x16 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 -@@ -1099,67 +1257,74 @@ const ( - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 -+ RT_TABLEID_BITS = 0x8 -+ RT_TABLEID_MASK = 0xff - RT_TABLEID_MAX = 0xff - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 -+ SEEK_CUR = 0x1 -+ SEEK_END = 0x2 -+ SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80246987 -- SIOCALIFADDR = 0x8218691c - SIOCATMARK = 0x40047307 -- SIOCBRDGADD = 0x8054693c -- SIOCBRDGADDS = 0x80546941 -- SIOCBRDGARL = 0x806e694d -+ SIOCBRDGADD = 0x8060693c -+ SIOCBRDGADDL = 0x80606949 -+ SIOCBRDGADDS = 0x80606941 -+ SIOCBRDGARL = 0x808c694d - SIOCBRDGDADDR = 0x81286947 -- SIOCBRDGDEL = 0x8054693d -- SIOCBRDGDELS = 0x80546942 -- SIOCBRDGFLUSH = 0x80546948 -- SIOCBRDGFRL = 0x806e694e -+ SIOCBRDGDEL = 0x8060693d -+ SIOCBRDGDELS = 0x80606942 -+ SIOCBRDGFLUSH = 0x80606948 -+ SIOCBRDGFRL = 0x808c694e - SIOCBRDGGCACHE = 0xc0146941 - SIOCBRDGGFD = 0xc0146952 - SIOCBRDGGHT = 0xc0146951 -- SIOCBRDGGIFFLGS = 0xc054693e -+ SIOCBRDGGIFFLGS = 0xc060693e - SIOCBRDGGMA = 0xc0146953 -- SIOCBRDGGPARAM = 0xc03c6958 -+ SIOCBRDGGPARAM = 0xc0406958 - SIOCBRDGGPRI = 0xc0146950 - SIOCBRDGGRL = 0xc028694f -- SIOCBRDGGSIFS = 0xc054693c - SIOCBRDGGTO = 0xc0146946 -- SIOCBRDGIFS = 0xc0546942 -+ SIOCBRDGIFS = 0xc0606942 - SIOCBRDGRTS = 0xc0186943 - SIOCBRDGSADDR = 0xc1286944 - SIOCBRDGSCACHE = 0x80146940 - SIOCBRDGSFD = 0x80146952 - SIOCBRDGSHT = 0x80146951 -- SIOCBRDGSIFCOST = 0x80546955 -- SIOCBRDGSIFFLGS = 0x8054693f -- SIOCBRDGSIFPRIO = 0x80546954 -+ SIOCBRDGSIFCOST = 0x80606955 -+ SIOCBRDGSIFFLGS = 0x8060693f -+ SIOCBRDGSIFPRIO = 0x80606954 -+ SIOCBRDGSIFPROT = 0x8060694a - SIOCBRDGSMA = 0x80146953 - SIOCBRDGSPRI = 0x80146950 - SIOCBRDGSPROTO = 0x8014695a - SIOCBRDGSTO = 0x80146945 - SIOCBRDGSTXHC = 0x80146959 -+ SIOCDELLABEL = 0x80206997 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80246989 -+ SIOCDIFPARENT = 0x802069b4 - SIOCDIFPHYADDR = 0x80206949 -- SIOCDLIFADDR = 0x8218691e -+ SIOCDPWE3NEIGHBOR = 0x802069de -+ SIOCDVNETID = 0x802069af - SIOCGETKALIVE = 0xc01869a4 - SIOCGETLABEL = 0x8020699a -+ SIOCGETMPWCFG = 0xc02069ae - SIOCGETPFLOW = 0xc02069fe - SIOCGETPFSYNC = 0xc02069f8 - SIOCGETSGCNT = 0xc0147534 - SIOCGETVIFCNT = 0xc0147533 - SIOCGETVLAN = 0xc0206990 -- SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 -- SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCONF = 0xc0086924 - SIOCGIFDATA = 0xc020691b -@@ -1168,41 +1333,53 @@ const ( - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGATTR = 0xc024698b - SIOCGIFGENERIC = 0xc020693a -+ SIOCGIFGLIST = 0xc024698d - SIOCGIFGMEMB = 0xc024698a - SIOCGIFGROUP = 0xc0246988 - SIOCGIFHARDMTU = 0xc02069a5 -- SIOCGIFMEDIA = 0xc0286936 -+ SIOCGIFLLPRIO = 0xc02069b6 -+ SIOCGIFMEDIA = 0xc0386938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc020697e - SIOCGIFNETMASK = 0xc0206925 -- SIOCGIFPDSTADDR = 0xc0206948 -+ SIOCGIFPAIR = 0xc02069b1 -+ SIOCGIFPARENT = 0xc02069b3 - SIOCGIFPRIORITY = 0xc020699c -- SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRDOMAIN = 0xc02069a0 - SIOCGIFRTLABEL = 0xc0206983 - SIOCGIFRXR = 0x802069aa -- SIOCGIFTIMESLOT = 0xc0206986 -+ SIOCGIFSFFPAGE = 0xc1126939 - SIOCGIFXFLAGS = 0xc020699e -- SIOCGLIFADDR = 0xc218691d - SIOCGLIFPHYADDR = 0xc218694b -+ SIOCGLIFPHYDF = 0xc02069c2 -+ SIOCGLIFPHYECN = 0xc02069c8 - SIOCGLIFPHYRTABLE = 0xc02069a2 - SIOCGLIFPHYTTL = 0xc02069a9 -- SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 -+ SIOCGPWE3 = 0xc0206998 -+ SIOCGPWE3CTRLWORD = 0xc02069dc -+ SIOCGPWE3FAT = 0xc02069dd -+ SIOCGPWE3NEIGHBOR = 0xc21869de -+ SIOCGRXHPRIO = 0xc02069db - SIOCGSPPPPARAMS = 0xc0206994 -+ SIOCGTXHPRIO = 0xc02069c6 -+ SIOCGUMBINFO = 0xc02069be -+ SIOCGUMBPARAM = 0xc02069c0 - SIOCGVH = 0xc02069f6 -+ SIOCGVNETFLOWID = 0xc02069c4 - SIOCGVNETID = 0xc02069a7 -+ SIOCIFAFATTACH = 0x801169ab -+ SIOCIFAFDETACH = 0x801169ac - SIOCIFCREATE = 0x8020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCSETKALIVE = 0x801869a3 - SIOCSETLABEL = 0x80206999 -+ SIOCSETMPWCFG = 0x802069ad - SIOCSETPFLOW = 0x802069fd - SIOCSETPFSYNC = 0x802069f7 - SIOCSETVLAN = 0x8020698f -- SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c -- SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFDESCR = 0x80206980 - SIOCSIFDSTADDR = 0x8020690e -@@ -1210,26 +1387,36 @@ const ( - SIOCSIFGATTR = 0x8024698c - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020691f -- SIOCSIFMEDIA = 0xc0206935 -+ SIOCSIFLLPRIO = 0x802069b5 -+ SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x8020697f - SIOCSIFNETMASK = 0x80206916 -- SIOCSIFPHYADDR = 0x80406946 -+ SIOCSIFPAIR = 0x802069b0 -+ SIOCSIFPARENT = 0x802069b2 - SIOCSIFPRIORITY = 0x8020699b - SIOCSIFRDOMAIN = 0x8020699f - SIOCSIFRTLABEL = 0x80206982 -- SIOCSIFTIMESLOT = 0x80206985 - SIOCSIFXFLAGS = 0x8020699d - SIOCSLIFPHYADDR = 0x8218694a -+ SIOCSLIFPHYDF = 0x802069c1 -+ SIOCSLIFPHYECN = 0x802069c7 - SIOCSLIFPHYRTABLE = 0x802069a1 - SIOCSLIFPHYTTL = 0x802069a8 -- SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 -+ SIOCSPWE3CTRLWORD = 0x802069dc -+ SIOCSPWE3FAT = 0x802069dd -+ SIOCSPWE3NEIGHBOR = 0x821869de -+ SIOCSRXHPRIO = 0x802069db - SIOCSSPPPPARAMS = 0x80206993 -+ SIOCSTXHPRIO = 0x802069c5 -+ SIOCSUMBPARAM = 0x802069bf - SIOCSVH = 0xc02069f5 -+ SIOCSVNETFLOWID = 0x802069c3 - SIOCSVNETID = 0x802069a6 - SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 -+ SOCK_DNS = 0x1000 - SOCK_NONBLOCK = 0x4000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 -@@ -1241,6 +1428,7 @@ const ( - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 -+ SO_DOMAIN = 0x1024 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 -@@ -1248,6 +1436,7 @@ const ( - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 -+ SO_PROTOCOL = 0x1025 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 -@@ -1261,6 +1450,7 @@ const ( - SO_TIMESTAMP = 0x800 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 -+ SO_ZEROIZE = 0x2000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 -@@ -1290,9 +1480,24 @@ const ( - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TCIFLUSH = 0x1 -+ TCIOFF = 0x3 - TCIOFLUSH = 0x3 -+ TCION = 0x4 - TCOFLUSH = 0x2 -- TCP_MAXBURST = 0x4 -+ TCOOFF = 0x1 -+ TCOON = 0x2 -+ TCPOPT_EOL = 0x0 -+ TCPOPT_MAXSEG = 0x2 -+ TCPOPT_NOP = 0x1 -+ TCPOPT_SACK = 0x5 -+ TCPOPT_SACK_HDR = 0x1010500 -+ TCPOPT_SACK_PERMITTED = 0x4 -+ TCPOPT_SACK_PERMIT_HDR = 0x1010402 -+ TCPOPT_SIGNATURE = 0x13 -+ TCPOPT_TIMESTAMP = 0x8 -+ TCPOPT_TSTAMP_HDR = 0x101080a -+ TCPOPT_WINDOW = 0x3 -+ TCP_INFO = 0x9 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 -@@ -1301,11 +1506,15 @@ const ( - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 -- TCP_NSTATES = 0xb -+ TCP_SACKHOLE_LIMIT = 0x80 - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 -+ TIMER_ABSTIME = 0x1 -+ TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 -+ TIOCCHKVERAUTH = 0x2000741e -+ TIOCCLRVERAUTH = 0x2000741d - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d -@@ -1321,7 +1530,7 @@ const ( - TIOCGFLAGS = 0x4004745d - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047463 -- TIOCGTSTAMP = 0x400c745b -+ TIOCGTSTAMP = 0x4010745b - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c -@@ -1360,17 +1569,21 @@ const ( - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b -+ TIOCSETVERAUTH = 0x8004741c - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x8004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e -- TIOCSTAT = 0x80047465 -- TIOCSTI = 0x80017472 -+ TIOCSTAT = 0x20007465 - TIOCSTOP = 0x2000746f - TIOCSTSTAMP = 0x8008745a - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 -+ TIOCUCNTL_CBRK = 0x7a -+ TIOCUCNTL_SBRK = 0x7b - TOSTOP = 0x400000 -+ UTIME_NOW = -0x2 -+ UTIME_OMIT = -0x1 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 -@@ -1381,6 +1594,19 @@ const ( - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 -+ VM_ANONMIN = 0x7 -+ VM_LOADAVG = 0x2 -+ VM_MALLOC_CONF = 0xc -+ VM_MAXID = 0xd -+ VM_MAXSLP = 0xa -+ VM_METER = 0x1 -+ VM_NKMEMPAGES = 0x6 -+ VM_PSSTRINGS = 0x3 -+ VM_SWAPENCRYPT = 0x5 -+ VM_USPACE = 0xb -+ VM_UVMEXP = 0x4 -+ VM_VNODEMIN = 0x9 -+ VM_VTEXTMIN = 0x8 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc -@@ -1394,6 +1620,7 @@ const ( - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WUNTRACED = 0x2 -+ XCASE = 0x1000000 - ) - - // Errors -@@ -1407,6 +1634,7 @@ const ( - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) -+ EBADMSG = syscall.Errno(0x5c) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x58) -@@ -1433,7 +1661,7 @@ const ( - EIPSEC = syscall.Errno(0x52) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) -- ELAST = syscall.Errno(0x5b) -+ ELAST = syscall.Errno(0x5f) - ELOOP = syscall.Errno(0x3e) - EMEDIUMTYPE = syscall.Errno(0x56) - EMFILE = syscall.Errno(0x18) -@@ -1461,12 +1689,14 @@ const ( - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) -+ ENOTRECOVERABLE = syscall.Errno(0x5d) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x5b) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x57) -+ EOWNERDEAD = syscall.Errno(0x5e) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) -@@ -1474,6 +1704,7 @@ const ( - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) -+ EPROTO = syscall.Errno(0x5f) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) -@@ -1570,7 +1801,7 @@ var errorList = [...]struct { - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, -- {35, "EWOULDBLOCK", "resource temporarily unavailable"}, -+ {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, -@@ -1626,7 +1857,11 @@ var errorList = [...]struct { - {88, "ECANCELED", "operation canceled"}, - {89, "EIDRM", "identifier removed"}, - {90, "ENOMSG", "no message of desired type"}, -- {91, "ELAST", "not supported"}, -+ {91, "ENOTSUP", "not supported"}, -+ {92, "EBADMSG", "bad message"}, -+ {93, "ENOTRECOVERABLE", "state not recoverable"}, -+ {94, "EOWNERDEAD", "previous owner died"}, -+ {95, "ELAST", "protocol error"}, - } - - // Signal table -@@ -1640,7 +1875,7 @@ var signalList = [...]struct { - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, -- {6, "SIGABRT", "abort trap"}, -+ {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, -@@ -1667,4 +1902,5 @@ var signalList = [...]struct { - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -+ {28672, "SIGSTKSZ", "unknown signal"}, - } -diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go -old mode 100644 -new mode 100755 -index 90de7df..ae16fe7 ---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go -@@ -112,6 +112,12 @@ const ( - BPF_FILDROP_CAPTURE = 0x1 - BPF_FILDROP_DROP = 0x2 - BPF_FILDROP_PASS = 0x0 -+ BPF_F_DIR_IN = 0x10 -+ BPF_F_DIR_MASK = 0x30 -+ BPF_F_DIR_OUT = 0x20 -+ BPF_F_DIR_SHIFT = 0x4 -+ BPF_F_FLOWID = 0x8 -+ BPF_F_PRI_MASK = 0x7 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 -@@ -140,6 +146,7 @@ const ( - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 -+ BPF_RND = 0xc0 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 -@@ -180,7 +187,65 @@ const ( - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 -+ DIOCADDQUEUE = 0xc110445d -+ DIOCADDRULE = 0xcd604404 -+ DIOCADDSTATE = 0xc1084425 -+ DIOCCHANGERULE = 0xcd60441a -+ DIOCCLRIFFLAG = 0xc028445a -+ DIOCCLRSRCNODES = 0x20004455 -+ DIOCCLRSTATES = 0xc0e04412 -+ DIOCCLRSTATUS = 0xc0284416 -+ DIOCGETLIMIT = 0xc0084427 -+ DIOCGETQSTATS = 0xc1204460 -+ DIOCGETQUEUE = 0xc110445f -+ DIOCGETQUEUES = 0xc110445e -+ DIOCGETRULE = 0xcd604407 -+ DIOCGETRULES = 0xcd604406 -+ DIOCGETRULESET = 0xc444443b -+ DIOCGETRULESETS = 0xc444443a -+ DIOCGETSRCNODES = 0xc0104454 -+ DIOCGETSTATE = 0xc1084413 -+ DIOCGETSTATES = 0xc0104419 -+ DIOCGETSTATUS = 0xc1e84415 -+ DIOCGETSYNFLWATS = 0xc0084463 -+ DIOCGETTIMEOUT = 0xc008441e -+ DIOCIGETIFACES = 0xc0284457 -+ DIOCKILLSRCNODES = 0xc080445b -+ DIOCKILLSTATES = 0xc0e04429 -+ DIOCNATLOOK = 0xc0504417 -+ DIOCOSFPADD = 0xc088444f - DIOCOSFPFLUSH = 0x2000444e -+ DIOCOSFPGET = 0xc0884450 -+ DIOCRADDADDRS = 0xc4504443 -+ DIOCRADDTABLES = 0xc450443d -+ DIOCRCLRADDRS = 0xc4504442 -+ DIOCRCLRASTATS = 0xc4504448 -+ DIOCRCLRTABLES = 0xc450443c -+ DIOCRCLRTSTATS = 0xc4504441 -+ DIOCRDELADDRS = 0xc4504444 -+ DIOCRDELTABLES = 0xc450443e -+ DIOCRGETADDRS = 0xc4504446 -+ DIOCRGETASTATS = 0xc4504447 -+ DIOCRGETTABLES = 0xc450443f -+ DIOCRGETTSTATS = 0xc4504440 -+ DIOCRINADEFINE = 0xc450444d -+ DIOCRSETADDRS = 0xc4504445 -+ DIOCRSETTFLAGS = 0xc450444a -+ DIOCRTSTADDRS = 0xc4504449 -+ DIOCSETDEBUG = 0xc0044418 -+ DIOCSETHOSTID = 0xc0044456 -+ DIOCSETIFFLAG = 0xc0284459 -+ DIOCSETLIMIT = 0xc0084428 -+ DIOCSETREASS = 0xc004445c -+ DIOCSETSTATUSIF = 0xc0284414 -+ DIOCSETSYNCOOKIES = 0xc0014462 -+ DIOCSETSYNFLWATS = 0xc0084461 -+ DIOCSETTIMEOUT = 0xc008441d -+ DIOCSTART = 0x20004401 -+ DIOCSTOP = 0x20004402 -+ DIOCXBEGIN = 0xc0104451 -+ DIOCXCOMMIT = 0xc0104452 -+ DIOCXROLLBACK = 0xc0104453 - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 -@@ -243,6 +308,8 @@ const ( - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 -+ ETH64_8021_RSVD_MASK = 0xfffffffffff0 -+ ETH64_8021_RSVD_PREFIX = 0x180c2000000 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 -@@ -295,6 +362,7 @@ const ( - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 -+ ETHERTYPE_EAPOL = 0x888e - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d -@@ -326,6 +394,7 @@ const ( - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 -+ ETHERTYPE_MACSEC = 0x88e5 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c -@@ -354,15 +423,16 @@ const ( - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 -+ ETHERTYPE_NHRP = 0x2001 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 -+ ETHERTYPE_NSH = 0x984f - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 -- ETHERTYPE_PAE = 0x888e - ETHERTYPE_PBB = 0x88e7 - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 -@@ -445,10 +515,11 @@ const ( - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 - EVFILT_DEVICE = -0x8 -+ EVFILT_EXCEPT = -0x9 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 -- EVFILT_SYSCOUNT = 0x8 -+ EVFILT_SYSCOUNT = 0x9 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 -@@ -470,7 +541,7 @@ const ( - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 -- EV_SYSFLAGS = 0xf000 -+ EV_SYSFLAGS = 0xf800 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 -@@ -736,6 +807,7 @@ const ( - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 -+ IFT_WIREGUARD = 0xfb - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 -@@ -801,9 +873,11 @@ const ( - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e -+ IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 -+ IPPROTO_UDPLITE = 0x88 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a -@@ -910,6 +984,9 @@ const ( - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 -+ ITIMER_PROF = 0x2 -+ ITIMER_REAL = 0x0 -+ ITIMER_VIRTUAL = 0x1 - IUCLC = 0x1000 - IXANY = 0x800 - IXOFF = 0x400 -@@ -981,6 +1058,19 @@ const ( - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 -+ MOUNT_AFS = "afs" -+ MOUNT_CD9660 = "cd9660" -+ MOUNT_EXT2FS = "ext2fs" -+ MOUNT_FFS = "ffs" -+ MOUNT_FUSEFS = "fuse" -+ MOUNT_MFS = "mfs" -+ MOUNT_MSDOS = "msdos" -+ MOUNT_NCPFS = "ncpfs" -+ MOUNT_NFS = "nfs" -+ MOUNT_NTFS = "ntfs" -+ MOUNT_TMPFS = "tmpfs" -+ MOUNT_UDF = "udf" -+ MOUNT_UFS = "ffs" - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 -@@ -993,6 +1083,7 @@ const ( - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 -+ MSG_WAITFORONE = 0x1000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 -@@ -1001,7 +1092,8 @@ const ( - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFNAMES = 0x6 -- NET_RT_MAXID = 0x7 -+ NET_RT_MAXID = 0x8 -+ NET_RT_SOURCE = 0x7 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 -@@ -1018,6 +1110,7 @@ const ( - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 -+ NOTE_OOB = 0x4 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 -@@ -1154,7 +1247,7 @@ const ( - RTM_PROPOSAL = 0x13 - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb -- RTM_RTTUNIT = 0xf4240 -+ RTM_SOURCE = 0x16 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 -@@ -1172,6 +1265,9 @@ const ( - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 -+ SEEK_CUR = 0x1 -+ SEEK_END = 0x2 -+ SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 -@@ -1188,30 +1284,30 @@ const ( - SIOCBRDGDELS = 0x80606942 - SIOCBRDGFLUSH = 0x80606948 - SIOCBRDGFRL = 0x808c694e -- SIOCBRDGGCACHE = 0xc0186941 -- SIOCBRDGGFD = 0xc0186952 -- SIOCBRDGGHT = 0xc0186951 -+ SIOCBRDGGCACHE = 0xc0146941 -+ SIOCBRDGGFD = 0xc0146952 -+ SIOCBRDGGHT = 0xc0146951 - SIOCBRDGGIFFLGS = 0xc060693e -- SIOCBRDGGMA = 0xc0186953 -+ SIOCBRDGGMA = 0xc0146953 - SIOCBRDGGPARAM = 0xc0406958 -- SIOCBRDGGPRI = 0xc0186950 -+ SIOCBRDGGPRI = 0xc0146950 - SIOCBRDGGRL = 0xc030694f -- SIOCBRDGGTO = 0xc0186946 -+ SIOCBRDGGTO = 0xc0146946 - SIOCBRDGIFS = 0xc0606942 - SIOCBRDGRTS = 0xc0206943 - SIOCBRDGSADDR = 0xc1286944 -- SIOCBRDGSCACHE = 0x80186940 -- SIOCBRDGSFD = 0x80186952 -- SIOCBRDGSHT = 0x80186951 -+ SIOCBRDGSCACHE = 0x80146940 -+ SIOCBRDGSFD = 0x80146952 -+ SIOCBRDGSHT = 0x80146951 - SIOCBRDGSIFCOST = 0x80606955 - SIOCBRDGSIFFLGS = 0x8060693f - SIOCBRDGSIFPRIO = 0x80606954 - SIOCBRDGSIFPROT = 0x8060694a -- SIOCBRDGSMA = 0x80186953 -- SIOCBRDGSPRI = 0x80186950 -- SIOCBRDGSPROTO = 0x8018695a -- SIOCBRDGSTO = 0x80186945 -- SIOCBRDGSTXHC = 0x80186959 -+ SIOCBRDGSMA = 0x80146953 -+ SIOCBRDGSPRI = 0x80146950 -+ SIOCBRDGSPROTO = 0x8014695a -+ SIOCBRDGSTO = 0x80146945 -+ SIOCBRDGSTXHC = 0x80146959 - SIOCDELLABEL = 0x80206997 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 -@@ -1264,6 +1360,7 @@ const ( - SIOCGPWE3CTRLWORD = 0xc02069dc - SIOCGPWE3FAT = 0xc02069dd - SIOCGPWE3NEIGHBOR = 0xc21869de -+ SIOCGRXHPRIO = 0xc02069db - SIOCGSPPPPARAMS = 0xc0206994 - SIOCGTXHPRIO = 0xc02069c6 - SIOCGUMBINFO = 0xc02069be -@@ -1310,17 +1407,13 @@ const ( - SIOCSPWE3CTRLWORD = 0x802069dc - SIOCSPWE3FAT = 0x802069dd - SIOCSPWE3NEIGHBOR = 0x821869de -+ SIOCSRXHPRIO = 0x802069db - SIOCSSPPPPARAMS = 0x80206993 - SIOCSTXHPRIO = 0x802069c5 - SIOCSUMBPARAM = 0x802069bf - SIOCSVH = 0xc02069f5 - SIOCSVNETFLOWID = 0x802069c3 - SIOCSVNETID = 0x802069a6 -- SIOCSWGDPID = 0xc018695b -- SIOCSWGMAXFLOW = 0xc0186960 -- SIOCSWGMAXGROUP = 0xc018695d -- SIOCSWSDPID = 0x8018695c -- SIOCSWSPORTNO = 0xc060695f - SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 - SOCK_DNS = 0x1000 -@@ -1335,6 +1428,7 @@ const ( - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 -+ SO_DOMAIN = 0x1024 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 -@@ -1342,6 +1436,7 @@ const ( - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 -+ SO_PROTOCOL = 0x1025 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 -@@ -1391,7 +1486,18 @@ const ( - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 -- TCP_MAXBURST = 0x4 -+ TCPOPT_EOL = 0x0 -+ TCPOPT_MAXSEG = 0x2 -+ TCPOPT_NOP = 0x1 -+ TCPOPT_SACK = 0x5 -+ TCPOPT_SACK_HDR = 0x1010500 -+ TCPOPT_SACK_PERMITTED = 0x4 -+ TCPOPT_SACK_PERMIT_HDR = 0x1010402 -+ TCPOPT_SIGNATURE = 0x13 -+ TCPOPT_TIMESTAMP = 0x8 -+ TCPOPT_TSTAMP_HDR = 0x101080a -+ TCPOPT_WINDOW = 0x3 -+ TCP_INFO = 0x9 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 -@@ -1400,6 +1506,7 @@ const ( - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 -+ TCP_SACKHOLE_LIMIT = 0x80 - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 -@@ -1768,7 +1875,7 @@ var signalList = [...]struct { - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, -- {6, "SIGABRT", "abort trap"}, -+ {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, -@@ -1795,4 +1902,5 @@ var signalList = [...]struct { - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -+ {28672, "SIGSTKSZ", "unknown signal"}, - } -diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go -old mode 100644 -new mode 100755 -index f1154ff..03d90fe ---- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go -+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go -@@ -112,6 +112,12 @@ const ( - BPF_FILDROP_CAPTURE = 0x1 - BPF_FILDROP_DROP = 0x2 - BPF_FILDROP_PASS = 0x0 -+ BPF_F_DIR_IN = 0x10 -+ BPF_F_DIR_MASK = 0x30 -+ BPF_F_DIR_OUT = 0x20 -+ BPF_F_DIR_SHIFT = 0x4 -+ BPF_F_FLOWID = 0x8 -+ BPF_F_PRI_MASK = 0x7 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 -@@ -140,6 +146,7 @@ const ( - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 -+ BPF_RND = 0xc0 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 -@@ -301,6 +308,8 @@ const ( - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 -+ ETH64_8021_RSVD_MASK = 0xfffffffffff0 -+ ETH64_8021_RSVD_PREFIX = 0x180c2000000 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 -@@ -353,6 +362,7 @@ const ( - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 -+ ETHERTYPE_EAPOL = 0x888e - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d -@@ -413,15 +423,16 @@ const ( - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 -+ ETHERTYPE_NHRP = 0x2001 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 -+ ETHERTYPE_NSH = 0x984f - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 -- ETHERTYPE_PAE = 0x888e - ETHERTYPE_PBB = 0x88e7 - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 -@@ -504,10 +515,11 @@ const ( - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 - EVFILT_DEVICE = -0x8 -+ EVFILT_EXCEPT = -0x9 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 -- EVFILT_SYSCOUNT = 0x8 -+ EVFILT_SYSCOUNT = 0x9 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 -@@ -529,7 +541,7 @@ const ( - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 -- EV_SYSFLAGS = 0xf000 -+ EV_SYSFLAGS = 0xf800 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 -@@ -795,6 +807,7 @@ const ( - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 -+ IFT_WIREGUARD = 0xfb - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 -@@ -860,6 +873,7 @@ const ( - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e -+ IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 -@@ -970,6 +984,9 @@ const ( - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 -+ ITIMER_PROF = 0x2 -+ ITIMER_REAL = 0x0 -+ ITIMER_VIRTUAL = 0x1 - IUCLC = 0x1000 - IXANY = 0x800 - IXOFF = 0x400 -@@ -1041,6 +1058,19 @@ const ( - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 -+ MOUNT_AFS = "afs" -+ MOUNT_CD9660 = "cd9660" -+ MOUNT_EXT2FS = "ext2fs" -+ MOUNT_FFS = "ffs" -+ MOUNT_FUSEFS = "fuse" -+ MOUNT_MFS = "mfs" -+ MOUNT_MSDOS = "msdos" -+ MOUNT_NCPFS = "ncpfs" -+ MOUNT_NFS = "nfs" -+ MOUNT_NTFS = "ntfs" -+ MOUNT_TMPFS = "tmpfs" -+ MOUNT_UDF = "udf" -+ MOUNT_UFS = "ffs" - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 -@@ -1053,6 +1083,7 @@ const ( - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 -+ MSG_WAITFORONE = 0x1000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 -@@ -1061,7 +1092,8 @@ const ( - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFNAMES = 0x6 -- NET_RT_MAXID = 0x7 -+ NET_RT_MAXID = 0x8 -+ NET_RT_SOURCE = 0x7 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 -@@ -1078,6 +1110,7 @@ const ( - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 -+ NOTE_OOB = 0x4 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 -@@ -1214,7 +1247,7 @@ const ( - RTM_PROPOSAL = 0x13 - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb -- RTM_RTTUNIT = 0xf4240 -+ RTM_SOURCE = 0x16 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 -@@ -1232,6 +1265,9 @@ const ( - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 -+ SEEK_CUR = 0x1 -+ SEEK_END = 0x2 -+ SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 -@@ -1248,30 +1284,30 @@ const ( - SIOCBRDGDELS = 0x80606942 - SIOCBRDGFLUSH = 0x80606948 - SIOCBRDGFRL = 0x808c694e -- SIOCBRDGGCACHE = 0xc0186941 -- SIOCBRDGGFD = 0xc0186952 -- SIOCBRDGGHT = 0xc0186951 -+ SIOCBRDGGCACHE = 0xc0146941 -+ SIOCBRDGGFD = 0xc0146952 -+ SIOCBRDGGHT = 0xc0146951 - SIOCBRDGGIFFLGS = 0xc060693e -- SIOCBRDGGMA = 0xc0186953 -+ SIOCBRDGGMA = 0xc0146953 - SIOCBRDGGPARAM = 0xc0406958 -- SIOCBRDGGPRI = 0xc0186950 -+ SIOCBRDGGPRI = 0xc0146950 - SIOCBRDGGRL = 0xc030694f -- SIOCBRDGGTO = 0xc0186946 -+ SIOCBRDGGTO = 0xc0146946 - SIOCBRDGIFS = 0xc0606942 - SIOCBRDGRTS = 0xc0206943 - SIOCBRDGSADDR = 0xc1286944 -- SIOCBRDGSCACHE = 0x80186940 -- SIOCBRDGSFD = 0x80186952 -- SIOCBRDGSHT = 0x80186951 -+ SIOCBRDGSCACHE = 0x80146940 -+ SIOCBRDGSFD = 0x80146952 -+ SIOCBRDGSHT = 0x80146951 - SIOCBRDGSIFCOST = 0x80606955 - SIOCBRDGSIFFLGS = 0x8060693f - SIOCBRDGSIFPRIO = 0x80606954 - SIOCBRDGSIFPROT = 0x8060694a -- SIOCBRDGSMA = 0x80186953 -- SIOCBRDGSPRI = 0x80186950 -- SIOCBRDGSPROTO = 0x8018695a -- SIOCBRDGSTO = 0x80186945 -- SIOCBRDGSTXHC = 0x80186959 -+ SIOCBRDGSMA = 0x80146953 -+ SIOCBRDGSPRI = 0x80146950 -+ SIOCBRDGSPROTO = 0x8014695a -+ SIOCBRDGSTO = 0x80146945 -+ SIOCBRDGSTXHC = 0x80146959 - SIOCDELLABEL = 0x80206997 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 -@@ -1378,11 +1414,6 @@ const ( - SIOCSVH = 0xc02069f5 - SIOCSVNETFLOWID = 0x802069c3 - SIOCSVNETID = 0x802069a6 -- SIOCSWGDPID = 0xc018695b -- SIOCSWGMAXFLOW = 0xc0186960 -- SIOCSWGMAXGROUP = 0xc018695d -- SIOCSWSDPID = 0x8018695c -- SIOCSWSPORTNO = 0xc060695f - SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 - SOCK_DNS = 0x1000 -@@ -1455,7 +1486,18 @@ const ( - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 -- TCP_MAXBURST = 0x4 -+ TCPOPT_EOL = 0x0 -+ TCPOPT_MAXSEG = 0x2 -+ TCPOPT_NOP = 0x1 -+ TCPOPT_SACK = 0x5 -+ TCPOPT_SACK_HDR = 0x1010500 -+ TCPOPT_SACK_PERMITTED = 0x4 -+ TCPOPT_SACK_PERMIT_HDR = 0x1010402 -+ TCPOPT_SIGNATURE = 0x13 -+ TCPOPT_TIMESTAMP = 0x8 -+ TCPOPT_TSTAMP_HDR = 0x101080a -+ TCPOPT_WINDOW = 0x3 -+ TCP_INFO = 0x9 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 -@@ -1833,7 +1875,7 @@ var signalList = [...]struct { - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, -- {6, "SIGABRT", "abort trap"}, -+ {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, -@@ -1860,4 +1902,5 @@ var signalList = [...]struct { - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -+ {81920, "SIGSTKSZ", "unknown signal"}, - } -diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go b/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go -old mode 100644 -new mode 100755 -index bd001a6..97f20ca ---- a/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go -+++ b/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go -@@ -15,12 +15,12 @@ type PtraceRegsArm struct { - - // PtraceGetRegsArm fetches the registers used by arm binaries. - func PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) - } - - // PtraceSetRegsArm sets the registers used by arm binaries. - func PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) - } - - // PtraceRegsArm64 is the registers used by arm64 binaries. -@@ -33,10 +33,10 @@ type PtraceRegsArm64 struct { - - // PtraceGetRegsArm64 fetches the registers used by arm64 binaries. - func PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) - } - - // PtraceSetRegsArm64 sets the registers used by arm64 binaries. - func PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) - } -diff --git a/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go b/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go -old mode 100644 -new mode 100755 -index 6cb6d68..834d285 ---- a/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go -@@ -7,11 +7,11 @@ import "unsafe" - // PtraceGetRegSetArm64 fetches the registers used by arm64 binaries. - func PtraceGetRegSetArm64(pid, addr int, regsout *PtraceRegsArm64) error { - iovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))} -- return ptrace(PTRACE_GETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec))) -+ return ptracePtr(PTRACE_GETREGSET, pid, uintptr(addr), unsafe.Pointer(&iovec)) - } - - // PtraceSetRegSetArm64 sets the registers used by arm64 binaries. - func PtraceSetRegSetArm64(pid, addr int, regs *PtraceRegsArm64) error { - iovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))} -- return ptrace(PTRACE_SETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec))) -+ return ptracePtr(PTRACE_SETREGSET, pid, uintptr(addr), unsafe.Pointer(&iovec)) - } -diff --git a/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go b/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go -old mode 100644 -new mode 100755 -index c34d063..0b5f794 ---- a/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go -+++ b/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go -@@ -21,12 +21,12 @@ type PtraceRegsMips struct { - - // PtraceGetRegsMips fetches the registers used by mips binaries. - func PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) - } - - // PtraceSetRegsMips sets the registers used by mips binaries. - func PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) - } - - // PtraceRegsMips64 is the registers used by mips64 binaries. -@@ -42,10 +42,10 @@ type PtraceRegsMips64 struct { - - // PtraceGetRegsMips64 fetches the registers used by mips64 binaries. - func PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) - } - - // PtraceSetRegsMips64 sets the registers used by mips64 binaries. - func PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) - } -diff --git a/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go b/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go -old mode 100644 -new mode 100755 -index 3ccf0c0..2807f7e ---- a/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go -+++ b/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go -@@ -21,12 +21,12 @@ type PtraceRegsMipsle struct { - - // PtraceGetRegsMipsle fetches the registers used by mipsle binaries. - func PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) - } - - // PtraceSetRegsMipsle sets the registers used by mipsle binaries. - func PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) - } - - // PtraceRegsMips64le is the registers used by mips64le binaries. -@@ -42,10 +42,10 @@ type PtraceRegsMips64le struct { - - // PtraceGetRegsMips64le fetches the registers used by mips64le binaries. - func PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) - } - - // PtraceSetRegsMips64le sets the registers used by mips64le binaries. - func PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) - } -diff --git a/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go b/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go -old mode 100644 -new mode 100755 -index 7d65857..281ea64 ---- a/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go -+++ b/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go -@@ -31,12 +31,12 @@ type PtraceRegs386 struct { - - // PtraceGetRegs386 fetches the registers used by 386 binaries. - func PtraceGetRegs386(pid int, regsout *PtraceRegs386) error { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) - } - - // PtraceSetRegs386 sets the registers used by 386 binaries. - func PtraceSetRegs386(pid int, regs *PtraceRegs386) error { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) - } - - // PtraceRegsAmd64 is the registers used by amd64 binaries. -@@ -72,10 +72,10 @@ type PtraceRegsAmd64 struct { - - // PtraceGetRegsAmd64 fetches the registers used by amd64 binaries. - func PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error { -- return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -+ return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) - } - - // PtraceSetRegsAmd64 sets the registers used by amd64 binaries. - func PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error { -- return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -+ return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) - } -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go -old mode 100644 -new mode 100755 -index 870215d..d1d1d23 ---- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go -@@ -124,7 +124,6 @@ int utime(uintptr_t, uintptr_t); - unsigned long long getsystemcfg(int); - int umount(uintptr_t); - int getrlimit64(int, uintptr_t); --int setrlimit64(int, uintptr_t); - long long lseek64(int, long long, int); - uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long); - -@@ -213,7 +212,7 @@ func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func ioctl(fd int, req uint, arg uintptr) (err error) { -+func ioctl(fd int, req int, arg uintptr) (err error) { - r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)) - if r0 == -1 && er != nil { - err = er -@@ -223,6 +222,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { -+ r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg))) -+ if r0 == -1 && er != nil { -+ err = er -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) { - r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)) - r = int(r0) -@@ -808,28 +817,6 @@ func write(fd int, p []byte) (n int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, p *byte, np int) (n int, err error) { -- r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np)) -- n = int(r0) -- if r0 == -1 && er != nil { -- err = er -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, p *byte, np int) (n int, err error) { -- r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np)) -- n = int(r0) -- if r0 == -1 && er != nil { -- err = er -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Dup2(oldfd int, newfd int) (err error) { - r0, er := C.dup2(C.int(oldfd), C.int(newfd)) - if r0 == -1 && er != nil { -@@ -1454,16 +1441,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- r0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) -- if r0 == -1 && er != nil { -- err = er -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence)) - off = int64(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go -old mode 100644 -new mode 100755 -index a89b0bf..f99a18a ---- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go -@@ -93,8 +93,18 @@ func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func ioctl(fd int, req uint, arg uintptr) (err error) { -- _, e1 := callioctl(fd, int(req), arg) -+func ioctl(fd int, req int, arg uintptr) (err error) { -+ _, e1 := callioctl(fd, req, arg) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { -+ _, e1 := callioctl_ptr(fd, req, arg) - if e1 != 0 { - err = errnoErr(e1) - } -@@ -752,28 +762,6 @@ func write(fd int, p []byte) (n int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, p *byte, np int) (n int, err error) { -- r0, e1 := callread(fd, uintptr(unsafe.Pointer(p)), np) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, p *byte, np int) (n int, err error) { -- r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(p)), np) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Dup2(oldfd int, newfd int) (err error) { - _, e1 := calldup2(oldfd, newfd) - if e1 != 0 { -@@ -1412,16 +1400,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim))) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, e1 := calllseek(fd, offset, whence) - off = int64(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go -old mode 100644 -new mode 100755 -index 2caa5ad..c4d50ae ---- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go -@@ -124,7 +124,6 @@ import ( - //go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" - //go:cgo_import_dynamic libc_umount umount "libc.a/shr_64.o" - //go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o" --//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o" - //go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o" - //go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o" - -@@ -242,7 +241,6 @@ import ( - //go:linkname libc_getsystemcfg libc_getsystemcfg - //go:linkname libc_umount libc_umount - //go:linkname libc_getrlimit libc_getrlimit --//go:linkname libc_setrlimit libc_setrlimit - //go:linkname libc_lseek libc_lseek - //go:linkname libc_mmap64 libc_mmap64 - -@@ -363,7 +361,6 @@ var ( - libc_getsystemcfg, - libc_umount, - libc_getrlimit, -- libc_setrlimit, - libc_lseek, - libc_mmap64 syscallFunc - ) -@@ -423,6 +420,13 @@ func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func callioctl_ptr(fd int, req int, arg unsafe.Pointer) (r1 uintptr, e1 Errno) { -+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0) - return -@@ -1172,13 +1176,6 @@ func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { -- r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) - return -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go -old mode 100644 -new mode 100755 -index 944a714..6903d3b ---- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go -@@ -123,7 +123,6 @@ int utime(uintptr_t, uintptr_t); - unsigned long long getsystemcfg(int); - int umount(uintptr_t); - int getrlimit(int, uintptr_t); --int setrlimit(int, uintptr_t); - long long lseek(int, long long, int); - uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); - -@@ -131,6 +130,7 @@ uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); - import "C" - import ( - "syscall" -+ "unsafe" - ) - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -@@ -191,6 +191,14 @@ func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func callioctl_ptr(fd int, req int, arg unsafe.Pointer) (r1 uintptr, e1 Errno) { -+ r1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg)))) -+ e1 = syscall.GetErrno() -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))) - e1 = syscall.GetErrno() -@@ -1047,14 +1055,6 @@ func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { -- r1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim))) -- e1 = syscall.GetErrno() -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence))) - e1 = syscall.GetErrno() -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go -old mode 100644 -new mode 100755 -index c2461c4..1cad561 ---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go -@@ -731,6 +731,16 @@ var libc_ioctl_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -1984,6 +1994,31 @@ var libc_select_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) { -+ var _p0 *byte -+ _p0, err = BytePtrFromString(path) -+ if err != nil { -+ return -+ } -+ var _p1 unsafe.Pointer -+ if len(attrBuf) > 0 { -+ _p1 = unsafe.Pointer(&attrBuf[0]) -+ } else { -+ _p1 = unsafe.Pointer(&_zero) -+ } -+ _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_setattrlist_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Setegid(egid int) (err error) { - _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { -@@ -2115,20 +2150,6 @@ var libc_setreuid_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --var libc_setrlimit_trampoline_addr uintptr -- --//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) -@@ -2391,28 +2412,6 @@ var libc_munmap_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s -old mode 100644 -new mode 100755 -index 95fe4c0..8b8bb28 ---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s -+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s -@@ -5,900 +5,750 @@ - - TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fdopendir(SB) -- - GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) - - TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -- - GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - - TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -- - GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - - TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -- - GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 - DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - - TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -- - GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 - DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - - TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -- - GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 - DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - - TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -- - GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - - TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -- - GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - - TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -- - GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - - TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -- - GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - - TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -- - GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - - TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -- - GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - - TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -- - GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - - TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -- - GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - - TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -- - GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - - TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -- - GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - - TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -- - GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - - TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -- - GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - - TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -- - GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - - TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -- - GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - - TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -- - GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - - TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -- - GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 - DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - - TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -- - GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 - DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - - TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -- - GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - - TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -- - GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - - TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -- - GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - - TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -- - GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - - TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -- - GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - - TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -- - GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - - TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_closedir(SB) -- - GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) - - TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readdir_r(SB) -- - GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) - - TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe(SB) -- - GLOBL ·libc_pipe_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB) - - TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getxattr(SB) -- - GLOBL ·libc_getxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB) - - TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fgetxattr(SB) -- - GLOBL ·libc_fgetxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB) - - TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setxattr(SB) -- - GLOBL ·libc_setxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB) - - TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsetxattr(SB) -- - GLOBL ·libc_fsetxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB) - - TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_removexattr(SB) -- - GLOBL ·libc_removexattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB) - - TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fremovexattr(SB) -- - GLOBL ·libc_fremovexattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB) - - TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listxattr(SB) -- - GLOBL ·libc_listxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB) - - TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flistxattr(SB) -- - GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) - - TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) -- - GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) - - TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fcntl(SB) -- - GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) - - TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -- - GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - - TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -- - GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - - TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -- - GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - - TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendfile(SB) -- - GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) - - TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmat(SB) -- - GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB) - - TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmctl(SB) -- - GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB) - - TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmdt(SB) -- - GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB) - - TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmget(SB) -- - GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB) - - TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -- - GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 - DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - - TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -- - GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 - DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - - TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -- - GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - - TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -- - GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - - TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -- - GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - - TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -- - GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - - TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -- - GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - - TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clock_gettime(SB) -- - GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 - DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) - - TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -- - GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 - DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - - TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clonefile(SB) -- - GLOBL ·libc_clonefile_trampoline_addr(SB), RODATA, $8 - DATA ·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB) - - TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clonefileat(SB) -- - GLOBL ·libc_clonefileat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB) - - TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -- - GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - - TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -- - GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - - TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exchangedata(SB) -- - GLOBL ·libc_exchangedata_trampoline_addr(SB), RODATA, $8 - DATA ·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB) - - TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -- - GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - - TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -- - GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - - TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -- - GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - - TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -- - GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - - TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -- - GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - - TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -- - GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - - TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -- - GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - - TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -- - GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - - TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fclonefileat(SB) -- - GLOBL ·libc_fclonefileat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB) - - TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -- - GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - - TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -- - GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - - TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -- - GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - - TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -- - GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - - TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -- - GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - - TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdtablesize(SB) -- - GLOBL ·libc_getdtablesize_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB) - - TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -- - GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - - TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -- - GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - - TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -- - GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - - TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -- - GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - - TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -- - GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - - TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -- - GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - - TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -- - GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - - TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -- - GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - - TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -- - GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - - TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -- - GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - - TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -- - GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - - TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -- - GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - - TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -- - GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - - TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -- - GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - - TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -- - GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - - TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -- - GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - - TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -- - GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 - DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - - TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -- - GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - - TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -- - GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 - DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - - TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -- - GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - - TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -- - GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - - TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -- - GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - - TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -- - GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - - TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mount(SB) -- - GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) - - TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -- - GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 - DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - - TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -- - GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - - TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -- - GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - - TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -- - GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - - TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -- - GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - - TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -- - GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 - DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - - TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -- - GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - - TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -- - GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - - TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -- - GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - - TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -- - GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - - TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -- - GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 - DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - - TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -- - GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - - TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -- - GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - - TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -- - GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 - DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - -+TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setattrlist(SB) -+GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) -+ - TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -- - GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - - TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -- - GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - - TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -- - GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - - TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -- - GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - - TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -- - GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - - TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -- - GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - - TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setprivexec(SB) -- - GLOBL ·libc_setprivexec_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB) - - TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -- - GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - - TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -- - GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - --TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 -- JMP libc_setrlimit(SB) -- --GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 --DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) -- - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -- - GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - - TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -- - GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - - TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -- - GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - - TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -- - GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - - TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -- - GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - - TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -- - GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - - TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -- - GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - - TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -- - GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 - DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - - TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_undelete(SB) -- - GLOBL ·libc_undelete_trampoline_addr(SB), RODATA, $8 - DATA ·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB) - - TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -- - GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - - TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -- - GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - - TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -- - GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - - TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -- - GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 - DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - - TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -- - GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - - TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -- - GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - - TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat64(SB) -- - GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstat64_trampoline_addr(SB)/8, $libc_fstat64_trampoline<>(SB) - - TEXT libc_fstatat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat64(SB) -- - GLOBL ·libc_fstatat64_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatat64_trampoline_addr(SB)/8, $libc_fstatat64_trampoline<>(SB) - - TEXT libc_fstatfs64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs64(SB) -- - GLOBL ·libc_fstatfs64_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatfs64_trampoline_addr(SB)/8, $libc_fstatfs64_trampoline<>(SB) - - TEXT libc_getfsstat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getfsstat64(SB) -- - GLOBL ·libc_getfsstat64_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getfsstat64_trampoline_addr(SB)/8, $libc_getfsstat64_trampoline<>(SB) - - TEXT libc_lstat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat64(SB) -- - GLOBL ·libc_lstat64_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lstat64_trampoline_addr(SB)/8, $libc_lstat64_trampoline<>(SB) - - TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ptrace(SB) -- - GLOBL ·libc_ptrace_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB) - - TEXT libc_stat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat64(SB) -- - GLOBL ·libc_stat64_trampoline_addr(SB), RODATA, $8 - DATA ·libc_stat64_trampoline_addr(SB)/8, $libc_stat64_trampoline<>(SB) - - TEXT libc_statfs64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs64(SB) -- - GLOBL ·libc_statfs64_trampoline_addr(SB), RODATA, $8 - DATA ·libc_statfs64_trampoline_addr(SB)/8, $libc_statfs64_trampoline<>(SB) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go -old mode 100644 -new mode 100755 -index 26a0fdc..b18edbd ---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go -@@ -731,6 +731,16 @@ var libc_ioctl_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -1984,6 +1994,31 @@ var libc_select_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) { -+ var _p0 *byte -+ _p0, err = BytePtrFromString(path) -+ if err != nil { -+ return -+ } -+ var _p1 unsafe.Pointer -+ if len(attrBuf) > 0 { -+ _p1 = unsafe.Pointer(&attrBuf[0]) -+ } else { -+ _p1 = unsafe.Pointer(&_zero) -+ } -+ _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_setattrlist_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Setegid(egid int) (err error) { - _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { -@@ -2115,20 +2150,6 @@ var libc_setreuid_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --var libc_setrlimit_trampoline_addr uintptr -- --//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) -@@ -2391,28 +2412,6 @@ var libc_munmap_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s -old mode 100644 -new mode 100755 -index efa5b4c..08362c1 ---- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s -+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s -@@ -5,900 +5,750 @@ - - TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fdopendir(SB) -- - GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) - - TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -- - GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - - TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -- - GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - - TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -- - GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 - DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - - TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -- - GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 - DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - - TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -- - GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 - DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - - TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -- - GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - - TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -- - GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - - TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -- - GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - - TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -- - GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - - TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -- - GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - - TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -- - GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - - TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -- - GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - - TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -- - GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - - TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -- - GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - - TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -- - GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - - TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -- - GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - - TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -- - GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - - TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -- - GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - - TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -- - GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - - TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -- - GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - - TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -- - GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 - DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - - TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -- - GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 - DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - - TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -- - GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - - TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -- - GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - - TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -- - GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - - TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -- - GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - - TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -- - GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - - TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -- - GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - - TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_closedir(SB) -- - GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) - - TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readdir_r(SB) -- - GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) - - TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe(SB) -- - GLOBL ·libc_pipe_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB) - - TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getxattr(SB) -- - GLOBL ·libc_getxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB) - - TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fgetxattr(SB) -- - GLOBL ·libc_fgetxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB) - - TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setxattr(SB) -- - GLOBL ·libc_setxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB) - - TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsetxattr(SB) -- - GLOBL ·libc_fsetxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB) - - TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_removexattr(SB) -- - GLOBL ·libc_removexattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB) - - TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fremovexattr(SB) -- - GLOBL ·libc_fremovexattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB) - - TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listxattr(SB) -- - GLOBL ·libc_listxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB) - - TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flistxattr(SB) -- - GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 - DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) - - TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) -- - GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) - - TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fcntl(SB) -- - GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) - - TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -- - GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - - TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -- - GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - - TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -- - GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - - TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendfile(SB) -- - GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) - - TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmat(SB) -- - GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB) - - TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmctl(SB) -- - GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB) - - TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmdt(SB) -- - GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB) - - TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmget(SB) -- - GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB) - - TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -- - GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 - DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - - TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -- - GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 - DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - - TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -- - GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - - TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -- - GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - - TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -- - GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - - TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -- - GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - - TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -- - GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - - TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clock_gettime(SB) -- - GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 - DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) - - TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -- - GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 - DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - - TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clonefile(SB) -- - GLOBL ·libc_clonefile_trampoline_addr(SB), RODATA, $8 - DATA ·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB) - - TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clonefileat(SB) -- - GLOBL ·libc_clonefileat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB) - - TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -- - GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - - TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -- - GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - - TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exchangedata(SB) -- - GLOBL ·libc_exchangedata_trampoline_addr(SB), RODATA, $8 - DATA ·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB) - - TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -- - GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - - TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -- - GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - - TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -- - GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - - TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -- - GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - - TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -- - GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - - TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -- - GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - - TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -- - GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - - TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -- - GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - - TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fclonefileat(SB) -- - GLOBL ·libc_fclonefileat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB) - - TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -- - GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - - TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -- - GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - - TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -- - GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - - TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -- - GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - - TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -- - GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - - TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdtablesize(SB) -- - GLOBL ·libc_getdtablesize_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB) - - TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -- - GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - - TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -- - GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - - TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -- - GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - - TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -- - GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - - TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -- - GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - - TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -- - GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - - TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -- - GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - - TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -- - GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - - TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -- - GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - - TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -- - GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - - TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -- - GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - - TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -- - GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - - TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -- - GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - - TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -- - GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - - TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -- - GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - - TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -- - GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - - TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -- - GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 - DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - - TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -- - GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - - TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -- - GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 - DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - - TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -- - GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - - TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -- - GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - - TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -- - GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - - TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -- - GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - - TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mount(SB) -- - GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) - - TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -- - GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 - DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - - TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -- - GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - - TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -- - GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - - TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -- - GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - - TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -- - GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - - TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -- - GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 - DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - - TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -- - GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - - TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -- - GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - - TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -- - GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - - TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -- - GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - - TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -- - GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 - DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - - TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -- - GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - - TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -- - GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - - TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -- - GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 - DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - -+TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setattrlist(SB) -+GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) -+ - TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -- - GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - - TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -- - GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - - TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -- - GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - - TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -- - GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - - TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -- - GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - - TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -- - GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - - TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setprivexec(SB) -- - GLOBL ·libc_setprivexec_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB) - - TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -- - GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - - TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -- - GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - --TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 -- JMP libc_setrlimit(SB) -- --GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 --DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) -- - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -- - GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - - TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -- - GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - - TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -- - GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - - TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -- - GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - - TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -- - GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - - TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -- - GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - - TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -- - GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - - TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -- - GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 - DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - - TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_undelete(SB) -- - GLOBL ·libc_undelete_trampoline_addr(SB), RODATA, $8 - DATA ·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB) - - TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -- - GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - - TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -- - GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - - TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -- - GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - - TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -- - GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 - DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - - TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -- - GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - - TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -- - GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - - TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) -- - GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) - - TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) -- - GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) - - TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) -- - GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) - - TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getfsstat(SB) -- - GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) - - TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) -- - GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) - - TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ptrace(SB) -- - GLOBL ·libc_ptrace_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB) - - TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) -- - GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) - - TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) -- - GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 - DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go -old mode 100644 -new mode 100755 -index 1b6eedf..0c67df6 ---- a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go -@@ -436,6 +436,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -552,6 +562,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1390,16 +1410,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1632,28 +1642,6 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go -old mode 100644 -new mode 100755 -index 039c4aa..e6e05d1 ---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go -@@ -388,6 +388,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -414,6 +424,16 @@ func ptrace(request int, pid int, addr uintptr, data int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) { -+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -@@ -544,6 +564,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1615,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1842,28 +1862,6 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go -old mode 100644 -new mode 100755 -index 0535d3c..7508acc ---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go -@@ -388,6 +388,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -414,6 +424,16 @@ func ptrace(request int, pid int, addr uintptr, data int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) { -+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -@@ -544,6 +564,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1615,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1842,28 +1862,6 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go -old mode 100644 -new mode 100755 -index 1018b52..7b56aea ---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go -@@ -388,6 +388,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -414,6 +424,16 @@ func ptrace(request int, pid int, addr uintptr, data int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) { -+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -@@ -544,6 +564,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1615,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1842,28 +1862,6 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go -old mode 100644 -new mode 100755 -index 3802f4b..cc623dc ---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go -@@ -388,6 +388,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -414,6 +424,16 @@ func ptrace(request int, pid int, addr uintptr, data int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) { -+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -@@ -544,6 +564,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1615,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1842,28 +1862,6 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go -old mode 100644 -new mode 100755 -index 8a2db7d..5818491 ---- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go -@@ -388,6 +388,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -414,6 +424,16 @@ func ptrace(request int, pid int, addr uintptr, data int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) { -+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -@@ -544,6 +564,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1615,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1842,28 +1862,6 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go -old mode 100644 -new mode 100755 -index b57c705..6be25cd ---- a/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go -@@ -40,7 +40,7 @@ func readv(fd int, iovs []Iovec) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procreadv)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -55,7 +55,7 @@ func preadv(fd int, iovs []Iovec, off int64) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpreadv)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -70,7 +70,7 @@ func writev(fd int, iovs []Iovec) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwritev)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -85,7 +85,7 @@ func pwritev(fd int, iovs []Iovec, off int64) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwritev)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -96,7 +96,7 @@ func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept4)), 4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go -old mode 100644 -new mode 100755 -index 293cf36..1ff3aec ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go -@@ -379,6 +379,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(arg) -@@ -537,6 +547,17 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockAdjtime(clockid int32, buf *Timex) (state int, err error) { -+ r0, _, e1 := Syscall(SYS_CLOCK_ADJTIME, uintptr(clockid), uintptr(unsafe.Pointer(buf)), 0) -+ state = int(r0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func ClockGetres(clockid int32, res *Timespec) (err error) { - _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) - if e1 != 0 { -@@ -1325,16 +1346,6 @@ func PivotRoot(newroot string, putold string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { -- _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { - _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) - if e1 != 0 { -@@ -1345,7 +1356,7 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { -+func pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) - n = int(r0) - if e1 != 0 { -@@ -1723,28 +1734,6 @@ func exitThread(code int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, p *byte, np int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, p *byte, np int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func readv(fd int, iovs []Iovec) (n int, err error) { - var _p0 unsafe.Pointer - if len(iovs) > 0 { -@@ -1857,6 +1846,17 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) { -+ r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldaddr), uintptr(oldlength), uintptr(newlength), uintptr(flags), uintptr(newaddr), 0) -+ xaddr = uintptr(r0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Madvise(b []byte, advice int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { -@@ -2161,3 +2161,37 @@ func rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) - } - return - } -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { -+ RawSyscallNoError(SYS_GETRESUID, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { -+ RawSyscallNoError(SYS_GETRESGID, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) { -+ _, _, e1 := Syscall(SYS_SCHED_SETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(flags)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) { -+ _, _, e1 := Syscall6(SYS_SCHED_GETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(size), uintptr(flags), 0, 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go -old mode 100644 -new mode 100755 -index c81b0ad..07b549c ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go -@@ -411,16 +411,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func setrlimit(resource int, rlim *rlimit32) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go -old mode 100644 -new mode 100755 -index 2206bce..5f481bf ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go -@@ -334,16 +334,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go -old mode 100644 -new mode 100755 -index edf6b39..824cd52 ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go -@@ -578,16 +578,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func setrlimit(resource int, rlim *rlimit32) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) { - _, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32)) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go -old mode 100644 -new mode 100755 -index 190609f..e77aecf ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go -@@ -289,16 +289,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go -old mode 100644 -new mode 100755 -index 5f984cb..961a3af ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go -@@ -644,16 +644,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func setrlimit(resource int, rlim *rlimit32) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go -old mode 100644 -new mode 100755 -index 46fc380..ed05005 ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go -@@ -278,16 +278,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go -old mode 100644 -new mode 100755 -index cbd0d4d..d365b71 ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go -@@ -278,16 +278,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go -old mode 100644 -new mode 100755 -index 0c13d15..c3f1b8b ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go -@@ -644,16 +644,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func setrlimit(resource int, rlim *rlimit32) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go -old mode 100644 -new mode 100755 -index e01432a..a6574cf ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go -@@ -624,16 +624,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func setrlimit(resource int, rlim *rlimit32) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n)) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go -old mode 100644 -new mode 100755 -index 13c7ee7..f409902 ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go -@@ -349,16 +349,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go -old mode 100644 -new mode 100755 -index 02d0c0f..9dfcc29 ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go -@@ -349,16 +349,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go -old mode 100644 -new mode 100755 -index 9fee3b1..0ab4f2e ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go -@@ -269,16 +269,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { -@@ -541,3 +531,19 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f - } - return - } -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) { -+ var _p0 unsafe.Pointer -+ if len(pairs) > 0 { -+ _p0 = unsafe.Pointer(&pairs[0]) -+ } else { -+ _p0 = unsafe.Pointer(&_zero) -+ } -+ _, _, e1 := Syscall6(SYS_RISCV_HWPROBE, uintptr(_p0), uintptr(len(pairs)), uintptr(cpuCount), uintptr(unsafe.Pointer(cpus)), uintptr(flags), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go -old mode 100644 -new mode 100755 -index 647bbfe..6cde322 ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go -@@ -319,16 +319,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go -old mode 100644 -new mode 100755 -index ada057f..5253d65 ---- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go -@@ -329,16 +329,6 @@ func setfsuid(uid int) (prev int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(resource int, rlim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go -old mode 100644 -new mode 100755 -index 4af561a..2df3c5b ---- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go -@@ -405,6 +405,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -521,6 +531,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1587,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1814,20 +1824,13 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -+func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { -+ var _p0 *byte -+ _p0, err = BytePtrFromString(path) -+ if err != nil { -+ return - } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -+ _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } -@@ -1836,13 +1839,9 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { -- var _p0 *byte -- _p0, err = BytePtrFromString(path) -- if err != nil { -- return -- } -- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) -+func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { -+ r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) -+ xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go -old mode 100644 -new mode 100755 -index 3b90e94..a60556b ---- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go -@@ -405,6 +405,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -521,6 +531,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1587,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1814,20 +1824,13 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -+func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { -+ var _p0 *byte -+ _p0, err = BytePtrFromString(path) -+ if err != nil { -+ return - } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -+ _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } -@@ -1836,13 +1839,9 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { -- var _p0 *byte -- _p0, err = BytePtrFromString(path) -- if err != nil { -- return -- } -- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) -+func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { -+ r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) -+ xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go -old mode 100644 -new mode 100755 -index 890f4cc..9f78891 ---- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go -@@ -405,6 +405,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -521,6 +531,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1587,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1814,20 +1824,13 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -+func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { -+ var _p0 *byte -+ _p0, err = BytePtrFromString(path) -+ if err != nil { -+ return - } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -+ _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } -@@ -1836,13 +1839,9 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { -- var _p0 *byte -- _p0, err = BytePtrFromString(path) -- if err != nil { -- return -- } -- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) -+func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { -+ r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) -+ xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go -old mode 100644 -new mode 100755 -index c79f071..82a4cb2 ---- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go -@@ -405,6 +405,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -521,6 +531,16 @@ func Chroot(path string) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1587,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) -@@ -1814,20 +1824,13 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -+func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { -+ var _p0 *byte -+ _p0, err = BytePtrFromString(path) -+ if err != nil { -+ return - } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -+ _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } -@@ -1836,13 +1839,9 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { -- var _p0 *byte -- _p0, err = BytePtrFromString(path) -- if err != nil { -- return -- } -- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) -+func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { -+ r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) -+ xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go -old mode 100644 -new mode 100755 -index 2925fe0..66b3b64 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go -@@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { -+ syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) -+ return -+} -+ -+var libc_getresuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { -+ syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) -+ return -+} -+ -+var libc_getresgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { -@@ -533,6 +555,16 @@ var libc_ioctl_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -696,6 +728,20 @@ var libc_chroot_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_clock_gettime_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1872,20 +1918,6 @@ var libc_setresuid_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --var libc_setrlimit_trampoline_addr uintptr -- --//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { -@@ -2181,28 +2213,6 @@ var libc_munmap_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s -old mode 100644 -new mode 100755 -index 75eb2f5..3dcacd3 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s -@@ -5,792 +5,670 @@ - - TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -- - GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB) - - TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -- - GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB) - - TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -- - GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $4 - DATA ·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB) - - TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -- - GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $4 - DATA ·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB) - - TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -- - GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $4 - DATA ·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB) - - TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -- - GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $4 - DATA ·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB) - - TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -- - GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $4 - DATA ·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB) - - TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -- - GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB) - - TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -- - GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB) - - TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -- - GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB) - - TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -- - GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB) - - TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -- - GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $4 - DATA ·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB) - - TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -- - GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $4 - DATA ·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB) - - TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -- - GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $4 - DATA ·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB) - - TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -- - GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $4 - DATA ·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB) - - TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -- - GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $4 - DATA ·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB) - - TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -- - GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $4 - DATA ·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB) - - TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -- - GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $4 - DATA ·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB) - - TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -- - GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $4 - DATA ·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB) - - TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -- - GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $4 - DATA ·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB) - - TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -- - GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $4 - DATA ·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB) - - TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -- - GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $4 - DATA ·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB) - - TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -- - GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB) - - TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -- - GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB) - - TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -- - GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB) - - TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -- - GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $4 - DATA ·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB) - - TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -- - GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $4 - DATA ·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB) - - TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -- - GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $4 - DATA ·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB) - - TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) -- - GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $4 - DATA ·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB) - - TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) -- - GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB) - - TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -- - GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB) - -+TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresuid(SB) -+GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $4 -+DATA ·libc_getresuid_trampoline_addr(SB)/4, $libc_getresuid_trampoline<>(SB) -+ -+TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresgid(SB) -+GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $4 -+DATA ·libc_getresgid_trampoline_addr(SB)/4, $libc_getresgid_trampoline<>(SB) -+ - TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -- - GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $4 - DATA ·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB) - - TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -- - GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4 - DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB) - - TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) -- - GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4 - DATA ·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB) - - TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -- - GLOBL ·libc_access_trampoline_addr(SB), RODATA, $4 - DATA ·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB) - - TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -- - GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $4 - DATA ·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB) - - TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -- - GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB) - - TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -- - GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB) - - TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -- - GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB) - - TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -- - GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB) - - TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -- - GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB) - -+TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_clock_gettime(SB) -+GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $4 -+DATA ·libc_clock_gettime_trampoline_addr(SB)/4, $libc_clock_gettime_trampoline<>(SB) -+ - TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -- - GLOBL ·libc_close_trampoline_addr(SB), RODATA, $4 - DATA ·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB) - - TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -- - GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $4 - DATA ·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB) - - TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -- - GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $4 - DATA ·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB) - - TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) -- - GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $4 - DATA ·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB) - - TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -- - GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $4 - DATA ·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB) - - TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -- - GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB) - - TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -- - GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB) - - TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -- - GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB) - - TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -- - GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB) - - TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -- - GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB) - - TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -- - GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB) - - TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -- - GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB) - - TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -- - GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $4 - DATA ·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB) - - TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -- - GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB) - - TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) -- - GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB) - - TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) -- - GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB) - - TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) -- - GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB) - - TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -- - GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB) - - TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -- - GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $4 - DATA ·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB) - - TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -- - GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB) - - TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -- - GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB) - - TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -- - GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB) - - TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -- - GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB) - - TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -- - GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB) - - TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -- - GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB) - - TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -- - GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB) - - TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -- - GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB) - - TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -- - GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB) - - TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) -- - GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB) - - TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -- - GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB) - - TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -- - GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB) - - TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -- - GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $4 - DATA ·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB) - - TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -- - GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB) - - TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -- - GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB) - - TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -- - GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $4 - DATA ·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB) - - TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -- - GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $4 - DATA ·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB) - - TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -- - GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $4 - DATA ·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB) - - TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -- - GLOBL ·libc_link_trampoline_addr(SB), RODATA, $4 - DATA ·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB) - - TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -- - GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB) - - TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -- - GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $4 - DATA ·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB) - - TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) -- - GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB) - - TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -- - GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB) - - TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -- - GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB) - - TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -- - GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB) - - TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) -- - GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB) - - TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -- - GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB) - - TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) -- - GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) - - TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) -- - GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 - DATA ·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB) - - TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -- - GLOBL ·libc_open_trampoline_addr(SB), RODATA, $4 - DATA ·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB) - - TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -- - GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB) - - TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -- - GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $4 - DATA ·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB) - - TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -- - GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $4 - DATA ·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB) - - TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -- - GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4 - DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB) - - TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -- - GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4 - DATA ·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB) - - TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -- - GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $4 - DATA ·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB) - - TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -- - GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB) - - TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -- - GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $4 - DATA ·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB) - - TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -- - GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB) - - TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -- - GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $4 - DATA ·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB) - - TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -- - GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $4 - DATA ·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB) - - TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -- - GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $4 - DATA ·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB) - - TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -- - GLOBL ·libc_select_trampoline_addr(SB), RODATA, $4 - DATA ·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB) - - TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -- - GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB) - - TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -- - GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB) - - TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -- - GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB) - - TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -- - GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB) - - TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -- - GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB) - - TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -- - GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB) - - TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -- - GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB) - - TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -- - GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB) - - TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) -- - GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB) - - TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) -- - GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) - --TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 -- JMP libc_setrlimit(SB) -- --GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 --DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) -- - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) -- - GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB) - - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -- - GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB) - - TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -- - GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $4 - DATA ·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB) - - TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -- - GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB) - - TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) -- - GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB) - - TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) -- - GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $4 - DATA ·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB) - - TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -- - GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $4 - DATA ·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB) - - TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -- - GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB) - - TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -- - GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $4 - DATA ·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB) - - TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -- - GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $4 - DATA ·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB) - - TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -- - GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $4 - DATA ·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB) - - TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -- - GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $4 - DATA ·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB) - - TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -- - GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB) - - TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -- - GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $4 - DATA ·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB) - - TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -- - GLOBL ·libc_write_trampoline_addr(SB), RODATA, $4 - DATA ·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB) - - TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -- - GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB) - - TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -- - GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $4 - DATA ·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB) - - TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) -- - GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go -old mode 100644 -new mode 100755 -index 98446d2..c5c4cc1 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go -@@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { -+ syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) -+ return -+} -+ -+var libc_getresuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { -+ syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) -+ return -+} -+ -+var libc_getresgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { -@@ -533,6 +555,16 @@ var libc_ioctl_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -696,6 +728,20 @@ var libc_chroot_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_clock_gettime_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1872,20 +1918,6 @@ var libc_setresuid_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --var libc_setrlimit_trampoline_addr uintptr -- --//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { -@@ -2181,28 +2213,6 @@ var libc_munmap_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s -old mode 100644 -new mode 100755 -index 243a666..2763620 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s -@@ -5,792 +5,670 @@ - - TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -- - GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - - TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -- - GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - - TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -- - GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 - DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - - TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -- - GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 - DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - - TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -- - GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 - DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - - TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -- - GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - - TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -- - GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - - TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -- - GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - - TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -- - GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - - TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -- - GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - - TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -- - GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - - TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -- - GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - - TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -- - GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - - TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -- - GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - - TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -- - GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - - TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -- - GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - - TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -- - GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - - TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -- - GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - - TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -- - GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - - TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -- - GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - - TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -- - GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 - DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - - TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -- - GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 - DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - - TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -- - GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - - TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -- - GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - - TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -- - GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - - TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -- - GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - - TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -- - GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - - TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -- - GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - - TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) -- - GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB) - - TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) -- - GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB) - - TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -- - GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - -+TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresuid(SB) -+GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) -+ -+TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresgid(SB) -+GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) -+ - TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -- - GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - - TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -- - GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - - TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) -- - GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB) - - TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -- - GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 - DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - - TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -- - GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 - DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - - TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -- - GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - - TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -- - GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - - TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -- - GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - - TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -- - GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - - TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -- - GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - -+TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_clock_gettime(SB) -+GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) -+ - TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -- - GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 - DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - - TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -- - GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - - TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -- - GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - - TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) -- - GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB) - - TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -- - GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - - TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -- - GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - - TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -- - GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - - TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -- - GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - - TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -- - GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - - TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -- - GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - - TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -- - GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - - TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -- - GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - - TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -- - GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - - TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -- - GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - - TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) -- - GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) - - TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) -- - GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) - - TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) -- - GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) - - TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -- - GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - - TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -- - GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - - TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -- - GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - - TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -- - GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - - TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -- - GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - - TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -- - GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - - TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -- - GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - - TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -- - GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - - TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -- - GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - - TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -- - GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - - TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -- - GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - - TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) -- - GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB) - - TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -- - GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - - TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -- - GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - - TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -- - GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - - TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -- - GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - - TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -- - GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - - TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -- - GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - - TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -- - GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - - TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -- - GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - - TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -- - GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 - DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - - TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -- - GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - - TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -- - GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 - DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - - TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) -- - GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) - - TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -- - GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - - TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -- - GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - - TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -- - GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - - TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) -- - GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB) - - TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -- - GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - - TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) -- - GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) - - TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) -- - GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 - DATA ·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB) - - TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -- - GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 - DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - - TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -- - GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - - TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -- - GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - - TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -- - GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - - TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -- - GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - - TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -- - GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 - DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - - TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -- - GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - - TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -- - GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - - TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -- - GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - - TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -- - GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - - TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -- - GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 - DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - - TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -- - GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - - TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -- - GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - - TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -- - GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 - DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - - TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -- - GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - - TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -- - GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - - TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -- - GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - - TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -- - GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - - TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -- - GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - - TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -- - GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - - TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -- - GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - - TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -- - GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - - TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) -- - GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB) - - TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) -- - GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) - --TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 -- JMP libc_setrlimit(SB) -- --GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 --DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) -- - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) -- - GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB) - - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -- - GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - - TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -- - GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - - TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -- - GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - - TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) -- - GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) - - TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) -- - GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 - DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) - - TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -- - GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - - TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -- - GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - - TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -- - GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - - TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -- - GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - - TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -- - GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 - DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - - TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -- - GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - - TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -- - GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - - TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -- - GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - - TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -- - GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 - DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - - TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -- - GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - - TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -- - GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - - TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) -- - GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go -old mode 100644 -new mode 100755 -index 8da6791..93bfbb3 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go -@@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { -+ syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) -+ return -+} -+ -+var libc_getresuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { -+ syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) -+ return -+} -+ -+var libc_getresgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { -@@ -533,6 +555,16 @@ var libc_ioctl_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -696,6 +728,20 @@ var libc_chroot_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_clock_gettime_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1872,20 +1918,6 @@ var libc_setresuid_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --var libc_setrlimit_trampoline_addr uintptr -- --//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { -@@ -2181,28 +2213,6 @@ var libc_munmap_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s -old mode 100644 -new mode 100755 -index 9ad116d..c922314 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s -@@ -5,792 +5,670 @@ - - TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -- - GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB) - - TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -- - GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB) - - TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -- - GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $4 - DATA ·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB) - - TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -- - GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $4 - DATA ·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB) - - TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -- - GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $4 - DATA ·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB) - - TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -- - GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $4 - DATA ·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB) - - TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -- - GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $4 - DATA ·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB) - - TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -- - GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB) - - TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -- - GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB) - - TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -- - GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB) - - TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -- - GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB) - - TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -- - GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $4 - DATA ·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB) - - TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -- - GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $4 - DATA ·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB) - - TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -- - GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $4 - DATA ·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB) - - TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -- - GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $4 - DATA ·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB) - - TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -- - GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $4 - DATA ·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB) - - TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -- - GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $4 - DATA ·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB) - - TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -- - GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $4 - DATA ·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB) - - TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -- - GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $4 - DATA ·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB) - - TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -- - GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $4 - DATA ·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB) - - TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -- - GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $4 - DATA ·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB) - - TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -- - GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $4 - DATA ·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB) - - TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -- - GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB) - - TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -- - GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB) - - TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -- - GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB) - - TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -- - GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $4 - DATA ·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB) - - TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -- - GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $4 - DATA ·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB) - - TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -- - GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $4 - DATA ·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB) - - TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) -- - GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $4 - DATA ·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB) - - TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) -- - GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB) - - TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -- - GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB) - -+TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresuid(SB) -+GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $4 -+DATA ·libc_getresuid_trampoline_addr(SB)/4, $libc_getresuid_trampoline<>(SB) -+ -+TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresgid(SB) -+GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $4 -+DATA ·libc_getresgid_trampoline_addr(SB)/4, $libc_getresgid_trampoline<>(SB) -+ - TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -- - GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $4 - DATA ·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB) - - TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -- - GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4 - DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB) - - TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) -- - GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4 - DATA ·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB) - - TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -- - GLOBL ·libc_access_trampoline_addr(SB), RODATA, $4 - DATA ·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB) - - TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -- - GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $4 - DATA ·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB) - - TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -- - GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB) - - TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -- - GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB) - - TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -- - GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB) - - TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -- - GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB) - - TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -- - GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $4 - DATA ·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB) - -+TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_clock_gettime(SB) -+GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $4 -+DATA ·libc_clock_gettime_trampoline_addr(SB)/4, $libc_clock_gettime_trampoline<>(SB) -+ - TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -- - GLOBL ·libc_close_trampoline_addr(SB), RODATA, $4 - DATA ·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB) - - TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -- - GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $4 - DATA ·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB) - - TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -- - GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $4 - DATA ·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB) - - TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) -- - GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $4 - DATA ·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB) - - TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -- - GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $4 - DATA ·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB) - - TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -- - GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB) - - TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -- - GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB) - - TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -- - GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB) - - TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -- - GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB) - - TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -- - GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB) - - TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -- - GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB) - - TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -- - GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB) - - TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -- - GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $4 - DATA ·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB) - - TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -- - GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB) - - TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) -- - GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB) - - TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) -- - GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB) - - TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) -- - GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB) - - TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -- - GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $4 - DATA ·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB) - - TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -- - GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $4 - DATA ·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB) - - TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -- - GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB) - - TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -- - GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB) - - TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -- - GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB) - - TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -- - GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB) - - TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -- - GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB) - - TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -- - GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB) - - TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -- - GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB) - - TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -- - GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB) - - TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -- - GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB) - - TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) -- - GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB) - - TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -- - GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB) - - TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -- - GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB) - - TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -- - GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $4 - DATA ·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB) - - TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -- - GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB) - - TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -- - GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB) - - TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -- - GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $4 - DATA ·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB) - - TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -- - GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $4 - DATA ·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB) - - TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -- - GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $4 - DATA ·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB) - - TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -- - GLOBL ·libc_link_trampoline_addr(SB), RODATA, $4 - DATA ·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB) - - TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -- - GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB) - - TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -- - GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $4 - DATA ·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB) - - TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) -- - GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB) - - TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -- - GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB) - - TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -- - GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB) - - TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -- - GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB) - - TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) -- - GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB) - - TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -- - GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB) - - TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) -- - GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) - - TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) -- - GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 - DATA ·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB) - - TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -- - GLOBL ·libc_open_trampoline_addr(SB), RODATA, $4 - DATA ·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB) - - TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -- - GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB) - - TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -- - GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $4 - DATA ·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB) - - TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -- - GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $4 - DATA ·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB) - - TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -- - GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4 - DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB) - - TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -- - GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4 - DATA ·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB) - - TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -- - GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $4 - DATA ·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB) - - TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -- - GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB) - - TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -- - GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $4 - DATA ·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB) - - TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -- - GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB) - - TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -- - GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $4 - DATA ·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB) - - TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -- - GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $4 - DATA ·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB) - - TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -- - GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $4 - DATA ·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB) - - TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -- - GLOBL ·libc_select_trampoline_addr(SB), RODATA, $4 - DATA ·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB) - - TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -- - GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB) - - TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -- - GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB) - - TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -- - GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB) - - TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -- - GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB) - - TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -- - GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB) - - TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -- - GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB) - - TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -- - GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB) - - TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -- - GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB) - - TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) -- - GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB) - - TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) -- - GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) - --TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 -- JMP libc_setrlimit(SB) -- --GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 --DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) -- - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) -- - GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB) - - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -- - GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB) - - TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -- - GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $4 - DATA ·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB) - - TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -- - GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $4 - DATA ·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB) - - TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) -- - GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB) - - TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) -- - GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $4 - DATA ·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB) - - TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -- - GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $4 - DATA ·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB) - - TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -- - GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB) - - TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -- - GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $4 - DATA ·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB) - - TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -- - GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $4 - DATA ·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB) - - TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -- - GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $4 - DATA ·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB) - - TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -- - GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $4 - DATA ·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB) - - TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -- - GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB) - - TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -- - GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $4 - DATA ·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB) - - TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -- - GLOBL ·libc_write_trampoline_addr(SB), RODATA, $4 - DATA ·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB) - - TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -- - GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $4 - DATA ·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB) - - TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -- - GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $4 - DATA ·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB) - - TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) -- - GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $4 - DATA ·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go -old mode 100644 -new mode 100755 -index 800aab6..a107b8f ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go -@@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { -+ syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) -+ return -+} -+ -+var libc_getresuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { -+ syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) -+ return -+} -+ -+var libc_getresgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { -@@ -533,6 +555,16 @@ var libc_ioctl_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -696,6 +728,20 @@ var libc_chroot_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_clock_gettime_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1872,20 +1918,6 @@ var libc_setresuid_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --var libc_setrlimit_trampoline_addr uintptr -- --//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { -@@ -2181,28 +2213,6 @@ var libc_munmap_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s -old mode 100644 -new mode 100755 -index 4efeff9..a6bc32c ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s -@@ -5,792 +5,670 @@ - - TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -- - GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - - TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -- - GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - - TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -- - GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 - DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - - TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -- - GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 - DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - - TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -- - GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 - DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - - TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -- - GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - - TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -- - GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - - TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -- - GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - - TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -- - GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - - TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -- - GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - - TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -- - GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - - TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -- - GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - - TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -- - GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - - TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -- - GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - - TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -- - GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - - TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -- - GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - - TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -- - GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - - TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -- - GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - - TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -- - GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - - TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -- - GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - - TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -- - GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 - DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - - TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -- - GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 - DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - - TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -- - GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - - TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -- - GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - - TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -- - GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - - TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -- - GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - - TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -- - GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - - TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -- - GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - - TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) -- - GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB) - - TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) -- - GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB) - - TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -- - GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - -+TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresuid(SB) -+GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) -+ -+TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresgid(SB) -+GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) -+ - TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -- - GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - - TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -- - GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - - TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) -- - GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB) - - TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -- - GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 - DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - - TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -- - GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 - DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - - TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -- - GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - - TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -- - GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - - TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -- - GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - - TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -- - GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - - TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -- - GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - -+TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_clock_gettime(SB) -+GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) -+ - TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -- - GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 - DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - - TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -- - GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - - TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -- - GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - - TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) -- - GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB) - - TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -- - GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - - TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -- - GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - - TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -- - GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - - TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -- - GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - - TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -- - GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - - TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -- - GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - - TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -- - GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - - TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -- - GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - - TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -- - GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - - TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -- - GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - - TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) -- - GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) - - TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) -- - GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) - - TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) -- - GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) - - TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -- - GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - - TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -- - GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - - TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -- - GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - - TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -- - GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - - TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -- - GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - - TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -- - GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - - TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -- - GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - - TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -- - GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - - TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -- - GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - - TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -- - GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - - TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -- - GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - - TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) -- - GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB) - - TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -- - GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - - TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -- - GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - - TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -- - GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - - TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -- - GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - - TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -- - GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - - TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -- - GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - - TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -- - GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - - TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -- - GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - - TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -- - GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 - DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - - TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -- - GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - - TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -- - GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 - DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - - TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) -- - GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) - - TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -- - GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - - TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -- - GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - - TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -- - GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - - TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) -- - GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB) - - TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -- - GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - - TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) -- - GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) - - TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) -- - GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 - DATA ·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB) - - TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -- - GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 - DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - - TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -- - GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - - TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -- - GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - - TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -- - GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - - TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -- - GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - - TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -- - GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 - DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - - TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -- - GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - - TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -- - GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - - TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -- - GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - - TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -- - GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - - TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -- - GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 - DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - - TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -- - GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - - TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -- - GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - - TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -- - GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 - DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - - TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -- - GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - - TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -- - GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - - TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -- - GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - - TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -- - GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - - TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -- - GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - - TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -- - GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - - TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -- - GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - - TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -- - GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - - TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) -- - GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB) - - TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) -- - GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) - --TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 -- JMP libc_setrlimit(SB) -- --GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 --DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) -- - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) -- - GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB) - - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -- - GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - - TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -- - GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - - TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -- - GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - - TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) -- - GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) - - TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) -- - GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 - DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) - - TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -- - GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - - TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -- - GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - - TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -- - GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - - TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -- - GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - - TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -- - GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 - DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - - TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -- - GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - - TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -- - GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - - TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -- - GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - - TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -- - GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 - DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - - TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -- - GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - - TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -- - GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - - TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) -- - GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go -old mode 100644 -new mode 100755 -index 016d959..c427de5 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go -@@ -1,4 +1,4 @@ --// go run mksyscall.go -openbsd -tags openbsd,mips64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_mips64.go -+// go run mksyscall.go -openbsd -libc -tags openbsd,mips64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_mips64.go - // Code generated by the command above; see README.md. DO NOT EDIT. - - //go:build openbsd && mips64 -@@ -16,7 +16,7 @@ var _ syscall.Errno - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func getgroups(ngid int, gid *_Gid_t) (n int, err error) { -- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) -+ r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -24,20 +24,28 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - return - } - -+var libc_getgroups_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func setgroups(ngid int, gid *_Gid_t) (err error) { -- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) -+ _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setgroups_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { -- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) -+ r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -45,10 +53,14 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err - return - } - -+var libc_wait4_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { -- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) -+ r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -56,30 +68,42 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - return - } - -+var libc_accept_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_accept accept "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { -- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) -+ _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_bind_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_bind bind "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { -- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) -+ _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_connect_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_connect connect "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func socket(domain int, typ int, proto int) (fd int, err error) { -- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) -+ r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -87,66 +111,94 @@ func socket(domain int, typ int, proto int) (fd int, err error) { - return - } - -+var libc_socket_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_socket socket "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { -- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) -+ _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_getsockopt_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { -- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) -+ _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setsockopt_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { -- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) -+ _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_getpeername_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { -- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) -+ _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_getsockname_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Shutdown(s int, how int) (err error) { -- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) -+ _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_shutdown_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { -- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) -+ _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_socketpair_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { -@@ -156,7 +208,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl - } else { - _p0 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) -+ r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -164,6 +216,10 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl - return - } - -+var libc_recvfrom_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { -@@ -173,17 +229,21 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( - } else { - _p0 = unsafe.Pointer(&_zero) - } -- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) -+ _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_sendto_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_sendto sendto "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) -+ r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -191,10 +251,14 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - return - } - -+var libc_recvmsg_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) -+ r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -202,10 +266,14 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - return - } - -+var libc_sendmsg_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { -- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) -+ r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -213,6 +281,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne - return - } - -+var libc_kevent_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_kevent kevent "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func utimes(path string, timeval *[2]Timeval) (err error) { -@@ -221,27 +293,35 @@ func utimes(path string, timeval *[2]Timeval) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) -+ _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_utimes_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_utimes utimes "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func futimes(fd int, timeval *[2]Timeval) (err error) { -- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) -+ _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_futimes_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_futimes futimes "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) -+ r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -249,6 +329,10 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - return - } - -+var libc_poll_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_poll poll "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Madvise(b []byte, behav int) (err error) { -@@ -258,13 +342,17 @@ func Madvise(b []byte, behav int) (err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) -+ _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_madvise_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_madvise madvise "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mlock(b []byte) (err error) { -@@ -274,23 +362,31 @@ func Mlock(b []byte) (err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) -+ _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mlock_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mlock mlock "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mlockall(flags int) (err error) { -- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) -+ _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mlockall_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mprotect(b []byte, prot int) (err error) { -@@ -300,13 +396,17 @@ func Mprotect(b []byte, prot int) (err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) -+ _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mprotect_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Msync(b []byte, flags int) (err error) { -@@ -316,13 +416,17 @@ func Msync(b []byte, flags int) (err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) -+ _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_msync_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_msync msync "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Munlock(b []byte) (err error) { -@@ -332,33 +436,45 @@ func Munlock(b []byte) (err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) -+ _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_munlock_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_munlock munlock "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Munlockall() (err error) { -- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) -+ _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_munlockall_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func pipe2(p *[2]_C_int, flags int) (err error) { -- _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) -+ _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_pipe2_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getdents(fd int, buf []byte) (n int, err error) { -@@ -368,7 +484,7 @@ func Getdents(fd int, buf []byte) (n int, err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) -+ r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -376,6 +492,10 @@ func Getdents(fd int, buf []byte) (n int, err error) { - return - } - -+var libc_getdents_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getdents getdents "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getcwd(buf []byte) (n int, err error) { -@@ -385,7 +505,7 @@ func Getcwd(buf []byte) (n int, err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) -+ r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -393,10 +513,50 @@ func Getcwd(buf []byte) (n int, err error) { - return - } - -+var libc_getcwd_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { -+ syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) -+ return -+} -+ -+var libc_getresuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { -+ syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) -+ return -+} -+ -+var libc_getresgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func ioctl(fd int, req uint, arg uintptr) (err error) { -- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_ioctl_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } -@@ -412,17 +572,21 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) - } else { - _p0 = unsafe.Pointer(&_zero) - } -- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) -+ _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_sysctl_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { -- r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) -+ r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -430,6 +594,10 @@ func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, - return - } - -+var libc_ppoll_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Access(path string, mode uint32) (err error) { -@@ -438,23 +606,31 @@ func Access(path string, mode uint32) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) -+ _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_access_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_access access "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { -- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) -+ _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_adjtime_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Chdir(path string) (err error) { -@@ -463,13 +639,17 @@ func Chdir(path string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) -+ _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_chdir_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_chdir chdir "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Chflags(path string, flags int) (err error) { -@@ -478,13 +658,17 @@ func Chflags(path string, flags int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) -+ _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_chflags_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_chflags chflags "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Chmod(path string, mode uint32) (err error) { -@@ -493,13 +677,17 @@ func Chmod(path string, mode uint32) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) -+ _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_chmod_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_chmod chmod "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Chown(path string, uid int, gid int) (err error) { -@@ -508,13 +696,17 @@ func Chown(path string, uid int, gid int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) -+ _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_chown_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_chown chown "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Chroot(path string) (err error) { -@@ -523,27 +715,49 @@ func Chroot(path string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) -+ _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_chroot_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_chroot chroot "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_clock_gettime_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Close(fd int) (err error) { -- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) -+ _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_close_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_close close "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Dup(fd int) (nfd int, err error) { -- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) -+ r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -551,33 +765,49 @@ func Dup(fd int) (nfd int, err error) { - return - } - -+var libc_dup_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_dup dup "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Dup2(from int, to int) (err error) { -- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) -+ _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_dup2_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Dup3(from int, to int, flags int) (err error) { -- _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) -+ _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_dup3_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Exit(code int) { -- Syscall(SYS_EXIT, uintptr(code), 0, 0) -+ syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) - return - } - -+var libc_exit_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_exit exit "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { -@@ -586,43 +816,59 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) -+ _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_faccessat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fchdir(fd int) (err error) { -- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) -+ _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fchdir_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fchflags(fd int, flags int) (err error) { -- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) -+ _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fchflags_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fchmod(fd int, mode uint32) (err error) { -- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) -+ _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fchmod_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { -@@ -631,23 +877,31 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) -+ _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fchmodat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fchown(fd int, uid int, gid int) (err error) { -- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) -+ _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fchown_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fchown fchown "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { -@@ -656,27 +910,35 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) -+ _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fchownat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Flock(fd int, how int) (err error) { -- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) -+ _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_flock_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_flock flock "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fpathconf(fd int, name int) (val int, err error) { -- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) -+ r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -684,16 +946,24 @@ func Fpathconf(fd int, name int) (val int, err error) { - return - } - -+var libc_fpathconf_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fstat(fd int, stat *Stat_t) (err error) { -- _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) -+ _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fstat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fstat fstat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { -@@ -702,71 +972,99 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) -+ _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fstatat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fstatfs(fd int, stat *Statfs_t) (err error) { -- _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) -+ _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fstatfs_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Fsync(fd int) (err error) { -- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) -+ _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_fsync_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_fsync fsync "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Ftruncate(fd int, length int64) (err error) { -- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) -+ _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_ftruncate_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getegid() (egid int) { -- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) -+ r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) - egid = int(r0) - return - } - -+var libc_getegid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getegid getegid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Geteuid() (uid int) { -- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) -+ r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return - } - -+var libc_geteuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getgid() (gid int) { -- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) -+ r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) - gid = int(r0) - return - } - -+var libc_getgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getgid getgid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getpgid(pid int) (pgid int, err error) { -- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) -+ r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -774,34 +1072,50 @@ func Getpgid(pid int) (pgid int, err error) { - return - } - -+var libc_getpgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getpgrp() (pgrp int) { -- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) -+ r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) - pgrp = int(r0) - return - } - -+var libc_getpgrp_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getpid() (pid int) { -- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) -+ r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) - pid = int(r0) - return - } - -+var libc_getpid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getpid getpid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getppid() (ppid int) { -- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) -+ r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) - ppid = int(r0) - return - } - -+var libc_getppid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getppid getppid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getpriority(which int, who int) (prio int, err error) { -- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) -+ r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -809,20 +1123,28 @@ func Getpriority(which int, who int) (prio int, err error) { - return - } - -+var libc_getpriority_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -+ _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_getrlimit_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getrtable() (rtable int, err error) { -- r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) -+ r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) - rtable = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -830,20 +1152,28 @@ func Getrtable() (rtable int, err error) { - return - } - -+var libc_getrtable_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getrusage(who int, rusage *Rusage) (err error) { -- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) -+ _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_getrusage_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getsid(pid int) (sid int, err error) { -- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) -+ r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -851,46 +1181,66 @@ func Getsid(pid int) (sid int, err error) { - return - } - -+var libc_getsid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getsid getsid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Gettimeofday(tv *Timeval) (err error) { -- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) -+ _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_gettimeofday_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Getuid() (uid int) { -- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) -+ r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return - } - -+var libc_getuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getuid getuid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Issetugid() (tainted bool) { -- r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) -+ r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) - tainted = bool(r0 != 0) - return - } - -+var libc_issetugid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Kill(pid int, signum syscall.Signal) (err error) { -- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) -+ _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_kill_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_kill kill "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Kqueue() (fd int, err error) { -- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) -+ r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -898,6 +1248,10 @@ func Kqueue() (fd int, err error) { - return - } - -+var libc_kqueue_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Lchown(path string, uid int, gid int) (err error) { -@@ -906,13 +1260,17 @@ func Lchown(path string, uid int, gid int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) -+ _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_lchown_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_lchown lchown "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Link(path string, link string) (err error) { -@@ -926,13 +1284,17 @@ func Link(path string, link string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) -+ _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_link_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_link link "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { -@@ -946,23 +1308,31 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er - if err != nil { - return - } -- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) -+ _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_linkat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_linkat linkat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Listen(s int, backlog int) (err error) { -- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) -+ _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_listen_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_listen listen "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Lstat(path string, stat *Stat_t) (err error) { -@@ -971,13 +1341,17 @@ func Lstat(path string, stat *Stat_t) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) -+ _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_lstat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_lstat lstat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mkdir(path string, mode uint32) (err error) { -@@ -986,13 +1360,17 @@ func Mkdir(path string, mode uint32) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) -+ _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mkdir_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mkdirat(dirfd int, path string, mode uint32) (err error) { -@@ -1001,13 +1379,17 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) -+ _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mkdirat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mkfifo(path string, mode uint32) (err error) { -@@ -1016,13 +1398,17 @@ func Mkfifo(path string, mode uint32) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) -+ _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mkfifo_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mkfifoat(dirfd int, path string, mode uint32) (err error) { -@@ -1031,13 +1417,17 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) -+ _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mkfifoat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mknod(path string, mode uint32, dev int) (err error) { -@@ -1046,13 +1436,17 @@ func Mknod(path string, mode uint32, dev int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) -+ _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mknod_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mknod mknod "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { -@@ -1061,23 +1455,31 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) -+ _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_mknodat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { -- _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) -+ _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_nanosleep_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Open(path string, mode int, perm uint32) (fd int, err error) { -@@ -1086,7 +1488,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { - if err != nil { - return - } -- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) -+ r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1094,6 +1496,10 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { - return - } - -+var libc_open_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_open open "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { -@@ -1102,7 +1508,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - if err != nil { - return - } -- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) -+ r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1110,6 +1516,10 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - return - } - -+var libc_openat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_openat openat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Pathconf(path string, name int) (val int, err error) { -@@ -1118,7 +1528,7 @@ func Pathconf(path string, name int) (val int, err error) { - if err != nil { - return - } -- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) -+ r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1126,6 +1536,10 @@ func Pathconf(path string, name int) (val int, err error) { - return - } - -+var libc_pathconf_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func pread(fd int, p []byte, offset int64) (n int, err error) { -@@ -1135,7 +1549,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) -+ r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1143,6 +1557,10 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { - return - } - -+var libc_pread_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_pread pread "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func pwrite(fd int, p []byte, offset int64) (n int, err error) { -@@ -1152,7 +1570,7 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) -+ r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1160,6 +1578,10 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { - return - } - -+var libc_pwrite_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func read(fd int, p []byte) (n int, err error) { -@@ -1169,7 +1591,7 @@ func read(fd int, p []byte) (n int, err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) -+ r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1177,6 +1599,10 @@ func read(fd int, p []byte) (n int, err error) { - return - } - -+var libc_read_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_read read "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Readlink(path string, buf []byte) (n int, err error) { -@@ -1191,7 +1617,7 @@ func Readlink(path string, buf []byte) (n int, err error) { - } else { - _p1 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) -+ r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1199,6 +1625,10 @@ func Readlink(path string, buf []byte) (n int, err error) { - return - } - -+var libc_readlink_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_readlink readlink "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { -@@ -1213,7 +1643,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - } else { - _p1 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) -+ r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1221,6 +1651,10 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - return - } - -+var libc_readlinkat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Rename(from string, to string) (err error) { -@@ -1234,13 +1668,17 @@ func Rename(from string, to string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) -+ _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_rename_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_rename rename "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Renameat(fromfd int, from string, tofd int, to string) (err error) { -@@ -1254,13 +1692,17 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) -+ _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_renameat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_renameat renameat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Revoke(path string) (err error) { -@@ -1269,13 +1711,17 @@ func Revoke(path string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) -+ _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_revoke_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_revoke revoke "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Rmdir(path string) (err error) { -@@ -1284,17 +1730,21 @@ func Rmdir(path string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) -+ _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_rmdir_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { -- r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) -+ r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1302,10 +1752,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - return - } - -+var libc_lseek_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_lseek lseek "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { -- r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) -+ r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1313,36 +1767,52 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err - return - } - -+var libc_select_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_select select "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setegid(egid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) -+ _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setegid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setegid setegid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Seteuid(euid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) -+ _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_seteuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setgid(gid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) -+ _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setgid setgid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setlogin(name string) (err error) { -@@ -1351,97 +1821,119 @@ func Setlogin(name string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) -+ _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setlogin_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setpgid(pid int, pgid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) -+ _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setpgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setpriority(which int, who int, prio int) (err error) { -- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) -+ _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setpriority_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setregid(rgid int, egid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) -+ _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setregid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setregid setregid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setreuid(ruid int, euid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) -+ _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setreuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setresgid(rgid int, egid int, sgid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) -+ _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setresgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setresuid(ruid int, euid int, suid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) -+ _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+var libc_setresuid_trampoline_addr uintptr - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -+//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setrtable(rtable int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) -+ _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setrtable_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setsid() (pid int, err error) { -- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) -+ r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1449,26 +1941,38 @@ func Setsid() (pid int, err error) { - return - } - -+var libc_setsid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setsid setsid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Settimeofday(tp *Timeval) (err error) { -- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) -+ _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_settimeofday_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Setuid(uid int) (err error) { -- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) -+ _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_setuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_setuid setuid "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Stat(path string, stat *Stat_t) (err error) { -@@ -1477,13 +1981,17 @@ func Stat(path string, stat *Stat_t) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) -+ _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_stat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_stat stat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Statfs(path string, stat *Statfs_t) (err error) { -@@ -1492,13 +2000,17 @@ func Statfs(path string, stat *Statfs_t) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) -+ _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_statfs_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_statfs statfs "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Symlink(path string, link string) (err error) { -@@ -1512,13 +2024,17 @@ func Symlink(path string, link string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) -+ _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_symlink_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_symlink symlink "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { -@@ -1532,23 +2048,31 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) -+ _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_symlinkat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Sync() (err error) { -- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) -+ _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_sync_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_sync sync "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Truncate(path string, length int64) (err error) { -@@ -1557,21 +2081,29 @@ func Truncate(path string, length int64) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) -+ _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_truncate_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_truncate truncate "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Umask(newmask int) (oldmask int) { -- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) -+ r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) - oldmask = int(r0) - return - } - -+var libc_umask_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_umask umask "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Unlink(path string) (err error) { -@@ -1580,13 +2112,17 @@ func Unlink(path string) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) -+ _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_unlink_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_unlink unlink "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Unlinkat(dirfd int, path string, flags int) (err error) { -@@ -1595,13 +2131,17 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) -+ _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_unlinkat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func Unmount(path string, flags int) (err error) { -@@ -1610,13 +2150,17 @@ func Unmount(path string, flags int) (err error) { - if err != nil { - return - } -- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) -+ _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - -+var libc_unmount_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_unmount unmount "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func write(fd int, p []byte) (n int, err error) { -@@ -1626,7 +2170,7 @@ func write(fd int, p []byte) (n int, err error) { - } else { - _p0 = unsafe.Pointer(&_zero) - } -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) -+ r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1634,10 +2178,14 @@ func write(fd int, p []byte) (n int, err error) { - return - } - -+var libc_write_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_write write "libc.so" -+ - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - - func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { -- r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) -+ r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) -@@ -1645,37 +2193,23 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( - return - } - --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+var libc_mmap_trampoline_addr uintptr - --func munmap(addr uintptr, length uintptr) (err error) { -- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -+//go:cgo_import_dynamic libc_mmap mmap "libc.so" - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -+func munmap(addr uintptr, length uintptr) (err error) { -+ _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } - --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+var libc_munmap_trampoline_addr uintptr - --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -+//go:cgo_import_dynamic libc_munmap munmap "libc.so" - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -@@ -1685,9 +2219,13 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error - if err != nil { - return - } -- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) -+ _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return - } -+ -+var libc_utimensat_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s -new file mode 100755 -index 0000000..b4e7bce ---- /dev/null -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s -@@ -0,0 +1,674 @@ -+// go run mkasm.go openbsd mips64 -+// Code generated by the command above; DO NOT EDIT. -+ -+#include "textflag.h" -+ -+TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getgroups(SB) -+GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) -+ -+TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setgroups(SB) -+GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) -+ -+TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_wait4(SB) -+GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) -+ -+TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_accept(SB) -+GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) -+ -+TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_bind(SB) -+GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) -+ -+TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_connect(SB) -+GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) -+ -+TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_socket(SB) -+GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) -+ -+TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getsockopt(SB) -+GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) -+ -+TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setsockopt(SB) -+GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) -+ -+TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getpeername(SB) -+GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) -+ -+TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getsockname(SB) -+GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) -+ -+TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_shutdown(SB) -+GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) -+ -+TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_socketpair(SB) -+GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) -+ -+TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_recvfrom(SB) -+GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) -+ -+TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_sendto(SB) -+GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) -+ -+TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_recvmsg(SB) -+GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) -+ -+TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_sendmsg(SB) -+GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) -+ -+TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_kevent(SB) -+GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) -+ -+TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_utimes(SB) -+GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) -+ -+TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_futimes(SB) -+GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) -+ -+TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_poll(SB) -+GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) -+ -+TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_madvise(SB) -+GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) -+ -+TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mlock(SB) -+GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) -+ -+TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mlockall(SB) -+GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) -+ -+TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mprotect(SB) -+GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) -+ -+TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_msync(SB) -+GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) -+ -+TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_munlock(SB) -+GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) -+ -+TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_munlockall(SB) -+GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) -+ -+TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_pipe2(SB) -+GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB) -+ -+TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getdents(SB) -+GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB) -+ -+TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getcwd(SB) -+GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) -+ -+TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresuid(SB) -+GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) -+ -+TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresgid(SB) -+GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) -+ -+TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_ioctl(SB) -+GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) -+ -+TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_sysctl(SB) -+GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) -+ -+TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_ppoll(SB) -+GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB) -+ -+TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_access(SB) -+GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) -+ -+TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_adjtime(SB) -+GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) -+ -+TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_chdir(SB) -+GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) -+ -+TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_chflags(SB) -+GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) -+ -+TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_chmod(SB) -+GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) -+ -+TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_chown(SB) -+GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) -+ -+TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_chroot(SB) -+GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) -+ -+TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_clock_gettime(SB) -+GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) -+ -+TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_close(SB) -+GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) -+ -+TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_dup(SB) -+GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) -+ -+TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_dup2(SB) -+GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) -+ -+TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_dup3(SB) -+GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB) -+ -+TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_exit(SB) -+GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) -+ -+TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_faccessat(SB) -+GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) -+ -+TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fchdir(SB) -+GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) -+ -+TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fchflags(SB) -+GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) -+ -+TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fchmod(SB) -+GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) -+ -+TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fchmodat(SB) -+GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) -+ -+TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fchown(SB) -+GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) -+ -+TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fchownat(SB) -+GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) -+ -+TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_flock(SB) -+GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) -+ -+TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fpathconf(SB) -+GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) -+ -+TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fstat(SB) -+GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) -+ -+TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fstatat(SB) -+GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) -+ -+TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fstatfs(SB) -+GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) -+ -+TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_fsync(SB) -+GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) -+ -+TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_ftruncate(SB) -+GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) -+ -+TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getegid(SB) -+GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) -+ -+TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_geteuid(SB) -+GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) -+ -+TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getgid(SB) -+GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) -+ -+TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getpgid(SB) -+GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) -+ -+TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getpgrp(SB) -+GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) -+ -+TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getpid(SB) -+GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) -+ -+TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getppid(SB) -+GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) -+ -+TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getpriority(SB) -+GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) -+ -+TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getrlimit(SB) -+GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) -+ -+TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getrtable(SB) -+GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB) -+ -+TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getrusage(SB) -+GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) -+ -+TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getsid(SB) -+GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) -+ -+TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_gettimeofday(SB) -+GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) -+ -+TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getuid(SB) -+GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) -+ -+TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_issetugid(SB) -+GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) -+ -+TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_kill(SB) -+GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) -+ -+TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_kqueue(SB) -+GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) -+ -+TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_lchown(SB) -+GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) -+ -+TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_link(SB) -+GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) -+ -+TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_linkat(SB) -+GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) -+ -+TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_listen(SB) -+GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) -+ -+TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_lstat(SB) -+GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) -+ -+TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mkdir(SB) -+GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) -+ -+TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mkdirat(SB) -+GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) -+ -+TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mkfifo(SB) -+GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) -+ -+TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mkfifoat(SB) -+GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB) -+ -+TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mknod(SB) -+GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) -+ -+TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mknodat(SB) -+GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) -+ -+TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_nanosleep(SB) -+GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB) -+ -+TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_open(SB) -+GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) -+ -+TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_openat(SB) -+GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) -+ -+TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_pathconf(SB) -+GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) -+ -+TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_pread(SB) -+GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) -+ -+TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_pwrite(SB) -+GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) -+ -+TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_read(SB) -+GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) -+ -+TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_readlink(SB) -+GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) -+ -+TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_readlinkat(SB) -+GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) -+ -+TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_rename(SB) -+GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) -+ -+TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_renameat(SB) -+GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) -+ -+TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_revoke(SB) -+GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) -+ -+TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_rmdir(SB) -+GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) -+ -+TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_lseek(SB) -+GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) -+ -+TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_select(SB) -+GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) -+ -+TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setegid(SB) -+GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) -+ -+TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_seteuid(SB) -+GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) -+ -+TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setgid(SB) -+GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) -+ -+TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setlogin(SB) -+GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) -+ -+TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setpgid(SB) -+GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) -+ -+TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setpriority(SB) -+GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) -+ -+TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setregid(SB) -+GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) -+ -+TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setreuid(SB) -+GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) -+ -+TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setresgid(SB) -+GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB) -+ -+TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setresuid(SB) -+GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -+ -+TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setrtable(SB) -+GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB) -+ -+TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setsid(SB) -+GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) -+ -+TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_settimeofday(SB) -+GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) -+ -+TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_setuid(SB) -+GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) -+ -+TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_stat(SB) -+GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) -+ -+TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_statfs(SB) -+GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) -+ -+TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_symlink(SB) -+GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) -+ -+TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_symlinkat(SB) -+GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) -+ -+TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_sync(SB) -+GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) -+ -+TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_truncate(SB) -+GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) -+ -+TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_umask(SB) -+GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) -+ -+TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_unlink(SB) -+GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) -+ -+TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_unlinkat(SB) -+GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) -+ -+TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_unmount(SB) -+GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) -+ -+TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_write(SB) -+GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) -+ -+TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_mmap(SB) -+GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) -+ -+TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_munmap(SB) -+GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) -+ -+TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_utimensat(SB) -+GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go -old mode 100644 -new mode 100755 -index c85de2d..60c1a99 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go -@@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { -+ syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) -+ return -+} -+ -+var libc_getresuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { -+ syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) -+ return -+} -+ -+var libc_getresgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { -@@ -533,6 +555,16 @@ var libc_ioctl_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -696,6 +728,20 @@ var libc_chroot_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_clock_gettime_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1872,20 +1918,6 @@ var libc_setresuid_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --var libc_setrlimit_trampoline_addr uintptr -- --//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { -@@ -2181,28 +2213,6 @@ var libc_munmap_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s -old mode 100644 -new mode 100755 -index 7c9223b..ca3f766 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s -@@ -189,6 +189,18 @@ TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - -+TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 -+ CALL libc_getresuid(SB) -+ RET -+GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) -+ -+TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 -+ CALL libc_getresgid(SB) -+ RET -+GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) -+ - TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - CALL libc_ioctl(SB) - RET -@@ -249,6 +261,12 @@ TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - -+TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 -+ CALL libc_clock_gettime(SB) -+ RET -+GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) -+ - TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - CALL libc_close(SB) - RET -@@ -681,12 +699,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) - --TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 -- CALL libc_setrlimit(SB) -- RET --GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 --DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) -- - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - CALL libc_setrtable(SB) - RET -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go -old mode 100644 -new mode 100755 -index 8e3e787..52eba36 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go -@@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { -+ syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) -+ return -+} -+ -+var libc_getresuid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { -+ syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) -+ return -+} -+ -+var libc_getresgid_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { -@@ -533,6 +555,16 @@ var libc_ioctl_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { -+ _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { -@@ -696,6 +728,20 @@ var libc_chroot_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+var libc_clock_gettime_trampoline_addr uintptr -+ -+//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so" -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ - func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { -@@ -1872,20 +1918,6 @@ var libc_setresuid_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --var libc_setrlimit_trampoline_addr uintptr -- --//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { -@@ -2181,28 +2213,6 @@ var libc_munmap_trampoline_addr uintptr - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func writelen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s -old mode 100644 -new mode 100755 -index 7dba789..477a7d5 ---- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s -+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s -@@ -5,792 +5,670 @@ - - TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -- - GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - - TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -- - GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - - TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -- - GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 - DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - - TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -- - GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 - DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - - TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -- - GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 - DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - - TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -- - GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - - TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -- - GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - - TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -- - GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - - TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -- - GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - - TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -- - GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - - TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -- - GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - - TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -- - GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - - TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -- - GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 - DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - - TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -- - GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - - TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -- - GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - - TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -- - GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - - TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -- - GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - - TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -- - GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - - TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -- - GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - - TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -- - GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 - DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - - TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -- - GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 - DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - - TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -- - GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 - DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - - TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -- - GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - - TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -- - GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - - TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -- - GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - - TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -- - GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - - TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -- - GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - - TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -- - GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - - TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) -- - GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB) - - TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) -- - GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB) - - TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -- - GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - -+TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresuid(SB) -+GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) -+ -+TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_getresgid(SB) -+GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) -+ - TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -- - GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - - TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -- - GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - - TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) -- - GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB) - - TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -- - GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 - DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - - TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -- - GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 - DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - - TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -- - GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - - TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -- - GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - - TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -- - GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - - TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -- - GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - - TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -- - GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 - DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - -+TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 -+ JMP libc_clock_gettime(SB) -+GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 -+DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) -+ - TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -- - GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 - DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - - TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -- - GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - - TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -- - GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - - TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) -- - GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $8 - DATA ·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB) - - TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -- - GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - - TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -- - GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - - TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -- - GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - - TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -- - GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - - TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -- - GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - - TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -- - GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - - TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -- - GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - - TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -- - GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - - TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -- - GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 - DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - - TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -- - GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - - TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) -- - GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) - - TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) -- - GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) - - TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) -- - GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) - - TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -- - GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - - TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -- - GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - - TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -- - GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - - TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -- - GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - - TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -- - GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - - TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -- - GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - - TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -- - GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - - TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -- - GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - - TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -- - GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - - TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -- - GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - - TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -- - GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - - TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) -- - GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB) - - TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -- - GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - - TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -- - GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - - TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -- - GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - - TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -- - GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - - TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -- - GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - - TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -- - GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - - TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -- - GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 - DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - - TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -- - GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - - TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -- - GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 - DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - - TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -- - GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - - TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -- - GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 - DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - - TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) -- - GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) - - TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -- - GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - - TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -- - GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - - TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -- - GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - - TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) -- - GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB) - - TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -- - GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - - TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) -- - GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) - - TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) -- - GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 - DATA ·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB) - - TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -- - GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 - DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - - TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -- - GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - - TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -- - GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - - TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -- - GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - - TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -- - GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 - DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - - TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -- - GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 - DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - - TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -- - GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - - TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -- - GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - - TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -- - GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - - TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -- - GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - - TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -- - GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 - DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - - TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -- - GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 - DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - - TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -- - GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 - DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - - TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -- - GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 - DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - - TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -- - GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - - TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -- - GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - - TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -- - GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - - TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -- - GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - - TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -- - GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - - TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -- - GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - - TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -- - GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - - TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -- - GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - - TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) -- - GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB) - - TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) -- - GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) - --TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 -- JMP libc_setrlimit(SB) -- --GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 --DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) -- - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) -- - GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB) - - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -- - GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - - TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -- - GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 - DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - - TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -- - GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 - DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - - TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) -- - GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) - - TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) -- - GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 - DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) - - TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -- - GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - - TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -- - GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - - TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -- - GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 - DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - - TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -- - GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 - DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - - TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -- - GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 - DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - - TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -- - GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - - TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -- - GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - - TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -- - GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 - DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - - TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -- - GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 - DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - - TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -- - GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - - TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -- - GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 - DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - - TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) -- - GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 - DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go -old mode 100644 -new mode 100755 -index 91f5a2b..b401894 ---- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go -@@ -38,6 +38,7 @@ import ( - //go:cgo_import_dynamic libc_chmod chmod "libc.so" - //go:cgo_import_dynamic libc_chown chown "libc.so" - //go:cgo_import_dynamic libc_chroot chroot "libc.so" -+//go:cgo_import_dynamic libc_clockgettime clockgettime "libc.so" - //go:cgo_import_dynamic libc_close close "libc.so" - //go:cgo_import_dynamic libc_creat creat "libc.so" - //go:cgo_import_dynamic libc_dup dup "libc.so" -@@ -109,7 +110,6 @@ import ( - //go:cgo_import_dynamic libc_setpriority setpriority "libc.so" - //go:cgo_import_dynamic libc_setregid setregid "libc.so" - //go:cgo_import_dynamic libc_setreuid setreuid "libc.so" --//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - //go:cgo_import_dynamic libc_setsid setsid "libc.so" - //go:cgo_import_dynamic libc_setuid setuid "libc.so" - //go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" -@@ -177,6 +177,7 @@ import ( - //go:linkname procChmod libc_chmod - //go:linkname procChown libc_chown - //go:linkname procChroot libc_chroot -+//go:linkname procClockGettime libc_clockgettime - //go:linkname procClose libc_close - //go:linkname procCreat libc_creat - //go:linkname procDup libc_dup -@@ -248,7 +249,6 @@ import ( - //go:linkname procSetpriority libc_setpriority - //go:linkname procSetregid libc_setregid - //go:linkname procSetreuid libc_setreuid --//go:linkname procSetrlimit libc_setrlimit - //go:linkname procSetsid libc_setsid - //go:linkname procSetuid libc_setuid - //go:linkname procshutdown libc_shutdown -@@ -317,6 +317,7 @@ var ( - procChmod, - procChown, - procChroot, -+ procClockGettime, - procClose, - procCreat, - procDup, -@@ -388,7 +389,6 @@ var ( - procSetpriority, - procSetregid, - procSetreuid, -- procSetrlimit, - procSetsid, - procSetuid, - procshutdown, -@@ -436,7 +436,7 @@ func pipe(p *[2]_C_int) (n int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -446,7 +446,7 @@ func pipe(p *[2]_C_int) (n int, err error) { - func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -456,7 +456,7 @@ func pipe2(p *[2]_C_int, flags int) (err error) { - func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -471,7 +471,7 @@ func Getcwd(buf []byte) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -482,7 +482,7 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -492,7 +492,7 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -503,7 +503,7 @@ func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int32(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -518,7 +518,7 @@ func gethostname(buf []byte) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -533,7 +533,7 @@ func utimes(path string, times *[2]Timeval) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -548,7 +548,7 @@ func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -559,7 +559,7 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) - val = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -569,7 +569,7 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { - func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -580,7 +580,7 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - fd = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -591,7 +591,7 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -602,7 +602,7 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -612,7 +612,7 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - func acct(path *byte) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -643,11 +643,22 @@ func __minor(version int, dev uint64) (val uint) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) { -+func ioctlRet(fd int, req int, arg uintptr) (ret int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) - ret = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) { -+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) -+ ret = int(r0) -+ if e1 != 0 { -+ err = errnoErr(e1) - } - return - } -@@ -658,7 +669,7 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -673,7 +684,7 @@ func Access(path string, mode uint32) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -683,7 +694,7 @@ func Access(path string, mode uint32) (err error) { - func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -698,7 +709,7 @@ func Chdir(path string) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -713,7 +724,7 @@ func Chmod(path string, mode uint32) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -728,7 +739,7 @@ func Chown(path string, uid int, gid int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -743,7 +754,17 @@ func Chroot(path string) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func ClockGettime(clockid int32, time *Timespec) (err error) { -+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClockGettime)), 2, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0, 0, 0, 0) -+ if e1 != 0 { -+ err = errnoErr(e1) - } - return - } -@@ -753,7 +774,7 @@ func Chroot(path string) (err error) { - func Close(fd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -769,7 +790,7 @@ func Creat(path string, mode uint32) (fd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - fd = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -780,7 +801,7 @@ func Dup(fd int) (nfd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0) - nfd = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -790,7 +811,7 @@ func Dup(fd int) (nfd int, err error) { - func Dup2(oldfd int, newfd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -812,7 +833,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -822,7 +843,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - func Fchdir(fd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -832,7 +853,7 @@ func Fchdir(fd int) (err error) { - func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -847,7 +868,7 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -857,7 +878,7 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -872,7 +893,7 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -882,7 +903,7 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - func Fdatasync(fd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -892,7 +913,7 @@ func Fdatasync(fd int) (err error) { - func Flock(fd int, how int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -903,7 +924,7 @@ func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0) - val = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -913,7 +934,7 @@ func Fpathconf(fd int, name int) (val int, err error) { - func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -928,7 +949,7 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -938,7 +959,7 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -953,7 +974,7 @@ func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -980,7 +1001,7 @@ func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) - pgid = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -991,7 +1012,7 @@ func Getpgrp() (pgid int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0) - pgid = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1026,7 +1047,7 @@ func Getpriority(which int, who int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1036,7 +1057,7 @@ func Getpriority(which int, who int) (n int, err error) { - func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1046,7 +1067,7 @@ func Getrlimit(which int, lim *Rlimit) (err error) { - func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1057,7 +1078,7 @@ func Getsid(pid int) (sid int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetsid)), 1, uintptr(pid), 0, 0, 0, 0, 0) - sid = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1067,7 +1088,7 @@ func Getsid(pid int) (sid int, err error) { - func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1085,7 +1106,7 @@ func Getuid() (uid int) { - func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1100,7 +1121,7 @@ func Lchown(path string, uid int, gid int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1120,7 +1141,7 @@ func Link(path string, link string) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1130,7 +1151,7 @@ func Link(path string, link string) (err error) { - func Listen(s int, backlog int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1145,7 +1166,7 @@ func Lstat(path string, stat *Stat_t) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1159,7 +1180,7 @@ func Madvise(b []byte, advice int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1174,7 +1195,7 @@ func Mkdir(path string, mode uint32) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1189,7 +1210,7 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1204,7 +1225,7 @@ func Mkfifo(path string, mode uint32) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1219,7 +1240,7 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1234,7 +1255,7 @@ func Mknod(path string, mode uint32, dev int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1249,7 +1270,7 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1263,7 +1284,7 @@ func Mlock(b []byte) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1273,7 +1294,7 @@ func Mlock(b []byte) (err error) { - func Mlockall(flags int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1287,7 +1308,7 @@ func Mprotect(b []byte, prot int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1301,7 +1322,7 @@ func Msync(b []byte, flags int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1315,7 +1336,7 @@ func Munlock(b []byte) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1325,7 +1346,7 @@ func Munlock(b []byte) (err error) { - func Munlockall() (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1335,7 +1356,7 @@ func Munlockall() (err error) { - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1351,7 +1372,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0) - fd = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1367,7 +1388,7 @@ func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) - fd = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1383,7 +1404,7 @@ func Pathconf(path string, name int) (val int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0) - val = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1393,7 +1414,7 @@ func Pathconf(path string, name int) (val int, err error) { - func Pause() (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1408,7 +1429,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1423,7 +1444,7 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1438,7 +1459,7 @@ func read(fd int, p []byte) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1458,7 +1479,7 @@ func Readlink(path string, buf []byte) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1478,7 +1499,7 @@ func Rename(from string, to string) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1498,7 +1519,7 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1513,7 +1534,7 @@ func Rmdir(path string) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1524,7 +1545,7 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) - newoffset = int64(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1535,7 +1556,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1545,7 +1566,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err - func Setegid(egid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1555,7 +1576,7 @@ func Setegid(egid int) (err error) { - func Seteuid(euid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1565,7 +1586,7 @@ func Seteuid(euid int) (err error) { - func Setgid(gid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1579,7 +1600,7 @@ func Sethostname(p []byte) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1589,7 +1610,7 @@ func Sethostname(p []byte) (err error) { - func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1599,7 +1620,7 @@ func Setpgid(pid int, pgid int) (err error) { - func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1609,7 +1630,7 @@ func Setpriority(which int, who int, prio int) (err error) { - func Setregid(rgid int, egid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1619,17 +1640,7 @@ func Setregid(rgid int, egid int) (err error) { - func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- --func Setrlimit(which int, lim *Rlimit) (err error) { -- _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) -- if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1640,7 +1651,7 @@ func Setsid() (pid int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) - pid = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1650,7 +1661,7 @@ func Setsid() (pid int, err error) { - func Setuid(uid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1660,7 +1671,7 @@ func Setuid(uid int) (err error) { - func Shutdown(s int, how int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1675,7 +1686,7 @@ func Stat(path string, stat *Stat_t) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1690,7 +1701,7 @@ func Statvfs(path string, vfsstat *Statvfs_t) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1710,7 +1721,7 @@ func Symlink(path string, link string) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1720,7 +1731,7 @@ func Symlink(path string, link string) (err error) { - func Sync() (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1731,7 +1742,7 @@ func Sysconf(which int) (n int64, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSysconf)), 1, uintptr(which), 0, 0, 0, 0, 0) - n = int64(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1742,7 +1753,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0) - ticks = uintptr(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1757,7 +1768,7 @@ func Truncate(path string, length int64) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1767,7 +1778,7 @@ func Truncate(path string, length int64) (err error) { - func Fsync(fd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1777,7 +1788,7 @@ func Fsync(fd int) (err error) { - func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1795,7 +1806,7 @@ func Umask(mask int) (oldmask int) { - func Uname(buf *Utsname) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1810,7 +1821,7 @@ func Unmount(target string, flags int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1825,7 +1836,7 @@ func Unlink(path string) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1840,7 +1851,7 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1850,7 +1861,7 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { - func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1865,7 +1876,7 @@ func Utime(path string, buf *Utimbuf) (err error) { - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1875,7 +1886,7 @@ func Utime(path string, buf *Utimbuf) (err error) { - func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1885,7 +1896,7 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1896,7 +1907,7 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1906,7 +1917,7 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( - func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1917,7 +1928,7 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1931,7 +1942,7 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1942,7 +1953,7 @@ func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) - fd = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1952,7 +1963,7 @@ func socket(domain int, typ int, proto int) (fd int, err error) { - func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1967,7 +1978,7 @@ func write(fd int, p []byte) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1977,7 +1988,7 @@ func write(fd int, p []byte) (n int, err error) { - func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1987,7 +1998,7 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen - func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -1997,7 +2008,7 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -2012,7 +2023,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -2023,7 +2034,7 @@ func port_create() (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -2034,7 +2045,7 @@ func port_associate(port int, source int, object uintptr, events int, user *byte - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -2045,7 +2056,7 @@ func port_dissociate(port int, source int, object uintptr) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -2056,7 +2067,7 @@ func port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -2067,7 +2078,7 @@ func port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Times - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -2077,7 +2088,7 @@ func port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Times - func putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procputmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(flags), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -@@ -2087,7 +2098,7 @@ func putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) { - func getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(unsafe.Pointer(flags)), 0, 0) - if e1 != 0 { -- err = e1 -+ err = errnoErr(e1) - } - return - } -diff --git a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go -old mode 100644 -new mode 100755 -index f207945..1d8fe1d ---- a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go -+++ b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go -@@ -40,17 +40,6 @@ func read(fd int, p []byte) (n int, err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func readlen(fd int, buf *byte, nbuf int) (n int, err error) { -- r0, _, e1 := syscall_syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) -- n = int(r0) -- if e1 != 0 { -- err = errnoErr(e1) -- } -- return --} -- --// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -- - func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { -@@ -257,7 +246,17 @@ func munmap(addr uintptr, length uintptr) (err error) { - - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - --func ioctl(fd int, req uint, arg uintptr) (err error) { -+func ioctl(fd int, req int, arg uintptr) (err error) { -+ _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) -+ if e1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -+ -+func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { - _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) -diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go -old mode 100644 -new mode 100755 -index 9e9d0b2..55e0484 ---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go -+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go -@@ -17,6 +17,7 @@ var sysctlMib = []mibentry{ - {"ddb.max_line", []_C_int{9, 3}}, - {"ddb.max_width", []_C_int{9, 2}}, - {"ddb.panic", []_C_int{9, 5}}, -+ {"ddb.profile", []_C_int{9, 9}}, - {"ddb.radix", []_C_int{9, 1}}, - {"ddb.tab_stop_width", []_C_int{9, 4}}, - {"ddb.trigger", []_C_int{9, 8}}, -@@ -33,29 +34,37 @@ var sysctlMib = []mibentry{ - {"hw.ncpufound", []_C_int{6, 21}}, - {"hw.ncpuonline", []_C_int{6, 25}}, - {"hw.pagesize", []_C_int{6, 7}}, -+ {"hw.perfpolicy", []_C_int{6, 23}}, - {"hw.physmem", []_C_int{6, 19}}, -+ {"hw.power", []_C_int{6, 26}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, -+ {"hw.smt", []_C_int{6, 24}}, - {"hw.usermem", []_C_int{6, 20}}, - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, -- {"kern.arandom", []_C_int{1, 37}}, -+ {"kern.allowdt", []_C_int{1, 65}}, -+ {"kern.allowkmem", []_C_int{1, 52}}, - {"kern.argmax", []_C_int{1, 8}}, -+ {"kern.audio", []_C_int{1, 84}}, - {"kern.boottime", []_C_int{1, 21}}, - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, -+ {"kern.consbuf", []_C_int{1, 83}}, -+ {"kern.consbufsize", []_C_int{1, 82}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, -- {"kern.cryptodevallowsoft", []_C_int{1, 53}}, -+ {"kern.cpustats", []_C_int{1, 85}}, - {"kern.domainname", []_C_int{1, 22}}, - {"kern.file", []_C_int{1, 73}}, - {"kern.forkstat", []_C_int{1, 42}}, - {"kern.fscale", []_C_int{1, 46}}, - {"kern.fsync", []_C_int{1, 33}}, -+ {"kern.global_ptrace", []_C_int{1, 81}}, - {"kern.hostid", []_C_int{1, 11}}, - {"kern.hostname", []_C_int{1, 10}}, - {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, -@@ -78,17 +87,16 @@ var sysctlMib = []mibentry{ - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, -- {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, -+ {"kern.pfstatus", []_C_int{1, 86}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, -- {"kern.random", []_C_int{1, 31}}, - {"kern.rawpartition", []_C_int{1, 24}}, - {"kern.saved_ids", []_C_int{1, 20}}, - {"kern.securelevel", []_C_int{1, 9}}, -@@ -106,21 +114,20 @@ var sysctlMib = []mibentry{ - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, -- {"kern.tty.maxptys", []_C_int{1, 44, 6}}, -- {"kern.tty.nptys", []_C_int{1, 44, 7}}, -+ {"kern.timeout_stats", []_C_int{1, 87}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, -- {"kern.userasymcrypto", []_C_int{1, 60}}, -- {"kern.usercrypto", []_C_int{1, 52}}, -- {"kern.usermount", []_C_int{1, 30}}, -+ {"kern.utc_offset", []_C_int{1, 88}}, - {"kern.version", []_C_int{1, 4}}, -- {"kern.vnode", []_C_int{1, 13}}, -+ {"kern.video", []_C_int{1, 89}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, -+ {"kern.witnesswatch", []_C_int{1, 53}}, -+ {"kern.wxabort", []_C_int{1, 74}}, - {"net.bpf.bufsize", []_C_int{4, 31, 1}}, - {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, - {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, -@@ -148,7 +155,9 @@ var sysctlMib = []mibentry{ - {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, - {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, - {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, -+ {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, - {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, -+ {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, - {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, - {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, - {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, -@@ -157,8 +166,10 @@ var sysctlMib = []mibentry{ - {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, - {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, - {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, -+ {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, - {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, - {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, -+ {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, - {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, - {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, - {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, -@@ -175,9 +186,7 @@ var sysctlMib = []mibentry{ - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, -- {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, -- {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, - {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, -@@ -191,6 +200,7 @@ var sysctlMib = []mibentry{ - {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, - {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, - {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, -+ {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, - {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, - {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, - {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, -@@ -198,9 +208,12 @@ var sysctlMib = []mibentry{ - {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, - {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, - {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, -+ {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, -+ {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, - {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, - {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, - {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, -+ {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, - {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, - {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, - {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, -@@ -213,13 +226,8 @@ var sysctlMib = []mibentry{ - {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, - {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, - {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, -- {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, - {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, -- {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, -- {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, -- {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, - {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, -- {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, - {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, - {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, - {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, -@@ -232,20 +240,19 @@ var sysctlMib = []mibentry{ - {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, - {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, - {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, -- {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, -- {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, - {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, -+ {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, -+ {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, - {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, - {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, - {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, - {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, - {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, - {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, -- {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, -+ {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, - {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, - {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, - {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, -- {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, - {"net.key.sadb_dump", []_C_int{4, 30, 1}}, - {"net.key.spd_dump", []_C_int{4, 30, 2}}, - {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, -@@ -254,12 +261,12 @@ var sysctlMib = []mibentry{ - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, -- {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, - {"vm.anonmin", []_C_int{2, 7}}, - {"vm.loadavg", []_C_int{2, 2}}, -+ {"vm.malloc_conf", []_C_int{2, 12}}, - {"vm.maxslp", []_C_int{2, 10}}, - {"vm.nkmempages", []_C_int{2, 6}}, - {"vm.psstrings", []_C_int{2, 3}}, -diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go -old mode 100644 -new mode 100755 -index adecd09..d2243cf ---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go -@@ -36,23 +36,29 @@ var sysctlMib = []mibentry{ - {"hw.pagesize", []_C_int{6, 7}}, - {"hw.perfpolicy", []_C_int{6, 23}}, - {"hw.physmem", []_C_int{6, 19}}, -+ {"hw.power", []_C_int{6, 26}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, -+ {"hw.smt", []_C_int{6, 24}}, - {"hw.usermem", []_C_int{6, 20}}, - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, -+ {"kern.allowdt", []_C_int{1, 65}}, - {"kern.allowkmem", []_C_int{1, 52}}, - {"kern.argmax", []_C_int{1, 8}}, -+ {"kern.audio", []_C_int{1, 84}}, - {"kern.boottime", []_C_int{1, 21}}, - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, -+ {"kern.consbuf", []_C_int{1, 83}}, -+ {"kern.consbufsize", []_C_int{1, 82}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, -- {"kern.dnsjackport", []_C_int{1, 13}}, -+ {"kern.cpustats", []_C_int{1, 85}}, - {"kern.domainname", []_C_int{1, 22}}, - {"kern.file", []_C_int{1, 73}}, - {"kern.forkstat", []_C_int{1, 42}}, -@@ -81,13 +87,13 @@ var sysctlMib = []mibentry{ - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, -- {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, -+ {"kern.pfstatus", []_C_int{1, 86}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, -@@ -108,15 +114,19 @@ var sysctlMib = []mibentry{ - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, -+ {"kern.timeout_stats", []_C_int{1, 87}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, -+ {"kern.utc_offset", []_C_int{1, 88}}, - {"kern.version", []_C_int{1, 4}}, -+ {"kern.video", []_C_int{1, 89}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, -+ {"kern.witnesswatch", []_C_int{1, 53}}, - {"kern.wxabort", []_C_int{1, 74}}, - {"net.bpf.bufsize", []_C_int{4, 31, 1}}, - {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, -@@ -176,7 +186,6 @@ var sysctlMib = []mibentry{ - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, -- {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, -@@ -252,12 +261,12 @@ var sysctlMib = []mibentry{ - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, -- {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, - {"vm.anonmin", []_C_int{2, 7}}, - {"vm.loadavg", []_C_int{2, 2}}, -+ {"vm.malloc_conf", []_C_int{2, 12}}, - {"vm.maxslp", []_C_int{2, 10}}, - {"vm.nkmempages", []_C_int{2, 6}}, - {"vm.psstrings", []_C_int{2, 3}}, -diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go -old mode 100644 -new mode 100755 -index 8ea52a4..82dc51b ---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go -@@ -17,6 +17,7 @@ var sysctlMib = []mibentry{ - {"ddb.max_line", []_C_int{9, 3}}, - {"ddb.max_width", []_C_int{9, 2}}, - {"ddb.panic", []_C_int{9, 5}}, -+ {"ddb.profile", []_C_int{9, 9}}, - {"ddb.radix", []_C_int{9, 1}}, - {"ddb.tab_stop_width", []_C_int{9, 4}}, - {"ddb.trigger", []_C_int{9, 8}}, -@@ -33,29 +34,37 @@ var sysctlMib = []mibentry{ - {"hw.ncpufound", []_C_int{6, 21}}, - {"hw.ncpuonline", []_C_int{6, 25}}, - {"hw.pagesize", []_C_int{6, 7}}, -+ {"hw.perfpolicy", []_C_int{6, 23}}, - {"hw.physmem", []_C_int{6, 19}}, -+ {"hw.power", []_C_int{6, 26}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, -+ {"hw.smt", []_C_int{6, 24}}, - {"hw.usermem", []_C_int{6, 20}}, - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, -- {"kern.arandom", []_C_int{1, 37}}, -+ {"kern.allowdt", []_C_int{1, 65}}, -+ {"kern.allowkmem", []_C_int{1, 52}}, - {"kern.argmax", []_C_int{1, 8}}, -+ {"kern.audio", []_C_int{1, 84}}, - {"kern.boottime", []_C_int{1, 21}}, - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, -+ {"kern.consbuf", []_C_int{1, 83}}, -+ {"kern.consbufsize", []_C_int{1, 82}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, -- {"kern.cryptodevallowsoft", []_C_int{1, 53}}, -+ {"kern.cpustats", []_C_int{1, 85}}, - {"kern.domainname", []_C_int{1, 22}}, - {"kern.file", []_C_int{1, 73}}, - {"kern.forkstat", []_C_int{1, 42}}, - {"kern.fscale", []_C_int{1, 46}}, - {"kern.fsync", []_C_int{1, 33}}, -+ {"kern.global_ptrace", []_C_int{1, 81}}, - {"kern.hostid", []_C_int{1, 11}}, - {"kern.hostname", []_C_int{1, 10}}, - {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, -@@ -78,17 +87,16 @@ var sysctlMib = []mibentry{ - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, -- {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, -+ {"kern.pfstatus", []_C_int{1, 86}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, -- {"kern.random", []_C_int{1, 31}}, - {"kern.rawpartition", []_C_int{1, 24}}, - {"kern.saved_ids", []_C_int{1, 20}}, - {"kern.securelevel", []_C_int{1, 9}}, -@@ -106,21 +114,20 @@ var sysctlMib = []mibentry{ - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, -- {"kern.tty.maxptys", []_C_int{1, 44, 6}}, -- {"kern.tty.nptys", []_C_int{1, 44, 7}}, -+ {"kern.timeout_stats", []_C_int{1, 87}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, -- {"kern.userasymcrypto", []_C_int{1, 60}}, -- {"kern.usercrypto", []_C_int{1, 52}}, -- {"kern.usermount", []_C_int{1, 30}}, -+ {"kern.utc_offset", []_C_int{1, 88}}, - {"kern.version", []_C_int{1, 4}}, -- {"kern.vnode", []_C_int{1, 13}}, -+ {"kern.video", []_C_int{1, 89}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, -+ {"kern.witnesswatch", []_C_int{1, 53}}, -+ {"kern.wxabort", []_C_int{1, 74}}, - {"net.bpf.bufsize", []_C_int{4, 31, 1}}, - {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, - {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, -@@ -148,7 +155,9 @@ var sysctlMib = []mibentry{ - {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, - {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, - {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, -+ {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, - {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, -+ {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, - {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, - {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, - {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, -@@ -157,8 +166,10 @@ var sysctlMib = []mibentry{ - {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, - {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, - {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, -+ {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, - {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, - {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, -+ {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, - {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, - {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, - {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, -@@ -175,9 +186,7 @@ var sysctlMib = []mibentry{ - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, -- {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, -- {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, - {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, -@@ -191,6 +200,7 @@ var sysctlMib = []mibentry{ - {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, - {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, - {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, -+ {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, - {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, - {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, - {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, -@@ -198,9 +208,12 @@ var sysctlMib = []mibentry{ - {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, - {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, - {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, -+ {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, -+ {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, - {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, - {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, - {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, -+ {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, - {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, - {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, - {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, -@@ -213,13 +226,8 @@ var sysctlMib = []mibentry{ - {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, - {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, - {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, -- {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, - {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, -- {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, -- {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, -- {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, - {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, -- {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, - {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, - {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, - {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, -@@ -232,20 +240,19 @@ var sysctlMib = []mibentry{ - {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, - {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, - {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, -- {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, -- {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, - {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, -+ {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, -+ {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, - {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, - {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, - {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, - {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, - {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, - {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, -- {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, -+ {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, - {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, - {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, - {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, -- {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, - {"net.key.sadb_dump", []_C_int{4, 30, 1}}, - {"net.key.spd_dump", []_C_int{4, 30, 2}}, - {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, -@@ -254,12 +261,12 @@ var sysctlMib = []mibentry{ - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, -- {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, - {"vm.anonmin", []_C_int{2, 7}}, - {"vm.loadavg", []_C_int{2, 2}}, -+ {"vm.malloc_conf", []_C_int{2, 12}}, - {"vm.maxslp", []_C_int{2, 10}}, - {"vm.nkmempages", []_C_int{2, 6}}, - {"vm.psstrings", []_C_int{2, 3}}, -diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go -old mode 100644 -new mode 100755 -index 154b57a..cbdda1a ---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go -@@ -36,6 +36,7 @@ var sysctlMib = []mibentry{ - {"hw.pagesize", []_C_int{6, 7}}, - {"hw.perfpolicy", []_C_int{6, 23}}, - {"hw.physmem", []_C_int{6, 19}}, -+ {"hw.power", []_C_int{6, 26}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, -@@ -44,6 +45,7 @@ var sysctlMib = []mibentry{ - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, -+ {"kern.allowdt", []_C_int{1, 65}}, - {"kern.allowkmem", []_C_int{1, 52}}, - {"kern.argmax", []_C_int{1, 8}}, - {"kern.audio", []_C_int{1, 84}}, -@@ -51,6 +53,8 @@ var sysctlMib = []mibentry{ - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, -+ {"kern.consbuf", []_C_int{1, 83}}, -+ {"kern.consbufsize", []_C_int{1, 82}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, -@@ -83,13 +87,13 @@ var sysctlMib = []mibentry{ - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, -- {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, -+ {"kern.pfstatus", []_C_int{1, 86}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, -@@ -110,13 +114,16 @@ var sysctlMib = []mibentry{ - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, -+ {"kern.timeout_stats", []_C_int{1, 87}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, -+ {"kern.utc_offset", []_C_int{1, 88}}, - {"kern.version", []_C_int{1, 4}}, -+ {"kern.video", []_C_int{1, 89}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, - {"kern.witnesswatch", []_C_int{1, 53}}, -@@ -179,7 +186,6 @@ var sysctlMib = []mibentry{ - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, -- {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, -@@ -255,7 +261,6 @@ var sysctlMib = []mibentry{ - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, -- {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, -diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go -old mode 100644 -new mode 100755 -index d96bb2b..f55eae1 ---- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go -+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go -@@ -36,6 +36,7 @@ var sysctlMib = []mibentry{ - {"hw.pagesize", []_C_int{6, 7}}, - {"hw.perfpolicy", []_C_int{6, 23}}, - {"hw.physmem", []_C_int{6, 19}}, -+ {"hw.power", []_C_int{6, 26}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, -@@ -86,7 +87,6 @@ var sysctlMib = []mibentry{ - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, -- {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, -@@ -123,6 +123,7 @@ var sysctlMib = []mibentry{ - {"kern.ttycount", []_C_int{1, 57}}, - {"kern.utc_offset", []_C_int{1, 88}}, - {"kern.version", []_C_int{1, 4}}, -+ {"kern.video", []_C_int{1, 89}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, - {"kern.witnesswatch", []_C_int{1, 53}}, -diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go -old mode 100644 -new mode 100755 -index c9c4ad0..9862853 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go -@@ -447,4 +447,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go -old mode 100644 -new mode 100755 -index 12ff341..8901f0f ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go -@@ -369,4 +369,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go -old mode 100644 -new mode 100755 -index c3fb5e7..6902c37 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go -@@ -411,4 +411,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go -old mode 100644 -new mode 100755 -index 358c847..a6d3dff ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go -@@ -314,4 +314,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go -old mode 100644 -new mode 100755 -index 81c4849..b18f3f7 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go -@@ -308,4 +308,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go -old mode 100644 -new mode 100755 -index 202a57e..0302e5e ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go -@@ -431,4 +431,5 @@ const ( - SYS_PROCESS_MRELEASE = 4448 - SYS_FUTEX_WAITV = 4449 - SYS_SET_MEMPOLICY_HOME_NODE = 4450 -+ SYS_CACHESTAT = 4451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go -old mode 100644 -new mode 100755 -index 1fbceb5..6693ba4 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go -@@ -361,4 +361,5 @@ const ( - SYS_PROCESS_MRELEASE = 5448 - SYS_FUTEX_WAITV = 5449 - SYS_SET_MEMPOLICY_HOME_NODE = 5450 -+ SYS_CACHESTAT = 5451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go -old mode 100644 -new mode 100755 -index b4ffb7a..fd93f49 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go -@@ -361,4 +361,5 @@ const ( - SYS_PROCESS_MRELEASE = 5448 - SYS_FUTEX_WAITV = 5449 - SYS_SET_MEMPOLICY_HOME_NODE = 5450 -+ SYS_CACHESTAT = 5451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go -old mode 100644 -new mode 100755 -index 867985f..760ddca ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go -@@ -431,4 +431,5 @@ const ( - SYS_PROCESS_MRELEASE = 4448 - SYS_FUTEX_WAITV = 4449 - SYS_SET_MEMPOLICY_HOME_NODE = 4450 -+ SYS_CACHESTAT = 4451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go -old mode 100644 -new mode 100755 -index a8cce69..cff2b25 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go -@@ -438,4 +438,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go -old mode 100644 -new mode 100755 -index d44c5b3..a4b2405 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go -@@ -410,4 +410,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go -old mode 100644 -new mode 100755 -index 4214dd9..aca54b4 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go -@@ -410,4 +410,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go -old mode 100644 -new mode 100755 -index 3e594a8..9d1738d ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go -@@ -251,6 +251,8 @@ const ( - SYS_ACCEPT4 = 242 - SYS_RECVMMSG = 243 - SYS_ARCH_SPECIFIC_SYSCALL = 244 -+ SYS_RISCV_HWPROBE = 258 -+ SYS_RISCV_FLUSH_ICACHE = 259 - SYS_WAIT4 = 260 - SYS_PRLIMIT64 = 261 - SYS_FANOTIFY_INIT = 262 -@@ -313,4 +315,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go -old mode 100644 -new mode 100755 -index 7ea4652..022878d ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go -@@ -372,7 +372,9 @@ const ( - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 -+ SYS_MEMFD_SECRET = 447 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go -old mode 100644 -new mode 100755 -index 92f628e..4100a76 ---- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go -@@ -389,4 +389,5 @@ const ( - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -+ SYS_CACHESTAT = 451 - ) -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go -old mode 100644 -new mode 100755 -index a37f773..01c43a0 ---- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go -+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go -@@ -6,6 +6,7 @@ - - package unix - -+// Deprecated: Use libc wrappers instead of direct syscalls. - const ( - SYS_EXIT = 1 // { void sys_exit(int rval); } - SYS_FORK = 2 // { int sys_fork(void); } -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go -old mode 100644 -new mode 100755 -index e2a64f0..690cefc ---- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go -@@ -151,6 +151,16 @@ type Dirent struct { - _ [3]byte - } - -+type Attrlist struct { -+ Bitmapcount uint16 -+ Reserved uint16 -+ Commonattr uint32 -+ Volattr uint32 -+ Dirattr uint32 -+ Fileattr uint32 -+ Forkattr uint32 -+} -+ - const ( - PathMax = 0x400 - ) -@@ -610,6 +620,7 @@ const ( - AT_REMOVEDIR = 0x80 - AT_SYMLINK_FOLLOW = 0x40 - AT_SYMLINK_NOFOLLOW = 0x20 -+ AT_EACCESS = 0x10 - ) - - type PollFd struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go -old mode 100644 -new mode 100755 -index 34aa775..5bffc10 ---- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go -@@ -151,6 +151,16 @@ type Dirent struct { - _ [3]byte - } - -+type Attrlist struct { -+ Bitmapcount uint16 -+ Reserved uint16 -+ Commonattr uint32 -+ Volattr uint32 -+ Dirattr uint32 -+ Fileattr uint32 -+ Forkattr uint32 -+} -+ - const ( - PathMax = 0x400 - ) -@@ -610,6 +620,7 @@ const ( - AT_REMOVEDIR = 0x80 - AT_SYMLINK_FOLLOW = 0x40 - AT_SYMLINK_NOFOLLOW = 0x20 -+ AT_EACCESS = 0x10 - ) - - type PollFd struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go -old mode 100644 -new mode 100755 -index d9c78cd..29dc483 ---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go -@@ -362,7 +362,7 @@ type FpExtendedPrecision struct{} - type PtraceIoDesc struct { - Op int32 - Offs uintptr -- Addr uintptr -+ Addr *byte - Len uint32 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go -old mode 100644 -new mode 100755 -index 26991b1..0a89b28 ---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go -@@ -367,7 +367,7 @@ type FpExtendedPrecision struct{} - type PtraceIoDesc struct { - Op int32 - Offs uintptr -- Addr uintptr -+ Addr *byte - Len uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go -old mode 100644 -new mode 100755 -index f8324e7..c8666bb ---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go -@@ -350,7 +350,7 @@ type FpExtendedPrecision struct { - type PtraceIoDesc struct { - Op int32 - Offs uintptr -- Addr uintptr -+ Addr *byte - Len uint32 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go -old mode 100644 -new mode 100755 -index 4220411..88fb48a ---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go -@@ -347,7 +347,7 @@ type FpExtendedPrecision struct{} - type PtraceIoDesc struct { - Op int32 - Offs uintptr -- Addr uintptr -+ Addr *byte - Len uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go -old mode 100644 -new mode 100755 -index 0660fd4..698dc97 ---- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go -@@ -348,7 +348,7 @@ type FpExtendedPrecision struct{} - type PtraceIoDesc struct { - Op int32 - Offs uintptr -- Addr uintptr -+ Addr *byte - Len uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go -old mode 100644 -new mode 100755 -index ff68811..18aa70b ---- a/vendor/golang.org/x/sys/unix/ztypes_linux.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go -@@ -29,6 +29,41 @@ type Itimerval struct { - Value Timeval - } - -+const ( -+ ADJ_OFFSET = 0x1 -+ ADJ_FREQUENCY = 0x2 -+ ADJ_MAXERROR = 0x4 -+ ADJ_ESTERROR = 0x8 -+ ADJ_STATUS = 0x10 -+ ADJ_TIMECONST = 0x20 -+ ADJ_TAI = 0x80 -+ ADJ_SETOFFSET = 0x100 -+ ADJ_MICRO = 0x1000 -+ ADJ_NANO = 0x2000 -+ ADJ_TICK = 0x4000 -+ ADJ_OFFSET_SINGLESHOT = 0x8001 -+ ADJ_OFFSET_SS_READ = 0xa001 -+) -+ -+const ( -+ STA_PLL = 0x1 -+ STA_PPSFREQ = 0x2 -+ STA_PPSTIME = 0x4 -+ STA_FLL = 0x8 -+ STA_INS = 0x10 -+ STA_DEL = 0x20 -+ STA_UNSYNC = 0x40 -+ STA_FREQHOLD = 0x80 -+ STA_PPSSIGNAL = 0x100 -+ STA_PPSJITTER = 0x200 -+ STA_PPSWANDER = 0x400 -+ STA_PPSERROR = 0x800 -+ STA_CLOCKERR = 0x1000 -+ STA_NANO = 0x2000 -+ STA_MODE = 0x4000 -+ STA_CLK = 0x8000 -+) -+ - const ( - TIME_OK = 0x0 - TIME_INS = 0x1 -@@ -53,29 +88,30 @@ type StatxTimestamp struct { - } - - type Statx_t struct { -- Mask uint32 -- Blksize uint32 -- Attributes uint64 -- Nlink uint32 -- Uid uint32 -- Gid uint32 -- Mode uint16 -- _ [1]uint16 -- Ino uint64 -- Size uint64 -- Blocks uint64 -- Attributes_mask uint64 -- Atime StatxTimestamp -- Btime StatxTimestamp -- Ctime StatxTimestamp -- Mtime StatxTimestamp -- Rdev_major uint32 -- Rdev_minor uint32 -- Dev_major uint32 -- Dev_minor uint32 -- Mnt_id uint64 -- _ uint64 -- _ [12]uint64 -+ Mask uint32 -+ Blksize uint32 -+ Attributes uint64 -+ Nlink uint32 -+ Uid uint32 -+ Gid uint32 -+ Mode uint16 -+ _ [1]uint16 -+ Ino uint64 -+ Size uint64 -+ Blocks uint64 -+ Attributes_mask uint64 -+ Atime StatxTimestamp -+ Btime StatxTimestamp -+ Ctime StatxTimestamp -+ Mtime StatxTimestamp -+ Rdev_major uint32 -+ Rdev_minor uint32 -+ Dev_major uint32 -+ Dev_minor uint32 -+ Mnt_id uint64 -+ Dio_mem_align uint32 -+ Dio_offset_align uint32 -+ _ [12]uint64 - } - - type Fsid struct { -@@ -420,36 +456,60 @@ type Ucred struct { - } - - type TCPInfo struct { -- State uint8 -- Ca_state uint8 -- Retransmits uint8 -- Probes uint8 -- Backoff uint8 -- Options uint8 -- Rto uint32 -- Ato uint32 -- Snd_mss uint32 -- Rcv_mss uint32 -- Unacked uint32 -- Sacked uint32 -- Lost uint32 -- Retrans uint32 -- Fackets uint32 -- Last_data_sent uint32 -- Last_ack_sent uint32 -- Last_data_recv uint32 -- Last_ack_recv uint32 -- Pmtu uint32 -- Rcv_ssthresh uint32 -- Rtt uint32 -- Rttvar uint32 -- Snd_ssthresh uint32 -- Snd_cwnd uint32 -- Advmss uint32 -- Reordering uint32 -- Rcv_rtt uint32 -- Rcv_space uint32 -- Total_retrans uint32 -+ State uint8 -+ Ca_state uint8 -+ Retransmits uint8 -+ Probes uint8 -+ Backoff uint8 -+ Options uint8 -+ Rto uint32 -+ Ato uint32 -+ Snd_mss uint32 -+ Rcv_mss uint32 -+ Unacked uint32 -+ Sacked uint32 -+ Lost uint32 -+ Retrans uint32 -+ Fackets uint32 -+ Last_data_sent uint32 -+ Last_ack_sent uint32 -+ Last_data_recv uint32 -+ Last_ack_recv uint32 -+ Pmtu uint32 -+ Rcv_ssthresh uint32 -+ Rtt uint32 -+ Rttvar uint32 -+ Snd_ssthresh uint32 -+ Snd_cwnd uint32 -+ Advmss uint32 -+ Reordering uint32 -+ Rcv_rtt uint32 -+ Rcv_space uint32 -+ Total_retrans uint32 -+ Pacing_rate uint64 -+ Max_pacing_rate uint64 -+ Bytes_acked uint64 -+ Bytes_received uint64 -+ Segs_out uint32 -+ Segs_in uint32 -+ Notsent_bytes uint32 -+ Min_rtt uint32 -+ Data_segs_in uint32 -+ Data_segs_out uint32 -+ Delivery_rate uint64 -+ Busy_time uint64 -+ Rwnd_limited uint64 -+ Sndbuf_limited uint64 -+ Delivered uint32 -+ Delivered_ce uint32 -+ Bytes_sent uint64 -+ Bytes_retrans uint64 -+ Dsack_dups uint32 -+ Reord_seen uint32 -+ Rcv_ooopack uint32 -+ Snd_wnd uint32 -+ Rcv_wnd uint32 -+ Rehash uint32 - } - - type CanFilter struct { -@@ -492,7 +552,7 @@ const ( - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 - SizeofUcred = 0xc -- SizeofTCPInfo = 0x68 -+ SizeofTCPInfo = 0xf0 - SizeofCanFilter = 0x8 - SizeofTCPRepairOpt = 0x8 - ) -@@ -806,6 +866,11 @@ const ( - POLLNVAL = 0x20 - ) - -+type sigset_argpack struct { -+ ss *Sigset_t -+ ssLen uintptr -+} -+ - type SignalfdSiginfo struct { - Signo uint32 - Errno int32 -@@ -1007,6 +1072,7 @@ const ( - PerfBitCommExec = CBitFieldMaskBit24 - PerfBitUseClockID = CBitFieldMaskBit25 - PerfBitContextSwitch = CBitFieldMaskBit26 -+ PerfBitWriteBackward = CBitFieldMaskBit27 - ) - - const ( -@@ -1099,7 +1165,8 @@ const ( - PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 0xf - PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 0x10 - PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 0x11 -- PERF_SAMPLE_BRANCH_MAX_SHIFT = 0x12 -+ PERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT = 0x12 -+ PERF_SAMPLE_BRANCH_MAX_SHIFT = 0x13 - PERF_SAMPLE_BRANCH_USER = 0x1 - PERF_SAMPLE_BRANCH_KERNEL = 0x2 - PERF_SAMPLE_BRANCH_HV = 0x4 -@@ -1118,7 +1185,8 @@ const ( - PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 - PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 - PERF_SAMPLE_BRANCH_HW_INDEX = 0x20000 -- PERF_SAMPLE_BRANCH_MAX = 0x40000 -+ PERF_SAMPLE_BRANCH_PRIV_SAVE = 0x40000 -+ PERF_SAMPLE_BRANCH_MAX = 0x80000 - PERF_BR_UNKNOWN = 0x0 - PERF_BR_COND = 0x1 - PERF_BR_UNCOND = 0x2 -@@ -1132,7 +1200,10 @@ const ( - PERF_BR_COND_RET = 0xa - PERF_BR_ERET = 0xb - PERF_BR_IRQ = 0xc -- PERF_BR_MAX = 0xd -+ PERF_BR_SERROR = 0xd -+ PERF_BR_NO_TX = 0xe -+ PERF_BR_EXTEND_ABI = 0xf -+ PERF_BR_MAX = 0x10 - PERF_SAMPLE_REGS_ABI_NONE = 0x0 - PERF_SAMPLE_REGS_ABI_32 = 0x1 - PERF_SAMPLE_REGS_ABI_64 = 0x2 -@@ -1151,7 +1222,8 @@ const ( - PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 - PERF_FORMAT_ID = 0x4 - PERF_FORMAT_GROUP = 0x8 -- PERF_FORMAT_MAX = 0x10 -+ PERF_FORMAT_LOST = 0x10 -+ PERF_FORMAT_MAX = 0x20 - PERF_IOC_FLAG_GROUP = 0x1 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 -@@ -1197,7 +1269,7 @@ type TCPMD5Sig struct { - Flags uint8 - Prefixlen uint8 - Keylen uint16 -- _ uint32 -+ Ifindex int32 - Key [80]uint8 - } - -@@ -1471,6 +1543,10 @@ const ( - IFLA_GRO_MAX_SIZE = 0x3a - IFLA_TSO_MAX_SIZE = 0x3b - IFLA_TSO_MAX_SEGS = 0x3c -+ IFLA_ALLMULTI = 0x3d -+ IFLA_DEVLINK_PORT = 0x3e -+ IFLA_GSO_IPV4_MAX_SIZE = 0x3f -+ IFLA_GRO_IPV4_MAX_SIZE = 0x40 - IFLA_PROTO_DOWN_REASON_UNSPEC = 0x0 - IFLA_PROTO_DOWN_REASON_MASK = 0x1 - IFLA_PROTO_DOWN_REASON_VALUE = 0x2 -@@ -1897,7 +1973,11 @@ const ( - NFT_MSG_GETOBJ = 0x13 - NFT_MSG_DELOBJ = 0x14 - NFT_MSG_GETOBJ_RESET = 0x15 -- NFT_MSG_MAX = 0x19 -+ NFT_MSG_NEWFLOWTABLE = 0x16 -+ NFT_MSG_GETFLOWTABLE = 0x17 -+ NFT_MSG_DELFLOWTABLE = 0x18 -+ NFT_MSG_GETRULE_RESET = 0x19 -+ NFT_MSG_MAX = 0x22 - NFTA_LIST_UNSPEC = 0x0 - NFTA_LIST_ELEM = 0x1 - NFTA_HOOK_UNSPEC = 0x0 -@@ -2401,9 +2481,11 @@ const ( - SOF_TIMESTAMPING_OPT_STATS = 0x1000 - SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 - SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 -+ SOF_TIMESTAMPING_BIND_PHC = 0x8000 -+ SOF_TIMESTAMPING_OPT_ID_TCP = 0x10000 - -- SOF_TIMESTAMPING_LAST = 0x8000 -- SOF_TIMESTAMPING_MASK = 0xffff -+ SOF_TIMESTAMPING_LAST = 0x10000 -+ SOF_TIMESTAMPING_MASK = 0x1ffff - - SCM_TSTAMP_SND = 0x0 - SCM_TSTAMP_SCHED = 0x1 -@@ -2482,6 +2564,11 @@ const ( - BPF_REG_8 = 0x8 - BPF_REG_9 = 0x9 - BPF_REG_10 = 0xa -+ BPF_CGROUP_ITER_ORDER_UNSPEC = 0x0 -+ BPF_CGROUP_ITER_SELF_ONLY = 0x1 -+ BPF_CGROUP_ITER_DESCENDANTS_PRE = 0x2 -+ BPF_CGROUP_ITER_DESCENDANTS_POST = 0x3 -+ BPF_CGROUP_ITER_ANCESTORS_UP = 0x4 - BPF_MAP_CREATE = 0x0 - BPF_MAP_LOOKUP_ELEM = 0x1 - BPF_MAP_UPDATE_ELEM = 0x2 -@@ -2493,6 +2580,7 @@ const ( - BPF_PROG_ATTACH = 0x8 - BPF_PROG_DETACH = 0x9 - BPF_PROG_TEST_RUN = 0xa -+ BPF_PROG_RUN = 0xa - BPF_PROG_GET_NEXT_ID = 0xb - BPF_MAP_GET_NEXT_ID = 0xc - BPF_PROG_GET_FD_BY_ID = 0xd -@@ -2537,6 +2625,7 @@ const ( - BPF_MAP_TYPE_CPUMAP = 0x10 - BPF_MAP_TYPE_XSKMAP = 0x11 - BPF_MAP_TYPE_SOCKHASH = 0x12 -+ BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED = 0x13 - BPF_MAP_TYPE_CGROUP_STORAGE = 0x13 - BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14 - BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15 -@@ -2547,6 +2636,10 @@ const ( - BPF_MAP_TYPE_STRUCT_OPS = 0x1a - BPF_MAP_TYPE_RINGBUF = 0x1b - BPF_MAP_TYPE_INODE_STORAGE = 0x1c -+ BPF_MAP_TYPE_TASK_STORAGE = 0x1d -+ BPF_MAP_TYPE_BLOOM_FILTER = 0x1e -+ BPF_MAP_TYPE_USER_RINGBUF = 0x1f -+ BPF_MAP_TYPE_CGRP_STORAGE = 0x20 - BPF_PROG_TYPE_UNSPEC = 0x0 - BPF_PROG_TYPE_SOCKET_FILTER = 0x1 - BPF_PROG_TYPE_KPROBE = 0x2 -@@ -2578,6 +2671,7 @@ const ( - BPF_PROG_TYPE_EXT = 0x1c - BPF_PROG_TYPE_LSM = 0x1d - BPF_PROG_TYPE_SK_LOOKUP = 0x1e -+ BPF_PROG_TYPE_SYSCALL = 0x1f - BPF_CGROUP_INET_INGRESS = 0x0 - BPF_CGROUP_INET_EGRESS = 0x1 - BPF_CGROUP_INET_SOCK_CREATE = 0x2 -@@ -2616,6 +2710,12 @@ const ( - BPF_XDP_CPUMAP = 0x23 - BPF_SK_LOOKUP = 0x24 - BPF_XDP = 0x25 -+ BPF_SK_SKB_VERDICT = 0x26 -+ BPF_SK_REUSEPORT_SELECT = 0x27 -+ BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 0x28 -+ BPF_PERF_EVENT = 0x29 -+ BPF_TRACE_KPROBE_MULTI = 0x2a -+ BPF_LSM_CGROUP = 0x2b - BPF_LINK_TYPE_UNSPEC = 0x0 - BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1 - BPF_LINK_TYPE_TRACING = 0x2 -@@ -2623,6 +2723,9 @@ const ( - BPF_LINK_TYPE_ITER = 0x4 - BPF_LINK_TYPE_NETNS = 0x5 - BPF_LINK_TYPE_XDP = 0x6 -+ BPF_LINK_TYPE_PERF_EVENT = 0x7 -+ BPF_LINK_TYPE_KPROBE_MULTI = 0x8 -+ BPF_LINK_TYPE_STRUCT_OPS = 0x9 - BPF_ANY = 0x0 - BPF_NOEXIST = 0x1 - BPF_EXIST = 0x2 -@@ -2660,6 +2763,7 @@ const ( - BPF_F_ZERO_CSUM_TX = 0x2 - BPF_F_DONT_FRAGMENT = 0x4 - BPF_F_SEQ_NUMBER = 0x8 -+ BPF_F_TUNINFO_FLAGS = 0x10 - BPF_F_INDEX_MASK = 0xffffffff - BPF_F_CURRENT_CPU = 0xffffffff - BPF_F_CTXLEN_MASK = 0xfffff00000000 -@@ -2674,6 +2778,7 @@ const ( - BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8 - BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 - BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20 -+ BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 0x40 - BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff - BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 - BPF_F_SYSCTL_BASE_NAME = 0x1 -@@ -2698,10 +2803,16 @@ const ( - BPF_LWT_ENCAP_SEG6 = 0x0 - BPF_LWT_ENCAP_SEG6_INLINE = 0x1 - BPF_LWT_ENCAP_IP = 0x2 -+ BPF_F_BPRM_SECUREEXEC = 0x1 -+ BPF_F_BROADCAST = 0x8 -+ BPF_F_EXCLUDE_INGRESS = 0x10 -+ BPF_SKB_TSTAMP_UNSPEC = 0x0 -+ BPF_SKB_TSTAMP_DELIVERY_MONO = 0x1 - BPF_OK = 0x0 - BPF_DROP = 0x2 - BPF_REDIRECT = 0x7 - BPF_LWT_REROUTE = 0x80 -+ BPF_FLOW_DISSECTOR_CONTINUE = 0x81 - BPF_SOCK_OPS_RTO_CB_FLAG = 0x1 - BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2 - BPF_SOCK_OPS_STATE_CB_FLAG = 0x4 -@@ -2765,6 +2876,10 @@ const ( - BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6 - BPF_FIB_LKUP_RET_NO_NEIGH = 0x7 - BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8 -+ BPF_MTU_CHK_SEGS = 0x1 -+ BPF_MTU_CHK_RET_SUCCESS = 0x0 -+ BPF_MTU_CHK_RET_FRAG_NEEDED = 0x1 -+ BPF_MTU_CHK_RET_SEGS_TOOBIG = 0x2 - BPF_FD_TYPE_RAW_TRACEPOINT = 0x0 - BPF_FD_TYPE_TRACEPOINT = 0x1 - BPF_FD_TYPE_KPROBE = 0x2 -@@ -2774,6 +2889,19 @@ const ( - BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1 - BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2 - BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4 -+ BPF_CORE_FIELD_BYTE_OFFSET = 0x0 -+ BPF_CORE_FIELD_BYTE_SIZE = 0x1 -+ BPF_CORE_FIELD_EXISTS = 0x2 -+ BPF_CORE_FIELD_SIGNED = 0x3 -+ BPF_CORE_FIELD_LSHIFT_U64 = 0x4 -+ BPF_CORE_FIELD_RSHIFT_U64 = 0x5 -+ BPF_CORE_TYPE_ID_LOCAL = 0x6 -+ BPF_CORE_TYPE_ID_TARGET = 0x7 -+ BPF_CORE_TYPE_EXISTS = 0x8 -+ BPF_CORE_TYPE_SIZE = 0x9 -+ BPF_CORE_ENUMVAL_EXISTS = 0xa -+ BPF_CORE_ENUMVAL_VALUE = 0xb -+ BPF_CORE_TYPE_MATCHES = 0xc - ) - - const ( -@@ -2979,7 +3107,16 @@ const ( - DEVLINK_CMD_TRAP_POLICER_NEW = 0x47 - DEVLINK_CMD_TRAP_POLICER_DEL = 0x48 - DEVLINK_CMD_HEALTH_REPORTER_TEST = 0x49 -- DEVLINK_CMD_MAX = 0x51 -+ DEVLINK_CMD_RATE_GET = 0x4a -+ DEVLINK_CMD_RATE_SET = 0x4b -+ DEVLINK_CMD_RATE_NEW = 0x4c -+ DEVLINK_CMD_RATE_DEL = 0x4d -+ DEVLINK_CMD_LINECARD_GET = 0x4e -+ DEVLINK_CMD_LINECARD_SET = 0x4f -+ DEVLINK_CMD_LINECARD_NEW = 0x50 -+ DEVLINK_CMD_LINECARD_DEL = 0x51 -+ DEVLINK_CMD_SELFTESTS_GET = 0x52 -+ DEVLINK_CMD_MAX = 0x53 - DEVLINK_PORT_TYPE_NOTSET = 0x0 - DEVLINK_PORT_TYPE_AUTO = 0x1 - DEVLINK_PORT_TYPE_ETH = 0x2 -@@ -3208,7 +3345,13 @@ const ( - DEVLINK_ATTR_RATE_NODE_NAME = 0xa8 - DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 0xa9 - DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 0xaa -- DEVLINK_ATTR_MAX = 0xae -+ DEVLINK_ATTR_LINECARD_INDEX = 0xab -+ DEVLINK_ATTR_LINECARD_STATE = 0xac -+ DEVLINK_ATTR_LINECARD_TYPE = 0xad -+ DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 0xae -+ DEVLINK_ATTR_NESTED_DEVLINK = 0xaf -+ DEVLINK_ATTR_SELFTESTS = 0xb0 -+ DEVLINK_ATTR_MAX = 0xb3 - DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 - DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 - DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 -@@ -3224,7 +3367,8 @@ const ( - DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 0x1 - DEVLINK_PORT_FN_ATTR_STATE = 0x2 - DEVLINK_PORT_FN_ATTR_OPSTATE = 0x3 -- DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x3 -+ DEVLINK_PORT_FN_ATTR_CAPS = 0x4 -+ DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x4 - ) - - type FsverityDigest struct { -@@ -3317,7 +3461,8 @@ const ( - LWTUNNEL_ENCAP_SEG6_LOCAL = 0x7 - LWTUNNEL_ENCAP_RPL = 0x8 - LWTUNNEL_ENCAP_IOAM6 = 0x9 -- LWTUNNEL_ENCAP_MAX = 0x9 -+ LWTUNNEL_ENCAP_XFRM = 0xa -+ LWTUNNEL_ENCAP_MAX = 0xa - - MPLS_IPTUNNEL_UNSPEC = 0x0 - MPLS_IPTUNNEL_DST = 0x1 -@@ -3512,7 +3657,10 @@ const ( - ETHTOOL_MSG_PHC_VCLOCKS_GET = 0x21 - ETHTOOL_MSG_MODULE_GET = 0x22 - ETHTOOL_MSG_MODULE_SET = 0x23 -- ETHTOOL_MSG_USER_MAX = 0x23 -+ ETHTOOL_MSG_PSE_GET = 0x24 -+ ETHTOOL_MSG_PSE_SET = 0x25 -+ ETHTOOL_MSG_RSS_GET = 0x26 -+ ETHTOOL_MSG_USER_MAX = 0x2b - ETHTOOL_MSG_KERNEL_NONE = 0x0 - ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 - ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 -@@ -3550,7 +3698,9 @@ const ( - ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 0x22 - ETHTOOL_MSG_MODULE_GET_REPLY = 0x23 - ETHTOOL_MSG_MODULE_NTF = 0x24 -- ETHTOOL_MSG_KERNEL_MAX = 0x24 -+ ETHTOOL_MSG_PSE_GET_REPLY = 0x25 -+ ETHTOOL_MSG_RSS_GET_REPLY = 0x26 -+ ETHTOOL_MSG_KERNEL_MAX = 0x2b - ETHTOOL_A_HEADER_UNSPEC = 0x0 - ETHTOOL_A_HEADER_DEV_INDEX = 0x1 - ETHTOOL_A_HEADER_DEV_NAME = 0x2 -@@ -3609,7 +3759,8 @@ const ( - ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 0x7 - ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 0x8 - ETHTOOL_A_LINKMODES_LANES = 0x9 -- ETHTOOL_A_LINKMODES_MAX = 0x9 -+ ETHTOOL_A_LINKMODES_RATE_MATCHING = 0xa -+ ETHTOOL_A_LINKMODES_MAX = 0xa - ETHTOOL_A_LINKSTATE_UNSPEC = 0x0 - ETHTOOL_A_LINKSTATE_HEADER = 0x1 - ETHTOOL_A_LINKSTATE_LINK = 0x2 -@@ -3617,7 +3768,8 @@ const ( - ETHTOOL_A_LINKSTATE_SQI_MAX = 0x4 - ETHTOOL_A_LINKSTATE_EXT_STATE = 0x5 - ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 0x6 -- ETHTOOL_A_LINKSTATE_MAX = 0x6 -+ ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT = 0x7 -+ ETHTOOL_A_LINKSTATE_MAX = 0x7 - ETHTOOL_A_DEBUG_UNSPEC = 0x0 - ETHTOOL_A_DEBUG_HEADER = 0x1 - ETHTOOL_A_DEBUG_MSGMASK = 0x2 -@@ -3652,7 +3804,7 @@ const ( - ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb - ETHTOOL_A_RINGS_CQE_SIZE = 0xc - ETHTOOL_A_RINGS_TX_PUSH = 0xd -- ETHTOOL_A_RINGS_MAX = 0xd -+ ETHTOOL_A_RINGS_MAX = 0x10 - ETHTOOL_A_CHANNELS_UNSPEC = 0x0 - ETHTOOL_A_CHANNELS_HEADER = 0x1 - ETHTOOL_A_CHANNELS_RX_MAX = 0x2 -@@ -3690,14 +3842,14 @@ const ( - ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 - ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 - ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 -- ETHTOOL_A_COALESCE_MAX = 0x19 -+ ETHTOOL_A_COALESCE_MAX = 0x1c - ETHTOOL_A_PAUSE_UNSPEC = 0x0 - ETHTOOL_A_PAUSE_HEADER = 0x1 - ETHTOOL_A_PAUSE_AUTONEG = 0x2 - ETHTOOL_A_PAUSE_RX = 0x3 - ETHTOOL_A_PAUSE_TX = 0x4 - ETHTOOL_A_PAUSE_STATS = 0x5 -- ETHTOOL_A_PAUSE_MAX = 0x5 -+ ETHTOOL_A_PAUSE_MAX = 0x6 - ETHTOOL_A_PAUSE_STAT_UNSPEC = 0x0 - ETHTOOL_A_PAUSE_STAT_PAD = 0x1 - ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2 -@@ -4201,6 +4353,9 @@ const ( - NL80211_ACL_POLICY_DENY_UNLESS_LISTED = 0x1 - NL80211_AC_VI = 0x1 - NL80211_AC_VO = 0x0 -+ NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT = 0x1 -+ NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT = 0x2 -+ NL80211_AP_SME_SA_QUERY_OFFLOAD = 0x1 - NL80211_ATTR_4ADDR = 0x53 - NL80211_ATTR_ACK = 0x5c - NL80211_ATTR_ACK_SIGNAL = 0x107 -@@ -4209,6 +4364,7 @@ const ( - NL80211_ATTR_AIRTIME_WEIGHT = 0x112 - NL80211_ATTR_AKM_SUITES = 0x4c - NL80211_ATTR_AP_ISOLATE = 0x60 -+ NL80211_ATTR_AP_SETTINGS_FLAGS = 0x135 - NL80211_ATTR_AUTH_DATA = 0x9c - NL80211_ATTR_AUTH_TYPE = 0x35 - NL80211_ATTR_BANDS = 0xef -@@ -4240,6 +4396,9 @@ const ( - NL80211_ATTR_COALESCE_RULE_DELAY = 0x1 - NL80211_ATTR_COALESCE_RULE_MAX = 0x3 - NL80211_ATTR_COALESCE_RULE_PKT_PATTERN = 0x3 -+ NL80211_ATTR_COLOR_CHANGE_COLOR = 0x130 -+ NL80211_ATTR_COLOR_CHANGE_COUNT = 0x12f -+ NL80211_ATTR_COLOR_CHANGE_ELEMS = 0x131 - NL80211_ATTR_CONN_FAILED_REASON = 0x9b - NL80211_ATTR_CONTROL_PORT = 0x44 - NL80211_ATTR_CONTROL_PORT_ETHERTYPE = 0x66 -@@ -4266,6 +4425,7 @@ const ( - NL80211_ATTR_DEVICE_AP_SME = 0x8d - NL80211_ATTR_DFS_CAC_TIME = 0x7 - NL80211_ATTR_DFS_REGION = 0x92 -+ NL80211_ATTR_DISABLE_EHT = 0x137 - NL80211_ATTR_DISABLE_HE = 0x12d - NL80211_ATTR_DISABLE_HT = 0x93 - NL80211_ATTR_DISABLE_VHT = 0xaf -@@ -4273,6 +4433,8 @@ const ( - NL80211_ATTR_DONT_WAIT_FOR_ACK = 0x8e - NL80211_ATTR_DTIM_PERIOD = 0xd - NL80211_ATTR_DURATION = 0x57 -+ NL80211_ATTR_EHT_CAPABILITY = 0x136 -+ NL80211_ATTR_EML_CAPABILITY = 0x13d - NL80211_ATTR_EXT_CAPA = 0xa9 - NL80211_ATTR_EXT_CAPA_MASK = 0xaa - NL80211_ATTR_EXTERNAL_AUTH_ACTION = 0x104 -@@ -4337,10 +4499,11 @@ const ( - NL80211_ATTR_MAC_HINT = 0xc8 - NL80211_ATTR_MAC_MASK = 0xd7 - NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca -- NL80211_ATTR_MAX = 0x137 -+ NL80211_ATTR_MAX = 0x146 - NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 - NL80211_ATTR_MAX_CSA_COUNTERS = 0xce - NL80211_ATTR_MAX_MATCH_SETS = 0x85 -+ NL80211_ATTR_MAX_NUM_AKM_SUITES = 0x13c - NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 - NL80211_ATTR_MAX_NUM_SCAN_SSIDS = 0x2b - NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS = 0xde -@@ -4350,6 +4513,8 @@ const ( - NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL = 0xdf - NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS = 0xe0 - NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN = 0x7c -+ NL80211_ATTR_MBSSID_CONFIG = 0x132 -+ NL80211_ATTR_MBSSID_ELEMS = 0x133 - NL80211_ATTR_MCAST_RATE = 0x6b - NL80211_ATTR_MDID = 0xb1 - NL80211_ATTR_MEASUREMENT_DURATION = 0xeb -@@ -4359,6 +4524,11 @@ const ( - NL80211_ATTR_MESH_PEER_AID = 0xed - NL80211_ATTR_MESH_SETUP = 0x70 - NL80211_ATTR_MGMT_SUBTYPE = 0x29 -+ NL80211_ATTR_MLD_ADDR = 0x13a -+ NL80211_ATTR_MLD_CAPA_AND_OPS = 0x13e -+ NL80211_ATTR_MLO_LINK_ID = 0x139 -+ NL80211_ATTR_MLO_LINKS = 0x138 -+ NL80211_ATTR_MLO_SUPPORT = 0x13b - NL80211_ATTR_MNTR_FLAGS = 0x17 - NL80211_ATTR_MPATH_INFO = 0x1b - NL80211_ATTR_MPATH_NEXT_HOP = 0x1a -@@ -4371,6 +4541,7 @@ const ( - NL80211_ATTR_NETNS_FD = 0xdb - NL80211_ATTR_NOACK_MAP = 0x95 - NL80211_ATTR_NSS = 0x106 -+ NL80211_ATTR_OBSS_COLOR_BITMAP = 0x12e - NL80211_ATTR_OFFCHANNEL_TX_OK = 0x6c - NL80211_ATTR_OPER_CLASS = 0xd6 - NL80211_ATTR_OPMODE_NOTIF = 0xc2 -@@ -4397,6 +4568,7 @@ const ( - NL80211_ATTR_PROTOCOL_FEATURES = 0xad - NL80211_ATTR_PS_STATE = 0x5d - NL80211_ATTR_QOS_MAP = 0xc7 -+ NL80211_ATTR_RADAR_BACKGROUND = 0x134 - NL80211_ATTR_RADAR_EVENT = 0xa8 - NL80211_ATTR_REASON_CODE = 0x36 - NL80211_ATTR_RECEIVE_MULTICAST = 0x121 -@@ -4412,6 +4584,7 @@ const ( - NL80211_ATTR_RESP_IE = 0x4e - NL80211_ATTR_ROAM_SUPPORT = 0x83 - NL80211_ATTR_RX_FRAME_TYPES = 0x64 -+ NL80211_ATTR_RX_HW_TIMESTAMP = 0x140 - NL80211_ATTR_RXMGMT_FLAGS = 0xbc - NL80211_ATTR_RX_SIGNAL_DBM = 0x97 - NL80211_ATTR_S1G_CAPABILITY = 0x128 -@@ -4469,6 +4642,7 @@ const ( - NL80211_ATTR_SUPPORT_MESH_AUTH = 0x73 - NL80211_ATTR_SURVEY_INFO = 0x54 - NL80211_ATTR_SURVEY_RADIO_STATS = 0xda -+ NL80211_ATTR_TD_BITMAP = 0x141 - NL80211_ATTR_TDLS_ACTION = 0x88 - NL80211_ATTR_TDLS_DIALOG_TOKEN = 0x89 - NL80211_ATTR_TDLS_EXTERNAL_SETUP = 0x8c -@@ -4484,6 +4658,7 @@ const ( - NL80211_ATTR_TSID = 0xd2 - NL80211_ATTR_TWT_RESPONDER = 0x116 - NL80211_ATTR_TX_FRAME_TYPES = 0x63 -+ NL80211_ATTR_TX_HW_TIMESTAMP = 0x13f - NL80211_ATTR_TX_NO_CCK_RATE = 0x87 - NL80211_ATTR_TXQ_LIMIT = 0x10a - NL80211_ATTR_TXQ_MEMORY_LIMIT = 0x10b -@@ -4553,10 +4728,14 @@ const ( - NL80211_BAND_ATTR_HT_CAPA = 0x4 - NL80211_BAND_ATTR_HT_MCS_SET = 0x3 - NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 -- NL80211_BAND_ATTR_MAX = 0xb -+ NL80211_BAND_ATTR_MAX = 0xd - NL80211_BAND_ATTR_RATES = 0x2 - NL80211_BAND_ATTR_VHT_CAPA = 0x8 - NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 -+ NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC = 0x8 -+ NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET = 0xa -+ NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY = 0x9 -+ NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE = 0xb - NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA = 0x6 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC = 0x2 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET = 0x4 -@@ -4564,6 +4743,8 @@ const ( - NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE = 0x5 - NL80211_BAND_IFTYPE_ATTR_IFTYPES = 0x1 - NL80211_BAND_IFTYPE_ATTR_MAX = 0xb -+ NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS = 0x7 -+ NL80211_BAND_LC = 0x5 - NL80211_BAND_S1GHZ = 0x4 - NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE = 0x2 - NL80211_BITRATE_ATTR_MAX = 0x2 -@@ -4584,7 +4765,9 @@ const ( - NL80211_BSS_FREQUENCY_OFFSET = 0x14 - NL80211_BSS_INFORMATION_ELEMENTS = 0x6 - NL80211_BSS_LAST_SEEN_BOOTTIME = 0xf -- NL80211_BSS_MAX = 0x14 -+ NL80211_BSS_MAX = 0x16 -+ NL80211_BSS_MLD_ADDR = 0x16 -+ NL80211_BSS_MLO_LINK_ID = 0x15 - NL80211_BSS_PAD = 0x10 - NL80211_BSS_PARENT_BSSID = 0x12 - NL80211_BSS_PARENT_TSF = 0x11 -@@ -4612,6 +4795,7 @@ const ( - NL80211_CHAN_WIDTH_20 = 0x1 - NL80211_CHAN_WIDTH_20_NOHT = 0x0 - NL80211_CHAN_WIDTH_2 = 0x9 -+ NL80211_CHAN_WIDTH_320 = 0xd - NL80211_CHAN_WIDTH_40 = 0x2 - NL80211_CHAN_WIDTH_4 = 0xa - NL80211_CHAN_WIDTH_5 = 0x6 -@@ -4621,8 +4805,11 @@ const ( - NL80211_CMD_ABORT_SCAN = 0x72 - NL80211_CMD_ACTION = 0x3b - NL80211_CMD_ACTION_TX_STATUS = 0x3c -+ NL80211_CMD_ADD_LINK = 0x94 -+ NL80211_CMD_ADD_LINK_STA = 0x96 - NL80211_CMD_ADD_NAN_FUNCTION = 0x75 - NL80211_CMD_ADD_TX_TS = 0x69 -+ NL80211_CMD_ASSOC_COMEBACK = 0x93 - NL80211_CMD_ASSOCIATE = 0x26 - NL80211_CMD_AUTHENTICATE = 0x25 - NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL = 0x38 -@@ -4630,6 +4817,10 @@ const ( - NL80211_CMD_CHANNEL_SWITCH = 0x66 - NL80211_CMD_CH_SWITCH_NOTIFY = 0x58 - NL80211_CMD_CH_SWITCH_STARTED_NOTIFY = 0x6e -+ NL80211_CMD_COLOR_CHANGE_ABORTED = 0x90 -+ NL80211_CMD_COLOR_CHANGE_COMPLETED = 0x91 -+ NL80211_CMD_COLOR_CHANGE_REQUEST = 0x8e -+ NL80211_CMD_COLOR_CHANGE_STARTED = 0x8f - NL80211_CMD_CONNECT = 0x2e - NL80211_CMD_CONN_FAILED = 0x5b - NL80211_CMD_CONTROL_PORT_FRAME = 0x81 -@@ -4678,8 +4869,9 @@ const ( - NL80211_CMD_LEAVE_IBSS = 0x2c - NL80211_CMD_LEAVE_MESH = 0x45 - NL80211_CMD_LEAVE_OCB = 0x6d -- NL80211_CMD_MAX = 0x93 -+ NL80211_CMD_MAX = 0x9a - NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 -+ NL80211_CMD_MODIFY_LINK_STA = 0x97 - NL80211_CMD_NAN_MATCH = 0x78 - NL80211_CMD_NEW_BEACON = 0xf - NL80211_CMD_NEW_INTERFACE = 0x7 -@@ -4692,6 +4884,7 @@ const ( - NL80211_CMD_NEW_WIPHY = 0x3 - NL80211_CMD_NOTIFY_CQM = 0x40 - NL80211_CMD_NOTIFY_RADAR = 0x86 -+ NL80211_CMD_OBSS_COLOR_COLLISION = 0x8d - NL80211_CMD_PEER_MEASUREMENT_COMPLETE = 0x85 - NL80211_CMD_PEER_MEASUREMENT_RESULT = 0x84 - NL80211_CMD_PEER_MEASUREMENT_START = 0x83 -@@ -4707,6 +4900,8 @@ const ( - NL80211_CMD_REGISTER_FRAME = 0x3a - NL80211_CMD_RELOAD_REGDB = 0x7e - NL80211_CMD_REMAIN_ON_CHANNEL = 0x37 -+ NL80211_CMD_REMOVE_LINK = 0x95 -+ NL80211_CMD_REMOVE_LINK_STA = 0x98 - NL80211_CMD_REQ_SET_REG = 0x1b - NL80211_CMD_ROAM = 0x2f - NL80211_CMD_SCAN_ABORTED = 0x23 -@@ -4717,6 +4912,7 @@ const ( - NL80211_CMD_SET_CHANNEL = 0x41 - NL80211_CMD_SET_COALESCE = 0x65 - NL80211_CMD_SET_CQM = 0x3f -+ NL80211_CMD_SET_FILS_AAD = 0x92 - NL80211_CMD_SET_INTERFACE = 0x6 - NL80211_CMD_SET_KEY = 0xa - NL80211_CMD_SET_MAC_ACL = 0x5d -@@ -4791,6 +4987,8 @@ const ( - NL80211_EDMG_BW_CONFIG_MIN = 0x4 - NL80211_EDMG_CHANNELS_MAX = 0x3c - NL80211_EDMG_CHANNELS_MIN = 0x1 -+ NL80211_EHT_MAX_CAPABILITY_LEN = 0x33 -+ NL80211_EHT_MIN_CAPABILITY_LEN = 0xd - NL80211_EXTERNAL_AUTH_ABORT = 0x1 - NL80211_EXTERNAL_AUTH_START = 0x0 - NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 0x32 -@@ -4807,6 +5005,7 @@ const ( - NL80211_EXT_FEATURE_BEACON_RATE_HT = 0x7 - NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 0x6 - NL80211_EXT_FEATURE_BEACON_RATE_VHT = 0x8 -+ NL80211_EXT_FEATURE_BSS_COLOR = 0x3a - NL80211_EXT_FEATURE_BSS_PARENT_TSF = 0x4 - NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 0x1f - NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 0x2a -@@ -4818,6 +5017,7 @@ const ( - NL80211_EXT_FEATURE_DFS_OFFLOAD = 0x19 - NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 - NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 -+ NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD = 0x3b - NL80211_EXT_FEATURE_FILS_DISCOVERY = 0x34 - NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 0x11 - NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 0xe -@@ -4833,8 +5033,10 @@ const ( - NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x14 - NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 0x13 - NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 0x31 -+ NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE = 0x3d - NL80211_EXT_FEATURE_PROTECTED_TWT = 0x2b - NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 -+ NL80211_EXT_FEATURE_RADAR_BACKGROUND = 0x3c - NL80211_EXT_FEATURE_RRM = 0x1 - NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 - NL80211_EXT_FEATURE_SAE_OFFLOAD = 0x26 -@@ -4906,7 +5108,9 @@ const ( - NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 - NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc - NL80211_FREQUENCY_ATTR_NO_20MHZ = 0x10 -+ NL80211_FREQUENCY_ATTR_NO_320MHZ = 0x1a - NL80211_FREQUENCY_ATTR_NO_80MHZ = 0xb -+ NL80211_FREQUENCY_ATTR_NO_EHT = 0x1b - NL80211_FREQUENCY_ATTR_NO_HE = 0x13 - NL80211_FREQUENCY_ATTR_NO_HT40_MINUS = 0x9 - NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa -@@ -5006,6 +5210,12 @@ const ( - NL80211_MAX_SUPP_HT_RATES = 0x4d - NL80211_MAX_SUPP_RATES = 0x20 - NL80211_MAX_SUPP_REG_RULES = 0x80 -+ NL80211_MBSSID_CONFIG_ATTR_EMA = 0x5 -+ NL80211_MBSSID_CONFIG_ATTR_INDEX = 0x3 -+ NL80211_MBSSID_CONFIG_ATTR_MAX = 0x5 -+ NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY = 0x2 -+ NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES = 0x1 -+ NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX = 0x4 - NL80211_MESHCONF_ATTR_MAX = 0x1f - NL80211_MESHCONF_AUTO_OPEN_PLINKS = 0x7 - NL80211_MESHCONF_AWAKE_WINDOW = 0x1b -@@ -5168,6 +5378,7 @@ const ( - NL80211_PMSR_FTM_FAILURE_UNSPECIFIED = 0x0 - NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL = 0x3 - NL80211_PMSR_FTM_REQ_ATTR_ASAP = 0x1 -+ NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR = 0xd - NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION = 0x5 - NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4 - NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6 -@@ -5244,12 +5455,36 @@ const ( - NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 - NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb - NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa -+ NL80211_RATE_INFO_320_MHZ_WIDTH = 0x12 - NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 - NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc - NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 - NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 - NL80211_RATE_INFO_BITRATE32 = 0x5 - NL80211_RATE_INFO_BITRATE = 0x1 -+ NL80211_RATE_INFO_EHT_GI_0_8 = 0x0 -+ NL80211_RATE_INFO_EHT_GI_1_6 = 0x1 -+ NL80211_RATE_INFO_EHT_GI_3_2 = 0x2 -+ NL80211_RATE_INFO_EHT_GI = 0x15 -+ NL80211_RATE_INFO_EHT_MCS = 0x13 -+ NL80211_RATE_INFO_EHT_NSS = 0x14 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_106 = 0x3 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_106P26 = 0x4 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_242 = 0x5 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_26 = 0x0 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_2x996 = 0xb -+ NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484 = 0xc -+ NL80211_RATE_INFO_EHT_RU_ALLOC_3x996 = 0xd -+ NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484 = 0xe -+ NL80211_RATE_INFO_EHT_RU_ALLOC_484 = 0x6 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_484P242 = 0x7 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_4x996 = 0xf -+ NL80211_RATE_INFO_EHT_RU_ALLOC_52 = 0x1 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_52P26 = 0x2 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_996 = 0x8 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_996P484 = 0x9 -+ NL80211_RATE_INFO_EHT_RU_ALLOC_996P484P242 = 0xa -+ NL80211_RATE_INFO_EHT_RU_ALLOC = 0x16 - NL80211_RATE_INFO_HE_1XLTF = 0x0 - NL80211_RATE_INFO_HE_2XLTF = 0x1 - NL80211_RATE_INFO_HE_4XLTF = 0x2 -@@ -5268,7 +5503,7 @@ const ( - NL80211_RATE_INFO_HE_RU_ALLOC_52 = 0x1 - NL80211_RATE_INFO_HE_RU_ALLOC_996 = 0x5 - NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 -- NL80211_RATE_INFO_MAX = 0x16 -+ NL80211_RATE_INFO_MAX = 0x1d - NL80211_RATE_INFO_MCS = 0x2 - NL80211_RATE_INFO_SHORT_GI = 0x4 - NL80211_RATE_INFO_VHT_MCS = 0x6 -@@ -5292,6 +5527,7 @@ const ( - NL80211_RRF_GO_CONCURRENT = 0x1000 - NL80211_RRF_IR_CONCURRENT = 0x1000 - NL80211_RRF_NO_160MHZ = 0x10000 -+ NL80211_RRF_NO_320MHZ = 0x40000 - NL80211_RRF_NO_80MHZ = 0x8000 - NL80211_RRF_NO_CCK = 0x2 - NL80211_RRF_NO_HE = 0x20000 -@@ -5607,3 +5843,43 @@ const ( - AUDIT_NLGRP_NONE = 0x0 - AUDIT_NLGRP_READLOG = 0x1 - ) -+ -+const ( -+ TUN_F_CSUM = 0x1 -+ TUN_F_TSO4 = 0x2 -+ TUN_F_TSO6 = 0x4 -+ TUN_F_TSO_ECN = 0x8 -+ TUN_F_UFO = 0x10 -+ TUN_F_USO4 = 0x20 -+ TUN_F_USO6 = 0x40 -+) -+ -+const ( -+ VIRTIO_NET_HDR_F_NEEDS_CSUM = 0x1 -+ VIRTIO_NET_HDR_F_DATA_VALID = 0x2 -+ VIRTIO_NET_HDR_F_RSC_INFO = 0x4 -+) -+ -+const ( -+ VIRTIO_NET_HDR_GSO_NONE = 0x0 -+ VIRTIO_NET_HDR_GSO_TCPV4 = 0x1 -+ VIRTIO_NET_HDR_GSO_UDP = 0x3 -+ VIRTIO_NET_HDR_GSO_TCPV6 = 0x4 -+ VIRTIO_NET_HDR_GSO_UDP_L4 = 0x5 -+ VIRTIO_NET_HDR_GSO_ECN = 0x80 -+) -+ -+type SchedAttr struct { -+ Size uint32 -+ Policy uint32 -+ Flags uint64 -+ Nice int32 -+ Priority uint32 -+ Runtime uint64 -+ Deadline uint64 -+ Period uint64 -+ Util_min uint32 -+ Util_max uint32 -+} -+ -+const SizeofSchedAttr = 0x38 -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go -old mode 100644 -new mode 100755 -index 89c516a..6d8acbc ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go -@@ -337,6 +337,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint32 -@@ -414,7 +416,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [122]int8 -+ Data [122]byte - _ uint32 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go -old mode 100644 -new mode 100755 -index 62b4fb2..59293c6 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go -@@ -350,6 +350,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -427,7 +429,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]int8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go -old mode 100644 -new mode 100755 -index e86b358..40cfa38 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go -@@ -328,6 +328,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint32 -@@ -405,7 +407,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [122]uint8 -+ Data [122]byte - _ uint32 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go -old mode 100644 -new mode 100755 -index 6c6be4c..055bc42 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go -@@ -329,6 +329,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -406,7 +408,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]int8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go -old mode 100644 -new mode 100755 -index 4982ea3..f28affb ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go -@@ -330,6 +330,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -407,7 +409,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]int8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go -old mode 100644 -new mode 100755 -index 173141a..9d71e7c ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go -@@ -333,6 +333,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint32 -@@ -410,7 +412,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [122]int8 -+ Data [122]byte - _ uint32 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go -old mode 100644 -new mode 100755 -index 93ae4c5..fd5ccd3 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go -@@ -332,6 +332,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -409,7 +411,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]int8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go -old mode 100644 -new mode 100755 -index 4e4e510..7704de7 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go -@@ -332,6 +332,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -409,7 +411,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]int8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go -old mode 100644 -new mode 100755 -index 3f5ba01..df00b87 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go -@@ -333,6 +333,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint32 -@@ -410,7 +412,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [122]int8 -+ Data [122]byte - _ uint32 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go -old mode 100644 -new mode 100755 -index 71dfe7c..0942840 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go -@@ -340,6 +340,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint32 -@@ -417,7 +419,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [122]uint8 -+ Data [122]byte - _ uint32 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go -old mode 100644 -new mode 100755 -index 3a2b7f0..0348743 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go -@@ -339,6 +339,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -416,7 +418,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]uint8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go -old mode 100644 -new mode 100755 -index a52d627..bad0670 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go -@@ -339,6 +339,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -416,7 +418,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]uint8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go -old mode 100644 -new mode 100755 -index dfc007d..1b4c97c ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go -@@ -357,6 +357,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -434,7 +436,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]uint8 -+ Data [118]byte - _ uint64 - } - -@@ -716,3 +718,30 @@ type SysvShmDesc struct { - _ uint64 - _ uint64 - } -+ -+type RISCVHWProbePairs struct { -+ Key int64 -+ Value uint64 -+} -+ -+const ( -+ RISCV_HWPROBE_KEY_MVENDORID = 0x0 -+ RISCV_HWPROBE_KEY_MARCHID = 0x1 -+ RISCV_HWPROBE_KEY_MIMPID = 0x2 -+ RISCV_HWPROBE_KEY_BASE_BEHAVIOR = 0x3 -+ RISCV_HWPROBE_BASE_BEHAVIOR_IMA = 0x1 -+ RISCV_HWPROBE_KEY_IMA_EXT_0 = 0x4 -+ RISCV_HWPROBE_IMA_FD = 0x1 -+ RISCV_HWPROBE_IMA_C = 0x2 -+ RISCV_HWPROBE_IMA_V = 0x4 -+ RISCV_HWPROBE_EXT_ZBA = 0x8 -+ RISCV_HWPROBE_EXT_ZBB = 0x10 -+ RISCV_HWPROBE_EXT_ZBS = 0x20 -+ RISCV_HWPROBE_KEY_CPUPERF_0 = 0x5 -+ RISCV_HWPROBE_MISALIGNED_UNKNOWN = 0x0 -+ RISCV_HWPROBE_MISALIGNED_EMULATED = 0x1 -+ RISCV_HWPROBE_MISALIGNED_SLOW = 0x2 -+ RISCV_HWPROBE_MISALIGNED_FAST = 0x3 -+ RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = 0x4 -+ RISCV_HWPROBE_MISALIGNED_MASK = 0x7 -+) -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go -old mode 100644 -new mode 100755 -index b53cb91..aa268d0 ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go -@@ -352,6 +352,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -429,7 +431,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]int8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go -old mode 100644 -new mode 100755 -index fe0aa35..444045b ---- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go -@@ -334,6 +334,8 @@ type Taskstats struct { - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -+ Irq_count uint64 -+ Irq_delay_total uint64 - } - - type cpuMask uint64 -@@ -411,7 +413,7 @@ const ( - - type SockaddrStorage struct { - Family uint16 -- _ [118]int8 -+ Data [118]byte - _ uint64 - } - -diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go -old mode 100644 -new mode 100755 -index 2fd2060..9bc4c8f ---- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go -@@ -491,6 +491,90 @@ type Utsname struct { - Machine [256]byte - } - -+const SizeofUvmexp = 0x278 -+ -+type Uvmexp struct { -+ Pagesize int64 -+ Pagemask int64 -+ Pageshift int64 -+ Npages int64 -+ Free int64 -+ Active int64 -+ Inactive int64 -+ Paging int64 -+ Wired int64 -+ Zeropages int64 -+ Reserve_pagedaemon int64 -+ Reserve_kernel int64 -+ Freemin int64 -+ Freetarg int64 -+ Inactarg int64 -+ Wiredmax int64 -+ Nswapdev int64 -+ Swpages int64 -+ Swpginuse int64 -+ Swpgonly int64 -+ Nswget int64 -+ Unused1 int64 -+ Cpuhit int64 -+ Cpumiss int64 -+ Faults int64 -+ Traps int64 -+ Intrs int64 -+ Swtch int64 -+ Softs int64 -+ Syscalls int64 -+ Pageins int64 -+ Swapins int64 -+ Swapouts int64 -+ Pgswapin int64 -+ Pgswapout int64 -+ Forks int64 -+ Forks_ppwait int64 -+ Forks_sharevm int64 -+ Pga_zerohit int64 -+ Pga_zeromiss int64 -+ Zeroaborts int64 -+ Fltnoram int64 -+ Fltnoanon int64 -+ Fltpgwait int64 -+ Fltpgrele int64 -+ Fltrelck int64 -+ Fltrelckok int64 -+ Fltanget int64 -+ Fltanretry int64 -+ Fltamcopy int64 -+ Fltnamap int64 -+ Fltnomap int64 -+ Fltlget int64 -+ Fltget int64 -+ Flt_anon int64 -+ Flt_acow int64 -+ Flt_obj int64 -+ Flt_prcopy int64 -+ Flt_przero int64 -+ Pdwoke int64 -+ Pdrevs int64 -+ Unused4 int64 -+ Pdfreed int64 -+ Pdscans int64 -+ Pdanscan int64 -+ Pdobscan int64 -+ Pdreact int64 -+ Pdbusy int64 -+ Pdpageouts int64 -+ Pdpending int64 -+ Pddeact int64 -+ Anonpages int64 -+ Filepages int64 -+ Execpages int64 -+ Colorhit int64 -+ Colormiss int64 -+ Ncolors int64 -+ Bootpages int64 -+ Poolpages int64 -+} -+ - const SizeofClockinfo = 0x14 - - type Clockinfo struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go -old mode 100644 -new mode 100755 -index 6a5a1a8..bb05f65 ---- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go -@@ -499,6 +499,90 @@ type Utsname struct { - Machine [256]byte - } - -+const SizeofUvmexp = 0x278 -+ -+type Uvmexp struct { -+ Pagesize int64 -+ Pagemask int64 -+ Pageshift int64 -+ Npages int64 -+ Free int64 -+ Active int64 -+ Inactive int64 -+ Paging int64 -+ Wired int64 -+ Zeropages int64 -+ Reserve_pagedaemon int64 -+ Reserve_kernel int64 -+ Freemin int64 -+ Freetarg int64 -+ Inactarg int64 -+ Wiredmax int64 -+ Nswapdev int64 -+ Swpages int64 -+ Swpginuse int64 -+ Swpgonly int64 -+ Nswget int64 -+ Unused1 int64 -+ Cpuhit int64 -+ Cpumiss int64 -+ Faults int64 -+ Traps int64 -+ Intrs int64 -+ Swtch int64 -+ Softs int64 -+ Syscalls int64 -+ Pageins int64 -+ Swapins int64 -+ Swapouts int64 -+ Pgswapin int64 -+ Pgswapout int64 -+ Forks int64 -+ Forks_ppwait int64 -+ Forks_sharevm int64 -+ Pga_zerohit int64 -+ Pga_zeromiss int64 -+ Zeroaborts int64 -+ Fltnoram int64 -+ Fltnoanon int64 -+ Fltpgwait int64 -+ Fltpgrele int64 -+ Fltrelck int64 -+ Fltrelckok int64 -+ Fltanget int64 -+ Fltanretry int64 -+ Fltamcopy int64 -+ Fltnamap int64 -+ Fltnomap int64 -+ Fltlget int64 -+ Fltget int64 -+ Flt_anon int64 -+ Flt_acow int64 -+ Flt_obj int64 -+ Flt_prcopy int64 -+ Flt_przero int64 -+ Pdwoke int64 -+ Pdrevs int64 -+ Unused4 int64 -+ Pdfreed int64 -+ Pdscans int64 -+ Pdanscan int64 -+ Pdobscan int64 -+ Pdreact int64 -+ Pdbusy int64 -+ Pdpageouts int64 -+ Pdpending int64 -+ Pddeact int64 -+ Anonpages int64 -+ Filepages int64 -+ Execpages int64 -+ Colorhit int64 -+ Colormiss int64 -+ Ncolors int64 -+ Bootpages int64 -+ Poolpages int64 -+} -+ - const SizeofClockinfo = 0x14 - - type Clockinfo struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go -old mode 100644 -new mode 100755 -index 84cc8d0..db40e3a ---- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go -@@ -496,6 +496,90 @@ type Utsname struct { - Machine [256]byte - } - -+const SizeofUvmexp = 0x278 -+ -+type Uvmexp struct { -+ Pagesize int64 -+ Pagemask int64 -+ Pageshift int64 -+ Npages int64 -+ Free int64 -+ Active int64 -+ Inactive int64 -+ Paging int64 -+ Wired int64 -+ Zeropages int64 -+ Reserve_pagedaemon int64 -+ Reserve_kernel int64 -+ Freemin int64 -+ Freetarg int64 -+ Inactarg int64 -+ Wiredmax int64 -+ Nswapdev int64 -+ Swpages int64 -+ Swpginuse int64 -+ Swpgonly int64 -+ Nswget int64 -+ Unused1 int64 -+ Cpuhit int64 -+ Cpumiss int64 -+ Faults int64 -+ Traps int64 -+ Intrs int64 -+ Swtch int64 -+ Softs int64 -+ Syscalls int64 -+ Pageins int64 -+ Swapins int64 -+ Swapouts int64 -+ Pgswapin int64 -+ Pgswapout int64 -+ Forks int64 -+ Forks_ppwait int64 -+ Forks_sharevm int64 -+ Pga_zerohit int64 -+ Pga_zeromiss int64 -+ Zeroaborts int64 -+ Fltnoram int64 -+ Fltnoanon int64 -+ Fltpgwait int64 -+ Fltpgrele int64 -+ Fltrelck int64 -+ Fltrelckok int64 -+ Fltanget int64 -+ Fltanretry int64 -+ Fltamcopy int64 -+ Fltnamap int64 -+ Fltnomap int64 -+ Fltlget int64 -+ Fltget int64 -+ Flt_anon int64 -+ Flt_acow int64 -+ Flt_obj int64 -+ Flt_prcopy int64 -+ Flt_przero int64 -+ Pdwoke int64 -+ Pdrevs int64 -+ Unused4 int64 -+ Pdfreed int64 -+ Pdscans int64 -+ Pdanscan int64 -+ Pdobscan int64 -+ Pdreact int64 -+ Pdbusy int64 -+ Pdpageouts int64 -+ Pdpending int64 -+ Pddeact int64 -+ Anonpages int64 -+ Filepages int64 -+ Execpages int64 -+ Colorhit int64 -+ Colormiss int64 -+ Ncolors int64 -+ Bootpages int64 -+ Poolpages int64 -+} -+ - const SizeofClockinfo = 0x14 - - type Clockinfo struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go -old mode 100644 -new mode 100755 -index c844e70..1112115 ---- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go -@@ -499,6 +499,90 @@ type Utsname struct { - Machine [256]byte - } - -+const SizeofUvmexp = 0x278 -+ -+type Uvmexp struct { -+ Pagesize int64 -+ Pagemask int64 -+ Pageshift int64 -+ Npages int64 -+ Free int64 -+ Active int64 -+ Inactive int64 -+ Paging int64 -+ Wired int64 -+ Zeropages int64 -+ Reserve_pagedaemon int64 -+ Reserve_kernel int64 -+ Freemin int64 -+ Freetarg int64 -+ Inactarg int64 -+ Wiredmax int64 -+ Nswapdev int64 -+ Swpages int64 -+ Swpginuse int64 -+ Swpgonly int64 -+ Nswget int64 -+ Unused1 int64 -+ Cpuhit int64 -+ Cpumiss int64 -+ Faults int64 -+ Traps int64 -+ Intrs int64 -+ Swtch int64 -+ Softs int64 -+ Syscalls int64 -+ Pageins int64 -+ Swapins int64 -+ Swapouts int64 -+ Pgswapin int64 -+ Pgswapout int64 -+ Forks int64 -+ Forks_ppwait int64 -+ Forks_sharevm int64 -+ Pga_zerohit int64 -+ Pga_zeromiss int64 -+ Zeroaborts int64 -+ Fltnoram int64 -+ Fltnoanon int64 -+ Fltpgwait int64 -+ Fltpgrele int64 -+ Fltrelck int64 -+ Fltrelckok int64 -+ Fltanget int64 -+ Fltanretry int64 -+ Fltamcopy int64 -+ Fltnamap int64 -+ Fltnomap int64 -+ Fltlget int64 -+ Fltget int64 -+ Flt_anon int64 -+ Flt_acow int64 -+ Flt_obj int64 -+ Flt_prcopy int64 -+ Flt_przero int64 -+ Pdwoke int64 -+ Pdrevs int64 -+ Unused4 int64 -+ Pdfreed int64 -+ Pdscans int64 -+ Pdanscan int64 -+ Pdobscan int64 -+ Pdreact int64 -+ Pdbusy int64 -+ Pdpageouts int64 -+ Pdpending int64 -+ Pddeact int64 -+ Anonpages int64 -+ Filepages int64 -+ Execpages int64 -+ Colorhit int64 -+ Colormiss int64 -+ Ncolors int64 -+ Bootpages int64 -+ Poolpages int64 -+} -+ - const SizeofClockinfo = 0x14 - - type Clockinfo struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go -old mode 100644 -new mode 100755 -index 2ed718c..26eba23 ---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go -@@ -58,22 +58,22 @@ type Rlimit struct { - type _Gid_t uint32 - - type Stat_t struct { -- Mode uint32 -- Dev int32 -- Ino uint64 -- Nlink uint32 -- Uid uint32 -- Gid uint32 -- Rdev int32 -- Atim Timespec -- Mtim Timespec -- Ctim Timespec -- Size int64 -- Blocks int64 -- Blksize uint32 -- Flags uint32 -- Gen uint32 -- X__st_birthtim Timespec -+ Mode uint32 -+ Dev int32 -+ Ino uint64 -+ Nlink uint32 -+ Uid uint32 -+ Gid uint32 -+ Rdev int32 -+ Atim Timespec -+ Mtim Timespec -+ Ctim Timespec -+ Size int64 -+ Blocks int64 -+ Blksize int32 -+ Flags uint32 -+ Gen uint32 -+ _ Timespec - } - - type Statfs_t struct { -@@ -98,7 +98,7 @@ type Statfs_t struct { - F_mntonname [90]byte - F_mntfromname [90]byte - F_mntfromspec [90]byte -- Pad_cgo_0 [2]byte -+ _ [2]byte - Mount_info [160]byte - } - -@@ -111,13 +111,13 @@ type Flock_t struct { - } - - type Dirent struct { -- Fileno uint64 -- Off int64 -- Reclen uint16 -- Type uint8 -- Namlen uint8 -- X__d_padding [4]uint8 -- Name [256]int8 -+ Fileno uint64 -+ Off int64 -+ Reclen uint16 -+ Type uint8 -+ Namlen uint8 -+ _ [4]uint8 -+ Name [256]int8 - } - - type Fsid struct { -@@ -262,8 +262,8 @@ type FdSet struct { - } - - const ( -- SizeofIfMsghdr = 0xec -- SizeofIfData = 0xd4 -+ SizeofIfMsghdr = 0xa0 -+ SizeofIfData = 0x88 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x1a - SizeofRtMsghdr = 0x60 -@@ -292,7 +292,7 @@ type IfData struct { - Link_state uint8 - Mtu uint32 - Metric uint32 -- Pad uint32 -+ Rdomain uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 -@@ -304,10 +304,10 @@ type IfData struct { - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 -+ Oqdrops uint64 - Noproto uint64 - Capabilities uint32 - Lastchange Timeval -- Mclpool [7]Mclpool - } - - type IfaMsghdr struct { -@@ -368,20 +368,12 @@ type RtMetrics struct { - Pad uint32 - } - --type Mclpool struct { -- Grown int32 -- Alive uint16 -- Hwm uint16 -- Cwm uint16 -- Lwm uint16 --} -- - const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 -- SizeofBpfHdr = 0x14 -+ SizeofBpfHdr = 0x18 - ) - - type BpfVersion struct { -@@ -407,11 +399,14 @@ type BpfInsn struct { - } - - type BpfHdr struct { -- Tstamp BpfTimeval -- Caplen uint32 -- Datalen uint32 -- Hdrlen uint16 -- Pad_cgo_0 [2]byte -+ Tstamp BpfTimeval -+ Caplen uint32 -+ Datalen uint32 -+ Hdrlen uint16 -+ Ifidx uint16 -+ Flowid uint16 -+ Flags uint8 -+ Drops uint8 - } - - type BpfTimeval struct { -@@ -488,7 +483,7 @@ type Uvmexp struct { - Zeropages int32 - Reserve_pagedaemon int32 - Reserve_kernel int32 -- Anonpages int32 -+ Unused01 int32 - Vnodepages int32 - Vtextpages int32 - Freemin int32 -@@ -507,8 +502,8 @@ type Uvmexp struct { - Swpgonly int32 - Nswget int32 - Nanon int32 -- Nanonneeded int32 -- Nfreeanon int32 -+ Unused05 int32 -+ Unused06 int32 - Faults int32 - Traps int32 - Intrs int32 -@@ -516,8 +511,8 @@ type Uvmexp struct { - Softs int32 - Syscalls int32 - Pageins int32 -- Obsolete_swapins int32 -- Obsolete_swapouts int32 -+ Unused07 int32 -+ Unused08 int32 - Pgswapin int32 - Pgswapout int32 - Forks int32 -@@ -525,7 +520,7 @@ type Uvmexp struct { - Forks_sharevm int32 - Pga_zerohit int32 - Pga_zeromiss int32 -- Zeroaborts int32 -+ Unused09 int32 - Fltnoram int32 - Fltnoanon int32 - Fltnoamap int32 -@@ -557,9 +552,9 @@ type Uvmexp struct { - Pdpageouts int32 - Pdpending int32 - Pddeact int32 -- Pdreanon int32 -- Pdrevnode int32 -- Pdrevtext int32 -+ Unused11 int32 -+ Unused12 int32 -+ Unused13 int32 - Fpswtch int32 - Kmapent int32 - } -diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go -old mode 100644 -new mode 100755 -index b4fb97e..5a54798 ---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go -@@ -73,7 +73,6 @@ type Stat_t struct { - Blksize int32 - Flags uint32 - Gen uint32 -- _ [4]byte - _ Timespec - } - -@@ -81,7 +80,6 @@ type Statfs_t struct { - F_flags uint32 - F_bsize uint32 - F_iosize uint32 -- _ [4]byte - F_blocks uint64 - F_bfree uint64 - F_bavail int64 -@@ -200,10 +198,8 @@ type IPv6Mreq struct { - type Msghdr struct { - Name *byte - Namelen uint32 -- _ [4]byte - Iov *Iovec - Iovlen uint32 -- _ [4]byte - Control *byte - Controllen uint32 - Flags int32 -@@ -311,7 +307,6 @@ type IfData struct { - Oqdrops uint64 - Noproto uint64 - Capabilities uint32 -- _ [4]byte - Lastchange Timeval - } - -@@ -373,14 +368,12 @@ type RtMetrics struct { - Pad uint32 - } - --type Mclpool struct{} -- - const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 -- SizeofBpfHdr = 0x14 -+ SizeofBpfHdr = 0x18 - ) - - type BpfVersion struct { -@@ -395,7 +388,6 @@ type BpfStat struct { - - type BpfProgram struct { - Len uint32 -- _ [4]byte - Insns *BpfInsn - } - -@@ -411,7 +403,10 @@ type BpfHdr struct { - Caplen uint32 - Datalen uint32 - Hdrlen uint16 -- _ [2]byte -+ Ifidx uint16 -+ Flowid uint16 -+ Flags uint8 -+ Drops uint8 - } - - type BpfTimeval struct { -@@ -488,7 +483,7 @@ type Uvmexp struct { - Zeropages int32 - Reserve_pagedaemon int32 - Reserve_kernel int32 -- Anonpages int32 -+ Unused01 int32 - Vnodepages int32 - Vtextpages int32 - Freemin int32 -@@ -507,8 +502,8 @@ type Uvmexp struct { - Swpgonly int32 - Nswget int32 - Nanon int32 -- Nanonneeded int32 -- Nfreeanon int32 -+ Unused05 int32 -+ Unused06 int32 - Faults int32 - Traps int32 - Intrs int32 -@@ -516,8 +511,8 @@ type Uvmexp struct { - Softs int32 - Syscalls int32 - Pageins int32 -- Obsolete_swapins int32 -- Obsolete_swapouts int32 -+ Unused07 int32 -+ Unused08 int32 - Pgswapin int32 - Pgswapout int32 - Forks int32 -@@ -525,7 +520,7 @@ type Uvmexp struct { - Forks_sharevm int32 - Pga_zerohit int32 - Pga_zeromiss int32 -- Zeroaborts int32 -+ Unused09 int32 - Fltnoram int32 - Fltnoanon int32 - Fltnoamap int32 -@@ -557,9 +552,9 @@ type Uvmexp struct { - Pdpageouts int32 - Pdpending int32 - Pddeact int32 -- Pdreanon int32 -- Pdrevnode int32 -- Pdrevtext int32 -+ Unused11 int32 -+ Unused12 int32 -+ Unused13 int32 - Fpswtch int32 - Kmapent int32 - } -diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go -old mode 100644 -new mode 100755 -index 2c46750..be58c4e ---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go -@@ -375,14 +375,12 @@ type RtMetrics struct { - Pad uint32 - } - --type Mclpool struct{} -- - const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 -- SizeofBpfHdr = 0x14 -+ SizeofBpfHdr = 0x18 - ) - - type BpfVersion struct { -@@ -412,7 +410,10 @@ type BpfHdr struct { - Caplen uint32 - Datalen uint32 - Hdrlen uint16 -- _ [2]byte -+ Ifidx uint16 -+ Flowid uint16 -+ Flags uint8 -+ Drops uint8 - } - - type BpfTimeval struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go -old mode 100644 -new mode 100755 -index ddee045..5233826 ---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go -@@ -368,14 +368,12 @@ type RtMetrics struct { - Pad uint32 - } - --type Mclpool struct{} -- - const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 -- SizeofBpfHdr = 0x14 -+ SizeofBpfHdr = 0x18 - ) - - type BpfVersion struct { -@@ -405,7 +403,10 @@ type BpfHdr struct { - Caplen uint32 - Datalen uint32 - Hdrlen uint16 -- _ [2]byte -+ Ifidx uint16 -+ Flowid uint16 -+ Flags uint8 -+ Drops uint8 - } - - type BpfTimeval struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go -old mode 100644 -new mode 100755 -index eb13d4e..605cfdb ---- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go -+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go -@@ -368,14 +368,12 @@ type RtMetrics struct { - Pad uint32 - } - --type Mclpool struct{} -- - const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 -- SizeofBpfHdr = 0x14 -+ SizeofBpfHdr = 0x18 - ) - - type BpfVersion struct { -@@ -405,7 +403,10 @@ type BpfHdr struct { - Caplen uint32 - Datalen uint32 - Hdrlen uint16 -- _ [2]byte -+ Ifidx uint16 -+ Flowid uint16 -+ Flags uint8 -+ Drops uint8 - } - - type BpfTimeval struct { -diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/aliases.go b/vendor/golang.org/x/sys/windows/aliases.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/empty.s b/vendor/golang.org/x/sys/windows/empty.s -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go -old mode 100644 -new mode 100755 -index 92ac05f..b8ad192 ---- a/vendor/golang.org/x/sys/windows/env_windows.go -+++ b/vendor/golang.org/x/sys/windows/env_windows.go -@@ -37,14 +37,14 @@ func (token Token) Environ(inheritExisting bool) (env []string, err error) { - return nil, err - } - defer DestroyEnvironmentBlock(block) -- blockp := uintptr(unsafe.Pointer(block)) -+ blockp := unsafe.Pointer(block) - for { -- entry := UTF16PtrToString((*uint16)(unsafe.Pointer(blockp))) -+ entry := UTF16PtrToString((*uint16)(blockp)) - if len(entry) == 0 { - break - } - env = append(env, entry) -- blockp += 2 * (uintptr(len(entry)) + 1) -+ blockp = unsafe.Add(blockp, 2*(len(entry)+1)) - } - return env, nil - } -diff --git a/vendor/golang.org/x/sys/windows/eventlog.go b/vendor/golang.org/x/sys/windows/eventlog.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go -old mode 100644 -new mode 100755 -index 75980fd..9cabbb6 ---- a/vendor/golang.org/x/sys/windows/exec_windows.go -+++ b/vendor/golang.org/x/sys/windows/exec_windows.go -@@ -22,7 +22,7 @@ import ( - // but only if there is space or tab inside s. - func EscapeArg(s string) string { - if len(s) == 0 { -- return "\"\"" -+ return `""` - } - n := len(s) - hasSpace := false -@@ -35,7 +35,7 @@ func EscapeArg(s string) string { - } - } - if hasSpace { -- n += 2 -+ n += 2 // Reserve space for quotes. - } - if n == len(s) { - return s -@@ -82,36 +82,106 @@ func EscapeArg(s string) string { - // in CreateProcess's CommandLine argument, CreateService/ChangeServiceConfig's BinaryPathName argument, - // or any program that uses CommandLineToArgv. - func ComposeCommandLine(args []string) string { -- var commandLine string -- for i := range args { -- if i > 0 { -- commandLine += " " -+ if len(args) == 0 { -+ return "" -+ } -+ -+ // Per https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-commandlinetoargvw: -+ // “This function accepts command lines that contain a program name; the -+ // program name can be enclosed in quotation marks or not.” -+ // -+ // Unfortunately, it provides no means of escaping interior quotation marks -+ // within that program name, and we have no way to report them here. -+ prog := args[0] -+ mustQuote := len(prog) == 0 -+ for i := 0; i < len(prog); i++ { -+ c := prog[i] -+ if c <= ' ' || (c == '"' && i == 0) { -+ // Force quotes for not only the ASCII space and tab as described in the -+ // MSDN article, but also ASCII control characters. -+ // The documentation for CommandLineToArgvW doesn't say what happens when -+ // the first argument is not a valid program name, but it empirically -+ // seems to drop unquoted control characters. -+ mustQuote = true -+ break -+ } -+ } -+ var commandLine []byte -+ if mustQuote { -+ commandLine = make([]byte, 0, len(prog)+2) -+ commandLine = append(commandLine, '"') -+ for i := 0; i < len(prog); i++ { -+ c := prog[i] -+ if c == '"' { -+ // This quote would interfere with our surrounding quotes. -+ // We have no way to report an error, so just strip out -+ // the offending character instead. -+ continue -+ } -+ commandLine = append(commandLine, c) -+ } -+ commandLine = append(commandLine, '"') -+ } else { -+ if len(args) == 1 { -+ // args[0] is a valid command line representing itself. -+ // No need to allocate a new slice or string for it. -+ return prog - } -- commandLine += EscapeArg(args[i]) -+ commandLine = []byte(prog) - } -- return commandLine -+ -+ for _, arg := range args[1:] { -+ commandLine = append(commandLine, ' ') -+ // TODO(bcmills): since we're already appending to a slice, it would be nice -+ // to avoid the intermediate allocations of EscapeArg. -+ // Perhaps we can factor out an appendEscapedArg function. -+ commandLine = append(commandLine, EscapeArg(arg)...) -+ } -+ return string(commandLine) - } - - // DecomposeCommandLine breaks apart its argument command line into unescaped parts using CommandLineToArgv, - // as gathered from GetCommandLine, QUERY_SERVICE_CONFIG's BinaryPathName argument, or elsewhere that - // command lines are passed around. -+// DecomposeCommandLine returns an error if commandLine contains NUL. - func DecomposeCommandLine(commandLine string) ([]string, error) { - if len(commandLine) == 0 { - return []string{}, nil - } -+ utf16CommandLine, err := UTF16FromString(commandLine) -+ if err != nil { -+ return nil, errorspkg.New("string with NUL passed to DecomposeCommandLine") -+ } - var argc int32 -- argv, err := CommandLineToArgv(StringToUTF16Ptr(commandLine), &argc) -+ argv, err := commandLineToArgv(&utf16CommandLine[0], &argc) - if err != nil { - return nil, err - } - defer LocalFree(Handle(unsafe.Pointer(argv))) -+ - var args []string -- for _, v := range (*argv)[:argc] { -- args = append(args, UTF16ToString((*v)[:])) -+ for _, p := range unsafe.Slice(argv, argc) { -+ args = append(args, UTF16PtrToString(p)) - } - return args, nil - } - -+// CommandLineToArgv parses a Unicode command line string and sets -+// argc to the number of parsed arguments. -+// -+// The returned memory should be freed using a single call to LocalFree. -+// -+// Note that although the return type of CommandLineToArgv indicates 8192 -+// entries of up to 8192 characters each, the actual count of parsed arguments -+// may exceed 8192, and the documentation for CommandLineToArgvW does not mention -+// any bound on the lengths of the individual argument strings. -+// (See https://go.dev/issue/63236.) -+func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) { -+ argp, err := commandLineToArgv(cmd, argc) -+ argv = (*[8192]*[8192]uint16)(unsafe.Pointer(argp)) -+ return argv, err -+} -+ - func CloseOnExec(fd Handle) { - SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0) - } -diff --git a/vendor/golang.org/x/sys/windows/memory_windows.go b/vendor/golang.org/x/sys/windows/memory_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/mkerrors.bash b/vendor/golang.org/x/sys/windows/mkerrors.bash -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/mkknownfolderids.bash b/vendor/golang.org/x/sys/windows/mkknownfolderids.bash -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/mksyscall.go b/vendor/golang.org/x/sys/windows/mksyscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/race.go b/vendor/golang.org/x/sys/windows/race.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/race0.go b/vendor/golang.org/x/sys/windows/race0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/registry/key.go b/vendor/golang.org/x/sys/windows/registry/key.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/registry/mksyscall.go b/vendor/golang.org/x/sys/windows/registry/mksyscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/registry/syscall.go b/vendor/golang.org/x/sys/windows/registry/syscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/registry/value.go b/vendor/golang.org/x/sys/windows/registry/value.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go -old mode 100644 -new mode 100755 -index d414ef1..26be94a ---- a/vendor/golang.org/x/sys/windows/security_windows.go -+++ b/vendor/golang.org/x/sys/windows/security_windows.go -@@ -7,8 +7,6 @@ package windows - import ( - "syscall" - "unsafe" -- -- "golang.org/x/sys/internal/unsafeheader" - ) - - const ( -@@ -1341,21 +1339,14 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) copySelfRelativeSecurityDescriptor() - sdLen = min - } - -- var src []byte -- h := (*unsafeheader.Slice)(unsafe.Pointer(&src)) -- h.Data = unsafe.Pointer(selfRelativeSD) -- h.Len = sdLen -- h.Cap = sdLen -- -+ src := unsafe.Slice((*byte)(unsafe.Pointer(selfRelativeSD)), sdLen) -+ // SECURITY_DESCRIPTOR has pointers in it, which means checkptr expects for it to -+ // be aligned properly. When we're copying a Windows-allocated struct to a -+ // Go-allocated one, make sure that the Go allocation is aligned to the -+ // pointer size. - const psize = int(unsafe.Sizeof(uintptr(0))) -- -- var dst []byte -- h = (*unsafeheader.Slice)(unsafe.Pointer(&dst)) - alloc := make([]uintptr, (sdLen+psize-1)/psize) -- h.Data = (*unsafeheader.Slice)(unsafe.Pointer(&alloc)).Data -- h.Len = sdLen -- h.Cap = sdLen -- -+ dst := unsafe.Slice((*byte)(unsafe.Pointer(&alloc[0])), sdLen) - copy(dst, src) - return (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&dst[0])) - } -diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go -old mode 100644 -new mode 100755 -index f8deca8..c44a1b9 ---- a/vendor/golang.org/x/sys/windows/service.go -+++ b/vendor/golang.org/x/sys/windows/service.go -@@ -141,6 +141,12 @@ const ( - SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1 - ) - -+type ENUM_SERVICE_STATUS struct { -+ ServiceName *uint16 -+ DisplayName *uint16 -+ ServiceStatus SERVICE_STATUS -+} -+ - type SERVICE_STATUS struct { - ServiceType uint32 - CurrentState uint32 -@@ -212,6 +218,10 @@ type SERVICE_FAILURE_ACTIONS struct { - Actions *SC_ACTION - } - -+type SERVICE_FAILURE_ACTIONS_FLAG struct { -+ FailureActionsOnNonCrashFailures int32 -+} -+ - type SC_ACTION struct { - Type uint32 - Delay uint32 -@@ -245,3 +255,4 @@ type QUERY_SERVICE_LOCK_STATUS struct { - //sys UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications? - //sys RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW - //sys QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation? -+//sys EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) = advapi32.EnumDependentServicesW -diff --git a/vendor/golang.org/x/sys/windows/setupapi_windows.go b/vendor/golang.org/x/sys/windows/setupapi_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/str.go b/vendor/golang.org/x/sys/windows/str.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go -old mode 100644 -new mode 100755 -index a49853e..35cfc57 ---- a/vendor/golang.org/x/sys/windows/syscall_windows.go -+++ b/vendor/golang.org/x/sys/windows/syscall_windows.go -@@ -10,14 +10,11 @@ import ( - errorspkg "errors" - "fmt" - "runtime" -- "strings" - "sync" - "syscall" - "time" - "unicode/utf16" - "unsafe" -- -- "golang.org/x/sys/internal/unsafeheader" - ) - - type Handle uintptr -@@ -87,22 +84,13 @@ func StringToUTF16(s string) []uint16 { - // s, with a terminating NUL added. If s contains a NUL byte at any - // location, it returns (nil, syscall.EINVAL). - func UTF16FromString(s string) ([]uint16, error) { -- if strings.IndexByte(s, 0) != -1 { -- return nil, syscall.EINVAL -- } -- return utf16.Encode([]rune(s + "\x00")), nil -+ return syscall.UTF16FromString(s) - } - - // UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s, - // with a terminating NUL and any bytes after the NUL removed. - func UTF16ToString(s []uint16) string { -- for i, v := range s { -- if v == 0 { -- s = s[:i] -- break -- } -- } -- return string(utf16.Decode(s)) -+ return syscall.UTF16ToString(s) - } - - // StringToUTF16Ptr is deprecated. Use UTF16PtrFromString instead. -@@ -145,14 +133,14 @@ func Getpagesize() int { return 4096 } - - // NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. - // This is useful when interoperating with Windows code requiring callbacks. --// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. -+// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. - func NewCallback(fn interface{}) uintptr { - return syscall.NewCallback(fn) - } - - // NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention. - // This is useful when interoperating with Windows code requiring callbacks. --// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. -+// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. - func NewCallbackCDecl(fn interface{}) uintptr { - return syscall.NewCallbackCDecl(fn) - } -@@ -226,7 +214,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { - //sys shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath - //sys TerminateProcess(handle Handle, exitcode uint32) (err error) - //sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) --//sys GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW -+//sys getStartupInfo(startupInfo *StartupInfo) = GetStartupInfoW - //sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) - //sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) - //sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] -@@ -250,7 +238,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { - //sys SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW - //sys GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) = kernel32.GetFileAttributesExW - //sys GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW --//sys CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW -+//sys commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW - //sys LocalFree(hmem Handle) (handle Handle, err error) [failretval!=0] - //sys LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) - //sys SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) -@@ -309,12 +297,15 @@ func NewCallbackCDecl(fn interface{}) uintptr { - //sys RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) = advapi32.RegNotifyChangeKeyValue - //sys GetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId - //sys ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) = kernel32.ProcessIdToSessionId -+//sys ClosePseudoConsole(console Handle) = kernel32.ClosePseudoConsole -+//sys createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pconsole *Handle) (hr error) = kernel32.CreatePseudoConsole - //sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode - //sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode - //sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo - //sys setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition - //sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW - //sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW -+//sys resizePseudoConsole(pconsole Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole - //sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot - //sys Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW - //sys Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32NextW -@@ -415,7 +406,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { - //sys VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) = version.VerQueryValueW - - // Process Status API (PSAPI) --//sys EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses -+//sys enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses - //sys EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) = psapi.EnumProcessModules - //sys EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) = psapi.EnumProcessModulesEx - //sys GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) = psapi.GetModuleInformation -@@ -447,6 +438,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { - //sys DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmGetWindowAttribute - //sys DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmSetWindowAttribute - -+// Windows Multimedia API -+//sys TimeBeginPeriod (period uint32) (err error) [failretval != 0] = winmm.timeBeginPeriod -+//sys TimeEndPeriod (period uint32) (err error) [failretval != 0] = winmm.timeEndPeriod -+ - // syscall interface implementation for other packages - - // GetCurrentProcess returns the handle for the current process. -@@ -834,6 +829,9 @@ const socket_error = uintptr(^uint32(0)) - //sys WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSAStartup - //sys WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup - //sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl -+//sys WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceBeginW -+//sys WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceNextW -+//sys WSALookupServiceEnd(handle Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceEnd - //sys socket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket - //sys sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) [failretval==socket_error] = ws2_32.sendto - //sys recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) [failretval==-1] = ws2_32.recvfrom -@@ -1029,8 +1027,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { - for n < len(pp.Path) && pp.Path[n] != 0 { - n++ - } -- bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] -- sa.Name = string(bytes) -+ sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n)) - return sa, nil - - case AF_INET: -@@ -1362,6 +1359,17 @@ func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { - return syscall.EWINDOWS - } - -+func EnumProcesses(processIds []uint32, bytesReturned *uint32) error { -+ // EnumProcesses syscall expects the size parameter to be in bytes, but the code generated with mksyscall uses -+ // the length of the processIds slice instead. Hence, this wrapper function is added to fix the discrepancy. -+ var p *uint32 -+ if len(processIds) > 0 { -+ p = &processIds[0] -+ } -+ size := uint32(len(processIds) * 4) -+ return enumProcesses(p, size, bytesReturned) -+} -+ - func Getpid() (pid int) { return int(GetCurrentProcessId()) } - - func FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) { -@@ -1621,6 +1629,11 @@ func SetConsoleCursorPosition(console Handle, position Coord) error { - return setConsoleCursorPosition(console, *((*uint32)(unsafe.Pointer(&position)))) - } - -+func GetStartupInfo(startupInfo *StartupInfo) error { -+ getStartupInfo(startupInfo) -+ return nil -+} -+ - func (s NTStatus) Errno() syscall.Errno { - return rtlNtStatusToDosErrorNoTeb(s) - } -@@ -1655,12 +1668,8 @@ func NewNTUnicodeString(s string) (*NTUnicodeString, error) { - - // Slice returns a uint16 slice that aliases the data in the NTUnicodeString. - func (s *NTUnicodeString) Slice() []uint16 { -- var slice []uint16 -- hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) -- hdr.Data = unsafe.Pointer(s.Buffer) -- hdr.Len = int(s.Length) -- hdr.Cap = int(s.MaximumLength) -- return slice -+ slice := unsafe.Slice(s.Buffer, s.MaximumLength) -+ return slice[:s.Length] - } - - func (s *NTUnicodeString) String() string { -@@ -1683,12 +1692,8 @@ func NewNTString(s string) (*NTString, error) { - - // Slice returns a byte slice that aliases the data in the NTString. - func (s *NTString) Slice() []byte { -- var slice []byte -- hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) -- hdr.Data = unsafe.Pointer(s.Buffer) -- hdr.Len = int(s.Length) -- hdr.Cap = int(s.MaximumLength) -- return slice -+ slice := unsafe.Slice(s.Buffer, s.MaximumLength) -+ return slice[:s.Length] - } - - func (s *NTString) String() string { -@@ -1740,10 +1745,7 @@ func LoadResourceData(module, resInfo Handle) (data []byte, err error) { - if err != nil { - return - } -- h := (*unsafeheader.Slice)(unsafe.Pointer(&data)) -- h.Data = unsafe.Pointer(ptr) -- h.Len = int(size) -- h.Cap = int(size) -+ data = unsafe.Slice((*byte)(unsafe.Pointer(ptr)), size) - return - } - -@@ -1814,3 +1816,17 @@ type PSAPI_WORKING_SET_EX_INFORMATION struct { - // A PSAPI_WORKING_SET_EX_BLOCK union that indicates the attributes of the page at VirtualAddress. - VirtualAttributes PSAPI_WORKING_SET_EX_BLOCK - } -+ -+// CreatePseudoConsole creates a windows pseudo console. -+func CreatePseudoConsole(size Coord, in Handle, out Handle, flags uint32, pconsole *Handle) error { -+ // We need this wrapper to manually cast Coord to uint32. The autogenerated wrappers only -+ // accept arguments that can be casted to uintptr, and Coord can't. -+ return createPseudoConsole(*((*uint32)(unsafe.Pointer(&size))), in, out, flags, pconsole) -+} -+ -+// ResizePseudoConsole resizes the internal buffers of the pseudo console to the width and height specified in `size`. -+func ResizePseudoConsole(pconsole Handle, size Coord) error { -+ // We need this wrapper to manually cast Coord to uint32. The autogenerated wrappers only -+ // accept arguments that can be casted to uintptr, and Coord can't. -+ return resizePseudoConsole(pconsole, *((*uint32)(unsafe.Pointer(&size)))) -+} -diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go -old mode 100644 -new mode 100755 -index 0c4add9..b88dc7c ---- a/vendor/golang.org/x/sys/windows/types_windows.go -+++ b/vendor/golang.org/x/sys/windows/types_windows.go -@@ -247,6 +247,7 @@ const ( - PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x00020007 - PROC_THREAD_ATTRIBUTE_UMS_THREAD = 0x00030006 - PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL = 0x0002000b -+ PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = 0x00020016 - ) - - const ( -@@ -1243,6 +1244,51 @@ const ( - DnsSectionAdditional = 0x0003 - ) - -+const ( -+ // flags of WSALookupService -+ LUP_DEEP = 0x0001 -+ LUP_CONTAINERS = 0x0002 -+ LUP_NOCONTAINERS = 0x0004 -+ LUP_NEAREST = 0x0008 -+ LUP_RETURN_NAME = 0x0010 -+ LUP_RETURN_TYPE = 0x0020 -+ LUP_RETURN_VERSION = 0x0040 -+ LUP_RETURN_COMMENT = 0x0080 -+ LUP_RETURN_ADDR = 0x0100 -+ LUP_RETURN_BLOB = 0x0200 -+ LUP_RETURN_ALIASES = 0x0400 -+ LUP_RETURN_QUERY_STRING = 0x0800 -+ LUP_RETURN_ALL = 0x0FF0 -+ LUP_RES_SERVICE = 0x8000 -+ -+ LUP_FLUSHCACHE = 0x1000 -+ LUP_FLUSHPREVIOUS = 0x2000 -+ -+ LUP_NON_AUTHORITATIVE = 0x4000 -+ LUP_SECURE = 0x8000 -+ LUP_RETURN_PREFERRED_NAMES = 0x10000 -+ LUP_DNS_ONLY = 0x20000 -+ -+ LUP_ADDRCONFIG = 0x100000 -+ LUP_DUAL_ADDR = 0x200000 -+ LUP_FILESERVER = 0x400000 -+ LUP_DISABLE_IDN_ENCODING = 0x00800000 -+ LUP_API_ANSI = 0x01000000 -+ -+ LUP_RESOLUTION_HANDLE = 0x80000000 -+) -+ -+const ( -+ // values of WSAQUERYSET's namespace -+ NS_ALL = 0 -+ NS_DNS = 12 -+ NS_NLA = 15 -+ NS_BTH = 16 -+ NS_EMAIL = 37 -+ NS_PNRPNAME = 38 -+ NS_PNRPCLOUD = 39 -+) -+ - type DNSSRVData struct { - Target *uint16 - Priority uint16 -@@ -2094,6 +2140,12 @@ const ( - ENABLE_LVB_GRID_WORLDWIDE = 0x10 - ) - -+// Pseudo console related constants used for the flags parameter to -+// CreatePseudoConsole. See: https://learn.microsoft.com/en-us/windows/console/createpseudoconsole -+const ( -+ PSEUDOCONSOLE_INHERIT_CURSOR = 0x1 -+) -+ - type Coord struct { - X int16 - Y int16 -@@ -2175,19 +2227,23 @@ type JOBOBJECT_BASIC_UI_RESTRICTIONS struct { - } - - const ( -- // JobObjectInformationClass -+ // JobObjectInformationClass for QueryInformationJobObject and SetInformationJobObject - JobObjectAssociateCompletionPortInformation = 7 -+ JobObjectBasicAccountingInformation = 1 -+ JobObjectBasicAndIoAccountingInformation = 8 - JobObjectBasicLimitInformation = 2 -+ JobObjectBasicProcessIdList = 3 - JobObjectBasicUIRestrictions = 4 - JobObjectCpuRateControlInformation = 15 - JobObjectEndOfJobTimeInformation = 6 - JobObjectExtendedLimitInformation = 9 - JobObjectGroupInformation = 11 - JobObjectGroupInformationEx = 14 -- JobObjectLimitViolationInformation2 = 35 -+ JobObjectLimitViolationInformation = 13 -+ JobObjectLimitViolationInformation2 = 34 - JobObjectNetRateControlInformation = 32 - JobObjectNotificationLimitInformation = 12 -- JobObjectNotificationLimitInformation2 = 34 -+ JobObjectNotificationLimitInformation2 = 33 - JobObjectSecurityLimitInformation = 5 - ) - -@@ -3258,3 +3314,43 @@ const ( - DWMWA_TEXT_COLOR = 36 - DWMWA_VISIBLE_FRAME_BORDER_THICKNESS = 37 - ) -+ -+type WSAQUERYSET struct { -+ Size uint32 -+ ServiceInstanceName *uint16 -+ ServiceClassId *GUID -+ Version *WSAVersion -+ Comment *uint16 -+ NameSpace uint32 -+ NSProviderId *GUID -+ Context *uint16 -+ NumberOfProtocols uint32 -+ AfpProtocols *AFProtocols -+ QueryString *uint16 -+ NumberOfCsAddrs uint32 -+ SaBuffer *CSAddrInfo -+ OutputFlags uint32 -+ Blob *BLOB -+} -+ -+type WSAVersion struct { -+ Version uint32 -+ EnumerationOfComparison int32 -+} -+ -+type AFProtocols struct { -+ AddressFamily int32 -+ Protocol int32 -+} -+ -+type CSAddrInfo struct { -+ LocalAddr SocketAddress -+ RemoteAddr SocketAddress -+ SocketType int32 -+ Protocol int32 -+} -+ -+type BLOB struct { -+ Size uint32 -+ BlobData *byte -+} -diff --git a/vendor/golang.org/x/sys/windows/types_windows_386.go b/vendor/golang.org/x/sys/windows/types_windows_386.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/types_windows_amd64.go b/vendor/golang.org/x/sys/windows/types_windows_amd64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/types_windows_arm.go b/vendor/golang.org/x/sys/windows/types_windows_arm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/types_windows_arm64.go b/vendor/golang.org/x/sys/windows/types_windows_arm64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/zerrors_windows.go b/vendor/golang.org/x/sys/windows/zerrors_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go b/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go -old mode 100644 -new mode 100755 -index ac60052..8b1688d ---- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go -+++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go -@@ -55,6 +55,7 @@ var ( - moduser32 = NewLazySystemDLL("user32.dll") - moduserenv = NewLazySystemDLL("userenv.dll") - modversion = NewLazySystemDLL("version.dll") -+ modwinmm = NewLazySystemDLL("winmm.dll") - modwintrust = NewLazySystemDLL("wintrust.dll") - modws2_32 = NewLazySystemDLL("ws2_32.dll") - modwtsapi32 = NewLazySystemDLL("wtsapi32.dll") -@@ -86,6 +87,7 @@ var ( - procDeleteService = modadvapi32.NewProc("DeleteService") - procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource") - procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx") -+ procEnumDependentServicesW = modadvapi32.NewProc("EnumDependentServicesW") - procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") - procEqualSid = modadvapi32.NewProc("EqualSid") - procFreeSid = modadvapi32.NewProc("FreeSid") -@@ -186,6 +188,7 @@ var ( - procCancelIo = modkernel32.NewProc("CancelIo") - procCancelIoEx = modkernel32.NewProc("CancelIoEx") - procCloseHandle = modkernel32.NewProc("CloseHandle") -+ procClosePseudoConsole = modkernel32.NewProc("ClosePseudoConsole") - procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe") - procCreateDirectoryW = modkernel32.NewProc("CreateDirectoryW") - procCreateEventExW = modkernel32.NewProc("CreateEventExW") -@@ -200,6 +203,7 @@ var ( - procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW") - procCreatePipe = modkernel32.NewProc("CreatePipe") - procCreateProcessW = modkernel32.NewProc("CreateProcessW") -+ procCreatePseudoConsole = modkernel32.NewProc("CreatePseudoConsole") - procCreateSymbolicLinkW = modkernel32.NewProc("CreateSymbolicLinkW") - procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot") - procDefineDosDeviceW = modkernel32.NewProc("DefineDosDeviceW") -@@ -326,6 +330,7 @@ var ( - procReleaseMutex = modkernel32.NewProc("ReleaseMutex") - procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW") - procResetEvent = modkernel32.NewProc("ResetEvent") -+ procResizePseudoConsole = modkernel32.NewProc("ResizePseudoConsole") - procResumeThread = modkernel32.NewProc("ResumeThread") - procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") - procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") -@@ -467,6 +472,8 @@ var ( - procGetFileVersionInfoSizeW = modversion.NewProc("GetFileVersionInfoSizeW") - procGetFileVersionInfoW = modversion.NewProc("GetFileVersionInfoW") - procVerQueryValueW = modversion.NewProc("VerQueryValueW") -+ proctimeBeginPeriod = modwinmm.NewProc("timeBeginPeriod") -+ proctimeEndPeriod = modwinmm.NewProc("timeEndPeriod") - procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx") - procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") - procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") -@@ -474,6 +481,9 @@ var ( - procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") - procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") - procWSAIoctl = modws2_32.NewProc("WSAIoctl") -+ procWSALookupServiceBeginW = modws2_32.NewProc("WSALookupServiceBeginW") -+ procWSALookupServiceEnd = modws2_32.NewProc("WSALookupServiceEnd") -+ procWSALookupServiceNextW = modws2_32.NewProc("WSALookupServiceNextW") - procWSARecv = modws2_32.NewProc("WSARecv") - procWSARecvFrom = modws2_32.NewProc("WSARecvFrom") - procWSASend = modws2_32.NewProc("WSASend") -@@ -731,6 +741,14 @@ func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes - return - } - -+func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) { -+ r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) -+ if r1 == 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ - func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { - r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) - if r1 == 0 { -@@ -1618,6 +1636,11 @@ func CloseHandle(handle Handle) (err error) { - return - } - -+func ClosePseudoConsole(console Handle) { -+ syscall.Syscall(procClosePseudoConsole.Addr(), 1, uintptr(console), 0, 0) -+ return -+} -+ - func ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(overlapped)), 0) - if r1 == 0 { -@@ -1747,6 +1770,14 @@ func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityA - return - } - -+func createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pconsole *Handle) (hr error) { -+ r0, _, _ := syscall.Syscall6(procCreatePseudoConsole.Addr(), 5, uintptr(size), uintptr(in), uintptr(out), uintptr(flags), uintptr(unsafe.Pointer(pconsole)), 0) -+ if r0 != 0 { -+ hr = syscall.Errno(r0) -+ } -+ return -+} -+ - func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) - if r1&0xff == 0 { -@@ -2355,11 +2386,8 @@ func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uin - return - } - --func GetStartupInfo(startupInfo *StartupInfo) (err error) { -- r1, _, e1 := syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) -- if r1 == 0 { -- err = errnoErr(e1) -- } -+func getStartupInfo(startupInfo *StartupInfo) { -+ syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) - return - } - -@@ -2850,6 +2878,14 @@ func ResetEvent(event Handle) (err error) { - return - } - -+func resizePseudoConsole(pconsole Handle, size uint32) (hr error) { -+ r0, _, _ := syscall.Syscall(procResizePseudoConsole.Addr(), 2, uintptr(pconsole), uintptr(size), 0) -+ if r0 != 0 { -+ hr = syscall.Errno(r0) -+ } -+ return -+} -+ - func ResumeThread(thread Handle) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall(procResumeThread.Addr(), 1, uintptr(thread), 0, 0) - ret = uint32(r0) -@@ -3504,12 +3540,8 @@ func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *u - return - } - --func EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) { -- var _p0 *uint32 -- if len(processIds) > 0 { -- _p0 = &processIds[0] -- } -- r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(processIds)), uintptr(unsafe.Pointer(bytesReturned))) -+func enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) { -+ r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(processIds)), uintptr(nSize), uintptr(unsafe.Pointer(bytesReturned))) - if r1 == 0 { - err = errnoErr(e1) - } -@@ -3812,9 +3844,9 @@ func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (er - return - } - --func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) { -+func commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) { - r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) -- argv = (*[8192]*[8192]uint16)(unsafe.Pointer(r0)) -+ argv = (**uint16)(unsafe.Pointer(r0)) - if argv == nil { - err = errnoErr(e1) - } -@@ -4009,6 +4041,22 @@ func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPoint - return - } - -+func TimeBeginPeriod(period uint32) (err error) { -+ r1, _, e1 := syscall.Syscall(proctimeBeginPeriod.Addr(), 1, uintptr(period), 0, 0) -+ if r1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+func TimeEndPeriod(period uint32) (err error) { -+ r1, _, e1 := syscall.Syscall(proctimeEndPeriod.Addr(), 1, uintptr(period), 0, 0) -+ if r1 != 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ - func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) { - r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) - if r0 != 0 { -@@ -4067,6 +4115,30 @@ func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbo - return - } - -+func WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) { -+ r1, _, e1 := syscall.Syscall(procWSALookupServiceBeginW.Addr(), 3, uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle))) -+ if r1 == socket_error { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+func WSALookupServiceEnd(handle Handle) (err error) { -+ r1, _, e1 := syscall.Syscall(procWSALookupServiceEnd.Addr(), 1, uintptr(handle), 0, 0) -+ if r1 == socket_error { -+ err = errnoErr(e1) -+ } -+ return -+} -+ -+func WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) { -+ r1, _, e1 := syscall.Syscall6(procWSALookupServiceNextW.Addr(), 4, uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet)), 0, 0) -+ if r1 == socket_error { -+ err = errnoErr(e1) -+ } -+ return -+} -+ - func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) - if r1 == socket_error { -diff --git a/vendor/golang.org/x/term/CONTRIBUTING.md b/vendor/golang.org/x/term/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/LICENSE b/vendor/golang.org/x/term/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/PATENTS b/vendor/golang.org/x/term/PATENTS -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/README.md b/vendor/golang.org/x/term/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/codereview.cfg b/vendor/golang.org/x/term/codereview.cfg -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/term.go b/vendor/golang.org/x/term/term.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/term_plan9.go b/vendor/golang.org/x/term/term_plan9.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/term_unix.go b/vendor/golang.org/x/term/term_unix.go -old mode 100644 -new mode 100755 -index a4e31ab..62c2b3f ---- a/vendor/golang.org/x/term/term_unix.go -+++ b/vendor/golang.org/x/term/term_unix.go -@@ -60,7 +60,7 @@ func restore(fd int, state *State) error { - func getSize(fd int) (width, height int, err error) { - ws, err := unix.IoctlGetWinsize(fd, unix.TIOCGWINSZ) - if err != nil { -- return -1, -1, err -+ return 0, 0, err - } - return int(ws.Col), int(ws.Row), nil - } -diff --git a/vendor/golang.org/x/term/term_unix_bsd.go b/vendor/golang.org/x/term/term_unix_bsd.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/term_unix_other.go b/vendor/golang.org/x/term/term_unix_other.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/term_unsupported.go b/vendor/golang.org/x/term/term_unsupported.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/term_windows.go b/vendor/golang.org/x/term/term_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/term/terminal.go b/vendor/golang.org/x/term/terminal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/LICENSE b/vendor/golang.org/x/text/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/PATENTS b/vendor/golang.org/x/text/PATENTS -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule.go b/vendor/golang.org/x/text/secure/bidirule/bidirule.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go b/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go b/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/transform/transform.go b/vendor/golang.org/x/text/transform/transform.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/bidi.go b/vendor/golang.org/x/text/unicode/bidi/bidi.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/bracket.go b/vendor/golang.org/x/text/unicode/bidi/bracket.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/core.go b/vendor/golang.org/x/text/unicode/bidi/core.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/prop.go b/vendor/golang.org/x/text/unicode/bidi/prop.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go -old mode 100644 -new mode 100755 -index f248eff..ffadb7b ---- a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go -+++ b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go -@@ -1,7 +1,7 @@ - // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - --//go:build go1.16 --// +build go1.16 -+//go:build go1.16 && !go1.21 -+// +build go1.16,!go1.21 - - package bidi - -diff --git a/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go -new file mode 100755 -index 0000000..92cce58 ---- /dev/null -+++ b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go -@@ -0,0 +1,2043 @@ -+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -+ -+//go:build go1.21 -+// +build go1.21 -+ -+package bidi -+ -+// UnicodeVersion is the Unicode version from which the tables in this package are derived. -+const UnicodeVersion = "15.0.0" -+ -+// xorMasks contains masks to be xor-ed with brackets to get the reverse -+// version. -+var xorMasks = []int32{ // 8 elements -+ 0, 1, 6, 7, 3, 15, 29, 63, -+} // Size: 56 bytes -+ -+// lookup returns the trie value for the first UTF-8 encoding in s and -+// the width in bytes of this encoding. The size will be 0 if s does not -+// hold enough bytes to complete the encoding. len(s) must be greater than 0. -+func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { -+ c0 := s[0] -+ switch { -+ case c0 < 0x80: // is ASCII -+ return bidiValues[c0], 1 -+ case c0 < 0xC2: -+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII. -+ case c0 < 0xE0: // 2-byte UTF-8 -+ if len(s) < 2 { -+ return 0, 0 -+ } -+ i := bidiIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c1), 2 -+ case c0 < 0xF0: // 3-byte UTF-8 -+ if len(s) < 3 { -+ return 0, 0 -+ } -+ i := bidiIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = bidiIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c2), 3 -+ case c0 < 0xF8: // 4-byte UTF-8 -+ if len(s) < 4 { -+ return 0, 0 -+ } -+ i := bidiIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = bidiIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ o = uint32(i)<<6 + uint32(c2) -+ i = bidiIndex[o] -+ c3 := s[3] -+ if c3 < 0x80 || 0xC0 <= c3 { -+ return 0, 3 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c3), 4 -+ } -+ // Illegal rune -+ return 0, 1 -+} -+ -+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -+// s must start with a full and valid UTF-8 encoded rune. -+func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { -+ c0 := s[0] -+ if c0 < 0x80 { // is ASCII -+ return bidiValues[c0] -+ } -+ i := bidiIndex[c0] -+ if c0 < 0xE0 { // 2-byte UTF-8 -+ return t.lookupValue(uint32(i), s[1]) -+ } -+ i = bidiIndex[uint32(i)<<6+uint32(s[1])] -+ if c0 < 0xF0 { // 3-byte UTF-8 -+ return t.lookupValue(uint32(i), s[2]) -+ } -+ i = bidiIndex[uint32(i)<<6+uint32(s[2])] -+ if c0 < 0xF8 { // 4-byte UTF-8 -+ return t.lookupValue(uint32(i), s[3]) -+ } -+ return 0 -+} -+ -+// lookupString returns the trie value for the first UTF-8 encoding in s and -+// the width in bytes of this encoding. The size will be 0 if s does not -+// hold enough bytes to complete the encoding. len(s) must be greater than 0. -+func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { -+ c0 := s[0] -+ switch { -+ case c0 < 0x80: // is ASCII -+ return bidiValues[c0], 1 -+ case c0 < 0xC2: -+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII. -+ case c0 < 0xE0: // 2-byte UTF-8 -+ if len(s) < 2 { -+ return 0, 0 -+ } -+ i := bidiIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c1), 2 -+ case c0 < 0xF0: // 3-byte UTF-8 -+ if len(s) < 3 { -+ return 0, 0 -+ } -+ i := bidiIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = bidiIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c2), 3 -+ case c0 < 0xF8: // 4-byte UTF-8 -+ if len(s) < 4 { -+ return 0, 0 -+ } -+ i := bidiIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = bidiIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ o = uint32(i)<<6 + uint32(c2) -+ i = bidiIndex[o] -+ c3 := s[3] -+ if c3 < 0x80 || 0xC0 <= c3 { -+ return 0, 3 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c3), 4 -+ } -+ // Illegal rune -+ return 0, 1 -+} -+ -+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -+// s must start with a full and valid UTF-8 encoded rune. -+func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { -+ c0 := s[0] -+ if c0 < 0x80 { // is ASCII -+ return bidiValues[c0] -+ } -+ i := bidiIndex[c0] -+ if c0 < 0xE0 { // 2-byte UTF-8 -+ return t.lookupValue(uint32(i), s[1]) -+ } -+ i = bidiIndex[uint32(i)<<6+uint32(s[1])] -+ if c0 < 0xF0 { // 3-byte UTF-8 -+ return t.lookupValue(uint32(i), s[2]) -+ } -+ i = bidiIndex[uint32(i)<<6+uint32(s[2])] -+ if c0 < 0xF8 { // 4-byte UTF-8 -+ return t.lookupValue(uint32(i), s[3]) -+ } -+ return 0 -+} -+ -+// bidiTrie. Total size: 19904 bytes (19.44 KiB). Checksum: b1f201ed2debb6c8. -+type bidiTrie struct{} -+ -+func newBidiTrie(i int) *bidiTrie { -+ return &bidiTrie{} -+} -+ -+// lookupValue determines the type of block n and looks up the value for b. -+func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { -+ switch { -+ default: -+ return uint8(bidiValues[n<<6+uint32(b)]) -+ } -+} -+ -+// bidiValues: 259 blocks, 16576 entries, 16576 bytes -+// The third block is the zero block. -+var bidiValues = [16576]uint8{ -+ // Block 0x0, offset 0x0 -+ 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, -+ 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, -+ 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, -+ 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, -+ 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, -+ 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, -+ 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, -+ 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, -+ 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, -+ 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, -+ 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, -+ // Block 0x1, offset 0x40 -+ 0x40: 0x000a, -+ 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, -+ 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, -+ 0x7b: 0x005a, -+ 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, -+ // Block 0x2, offset 0x80 -+ // Block 0x3, offset 0xc0 -+ 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, -+ 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, -+ 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, -+ 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, -+ 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, -+ 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, -+ 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, -+ 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, -+ 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, -+ 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, -+ 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, -+ // Block 0x4, offset 0x100 -+ 0x117: 0x000a, -+ 0x137: 0x000a, -+ // Block 0x5, offset 0x140 -+ 0x179: 0x000a, 0x17a: 0x000a, -+ // Block 0x6, offset 0x180 -+ 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, -+ 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, -+ 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, -+ 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, -+ 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, -+ 0x19e: 0x000a, 0x19f: 0x000a, -+ 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, -+ 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, -+ 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, -+ 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, -+ 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, -+ // Block 0x7, offset 0x1c0 -+ 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, -+ 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, -+ 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, -+ 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, -+ 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, -+ 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, -+ 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, -+ 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, -+ 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, -+ 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, -+ 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, -+ // Block 0x8, offset 0x200 -+ 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, -+ 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, -+ 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, -+ 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, -+ 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, -+ 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, -+ 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, -+ 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, -+ 0x234: 0x000a, 0x235: 0x000a, -+ 0x23e: 0x000a, -+ // Block 0x9, offset 0x240 -+ 0x244: 0x000a, 0x245: 0x000a, -+ 0x247: 0x000a, -+ // Block 0xa, offset 0x280 -+ 0x2b6: 0x000a, -+ // Block 0xb, offset 0x2c0 -+ 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, -+ 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, -+ // Block 0xc, offset 0x300 -+ 0x30a: 0x000a, -+ 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, -+ 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, -+ 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, -+ 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, -+ 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, -+ 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, -+ 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, -+ 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, -+ 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, -+ // Block 0xd, offset 0x340 -+ 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, -+ 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, -+ 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, -+ 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, -+ 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, -+ 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, -+ 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, -+ 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, -+ 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, -+ 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, -+ 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, -+ // Block 0xe, offset 0x380 -+ 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, -+ 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, -+ 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, -+ 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, -+ 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, -+ 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, -+ 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, -+ 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, -+ 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, -+ 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, -+ 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, -+ // Block 0xf, offset 0x3c0 -+ 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, -+ 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, -+ 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, -+ 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, -+ 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, -+ 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, -+ 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, -+ 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, -+ 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, -+ 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, -+ 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, -+ // Block 0x10, offset 0x400 -+ 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, -+ 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, -+ 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, -+ 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, -+ 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, -+ 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, -+ 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, -+ 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, -+ 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, -+ 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, -+ 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, -+ // Block 0x11, offset 0x440 -+ 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, -+ 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, -+ 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, -+ 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, -+ 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, -+ 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, -+ 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, -+ 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, -+ 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, -+ 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, -+ 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, -+ // Block 0x12, offset 0x480 -+ 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, -+ 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, -+ 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, -+ 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, -+ 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, -+ 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, -+ 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, -+ 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, -+ 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, -+ 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, -+ 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, -+ // Block 0x13, offset 0x4c0 -+ 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, -+ 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, -+ 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, -+ 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, -+ 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, -+ 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, -+ 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, -+ 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, -+ 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, -+ 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, -+ 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, -+ // Block 0x14, offset 0x500 -+ 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, -+ 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, -+ 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, -+ 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, -+ 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, -+ 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, -+ 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, -+ 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, -+ 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, -+ 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, -+ 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, -+ // Block 0x15, offset 0x540 -+ 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, -+ 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, -+ 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, -+ 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, -+ 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, -+ 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, -+ 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, -+ 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, -+ 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, -+ 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, -+ 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, -+ // Block 0x16, offset 0x580 -+ 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, -+ 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, -+ 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, -+ 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, -+ 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, -+ 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, -+ 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, -+ 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, -+ 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, -+ 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, -+ 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, -+ // Block 0x17, offset 0x5c0 -+ 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, -+ 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, -+ 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, -+ 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, -+ 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, -+ 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, -+ 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, -+ 0x5ea: 0x000d, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001, -+ 0x5f0: 0x000d, 0x5f1: 0x000d, 0x5f2: 0x000d, 0x5f3: 0x000d, 0x5f4: 0x000d, 0x5f5: 0x000d, -+ 0x5f6: 0x000d, 0x5f7: 0x000d, 0x5f8: 0x000d, 0x5f9: 0x000d, 0x5fa: 0x000d, 0x5fb: 0x000d, -+ 0x5fc: 0x000d, 0x5fd: 0x000d, 0x5fe: 0x000d, 0x5ff: 0x000d, -+ // Block 0x18, offset 0x600 -+ 0x600: 0x000d, 0x601: 0x000d, 0x602: 0x000d, 0x603: 0x000d, 0x604: 0x000d, 0x605: 0x000d, -+ 0x606: 0x000d, 0x607: 0x000d, 0x608: 0x000d, 0x609: 0x000d, 0x60a: 0x000d, 0x60b: 0x000d, -+ 0x60c: 0x000d, 0x60d: 0x000d, 0x60e: 0x000d, 0x60f: 0x0001, 0x610: 0x0005, 0x611: 0x0005, -+ 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, -+ 0x618: 0x000c, 0x619: 0x000c, 0x61a: 0x000c, 0x61b: 0x000c, 0x61c: 0x000c, 0x61d: 0x000c, -+ 0x61e: 0x000c, 0x61f: 0x000c, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, -+ 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, -+ 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, -+ 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, -+ 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, -+ 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, -+ // Block 0x19, offset 0x640 -+ 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, -+ 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000c, 0x64b: 0x000c, -+ 0x64c: 0x000c, 0x64d: 0x000c, 0x64e: 0x000c, 0x64f: 0x000c, 0x650: 0x000c, 0x651: 0x000c, -+ 0x652: 0x000c, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, -+ 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, -+ 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, -+ 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, -+ 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, -+ 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, -+ 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, -+ 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, -+ // Block 0x1a, offset 0x680 -+ 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, -+ 0x6ba: 0x000c, -+ 0x6bc: 0x000c, -+ // Block 0x1b, offset 0x6c0 -+ 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, -+ 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, -+ 0x6cd: 0x000c, 0x6d1: 0x000c, -+ 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, -+ 0x6e2: 0x000c, 0x6e3: 0x000c, -+ // Block 0x1c, offset 0x700 -+ 0x701: 0x000c, -+ 0x73c: 0x000c, -+ // Block 0x1d, offset 0x740 -+ 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, -+ 0x74d: 0x000c, -+ 0x762: 0x000c, 0x763: 0x000c, -+ 0x772: 0x0004, 0x773: 0x0004, -+ 0x77b: 0x0004, -+ 0x77e: 0x000c, -+ // Block 0x1e, offset 0x780 -+ 0x781: 0x000c, 0x782: 0x000c, -+ 0x7bc: 0x000c, -+ // Block 0x1f, offset 0x7c0 -+ 0x7c1: 0x000c, 0x7c2: 0x000c, -+ 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, -+ 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, -+ 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, -+ // Block 0x20, offset 0x800 -+ 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, -+ 0x807: 0x000c, 0x808: 0x000c, -+ 0x80d: 0x000c, -+ 0x822: 0x000c, 0x823: 0x000c, -+ 0x831: 0x0004, -+ 0x83a: 0x000c, 0x83b: 0x000c, -+ 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, -+ // Block 0x21, offset 0x840 -+ 0x841: 0x000c, -+ 0x87c: 0x000c, 0x87f: 0x000c, -+ // Block 0x22, offset 0x880 -+ 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, -+ 0x88d: 0x000c, -+ 0x895: 0x000c, 0x896: 0x000c, -+ 0x8a2: 0x000c, 0x8a3: 0x000c, -+ // Block 0x23, offset 0x8c0 -+ 0x8c2: 0x000c, -+ // Block 0x24, offset 0x900 -+ 0x900: 0x000c, -+ 0x90d: 0x000c, -+ 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, -+ 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, -+ // Block 0x25, offset 0x940 -+ 0x940: 0x000c, 0x944: 0x000c, -+ 0x97c: 0x000c, 0x97e: 0x000c, 0x97f: 0x000c, -+ // Block 0x26, offset 0x980 -+ 0x980: 0x000c, -+ 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, -+ 0x98c: 0x000c, 0x98d: 0x000c, -+ 0x995: 0x000c, 0x996: 0x000c, -+ 0x9a2: 0x000c, 0x9a3: 0x000c, -+ 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, -+ 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, -+ // Block 0x27, offset 0x9c0 -+ 0x9cc: 0x000c, 0x9cd: 0x000c, -+ 0x9e2: 0x000c, 0x9e3: 0x000c, -+ // Block 0x28, offset 0xa00 -+ 0xa00: 0x000c, 0xa01: 0x000c, -+ 0xa3b: 0x000c, -+ 0xa3c: 0x000c, -+ // Block 0x29, offset 0xa40 -+ 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, -+ 0xa4d: 0x000c, -+ 0xa62: 0x000c, 0xa63: 0x000c, -+ // Block 0x2a, offset 0xa80 -+ 0xa81: 0x000c, -+ // Block 0x2b, offset 0xac0 -+ 0xaca: 0x000c, -+ 0xad2: 0x000c, 0xad3: 0x000c, 0xad4: 0x000c, 0xad6: 0x000c, -+ // Block 0x2c, offset 0xb00 -+ 0xb31: 0x000c, 0xb34: 0x000c, 0xb35: 0x000c, -+ 0xb36: 0x000c, 0xb37: 0x000c, 0xb38: 0x000c, 0xb39: 0x000c, 0xb3a: 0x000c, -+ 0xb3f: 0x0004, -+ // Block 0x2d, offset 0xb40 -+ 0xb47: 0x000c, 0xb48: 0x000c, 0xb49: 0x000c, 0xb4a: 0x000c, 0xb4b: 0x000c, -+ 0xb4c: 0x000c, 0xb4d: 0x000c, 0xb4e: 0x000c, -+ // Block 0x2e, offset 0xb80 -+ 0xbb1: 0x000c, 0xbb4: 0x000c, 0xbb5: 0x000c, -+ 0xbb6: 0x000c, 0xbb7: 0x000c, 0xbb8: 0x000c, 0xbb9: 0x000c, 0xbba: 0x000c, 0xbbb: 0x000c, -+ 0xbbc: 0x000c, -+ // Block 0x2f, offset 0xbc0 -+ 0xbc8: 0x000c, 0xbc9: 0x000c, 0xbca: 0x000c, 0xbcb: 0x000c, -+ 0xbcc: 0x000c, 0xbcd: 0x000c, 0xbce: 0x000c, -+ // Block 0x30, offset 0xc00 -+ 0xc18: 0x000c, 0xc19: 0x000c, -+ 0xc35: 0x000c, -+ 0xc37: 0x000c, 0xc39: 0x000c, 0xc3a: 0x003a, 0xc3b: 0x002a, -+ 0xc3c: 0x003a, 0xc3d: 0x002a, -+ // Block 0x31, offset 0xc40 -+ 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, -+ 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, -+ 0xc7c: 0x000c, 0xc7d: 0x000c, 0xc7e: 0x000c, -+ // Block 0x32, offset 0xc80 -+ 0xc80: 0x000c, 0xc81: 0x000c, 0xc82: 0x000c, 0xc83: 0x000c, 0xc84: 0x000c, -+ 0xc86: 0x000c, 0xc87: 0x000c, -+ 0xc8d: 0x000c, 0xc8e: 0x000c, 0xc8f: 0x000c, 0xc90: 0x000c, 0xc91: 0x000c, -+ 0xc92: 0x000c, 0xc93: 0x000c, 0xc94: 0x000c, 0xc95: 0x000c, 0xc96: 0x000c, 0xc97: 0x000c, -+ 0xc99: 0x000c, 0xc9a: 0x000c, 0xc9b: 0x000c, 0xc9c: 0x000c, 0xc9d: 0x000c, -+ 0xc9e: 0x000c, 0xc9f: 0x000c, 0xca0: 0x000c, 0xca1: 0x000c, 0xca2: 0x000c, 0xca3: 0x000c, -+ 0xca4: 0x000c, 0xca5: 0x000c, 0xca6: 0x000c, 0xca7: 0x000c, 0xca8: 0x000c, 0xca9: 0x000c, -+ 0xcaa: 0x000c, 0xcab: 0x000c, 0xcac: 0x000c, 0xcad: 0x000c, 0xcae: 0x000c, 0xcaf: 0x000c, -+ 0xcb0: 0x000c, 0xcb1: 0x000c, 0xcb2: 0x000c, 0xcb3: 0x000c, 0xcb4: 0x000c, 0xcb5: 0x000c, -+ 0xcb6: 0x000c, 0xcb7: 0x000c, 0xcb8: 0x000c, 0xcb9: 0x000c, 0xcba: 0x000c, 0xcbb: 0x000c, -+ 0xcbc: 0x000c, -+ // Block 0x33, offset 0xcc0 -+ 0xcc6: 0x000c, -+ // Block 0x34, offset 0xd00 -+ 0xd2d: 0x000c, 0xd2e: 0x000c, 0xd2f: 0x000c, -+ 0xd30: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, 0xd35: 0x000c, -+ 0xd36: 0x000c, 0xd37: 0x000c, 0xd39: 0x000c, 0xd3a: 0x000c, -+ 0xd3d: 0x000c, 0xd3e: 0x000c, -+ // Block 0x35, offset 0xd40 -+ 0xd58: 0x000c, 0xd59: 0x000c, -+ 0xd5e: 0x000c, 0xd5f: 0x000c, 0xd60: 0x000c, -+ 0xd71: 0x000c, 0xd72: 0x000c, 0xd73: 0x000c, 0xd74: 0x000c, -+ // Block 0x36, offset 0xd80 -+ 0xd82: 0x000c, 0xd85: 0x000c, -+ 0xd86: 0x000c, -+ 0xd8d: 0x000c, -+ 0xd9d: 0x000c, -+ // Block 0x37, offset 0xdc0 -+ 0xddd: 0x000c, -+ 0xdde: 0x000c, 0xddf: 0x000c, -+ // Block 0x38, offset 0xe00 -+ 0xe10: 0x000a, 0xe11: 0x000a, -+ 0xe12: 0x000a, 0xe13: 0x000a, 0xe14: 0x000a, 0xe15: 0x000a, 0xe16: 0x000a, 0xe17: 0x000a, -+ 0xe18: 0x000a, 0xe19: 0x000a, -+ // Block 0x39, offset 0xe40 -+ 0xe40: 0x000a, -+ // Block 0x3a, offset 0xe80 -+ 0xe80: 0x0009, -+ 0xe9b: 0x007a, 0xe9c: 0x006a, -+ // Block 0x3b, offset 0xec0 -+ 0xed2: 0x000c, 0xed3: 0x000c, 0xed4: 0x000c, -+ 0xef2: 0x000c, 0xef3: 0x000c, -+ // Block 0x3c, offset 0xf00 -+ 0xf12: 0x000c, 0xf13: 0x000c, -+ 0xf32: 0x000c, 0xf33: 0x000c, -+ // Block 0x3d, offset 0xf40 -+ 0xf74: 0x000c, 0xf75: 0x000c, -+ 0xf77: 0x000c, 0xf78: 0x000c, 0xf79: 0x000c, 0xf7a: 0x000c, 0xf7b: 0x000c, -+ 0xf7c: 0x000c, 0xf7d: 0x000c, -+ // Block 0x3e, offset 0xf80 -+ 0xf86: 0x000c, 0xf89: 0x000c, 0xf8a: 0x000c, 0xf8b: 0x000c, -+ 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000c, 0xf8f: 0x000c, 0xf90: 0x000c, 0xf91: 0x000c, -+ 0xf92: 0x000c, 0xf93: 0x000c, -+ 0xf9b: 0x0004, 0xf9d: 0x000c, -+ 0xfb0: 0x000a, 0xfb1: 0x000a, 0xfb2: 0x000a, 0xfb3: 0x000a, 0xfb4: 0x000a, 0xfb5: 0x000a, -+ 0xfb6: 0x000a, 0xfb7: 0x000a, 0xfb8: 0x000a, 0xfb9: 0x000a, -+ // Block 0x3f, offset 0xfc0 -+ 0xfc0: 0x000a, 0xfc1: 0x000a, 0xfc2: 0x000a, 0xfc3: 0x000a, 0xfc4: 0x000a, 0xfc5: 0x000a, -+ 0xfc6: 0x000a, 0xfc7: 0x000a, 0xfc8: 0x000a, 0xfc9: 0x000a, 0xfca: 0x000a, 0xfcb: 0x000c, -+ 0xfcc: 0x000c, 0xfcd: 0x000c, 0xfce: 0x000b, 0xfcf: 0x000c, -+ // Block 0x40, offset 0x1000 -+ 0x1005: 0x000c, -+ 0x1006: 0x000c, -+ 0x1029: 0x000c, -+ // Block 0x41, offset 0x1040 -+ 0x1060: 0x000c, 0x1061: 0x000c, 0x1062: 0x000c, -+ 0x1067: 0x000c, 0x1068: 0x000c, -+ 0x1072: 0x000c, -+ 0x1079: 0x000c, 0x107a: 0x000c, 0x107b: 0x000c, -+ // Block 0x42, offset 0x1080 -+ 0x1080: 0x000a, 0x1084: 0x000a, 0x1085: 0x000a, -+ // Block 0x43, offset 0x10c0 -+ 0x10de: 0x000a, 0x10df: 0x000a, 0x10e0: 0x000a, 0x10e1: 0x000a, 0x10e2: 0x000a, 0x10e3: 0x000a, -+ 0x10e4: 0x000a, 0x10e5: 0x000a, 0x10e6: 0x000a, 0x10e7: 0x000a, 0x10e8: 0x000a, 0x10e9: 0x000a, -+ 0x10ea: 0x000a, 0x10eb: 0x000a, 0x10ec: 0x000a, 0x10ed: 0x000a, 0x10ee: 0x000a, 0x10ef: 0x000a, -+ 0x10f0: 0x000a, 0x10f1: 0x000a, 0x10f2: 0x000a, 0x10f3: 0x000a, 0x10f4: 0x000a, 0x10f5: 0x000a, -+ 0x10f6: 0x000a, 0x10f7: 0x000a, 0x10f8: 0x000a, 0x10f9: 0x000a, 0x10fa: 0x000a, 0x10fb: 0x000a, -+ 0x10fc: 0x000a, 0x10fd: 0x000a, 0x10fe: 0x000a, 0x10ff: 0x000a, -+ // Block 0x44, offset 0x1100 -+ 0x1117: 0x000c, -+ 0x1118: 0x000c, 0x111b: 0x000c, -+ // Block 0x45, offset 0x1140 -+ 0x1156: 0x000c, -+ 0x1158: 0x000c, 0x1159: 0x000c, 0x115a: 0x000c, 0x115b: 0x000c, 0x115c: 0x000c, 0x115d: 0x000c, -+ 0x115e: 0x000c, 0x1160: 0x000c, 0x1162: 0x000c, -+ 0x1165: 0x000c, 0x1166: 0x000c, 0x1167: 0x000c, 0x1168: 0x000c, 0x1169: 0x000c, -+ 0x116a: 0x000c, 0x116b: 0x000c, 0x116c: 0x000c, -+ 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, -+ 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, -+ 0x117c: 0x000c, 0x117f: 0x000c, -+ // Block 0x46, offset 0x1180 -+ 0x11b0: 0x000c, 0x11b1: 0x000c, 0x11b2: 0x000c, 0x11b3: 0x000c, 0x11b4: 0x000c, 0x11b5: 0x000c, -+ 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, 0x11bb: 0x000c, -+ 0x11bc: 0x000c, 0x11bd: 0x000c, 0x11be: 0x000c, 0x11bf: 0x000c, -+ // Block 0x47, offset 0x11c0 -+ 0x11c0: 0x000c, 0x11c1: 0x000c, 0x11c2: 0x000c, 0x11c3: 0x000c, 0x11c4: 0x000c, 0x11c5: 0x000c, -+ 0x11c6: 0x000c, 0x11c7: 0x000c, 0x11c8: 0x000c, 0x11c9: 0x000c, 0x11ca: 0x000c, 0x11cb: 0x000c, -+ 0x11cc: 0x000c, 0x11cd: 0x000c, 0x11ce: 0x000c, -+ // Block 0x48, offset 0x1200 -+ 0x1200: 0x000c, 0x1201: 0x000c, 0x1202: 0x000c, 0x1203: 0x000c, -+ 0x1234: 0x000c, -+ 0x1236: 0x000c, 0x1237: 0x000c, 0x1238: 0x000c, 0x1239: 0x000c, 0x123a: 0x000c, -+ 0x123c: 0x000c, -+ // Block 0x49, offset 0x1240 -+ 0x1242: 0x000c, -+ 0x126b: 0x000c, 0x126c: 0x000c, 0x126d: 0x000c, 0x126e: 0x000c, 0x126f: 0x000c, -+ 0x1270: 0x000c, 0x1271: 0x000c, 0x1272: 0x000c, 0x1273: 0x000c, -+ // Block 0x4a, offset 0x1280 -+ 0x1280: 0x000c, 0x1281: 0x000c, -+ 0x12a2: 0x000c, 0x12a3: 0x000c, -+ 0x12a4: 0x000c, 0x12a5: 0x000c, 0x12a8: 0x000c, 0x12a9: 0x000c, -+ 0x12ab: 0x000c, 0x12ac: 0x000c, 0x12ad: 0x000c, -+ // Block 0x4b, offset 0x12c0 -+ 0x12e6: 0x000c, 0x12e8: 0x000c, 0x12e9: 0x000c, -+ 0x12ed: 0x000c, 0x12ef: 0x000c, -+ 0x12f0: 0x000c, 0x12f1: 0x000c, -+ // Block 0x4c, offset 0x1300 -+ 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, -+ 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, -+ 0x1336: 0x000c, 0x1337: 0x000c, -+ // Block 0x4d, offset 0x1340 -+ 0x1350: 0x000c, 0x1351: 0x000c, -+ 0x1352: 0x000c, 0x1354: 0x000c, 0x1355: 0x000c, 0x1356: 0x000c, 0x1357: 0x000c, -+ 0x1358: 0x000c, 0x1359: 0x000c, 0x135a: 0x000c, 0x135b: 0x000c, 0x135c: 0x000c, 0x135d: 0x000c, -+ 0x135e: 0x000c, 0x135f: 0x000c, 0x1360: 0x000c, 0x1362: 0x000c, 0x1363: 0x000c, -+ 0x1364: 0x000c, 0x1365: 0x000c, 0x1366: 0x000c, 0x1367: 0x000c, 0x1368: 0x000c, -+ 0x136d: 0x000c, -+ 0x1374: 0x000c, -+ 0x1378: 0x000c, 0x1379: 0x000c, -+ // Block 0x4e, offset 0x1380 -+ 0x13bd: 0x000a, 0x13bf: 0x000a, -+ // Block 0x4f, offset 0x13c0 -+ 0x13c0: 0x000a, 0x13c1: 0x000a, -+ 0x13cd: 0x000a, 0x13ce: 0x000a, 0x13cf: 0x000a, -+ 0x13dd: 0x000a, -+ 0x13de: 0x000a, 0x13df: 0x000a, -+ 0x13ed: 0x000a, 0x13ee: 0x000a, 0x13ef: 0x000a, -+ 0x13fd: 0x000a, 0x13fe: 0x000a, -+ // Block 0x50, offset 0x1400 -+ 0x1400: 0x0009, 0x1401: 0x0009, 0x1402: 0x0009, 0x1403: 0x0009, 0x1404: 0x0009, 0x1405: 0x0009, -+ 0x1406: 0x0009, 0x1407: 0x0009, 0x1408: 0x0009, 0x1409: 0x0009, 0x140a: 0x0009, 0x140b: 0x000b, -+ 0x140c: 0x000b, 0x140d: 0x000b, 0x140f: 0x0001, 0x1410: 0x000a, 0x1411: 0x000a, -+ 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, -+ 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, -+ 0x141e: 0x000a, 0x141f: 0x000a, 0x1420: 0x000a, 0x1421: 0x000a, 0x1422: 0x000a, 0x1423: 0x000a, -+ 0x1424: 0x000a, 0x1425: 0x000a, 0x1426: 0x000a, 0x1427: 0x000a, 0x1428: 0x0009, 0x1429: 0x0007, -+ 0x142a: 0x000e, 0x142b: 0x000e, 0x142c: 0x000e, 0x142d: 0x000e, 0x142e: 0x000e, 0x142f: 0x0006, -+ 0x1430: 0x0004, 0x1431: 0x0004, 0x1432: 0x0004, 0x1433: 0x0004, 0x1434: 0x0004, 0x1435: 0x000a, -+ 0x1436: 0x000a, 0x1437: 0x000a, 0x1438: 0x000a, 0x1439: 0x000a, 0x143a: 0x000a, 0x143b: 0x000a, -+ 0x143c: 0x000a, 0x143d: 0x000a, 0x143e: 0x000a, 0x143f: 0x000a, -+ // Block 0x51, offset 0x1440 -+ 0x1440: 0x000a, 0x1441: 0x000a, 0x1442: 0x000a, 0x1443: 0x000a, 0x1444: 0x0006, 0x1445: 0x009a, -+ 0x1446: 0x008a, 0x1447: 0x000a, 0x1448: 0x000a, 0x1449: 0x000a, 0x144a: 0x000a, 0x144b: 0x000a, -+ 0x144c: 0x000a, 0x144d: 0x000a, 0x144e: 0x000a, 0x144f: 0x000a, 0x1450: 0x000a, 0x1451: 0x000a, -+ 0x1452: 0x000a, 0x1453: 0x000a, 0x1454: 0x000a, 0x1455: 0x000a, 0x1456: 0x000a, 0x1457: 0x000a, -+ 0x1458: 0x000a, 0x1459: 0x000a, 0x145a: 0x000a, 0x145b: 0x000a, 0x145c: 0x000a, 0x145d: 0x000a, -+ 0x145e: 0x000a, 0x145f: 0x0009, 0x1460: 0x000b, 0x1461: 0x000b, 0x1462: 0x000b, 0x1463: 0x000b, -+ 0x1464: 0x000b, 0x1465: 0x000b, 0x1466: 0x000e, 0x1467: 0x000e, 0x1468: 0x000e, 0x1469: 0x000e, -+ 0x146a: 0x000b, 0x146b: 0x000b, 0x146c: 0x000b, 0x146d: 0x000b, 0x146e: 0x000b, 0x146f: 0x000b, -+ 0x1470: 0x0002, 0x1474: 0x0002, 0x1475: 0x0002, -+ 0x1476: 0x0002, 0x1477: 0x0002, 0x1478: 0x0002, 0x1479: 0x0002, 0x147a: 0x0003, 0x147b: 0x0003, -+ 0x147c: 0x000a, 0x147d: 0x009a, 0x147e: 0x008a, -+ // Block 0x52, offset 0x1480 -+ 0x1480: 0x0002, 0x1481: 0x0002, 0x1482: 0x0002, 0x1483: 0x0002, 0x1484: 0x0002, 0x1485: 0x0002, -+ 0x1486: 0x0002, 0x1487: 0x0002, 0x1488: 0x0002, 0x1489: 0x0002, 0x148a: 0x0003, 0x148b: 0x0003, -+ 0x148c: 0x000a, 0x148d: 0x009a, 0x148e: 0x008a, -+ 0x14a0: 0x0004, 0x14a1: 0x0004, 0x14a2: 0x0004, 0x14a3: 0x0004, -+ 0x14a4: 0x0004, 0x14a5: 0x0004, 0x14a6: 0x0004, 0x14a7: 0x0004, 0x14a8: 0x0004, 0x14a9: 0x0004, -+ 0x14aa: 0x0004, 0x14ab: 0x0004, 0x14ac: 0x0004, 0x14ad: 0x0004, 0x14ae: 0x0004, 0x14af: 0x0004, -+ 0x14b0: 0x0004, 0x14b1: 0x0004, 0x14b2: 0x0004, 0x14b3: 0x0004, 0x14b4: 0x0004, 0x14b5: 0x0004, -+ 0x14b6: 0x0004, 0x14b7: 0x0004, 0x14b8: 0x0004, 0x14b9: 0x0004, 0x14ba: 0x0004, 0x14bb: 0x0004, -+ 0x14bc: 0x0004, 0x14bd: 0x0004, 0x14be: 0x0004, 0x14bf: 0x0004, -+ // Block 0x53, offset 0x14c0 -+ 0x14c0: 0x0004, 0x14c1: 0x0004, 0x14c2: 0x0004, 0x14c3: 0x0004, 0x14c4: 0x0004, 0x14c5: 0x0004, -+ 0x14c6: 0x0004, 0x14c7: 0x0004, 0x14c8: 0x0004, 0x14c9: 0x0004, 0x14ca: 0x0004, 0x14cb: 0x0004, -+ 0x14cc: 0x0004, 0x14cd: 0x0004, 0x14ce: 0x0004, 0x14cf: 0x0004, 0x14d0: 0x000c, 0x14d1: 0x000c, -+ 0x14d2: 0x000c, 0x14d3: 0x000c, 0x14d4: 0x000c, 0x14d5: 0x000c, 0x14d6: 0x000c, 0x14d7: 0x000c, -+ 0x14d8: 0x000c, 0x14d9: 0x000c, 0x14da: 0x000c, 0x14db: 0x000c, 0x14dc: 0x000c, 0x14dd: 0x000c, -+ 0x14de: 0x000c, 0x14df: 0x000c, 0x14e0: 0x000c, 0x14e1: 0x000c, 0x14e2: 0x000c, 0x14e3: 0x000c, -+ 0x14e4: 0x000c, 0x14e5: 0x000c, 0x14e6: 0x000c, 0x14e7: 0x000c, 0x14e8: 0x000c, 0x14e9: 0x000c, -+ 0x14ea: 0x000c, 0x14eb: 0x000c, 0x14ec: 0x000c, 0x14ed: 0x000c, 0x14ee: 0x000c, 0x14ef: 0x000c, -+ 0x14f0: 0x000c, -+ // Block 0x54, offset 0x1500 -+ 0x1500: 0x000a, 0x1501: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, 0x1505: 0x000a, -+ 0x1506: 0x000a, 0x1508: 0x000a, 0x1509: 0x000a, -+ 0x1514: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, -+ 0x1518: 0x000a, -+ 0x151e: 0x000a, 0x151f: 0x000a, 0x1520: 0x000a, 0x1521: 0x000a, 0x1522: 0x000a, 0x1523: 0x000a, -+ 0x1525: 0x000a, 0x1527: 0x000a, 0x1529: 0x000a, -+ 0x152e: 0x0004, -+ 0x153a: 0x000a, 0x153b: 0x000a, -+ // Block 0x55, offset 0x1540 -+ 0x1540: 0x000a, 0x1541: 0x000a, 0x1542: 0x000a, 0x1543: 0x000a, 0x1544: 0x000a, -+ 0x154a: 0x000a, 0x154b: 0x000a, -+ 0x154c: 0x000a, 0x154d: 0x000a, 0x1550: 0x000a, 0x1551: 0x000a, -+ 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, -+ 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, -+ 0x155e: 0x000a, 0x155f: 0x000a, -+ // Block 0x56, offset 0x1580 -+ 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, -+ 0x1590: 0x000a, 0x1591: 0x000a, -+ 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, -+ 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, -+ 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, -+ 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, -+ 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, -+ 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, -+ 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, -+ 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, -+ // Block 0x57, offset 0x15c0 -+ 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, -+ 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, -+ 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, -+ 0x15d2: 0x000a, 0x15d3: 0x000a, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, -+ 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, -+ 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, -+ 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, -+ 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, -+ 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, -+ 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, -+ 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, -+ // Block 0x58, offset 0x1600 -+ 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, -+ 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x000a, 0x1609: 0x000a, 0x160a: 0x000a, 0x160b: 0x000a, -+ 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, -+ 0x1612: 0x0003, 0x1613: 0x0004, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, -+ 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, -+ 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, -+ 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x000a, -+ 0x162a: 0x000a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, -+ 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, -+ 0x1636: 0x000a, 0x1637: 0x000a, 0x1638: 0x000a, 0x1639: 0x000a, 0x163a: 0x000a, 0x163b: 0x000a, -+ 0x163c: 0x000a, 0x163d: 0x000a, 0x163e: 0x000a, 0x163f: 0x000a, -+ // Block 0x59, offset 0x1640 -+ 0x1640: 0x000a, 0x1641: 0x000a, 0x1642: 0x000a, 0x1643: 0x000a, 0x1644: 0x000a, 0x1645: 0x000a, -+ 0x1646: 0x000a, 0x1647: 0x000a, 0x1648: 0x003a, 0x1649: 0x002a, 0x164a: 0x003a, 0x164b: 0x002a, -+ 0x164c: 0x000a, 0x164d: 0x000a, 0x164e: 0x000a, 0x164f: 0x000a, 0x1650: 0x000a, 0x1651: 0x000a, -+ 0x1652: 0x000a, 0x1653: 0x000a, 0x1654: 0x000a, 0x1655: 0x000a, 0x1656: 0x000a, 0x1657: 0x000a, -+ 0x1658: 0x000a, 0x1659: 0x000a, 0x165a: 0x000a, 0x165b: 0x000a, 0x165c: 0x000a, 0x165d: 0x000a, -+ 0x165e: 0x000a, 0x165f: 0x000a, 0x1660: 0x000a, 0x1661: 0x000a, 0x1662: 0x000a, 0x1663: 0x000a, -+ 0x1664: 0x000a, 0x1665: 0x000a, 0x1666: 0x000a, 0x1667: 0x000a, 0x1668: 0x000a, 0x1669: 0x009a, -+ 0x166a: 0x008a, 0x166b: 0x000a, 0x166c: 0x000a, 0x166d: 0x000a, 0x166e: 0x000a, 0x166f: 0x000a, -+ 0x1670: 0x000a, 0x1671: 0x000a, 0x1672: 0x000a, 0x1673: 0x000a, 0x1674: 0x000a, 0x1675: 0x000a, -+ // Block 0x5a, offset 0x1680 -+ 0x16bb: 0x000a, -+ 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, -+ // Block 0x5b, offset 0x16c0 -+ 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, -+ 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, -+ 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, -+ 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, -+ 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, -+ 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, -+ 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a, -+ 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a, -+ 0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a, -+ 0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a, -+ 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, 0x16ff: 0x000a, -+ // Block 0x5c, offset 0x1700 -+ 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, -+ 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, -+ 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, -+ 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1715: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, -+ 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, -+ 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, -+ 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, -+ // Block 0x5d, offset 0x1740 -+ 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, -+ 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, -+ 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, -+ 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a, -+ 0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a, -+ 0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a, -+ 0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a, -+ 0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a, -+ // Block 0x5e, offset 0x1780 -+ 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, -+ 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002, -+ 0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002, -+ 0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002, -+ 0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002, -+ // Block 0x5f, offset 0x17c0 -+ 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, -+ 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, -+ 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, -+ 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, -+ // Block 0x60, offset 0x1800 -+ 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, -+ 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, -+ 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, -+ 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, -+ 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, -+ 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, -+ 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a, -+ 0x182a: 0x000a, 0x182b: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, -+ 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, -+ 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, -+ 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, -+ // Block 0x61, offset 0x1840 -+ 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, -+ 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, -+ 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, -+ 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, -+ 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, -+ 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, -+ 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x003a, 0x1869: 0x002a, -+ 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, -+ 0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a, -+ 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, -+ 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, -+ // Block 0x62, offset 0x1880 -+ 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x009a, -+ 0x1886: 0x008a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, -+ 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, -+ 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, -+ 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, -+ 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, -+ 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a, -+ 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, -+ 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, -+ 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, -+ 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, -+ // Block 0x63, offset 0x18c0 -+ 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a, -+ 0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a, -+ 0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a, -+ 0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba, -+ 0x18d8: 0x00aa, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, -+ 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, -+ 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, -+ 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, -+ 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, -+ 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, -+ 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, -+ // Block 0x64, offset 0x1900 -+ 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, -+ 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, -+ 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, -+ 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, -+ 0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 0x191c: 0x000a, 0x191d: 0x000a, -+ 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, -+ 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, -+ 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, -+ 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, -+ 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, -+ 0x193c: 0x003a, 0x193d: 0x002a, 0x193e: 0x000a, 0x193f: 0x000a, -+ // Block 0x65, offset 0x1940 -+ 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, -+ 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, -+ 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, -+ 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, -+ 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, -+ 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, -+ 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, -+ 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, -+ 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, -+ 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, -+ 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, -+ // Block 0x66, offset 0x1980 -+ 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, -+ 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, -+ 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, -+ 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, 0x1997: 0x000a, -+ 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, -+ 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, -+ 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, -+ 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, -+ 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a, -+ 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, -+ 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, -+ // Block 0x67, offset 0x19c0 -+ 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, -+ 0x19ea: 0x000a, 0x19ef: 0x000c, -+ 0x19f0: 0x000c, 0x19f1: 0x000c, -+ 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, -+ 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, -+ // Block 0x68, offset 0x1a00 -+ 0x1a3f: 0x000c, -+ // Block 0x69, offset 0x1a40 -+ 0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c, -+ 0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c, -+ 0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c, -+ 0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c, -+ 0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c, -+ 0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c, -+ // Block 0x6a, offset 0x1a80 -+ 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, -+ 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, -+ 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a, -+ 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a, -+ 0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a, -+ 0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a, -+ 0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a, -+ 0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a, -+ 0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a, -+ 0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a, -+ 0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a, -+ // Block 0x6b, offset 0x1ac0 -+ 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, -+ 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, -+ 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, -+ 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x009a, 0x1ad6: 0x008a, 0x1ad7: 0x00ba, -+ 0x1ad8: 0x00aa, 0x1ad9: 0x009a, 0x1ada: 0x008a, 0x1adb: 0x007a, 0x1adc: 0x006a, 0x1add: 0x000a, -+ // Block 0x6c, offset 0x1b00 -+ 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, -+ 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, -+ 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, -+ 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, -+ 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, -+ 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, -+ 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, -+ 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, -+ 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a, -+ 0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a, -+ 0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a, -+ // Block 0x6d, offset 0x1b40 -+ 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, -+ 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, -+ 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, -+ 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, -+ 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, -+ 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, -+ 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, -+ 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, -+ 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, -+ // Block 0x6e, offset 0x1b80 -+ 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, -+ 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, -+ 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, -+ 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, -+ 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a, -+ 0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a, -+ // Block 0x6f, offset 0x1bc0 -+ 0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, -+ 0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a, -+ 0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a, -+ 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a, -+ 0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a, -+ 0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a, -+ 0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c, -+ 0x1bf0: 0x000a, -+ 0x1bf6: 0x000a, 0x1bf7: 0x000a, -+ 0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a, -+ // Block 0x70, offset 0x1c00 -+ 0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a, -+ 0x1c20: 0x000a, -+ // Block 0x71, offset 0x1c40 -+ 0x1c7b: 0x000a, -+ // Block 0x72, offset 0x1c80 -+ 0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a, -+ 0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a, -+ 0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a, -+ 0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a, -+ 0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a, -+ 0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a, -+ // Block 0x73, offset 0x1cc0 -+ 0x1cdd: 0x000a, -+ 0x1cde: 0x000a, -+ // Block 0x74, offset 0x1d00 -+ 0x1d10: 0x000a, 0x1d11: 0x000a, -+ 0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a, -+ 0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a, -+ 0x1d1e: 0x000a, 0x1d1f: 0x000a, -+ 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, -+ // Block 0x75, offset 0x1d40 -+ 0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a, -+ 0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a, -+ 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a, -+ // Block 0x76, offset 0x1d80 -+ 0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a, -+ // Block 0x77, offset 0x1dc0 -+ 0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a, -+ // Block 0x78, offset 0x1e00 -+ 0x1e1e: 0x000a, 0x1e1f: 0x000a, -+ 0x1e3f: 0x000a, -+ // Block 0x79, offset 0x1e40 -+ 0x1e50: 0x000a, 0x1e51: 0x000a, -+ 0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a, -+ 0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a, -+ 0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a, -+ 0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a, -+ 0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a, -+ 0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a, -+ 0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a, -+ 0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a, -+ // Block 0x7a, offset 0x1e80 -+ 0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a, -+ 0x1e86: 0x000a, -+ // Block 0x7b, offset 0x1ec0 -+ 0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a, -+ // Block 0x7c, offset 0x1f00 -+ 0x1f2f: 0x000c, -+ 0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c, -+ 0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c, -+ 0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a, -+ // Block 0x7d, offset 0x1f40 -+ 0x1f5e: 0x000c, 0x1f5f: 0x000c, -+ // Block 0x7e, offset 0x1f80 -+ 0x1fb0: 0x000c, 0x1fb1: 0x000c, -+ // Block 0x7f, offset 0x1fc0 -+ 0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a, -+ 0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a, -+ 0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a, -+ 0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a, -+ 0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a, -+ 0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a, -+ // Block 0x80, offset 0x2000 -+ 0x2008: 0x000a, -+ // Block 0x81, offset 0x2040 -+ 0x2042: 0x000c, -+ 0x2046: 0x000c, 0x204b: 0x000c, -+ 0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a, -+ 0x206a: 0x000a, 0x206b: 0x000a, 0x206c: 0x000c, -+ 0x2078: 0x0004, 0x2079: 0x0004, -+ // Block 0x82, offset 0x2080 -+ 0x20b4: 0x000a, 0x20b5: 0x000a, -+ 0x20b6: 0x000a, 0x20b7: 0x000a, -+ // Block 0x83, offset 0x20c0 -+ 0x20c4: 0x000c, 0x20c5: 0x000c, -+ 0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c, -+ 0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, -+ 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c, -+ 0x20f0: 0x000c, 0x20f1: 0x000c, -+ 0x20ff: 0x000c, -+ // Block 0x84, offset 0x2100 -+ 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, -+ 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, -+ // Block 0x85, offset 0x2140 -+ 0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c, -+ 0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c, -+ // Block 0x86, offset 0x2180 -+ 0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c, -+ 0x21b3: 0x000c, -+ 0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c, -+ 0x21bc: 0x000c, 0x21bd: 0x000c, -+ // Block 0x87, offset 0x21c0 -+ 0x21e5: 0x000c, -+ // Block 0x88, offset 0x2200 -+ 0x2229: 0x000c, -+ 0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c, -+ 0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c, -+ 0x2236: 0x000c, -+ // Block 0x89, offset 0x2240 -+ 0x2243: 0x000c, -+ 0x224c: 0x000c, -+ 0x227c: 0x000c, -+ // Block 0x8a, offset 0x2280 -+ 0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c, -+ 0x22b7: 0x000c, 0x22b8: 0x000c, -+ 0x22be: 0x000c, 0x22bf: 0x000c, -+ // Block 0x8b, offset 0x22c0 -+ 0x22c1: 0x000c, -+ 0x22ec: 0x000c, 0x22ed: 0x000c, -+ 0x22f6: 0x000c, -+ // Block 0x8c, offset 0x2300 -+ 0x232a: 0x000a, 0x232b: 0x000a, -+ // Block 0x8d, offset 0x2340 -+ 0x2365: 0x000c, 0x2368: 0x000c, -+ 0x236d: 0x000c, -+ // Block 0x8e, offset 0x2380 -+ 0x239d: 0x0001, -+ 0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001, -+ 0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003, -+ 0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001, -+ 0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001, -+ 0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001, -+ 0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001, -+ // Block 0x8f, offset 0x23c0 -+ 0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001, -+ 0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001, -+ 0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d, -+ 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, -+ 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, -+ 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, -+ 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, -+ 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, -+ 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, -+ 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, -+ 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d, -+ // Block 0x90, offset 0x2400 -+ 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, -+ 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, -+ 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000d, 0x2411: 0x000d, -+ 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, -+ 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, -+ 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, -+ 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, -+ 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, -+ 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, -+ 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, -+ 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000a, 0x243f: 0x000a, -+ // Block 0x91, offset 0x2440 -+ 0x2440: 0x000a, 0x2441: 0x000a, 0x2442: 0x000a, 0x2443: 0x000a, 0x2444: 0x000a, 0x2445: 0x000a, -+ 0x2446: 0x000a, 0x2447: 0x000a, 0x2448: 0x000a, 0x2449: 0x000a, 0x244a: 0x000a, 0x244b: 0x000a, -+ 0x244c: 0x000a, 0x244d: 0x000a, 0x244e: 0x000a, 0x244f: 0x000a, 0x2450: 0x000d, 0x2451: 0x000d, -+ 0x2452: 0x000d, 0x2453: 0x000d, 0x2454: 0x000d, 0x2455: 0x000d, 0x2456: 0x000d, 0x2457: 0x000d, -+ 0x2458: 0x000d, 0x2459: 0x000d, 0x245a: 0x000d, 0x245b: 0x000d, 0x245c: 0x000d, 0x245d: 0x000d, -+ 0x245e: 0x000d, 0x245f: 0x000d, 0x2460: 0x000d, 0x2461: 0x000d, 0x2462: 0x000d, 0x2463: 0x000d, -+ 0x2464: 0x000d, 0x2465: 0x000d, 0x2466: 0x000d, 0x2467: 0x000d, 0x2468: 0x000d, 0x2469: 0x000d, -+ 0x246a: 0x000d, 0x246b: 0x000d, 0x246c: 0x000d, 0x246d: 0x000d, 0x246e: 0x000d, 0x246f: 0x000d, -+ 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, -+ 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, -+ 0x247c: 0x000d, 0x247d: 0x000d, 0x247e: 0x000d, 0x247f: 0x000d, -+ // Block 0x92, offset 0x2480 -+ 0x2480: 0x000d, 0x2481: 0x000d, 0x2482: 0x000d, 0x2483: 0x000d, 0x2484: 0x000d, 0x2485: 0x000d, -+ 0x2486: 0x000d, 0x2487: 0x000d, 0x2488: 0x000d, 0x2489: 0x000d, 0x248a: 0x000d, 0x248b: 0x000d, -+ 0x248c: 0x000d, 0x248d: 0x000d, 0x248e: 0x000d, 0x248f: 0x000a, 0x2490: 0x000b, 0x2491: 0x000b, -+ 0x2492: 0x000b, 0x2493: 0x000b, 0x2494: 0x000b, 0x2495: 0x000b, 0x2496: 0x000b, 0x2497: 0x000b, -+ 0x2498: 0x000b, 0x2499: 0x000b, 0x249a: 0x000b, 0x249b: 0x000b, 0x249c: 0x000b, 0x249d: 0x000b, -+ 0x249e: 0x000b, 0x249f: 0x000b, 0x24a0: 0x000b, 0x24a1: 0x000b, 0x24a2: 0x000b, 0x24a3: 0x000b, -+ 0x24a4: 0x000b, 0x24a5: 0x000b, 0x24a6: 0x000b, 0x24a7: 0x000b, 0x24a8: 0x000b, 0x24a9: 0x000b, -+ 0x24aa: 0x000b, 0x24ab: 0x000b, 0x24ac: 0x000b, 0x24ad: 0x000b, 0x24ae: 0x000b, 0x24af: 0x000b, -+ 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, -+ 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, -+ 0x24bc: 0x000d, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a, -+ // Block 0x93, offset 0x24c0 -+ 0x24c0: 0x000c, 0x24c1: 0x000c, 0x24c2: 0x000c, 0x24c3: 0x000c, 0x24c4: 0x000c, 0x24c5: 0x000c, -+ 0x24c6: 0x000c, 0x24c7: 0x000c, 0x24c8: 0x000c, 0x24c9: 0x000c, 0x24ca: 0x000c, 0x24cb: 0x000c, -+ 0x24cc: 0x000c, 0x24cd: 0x000c, 0x24ce: 0x000c, 0x24cf: 0x000c, 0x24d0: 0x000a, 0x24d1: 0x000a, -+ 0x24d2: 0x000a, 0x24d3: 0x000a, 0x24d4: 0x000a, 0x24d5: 0x000a, 0x24d6: 0x000a, 0x24d7: 0x000a, -+ 0x24d8: 0x000a, 0x24d9: 0x000a, -+ 0x24e0: 0x000c, 0x24e1: 0x000c, 0x24e2: 0x000c, 0x24e3: 0x000c, -+ 0x24e4: 0x000c, 0x24e5: 0x000c, 0x24e6: 0x000c, 0x24e7: 0x000c, 0x24e8: 0x000c, 0x24e9: 0x000c, -+ 0x24ea: 0x000c, 0x24eb: 0x000c, 0x24ec: 0x000c, 0x24ed: 0x000c, 0x24ee: 0x000c, 0x24ef: 0x000c, -+ 0x24f0: 0x000a, 0x24f1: 0x000a, 0x24f2: 0x000a, 0x24f3: 0x000a, 0x24f4: 0x000a, 0x24f5: 0x000a, -+ 0x24f6: 0x000a, 0x24f7: 0x000a, 0x24f8: 0x000a, 0x24f9: 0x000a, 0x24fa: 0x000a, 0x24fb: 0x000a, -+ 0x24fc: 0x000a, 0x24fd: 0x000a, 0x24fe: 0x000a, 0x24ff: 0x000a, -+ // Block 0x94, offset 0x2500 -+ 0x2500: 0x000a, 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x000a, 0x2504: 0x000a, 0x2505: 0x000a, -+ 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x000a, 0x2509: 0x000a, 0x250a: 0x000a, 0x250b: 0x000a, -+ 0x250c: 0x000a, 0x250d: 0x000a, 0x250e: 0x000a, 0x250f: 0x000a, 0x2510: 0x0006, 0x2511: 0x000a, -+ 0x2512: 0x0006, 0x2514: 0x000a, 0x2515: 0x0006, 0x2516: 0x000a, 0x2517: 0x000a, -+ 0x2518: 0x000a, 0x2519: 0x009a, 0x251a: 0x008a, 0x251b: 0x007a, 0x251c: 0x006a, 0x251d: 0x009a, -+ 0x251e: 0x008a, 0x251f: 0x0004, 0x2520: 0x000a, 0x2521: 0x000a, 0x2522: 0x0003, 0x2523: 0x0003, -+ 0x2524: 0x000a, 0x2525: 0x000a, 0x2526: 0x000a, 0x2528: 0x000a, 0x2529: 0x0004, -+ 0x252a: 0x0004, 0x252b: 0x000a, -+ 0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d, -+ 0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d, -+ 0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000d, -+ // Block 0x95, offset 0x2540 -+ 0x2540: 0x000d, 0x2541: 0x000d, 0x2542: 0x000d, 0x2543: 0x000d, 0x2544: 0x000d, 0x2545: 0x000d, -+ 0x2546: 0x000d, 0x2547: 0x000d, 0x2548: 0x000d, 0x2549: 0x000d, 0x254a: 0x000d, 0x254b: 0x000d, -+ 0x254c: 0x000d, 0x254d: 0x000d, 0x254e: 0x000d, 0x254f: 0x000d, 0x2550: 0x000d, 0x2551: 0x000d, -+ 0x2552: 0x000d, 0x2553: 0x000d, 0x2554: 0x000d, 0x2555: 0x000d, 0x2556: 0x000d, 0x2557: 0x000d, -+ 0x2558: 0x000d, 0x2559: 0x000d, 0x255a: 0x000d, 0x255b: 0x000d, 0x255c: 0x000d, 0x255d: 0x000d, -+ 0x255e: 0x000d, 0x255f: 0x000d, 0x2560: 0x000d, 0x2561: 0x000d, 0x2562: 0x000d, 0x2563: 0x000d, -+ 0x2564: 0x000d, 0x2565: 0x000d, 0x2566: 0x000d, 0x2567: 0x000d, 0x2568: 0x000d, 0x2569: 0x000d, -+ 0x256a: 0x000d, 0x256b: 0x000d, 0x256c: 0x000d, 0x256d: 0x000d, 0x256e: 0x000d, 0x256f: 0x000d, -+ 0x2570: 0x000d, 0x2571: 0x000d, 0x2572: 0x000d, 0x2573: 0x000d, 0x2574: 0x000d, 0x2575: 0x000d, -+ 0x2576: 0x000d, 0x2577: 0x000d, 0x2578: 0x000d, 0x2579: 0x000d, 0x257a: 0x000d, 0x257b: 0x000d, -+ 0x257c: 0x000d, 0x257d: 0x000d, 0x257e: 0x000d, 0x257f: 0x000b, -+ // Block 0x96, offset 0x2580 -+ 0x2581: 0x000a, 0x2582: 0x000a, 0x2583: 0x0004, 0x2584: 0x0004, 0x2585: 0x0004, -+ 0x2586: 0x000a, 0x2587: 0x000a, 0x2588: 0x003a, 0x2589: 0x002a, 0x258a: 0x000a, 0x258b: 0x0003, -+ 0x258c: 0x0006, 0x258d: 0x0003, 0x258e: 0x0006, 0x258f: 0x0006, 0x2590: 0x0002, 0x2591: 0x0002, -+ 0x2592: 0x0002, 0x2593: 0x0002, 0x2594: 0x0002, 0x2595: 0x0002, 0x2596: 0x0002, 0x2597: 0x0002, -+ 0x2598: 0x0002, 0x2599: 0x0002, 0x259a: 0x0006, 0x259b: 0x000a, 0x259c: 0x000a, 0x259d: 0x000a, -+ 0x259e: 0x000a, 0x259f: 0x000a, 0x25a0: 0x000a, -+ 0x25bb: 0x005a, -+ 0x25bc: 0x000a, 0x25bd: 0x004a, 0x25be: 0x000a, 0x25bf: 0x000a, -+ // Block 0x97, offset 0x25c0 -+ 0x25c0: 0x000a, -+ 0x25db: 0x005a, 0x25dc: 0x000a, 0x25dd: 0x004a, -+ 0x25de: 0x000a, 0x25df: 0x00fa, 0x25e0: 0x00ea, 0x25e1: 0x000a, 0x25e2: 0x003a, 0x25e3: 0x002a, -+ 0x25e4: 0x000a, 0x25e5: 0x000a, -+ // Block 0x98, offset 0x2600 -+ 0x2620: 0x0004, 0x2621: 0x0004, 0x2622: 0x000a, 0x2623: 0x000a, -+ 0x2624: 0x000a, 0x2625: 0x0004, 0x2626: 0x0004, 0x2628: 0x000a, 0x2629: 0x000a, -+ 0x262a: 0x000a, 0x262b: 0x000a, 0x262c: 0x000a, 0x262d: 0x000a, 0x262e: 0x000a, -+ 0x2630: 0x000b, 0x2631: 0x000b, 0x2632: 0x000b, 0x2633: 0x000b, 0x2634: 0x000b, 0x2635: 0x000b, -+ 0x2636: 0x000b, 0x2637: 0x000b, 0x2638: 0x000b, 0x2639: 0x000a, 0x263a: 0x000a, 0x263b: 0x000a, -+ 0x263c: 0x000a, 0x263d: 0x000a, 0x263e: 0x000b, 0x263f: 0x000b, -+ // Block 0x99, offset 0x2640 -+ 0x2641: 0x000a, -+ // Block 0x9a, offset 0x2680 -+ 0x2680: 0x000a, 0x2681: 0x000a, 0x2682: 0x000a, 0x2683: 0x000a, 0x2684: 0x000a, 0x2685: 0x000a, -+ 0x2686: 0x000a, 0x2687: 0x000a, 0x2688: 0x000a, 0x2689: 0x000a, 0x268a: 0x000a, 0x268b: 0x000a, -+ 0x268c: 0x000a, 0x2690: 0x000a, 0x2691: 0x000a, -+ 0x2692: 0x000a, 0x2693: 0x000a, 0x2694: 0x000a, 0x2695: 0x000a, 0x2696: 0x000a, 0x2697: 0x000a, -+ 0x2698: 0x000a, 0x2699: 0x000a, 0x269a: 0x000a, 0x269b: 0x000a, 0x269c: 0x000a, -+ 0x26a0: 0x000a, -+ // Block 0x9b, offset 0x26c0 -+ 0x26fd: 0x000c, -+ // Block 0x9c, offset 0x2700 -+ 0x2720: 0x000c, 0x2721: 0x0002, 0x2722: 0x0002, 0x2723: 0x0002, -+ 0x2724: 0x0002, 0x2725: 0x0002, 0x2726: 0x0002, 0x2727: 0x0002, 0x2728: 0x0002, 0x2729: 0x0002, -+ 0x272a: 0x0002, 0x272b: 0x0002, 0x272c: 0x0002, 0x272d: 0x0002, 0x272e: 0x0002, 0x272f: 0x0002, -+ 0x2730: 0x0002, 0x2731: 0x0002, 0x2732: 0x0002, 0x2733: 0x0002, 0x2734: 0x0002, 0x2735: 0x0002, -+ 0x2736: 0x0002, 0x2737: 0x0002, 0x2738: 0x0002, 0x2739: 0x0002, 0x273a: 0x0002, 0x273b: 0x0002, -+ // Block 0x9d, offset 0x2740 -+ 0x2776: 0x000c, 0x2777: 0x000c, 0x2778: 0x000c, 0x2779: 0x000c, 0x277a: 0x000c, -+ // Block 0x9e, offset 0x2780 -+ 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, -+ 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, -+ 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, -+ 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, -+ 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, -+ 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, -+ 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, -+ 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, -+ 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, -+ 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, -+ 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, -+ // Block 0x9f, offset 0x27c0 -+ 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, -+ 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, -+ 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, -+ 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, -+ 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, -+ 0x27de: 0x0001, 0x27df: 0x000a, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, -+ 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, -+ 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, -+ 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, -+ 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, -+ 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, -+ // Block 0xa0, offset 0x2800 -+ 0x2800: 0x0001, 0x2801: 0x000c, 0x2802: 0x000c, 0x2803: 0x000c, 0x2804: 0x0001, 0x2805: 0x000c, -+ 0x2806: 0x000c, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, -+ 0x280c: 0x000c, 0x280d: 0x000c, 0x280e: 0x000c, 0x280f: 0x000c, 0x2810: 0x0001, 0x2811: 0x0001, -+ 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, -+ 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, -+ 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, -+ 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, -+ 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, -+ 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, -+ 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x000c, 0x2839: 0x000c, 0x283a: 0x000c, 0x283b: 0x0001, -+ 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x000c, -+ // Block 0xa1, offset 0x2840 -+ 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, -+ 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, -+ 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, -+ 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, -+ 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, -+ 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, -+ 0x2864: 0x0001, 0x2865: 0x000c, 0x2866: 0x000c, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, -+ 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, -+ 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, -+ 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x0001, 0x287a: 0x0001, 0x287b: 0x0001, -+ 0x287c: 0x0001, 0x287d: 0x0001, 0x287e: 0x0001, 0x287f: 0x0001, -+ // Block 0xa2, offset 0x2880 -+ 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, -+ 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, -+ 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, -+ 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, -+ 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, -+ 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0001, 0x28a1: 0x0001, 0x28a2: 0x0001, 0x28a3: 0x0001, -+ 0x28a4: 0x0001, 0x28a5: 0x0001, 0x28a6: 0x0001, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, -+ 0x28aa: 0x0001, 0x28ab: 0x0001, 0x28ac: 0x0001, 0x28ad: 0x0001, 0x28ae: 0x0001, 0x28af: 0x0001, -+ 0x28b0: 0x0001, 0x28b1: 0x0001, 0x28b2: 0x0001, 0x28b3: 0x0001, 0x28b4: 0x0001, 0x28b5: 0x0001, -+ 0x28b6: 0x0001, 0x28b7: 0x0001, 0x28b8: 0x0001, 0x28b9: 0x000a, 0x28ba: 0x000a, 0x28bb: 0x000a, -+ 0x28bc: 0x000a, 0x28bd: 0x000a, 0x28be: 0x000a, 0x28bf: 0x000a, -+ // Block 0xa3, offset 0x28c0 -+ 0x28c0: 0x000d, 0x28c1: 0x000d, 0x28c2: 0x000d, 0x28c3: 0x000d, 0x28c4: 0x000d, 0x28c5: 0x000d, -+ 0x28c6: 0x000d, 0x28c7: 0x000d, 0x28c8: 0x000d, 0x28c9: 0x000d, 0x28ca: 0x000d, 0x28cb: 0x000d, -+ 0x28cc: 0x000d, 0x28cd: 0x000d, 0x28ce: 0x000d, 0x28cf: 0x000d, 0x28d0: 0x000d, 0x28d1: 0x000d, -+ 0x28d2: 0x000d, 0x28d3: 0x000d, 0x28d4: 0x000d, 0x28d5: 0x000d, 0x28d6: 0x000d, 0x28d7: 0x000d, -+ 0x28d8: 0x000d, 0x28d9: 0x000d, 0x28da: 0x000d, 0x28db: 0x000d, 0x28dc: 0x000d, 0x28dd: 0x000d, -+ 0x28de: 0x000d, 0x28df: 0x000d, 0x28e0: 0x000d, 0x28e1: 0x000d, 0x28e2: 0x000d, 0x28e3: 0x000d, -+ 0x28e4: 0x000c, 0x28e5: 0x000c, 0x28e6: 0x000c, 0x28e7: 0x000c, 0x28e8: 0x0001, 0x28e9: 0x0001, -+ 0x28ea: 0x0001, 0x28eb: 0x0001, 0x28ec: 0x0001, 0x28ed: 0x0001, 0x28ee: 0x0001, 0x28ef: 0x0001, -+ 0x28f0: 0x0005, 0x28f1: 0x0005, 0x28f2: 0x0005, 0x28f3: 0x0005, 0x28f4: 0x0005, 0x28f5: 0x0005, -+ 0x28f6: 0x0005, 0x28f7: 0x0005, 0x28f8: 0x0005, 0x28f9: 0x0005, 0x28fa: 0x0001, 0x28fb: 0x0001, -+ 0x28fc: 0x0001, 0x28fd: 0x0001, 0x28fe: 0x0001, 0x28ff: 0x0001, -+ // Block 0xa4, offset 0x2900 -+ 0x2900: 0x0001, 0x2901: 0x0001, 0x2902: 0x0001, 0x2903: 0x0001, 0x2904: 0x0001, 0x2905: 0x0001, -+ 0x2906: 0x0001, 0x2907: 0x0001, 0x2908: 0x0001, 0x2909: 0x0001, 0x290a: 0x0001, 0x290b: 0x0001, -+ 0x290c: 0x0001, 0x290d: 0x0001, 0x290e: 0x0001, 0x290f: 0x0001, 0x2910: 0x0001, 0x2911: 0x0001, -+ 0x2912: 0x0001, 0x2913: 0x0001, 0x2914: 0x0001, 0x2915: 0x0001, 0x2916: 0x0001, 0x2917: 0x0001, -+ 0x2918: 0x0001, 0x2919: 0x0001, 0x291a: 0x0001, 0x291b: 0x0001, 0x291c: 0x0001, 0x291d: 0x0001, -+ 0x291e: 0x0001, 0x291f: 0x0001, 0x2920: 0x0005, 0x2921: 0x0005, 0x2922: 0x0005, 0x2923: 0x0005, -+ 0x2924: 0x0005, 0x2925: 0x0005, 0x2926: 0x0005, 0x2927: 0x0005, 0x2928: 0x0005, 0x2929: 0x0005, -+ 0x292a: 0x0005, 0x292b: 0x0005, 0x292c: 0x0005, 0x292d: 0x0005, 0x292e: 0x0005, 0x292f: 0x0005, -+ 0x2930: 0x0005, 0x2931: 0x0005, 0x2932: 0x0005, 0x2933: 0x0005, 0x2934: 0x0005, 0x2935: 0x0005, -+ 0x2936: 0x0005, 0x2937: 0x0005, 0x2938: 0x0005, 0x2939: 0x0005, 0x293a: 0x0005, 0x293b: 0x0005, -+ 0x293c: 0x0005, 0x293d: 0x0005, 0x293e: 0x0005, 0x293f: 0x0001, -+ // Block 0xa5, offset 0x2940 -+ 0x2940: 0x0001, 0x2941: 0x0001, 0x2942: 0x0001, 0x2943: 0x0001, 0x2944: 0x0001, 0x2945: 0x0001, -+ 0x2946: 0x0001, 0x2947: 0x0001, 0x2948: 0x0001, 0x2949: 0x0001, 0x294a: 0x0001, 0x294b: 0x0001, -+ 0x294c: 0x0001, 0x294d: 0x0001, 0x294e: 0x0001, 0x294f: 0x0001, 0x2950: 0x0001, 0x2951: 0x0001, -+ 0x2952: 0x0001, 0x2953: 0x0001, 0x2954: 0x0001, 0x2955: 0x0001, 0x2956: 0x0001, 0x2957: 0x0001, -+ 0x2958: 0x0001, 0x2959: 0x0001, 0x295a: 0x0001, 0x295b: 0x0001, 0x295c: 0x0001, 0x295d: 0x0001, -+ 0x295e: 0x0001, 0x295f: 0x0001, 0x2960: 0x0001, 0x2961: 0x0001, 0x2962: 0x0001, 0x2963: 0x0001, -+ 0x2964: 0x0001, 0x2965: 0x0001, 0x2966: 0x0001, 0x2967: 0x0001, 0x2968: 0x0001, 0x2969: 0x0001, -+ 0x296a: 0x0001, 0x296b: 0x000c, 0x296c: 0x000c, 0x296d: 0x0001, 0x296e: 0x0001, 0x296f: 0x0001, -+ 0x2970: 0x0001, 0x2971: 0x0001, 0x2972: 0x0001, 0x2973: 0x0001, 0x2974: 0x0001, 0x2975: 0x0001, -+ 0x2976: 0x0001, 0x2977: 0x0001, 0x2978: 0x0001, 0x2979: 0x0001, 0x297a: 0x0001, 0x297b: 0x0001, -+ 0x297c: 0x0001, 0x297d: 0x0001, 0x297e: 0x0001, 0x297f: 0x0001, -+ // Block 0xa6, offset 0x2980 -+ 0x2980: 0x0001, 0x2981: 0x0001, 0x2982: 0x0001, 0x2983: 0x0001, 0x2984: 0x0001, 0x2985: 0x0001, -+ 0x2986: 0x0001, 0x2987: 0x0001, 0x2988: 0x0001, 0x2989: 0x0001, 0x298a: 0x0001, 0x298b: 0x0001, -+ 0x298c: 0x0001, 0x298d: 0x0001, 0x298e: 0x0001, 0x298f: 0x0001, 0x2990: 0x0001, 0x2991: 0x0001, -+ 0x2992: 0x0001, 0x2993: 0x0001, 0x2994: 0x0001, 0x2995: 0x0001, 0x2996: 0x0001, 0x2997: 0x0001, -+ 0x2998: 0x0001, 0x2999: 0x0001, 0x299a: 0x0001, 0x299b: 0x0001, 0x299c: 0x0001, 0x299d: 0x0001, -+ 0x299e: 0x0001, 0x299f: 0x0001, 0x29a0: 0x0001, 0x29a1: 0x0001, 0x29a2: 0x0001, 0x29a3: 0x0001, -+ 0x29a4: 0x0001, 0x29a5: 0x0001, 0x29a6: 0x0001, 0x29a7: 0x0001, 0x29a8: 0x0001, 0x29a9: 0x0001, -+ 0x29aa: 0x0001, 0x29ab: 0x0001, 0x29ac: 0x0001, 0x29ad: 0x0001, 0x29ae: 0x0001, 0x29af: 0x0001, -+ 0x29b0: 0x0001, 0x29b1: 0x0001, 0x29b2: 0x0001, 0x29b3: 0x0001, 0x29b4: 0x0001, 0x29b5: 0x0001, -+ 0x29b6: 0x0001, 0x29b7: 0x0001, 0x29b8: 0x0001, 0x29b9: 0x0001, 0x29ba: 0x0001, 0x29bb: 0x0001, -+ 0x29bc: 0x0001, 0x29bd: 0x000c, 0x29be: 0x000c, 0x29bf: 0x000c, -+ // Block 0xa7, offset 0x29c0 -+ 0x29c0: 0x0001, 0x29c1: 0x0001, 0x29c2: 0x0001, 0x29c3: 0x0001, 0x29c4: 0x0001, 0x29c5: 0x0001, -+ 0x29c6: 0x0001, 0x29c7: 0x0001, 0x29c8: 0x0001, 0x29c9: 0x0001, 0x29ca: 0x0001, 0x29cb: 0x0001, -+ 0x29cc: 0x0001, 0x29cd: 0x0001, 0x29ce: 0x0001, 0x29cf: 0x0001, 0x29d0: 0x0001, 0x29d1: 0x0001, -+ 0x29d2: 0x0001, 0x29d3: 0x0001, 0x29d4: 0x0001, 0x29d5: 0x0001, 0x29d6: 0x0001, 0x29d7: 0x0001, -+ 0x29d8: 0x0001, 0x29d9: 0x0001, 0x29da: 0x0001, 0x29db: 0x0001, 0x29dc: 0x0001, 0x29dd: 0x0001, -+ 0x29de: 0x0001, 0x29df: 0x0001, 0x29e0: 0x0001, 0x29e1: 0x0001, 0x29e2: 0x0001, 0x29e3: 0x0001, -+ 0x29e4: 0x0001, 0x29e5: 0x0001, 0x29e6: 0x0001, 0x29e7: 0x0001, 0x29e8: 0x0001, 0x29e9: 0x0001, -+ 0x29ea: 0x0001, 0x29eb: 0x0001, 0x29ec: 0x0001, 0x29ed: 0x0001, 0x29ee: 0x0001, 0x29ef: 0x0001, -+ 0x29f0: 0x000d, 0x29f1: 0x000d, 0x29f2: 0x000d, 0x29f3: 0x000d, 0x29f4: 0x000d, 0x29f5: 0x000d, -+ 0x29f6: 0x000d, 0x29f7: 0x000d, 0x29f8: 0x000d, 0x29f9: 0x000d, 0x29fa: 0x000d, 0x29fb: 0x000d, -+ 0x29fc: 0x000d, 0x29fd: 0x000d, 0x29fe: 0x000d, 0x29ff: 0x000d, -+ // Block 0xa8, offset 0x2a00 -+ 0x2a00: 0x000d, 0x2a01: 0x000d, 0x2a02: 0x000d, 0x2a03: 0x000d, 0x2a04: 0x000d, 0x2a05: 0x000d, -+ 0x2a06: 0x000c, 0x2a07: 0x000c, 0x2a08: 0x000c, 0x2a09: 0x000c, 0x2a0a: 0x000c, 0x2a0b: 0x000c, -+ 0x2a0c: 0x000c, 0x2a0d: 0x000c, 0x2a0e: 0x000c, 0x2a0f: 0x000c, 0x2a10: 0x000c, 0x2a11: 0x000d, -+ 0x2a12: 0x000d, 0x2a13: 0x000d, 0x2a14: 0x000d, 0x2a15: 0x000d, 0x2a16: 0x000d, 0x2a17: 0x000d, -+ 0x2a18: 0x000d, 0x2a19: 0x000d, 0x2a1a: 0x0001, 0x2a1b: 0x0001, 0x2a1c: 0x0001, 0x2a1d: 0x0001, -+ 0x2a1e: 0x0001, 0x2a1f: 0x0001, 0x2a20: 0x0001, 0x2a21: 0x0001, 0x2a22: 0x0001, 0x2a23: 0x0001, -+ 0x2a24: 0x0001, 0x2a25: 0x0001, 0x2a26: 0x0001, 0x2a27: 0x0001, 0x2a28: 0x0001, 0x2a29: 0x0001, -+ 0x2a2a: 0x0001, 0x2a2b: 0x0001, 0x2a2c: 0x0001, 0x2a2d: 0x0001, 0x2a2e: 0x0001, 0x2a2f: 0x0001, -+ 0x2a30: 0x0001, 0x2a31: 0x0001, 0x2a32: 0x0001, 0x2a33: 0x0001, 0x2a34: 0x0001, 0x2a35: 0x0001, -+ 0x2a36: 0x0001, 0x2a37: 0x0001, 0x2a38: 0x0001, 0x2a39: 0x0001, 0x2a3a: 0x0001, 0x2a3b: 0x0001, -+ 0x2a3c: 0x0001, 0x2a3d: 0x0001, 0x2a3e: 0x0001, 0x2a3f: 0x0001, -+ // Block 0xa9, offset 0x2a40 -+ 0x2a40: 0x0001, 0x2a41: 0x0001, 0x2a42: 0x000c, 0x2a43: 0x000c, 0x2a44: 0x000c, 0x2a45: 0x000c, -+ 0x2a46: 0x0001, 0x2a47: 0x0001, 0x2a48: 0x0001, 0x2a49: 0x0001, 0x2a4a: 0x0001, 0x2a4b: 0x0001, -+ 0x2a4c: 0x0001, 0x2a4d: 0x0001, 0x2a4e: 0x0001, 0x2a4f: 0x0001, 0x2a50: 0x0001, 0x2a51: 0x0001, -+ 0x2a52: 0x0001, 0x2a53: 0x0001, 0x2a54: 0x0001, 0x2a55: 0x0001, 0x2a56: 0x0001, 0x2a57: 0x0001, -+ 0x2a58: 0x0001, 0x2a59: 0x0001, 0x2a5a: 0x0001, 0x2a5b: 0x0001, 0x2a5c: 0x0001, 0x2a5d: 0x0001, -+ 0x2a5e: 0x0001, 0x2a5f: 0x0001, 0x2a60: 0x0001, 0x2a61: 0x0001, 0x2a62: 0x0001, 0x2a63: 0x0001, -+ 0x2a64: 0x0001, 0x2a65: 0x0001, 0x2a66: 0x0001, 0x2a67: 0x0001, 0x2a68: 0x0001, 0x2a69: 0x0001, -+ 0x2a6a: 0x0001, 0x2a6b: 0x0001, 0x2a6c: 0x0001, 0x2a6d: 0x0001, 0x2a6e: 0x0001, 0x2a6f: 0x0001, -+ 0x2a70: 0x0001, 0x2a71: 0x0001, 0x2a72: 0x0001, 0x2a73: 0x0001, 0x2a74: 0x0001, 0x2a75: 0x0001, -+ 0x2a76: 0x0001, 0x2a77: 0x0001, 0x2a78: 0x0001, 0x2a79: 0x0001, 0x2a7a: 0x0001, 0x2a7b: 0x0001, -+ 0x2a7c: 0x0001, 0x2a7d: 0x0001, 0x2a7e: 0x0001, 0x2a7f: 0x0001, -+ // Block 0xaa, offset 0x2a80 -+ 0x2a81: 0x000c, -+ 0x2ab8: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, 0x2abb: 0x000c, -+ 0x2abc: 0x000c, 0x2abd: 0x000c, 0x2abe: 0x000c, 0x2abf: 0x000c, -+ // Block 0xab, offset 0x2ac0 -+ 0x2ac0: 0x000c, 0x2ac1: 0x000c, 0x2ac2: 0x000c, 0x2ac3: 0x000c, 0x2ac4: 0x000c, 0x2ac5: 0x000c, -+ 0x2ac6: 0x000c, -+ 0x2ad2: 0x000a, 0x2ad3: 0x000a, 0x2ad4: 0x000a, 0x2ad5: 0x000a, 0x2ad6: 0x000a, 0x2ad7: 0x000a, -+ 0x2ad8: 0x000a, 0x2ad9: 0x000a, 0x2ada: 0x000a, 0x2adb: 0x000a, 0x2adc: 0x000a, 0x2add: 0x000a, -+ 0x2ade: 0x000a, 0x2adf: 0x000a, 0x2ae0: 0x000a, 0x2ae1: 0x000a, 0x2ae2: 0x000a, 0x2ae3: 0x000a, -+ 0x2ae4: 0x000a, 0x2ae5: 0x000a, -+ 0x2af0: 0x000c, 0x2af3: 0x000c, 0x2af4: 0x000c, -+ 0x2aff: 0x000c, -+ // Block 0xac, offset 0x2b00 -+ 0x2b00: 0x000c, 0x2b01: 0x000c, -+ 0x2b33: 0x000c, 0x2b34: 0x000c, 0x2b35: 0x000c, -+ 0x2b36: 0x000c, 0x2b39: 0x000c, 0x2b3a: 0x000c, -+ // Block 0xad, offset 0x2b40 -+ 0x2b40: 0x000c, 0x2b41: 0x000c, 0x2b42: 0x000c, -+ 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, -+ 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6d: 0x000c, 0x2b6e: 0x000c, 0x2b6f: 0x000c, -+ 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, -+ // Block 0xae, offset 0x2b80 -+ 0x2bb3: 0x000c, -+ // Block 0xaf, offset 0x2bc0 -+ 0x2bc0: 0x000c, 0x2bc1: 0x000c, -+ 0x2bf6: 0x000c, 0x2bf7: 0x000c, 0x2bf8: 0x000c, 0x2bf9: 0x000c, 0x2bfa: 0x000c, 0x2bfb: 0x000c, -+ 0x2bfc: 0x000c, 0x2bfd: 0x000c, 0x2bfe: 0x000c, -+ // Block 0xb0, offset 0x2c00 -+ 0x2c09: 0x000c, 0x2c0a: 0x000c, 0x2c0b: 0x000c, -+ 0x2c0c: 0x000c, 0x2c0f: 0x000c, -+ // Block 0xb1, offset 0x2c40 -+ 0x2c6f: 0x000c, -+ 0x2c70: 0x000c, 0x2c71: 0x000c, 0x2c74: 0x000c, -+ 0x2c76: 0x000c, 0x2c77: 0x000c, -+ 0x2c7e: 0x000c, -+ // Block 0xb2, offset 0x2c80 -+ 0x2c9f: 0x000c, 0x2ca3: 0x000c, -+ 0x2ca4: 0x000c, 0x2ca5: 0x000c, 0x2ca6: 0x000c, 0x2ca7: 0x000c, 0x2ca8: 0x000c, 0x2ca9: 0x000c, -+ 0x2caa: 0x000c, -+ // Block 0xb3, offset 0x2cc0 -+ 0x2cc0: 0x000c, -+ 0x2ce6: 0x000c, 0x2ce7: 0x000c, 0x2ce8: 0x000c, 0x2ce9: 0x000c, -+ 0x2cea: 0x000c, 0x2ceb: 0x000c, 0x2cec: 0x000c, -+ 0x2cf0: 0x000c, 0x2cf1: 0x000c, 0x2cf2: 0x000c, 0x2cf3: 0x000c, 0x2cf4: 0x000c, -+ // Block 0xb4, offset 0x2d00 -+ 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, 0x2d3b: 0x000c, -+ 0x2d3c: 0x000c, 0x2d3d: 0x000c, 0x2d3e: 0x000c, 0x2d3f: 0x000c, -+ // Block 0xb5, offset 0x2d40 -+ 0x2d42: 0x000c, 0x2d43: 0x000c, 0x2d44: 0x000c, -+ 0x2d46: 0x000c, -+ 0x2d5e: 0x000c, -+ // Block 0xb6, offset 0x2d80 -+ 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, -+ 0x2db6: 0x000c, 0x2db7: 0x000c, 0x2db8: 0x000c, 0x2dba: 0x000c, -+ 0x2dbf: 0x000c, -+ // Block 0xb7, offset 0x2dc0 -+ 0x2dc0: 0x000c, 0x2dc2: 0x000c, 0x2dc3: 0x000c, -+ // Block 0xb8, offset 0x2e00 -+ 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, -+ 0x2e3c: 0x000c, 0x2e3d: 0x000c, 0x2e3f: 0x000c, -+ // Block 0xb9, offset 0x2e40 -+ 0x2e40: 0x000c, -+ 0x2e5c: 0x000c, 0x2e5d: 0x000c, -+ // Block 0xba, offset 0x2e80 -+ 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, -+ 0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2eb9: 0x000c, 0x2eba: 0x000c, -+ 0x2ebd: 0x000c, 0x2ebf: 0x000c, -+ // Block 0xbb, offset 0x2ec0 -+ 0x2ec0: 0x000c, -+ 0x2ee0: 0x000a, 0x2ee1: 0x000a, 0x2ee2: 0x000a, 0x2ee3: 0x000a, -+ 0x2ee4: 0x000a, 0x2ee5: 0x000a, 0x2ee6: 0x000a, 0x2ee7: 0x000a, 0x2ee8: 0x000a, 0x2ee9: 0x000a, -+ 0x2eea: 0x000a, 0x2eeb: 0x000a, 0x2eec: 0x000a, -+ // Block 0xbc, offset 0x2f00 -+ 0x2f2b: 0x000c, 0x2f2d: 0x000c, -+ 0x2f30: 0x000c, 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, -+ 0x2f37: 0x000c, -+ // Block 0xbd, offset 0x2f40 -+ 0x2f5d: 0x000c, -+ 0x2f5e: 0x000c, 0x2f5f: 0x000c, 0x2f62: 0x000c, 0x2f63: 0x000c, -+ 0x2f64: 0x000c, 0x2f65: 0x000c, 0x2f67: 0x000c, 0x2f68: 0x000c, 0x2f69: 0x000c, -+ 0x2f6a: 0x000c, 0x2f6b: 0x000c, -+ // Block 0xbe, offset 0x2f80 -+ 0x2faf: 0x000c, -+ 0x2fb0: 0x000c, 0x2fb1: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb4: 0x000c, 0x2fb5: 0x000c, -+ 0x2fb6: 0x000c, 0x2fb7: 0x000c, 0x2fb9: 0x000c, 0x2fba: 0x000c, -+ // Block 0xbf, offset 0x2fc0 -+ 0x2ffb: 0x000c, -+ 0x2ffc: 0x000c, 0x2ffe: 0x000c, -+ // Block 0xc0, offset 0x3000 -+ 0x3003: 0x000c, -+ // Block 0xc1, offset 0x3040 -+ 0x3054: 0x000c, 0x3055: 0x000c, 0x3056: 0x000c, 0x3057: 0x000c, -+ 0x305a: 0x000c, 0x305b: 0x000c, -+ 0x3060: 0x000c, -+ // Block 0xc2, offset 0x3080 -+ 0x3081: 0x000c, 0x3082: 0x000c, 0x3083: 0x000c, 0x3084: 0x000c, 0x3085: 0x000c, -+ 0x3086: 0x000c, 0x3089: 0x000c, 0x308a: 0x000c, -+ 0x30b3: 0x000c, 0x30b4: 0x000c, 0x30b5: 0x000c, -+ 0x30b6: 0x000c, 0x30b7: 0x000c, 0x30b8: 0x000c, 0x30bb: 0x000c, -+ 0x30bc: 0x000c, 0x30bd: 0x000c, 0x30be: 0x000c, -+ // Block 0xc3, offset 0x30c0 -+ 0x30c7: 0x000c, -+ 0x30d1: 0x000c, -+ 0x30d2: 0x000c, 0x30d3: 0x000c, 0x30d4: 0x000c, 0x30d5: 0x000c, 0x30d6: 0x000c, -+ 0x30d9: 0x000c, 0x30da: 0x000c, 0x30db: 0x000c, -+ // Block 0xc4, offset 0x3100 -+ 0x310a: 0x000c, 0x310b: 0x000c, -+ 0x310c: 0x000c, 0x310d: 0x000c, 0x310e: 0x000c, 0x310f: 0x000c, 0x3110: 0x000c, 0x3111: 0x000c, -+ 0x3112: 0x000c, 0x3113: 0x000c, 0x3114: 0x000c, 0x3115: 0x000c, 0x3116: 0x000c, -+ 0x3118: 0x000c, 0x3119: 0x000c, -+ // Block 0xc5, offset 0x3140 -+ 0x3170: 0x000c, 0x3171: 0x000c, 0x3172: 0x000c, 0x3173: 0x000c, 0x3174: 0x000c, 0x3175: 0x000c, -+ 0x3176: 0x000c, 0x3178: 0x000c, 0x3179: 0x000c, 0x317a: 0x000c, 0x317b: 0x000c, -+ 0x317c: 0x000c, 0x317d: 0x000c, -+ // Block 0xc6, offset 0x3180 -+ 0x3192: 0x000c, 0x3193: 0x000c, 0x3194: 0x000c, 0x3195: 0x000c, 0x3196: 0x000c, 0x3197: 0x000c, -+ 0x3198: 0x000c, 0x3199: 0x000c, 0x319a: 0x000c, 0x319b: 0x000c, 0x319c: 0x000c, 0x319d: 0x000c, -+ 0x319e: 0x000c, 0x319f: 0x000c, 0x31a0: 0x000c, 0x31a1: 0x000c, 0x31a2: 0x000c, 0x31a3: 0x000c, -+ 0x31a4: 0x000c, 0x31a5: 0x000c, 0x31a6: 0x000c, 0x31a7: 0x000c, -+ 0x31aa: 0x000c, 0x31ab: 0x000c, 0x31ac: 0x000c, 0x31ad: 0x000c, 0x31ae: 0x000c, 0x31af: 0x000c, -+ 0x31b0: 0x000c, 0x31b2: 0x000c, 0x31b3: 0x000c, 0x31b5: 0x000c, -+ 0x31b6: 0x000c, -+ // Block 0xc7, offset 0x31c0 -+ 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c, -+ 0x31f6: 0x000c, 0x31fa: 0x000c, -+ 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31ff: 0x000c, -+ // Block 0xc8, offset 0x3200 -+ 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c, -+ 0x3207: 0x000c, -+ // Block 0xc9, offset 0x3240 -+ 0x3250: 0x000c, 0x3251: 0x000c, -+ 0x3255: 0x000c, 0x3257: 0x000c, -+ // Block 0xca, offset 0x3280 -+ 0x32b3: 0x000c, 0x32b4: 0x000c, -+ // Block 0xcb, offset 0x32c0 -+ 0x32c0: 0x000c, 0x32c1: 0x000c, -+ 0x32f6: 0x000c, 0x32f7: 0x000c, 0x32f8: 0x000c, 0x32f9: 0x000c, 0x32fa: 0x000c, -+ // Block 0xcc, offset 0x3300 -+ 0x3300: 0x000c, 0x3302: 0x000c, -+ // Block 0xcd, offset 0x3340 -+ 0x3355: 0x000a, 0x3356: 0x000a, 0x3357: 0x000a, -+ 0x3358: 0x000a, 0x3359: 0x000a, 0x335a: 0x000a, 0x335b: 0x000a, 0x335c: 0x000a, 0x335d: 0x0004, -+ 0x335e: 0x0004, 0x335f: 0x0004, 0x3360: 0x0004, 0x3361: 0x000a, 0x3362: 0x000a, 0x3363: 0x000a, -+ 0x3364: 0x000a, 0x3365: 0x000a, 0x3366: 0x000a, 0x3367: 0x000a, 0x3368: 0x000a, 0x3369: 0x000a, -+ 0x336a: 0x000a, 0x336b: 0x000a, 0x336c: 0x000a, 0x336d: 0x000a, 0x336e: 0x000a, 0x336f: 0x000a, -+ 0x3370: 0x000a, 0x3371: 0x000a, -+ // Block 0xce, offset 0x3380 -+ 0x3380: 0x000c, -+ 0x3387: 0x000c, 0x3388: 0x000c, 0x3389: 0x000c, 0x338a: 0x000c, 0x338b: 0x000c, -+ 0x338c: 0x000c, 0x338d: 0x000c, 0x338e: 0x000c, 0x338f: 0x000c, 0x3390: 0x000c, 0x3391: 0x000c, -+ 0x3392: 0x000c, 0x3393: 0x000c, 0x3394: 0x000c, 0x3395: 0x000c, -+ // Block 0xcf, offset 0x33c0 -+ 0x33f0: 0x000c, 0x33f1: 0x000c, 0x33f2: 0x000c, 0x33f3: 0x000c, 0x33f4: 0x000c, -+ // Block 0xd0, offset 0x3400 -+ 0x3430: 0x000c, 0x3431: 0x000c, 0x3432: 0x000c, 0x3433: 0x000c, 0x3434: 0x000c, 0x3435: 0x000c, -+ 0x3436: 0x000c, -+ // Block 0xd1, offset 0x3440 -+ 0x344f: 0x000c, -+ // Block 0xd2, offset 0x3480 -+ 0x348f: 0x000c, 0x3490: 0x000c, 0x3491: 0x000c, -+ 0x3492: 0x000c, -+ // Block 0xd3, offset 0x34c0 -+ 0x34e2: 0x000a, -+ 0x34e4: 0x000c, -+ // Block 0xd4, offset 0x3500 -+ 0x351d: 0x000c, -+ 0x351e: 0x000c, 0x3520: 0x000b, 0x3521: 0x000b, 0x3522: 0x000b, 0x3523: 0x000b, -+ // Block 0xd5, offset 0x3540 -+ 0x3540: 0x000c, 0x3541: 0x000c, 0x3542: 0x000c, 0x3543: 0x000c, 0x3544: 0x000c, 0x3545: 0x000c, -+ 0x3546: 0x000c, 0x3547: 0x000c, 0x3548: 0x000c, 0x3549: 0x000c, 0x354a: 0x000c, 0x354b: 0x000c, -+ 0x354c: 0x000c, 0x354d: 0x000c, 0x354e: 0x000c, 0x354f: 0x000c, 0x3550: 0x000c, 0x3551: 0x000c, -+ 0x3552: 0x000c, 0x3553: 0x000c, 0x3554: 0x000c, 0x3555: 0x000c, 0x3556: 0x000c, 0x3557: 0x000c, -+ 0x3558: 0x000c, 0x3559: 0x000c, 0x355a: 0x000c, 0x355b: 0x000c, 0x355c: 0x000c, 0x355d: 0x000c, -+ 0x355e: 0x000c, 0x355f: 0x000c, 0x3560: 0x000c, 0x3561: 0x000c, 0x3562: 0x000c, 0x3563: 0x000c, -+ 0x3564: 0x000c, 0x3565: 0x000c, 0x3566: 0x000c, 0x3567: 0x000c, 0x3568: 0x000c, 0x3569: 0x000c, -+ 0x356a: 0x000c, 0x356b: 0x000c, 0x356c: 0x000c, 0x356d: 0x000c, -+ 0x3570: 0x000c, 0x3571: 0x000c, 0x3572: 0x000c, 0x3573: 0x000c, 0x3574: 0x000c, 0x3575: 0x000c, -+ 0x3576: 0x000c, 0x3577: 0x000c, 0x3578: 0x000c, 0x3579: 0x000c, 0x357a: 0x000c, 0x357b: 0x000c, -+ 0x357c: 0x000c, 0x357d: 0x000c, 0x357e: 0x000c, 0x357f: 0x000c, -+ // Block 0xd6, offset 0x3580 -+ 0x3580: 0x000c, 0x3581: 0x000c, 0x3582: 0x000c, 0x3583: 0x000c, 0x3584: 0x000c, 0x3585: 0x000c, -+ 0x3586: 0x000c, -+ // Block 0xd7, offset 0x35c0 -+ 0x35e7: 0x000c, 0x35e8: 0x000c, 0x35e9: 0x000c, -+ 0x35f3: 0x000b, 0x35f4: 0x000b, 0x35f5: 0x000b, -+ 0x35f6: 0x000b, 0x35f7: 0x000b, 0x35f8: 0x000b, 0x35f9: 0x000b, 0x35fa: 0x000b, 0x35fb: 0x000c, -+ 0x35fc: 0x000c, 0x35fd: 0x000c, 0x35fe: 0x000c, 0x35ff: 0x000c, -+ // Block 0xd8, offset 0x3600 -+ 0x3600: 0x000c, 0x3601: 0x000c, 0x3602: 0x000c, 0x3605: 0x000c, -+ 0x3606: 0x000c, 0x3607: 0x000c, 0x3608: 0x000c, 0x3609: 0x000c, 0x360a: 0x000c, 0x360b: 0x000c, -+ 0x362a: 0x000c, 0x362b: 0x000c, 0x362c: 0x000c, 0x362d: 0x000c, -+ // Block 0xd9, offset 0x3640 -+ 0x3669: 0x000a, -+ 0x366a: 0x000a, -+ // Block 0xda, offset 0x3680 -+ 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000c, 0x3683: 0x000c, 0x3684: 0x000c, 0x3685: 0x000a, -+ // Block 0xdb, offset 0x36c0 -+ 0x36c0: 0x000a, 0x36c1: 0x000a, 0x36c2: 0x000a, 0x36c3: 0x000a, 0x36c4: 0x000a, 0x36c5: 0x000a, -+ 0x36c6: 0x000a, 0x36c7: 0x000a, 0x36c8: 0x000a, 0x36c9: 0x000a, 0x36ca: 0x000a, 0x36cb: 0x000a, -+ 0x36cc: 0x000a, 0x36cd: 0x000a, 0x36ce: 0x000a, 0x36cf: 0x000a, 0x36d0: 0x000a, 0x36d1: 0x000a, -+ 0x36d2: 0x000a, 0x36d3: 0x000a, 0x36d4: 0x000a, 0x36d5: 0x000a, 0x36d6: 0x000a, -+ // Block 0xdc, offset 0x3700 -+ 0x371b: 0x000a, -+ // Block 0xdd, offset 0x3740 -+ 0x3755: 0x000a, -+ // Block 0xde, offset 0x3780 -+ 0x378f: 0x000a, -+ // Block 0xdf, offset 0x37c0 -+ 0x37c9: 0x000a, -+ // Block 0xe0, offset 0x3800 -+ 0x3803: 0x000a, -+ 0x380e: 0x0002, 0x380f: 0x0002, 0x3810: 0x0002, 0x3811: 0x0002, -+ 0x3812: 0x0002, 0x3813: 0x0002, 0x3814: 0x0002, 0x3815: 0x0002, 0x3816: 0x0002, 0x3817: 0x0002, -+ 0x3818: 0x0002, 0x3819: 0x0002, 0x381a: 0x0002, 0x381b: 0x0002, 0x381c: 0x0002, 0x381d: 0x0002, -+ 0x381e: 0x0002, 0x381f: 0x0002, 0x3820: 0x0002, 0x3821: 0x0002, 0x3822: 0x0002, 0x3823: 0x0002, -+ 0x3824: 0x0002, 0x3825: 0x0002, 0x3826: 0x0002, 0x3827: 0x0002, 0x3828: 0x0002, 0x3829: 0x0002, -+ 0x382a: 0x0002, 0x382b: 0x0002, 0x382c: 0x0002, 0x382d: 0x0002, 0x382e: 0x0002, 0x382f: 0x0002, -+ 0x3830: 0x0002, 0x3831: 0x0002, 0x3832: 0x0002, 0x3833: 0x0002, 0x3834: 0x0002, 0x3835: 0x0002, -+ 0x3836: 0x0002, 0x3837: 0x0002, 0x3838: 0x0002, 0x3839: 0x0002, 0x383a: 0x0002, 0x383b: 0x0002, -+ 0x383c: 0x0002, 0x383d: 0x0002, 0x383e: 0x0002, 0x383f: 0x0002, -+ // Block 0xe1, offset 0x3840 -+ 0x3840: 0x000c, 0x3841: 0x000c, 0x3842: 0x000c, 0x3843: 0x000c, 0x3844: 0x000c, 0x3845: 0x000c, -+ 0x3846: 0x000c, 0x3847: 0x000c, 0x3848: 0x000c, 0x3849: 0x000c, 0x384a: 0x000c, 0x384b: 0x000c, -+ 0x384c: 0x000c, 0x384d: 0x000c, 0x384e: 0x000c, 0x384f: 0x000c, 0x3850: 0x000c, 0x3851: 0x000c, -+ 0x3852: 0x000c, 0x3853: 0x000c, 0x3854: 0x000c, 0x3855: 0x000c, 0x3856: 0x000c, 0x3857: 0x000c, -+ 0x3858: 0x000c, 0x3859: 0x000c, 0x385a: 0x000c, 0x385b: 0x000c, 0x385c: 0x000c, 0x385d: 0x000c, -+ 0x385e: 0x000c, 0x385f: 0x000c, 0x3860: 0x000c, 0x3861: 0x000c, 0x3862: 0x000c, 0x3863: 0x000c, -+ 0x3864: 0x000c, 0x3865: 0x000c, 0x3866: 0x000c, 0x3867: 0x000c, 0x3868: 0x000c, 0x3869: 0x000c, -+ 0x386a: 0x000c, 0x386b: 0x000c, 0x386c: 0x000c, 0x386d: 0x000c, 0x386e: 0x000c, 0x386f: 0x000c, -+ 0x3870: 0x000c, 0x3871: 0x000c, 0x3872: 0x000c, 0x3873: 0x000c, 0x3874: 0x000c, 0x3875: 0x000c, -+ 0x3876: 0x000c, 0x387b: 0x000c, -+ 0x387c: 0x000c, 0x387d: 0x000c, 0x387e: 0x000c, 0x387f: 0x000c, -+ // Block 0xe2, offset 0x3880 -+ 0x3880: 0x000c, 0x3881: 0x000c, 0x3882: 0x000c, 0x3883: 0x000c, 0x3884: 0x000c, 0x3885: 0x000c, -+ 0x3886: 0x000c, 0x3887: 0x000c, 0x3888: 0x000c, 0x3889: 0x000c, 0x388a: 0x000c, 0x388b: 0x000c, -+ 0x388c: 0x000c, 0x388d: 0x000c, 0x388e: 0x000c, 0x388f: 0x000c, 0x3890: 0x000c, 0x3891: 0x000c, -+ 0x3892: 0x000c, 0x3893: 0x000c, 0x3894: 0x000c, 0x3895: 0x000c, 0x3896: 0x000c, 0x3897: 0x000c, -+ 0x3898: 0x000c, 0x3899: 0x000c, 0x389a: 0x000c, 0x389b: 0x000c, 0x389c: 0x000c, 0x389d: 0x000c, -+ 0x389e: 0x000c, 0x389f: 0x000c, 0x38a0: 0x000c, 0x38a1: 0x000c, 0x38a2: 0x000c, 0x38a3: 0x000c, -+ 0x38a4: 0x000c, 0x38a5: 0x000c, 0x38a6: 0x000c, 0x38a7: 0x000c, 0x38a8: 0x000c, 0x38a9: 0x000c, -+ 0x38aa: 0x000c, 0x38ab: 0x000c, 0x38ac: 0x000c, -+ 0x38b5: 0x000c, -+ // Block 0xe3, offset 0x38c0 -+ 0x38c4: 0x000c, -+ 0x38db: 0x000c, 0x38dc: 0x000c, 0x38dd: 0x000c, -+ 0x38de: 0x000c, 0x38df: 0x000c, 0x38e1: 0x000c, 0x38e2: 0x000c, 0x38e3: 0x000c, -+ 0x38e4: 0x000c, 0x38e5: 0x000c, 0x38e6: 0x000c, 0x38e7: 0x000c, 0x38e8: 0x000c, 0x38e9: 0x000c, -+ 0x38ea: 0x000c, 0x38eb: 0x000c, 0x38ec: 0x000c, 0x38ed: 0x000c, 0x38ee: 0x000c, 0x38ef: 0x000c, -+ // Block 0xe4, offset 0x3900 -+ 0x3900: 0x000c, 0x3901: 0x000c, 0x3902: 0x000c, 0x3903: 0x000c, 0x3904: 0x000c, 0x3905: 0x000c, -+ 0x3906: 0x000c, 0x3908: 0x000c, 0x3909: 0x000c, 0x390a: 0x000c, 0x390b: 0x000c, -+ 0x390c: 0x000c, 0x390d: 0x000c, 0x390e: 0x000c, 0x390f: 0x000c, 0x3910: 0x000c, 0x3911: 0x000c, -+ 0x3912: 0x000c, 0x3913: 0x000c, 0x3914: 0x000c, 0x3915: 0x000c, 0x3916: 0x000c, 0x3917: 0x000c, -+ 0x3918: 0x000c, 0x391b: 0x000c, 0x391c: 0x000c, 0x391d: 0x000c, -+ 0x391e: 0x000c, 0x391f: 0x000c, 0x3920: 0x000c, 0x3921: 0x000c, 0x3923: 0x000c, -+ 0x3924: 0x000c, 0x3926: 0x000c, 0x3927: 0x000c, 0x3928: 0x000c, 0x3929: 0x000c, -+ 0x392a: 0x000c, -+ // Block 0xe5, offset 0x3940 -+ 0x396e: 0x000c, -+ // Block 0xe6, offset 0x3980 -+ 0x39ac: 0x000c, 0x39ad: 0x000c, 0x39ae: 0x000c, 0x39af: 0x000c, -+ 0x39bf: 0x0004, -+ // Block 0xe7, offset 0x39c0 -+ 0x39ec: 0x000c, 0x39ed: 0x000c, 0x39ee: 0x000c, 0x39ef: 0x000c, -+ // Block 0xe8, offset 0x3a00 -+ 0x3a00: 0x0001, 0x3a01: 0x0001, 0x3a02: 0x0001, 0x3a03: 0x0001, 0x3a04: 0x0001, 0x3a05: 0x0001, -+ 0x3a06: 0x0001, 0x3a07: 0x0001, 0x3a08: 0x0001, 0x3a09: 0x0001, 0x3a0a: 0x0001, 0x3a0b: 0x0001, -+ 0x3a0c: 0x0001, 0x3a0d: 0x0001, 0x3a0e: 0x0001, 0x3a0f: 0x0001, 0x3a10: 0x000c, 0x3a11: 0x000c, -+ 0x3a12: 0x000c, 0x3a13: 0x000c, 0x3a14: 0x000c, 0x3a15: 0x000c, 0x3a16: 0x000c, 0x3a17: 0x0001, -+ 0x3a18: 0x0001, 0x3a19: 0x0001, 0x3a1a: 0x0001, 0x3a1b: 0x0001, 0x3a1c: 0x0001, 0x3a1d: 0x0001, -+ 0x3a1e: 0x0001, 0x3a1f: 0x0001, 0x3a20: 0x0001, 0x3a21: 0x0001, 0x3a22: 0x0001, 0x3a23: 0x0001, -+ 0x3a24: 0x0001, 0x3a25: 0x0001, 0x3a26: 0x0001, 0x3a27: 0x0001, 0x3a28: 0x0001, 0x3a29: 0x0001, -+ 0x3a2a: 0x0001, 0x3a2b: 0x0001, 0x3a2c: 0x0001, 0x3a2d: 0x0001, 0x3a2e: 0x0001, 0x3a2f: 0x0001, -+ 0x3a30: 0x0001, 0x3a31: 0x0001, 0x3a32: 0x0001, 0x3a33: 0x0001, 0x3a34: 0x0001, 0x3a35: 0x0001, -+ 0x3a36: 0x0001, 0x3a37: 0x0001, 0x3a38: 0x0001, 0x3a39: 0x0001, 0x3a3a: 0x0001, 0x3a3b: 0x0001, -+ 0x3a3c: 0x0001, 0x3a3d: 0x0001, 0x3a3e: 0x0001, 0x3a3f: 0x0001, -+ // Block 0xe9, offset 0x3a40 -+ 0x3a40: 0x0001, 0x3a41: 0x0001, 0x3a42: 0x0001, 0x3a43: 0x0001, 0x3a44: 0x000c, 0x3a45: 0x000c, -+ 0x3a46: 0x000c, 0x3a47: 0x000c, 0x3a48: 0x000c, 0x3a49: 0x000c, 0x3a4a: 0x000c, 0x3a4b: 0x0001, -+ 0x3a4c: 0x0001, 0x3a4d: 0x0001, 0x3a4e: 0x0001, 0x3a4f: 0x0001, 0x3a50: 0x0001, 0x3a51: 0x0001, -+ 0x3a52: 0x0001, 0x3a53: 0x0001, 0x3a54: 0x0001, 0x3a55: 0x0001, 0x3a56: 0x0001, 0x3a57: 0x0001, -+ 0x3a58: 0x0001, 0x3a59: 0x0001, 0x3a5a: 0x0001, 0x3a5b: 0x0001, 0x3a5c: 0x0001, 0x3a5d: 0x0001, -+ 0x3a5e: 0x0001, 0x3a5f: 0x0001, 0x3a60: 0x0001, 0x3a61: 0x0001, 0x3a62: 0x0001, 0x3a63: 0x0001, -+ 0x3a64: 0x0001, 0x3a65: 0x0001, 0x3a66: 0x0001, 0x3a67: 0x0001, 0x3a68: 0x0001, 0x3a69: 0x0001, -+ 0x3a6a: 0x0001, 0x3a6b: 0x0001, 0x3a6c: 0x0001, 0x3a6d: 0x0001, 0x3a6e: 0x0001, 0x3a6f: 0x0001, -+ 0x3a70: 0x0001, 0x3a71: 0x0001, 0x3a72: 0x0001, 0x3a73: 0x0001, 0x3a74: 0x0001, 0x3a75: 0x0001, -+ 0x3a76: 0x0001, 0x3a77: 0x0001, 0x3a78: 0x0001, 0x3a79: 0x0001, 0x3a7a: 0x0001, 0x3a7b: 0x0001, -+ 0x3a7c: 0x0001, 0x3a7d: 0x0001, 0x3a7e: 0x0001, 0x3a7f: 0x0001, -+ // Block 0xea, offset 0x3a80 -+ 0x3a80: 0x0001, 0x3a81: 0x0001, 0x3a82: 0x0001, 0x3a83: 0x0001, 0x3a84: 0x0001, 0x3a85: 0x0001, -+ 0x3a86: 0x0001, 0x3a87: 0x0001, 0x3a88: 0x0001, 0x3a89: 0x0001, 0x3a8a: 0x0001, 0x3a8b: 0x0001, -+ 0x3a8c: 0x0001, 0x3a8d: 0x0001, 0x3a8e: 0x0001, 0x3a8f: 0x0001, 0x3a90: 0x0001, 0x3a91: 0x0001, -+ 0x3a92: 0x0001, 0x3a93: 0x0001, 0x3a94: 0x0001, 0x3a95: 0x0001, 0x3a96: 0x0001, 0x3a97: 0x0001, -+ 0x3a98: 0x0001, 0x3a99: 0x0001, 0x3a9a: 0x0001, 0x3a9b: 0x0001, 0x3a9c: 0x0001, 0x3a9d: 0x0001, -+ 0x3a9e: 0x0001, 0x3a9f: 0x0001, 0x3aa0: 0x0001, 0x3aa1: 0x0001, 0x3aa2: 0x0001, 0x3aa3: 0x0001, -+ 0x3aa4: 0x0001, 0x3aa5: 0x0001, 0x3aa6: 0x0001, 0x3aa7: 0x0001, 0x3aa8: 0x0001, 0x3aa9: 0x0001, -+ 0x3aaa: 0x0001, 0x3aab: 0x0001, 0x3aac: 0x0001, 0x3aad: 0x0001, 0x3aae: 0x0001, 0x3aaf: 0x0001, -+ 0x3ab0: 0x0001, 0x3ab1: 0x000d, 0x3ab2: 0x000d, 0x3ab3: 0x000d, 0x3ab4: 0x000d, 0x3ab5: 0x000d, -+ 0x3ab6: 0x000d, 0x3ab7: 0x000d, 0x3ab8: 0x000d, 0x3ab9: 0x000d, 0x3aba: 0x000d, 0x3abb: 0x000d, -+ 0x3abc: 0x000d, 0x3abd: 0x000d, 0x3abe: 0x000d, 0x3abf: 0x000d, -+ // Block 0xeb, offset 0x3ac0 -+ 0x3ac0: 0x000d, 0x3ac1: 0x000d, 0x3ac2: 0x000d, 0x3ac3: 0x000d, 0x3ac4: 0x000d, 0x3ac5: 0x000d, -+ 0x3ac6: 0x000d, 0x3ac7: 0x000d, 0x3ac8: 0x000d, 0x3ac9: 0x000d, 0x3aca: 0x000d, 0x3acb: 0x000d, -+ 0x3acc: 0x000d, 0x3acd: 0x000d, 0x3ace: 0x000d, 0x3acf: 0x000d, 0x3ad0: 0x000d, 0x3ad1: 0x000d, -+ 0x3ad2: 0x000d, 0x3ad3: 0x000d, 0x3ad4: 0x000d, 0x3ad5: 0x000d, 0x3ad6: 0x000d, 0x3ad7: 0x000d, -+ 0x3ad8: 0x000d, 0x3ad9: 0x000d, 0x3ada: 0x000d, 0x3adb: 0x000d, 0x3adc: 0x000d, 0x3add: 0x000d, -+ 0x3ade: 0x000d, 0x3adf: 0x000d, 0x3ae0: 0x000d, 0x3ae1: 0x000d, 0x3ae2: 0x000d, 0x3ae3: 0x000d, -+ 0x3ae4: 0x000d, 0x3ae5: 0x000d, 0x3ae6: 0x000d, 0x3ae7: 0x000d, 0x3ae8: 0x000d, 0x3ae9: 0x000d, -+ 0x3aea: 0x000d, 0x3aeb: 0x000d, 0x3aec: 0x000d, 0x3aed: 0x000d, 0x3aee: 0x000d, 0x3aef: 0x000d, -+ 0x3af0: 0x000d, 0x3af1: 0x000d, 0x3af2: 0x000d, 0x3af3: 0x000d, 0x3af4: 0x000d, 0x3af5: 0x0001, -+ 0x3af6: 0x0001, 0x3af7: 0x0001, 0x3af8: 0x0001, 0x3af9: 0x0001, 0x3afa: 0x0001, 0x3afb: 0x0001, -+ 0x3afc: 0x0001, 0x3afd: 0x0001, 0x3afe: 0x0001, 0x3aff: 0x0001, -+ // Block 0xec, offset 0x3b00 -+ 0x3b00: 0x0001, 0x3b01: 0x000d, 0x3b02: 0x000d, 0x3b03: 0x000d, 0x3b04: 0x000d, 0x3b05: 0x000d, -+ 0x3b06: 0x000d, 0x3b07: 0x000d, 0x3b08: 0x000d, 0x3b09: 0x000d, 0x3b0a: 0x000d, 0x3b0b: 0x000d, -+ 0x3b0c: 0x000d, 0x3b0d: 0x000d, 0x3b0e: 0x000d, 0x3b0f: 0x000d, 0x3b10: 0x000d, 0x3b11: 0x000d, -+ 0x3b12: 0x000d, 0x3b13: 0x000d, 0x3b14: 0x000d, 0x3b15: 0x000d, 0x3b16: 0x000d, 0x3b17: 0x000d, -+ 0x3b18: 0x000d, 0x3b19: 0x000d, 0x3b1a: 0x000d, 0x3b1b: 0x000d, 0x3b1c: 0x000d, 0x3b1d: 0x000d, -+ 0x3b1e: 0x000d, 0x3b1f: 0x000d, 0x3b20: 0x000d, 0x3b21: 0x000d, 0x3b22: 0x000d, 0x3b23: 0x000d, -+ 0x3b24: 0x000d, 0x3b25: 0x000d, 0x3b26: 0x000d, 0x3b27: 0x000d, 0x3b28: 0x000d, 0x3b29: 0x000d, -+ 0x3b2a: 0x000d, 0x3b2b: 0x000d, 0x3b2c: 0x000d, 0x3b2d: 0x000d, 0x3b2e: 0x000d, 0x3b2f: 0x000d, -+ 0x3b30: 0x000d, 0x3b31: 0x000d, 0x3b32: 0x000d, 0x3b33: 0x000d, 0x3b34: 0x000d, 0x3b35: 0x000d, -+ 0x3b36: 0x000d, 0x3b37: 0x000d, 0x3b38: 0x000d, 0x3b39: 0x000d, 0x3b3a: 0x000d, 0x3b3b: 0x000d, -+ 0x3b3c: 0x000d, 0x3b3d: 0x000d, 0x3b3e: 0x0001, 0x3b3f: 0x0001, -+ // Block 0xed, offset 0x3b40 -+ 0x3b40: 0x000d, 0x3b41: 0x000d, 0x3b42: 0x000d, 0x3b43: 0x000d, 0x3b44: 0x000d, 0x3b45: 0x000d, -+ 0x3b46: 0x000d, 0x3b47: 0x000d, 0x3b48: 0x000d, 0x3b49: 0x000d, 0x3b4a: 0x000d, 0x3b4b: 0x000d, -+ 0x3b4c: 0x000d, 0x3b4d: 0x000d, 0x3b4e: 0x000d, 0x3b4f: 0x000d, 0x3b50: 0x000d, 0x3b51: 0x000d, -+ 0x3b52: 0x000d, 0x3b53: 0x000d, 0x3b54: 0x000d, 0x3b55: 0x000d, 0x3b56: 0x000d, 0x3b57: 0x000d, -+ 0x3b58: 0x000d, 0x3b59: 0x000d, 0x3b5a: 0x000d, 0x3b5b: 0x000d, 0x3b5c: 0x000d, 0x3b5d: 0x000d, -+ 0x3b5e: 0x000d, 0x3b5f: 0x000d, 0x3b60: 0x000d, 0x3b61: 0x000d, 0x3b62: 0x000d, 0x3b63: 0x000d, -+ 0x3b64: 0x000d, 0x3b65: 0x000d, 0x3b66: 0x000d, 0x3b67: 0x000d, 0x3b68: 0x000d, 0x3b69: 0x000d, -+ 0x3b6a: 0x000d, 0x3b6b: 0x000d, 0x3b6c: 0x000d, 0x3b6d: 0x000d, 0x3b6e: 0x000d, 0x3b6f: 0x000d, -+ 0x3b70: 0x000a, 0x3b71: 0x000a, 0x3b72: 0x000d, 0x3b73: 0x000d, 0x3b74: 0x000d, 0x3b75: 0x000d, -+ 0x3b76: 0x000d, 0x3b77: 0x000d, 0x3b78: 0x000d, 0x3b79: 0x000d, 0x3b7a: 0x000d, 0x3b7b: 0x000d, -+ 0x3b7c: 0x000d, 0x3b7d: 0x000d, 0x3b7e: 0x000d, 0x3b7f: 0x000d, -+ // Block 0xee, offset 0x3b80 -+ 0x3b80: 0x000a, 0x3b81: 0x000a, 0x3b82: 0x000a, 0x3b83: 0x000a, 0x3b84: 0x000a, 0x3b85: 0x000a, -+ 0x3b86: 0x000a, 0x3b87: 0x000a, 0x3b88: 0x000a, 0x3b89: 0x000a, 0x3b8a: 0x000a, 0x3b8b: 0x000a, -+ 0x3b8c: 0x000a, 0x3b8d: 0x000a, 0x3b8e: 0x000a, 0x3b8f: 0x000a, 0x3b90: 0x000a, 0x3b91: 0x000a, -+ 0x3b92: 0x000a, 0x3b93: 0x000a, 0x3b94: 0x000a, 0x3b95: 0x000a, 0x3b96: 0x000a, 0x3b97: 0x000a, -+ 0x3b98: 0x000a, 0x3b99: 0x000a, 0x3b9a: 0x000a, 0x3b9b: 0x000a, 0x3b9c: 0x000a, 0x3b9d: 0x000a, -+ 0x3b9e: 0x000a, 0x3b9f: 0x000a, 0x3ba0: 0x000a, 0x3ba1: 0x000a, 0x3ba2: 0x000a, 0x3ba3: 0x000a, -+ 0x3ba4: 0x000a, 0x3ba5: 0x000a, 0x3ba6: 0x000a, 0x3ba7: 0x000a, 0x3ba8: 0x000a, 0x3ba9: 0x000a, -+ 0x3baa: 0x000a, 0x3bab: 0x000a, -+ 0x3bb0: 0x000a, 0x3bb1: 0x000a, 0x3bb2: 0x000a, 0x3bb3: 0x000a, 0x3bb4: 0x000a, 0x3bb5: 0x000a, -+ 0x3bb6: 0x000a, 0x3bb7: 0x000a, 0x3bb8: 0x000a, 0x3bb9: 0x000a, 0x3bba: 0x000a, 0x3bbb: 0x000a, -+ 0x3bbc: 0x000a, 0x3bbd: 0x000a, 0x3bbe: 0x000a, 0x3bbf: 0x000a, -+ // Block 0xef, offset 0x3bc0 -+ 0x3bc0: 0x000a, 0x3bc1: 0x000a, 0x3bc2: 0x000a, 0x3bc3: 0x000a, 0x3bc4: 0x000a, 0x3bc5: 0x000a, -+ 0x3bc6: 0x000a, 0x3bc7: 0x000a, 0x3bc8: 0x000a, 0x3bc9: 0x000a, 0x3bca: 0x000a, 0x3bcb: 0x000a, -+ 0x3bcc: 0x000a, 0x3bcd: 0x000a, 0x3bce: 0x000a, 0x3bcf: 0x000a, 0x3bd0: 0x000a, 0x3bd1: 0x000a, -+ 0x3bd2: 0x000a, 0x3bd3: 0x000a, -+ 0x3be0: 0x000a, 0x3be1: 0x000a, 0x3be2: 0x000a, 0x3be3: 0x000a, -+ 0x3be4: 0x000a, 0x3be5: 0x000a, 0x3be6: 0x000a, 0x3be7: 0x000a, 0x3be8: 0x000a, 0x3be9: 0x000a, -+ 0x3bea: 0x000a, 0x3beb: 0x000a, 0x3bec: 0x000a, 0x3bed: 0x000a, 0x3bee: 0x000a, -+ 0x3bf1: 0x000a, 0x3bf2: 0x000a, 0x3bf3: 0x000a, 0x3bf4: 0x000a, 0x3bf5: 0x000a, -+ 0x3bf6: 0x000a, 0x3bf7: 0x000a, 0x3bf8: 0x000a, 0x3bf9: 0x000a, 0x3bfa: 0x000a, 0x3bfb: 0x000a, -+ 0x3bfc: 0x000a, 0x3bfd: 0x000a, 0x3bfe: 0x000a, 0x3bff: 0x000a, -+ // Block 0xf0, offset 0x3c00 -+ 0x3c01: 0x000a, 0x3c02: 0x000a, 0x3c03: 0x000a, 0x3c04: 0x000a, 0x3c05: 0x000a, -+ 0x3c06: 0x000a, 0x3c07: 0x000a, 0x3c08: 0x000a, 0x3c09: 0x000a, 0x3c0a: 0x000a, 0x3c0b: 0x000a, -+ 0x3c0c: 0x000a, 0x3c0d: 0x000a, 0x3c0e: 0x000a, 0x3c0f: 0x000a, 0x3c11: 0x000a, -+ 0x3c12: 0x000a, 0x3c13: 0x000a, 0x3c14: 0x000a, 0x3c15: 0x000a, 0x3c16: 0x000a, 0x3c17: 0x000a, -+ 0x3c18: 0x000a, 0x3c19: 0x000a, 0x3c1a: 0x000a, 0x3c1b: 0x000a, 0x3c1c: 0x000a, 0x3c1d: 0x000a, -+ 0x3c1e: 0x000a, 0x3c1f: 0x000a, 0x3c20: 0x000a, 0x3c21: 0x000a, 0x3c22: 0x000a, 0x3c23: 0x000a, -+ 0x3c24: 0x000a, 0x3c25: 0x000a, 0x3c26: 0x000a, 0x3c27: 0x000a, 0x3c28: 0x000a, 0x3c29: 0x000a, -+ 0x3c2a: 0x000a, 0x3c2b: 0x000a, 0x3c2c: 0x000a, 0x3c2d: 0x000a, 0x3c2e: 0x000a, 0x3c2f: 0x000a, -+ 0x3c30: 0x000a, 0x3c31: 0x000a, 0x3c32: 0x000a, 0x3c33: 0x000a, 0x3c34: 0x000a, 0x3c35: 0x000a, -+ // Block 0xf1, offset 0x3c40 -+ 0x3c40: 0x0002, 0x3c41: 0x0002, 0x3c42: 0x0002, 0x3c43: 0x0002, 0x3c44: 0x0002, 0x3c45: 0x0002, -+ 0x3c46: 0x0002, 0x3c47: 0x0002, 0x3c48: 0x0002, 0x3c49: 0x0002, 0x3c4a: 0x0002, 0x3c4b: 0x000a, -+ 0x3c4c: 0x000a, 0x3c4d: 0x000a, 0x3c4e: 0x000a, 0x3c4f: 0x000a, -+ 0x3c6f: 0x000a, -+ // Block 0xf2, offset 0x3c80 -+ 0x3caa: 0x000a, 0x3cab: 0x000a, 0x3cac: 0x000a, 0x3cad: 0x000a, 0x3cae: 0x000a, 0x3caf: 0x000a, -+ // Block 0xf3, offset 0x3cc0 -+ 0x3ced: 0x000a, -+ // Block 0xf4, offset 0x3d00 -+ 0x3d20: 0x000a, 0x3d21: 0x000a, 0x3d22: 0x000a, 0x3d23: 0x000a, -+ 0x3d24: 0x000a, 0x3d25: 0x000a, -+ // Block 0xf5, offset 0x3d40 -+ 0x3d40: 0x000a, 0x3d41: 0x000a, 0x3d42: 0x000a, 0x3d43: 0x000a, 0x3d44: 0x000a, 0x3d45: 0x000a, -+ 0x3d46: 0x000a, 0x3d47: 0x000a, 0x3d48: 0x000a, 0x3d49: 0x000a, 0x3d4a: 0x000a, 0x3d4b: 0x000a, -+ 0x3d4c: 0x000a, 0x3d4d: 0x000a, 0x3d4e: 0x000a, 0x3d4f: 0x000a, 0x3d50: 0x000a, 0x3d51: 0x000a, -+ 0x3d52: 0x000a, 0x3d53: 0x000a, 0x3d54: 0x000a, 0x3d55: 0x000a, 0x3d56: 0x000a, 0x3d57: 0x000a, -+ 0x3d5c: 0x000a, 0x3d5d: 0x000a, -+ 0x3d5e: 0x000a, 0x3d5f: 0x000a, 0x3d60: 0x000a, 0x3d61: 0x000a, 0x3d62: 0x000a, 0x3d63: 0x000a, -+ 0x3d64: 0x000a, 0x3d65: 0x000a, 0x3d66: 0x000a, 0x3d67: 0x000a, 0x3d68: 0x000a, 0x3d69: 0x000a, -+ 0x3d6a: 0x000a, 0x3d6b: 0x000a, 0x3d6c: 0x000a, -+ 0x3d70: 0x000a, 0x3d71: 0x000a, 0x3d72: 0x000a, 0x3d73: 0x000a, 0x3d74: 0x000a, 0x3d75: 0x000a, -+ 0x3d76: 0x000a, 0x3d77: 0x000a, 0x3d78: 0x000a, 0x3d79: 0x000a, 0x3d7a: 0x000a, 0x3d7b: 0x000a, -+ 0x3d7c: 0x000a, -+ // Block 0xf6, offset 0x3d80 -+ 0x3d80: 0x000a, 0x3d81: 0x000a, 0x3d82: 0x000a, 0x3d83: 0x000a, 0x3d84: 0x000a, 0x3d85: 0x000a, -+ 0x3d86: 0x000a, 0x3d87: 0x000a, 0x3d88: 0x000a, 0x3d89: 0x000a, 0x3d8a: 0x000a, 0x3d8b: 0x000a, -+ 0x3d8c: 0x000a, 0x3d8d: 0x000a, 0x3d8e: 0x000a, 0x3d8f: 0x000a, 0x3d90: 0x000a, 0x3d91: 0x000a, -+ 0x3d92: 0x000a, 0x3d93: 0x000a, 0x3d94: 0x000a, 0x3d95: 0x000a, 0x3d96: 0x000a, 0x3d97: 0x000a, -+ 0x3d98: 0x000a, 0x3d99: 0x000a, 0x3d9a: 0x000a, 0x3d9b: 0x000a, 0x3d9c: 0x000a, 0x3d9d: 0x000a, -+ 0x3d9e: 0x000a, 0x3d9f: 0x000a, 0x3da0: 0x000a, 0x3da1: 0x000a, 0x3da2: 0x000a, 0x3da3: 0x000a, -+ 0x3da4: 0x000a, 0x3da5: 0x000a, 0x3da6: 0x000a, 0x3da7: 0x000a, 0x3da8: 0x000a, 0x3da9: 0x000a, -+ 0x3daa: 0x000a, 0x3dab: 0x000a, 0x3dac: 0x000a, 0x3dad: 0x000a, 0x3dae: 0x000a, 0x3daf: 0x000a, -+ 0x3db0: 0x000a, 0x3db1: 0x000a, 0x3db2: 0x000a, 0x3db3: 0x000a, 0x3db4: 0x000a, 0x3db5: 0x000a, -+ 0x3db6: 0x000a, 0x3dbb: 0x000a, -+ 0x3dbc: 0x000a, 0x3dbd: 0x000a, 0x3dbe: 0x000a, 0x3dbf: 0x000a, -+ // Block 0xf7, offset 0x3dc0 -+ 0x3dc0: 0x000a, 0x3dc1: 0x000a, 0x3dc2: 0x000a, 0x3dc3: 0x000a, 0x3dc4: 0x000a, 0x3dc5: 0x000a, -+ 0x3dc6: 0x000a, 0x3dc7: 0x000a, 0x3dc8: 0x000a, 0x3dc9: 0x000a, 0x3dca: 0x000a, 0x3dcb: 0x000a, -+ 0x3dcc: 0x000a, 0x3dcd: 0x000a, 0x3dce: 0x000a, 0x3dcf: 0x000a, 0x3dd0: 0x000a, 0x3dd1: 0x000a, -+ 0x3dd2: 0x000a, 0x3dd3: 0x000a, 0x3dd4: 0x000a, 0x3dd5: 0x000a, 0x3dd6: 0x000a, 0x3dd7: 0x000a, -+ 0x3dd8: 0x000a, 0x3dd9: 0x000a, -+ 0x3de0: 0x000a, 0x3de1: 0x000a, 0x3de2: 0x000a, 0x3de3: 0x000a, -+ 0x3de4: 0x000a, 0x3de5: 0x000a, 0x3de6: 0x000a, 0x3de7: 0x000a, 0x3de8: 0x000a, 0x3de9: 0x000a, -+ 0x3dea: 0x000a, 0x3deb: 0x000a, -+ 0x3df0: 0x000a, -+ // Block 0xf8, offset 0x3e00 -+ 0x3e00: 0x000a, 0x3e01: 0x000a, 0x3e02: 0x000a, 0x3e03: 0x000a, 0x3e04: 0x000a, 0x3e05: 0x000a, -+ 0x3e06: 0x000a, 0x3e07: 0x000a, 0x3e08: 0x000a, 0x3e09: 0x000a, 0x3e0a: 0x000a, 0x3e0b: 0x000a, -+ 0x3e10: 0x000a, 0x3e11: 0x000a, -+ 0x3e12: 0x000a, 0x3e13: 0x000a, 0x3e14: 0x000a, 0x3e15: 0x000a, 0x3e16: 0x000a, 0x3e17: 0x000a, -+ 0x3e18: 0x000a, 0x3e19: 0x000a, 0x3e1a: 0x000a, 0x3e1b: 0x000a, 0x3e1c: 0x000a, 0x3e1d: 0x000a, -+ 0x3e1e: 0x000a, 0x3e1f: 0x000a, 0x3e20: 0x000a, 0x3e21: 0x000a, 0x3e22: 0x000a, 0x3e23: 0x000a, -+ 0x3e24: 0x000a, 0x3e25: 0x000a, 0x3e26: 0x000a, 0x3e27: 0x000a, 0x3e28: 0x000a, 0x3e29: 0x000a, -+ 0x3e2a: 0x000a, 0x3e2b: 0x000a, 0x3e2c: 0x000a, 0x3e2d: 0x000a, 0x3e2e: 0x000a, 0x3e2f: 0x000a, -+ 0x3e30: 0x000a, 0x3e31: 0x000a, 0x3e32: 0x000a, 0x3e33: 0x000a, 0x3e34: 0x000a, 0x3e35: 0x000a, -+ 0x3e36: 0x000a, 0x3e37: 0x000a, 0x3e38: 0x000a, 0x3e39: 0x000a, 0x3e3a: 0x000a, 0x3e3b: 0x000a, -+ 0x3e3c: 0x000a, 0x3e3d: 0x000a, 0x3e3e: 0x000a, 0x3e3f: 0x000a, -+ // Block 0xf9, offset 0x3e40 -+ 0x3e40: 0x000a, 0x3e41: 0x000a, 0x3e42: 0x000a, 0x3e43: 0x000a, 0x3e44: 0x000a, 0x3e45: 0x000a, -+ 0x3e46: 0x000a, 0x3e47: 0x000a, -+ 0x3e50: 0x000a, 0x3e51: 0x000a, -+ 0x3e52: 0x000a, 0x3e53: 0x000a, 0x3e54: 0x000a, 0x3e55: 0x000a, 0x3e56: 0x000a, 0x3e57: 0x000a, -+ 0x3e58: 0x000a, 0x3e59: 0x000a, -+ 0x3e60: 0x000a, 0x3e61: 0x000a, 0x3e62: 0x000a, 0x3e63: 0x000a, -+ 0x3e64: 0x000a, 0x3e65: 0x000a, 0x3e66: 0x000a, 0x3e67: 0x000a, 0x3e68: 0x000a, 0x3e69: 0x000a, -+ 0x3e6a: 0x000a, 0x3e6b: 0x000a, 0x3e6c: 0x000a, 0x3e6d: 0x000a, 0x3e6e: 0x000a, 0x3e6f: 0x000a, -+ 0x3e70: 0x000a, 0x3e71: 0x000a, 0x3e72: 0x000a, 0x3e73: 0x000a, 0x3e74: 0x000a, 0x3e75: 0x000a, -+ 0x3e76: 0x000a, 0x3e77: 0x000a, 0x3e78: 0x000a, 0x3e79: 0x000a, 0x3e7a: 0x000a, 0x3e7b: 0x000a, -+ 0x3e7c: 0x000a, 0x3e7d: 0x000a, 0x3e7e: 0x000a, 0x3e7f: 0x000a, -+ // Block 0xfa, offset 0x3e80 -+ 0x3e80: 0x000a, 0x3e81: 0x000a, 0x3e82: 0x000a, 0x3e83: 0x000a, 0x3e84: 0x000a, 0x3e85: 0x000a, -+ 0x3e86: 0x000a, 0x3e87: 0x000a, -+ 0x3e90: 0x000a, 0x3e91: 0x000a, -+ 0x3e92: 0x000a, 0x3e93: 0x000a, 0x3e94: 0x000a, 0x3e95: 0x000a, 0x3e96: 0x000a, 0x3e97: 0x000a, -+ 0x3e98: 0x000a, 0x3e99: 0x000a, 0x3e9a: 0x000a, 0x3e9b: 0x000a, 0x3e9c: 0x000a, 0x3e9d: 0x000a, -+ 0x3e9e: 0x000a, 0x3e9f: 0x000a, 0x3ea0: 0x000a, 0x3ea1: 0x000a, 0x3ea2: 0x000a, 0x3ea3: 0x000a, -+ 0x3ea4: 0x000a, 0x3ea5: 0x000a, 0x3ea6: 0x000a, 0x3ea7: 0x000a, 0x3ea8: 0x000a, 0x3ea9: 0x000a, -+ 0x3eaa: 0x000a, 0x3eab: 0x000a, 0x3eac: 0x000a, 0x3ead: 0x000a, -+ 0x3eb0: 0x000a, 0x3eb1: 0x000a, -+ // Block 0xfb, offset 0x3ec0 -+ 0x3ec0: 0x000a, 0x3ec1: 0x000a, 0x3ec2: 0x000a, 0x3ec3: 0x000a, 0x3ec4: 0x000a, 0x3ec5: 0x000a, -+ 0x3ec6: 0x000a, 0x3ec7: 0x000a, 0x3ec8: 0x000a, 0x3ec9: 0x000a, 0x3eca: 0x000a, 0x3ecb: 0x000a, -+ 0x3ecc: 0x000a, 0x3ecd: 0x000a, 0x3ece: 0x000a, 0x3ecf: 0x000a, 0x3ed0: 0x000a, 0x3ed1: 0x000a, -+ 0x3ed2: 0x000a, 0x3ed3: 0x000a, -+ 0x3ee0: 0x000a, 0x3ee1: 0x000a, 0x3ee2: 0x000a, 0x3ee3: 0x000a, -+ 0x3ee4: 0x000a, 0x3ee5: 0x000a, 0x3ee6: 0x000a, 0x3ee7: 0x000a, 0x3ee8: 0x000a, 0x3ee9: 0x000a, -+ 0x3eea: 0x000a, 0x3eeb: 0x000a, 0x3eec: 0x000a, 0x3eed: 0x000a, -+ 0x3ef0: 0x000a, 0x3ef1: 0x000a, 0x3ef2: 0x000a, 0x3ef3: 0x000a, 0x3ef4: 0x000a, 0x3ef5: 0x000a, -+ 0x3ef6: 0x000a, 0x3ef7: 0x000a, 0x3ef8: 0x000a, 0x3ef9: 0x000a, 0x3efa: 0x000a, 0x3efb: 0x000a, -+ 0x3efc: 0x000a, -+ // Block 0xfc, offset 0x3f00 -+ 0x3f00: 0x000a, 0x3f01: 0x000a, 0x3f02: 0x000a, 0x3f03: 0x000a, 0x3f04: 0x000a, 0x3f05: 0x000a, -+ 0x3f06: 0x000a, 0x3f07: 0x000a, 0x3f08: 0x000a, -+ 0x3f10: 0x000a, 0x3f11: 0x000a, -+ 0x3f12: 0x000a, 0x3f13: 0x000a, 0x3f14: 0x000a, 0x3f15: 0x000a, 0x3f16: 0x000a, 0x3f17: 0x000a, -+ 0x3f18: 0x000a, 0x3f19: 0x000a, 0x3f1a: 0x000a, 0x3f1b: 0x000a, 0x3f1c: 0x000a, 0x3f1d: 0x000a, -+ 0x3f1e: 0x000a, 0x3f1f: 0x000a, 0x3f20: 0x000a, 0x3f21: 0x000a, 0x3f22: 0x000a, 0x3f23: 0x000a, -+ 0x3f24: 0x000a, 0x3f25: 0x000a, 0x3f26: 0x000a, 0x3f27: 0x000a, 0x3f28: 0x000a, 0x3f29: 0x000a, -+ 0x3f2a: 0x000a, 0x3f2b: 0x000a, 0x3f2c: 0x000a, 0x3f2d: 0x000a, 0x3f2e: 0x000a, 0x3f2f: 0x000a, -+ 0x3f30: 0x000a, 0x3f31: 0x000a, 0x3f32: 0x000a, 0x3f33: 0x000a, 0x3f34: 0x000a, 0x3f35: 0x000a, -+ 0x3f36: 0x000a, 0x3f37: 0x000a, 0x3f38: 0x000a, 0x3f39: 0x000a, 0x3f3a: 0x000a, 0x3f3b: 0x000a, -+ 0x3f3c: 0x000a, 0x3f3d: 0x000a, 0x3f3f: 0x000a, -+ // Block 0xfd, offset 0x3f40 -+ 0x3f40: 0x000a, 0x3f41: 0x000a, 0x3f42: 0x000a, 0x3f43: 0x000a, 0x3f44: 0x000a, 0x3f45: 0x000a, -+ 0x3f4e: 0x000a, 0x3f4f: 0x000a, 0x3f50: 0x000a, 0x3f51: 0x000a, -+ 0x3f52: 0x000a, 0x3f53: 0x000a, 0x3f54: 0x000a, 0x3f55: 0x000a, 0x3f56: 0x000a, 0x3f57: 0x000a, -+ 0x3f58: 0x000a, 0x3f59: 0x000a, 0x3f5a: 0x000a, 0x3f5b: 0x000a, -+ 0x3f60: 0x000a, 0x3f61: 0x000a, 0x3f62: 0x000a, 0x3f63: 0x000a, -+ 0x3f64: 0x000a, 0x3f65: 0x000a, 0x3f66: 0x000a, 0x3f67: 0x000a, 0x3f68: 0x000a, -+ 0x3f70: 0x000a, 0x3f71: 0x000a, 0x3f72: 0x000a, 0x3f73: 0x000a, 0x3f74: 0x000a, 0x3f75: 0x000a, -+ 0x3f76: 0x000a, 0x3f77: 0x000a, 0x3f78: 0x000a, -+ // Block 0xfe, offset 0x3f80 -+ 0x3f80: 0x000a, 0x3f81: 0x000a, 0x3f82: 0x000a, 0x3f83: 0x000a, 0x3f84: 0x000a, 0x3f85: 0x000a, -+ 0x3f86: 0x000a, 0x3f87: 0x000a, 0x3f88: 0x000a, 0x3f89: 0x000a, 0x3f8a: 0x000a, 0x3f8b: 0x000a, -+ 0x3f8c: 0x000a, 0x3f8d: 0x000a, 0x3f8e: 0x000a, 0x3f8f: 0x000a, 0x3f90: 0x000a, 0x3f91: 0x000a, -+ 0x3f92: 0x000a, 0x3f94: 0x000a, 0x3f95: 0x000a, 0x3f96: 0x000a, 0x3f97: 0x000a, -+ 0x3f98: 0x000a, 0x3f99: 0x000a, 0x3f9a: 0x000a, 0x3f9b: 0x000a, 0x3f9c: 0x000a, 0x3f9d: 0x000a, -+ 0x3f9e: 0x000a, 0x3f9f: 0x000a, 0x3fa0: 0x000a, 0x3fa1: 0x000a, 0x3fa2: 0x000a, 0x3fa3: 0x000a, -+ 0x3fa4: 0x000a, 0x3fa5: 0x000a, 0x3fa6: 0x000a, 0x3fa7: 0x000a, 0x3fa8: 0x000a, 0x3fa9: 0x000a, -+ 0x3faa: 0x000a, 0x3fab: 0x000a, 0x3fac: 0x000a, 0x3fad: 0x000a, 0x3fae: 0x000a, 0x3faf: 0x000a, -+ 0x3fb0: 0x000a, 0x3fb1: 0x000a, 0x3fb2: 0x000a, 0x3fb3: 0x000a, 0x3fb4: 0x000a, 0x3fb5: 0x000a, -+ 0x3fb6: 0x000a, 0x3fb7: 0x000a, 0x3fb8: 0x000a, 0x3fb9: 0x000a, 0x3fba: 0x000a, 0x3fbb: 0x000a, -+ 0x3fbc: 0x000a, 0x3fbd: 0x000a, 0x3fbe: 0x000a, 0x3fbf: 0x000a, -+ // Block 0xff, offset 0x3fc0 -+ 0x3fc0: 0x000a, 0x3fc1: 0x000a, 0x3fc2: 0x000a, 0x3fc3: 0x000a, 0x3fc4: 0x000a, 0x3fc5: 0x000a, -+ 0x3fc6: 0x000a, 0x3fc7: 0x000a, 0x3fc8: 0x000a, 0x3fc9: 0x000a, 0x3fca: 0x000a, -+ 0x3ff0: 0x0002, 0x3ff1: 0x0002, 0x3ff2: 0x0002, 0x3ff3: 0x0002, 0x3ff4: 0x0002, 0x3ff5: 0x0002, -+ 0x3ff6: 0x0002, 0x3ff7: 0x0002, 0x3ff8: 0x0002, 0x3ff9: 0x0002, -+ // Block 0x100, offset 0x4000 -+ 0x403e: 0x000b, 0x403f: 0x000b, -+ // Block 0x101, offset 0x4040 -+ 0x4040: 0x000b, 0x4041: 0x000b, 0x4042: 0x000b, 0x4043: 0x000b, 0x4044: 0x000b, 0x4045: 0x000b, -+ 0x4046: 0x000b, 0x4047: 0x000b, 0x4048: 0x000b, 0x4049: 0x000b, 0x404a: 0x000b, 0x404b: 0x000b, -+ 0x404c: 0x000b, 0x404d: 0x000b, 0x404e: 0x000b, 0x404f: 0x000b, 0x4050: 0x000b, 0x4051: 0x000b, -+ 0x4052: 0x000b, 0x4053: 0x000b, 0x4054: 0x000b, 0x4055: 0x000b, 0x4056: 0x000b, 0x4057: 0x000b, -+ 0x4058: 0x000b, 0x4059: 0x000b, 0x405a: 0x000b, 0x405b: 0x000b, 0x405c: 0x000b, 0x405d: 0x000b, -+ 0x405e: 0x000b, 0x405f: 0x000b, 0x4060: 0x000b, 0x4061: 0x000b, 0x4062: 0x000b, 0x4063: 0x000b, -+ 0x4064: 0x000b, 0x4065: 0x000b, 0x4066: 0x000b, 0x4067: 0x000b, 0x4068: 0x000b, 0x4069: 0x000b, -+ 0x406a: 0x000b, 0x406b: 0x000b, 0x406c: 0x000b, 0x406d: 0x000b, 0x406e: 0x000b, 0x406f: 0x000b, -+ 0x4070: 0x000b, 0x4071: 0x000b, 0x4072: 0x000b, 0x4073: 0x000b, 0x4074: 0x000b, 0x4075: 0x000b, -+ 0x4076: 0x000b, 0x4077: 0x000b, 0x4078: 0x000b, 0x4079: 0x000b, 0x407a: 0x000b, 0x407b: 0x000b, -+ 0x407c: 0x000b, 0x407d: 0x000b, 0x407e: 0x000b, 0x407f: 0x000b, -+ // Block 0x102, offset 0x4080 -+ 0x4080: 0x000c, 0x4081: 0x000c, 0x4082: 0x000c, 0x4083: 0x000c, 0x4084: 0x000c, 0x4085: 0x000c, -+ 0x4086: 0x000c, 0x4087: 0x000c, 0x4088: 0x000c, 0x4089: 0x000c, 0x408a: 0x000c, 0x408b: 0x000c, -+ 0x408c: 0x000c, 0x408d: 0x000c, 0x408e: 0x000c, 0x408f: 0x000c, 0x4090: 0x000c, 0x4091: 0x000c, -+ 0x4092: 0x000c, 0x4093: 0x000c, 0x4094: 0x000c, 0x4095: 0x000c, 0x4096: 0x000c, 0x4097: 0x000c, -+ 0x4098: 0x000c, 0x4099: 0x000c, 0x409a: 0x000c, 0x409b: 0x000c, 0x409c: 0x000c, 0x409d: 0x000c, -+ 0x409e: 0x000c, 0x409f: 0x000c, 0x40a0: 0x000c, 0x40a1: 0x000c, 0x40a2: 0x000c, 0x40a3: 0x000c, -+ 0x40a4: 0x000c, 0x40a5: 0x000c, 0x40a6: 0x000c, 0x40a7: 0x000c, 0x40a8: 0x000c, 0x40a9: 0x000c, -+ 0x40aa: 0x000c, 0x40ab: 0x000c, 0x40ac: 0x000c, 0x40ad: 0x000c, 0x40ae: 0x000c, 0x40af: 0x000c, -+ 0x40b0: 0x000b, 0x40b1: 0x000b, 0x40b2: 0x000b, 0x40b3: 0x000b, 0x40b4: 0x000b, 0x40b5: 0x000b, -+ 0x40b6: 0x000b, 0x40b7: 0x000b, 0x40b8: 0x000b, 0x40b9: 0x000b, 0x40ba: 0x000b, 0x40bb: 0x000b, -+ 0x40bc: 0x000b, 0x40bd: 0x000b, 0x40be: 0x000b, 0x40bf: 0x000b, -+} -+ -+// bidiIndex: 26 blocks, 1664 entries, 3328 bytes -+// Block 0 is the zero block. -+var bidiIndex = [1664]uint16{ -+ // Block 0x0, offset 0x0 -+ // Block 0x1, offset 0x40 -+ // Block 0x2, offset 0x80 -+ // Block 0x3, offset 0xc0 -+ 0xc2: 0x01, 0xc3: 0x02, -+ 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, -+ 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, -+ 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, -+ 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, -+ 0xea: 0x07, 0xef: 0x08, -+ 0xf0: 0x13, 0xf1: 0x14, 0xf2: 0x14, 0xf3: 0x16, 0xf4: 0x17, -+ // Block 0x4, offset 0x100 -+ 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, -+ 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, -+ 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x136: 0x28, 0x137: 0x29, -+ 0x138: 0x2a, 0x139: 0x2b, 0x13a: 0x2c, 0x13b: 0x2d, 0x13c: 0x2e, 0x13d: 0x2f, 0x13e: 0x30, 0x13f: 0x31, -+ // Block 0x5, offset 0x140 -+ 0x140: 0x32, 0x141: 0x33, 0x142: 0x34, -+ 0x14d: 0x35, 0x14e: 0x36, -+ 0x150: 0x37, -+ 0x15a: 0x38, 0x15c: 0x39, 0x15d: 0x3a, 0x15e: 0x3b, 0x15f: 0x3c, -+ 0x160: 0x3d, 0x162: 0x3e, 0x164: 0x3f, 0x165: 0x40, 0x167: 0x41, -+ 0x168: 0x42, 0x169: 0x43, 0x16a: 0x44, 0x16b: 0x45, 0x16c: 0x46, 0x16d: 0x47, 0x16e: 0x48, 0x16f: 0x49, -+ 0x170: 0x4a, 0x173: 0x4b, 0x177: 0x05, -+ 0x17e: 0x4c, 0x17f: 0x4d, -+ // Block 0x6, offset 0x180 -+ 0x180: 0x4e, 0x181: 0x4f, 0x182: 0x50, 0x183: 0x51, 0x184: 0x52, 0x185: 0x53, 0x186: 0x54, 0x187: 0x55, -+ 0x188: 0x56, 0x189: 0x55, 0x18a: 0x55, 0x18b: 0x55, 0x18c: 0x57, 0x18d: 0x58, 0x18e: 0x59, 0x18f: 0x55, -+ 0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x55, 0x195: 0x55, 0x196: 0x55, 0x197: 0x55, -+ 0x198: 0x55, 0x199: 0x55, 0x19a: 0x5e, 0x19b: 0x55, 0x19c: 0x55, 0x19d: 0x5f, 0x19e: 0x55, 0x19f: 0x60, -+ 0x1a4: 0x55, 0x1a5: 0x55, 0x1a6: 0x61, 0x1a7: 0x62, -+ 0x1a8: 0x55, 0x1a9: 0x55, 0x1aa: 0x55, 0x1ab: 0x55, 0x1ac: 0x55, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x55, -+ 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67, -+ 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x55, 0x1bd: 0x55, 0x1be: 0x55, 0x1bf: 0x6c, -+ // Block 0x7, offset 0x1c0 -+ 0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70, -+ 0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76, -+ // Block 0x8, offset 0x200 -+ 0x237: 0x55, -+ // Block 0x9, offset 0x240 -+ 0x252: 0x77, 0x253: 0x78, -+ 0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e, -+ 0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85, -+ 0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26d: 0x8a, 0x26f: 0x8b, -+ // Block 0xa, offset 0x280 -+ 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e, -+ 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x8f, 0x2b6: 0x0e, 0x2b7: 0x90, -+ 0x2b8: 0x91, 0x2b9: 0x92, 0x2ba: 0x0e, 0x2bb: 0x93, 0x2bc: 0x94, 0x2bd: 0x95, 0x2bf: 0x96, -+ // Block 0xb, offset 0x2c0 -+ 0x2c4: 0x97, 0x2c5: 0x55, 0x2c6: 0x98, 0x2c7: 0x99, -+ 0x2cb: 0x9a, 0x2cd: 0x9b, -+ 0x2e0: 0x9c, 0x2e1: 0x9c, 0x2e2: 0x9c, 0x2e3: 0x9c, 0x2e4: 0x9d, 0x2e5: 0x9c, 0x2e6: 0x9c, 0x2e7: 0x9c, -+ 0x2e8: 0x9e, 0x2e9: 0x9c, 0x2ea: 0x9c, 0x2eb: 0x9f, 0x2ec: 0xa0, 0x2ed: 0x9c, 0x2ee: 0x9c, 0x2ef: 0x9c, -+ 0x2f0: 0x9c, 0x2f1: 0x9c, 0x2f2: 0x9c, 0x2f3: 0x9c, 0x2f4: 0xa1, 0x2f5: 0x9c, 0x2f6: 0x9c, 0x2f7: 0x9c, -+ 0x2f8: 0x9c, 0x2f9: 0xa2, 0x2fa: 0xa3, 0x2fb: 0xa4, 0x2fc: 0xa5, 0x2fd: 0xa6, 0x2fe: 0xa7, 0x2ff: 0x9c, -+ // Block 0xc, offset 0x300 -+ 0x300: 0xa8, 0x301: 0xa9, 0x302: 0xaa, 0x303: 0x21, 0x304: 0xab, 0x305: 0xac, 0x306: 0xad, 0x307: 0xae, -+ 0x308: 0xaf, 0x309: 0x28, 0x30b: 0xb0, 0x30c: 0x26, 0x30d: 0xb1, -+ 0x310: 0xb2, 0x311: 0xb3, 0x312: 0xb4, 0x313: 0xb5, 0x316: 0xb6, 0x317: 0xb7, -+ 0x318: 0xb8, 0x319: 0xb9, 0x31a: 0xba, 0x31c: 0xbb, -+ 0x320: 0xbc, 0x324: 0xbd, 0x325: 0xbe, 0x327: 0xbf, -+ 0x328: 0xc0, 0x329: 0xc1, 0x32a: 0xc2, -+ 0x330: 0xc3, 0x332: 0xc4, 0x334: 0xc5, 0x335: 0xc6, 0x336: 0xc7, -+ 0x33b: 0xc8, 0x33c: 0xc9, 0x33d: 0xca, 0x33f: 0xcb, -+ // Block 0xd, offset 0x340 -+ 0x351: 0xcc, -+ // Block 0xe, offset 0x380 -+ 0x3ab: 0xcd, 0x3ac: 0xce, -+ 0x3bd: 0xcf, 0x3be: 0xd0, 0x3bf: 0xd1, -+ // Block 0xf, offset 0x3c0 -+ 0x3f2: 0xd2, -+ // Block 0x10, offset 0x400 -+ 0x43c: 0xd3, 0x43d: 0xd4, -+ // Block 0x11, offset 0x440 -+ 0x445: 0xd5, 0x446: 0xd6, 0x447: 0xd7, -+ 0x448: 0x55, 0x449: 0xd8, 0x44c: 0x55, 0x44d: 0xd9, -+ 0x45b: 0xda, 0x45c: 0xdb, 0x45d: 0xdc, 0x45e: 0xdd, 0x45f: 0xde, -+ 0x468: 0xdf, 0x469: 0xe0, 0x46a: 0xe1, -+ // Block 0x12, offset 0x480 -+ 0x480: 0xe2, 0x482: 0xcf, 0x484: 0xce, -+ 0x48a: 0xe3, 0x48b: 0xe4, -+ 0x493: 0xe5, -+ 0x4a0: 0x9c, 0x4a1: 0x9c, 0x4a2: 0x9c, 0x4a3: 0xe6, 0x4a4: 0x9c, 0x4a5: 0xe7, 0x4a6: 0x9c, 0x4a7: 0x9c, -+ 0x4a8: 0x9c, 0x4a9: 0x9c, 0x4aa: 0x9c, 0x4ab: 0x9c, 0x4ac: 0x9c, 0x4ad: 0x9c, 0x4ae: 0x9c, 0x4af: 0x9c, -+ 0x4b0: 0x9c, 0x4b1: 0xe8, 0x4b2: 0xe9, 0x4b3: 0x9c, 0x4b4: 0xea, 0x4b5: 0x9c, 0x4b6: 0x9c, 0x4b7: 0x9c, -+ 0x4b8: 0x0e, 0x4b9: 0x0e, 0x4ba: 0x0e, 0x4bb: 0xeb, 0x4bc: 0x9c, 0x4bd: 0x9c, 0x4be: 0x9c, 0x4bf: 0x9c, -+ // Block 0x13, offset 0x4c0 -+ 0x4c0: 0xec, 0x4c1: 0x55, 0x4c2: 0xed, 0x4c3: 0xee, 0x4c4: 0xef, 0x4c5: 0xf0, 0x4c6: 0xf1, -+ 0x4c9: 0xf2, 0x4cc: 0x55, 0x4cd: 0x55, 0x4ce: 0x55, 0x4cf: 0x55, -+ 0x4d0: 0x55, 0x4d1: 0x55, 0x4d2: 0x55, 0x4d3: 0x55, 0x4d4: 0x55, 0x4d5: 0x55, 0x4d6: 0x55, 0x4d7: 0x55, -+ 0x4d8: 0x55, 0x4d9: 0x55, 0x4da: 0x55, 0x4db: 0xf3, 0x4dc: 0x55, 0x4dd: 0xf4, 0x4de: 0x55, 0x4df: 0xf5, -+ 0x4e0: 0xf6, 0x4e1: 0xf7, 0x4e2: 0xf8, 0x4e4: 0x55, 0x4e5: 0x55, 0x4e6: 0x55, 0x4e7: 0x55, -+ 0x4e8: 0x55, 0x4e9: 0xf9, 0x4ea: 0xfa, 0x4eb: 0xfb, 0x4ec: 0x55, 0x4ed: 0x55, 0x4ee: 0xfc, 0x4ef: 0xfd, -+ 0x4ff: 0xfe, -+ // Block 0x14, offset 0x500 -+ 0x53f: 0xfe, -+ // Block 0x15, offset 0x540 -+ 0x550: 0x09, 0x551: 0x0a, 0x553: 0x0b, 0x556: 0x0c, -+ 0x55b: 0x0d, 0x55c: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, -+ 0x56f: 0x12, -+ 0x57f: 0x12, -+ // Block 0x16, offset 0x580 -+ 0x58f: 0x12, -+ 0x59f: 0x12, -+ 0x5af: 0x12, -+ 0x5bf: 0x12, -+ // Block 0x17, offset 0x5c0 -+ 0x5c0: 0xff, 0x5c1: 0xff, 0x5c2: 0xff, 0x5c3: 0xff, 0x5c4: 0x05, 0x5c5: 0x05, 0x5c6: 0x05, 0x5c7: 0x100, -+ 0x5c8: 0xff, 0x5c9: 0xff, 0x5ca: 0xff, 0x5cb: 0xff, 0x5cc: 0xff, 0x5cd: 0xff, 0x5ce: 0xff, 0x5cf: 0xff, -+ 0x5d0: 0xff, 0x5d1: 0xff, 0x5d2: 0xff, 0x5d3: 0xff, 0x5d4: 0xff, 0x5d5: 0xff, 0x5d6: 0xff, 0x5d7: 0xff, -+ 0x5d8: 0xff, 0x5d9: 0xff, 0x5da: 0xff, 0x5db: 0xff, 0x5dc: 0xff, 0x5dd: 0xff, 0x5de: 0xff, 0x5df: 0xff, -+ 0x5e0: 0xff, 0x5e1: 0xff, 0x5e2: 0xff, 0x5e3: 0xff, 0x5e4: 0xff, 0x5e5: 0xff, 0x5e6: 0xff, 0x5e7: 0xff, -+ 0x5e8: 0xff, 0x5e9: 0xff, 0x5ea: 0xff, 0x5eb: 0xff, 0x5ec: 0xff, 0x5ed: 0xff, 0x5ee: 0xff, 0x5ef: 0xff, -+ 0x5f0: 0xff, 0x5f1: 0xff, 0x5f2: 0xff, 0x5f3: 0xff, 0x5f4: 0xff, 0x5f5: 0xff, 0x5f6: 0xff, 0x5f7: 0xff, -+ 0x5f8: 0xff, 0x5f9: 0xff, 0x5fa: 0xff, 0x5fb: 0xff, 0x5fc: 0xff, 0x5fd: 0xff, 0x5fe: 0xff, 0x5ff: 0xff, -+ // Block 0x18, offset 0x600 -+ 0x60f: 0x12, -+ 0x61f: 0x12, -+ 0x620: 0x15, -+ 0x62f: 0x12, -+ 0x63f: 0x12, -+ // Block 0x19, offset 0x640 -+ 0x64f: 0x12, -+} -+ -+// Total table size 19960 bytes (19KiB); checksum: F50EF68C -diff --git a/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/bidi/trieval.go b/vendor/golang.org/x/text/unicode/bidi/trieval.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/composition.go b/vendor/golang.org/x/text/unicode/norm/composition.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo.go b/vendor/golang.org/x/text/unicode/norm/forminfo.go -old mode 100644 -new mode 100755 -index d69ccb4..487335d ---- a/vendor/golang.org/x/text/unicode/norm/forminfo.go -+++ b/vendor/golang.org/x/text/unicode/norm/forminfo.go -@@ -13,7 +13,7 @@ import "encoding/binary" - // a rune to a uint16. The values take two forms. For v >= 0x8000: - // bits - // 15: 1 (inverse of NFD_QC bit of qcInfo) --// 13..7: qcInfo (see below). isYesD is always true (no decompostion). -+// 13..7: qcInfo (see below). isYesD is always true (no decomposition). - // 6..0: ccc (compressed CCC value). - // For v < 0x8000, the respective rune has a decomposition and v is an index - // into a byte array of UTF-8 decomposition sequences and additional info and -diff --git a/vendor/golang.org/x/text/unicode/norm/input.go b/vendor/golang.org/x/text/unicode/norm/input.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/iter.go b/vendor/golang.org/x/text/unicode/norm/iter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/normalize.go b/vendor/golang.org/x/text/unicode/norm/normalize.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/readwriter.go b/vendor/golang.org/x/text/unicode/norm/readwriter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go -old mode 100644 -new mode 100755 -index 9115ef2..f65785e ---- a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go -+++ b/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go -@@ -1,7 +1,7 @@ - // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - --//go:build go1.16 --// +build go1.16 -+//go:build go1.16 && !go1.21 -+// +build go1.16,!go1.21 - - package norm - -diff --git a/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go -new file mode 100755 -index 0000000..e1858b8 ---- /dev/null -+++ b/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go -@@ -0,0 +1,7908 @@ -+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -+ -+//go:build go1.21 -+// +build go1.21 -+ -+package norm -+ -+import "sync" -+ -+const ( -+ // Version is the Unicode edition from which the tables are derived. -+ Version = "15.0.0" -+ -+ // MaxTransformChunkSize indicates the maximum number of bytes that Transform -+ // may need to write atomically for any Form. Making a destination buffer at -+ // least this size ensures that Transform can always make progress and that -+ // the user does not need to grow the buffer on an ErrShortDst. -+ MaxTransformChunkSize = 35 + maxNonStarters*4 -+) -+ -+var ccc = [56]uint8{ -+ 0, 1, 6, 7, 8, 9, 10, 11, -+ 12, 13, 14, 15, 16, 17, 18, 19, -+ 20, 21, 22, 23, 24, 25, 26, 27, -+ 28, 29, 30, 31, 32, 33, 34, 35, -+ 36, 84, 91, 103, 107, 118, 122, 129, -+ 130, 132, 202, 214, 216, 218, 220, 222, -+ 224, 226, 228, 230, 232, 233, 234, 240, -+} -+ -+const ( -+ firstMulti = 0x199A -+ firstCCC = 0x2DD5 -+ endMulti = 0x30A1 -+ firstLeadingCCC = 0x4AEF -+ firstCCCZeroExcept = 0x4BB9 -+ firstStarterWithNLead = 0x4BE0 -+ lastDecomp = 0x4BE2 -+ maxDecomp = 0x8000 -+) -+ -+// decomps: 19426 bytes -+var decomps = [...]byte{ -+ // Bytes 0 - 3f -+ 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, -+ 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, -+ 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, -+ 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, -+ 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, -+ 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, -+ 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, -+ 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, -+ // Bytes 40 - 7f -+ 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, -+ 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, -+ 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, -+ 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, -+ 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, -+ 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, -+ 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, -+ 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, -+ // Bytes 80 - bf -+ 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, -+ 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, -+ 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, -+ 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, -+ 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, -+ 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, -+ 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, -+ 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, -+ // Bytes c0 - ff -+ 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, -+ 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, -+ 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xA6, 0x42, -+ 0xC3, 0xB0, 0x42, 0xC3, 0xB8, 0x42, 0xC4, 0xA6, -+ 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, 0x42, 0xC5, -+ 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, 0x8E, 0x42, -+ 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, 0xC7, 0x80, -+ 0x42, 0xC7, 0x81, 0x42, 0xC7, 0x82, 0x42, 0xC8, -+ // Bytes 100 - 13f -+ 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, 0x42, -+ 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, 0x93, -+ 0x42, 0xC9, 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, -+ 0x96, 0x42, 0xC9, 0x97, 0x42, 0xC9, 0x98, 0x42, -+ 0xC9, 0x99, 0x42, 0xC9, 0x9B, 0x42, 0xC9, 0x9C, -+ 0x42, 0xC9, 0x9E, 0x42, 0xC9, 0x9F, 0x42, 0xC9, -+ 0xA0, 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA2, 0x42, -+ 0xC9, 0xA3, 0x42, 0xC9, 0xA4, 0x42, 0xC9, 0xA5, -+ // Bytes 140 - 17f -+ 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA7, 0x42, 0xC9, -+ 0xA8, 0x42, 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, -+ 0xC9, 0xAB, 0x42, 0xC9, 0xAC, 0x42, 0xC9, 0xAD, -+ 0x42, 0xC9, 0xAE, 0x42, 0xC9, 0xAF, 0x42, 0xC9, -+ 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, -+ 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, -+ 0x42, 0xC9, 0xB6, 0x42, 0xC9, 0xB7, 0x42, 0xC9, -+ 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, 0xBA, 0x42, -+ // Bytes 180 - 1bf -+ 0xC9, 0xBB, 0x42, 0xC9, 0xBD, 0x42, 0xC9, 0xBE, -+ 0x42, 0xCA, 0x80, 0x42, 0xCA, 0x81, 0x42, 0xCA, -+ 0x82, 0x42, 0xCA, 0x83, 0x42, 0xCA, 0x84, 0x42, -+ 0xCA, 0x88, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, -+ 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, -+ 0x8D, 0x42, 0xCA, 0x8E, 0x42, 0xCA, 0x8F, 0x42, -+ 0xCA, 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, -+ 0x42, 0xCA, 0x95, 0x42, 0xCA, 0x98, 0x42, 0xCA, -+ // Bytes 1c0 - 1ff -+ 0x99, 0x42, 0xCA, 0x9B, 0x42, 0xCA, 0x9C, 0x42, -+ 0xCA, 0x9D, 0x42, 0xCA, 0x9F, 0x42, 0xCA, 0xA1, -+ 0x42, 0xCA, 0xA2, 0x42, 0xCA, 0xA3, 0x42, 0xCA, -+ 0xA4, 0x42, 0xCA, 0xA5, 0x42, 0xCA, 0xA6, 0x42, -+ 0xCA, 0xA7, 0x42, 0xCA, 0xA8, 0x42, 0xCA, 0xA9, -+ 0x42, 0xCA, 0xAA, 0x42, 0xCA, 0xAB, 0x42, 0xCA, -+ 0xB9, 0x42, 0xCB, 0x90, 0x42, 0xCB, 0x91, 0x42, -+ 0xCE, 0x91, 0x42, 0xCE, 0x92, 0x42, 0xCE, 0x93, -+ // Bytes 200 - 23f -+ 0x42, 0xCE, 0x94, 0x42, 0xCE, 0x95, 0x42, 0xCE, -+ 0x96, 0x42, 0xCE, 0x97, 0x42, 0xCE, 0x98, 0x42, -+ 0xCE, 0x99, 0x42, 0xCE, 0x9A, 0x42, 0xCE, 0x9B, -+ 0x42, 0xCE, 0x9C, 0x42, 0xCE, 0x9D, 0x42, 0xCE, -+ 0x9E, 0x42, 0xCE, 0x9F, 0x42, 0xCE, 0xA0, 0x42, -+ 0xCE, 0xA1, 0x42, 0xCE, 0xA3, 0x42, 0xCE, 0xA4, -+ 0x42, 0xCE, 0xA5, 0x42, 0xCE, 0xA6, 0x42, 0xCE, -+ 0xA7, 0x42, 0xCE, 0xA8, 0x42, 0xCE, 0xA9, 0x42, -+ // Bytes 240 - 27f -+ 0xCE, 0xB1, 0x42, 0xCE, 0xB2, 0x42, 0xCE, 0xB3, -+ 0x42, 0xCE, 0xB4, 0x42, 0xCE, 0xB5, 0x42, 0xCE, -+ 0xB6, 0x42, 0xCE, 0xB7, 0x42, 0xCE, 0xB8, 0x42, -+ 0xCE, 0xB9, 0x42, 0xCE, 0xBA, 0x42, 0xCE, 0xBB, -+ 0x42, 0xCE, 0xBC, 0x42, 0xCE, 0xBD, 0x42, 0xCE, -+ 0xBE, 0x42, 0xCE, 0xBF, 0x42, 0xCF, 0x80, 0x42, -+ 0xCF, 0x81, 0x42, 0xCF, 0x82, 0x42, 0xCF, 0x83, -+ 0x42, 0xCF, 0x84, 0x42, 0xCF, 0x85, 0x42, 0xCF, -+ // Bytes 280 - 2bf -+ 0x86, 0x42, 0xCF, 0x87, 0x42, 0xCF, 0x88, 0x42, -+ 0xCF, 0x89, 0x42, 0xCF, 0x9C, 0x42, 0xCF, 0x9D, -+ 0x42, 0xD0, 0xB0, 0x42, 0xD0, 0xB1, 0x42, 0xD0, -+ 0xB2, 0x42, 0xD0, 0xB3, 0x42, 0xD0, 0xB4, 0x42, -+ 0xD0, 0xB5, 0x42, 0xD0, 0xB6, 0x42, 0xD0, 0xB7, -+ 0x42, 0xD0, 0xB8, 0x42, 0xD0, 0xBA, 0x42, 0xD0, -+ 0xBB, 0x42, 0xD0, 0xBC, 0x42, 0xD0, 0xBD, 0x42, -+ 0xD0, 0xBE, 0x42, 0xD0, 0xBF, 0x42, 0xD1, 0x80, -+ // Bytes 2c0 - 2ff -+ 0x42, 0xD1, 0x81, 0x42, 0xD1, 0x82, 0x42, 0xD1, -+ 0x83, 0x42, 0xD1, 0x84, 0x42, 0xD1, 0x85, 0x42, -+ 0xD1, 0x86, 0x42, 0xD1, 0x87, 0x42, 0xD1, 0x88, -+ 0x42, 0xD1, 0x8A, 0x42, 0xD1, 0x8B, 0x42, 0xD1, -+ 0x8C, 0x42, 0xD1, 0x8D, 0x42, 0xD1, 0x8E, 0x42, -+ 0xD1, 0x95, 0x42, 0xD1, 0x96, 0x42, 0xD1, 0x98, -+ 0x42, 0xD1, 0x9F, 0x42, 0xD2, 0x91, 0x42, 0xD2, -+ 0xAB, 0x42, 0xD2, 0xAF, 0x42, 0xD2, 0xB1, 0x42, -+ // Bytes 300 - 33f -+ 0xD3, 0x8F, 0x42, 0xD3, 0x99, 0x42, 0xD3, 0xA9, -+ 0x42, 0xD7, 0x90, 0x42, 0xD7, 0x91, 0x42, 0xD7, -+ 0x92, 0x42, 0xD7, 0x93, 0x42, 0xD7, 0x94, 0x42, -+ 0xD7, 0x9B, 0x42, 0xD7, 0x9C, 0x42, 0xD7, 0x9D, -+ 0x42, 0xD7, 0xA2, 0x42, 0xD7, 0xA8, 0x42, 0xD7, -+ 0xAA, 0x42, 0xD8, 0xA1, 0x42, 0xD8, 0xA7, 0x42, -+ 0xD8, 0xA8, 0x42, 0xD8, 0xA9, 0x42, 0xD8, 0xAA, -+ 0x42, 0xD8, 0xAB, 0x42, 0xD8, 0xAC, 0x42, 0xD8, -+ // Bytes 340 - 37f -+ 0xAD, 0x42, 0xD8, 0xAE, 0x42, 0xD8, 0xAF, 0x42, -+ 0xD8, 0xB0, 0x42, 0xD8, 0xB1, 0x42, 0xD8, 0xB2, -+ 0x42, 0xD8, 0xB3, 0x42, 0xD8, 0xB4, 0x42, 0xD8, -+ 0xB5, 0x42, 0xD8, 0xB6, 0x42, 0xD8, 0xB7, 0x42, -+ 0xD8, 0xB8, 0x42, 0xD8, 0xB9, 0x42, 0xD8, 0xBA, -+ 0x42, 0xD9, 0x81, 0x42, 0xD9, 0x82, 0x42, 0xD9, -+ 0x83, 0x42, 0xD9, 0x84, 0x42, 0xD9, 0x85, 0x42, -+ 0xD9, 0x86, 0x42, 0xD9, 0x87, 0x42, 0xD9, 0x88, -+ // Bytes 380 - 3bf -+ 0x42, 0xD9, 0x89, 0x42, 0xD9, 0x8A, 0x42, 0xD9, -+ 0xAE, 0x42, 0xD9, 0xAF, 0x42, 0xD9, 0xB1, 0x42, -+ 0xD9, 0xB9, 0x42, 0xD9, 0xBA, 0x42, 0xD9, 0xBB, -+ 0x42, 0xD9, 0xBE, 0x42, 0xD9, 0xBF, 0x42, 0xDA, -+ 0x80, 0x42, 0xDA, 0x83, 0x42, 0xDA, 0x84, 0x42, -+ 0xDA, 0x86, 0x42, 0xDA, 0x87, 0x42, 0xDA, 0x88, -+ 0x42, 0xDA, 0x8C, 0x42, 0xDA, 0x8D, 0x42, 0xDA, -+ 0x8E, 0x42, 0xDA, 0x91, 0x42, 0xDA, 0x98, 0x42, -+ // Bytes 3c0 - 3ff -+ 0xDA, 0xA1, 0x42, 0xDA, 0xA4, 0x42, 0xDA, 0xA6, -+ 0x42, 0xDA, 0xA9, 0x42, 0xDA, 0xAD, 0x42, 0xDA, -+ 0xAF, 0x42, 0xDA, 0xB1, 0x42, 0xDA, 0xB3, 0x42, -+ 0xDA, 0xBA, 0x42, 0xDA, 0xBB, 0x42, 0xDA, 0xBE, -+ 0x42, 0xDB, 0x81, 0x42, 0xDB, 0x85, 0x42, 0xDB, -+ 0x86, 0x42, 0xDB, 0x87, 0x42, 0xDB, 0x88, 0x42, -+ 0xDB, 0x89, 0x42, 0xDB, 0x8B, 0x42, 0xDB, 0x8C, -+ 0x42, 0xDB, 0x90, 0x42, 0xDB, 0x92, 0x43, 0xE0, -+ // Bytes 400 - 43f -+ 0xBC, 0x8B, 0x43, 0xE1, 0x83, 0x9C, 0x43, 0xE1, -+ 0x84, 0x80, 0x43, 0xE1, 0x84, 0x81, 0x43, 0xE1, -+ 0x84, 0x82, 0x43, 0xE1, 0x84, 0x83, 0x43, 0xE1, -+ 0x84, 0x84, 0x43, 0xE1, 0x84, 0x85, 0x43, 0xE1, -+ 0x84, 0x86, 0x43, 0xE1, 0x84, 0x87, 0x43, 0xE1, -+ 0x84, 0x88, 0x43, 0xE1, 0x84, 0x89, 0x43, 0xE1, -+ 0x84, 0x8A, 0x43, 0xE1, 0x84, 0x8B, 0x43, 0xE1, -+ 0x84, 0x8C, 0x43, 0xE1, 0x84, 0x8D, 0x43, 0xE1, -+ // Bytes 440 - 47f -+ 0x84, 0x8E, 0x43, 0xE1, 0x84, 0x8F, 0x43, 0xE1, -+ 0x84, 0x90, 0x43, 0xE1, 0x84, 0x91, 0x43, 0xE1, -+ 0x84, 0x92, 0x43, 0xE1, 0x84, 0x94, 0x43, 0xE1, -+ 0x84, 0x95, 0x43, 0xE1, 0x84, 0x9A, 0x43, 0xE1, -+ 0x84, 0x9C, 0x43, 0xE1, 0x84, 0x9D, 0x43, 0xE1, -+ 0x84, 0x9E, 0x43, 0xE1, 0x84, 0xA0, 0x43, 0xE1, -+ 0x84, 0xA1, 0x43, 0xE1, 0x84, 0xA2, 0x43, 0xE1, -+ 0x84, 0xA3, 0x43, 0xE1, 0x84, 0xA7, 0x43, 0xE1, -+ // Bytes 480 - 4bf -+ 0x84, 0xA9, 0x43, 0xE1, 0x84, 0xAB, 0x43, 0xE1, -+ 0x84, 0xAC, 0x43, 0xE1, 0x84, 0xAD, 0x43, 0xE1, -+ 0x84, 0xAE, 0x43, 0xE1, 0x84, 0xAF, 0x43, 0xE1, -+ 0x84, 0xB2, 0x43, 0xE1, 0x84, 0xB6, 0x43, 0xE1, -+ 0x85, 0x80, 0x43, 0xE1, 0x85, 0x87, 0x43, 0xE1, -+ 0x85, 0x8C, 0x43, 0xE1, 0x85, 0x97, 0x43, 0xE1, -+ 0x85, 0x98, 0x43, 0xE1, 0x85, 0x99, 0x43, 0xE1, -+ 0x85, 0xA0, 0x43, 0xE1, 0x86, 0x84, 0x43, 0xE1, -+ // Bytes 4c0 - 4ff -+ 0x86, 0x85, 0x43, 0xE1, 0x86, 0x88, 0x43, 0xE1, -+ 0x86, 0x91, 0x43, 0xE1, 0x86, 0x92, 0x43, 0xE1, -+ 0x86, 0x94, 0x43, 0xE1, 0x86, 0x9E, 0x43, 0xE1, -+ 0x86, 0xA1, 0x43, 0xE1, 0x87, 0x87, 0x43, 0xE1, -+ 0x87, 0x88, 0x43, 0xE1, 0x87, 0x8C, 0x43, 0xE1, -+ 0x87, 0x8E, 0x43, 0xE1, 0x87, 0x93, 0x43, 0xE1, -+ 0x87, 0x97, 0x43, 0xE1, 0x87, 0x99, 0x43, 0xE1, -+ 0x87, 0x9D, 0x43, 0xE1, 0x87, 0x9F, 0x43, 0xE1, -+ // Bytes 500 - 53f -+ 0x87, 0xB1, 0x43, 0xE1, 0x87, 0xB2, 0x43, 0xE1, -+ 0xB4, 0x82, 0x43, 0xE1, 0xB4, 0x96, 0x43, 0xE1, -+ 0xB4, 0x97, 0x43, 0xE1, 0xB4, 0x9C, 0x43, 0xE1, -+ 0xB4, 0x9D, 0x43, 0xE1, 0xB4, 0xA5, 0x43, 0xE1, -+ 0xB5, 0xBB, 0x43, 0xE1, 0xB6, 0x85, 0x43, 0xE1, -+ 0xB6, 0x91, 0x43, 0xE2, 0x80, 0x82, 0x43, 0xE2, -+ 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, 0xE2, -+ 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, 0xE2, -+ // Bytes 540 - 57f -+ 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, 0xE2, -+ 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, 0xE2, -+ 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, 0xE2, -+ 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, 0xE2, -+ 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, 0xE2, -+ 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, 0xE2, -+ 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, 0xE2, -+ 0xB1, 0xB1, 0x43, 0xE2, 0xB5, 0xA1, 0x43, 0xE3, -+ // Bytes 580 - 5bf -+ 0x80, 0x81, 0x43, 0xE3, 0x80, 0x82, 0x43, 0xE3, -+ 0x80, 0x88, 0x43, 0xE3, 0x80, 0x89, 0x43, 0xE3, -+ 0x80, 0x8A, 0x43, 0xE3, 0x80, 0x8B, 0x43, 0xE3, -+ 0x80, 0x8C, 0x43, 0xE3, 0x80, 0x8D, 0x43, 0xE3, -+ 0x80, 0x8E, 0x43, 0xE3, 0x80, 0x8F, 0x43, 0xE3, -+ 0x80, 0x90, 0x43, 0xE3, 0x80, 0x91, 0x43, 0xE3, -+ 0x80, 0x92, 0x43, 0xE3, 0x80, 0x94, 0x43, 0xE3, -+ 0x80, 0x95, 0x43, 0xE3, 0x80, 0x96, 0x43, 0xE3, -+ // Bytes 5c0 - 5ff -+ 0x80, 0x97, 0x43, 0xE3, 0x82, 0xA1, 0x43, 0xE3, -+ 0x82, 0xA2, 0x43, 0xE3, 0x82, 0xA3, 0x43, 0xE3, -+ 0x82, 0xA4, 0x43, 0xE3, 0x82, 0xA5, 0x43, 0xE3, -+ 0x82, 0xA6, 0x43, 0xE3, 0x82, 0xA7, 0x43, 0xE3, -+ 0x82, 0xA8, 0x43, 0xE3, 0x82, 0xA9, 0x43, 0xE3, -+ 0x82, 0xAA, 0x43, 0xE3, 0x82, 0xAB, 0x43, 0xE3, -+ 0x82, 0xAD, 0x43, 0xE3, 0x82, 0xAF, 0x43, 0xE3, -+ 0x82, 0xB1, 0x43, 0xE3, 0x82, 0xB3, 0x43, 0xE3, -+ // Bytes 600 - 63f -+ 0x82, 0xB5, 0x43, 0xE3, 0x82, 0xB7, 0x43, 0xE3, -+ 0x82, 0xB9, 0x43, 0xE3, 0x82, 0xBB, 0x43, 0xE3, -+ 0x82, 0xBD, 0x43, 0xE3, 0x82, 0xBF, 0x43, 0xE3, -+ 0x83, 0x81, 0x43, 0xE3, 0x83, 0x83, 0x43, 0xE3, -+ 0x83, 0x84, 0x43, 0xE3, 0x83, 0x86, 0x43, 0xE3, -+ 0x83, 0x88, 0x43, 0xE3, 0x83, 0x8A, 0x43, 0xE3, -+ 0x83, 0x8B, 0x43, 0xE3, 0x83, 0x8C, 0x43, 0xE3, -+ 0x83, 0x8D, 0x43, 0xE3, 0x83, 0x8E, 0x43, 0xE3, -+ // Bytes 640 - 67f -+ 0x83, 0x8F, 0x43, 0xE3, 0x83, 0x92, 0x43, 0xE3, -+ 0x83, 0x95, 0x43, 0xE3, 0x83, 0x98, 0x43, 0xE3, -+ 0x83, 0x9B, 0x43, 0xE3, 0x83, 0x9E, 0x43, 0xE3, -+ 0x83, 0x9F, 0x43, 0xE3, 0x83, 0xA0, 0x43, 0xE3, -+ 0x83, 0xA1, 0x43, 0xE3, 0x83, 0xA2, 0x43, 0xE3, -+ 0x83, 0xA3, 0x43, 0xE3, 0x83, 0xA4, 0x43, 0xE3, -+ 0x83, 0xA5, 0x43, 0xE3, 0x83, 0xA6, 0x43, 0xE3, -+ 0x83, 0xA7, 0x43, 0xE3, 0x83, 0xA8, 0x43, 0xE3, -+ // Bytes 680 - 6bf -+ 0x83, 0xA9, 0x43, 0xE3, 0x83, 0xAA, 0x43, 0xE3, -+ 0x83, 0xAB, 0x43, 0xE3, 0x83, 0xAC, 0x43, 0xE3, -+ 0x83, 0xAD, 0x43, 0xE3, 0x83, 0xAF, 0x43, 0xE3, -+ 0x83, 0xB0, 0x43, 0xE3, 0x83, 0xB1, 0x43, 0xE3, -+ 0x83, 0xB2, 0x43, 0xE3, 0x83, 0xB3, 0x43, 0xE3, -+ 0x83, 0xBB, 0x43, 0xE3, 0x83, 0xBC, 0x43, 0xE3, -+ 0x92, 0x9E, 0x43, 0xE3, 0x92, 0xB9, 0x43, 0xE3, -+ 0x92, 0xBB, 0x43, 0xE3, 0x93, 0x9F, 0x43, 0xE3, -+ // Bytes 6c0 - 6ff -+ 0x94, 0x95, 0x43, 0xE3, 0x9B, 0xAE, 0x43, 0xE3, -+ 0x9B, 0xBC, 0x43, 0xE3, 0x9E, 0x81, 0x43, 0xE3, -+ 0xA0, 0xAF, 0x43, 0xE3, 0xA1, 0xA2, 0x43, 0xE3, -+ 0xA1, 0xBC, 0x43, 0xE3, 0xA3, 0x87, 0x43, 0xE3, -+ 0xA3, 0xA3, 0x43, 0xE3, 0xA4, 0x9C, 0x43, 0xE3, -+ 0xA4, 0xBA, 0x43, 0xE3, 0xA8, 0xAE, 0x43, 0xE3, -+ 0xA9, 0xAC, 0x43, 0xE3, 0xAB, 0xA4, 0x43, 0xE3, -+ 0xAC, 0x88, 0x43, 0xE3, 0xAC, 0x99, 0x43, 0xE3, -+ // Bytes 700 - 73f -+ 0xAD, 0x89, 0x43, 0xE3, 0xAE, 0x9D, 0x43, 0xE3, -+ 0xB0, 0x98, 0x43, 0xE3, 0xB1, 0x8E, 0x43, 0xE3, -+ 0xB4, 0xB3, 0x43, 0xE3, 0xB6, 0x96, 0x43, 0xE3, -+ 0xBA, 0xAC, 0x43, 0xE3, 0xBA, 0xB8, 0x43, 0xE3, -+ 0xBC, 0x9B, 0x43, 0xE3, 0xBF, 0xBC, 0x43, 0xE4, -+ 0x80, 0x88, 0x43, 0xE4, 0x80, 0x98, 0x43, 0xE4, -+ 0x80, 0xB9, 0x43, 0xE4, 0x81, 0x86, 0x43, 0xE4, -+ 0x82, 0x96, 0x43, 0xE4, 0x83, 0xA3, 0x43, 0xE4, -+ // Bytes 740 - 77f -+ 0x84, 0xAF, 0x43, 0xE4, 0x88, 0x82, 0x43, 0xE4, -+ 0x88, 0xA7, 0x43, 0xE4, 0x8A, 0xA0, 0x43, 0xE4, -+ 0x8C, 0x81, 0x43, 0xE4, 0x8C, 0xB4, 0x43, 0xE4, -+ 0x8D, 0x99, 0x43, 0xE4, 0x8F, 0x95, 0x43, 0xE4, -+ 0x8F, 0x99, 0x43, 0xE4, 0x90, 0x8B, 0x43, 0xE4, -+ 0x91, 0xAB, 0x43, 0xE4, 0x94, 0xAB, 0x43, 0xE4, -+ 0x95, 0x9D, 0x43, 0xE4, 0x95, 0xA1, 0x43, 0xE4, -+ 0x95, 0xAB, 0x43, 0xE4, 0x97, 0x97, 0x43, 0xE4, -+ // Bytes 780 - 7bf -+ 0x97, 0xB9, 0x43, 0xE4, 0x98, 0xB5, 0x43, 0xE4, -+ 0x9A, 0xBE, 0x43, 0xE4, 0x9B, 0x87, 0x43, 0xE4, -+ 0xA6, 0x95, 0x43, 0xE4, 0xA7, 0xA6, 0x43, 0xE4, -+ 0xA9, 0xAE, 0x43, 0xE4, 0xA9, 0xB6, 0x43, 0xE4, -+ 0xAA, 0xB2, 0x43, 0xE4, 0xAC, 0xB3, 0x43, 0xE4, -+ 0xAF, 0x8E, 0x43, 0xE4, 0xB3, 0x8E, 0x43, 0xE4, -+ 0xB3, 0xAD, 0x43, 0xE4, 0xB3, 0xB8, 0x43, 0xE4, -+ 0xB5, 0x96, 0x43, 0xE4, 0xB8, 0x80, 0x43, 0xE4, -+ // Bytes 7c0 - 7ff -+ 0xB8, 0x81, 0x43, 0xE4, 0xB8, 0x83, 0x43, 0xE4, -+ 0xB8, 0x89, 0x43, 0xE4, 0xB8, 0x8A, 0x43, 0xE4, -+ 0xB8, 0x8B, 0x43, 0xE4, 0xB8, 0x8D, 0x43, 0xE4, -+ 0xB8, 0x99, 0x43, 0xE4, 0xB8, 0xA6, 0x43, 0xE4, -+ 0xB8, 0xA8, 0x43, 0xE4, 0xB8, 0xAD, 0x43, 0xE4, -+ 0xB8, 0xB2, 0x43, 0xE4, 0xB8, 0xB6, 0x43, 0xE4, -+ 0xB8, 0xB8, 0x43, 0xE4, 0xB8, 0xB9, 0x43, 0xE4, -+ 0xB8, 0xBD, 0x43, 0xE4, 0xB8, 0xBF, 0x43, 0xE4, -+ // Bytes 800 - 83f -+ 0xB9, 0x81, 0x43, 0xE4, 0xB9, 0x99, 0x43, 0xE4, -+ 0xB9, 0x9D, 0x43, 0xE4, 0xBA, 0x82, 0x43, 0xE4, -+ 0xBA, 0x85, 0x43, 0xE4, 0xBA, 0x86, 0x43, 0xE4, -+ 0xBA, 0x8C, 0x43, 0xE4, 0xBA, 0x94, 0x43, 0xE4, -+ 0xBA, 0xA0, 0x43, 0xE4, 0xBA, 0xA4, 0x43, 0xE4, -+ 0xBA, 0xAE, 0x43, 0xE4, 0xBA, 0xBA, 0x43, 0xE4, -+ 0xBB, 0x80, 0x43, 0xE4, 0xBB, 0x8C, 0x43, 0xE4, -+ 0xBB, 0xA4, 0x43, 0xE4, 0xBC, 0x81, 0x43, 0xE4, -+ // Bytes 840 - 87f -+ 0xBC, 0x91, 0x43, 0xE4, 0xBD, 0xA0, 0x43, 0xE4, -+ 0xBE, 0x80, 0x43, 0xE4, 0xBE, 0x86, 0x43, 0xE4, -+ 0xBE, 0x8B, 0x43, 0xE4, 0xBE, 0xAE, 0x43, 0xE4, -+ 0xBE, 0xBB, 0x43, 0xE4, 0xBE, 0xBF, 0x43, 0xE5, -+ 0x80, 0x82, 0x43, 0xE5, 0x80, 0xAB, 0x43, 0xE5, -+ 0x81, 0xBA, 0x43, 0xE5, 0x82, 0x99, 0x43, 0xE5, -+ 0x83, 0x8F, 0x43, 0xE5, 0x83, 0x9A, 0x43, 0xE5, -+ 0x83, 0xA7, 0x43, 0xE5, 0x84, 0xAA, 0x43, 0xE5, -+ // Bytes 880 - 8bf -+ 0x84, 0xBF, 0x43, 0xE5, 0x85, 0x80, 0x43, 0xE5, -+ 0x85, 0x85, 0x43, 0xE5, 0x85, 0x8D, 0x43, 0xE5, -+ 0x85, 0x94, 0x43, 0xE5, 0x85, 0xA4, 0x43, 0xE5, -+ 0x85, 0xA5, 0x43, 0xE5, 0x85, 0xA7, 0x43, 0xE5, -+ 0x85, 0xA8, 0x43, 0xE5, 0x85, 0xA9, 0x43, 0xE5, -+ 0x85, 0xAB, 0x43, 0xE5, 0x85, 0xAD, 0x43, 0xE5, -+ 0x85, 0xB7, 0x43, 0xE5, 0x86, 0x80, 0x43, 0xE5, -+ 0x86, 0x82, 0x43, 0xE5, 0x86, 0x8D, 0x43, 0xE5, -+ // Bytes 8c0 - 8ff -+ 0x86, 0x92, 0x43, 0xE5, 0x86, 0x95, 0x43, 0xE5, -+ 0x86, 0x96, 0x43, 0xE5, 0x86, 0x97, 0x43, 0xE5, -+ 0x86, 0x99, 0x43, 0xE5, 0x86, 0xA4, 0x43, 0xE5, -+ 0x86, 0xAB, 0x43, 0xE5, 0x86, 0xAC, 0x43, 0xE5, -+ 0x86, 0xB5, 0x43, 0xE5, 0x86, 0xB7, 0x43, 0xE5, -+ 0x87, 0x89, 0x43, 0xE5, 0x87, 0x8C, 0x43, 0xE5, -+ 0x87, 0x9C, 0x43, 0xE5, 0x87, 0x9E, 0x43, 0xE5, -+ 0x87, 0xA0, 0x43, 0xE5, 0x87, 0xB5, 0x43, 0xE5, -+ // Bytes 900 - 93f -+ 0x88, 0x80, 0x43, 0xE5, 0x88, 0x83, 0x43, 0xE5, -+ 0x88, 0x87, 0x43, 0xE5, 0x88, 0x97, 0x43, 0xE5, -+ 0x88, 0x9D, 0x43, 0xE5, 0x88, 0xA9, 0x43, 0xE5, -+ 0x88, 0xBA, 0x43, 0xE5, 0x88, 0xBB, 0x43, 0xE5, -+ 0x89, 0x86, 0x43, 0xE5, 0x89, 0x8D, 0x43, 0xE5, -+ 0x89, 0xB2, 0x43, 0xE5, 0x89, 0xB7, 0x43, 0xE5, -+ 0x8A, 0x89, 0x43, 0xE5, 0x8A, 0x9B, 0x43, 0xE5, -+ 0x8A, 0xA3, 0x43, 0xE5, 0x8A, 0xB3, 0x43, 0xE5, -+ // Bytes 940 - 97f -+ 0x8A, 0xB4, 0x43, 0xE5, 0x8B, 0x87, 0x43, 0xE5, -+ 0x8B, 0x89, 0x43, 0xE5, 0x8B, 0x92, 0x43, 0xE5, -+ 0x8B, 0x9E, 0x43, 0xE5, 0x8B, 0xA4, 0x43, 0xE5, -+ 0x8B, 0xB5, 0x43, 0xE5, 0x8B, 0xB9, 0x43, 0xE5, -+ 0x8B, 0xBA, 0x43, 0xE5, 0x8C, 0x85, 0x43, 0xE5, -+ 0x8C, 0x86, 0x43, 0xE5, 0x8C, 0x95, 0x43, 0xE5, -+ 0x8C, 0x97, 0x43, 0xE5, 0x8C, 0x9A, 0x43, 0xE5, -+ 0x8C, 0xB8, 0x43, 0xE5, 0x8C, 0xBB, 0x43, 0xE5, -+ // Bytes 980 - 9bf -+ 0x8C, 0xBF, 0x43, 0xE5, 0x8D, 0x81, 0x43, 0xE5, -+ 0x8D, 0x84, 0x43, 0xE5, 0x8D, 0x85, 0x43, 0xE5, -+ 0x8D, 0x89, 0x43, 0xE5, 0x8D, 0x91, 0x43, 0xE5, -+ 0x8D, 0x94, 0x43, 0xE5, 0x8D, 0x9A, 0x43, 0xE5, -+ 0x8D, 0x9C, 0x43, 0xE5, 0x8D, 0xA9, 0x43, 0xE5, -+ 0x8D, 0xB0, 0x43, 0xE5, 0x8D, 0xB3, 0x43, 0xE5, -+ 0x8D, 0xB5, 0x43, 0xE5, 0x8D, 0xBD, 0x43, 0xE5, -+ 0x8D, 0xBF, 0x43, 0xE5, 0x8E, 0x82, 0x43, 0xE5, -+ // Bytes 9c0 - 9ff -+ 0x8E, 0xB6, 0x43, 0xE5, 0x8F, 0x83, 0x43, 0xE5, -+ 0x8F, 0x88, 0x43, 0xE5, 0x8F, 0x8A, 0x43, 0xE5, -+ 0x8F, 0x8C, 0x43, 0xE5, 0x8F, 0x9F, 0x43, 0xE5, -+ 0x8F, 0xA3, 0x43, 0xE5, 0x8F, 0xA5, 0x43, 0xE5, -+ 0x8F, 0xAB, 0x43, 0xE5, 0x8F, 0xAF, 0x43, 0xE5, -+ 0x8F, 0xB1, 0x43, 0xE5, 0x8F, 0xB3, 0x43, 0xE5, -+ 0x90, 0x86, 0x43, 0xE5, 0x90, 0x88, 0x43, 0xE5, -+ 0x90, 0x8D, 0x43, 0xE5, 0x90, 0x8F, 0x43, 0xE5, -+ // Bytes a00 - a3f -+ 0x90, 0x9D, 0x43, 0xE5, 0x90, 0xB8, 0x43, 0xE5, -+ 0x90, 0xB9, 0x43, 0xE5, 0x91, 0x82, 0x43, 0xE5, -+ 0x91, 0x88, 0x43, 0xE5, 0x91, 0xA8, 0x43, 0xE5, -+ 0x92, 0x9E, 0x43, 0xE5, 0x92, 0xA2, 0x43, 0xE5, -+ 0x92, 0xBD, 0x43, 0xE5, 0x93, 0xB6, 0x43, 0xE5, -+ 0x94, 0x90, 0x43, 0xE5, 0x95, 0x8F, 0x43, 0xE5, -+ 0x95, 0x93, 0x43, 0xE5, 0x95, 0x95, 0x43, 0xE5, -+ 0x95, 0xA3, 0x43, 0xE5, 0x96, 0x84, 0x43, 0xE5, -+ // Bytes a40 - a7f -+ 0x96, 0x87, 0x43, 0xE5, 0x96, 0x99, 0x43, 0xE5, -+ 0x96, 0x9D, 0x43, 0xE5, 0x96, 0xAB, 0x43, 0xE5, -+ 0x96, 0xB3, 0x43, 0xE5, 0x96, 0xB6, 0x43, 0xE5, -+ 0x97, 0x80, 0x43, 0xE5, 0x97, 0x82, 0x43, 0xE5, -+ 0x97, 0xA2, 0x43, 0xE5, 0x98, 0x86, 0x43, 0xE5, -+ 0x99, 0x91, 0x43, 0xE5, 0x99, 0xA8, 0x43, 0xE5, -+ 0x99, 0xB4, 0x43, 0xE5, 0x9B, 0x97, 0x43, 0xE5, -+ 0x9B, 0x9B, 0x43, 0xE5, 0x9B, 0xB9, 0x43, 0xE5, -+ // Bytes a80 - abf -+ 0x9C, 0x96, 0x43, 0xE5, 0x9C, 0x97, 0x43, 0xE5, -+ 0x9C, 0x9F, 0x43, 0xE5, 0x9C, 0xB0, 0x43, 0xE5, -+ 0x9E, 0x8B, 0x43, 0xE5, 0x9F, 0x8E, 0x43, 0xE5, -+ 0x9F, 0xB4, 0x43, 0xE5, 0xA0, 0x8D, 0x43, 0xE5, -+ 0xA0, 0xB1, 0x43, 0xE5, 0xA0, 0xB2, 0x43, 0xE5, -+ 0xA1, 0x80, 0x43, 0xE5, 0xA1, 0x9A, 0x43, 0xE5, -+ 0xA1, 0x9E, 0x43, 0xE5, 0xA2, 0xA8, 0x43, 0xE5, -+ 0xA2, 0xAC, 0x43, 0xE5, 0xA2, 0xB3, 0x43, 0xE5, -+ // Bytes ac0 - aff -+ 0xA3, 0x98, 0x43, 0xE5, 0xA3, 0x9F, 0x43, 0xE5, -+ 0xA3, 0xAB, 0x43, 0xE5, 0xA3, 0xAE, 0x43, 0xE5, -+ 0xA3, 0xB0, 0x43, 0xE5, 0xA3, 0xB2, 0x43, 0xE5, -+ 0xA3, 0xB7, 0x43, 0xE5, 0xA4, 0x82, 0x43, 0xE5, -+ 0xA4, 0x86, 0x43, 0xE5, 0xA4, 0x8A, 0x43, 0xE5, -+ 0xA4, 0x95, 0x43, 0xE5, 0xA4, 0x9A, 0x43, 0xE5, -+ 0xA4, 0x9C, 0x43, 0xE5, 0xA4, 0xA2, 0x43, 0xE5, -+ 0xA4, 0xA7, 0x43, 0xE5, 0xA4, 0xA9, 0x43, 0xE5, -+ // Bytes b00 - b3f -+ 0xA5, 0x84, 0x43, 0xE5, 0xA5, 0x88, 0x43, 0xE5, -+ 0xA5, 0x91, 0x43, 0xE5, 0xA5, 0x94, 0x43, 0xE5, -+ 0xA5, 0xA2, 0x43, 0xE5, 0xA5, 0xB3, 0x43, 0xE5, -+ 0xA7, 0x98, 0x43, 0xE5, 0xA7, 0xAC, 0x43, 0xE5, -+ 0xA8, 0x9B, 0x43, 0xE5, 0xA8, 0xA7, 0x43, 0xE5, -+ 0xA9, 0xA2, 0x43, 0xE5, 0xA9, 0xA6, 0x43, 0xE5, -+ 0xAA, 0xB5, 0x43, 0xE5, 0xAC, 0x88, 0x43, 0xE5, -+ 0xAC, 0xA8, 0x43, 0xE5, 0xAC, 0xBE, 0x43, 0xE5, -+ // Bytes b40 - b7f -+ 0xAD, 0x90, 0x43, 0xE5, 0xAD, 0x97, 0x43, 0xE5, -+ 0xAD, 0xA6, 0x43, 0xE5, 0xAE, 0x80, 0x43, 0xE5, -+ 0xAE, 0x85, 0x43, 0xE5, 0xAE, 0x97, 0x43, 0xE5, -+ 0xAF, 0x83, 0x43, 0xE5, 0xAF, 0x98, 0x43, 0xE5, -+ 0xAF, 0xA7, 0x43, 0xE5, 0xAF, 0xAE, 0x43, 0xE5, -+ 0xAF, 0xB3, 0x43, 0xE5, 0xAF, 0xB8, 0x43, 0xE5, -+ 0xAF, 0xBF, 0x43, 0xE5, 0xB0, 0x86, 0x43, 0xE5, -+ 0xB0, 0x8F, 0x43, 0xE5, 0xB0, 0xA2, 0x43, 0xE5, -+ // Bytes b80 - bbf -+ 0xB0, 0xB8, 0x43, 0xE5, 0xB0, 0xBF, 0x43, 0xE5, -+ 0xB1, 0xA0, 0x43, 0xE5, 0xB1, 0xA2, 0x43, 0xE5, -+ 0xB1, 0xA4, 0x43, 0xE5, 0xB1, 0xA5, 0x43, 0xE5, -+ 0xB1, 0xAE, 0x43, 0xE5, 0xB1, 0xB1, 0x43, 0xE5, -+ 0xB2, 0x8D, 0x43, 0xE5, 0xB3, 0x80, 0x43, 0xE5, -+ 0xB4, 0x99, 0x43, 0xE5, 0xB5, 0x83, 0x43, 0xE5, -+ 0xB5, 0x90, 0x43, 0xE5, 0xB5, 0xAB, 0x43, 0xE5, -+ 0xB5, 0xAE, 0x43, 0xE5, 0xB5, 0xBC, 0x43, 0xE5, -+ // Bytes bc0 - bff -+ 0xB6, 0xB2, 0x43, 0xE5, 0xB6, 0xBA, 0x43, 0xE5, -+ 0xB7, 0x9B, 0x43, 0xE5, 0xB7, 0xA1, 0x43, 0xE5, -+ 0xB7, 0xA2, 0x43, 0xE5, 0xB7, 0xA5, 0x43, 0xE5, -+ 0xB7, 0xA6, 0x43, 0xE5, 0xB7, 0xB1, 0x43, 0xE5, -+ 0xB7, 0xBD, 0x43, 0xE5, 0xB7, 0xBE, 0x43, 0xE5, -+ 0xB8, 0xA8, 0x43, 0xE5, 0xB8, 0xBD, 0x43, 0xE5, -+ 0xB9, 0xA9, 0x43, 0xE5, 0xB9, 0xB2, 0x43, 0xE5, -+ 0xB9, 0xB4, 0x43, 0xE5, 0xB9, 0xBA, 0x43, 0xE5, -+ // Bytes c00 - c3f -+ 0xB9, 0xBC, 0x43, 0xE5, 0xB9, 0xBF, 0x43, 0xE5, -+ 0xBA, 0xA6, 0x43, 0xE5, 0xBA, 0xB0, 0x43, 0xE5, -+ 0xBA, 0xB3, 0x43, 0xE5, 0xBA, 0xB6, 0x43, 0xE5, -+ 0xBB, 0x89, 0x43, 0xE5, 0xBB, 0x8A, 0x43, 0xE5, -+ 0xBB, 0x92, 0x43, 0xE5, 0xBB, 0x93, 0x43, 0xE5, -+ 0xBB, 0x99, 0x43, 0xE5, 0xBB, 0xAC, 0x43, 0xE5, -+ 0xBB, 0xB4, 0x43, 0xE5, 0xBB, 0xBE, 0x43, 0xE5, -+ 0xBC, 0x84, 0x43, 0xE5, 0xBC, 0x8B, 0x43, 0xE5, -+ // Bytes c40 - c7f -+ 0xBC, 0x93, 0x43, 0xE5, 0xBC, 0xA2, 0x43, 0xE5, -+ 0xBD, 0x90, 0x43, 0xE5, 0xBD, 0x93, 0x43, 0xE5, -+ 0xBD, 0xA1, 0x43, 0xE5, 0xBD, 0xA2, 0x43, 0xE5, -+ 0xBD, 0xA9, 0x43, 0xE5, 0xBD, 0xAB, 0x43, 0xE5, -+ 0xBD, 0xB3, 0x43, 0xE5, 0xBE, 0x8B, 0x43, 0xE5, -+ 0xBE, 0x8C, 0x43, 0xE5, 0xBE, 0x97, 0x43, 0xE5, -+ 0xBE, 0x9A, 0x43, 0xE5, 0xBE, 0xA9, 0x43, 0xE5, -+ 0xBE, 0xAD, 0x43, 0xE5, 0xBF, 0x83, 0x43, 0xE5, -+ // Bytes c80 - cbf -+ 0xBF, 0x8D, 0x43, 0xE5, 0xBF, 0x97, 0x43, 0xE5, -+ 0xBF, 0xB5, 0x43, 0xE5, 0xBF, 0xB9, 0x43, 0xE6, -+ 0x80, 0x92, 0x43, 0xE6, 0x80, 0x9C, 0x43, 0xE6, -+ 0x81, 0xB5, 0x43, 0xE6, 0x82, 0x81, 0x43, 0xE6, -+ 0x82, 0x94, 0x43, 0xE6, 0x83, 0x87, 0x43, 0xE6, -+ 0x83, 0x98, 0x43, 0xE6, 0x83, 0xA1, 0x43, 0xE6, -+ 0x84, 0x88, 0x43, 0xE6, 0x85, 0x84, 0x43, 0xE6, -+ 0x85, 0x88, 0x43, 0xE6, 0x85, 0x8C, 0x43, 0xE6, -+ // Bytes cc0 - cff -+ 0x85, 0x8E, 0x43, 0xE6, 0x85, 0xA0, 0x43, 0xE6, -+ 0x85, 0xA8, 0x43, 0xE6, 0x85, 0xBA, 0x43, 0xE6, -+ 0x86, 0x8E, 0x43, 0xE6, 0x86, 0x90, 0x43, 0xE6, -+ 0x86, 0xA4, 0x43, 0xE6, 0x86, 0xAF, 0x43, 0xE6, -+ 0x86, 0xB2, 0x43, 0xE6, 0x87, 0x9E, 0x43, 0xE6, -+ 0x87, 0xB2, 0x43, 0xE6, 0x87, 0xB6, 0x43, 0xE6, -+ 0x88, 0x80, 0x43, 0xE6, 0x88, 0x88, 0x43, 0xE6, -+ 0x88, 0x90, 0x43, 0xE6, 0x88, 0x9B, 0x43, 0xE6, -+ // Bytes d00 - d3f -+ 0x88, 0xAE, 0x43, 0xE6, 0x88, 0xB4, 0x43, 0xE6, -+ 0x88, 0xB6, 0x43, 0xE6, 0x89, 0x8B, 0x43, 0xE6, -+ 0x89, 0x93, 0x43, 0xE6, 0x89, 0x9D, 0x43, 0xE6, -+ 0x8A, 0x95, 0x43, 0xE6, 0x8A, 0xB1, 0x43, 0xE6, -+ 0x8B, 0x89, 0x43, 0xE6, 0x8B, 0x8F, 0x43, 0xE6, -+ 0x8B, 0x93, 0x43, 0xE6, 0x8B, 0x94, 0x43, 0xE6, -+ 0x8B, 0xBC, 0x43, 0xE6, 0x8B, 0xBE, 0x43, 0xE6, -+ 0x8C, 0x87, 0x43, 0xE6, 0x8C, 0xBD, 0x43, 0xE6, -+ // Bytes d40 - d7f -+ 0x8D, 0x90, 0x43, 0xE6, 0x8D, 0x95, 0x43, 0xE6, -+ 0x8D, 0xA8, 0x43, 0xE6, 0x8D, 0xBB, 0x43, 0xE6, -+ 0x8E, 0x83, 0x43, 0xE6, 0x8E, 0xA0, 0x43, 0xE6, -+ 0x8E, 0xA9, 0x43, 0xE6, 0x8F, 0x84, 0x43, 0xE6, -+ 0x8F, 0x85, 0x43, 0xE6, 0x8F, 0xA4, 0x43, 0xE6, -+ 0x90, 0x9C, 0x43, 0xE6, 0x90, 0xA2, 0x43, 0xE6, -+ 0x91, 0x92, 0x43, 0xE6, 0x91, 0xA9, 0x43, 0xE6, -+ 0x91, 0xB7, 0x43, 0xE6, 0x91, 0xBE, 0x43, 0xE6, -+ // Bytes d80 - dbf -+ 0x92, 0x9A, 0x43, 0xE6, 0x92, 0x9D, 0x43, 0xE6, -+ 0x93, 0x84, 0x43, 0xE6, 0x94, 0xAF, 0x43, 0xE6, -+ 0x94, 0xB4, 0x43, 0xE6, 0x95, 0x8F, 0x43, 0xE6, -+ 0x95, 0x96, 0x43, 0xE6, 0x95, 0xAC, 0x43, 0xE6, -+ 0x95, 0xB8, 0x43, 0xE6, 0x96, 0x87, 0x43, 0xE6, -+ 0x96, 0x97, 0x43, 0xE6, 0x96, 0x99, 0x43, 0xE6, -+ 0x96, 0xA4, 0x43, 0xE6, 0x96, 0xB0, 0x43, 0xE6, -+ 0x96, 0xB9, 0x43, 0xE6, 0x97, 0x85, 0x43, 0xE6, -+ // Bytes dc0 - dff -+ 0x97, 0xA0, 0x43, 0xE6, 0x97, 0xA2, 0x43, 0xE6, -+ 0x97, 0xA3, 0x43, 0xE6, 0x97, 0xA5, 0x43, 0xE6, -+ 0x98, 0x93, 0x43, 0xE6, 0x98, 0xA0, 0x43, 0xE6, -+ 0x99, 0x89, 0x43, 0xE6, 0x99, 0xB4, 0x43, 0xE6, -+ 0x9A, 0x88, 0x43, 0xE6, 0x9A, 0x91, 0x43, 0xE6, -+ 0x9A, 0x9C, 0x43, 0xE6, 0x9A, 0xB4, 0x43, 0xE6, -+ 0x9B, 0x86, 0x43, 0xE6, 0x9B, 0xB0, 0x43, 0xE6, -+ 0x9B, 0xB4, 0x43, 0xE6, 0x9B, 0xB8, 0x43, 0xE6, -+ // Bytes e00 - e3f -+ 0x9C, 0x80, 0x43, 0xE6, 0x9C, 0x88, 0x43, 0xE6, -+ 0x9C, 0x89, 0x43, 0xE6, 0x9C, 0x97, 0x43, 0xE6, -+ 0x9C, 0x9B, 0x43, 0xE6, 0x9C, 0xA1, 0x43, 0xE6, -+ 0x9C, 0xA8, 0x43, 0xE6, 0x9D, 0x8E, 0x43, 0xE6, -+ 0x9D, 0x93, 0x43, 0xE6, 0x9D, 0x96, 0x43, 0xE6, -+ 0x9D, 0x9E, 0x43, 0xE6, 0x9D, 0xBB, 0x43, 0xE6, -+ 0x9E, 0x85, 0x43, 0xE6, 0x9E, 0x97, 0x43, 0xE6, -+ 0x9F, 0xB3, 0x43, 0xE6, 0x9F, 0xBA, 0x43, 0xE6, -+ // Bytes e40 - e7f -+ 0xA0, 0x97, 0x43, 0xE6, 0xA0, 0x9F, 0x43, 0xE6, -+ 0xA0, 0xAA, 0x43, 0xE6, 0xA1, 0x92, 0x43, 0xE6, -+ 0xA2, 0x81, 0x43, 0xE6, 0xA2, 0x85, 0x43, 0xE6, -+ 0xA2, 0x8E, 0x43, 0xE6, 0xA2, 0xA8, 0x43, 0xE6, -+ 0xA4, 0x94, 0x43, 0xE6, 0xA5, 0x82, 0x43, 0xE6, -+ 0xA6, 0xA3, 0x43, 0xE6, 0xA7, 0xAA, 0x43, 0xE6, -+ 0xA8, 0x82, 0x43, 0xE6, 0xA8, 0x93, 0x43, 0xE6, -+ 0xAA, 0xA8, 0x43, 0xE6, 0xAB, 0x93, 0x43, 0xE6, -+ // Bytes e80 - ebf -+ 0xAB, 0x9B, 0x43, 0xE6, 0xAC, 0x84, 0x43, 0xE6, -+ 0xAC, 0xA0, 0x43, 0xE6, 0xAC, 0xA1, 0x43, 0xE6, -+ 0xAD, 0x94, 0x43, 0xE6, 0xAD, 0xA2, 0x43, 0xE6, -+ 0xAD, 0xA3, 0x43, 0xE6, 0xAD, 0xB2, 0x43, 0xE6, -+ 0xAD, 0xB7, 0x43, 0xE6, 0xAD, 0xB9, 0x43, 0xE6, -+ 0xAE, 0x9F, 0x43, 0xE6, 0xAE, 0xAE, 0x43, 0xE6, -+ 0xAE, 0xB3, 0x43, 0xE6, 0xAE, 0xBA, 0x43, 0xE6, -+ 0xAE, 0xBB, 0x43, 0xE6, 0xAF, 0x8B, 0x43, 0xE6, -+ // Bytes ec0 - eff -+ 0xAF, 0x8D, 0x43, 0xE6, 0xAF, 0x94, 0x43, 0xE6, -+ 0xAF, 0x9B, 0x43, 0xE6, 0xB0, 0x8F, 0x43, 0xE6, -+ 0xB0, 0x94, 0x43, 0xE6, 0xB0, 0xB4, 0x43, 0xE6, -+ 0xB1, 0x8E, 0x43, 0xE6, 0xB1, 0xA7, 0x43, 0xE6, -+ 0xB2, 0x88, 0x43, 0xE6, 0xB2, 0xBF, 0x43, 0xE6, -+ 0xB3, 0x8C, 0x43, 0xE6, 0xB3, 0x8D, 0x43, 0xE6, -+ 0xB3, 0xA5, 0x43, 0xE6, 0xB3, 0xA8, 0x43, 0xE6, -+ 0xB4, 0x96, 0x43, 0xE6, 0xB4, 0x9B, 0x43, 0xE6, -+ // Bytes f00 - f3f -+ 0xB4, 0x9E, 0x43, 0xE6, 0xB4, 0xB4, 0x43, 0xE6, -+ 0xB4, 0xBE, 0x43, 0xE6, 0xB5, 0x81, 0x43, 0xE6, -+ 0xB5, 0xA9, 0x43, 0xE6, 0xB5, 0xAA, 0x43, 0xE6, -+ 0xB5, 0xB7, 0x43, 0xE6, 0xB5, 0xB8, 0x43, 0xE6, -+ 0xB6, 0x85, 0x43, 0xE6, 0xB7, 0x8B, 0x43, 0xE6, -+ 0xB7, 0x9A, 0x43, 0xE6, 0xB7, 0xAA, 0x43, 0xE6, -+ 0xB7, 0xB9, 0x43, 0xE6, 0xB8, 0x9A, 0x43, 0xE6, -+ 0xB8, 0xAF, 0x43, 0xE6, 0xB9, 0xAE, 0x43, 0xE6, -+ // Bytes f40 - f7f -+ 0xBA, 0x80, 0x43, 0xE6, 0xBA, 0x9C, 0x43, 0xE6, -+ 0xBA, 0xBA, 0x43, 0xE6, 0xBB, 0x87, 0x43, 0xE6, -+ 0xBB, 0x8B, 0x43, 0xE6, 0xBB, 0x91, 0x43, 0xE6, -+ 0xBB, 0x9B, 0x43, 0xE6, 0xBC, 0x8F, 0x43, 0xE6, -+ 0xBC, 0x94, 0x43, 0xE6, 0xBC, 0xA2, 0x43, 0xE6, -+ 0xBC, 0xA3, 0x43, 0xE6, 0xBD, 0xAE, 0x43, 0xE6, -+ 0xBF, 0x86, 0x43, 0xE6, 0xBF, 0xAB, 0x43, 0xE6, -+ 0xBF, 0xBE, 0x43, 0xE7, 0x80, 0x9B, 0x43, 0xE7, -+ // Bytes f80 - fbf -+ 0x80, 0x9E, 0x43, 0xE7, 0x80, 0xB9, 0x43, 0xE7, -+ 0x81, 0x8A, 0x43, 0xE7, 0x81, 0xAB, 0x43, 0xE7, -+ 0x81, 0xB0, 0x43, 0xE7, 0x81, 0xB7, 0x43, 0xE7, -+ 0x81, 0xBD, 0x43, 0xE7, 0x82, 0x99, 0x43, 0xE7, -+ 0x82, 0xAD, 0x43, 0xE7, 0x83, 0x88, 0x43, 0xE7, -+ 0x83, 0x99, 0x43, 0xE7, 0x84, 0xA1, 0x43, 0xE7, -+ 0x85, 0x85, 0x43, 0xE7, 0x85, 0x89, 0x43, 0xE7, -+ 0x85, 0xAE, 0x43, 0xE7, 0x86, 0x9C, 0x43, 0xE7, -+ // Bytes fc0 - fff -+ 0x87, 0x8E, 0x43, 0xE7, 0x87, 0x90, 0x43, 0xE7, -+ 0x88, 0x90, 0x43, 0xE7, 0x88, 0x9B, 0x43, 0xE7, -+ 0x88, 0xA8, 0x43, 0xE7, 0x88, 0xAA, 0x43, 0xE7, -+ 0x88, 0xAB, 0x43, 0xE7, 0x88, 0xB5, 0x43, 0xE7, -+ 0x88, 0xB6, 0x43, 0xE7, 0x88, 0xBB, 0x43, 0xE7, -+ 0x88, 0xBF, 0x43, 0xE7, 0x89, 0x87, 0x43, 0xE7, -+ 0x89, 0x90, 0x43, 0xE7, 0x89, 0x99, 0x43, 0xE7, -+ 0x89, 0x9B, 0x43, 0xE7, 0x89, 0xA2, 0x43, 0xE7, -+ // Bytes 1000 - 103f -+ 0x89, 0xB9, 0x43, 0xE7, 0x8A, 0x80, 0x43, 0xE7, -+ 0x8A, 0x95, 0x43, 0xE7, 0x8A, 0xAC, 0x43, 0xE7, -+ 0x8A, 0xAF, 0x43, 0xE7, 0x8B, 0x80, 0x43, 0xE7, -+ 0x8B, 0xBC, 0x43, 0xE7, 0x8C, 0xAA, 0x43, 0xE7, -+ 0x8D, 0xB5, 0x43, 0xE7, 0x8D, 0xBA, 0x43, 0xE7, -+ 0x8E, 0x84, 0x43, 0xE7, 0x8E, 0x87, 0x43, 0xE7, -+ 0x8E, 0x89, 0x43, 0xE7, 0x8E, 0x8B, 0x43, 0xE7, -+ 0x8E, 0xA5, 0x43, 0xE7, 0x8E, 0xB2, 0x43, 0xE7, -+ // Bytes 1040 - 107f -+ 0x8F, 0x9E, 0x43, 0xE7, 0x90, 0x86, 0x43, 0xE7, -+ 0x90, 0x89, 0x43, 0xE7, 0x90, 0xA2, 0x43, 0xE7, -+ 0x91, 0x87, 0x43, 0xE7, 0x91, 0x9C, 0x43, 0xE7, -+ 0x91, 0xA9, 0x43, 0xE7, 0x91, 0xB1, 0x43, 0xE7, -+ 0x92, 0x85, 0x43, 0xE7, 0x92, 0x89, 0x43, 0xE7, -+ 0x92, 0x98, 0x43, 0xE7, 0x93, 0x8A, 0x43, 0xE7, -+ 0x93, 0x9C, 0x43, 0xE7, 0x93, 0xA6, 0x43, 0xE7, -+ 0x94, 0x86, 0x43, 0xE7, 0x94, 0x98, 0x43, 0xE7, -+ // Bytes 1080 - 10bf -+ 0x94, 0x9F, 0x43, 0xE7, 0x94, 0xA4, 0x43, 0xE7, -+ 0x94, 0xA8, 0x43, 0xE7, 0x94, 0xB0, 0x43, 0xE7, -+ 0x94, 0xB2, 0x43, 0xE7, 0x94, 0xB3, 0x43, 0xE7, -+ 0x94, 0xB7, 0x43, 0xE7, 0x94, 0xBB, 0x43, 0xE7, -+ 0x94, 0xBE, 0x43, 0xE7, 0x95, 0x99, 0x43, 0xE7, -+ 0x95, 0xA5, 0x43, 0xE7, 0x95, 0xB0, 0x43, 0xE7, -+ 0x96, 0x8B, 0x43, 0xE7, 0x96, 0x92, 0x43, 0xE7, -+ 0x97, 0xA2, 0x43, 0xE7, 0x98, 0x90, 0x43, 0xE7, -+ // Bytes 10c0 - 10ff -+ 0x98, 0x9D, 0x43, 0xE7, 0x98, 0x9F, 0x43, 0xE7, -+ 0x99, 0x82, 0x43, 0xE7, 0x99, 0xA9, 0x43, 0xE7, -+ 0x99, 0xB6, 0x43, 0xE7, 0x99, 0xBD, 0x43, 0xE7, -+ 0x9A, 0xAE, 0x43, 0xE7, 0x9A, 0xBF, 0x43, 0xE7, -+ 0x9B, 0x8A, 0x43, 0xE7, 0x9B, 0x9B, 0x43, 0xE7, -+ 0x9B, 0xA3, 0x43, 0xE7, 0x9B, 0xA7, 0x43, 0xE7, -+ 0x9B, 0xAE, 0x43, 0xE7, 0x9B, 0xB4, 0x43, 0xE7, -+ 0x9C, 0x81, 0x43, 0xE7, 0x9C, 0x9E, 0x43, 0xE7, -+ // Bytes 1100 - 113f -+ 0x9C, 0x9F, 0x43, 0xE7, 0x9D, 0x80, 0x43, 0xE7, -+ 0x9D, 0x8A, 0x43, 0xE7, 0x9E, 0x8B, 0x43, 0xE7, -+ 0x9E, 0xA7, 0x43, 0xE7, 0x9F, 0x9B, 0x43, 0xE7, -+ 0x9F, 0xA2, 0x43, 0xE7, 0x9F, 0xB3, 0x43, 0xE7, -+ 0xA1, 0x8E, 0x43, 0xE7, 0xA1, 0xAB, 0x43, 0xE7, -+ 0xA2, 0x8C, 0x43, 0xE7, 0xA2, 0x91, 0x43, 0xE7, -+ 0xA3, 0x8A, 0x43, 0xE7, 0xA3, 0x8C, 0x43, 0xE7, -+ 0xA3, 0xBB, 0x43, 0xE7, 0xA4, 0xAA, 0x43, 0xE7, -+ // Bytes 1140 - 117f -+ 0xA4, 0xBA, 0x43, 0xE7, 0xA4, 0xBC, 0x43, 0xE7, -+ 0xA4, 0xBE, 0x43, 0xE7, 0xA5, 0x88, 0x43, 0xE7, -+ 0xA5, 0x89, 0x43, 0xE7, 0xA5, 0x90, 0x43, 0xE7, -+ 0xA5, 0x96, 0x43, 0xE7, 0xA5, 0x9D, 0x43, 0xE7, -+ 0xA5, 0x9E, 0x43, 0xE7, 0xA5, 0xA5, 0x43, 0xE7, -+ 0xA5, 0xBF, 0x43, 0xE7, 0xA6, 0x81, 0x43, 0xE7, -+ 0xA6, 0x8D, 0x43, 0xE7, 0xA6, 0x8E, 0x43, 0xE7, -+ 0xA6, 0x8F, 0x43, 0xE7, 0xA6, 0xAE, 0x43, 0xE7, -+ // Bytes 1180 - 11bf -+ 0xA6, 0xB8, 0x43, 0xE7, 0xA6, 0xBE, 0x43, 0xE7, -+ 0xA7, 0x8A, 0x43, 0xE7, 0xA7, 0x98, 0x43, 0xE7, -+ 0xA7, 0xAB, 0x43, 0xE7, 0xA8, 0x9C, 0x43, 0xE7, -+ 0xA9, 0x80, 0x43, 0xE7, 0xA9, 0x8A, 0x43, 0xE7, -+ 0xA9, 0x8F, 0x43, 0xE7, 0xA9, 0xB4, 0x43, 0xE7, -+ 0xA9, 0xBA, 0x43, 0xE7, 0xAA, 0x81, 0x43, 0xE7, -+ 0xAA, 0xB1, 0x43, 0xE7, 0xAB, 0x8B, 0x43, 0xE7, -+ 0xAB, 0xAE, 0x43, 0xE7, 0xAB, 0xB9, 0x43, 0xE7, -+ // Bytes 11c0 - 11ff -+ 0xAC, 0xA0, 0x43, 0xE7, 0xAE, 0x8F, 0x43, 0xE7, -+ 0xAF, 0x80, 0x43, 0xE7, 0xAF, 0x86, 0x43, 0xE7, -+ 0xAF, 0x89, 0x43, 0xE7, 0xB0, 0xBE, 0x43, 0xE7, -+ 0xB1, 0xA0, 0x43, 0xE7, 0xB1, 0xB3, 0x43, 0xE7, -+ 0xB1, 0xBB, 0x43, 0xE7, 0xB2, 0x92, 0x43, 0xE7, -+ 0xB2, 0xBE, 0x43, 0xE7, 0xB3, 0x92, 0x43, 0xE7, -+ 0xB3, 0x96, 0x43, 0xE7, 0xB3, 0xA3, 0x43, 0xE7, -+ 0xB3, 0xA7, 0x43, 0xE7, 0xB3, 0xA8, 0x43, 0xE7, -+ // Bytes 1200 - 123f -+ 0xB3, 0xB8, 0x43, 0xE7, 0xB4, 0x80, 0x43, 0xE7, -+ 0xB4, 0x90, 0x43, 0xE7, 0xB4, 0xA2, 0x43, 0xE7, -+ 0xB4, 0xAF, 0x43, 0xE7, 0xB5, 0x82, 0x43, 0xE7, -+ 0xB5, 0x9B, 0x43, 0xE7, 0xB5, 0xA3, 0x43, 0xE7, -+ 0xB6, 0xA0, 0x43, 0xE7, 0xB6, 0xBE, 0x43, 0xE7, -+ 0xB7, 0x87, 0x43, 0xE7, 0xB7, 0xB4, 0x43, 0xE7, -+ 0xB8, 0x82, 0x43, 0xE7, 0xB8, 0x89, 0x43, 0xE7, -+ 0xB8, 0xB7, 0x43, 0xE7, 0xB9, 0x81, 0x43, 0xE7, -+ // Bytes 1240 - 127f -+ 0xB9, 0x85, 0x43, 0xE7, 0xBC, 0xB6, 0x43, 0xE7, -+ 0xBC, 0xBE, 0x43, 0xE7, 0xBD, 0x91, 0x43, 0xE7, -+ 0xBD, 0xB2, 0x43, 0xE7, 0xBD, 0xB9, 0x43, 0xE7, -+ 0xBD, 0xBA, 0x43, 0xE7, 0xBE, 0x85, 0x43, 0xE7, -+ 0xBE, 0x8A, 0x43, 0xE7, 0xBE, 0x95, 0x43, 0xE7, -+ 0xBE, 0x9A, 0x43, 0xE7, 0xBE, 0xBD, 0x43, 0xE7, -+ 0xBF, 0xBA, 0x43, 0xE8, 0x80, 0x81, 0x43, 0xE8, -+ 0x80, 0x85, 0x43, 0xE8, 0x80, 0x8C, 0x43, 0xE8, -+ // Bytes 1280 - 12bf -+ 0x80, 0x92, 0x43, 0xE8, 0x80, 0xB3, 0x43, 0xE8, -+ 0x81, 0x86, 0x43, 0xE8, 0x81, 0xA0, 0x43, 0xE8, -+ 0x81, 0xAF, 0x43, 0xE8, 0x81, 0xB0, 0x43, 0xE8, -+ 0x81, 0xBE, 0x43, 0xE8, 0x81, 0xBF, 0x43, 0xE8, -+ 0x82, 0x89, 0x43, 0xE8, 0x82, 0x8B, 0x43, 0xE8, -+ 0x82, 0xAD, 0x43, 0xE8, 0x82, 0xB2, 0x43, 0xE8, -+ 0x84, 0x83, 0x43, 0xE8, 0x84, 0xBE, 0x43, 0xE8, -+ 0x87, 0x98, 0x43, 0xE8, 0x87, 0xA3, 0x43, 0xE8, -+ // Bytes 12c0 - 12ff -+ 0x87, 0xA8, 0x43, 0xE8, 0x87, 0xAA, 0x43, 0xE8, -+ 0x87, 0xAD, 0x43, 0xE8, 0x87, 0xB3, 0x43, 0xE8, -+ 0x87, 0xBC, 0x43, 0xE8, 0x88, 0x81, 0x43, 0xE8, -+ 0x88, 0x84, 0x43, 0xE8, 0x88, 0x8C, 0x43, 0xE8, -+ 0x88, 0x98, 0x43, 0xE8, 0x88, 0x9B, 0x43, 0xE8, -+ 0x88, 0x9F, 0x43, 0xE8, 0x89, 0xAE, 0x43, 0xE8, -+ 0x89, 0xAF, 0x43, 0xE8, 0x89, 0xB2, 0x43, 0xE8, -+ 0x89, 0xB8, 0x43, 0xE8, 0x89, 0xB9, 0x43, 0xE8, -+ // Bytes 1300 - 133f -+ 0x8A, 0x8B, 0x43, 0xE8, 0x8A, 0x91, 0x43, 0xE8, -+ 0x8A, 0x9D, 0x43, 0xE8, 0x8A, 0xB1, 0x43, 0xE8, -+ 0x8A, 0xB3, 0x43, 0xE8, 0x8A, 0xBD, 0x43, 0xE8, -+ 0x8B, 0xA5, 0x43, 0xE8, 0x8B, 0xA6, 0x43, 0xE8, -+ 0x8C, 0x9D, 0x43, 0xE8, 0x8C, 0xA3, 0x43, 0xE8, -+ 0x8C, 0xB6, 0x43, 0xE8, 0x8D, 0x92, 0x43, 0xE8, -+ 0x8D, 0x93, 0x43, 0xE8, 0x8D, 0xA3, 0x43, 0xE8, -+ 0x8E, 0xAD, 0x43, 0xE8, 0x8E, 0xBD, 0x43, 0xE8, -+ // Bytes 1340 - 137f -+ 0x8F, 0x89, 0x43, 0xE8, 0x8F, 0x8A, 0x43, 0xE8, -+ 0x8F, 0x8C, 0x43, 0xE8, 0x8F, 0x9C, 0x43, 0xE8, -+ 0x8F, 0xA7, 0x43, 0xE8, 0x8F, 0xAF, 0x43, 0xE8, -+ 0x8F, 0xB1, 0x43, 0xE8, 0x90, 0xBD, 0x43, 0xE8, -+ 0x91, 0x89, 0x43, 0xE8, 0x91, 0x97, 0x43, 0xE8, -+ 0x93, 0xAE, 0x43, 0xE8, 0x93, 0xB1, 0x43, 0xE8, -+ 0x93, 0xB3, 0x43, 0xE8, 0x93, 0xBC, 0x43, 0xE8, -+ 0x94, 0x96, 0x43, 0xE8, 0x95, 0xA4, 0x43, 0xE8, -+ // Bytes 1380 - 13bf -+ 0x97, 0x8D, 0x43, 0xE8, 0x97, 0xBA, 0x43, 0xE8, -+ 0x98, 0x86, 0x43, 0xE8, 0x98, 0x92, 0x43, 0xE8, -+ 0x98, 0xAD, 0x43, 0xE8, 0x98, 0xBF, 0x43, 0xE8, -+ 0x99, 0x8D, 0x43, 0xE8, 0x99, 0x90, 0x43, 0xE8, -+ 0x99, 0x9C, 0x43, 0xE8, 0x99, 0xA7, 0x43, 0xE8, -+ 0x99, 0xA9, 0x43, 0xE8, 0x99, 0xAB, 0x43, 0xE8, -+ 0x9A, 0x88, 0x43, 0xE8, 0x9A, 0xA9, 0x43, 0xE8, -+ 0x9B, 0xA2, 0x43, 0xE8, 0x9C, 0x8E, 0x43, 0xE8, -+ // Bytes 13c0 - 13ff -+ 0x9C, 0xA8, 0x43, 0xE8, 0x9D, 0xAB, 0x43, 0xE8, -+ 0x9D, 0xB9, 0x43, 0xE8, 0x9E, 0x86, 0x43, 0xE8, -+ 0x9E, 0xBA, 0x43, 0xE8, 0x9F, 0xA1, 0x43, 0xE8, -+ 0xA0, 0x81, 0x43, 0xE8, 0xA0, 0x9F, 0x43, 0xE8, -+ 0xA1, 0x80, 0x43, 0xE8, 0xA1, 0x8C, 0x43, 0xE8, -+ 0xA1, 0xA0, 0x43, 0xE8, 0xA1, 0xA3, 0x43, 0xE8, -+ 0xA3, 0x82, 0x43, 0xE8, 0xA3, 0x8F, 0x43, 0xE8, -+ 0xA3, 0x97, 0x43, 0xE8, 0xA3, 0x9E, 0x43, 0xE8, -+ // Bytes 1400 - 143f -+ 0xA3, 0xA1, 0x43, 0xE8, 0xA3, 0xB8, 0x43, 0xE8, -+ 0xA3, 0xBA, 0x43, 0xE8, 0xA4, 0x90, 0x43, 0xE8, -+ 0xA5, 0x81, 0x43, 0xE8, 0xA5, 0xA4, 0x43, 0xE8, -+ 0xA5, 0xBE, 0x43, 0xE8, 0xA6, 0x86, 0x43, 0xE8, -+ 0xA6, 0x8B, 0x43, 0xE8, 0xA6, 0x96, 0x43, 0xE8, -+ 0xA7, 0x92, 0x43, 0xE8, 0xA7, 0xA3, 0x43, 0xE8, -+ 0xA8, 0x80, 0x43, 0xE8, 0xAA, 0xA0, 0x43, 0xE8, -+ 0xAA, 0xAA, 0x43, 0xE8, 0xAA, 0xBF, 0x43, 0xE8, -+ // Bytes 1440 - 147f -+ 0xAB, 0x8B, 0x43, 0xE8, 0xAB, 0x92, 0x43, 0xE8, -+ 0xAB, 0x96, 0x43, 0xE8, 0xAB, 0xAD, 0x43, 0xE8, -+ 0xAB, 0xB8, 0x43, 0xE8, 0xAB, 0xBE, 0x43, 0xE8, -+ 0xAC, 0x81, 0x43, 0xE8, 0xAC, 0xB9, 0x43, 0xE8, -+ 0xAD, 0x98, 0x43, 0xE8, 0xAE, 0x80, 0x43, 0xE8, -+ 0xAE, 0x8A, 0x43, 0xE8, 0xB0, 0xB7, 0x43, 0xE8, -+ 0xB1, 0x86, 0x43, 0xE8, 0xB1, 0x88, 0x43, 0xE8, -+ 0xB1, 0x95, 0x43, 0xE8, 0xB1, 0xB8, 0x43, 0xE8, -+ // Bytes 1480 - 14bf -+ 0xB2, 0x9D, 0x43, 0xE8, 0xB2, 0xA1, 0x43, 0xE8, -+ 0xB2, 0xA9, 0x43, 0xE8, 0xB2, 0xAB, 0x43, 0xE8, -+ 0xB3, 0x81, 0x43, 0xE8, 0xB3, 0x82, 0x43, 0xE8, -+ 0xB3, 0x87, 0x43, 0xE8, 0xB3, 0x88, 0x43, 0xE8, -+ 0xB3, 0x93, 0x43, 0xE8, 0xB4, 0x88, 0x43, 0xE8, -+ 0xB4, 0x9B, 0x43, 0xE8, 0xB5, 0xA4, 0x43, 0xE8, -+ 0xB5, 0xB0, 0x43, 0xE8, 0xB5, 0xB7, 0x43, 0xE8, -+ 0xB6, 0xB3, 0x43, 0xE8, 0xB6, 0xBC, 0x43, 0xE8, -+ // Bytes 14c0 - 14ff -+ 0xB7, 0x8B, 0x43, 0xE8, 0xB7, 0xAF, 0x43, 0xE8, -+ 0xB7, 0xB0, 0x43, 0xE8, 0xBA, 0xAB, 0x43, 0xE8, -+ 0xBB, 0x8A, 0x43, 0xE8, 0xBB, 0x94, 0x43, 0xE8, -+ 0xBC, 0xA6, 0x43, 0xE8, 0xBC, 0xAA, 0x43, 0xE8, -+ 0xBC, 0xB8, 0x43, 0xE8, 0xBC, 0xBB, 0x43, 0xE8, -+ 0xBD, 0xA2, 0x43, 0xE8, 0xBE, 0x9B, 0x43, 0xE8, -+ 0xBE, 0x9E, 0x43, 0xE8, 0xBE, 0xB0, 0x43, 0xE8, -+ 0xBE, 0xB5, 0x43, 0xE8, 0xBE, 0xB6, 0x43, 0xE9, -+ // Bytes 1500 - 153f -+ 0x80, 0xA3, 0x43, 0xE9, 0x80, 0xB8, 0x43, 0xE9, -+ 0x81, 0x8A, 0x43, 0xE9, 0x81, 0xA9, 0x43, 0xE9, -+ 0x81, 0xB2, 0x43, 0xE9, 0x81, 0xBC, 0x43, 0xE9, -+ 0x82, 0x8F, 0x43, 0xE9, 0x82, 0x91, 0x43, 0xE9, -+ 0x82, 0x94, 0x43, 0xE9, 0x83, 0x8E, 0x43, 0xE9, -+ 0x83, 0x9E, 0x43, 0xE9, 0x83, 0xB1, 0x43, 0xE9, -+ 0x83, 0xBD, 0x43, 0xE9, 0x84, 0x91, 0x43, 0xE9, -+ 0x84, 0x9B, 0x43, 0xE9, 0x85, 0x89, 0x43, 0xE9, -+ // Bytes 1540 - 157f -+ 0x85, 0x8D, 0x43, 0xE9, 0x85, 0xAA, 0x43, 0xE9, -+ 0x86, 0x99, 0x43, 0xE9, 0x86, 0xB4, 0x43, 0xE9, -+ 0x87, 0x86, 0x43, 0xE9, 0x87, 0x8C, 0x43, 0xE9, -+ 0x87, 0x8F, 0x43, 0xE9, 0x87, 0x91, 0x43, 0xE9, -+ 0x88, 0xB4, 0x43, 0xE9, 0x88, 0xB8, 0x43, 0xE9, -+ 0x89, 0xB6, 0x43, 0xE9, 0x89, 0xBC, 0x43, 0xE9, -+ 0x8B, 0x97, 0x43, 0xE9, 0x8B, 0x98, 0x43, 0xE9, -+ 0x8C, 0x84, 0x43, 0xE9, 0x8D, 0x8A, 0x43, 0xE9, -+ // Bytes 1580 - 15bf -+ 0x8F, 0xB9, 0x43, 0xE9, 0x90, 0x95, 0x43, 0xE9, -+ 0x95, 0xB7, 0x43, 0xE9, 0x96, 0x80, 0x43, 0xE9, -+ 0x96, 0x8B, 0x43, 0xE9, 0x96, 0xAD, 0x43, 0xE9, -+ 0x96, 0xB7, 0x43, 0xE9, 0x98, 0x9C, 0x43, 0xE9, -+ 0x98, 0xAE, 0x43, 0xE9, 0x99, 0x8B, 0x43, 0xE9, -+ 0x99, 0x8D, 0x43, 0xE9, 0x99, 0xB5, 0x43, 0xE9, -+ 0x99, 0xB8, 0x43, 0xE9, 0x99, 0xBC, 0x43, 0xE9, -+ 0x9A, 0x86, 0x43, 0xE9, 0x9A, 0xA3, 0x43, 0xE9, -+ // Bytes 15c0 - 15ff -+ 0x9A, 0xB6, 0x43, 0xE9, 0x9A, 0xB7, 0x43, 0xE9, -+ 0x9A, 0xB8, 0x43, 0xE9, 0x9A, 0xB9, 0x43, 0xE9, -+ 0x9B, 0x83, 0x43, 0xE9, 0x9B, 0xA2, 0x43, 0xE9, -+ 0x9B, 0xA3, 0x43, 0xE9, 0x9B, 0xA8, 0x43, 0xE9, -+ 0x9B, 0xB6, 0x43, 0xE9, 0x9B, 0xB7, 0x43, 0xE9, -+ 0x9C, 0xA3, 0x43, 0xE9, 0x9C, 0xB2, 0x43, 0xE9, -+ 0x9D, 0x88, 0x43, 0xE9, 0x9D, 0x91, 0x43, 0xE9, -+ 0x9D, 0x96, 0x43, 0xE9, 0x9D, 0x9E, 0x43, 0xE9, -+ // Bytes 1600 - 163f -+ 0x9D, 0xA2, 0x43, 0xE9, 0x9D, 0xA9, 0x43, 0xE9, -+ 0x9F, 0x8B, 0x43, 0xE9, 0x9F, 0x9B, 0x43, 0xE9, -+ 0x9F, 0xA0, 0x43, 0xE9, 0x9F, 0xAD, 0x43, 0xE9, -+ 0x9F, 0xB3, 0x43, 0xE9, 0x9F, 0xBF, 0x43, 0xE9, -+ 0xA0, 0x81, 0x43, 0xE9, 0xA0, 0x85, 0x43, 0xE9, -+ 0xA0, 0x8B, 0x43, 0xE9, 0xA0, 0x98, 0x43, 0xE9, -+ 0xA0, 0xA9, 0x43, 0xE9, 0xA0, 0xBB, 0x43, 0xE9, -+ 0xA1, 0x9E, 0x43, 0xE9, 0xA2, 0xA8, 0x43, 0xE9, -+ // Bytes 1640 - 167f -+ 0xA3, 0x9B, 0x43, 0xE9, 0xA3, 0x9F, 0x43, 0xE9, -+ 0xA3, 0xA2, 0x43, 0xE9, 0xA3, 0xAF, 0x43, 0xE9, -+ 0xA3, 0xBC, 0x43, 0xE9, 0xA4, 0xA8, 0x43, 0xE9, -+ 0xA4, 0xA9, 0x43, 0xE9, 0xA6, 0x96, 0x43, 0xE9, -+ 0xA6, 0x99, 0x43, 0xE9, 0xA6, 0xA7, 0x43, 0xE9, -+ 0xA6, 0xAC, 0x43, 0xE9, 0xA7, 0x82, 0x43, 0xE9, -+ 0xA7, 0xB1, 0x43, 0xE9, 0xA7, 0xBE, 0x43, 0xE9, -+ 0xA9, 0xAA, 0x43, 0xE9, 0xAA, 0xA8, 0x43, 0xE9, -+ // Bytes 1680 - 16bf -+ 0xAB, 0x98, 0x43, 0xE9, 0xAB, 0x9F, 0x43, 0xE9, -+ 0xAC, 0x92, 0x43, 0xE9, 0xAC, 0xA5, 0x43, 0xE9, -+ 0xAC, 0xAF, 0x43, 0xE9, 0xAC, 0xB2, 0x43, 0xE9, -+ 0xAC, 0xBC, 0x43, 0xE9, 0xAD, 0x9A, 0x43, 0xE9, -+ 0xAD, 0xAF, 0x43, 0xE9, 0xB1, 0x80, 0x43, 0xE9, -+ 0xB1, 0x97, 0x43, 0xE9, 0xB3, 0xA5, 0x43, 0xE9, -+ 0xB3, 0xBD, 0x43, 0xE9, 0xB5, 0xA7, 0x43, 0xE9, -+ 0xB6, 0xB4, 0x43, 0xE9, 0xB7, 0xBA, 0x43, 0xE9, -+ // Bytes 16c0 - 16ff -+ 0xB8, 0x9E, 0x43, 0xE9, 0xB9, 0xB5, 0x43, 0xE9, -+ 0xB9, 0xBF, 0x43, 0xE9, 0xBA, 0x97, 0x43, 0xE9, -+ 0xBA, 0x9F, 0x43, 0xE9, 0xBA, 0xA5, 0x43, 0xE9, -+ 0xBA, 0xBB, 0x43, 0xE9, 0xBB, 0x83, 0x43, 0xE9, -+ 0xBB, 0x8D, 0x43, 0xE9, 0xBB, 0x8E, 0x43, 0xE9, -+ 0xBB, 0x91, 0x43, 0xE9, 0xBB, 0xB9, 0x43, 0xE9, -+ 0xBB, 0xBD, 0x43, 0xE9, 0xBB, 0xBE, 0x43, 0xE9, -+ 0xBC, 0x85, 0x43, 0xE9, 0xBC, 0x8E, 0x43, 0xE9, -+ // Bytes 1700 - 173f -+ 0xBC, 0x8F, 0x43, 0xE9, 0xBC, 0x93, 0x43, 0xE9, -+ 0xBC, 0x96, 0x43, 0xE9, 0xBC, 0xA0, 0x43, 0xE9, -+ 0xBC, 0xBB, 0x43, 0xE9, 0xBD, 0x83, 0x43, 0xE9, -+ 0xBD, 0x8A, 0x43, 0xE9, 0xBD, 0x92, 0x43, 0xE9, -+ 0xBE, 0x8D, 0x43, 0xE9, 0xBE, 0x8E, 0x43, 0xE9, -+ 0xBE, 0x9C, 0x43, 0xE9, 0xBE, 0x9F, 0x43, 0xE9, -+ 0xBE, 0xA0, 0x43, 0xEA, 0x99, 0x91, 0x43, 0xEA, -+ 0x9A, 0x89, 0x43, 0xEA, 0x9C, 0xA7, 0x43, 0xEA, -+ // Bytes 1740 - 177f -+ 0x9D, 0xAF, 0x43, 0xEA, 0x9E, 0x8E, 0x43, 0xEA, -+ 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x43, 0xEA, -+ 0xAD, 0xA6, 0x43, 0xEA, 0xAD, 0xA7, 0x44, 0xF0, -+ 0x9D, 0xBC, 0x84, 0x44, 0xF0, 0x9D, 0xBC, 0x85, -+ 0x44, 0xF0, 0x9D, 0xBC, 0x86, 0x44, 0xF0, 0x9D, -+ 0xBC, 0x88, 0x44, 0xF0, 0x9D, 0xBC, 0x8A, 0x44, -+ 0xF0, 0x9D, 0xBC, 0x9E, 0x44, 0xF0, 0xA0, 0x84, -+ 0xA2, 0x44, 0xF0, 0xA0, 0x94, 0x9C, 0x44, 0xF0, -+ // Bytes 1780 - 17bf -+ 0xA0, 0x94, 0xA5, 0x44, 0xF0, 0xA0, 0x95, 0x8B, -+ 0x44, 0xF0, 0xA0, 0x98, 0xBA, 0x44, 0xF0, 0xA0, -+ 0xA0, 0x84, 0x44, 0xF0, 0xA0, 0xA3, 0x9E, 0x44, -+ 0xF0, 0xA0, 0xA8, 0xAC, 0x44, 0xF0, 0xA0, 0xAD, -+ 0xA3, 0x44, 0xF0, 0xA1, 0x93, 0xA4, 0x44, 0xF0, -+ 0xA1, 0x9A, 0xA8, 0x44, 0xF0, 0xA1, 0x9B, 0xAA, -+ 0x44, 0xF0, 0xA1, 0xA7, 0x88, 0x44, 0xF0, 0xA1, -+ 0xAC, 0x98, 0x44, 0xF0, 0xA1, 0xB4, 0x8B, 0x44, -+ // Bytes 17c0 - 17ff -+ 0xF0, 0xA1, 0xB7, 0xA4, 0x44, 0xF0, 0xA1, 0xB7, -+ 0xA6, 0x44, 0xF0, 0xA2, 0x86, 0x83, 0x44, 0xF0, -+ 0xA2, 0x86, 0x9F, 0x44, 0xF0, 0xA2, 0x8C, 0xB1, -+ 0x44, 0xF0, 0xA2, 0x9B, 0x94, 0x44, 0xF0, 0xA2, -+ 0xA1, 0x84, 0x44, 0xF0, 0xA2, 0xA1, 0x8A, 0x44, -+ 0xF0, 0xA2, 0xAC, 0x8C, 0x44, 0xF0, 0xA2, 0xAF, -+ 0xB1, 0x44, 0xF0, 0xA3, 0x80, 0x8A, 0x44, 0xF0, -+ 0xA3, 0x8A, 0xB8, 0x44, 0xF0, 0xA3, 0x8D, 0x9F, -+ // Bytes 1800 - 183f -+ 0x44, 0xF0, 0xA3, 0x8E, 0x93, 0x44, 0xF0, 0xA3, -+ 0x8E, 0x9C, 0x44, 0xF0, 0xA3, 0x8F, 0x83, 0x44, -+ 0xF0, 0xA3, 0x8F, 0x95, 0x44, 0xF0, 0xA3, 0x91, -+ 0xAD, 0x44, 0xF0, 0xA3, 0x9A, 0xA3, 0x44, 0xF0, -+ 0xA3, 0xA2, 0xA7, 0x44, 0xF0, 0xA3, 0xAA, 0x8D, -+ 0x44, 0xF0, 0xA3, 0xAB, 0xBA, 0x44, 0xF0, 0xA3, -+ 0xB2, 0xBC, 0x44, 0xF0, 0xA3, 0xB4, 0x9E, 0x44, -+ 0xF0, 0xA3, 0xBB, 0x91, 0x44, 0xF0, 0xA3, 0xBD, -+ // Bytes 1840 - 187f -+ 0x9E, 0x44, 0xF0, 0xA3, 0xBE, 0x8E, 0x44, 0xF0, -+ 0xA4, 0x89, 0xA3, 0x44, 0xF0, 0xA4, 0x8B, 0xAE, -+ 0x44, 0xF0, 0xA4, 0x8E, 0xAB, 0x44, 0xF0, 0xA4, -+ 0x98, 0x88, 0x44, 0xF0, 0xA4, 0x9C, 0xB5, 0x44, -+ 0xF0, 0xA4, 0xA0, 0x94, 0x44, 0xF0, 0xA4, 0xB0, -+ 0xB6, 0x44, 0xF0, 0xA4, 0xB2, 0x92, 0x44, 0xF0, -+ 0xA4, 0xBE, 0xA1, 0x44, 0xF0, 0xA4, 0xBE, 0xB8, -+ 0x44, 0xF0, 0xA5, 0x81, 0x84, 0x44, 0xF0, 0xA5, -+ // Bytes 1880 - 18bf -+ 0x83, 0xB2, 0x44, 0xF0, 0xA5, 0x83, 0xB3, 0x44, -+ 0xF0, 0xA5, 0x84, 0x99, 0x44, 0xF0, 0xA5, 0x84, -+ 0xB3, 0x44, 0xF0, 0xA5, 0x89, 0x89, 0x44, 0xF0, -+ 0xA5, 0x90, 0x9D, 0x44, 0xF0, 0xA5, 0x98, 0xA6, -+ 0x44, 0xF0, 0xA5, 0x9A, 0x9A, 0x44, 0xF0, 0xA5, -+ 0x9B, 0x85, 0x44, 0xF0, 0xA5, 0xA5, 0xBC, 0x44, -+ 0xF0, 0xA5, 0xAA, 0xA7, 0x44, 0xF0, 0xA5, 0xAE, -+ 0xAB, 0x44, 0xF0, 0xA5, 0xB2, 0x80, 0x44, 0xF0, -+ // Bytes 18c0 - 18ff -+ 0xA5, 0xB3, 0x90, 0x44, 0xF0, 0xA5, 0xBE, 0x86, -+ 0x44, 0xF0, 0xA6, 0x87, 0x9A, 0x44, 0xF0, 0xA6, -+ 0x88, 0xA8, 0x44, 0xF0, 0xA6, 0x89, 0x87, 0x44, -+ 0xF0, 0xA6, 0x8B, 0x99, 0x44, 0xF0, 0xA6, 0x8C, -+ 0xBE, 0x44, 0xF0, 0xA6, 0x93, 0x9A, 0x44, 0xF0, -+ 0xA6, 0x94, 0xA3, 0x44, 0xF0, 0xA6, 0x96, 0xA8, -+ 0x44, 0xF0, 0xA6, 0x9E, 0xA7, 0x44, 0xF0, 0xA6, -+ 0x9E, 0xB5, 0x44, 0xF0, 0xA6, 0xAC, 0xBC, 0x44, -+ // Bytes 1900 - 193f -+ 0xF0, 0xA6, 0xB0, 0xB6, 0x44, 0xF0, 0xA6, 0xB3, -+ 0x95, 0x44, 0xF0, 0xA6, 0xB5, 0xAB, 0x44, 0xF0, -+ 0xA6, 0xBC, 0xAC, 0x44, 0xF0, 0xA6, 0xBE, 0xB1, -+ 0x44, 0xF0, 0xA7, 0x83, 0x92, 0x44, 0xF0, 0xA7, -+ 0x8F, 0x8A, 0x44, 0xF0, 0xA7, 0x99, 0xA7, 0x44, -+ 0xF0, 0xA7, 0xA2, 0xAE, 0x44, 0xF0, 0xA7, 0xA5, -+ 0xA6, 0x44, 0xF0, 0xA7, 0xB2, 0xA8, 0x44, 0xF0, -+ 0xA7, 0xBB, 0x93, 0x44, 0xF0, 0xA7, 0xBC, 0xAF, -+ // Bytes 1940 - 197f -+ 0x44, 0xF0, 0xA8, 0x97, 0x92, 0x44, 0xF0, 0xA8, -+ 0x97, 0xAD, 0x44, 0xF0, 0xA8, 0x9C, 0xAE, 0x44, -+ 0xF0, 0xA8, 0xAF, 0xBA, 0x44, 0xF0, 0xA8, 0xB5, -+ 0xB7, 0x44, 0xF0, 0xA9, 0x85, 0x85, 0x44, 0xF0, -+ 0xA9, 0x87, 0x9F, 0x44, 0xF0, 0xA9, 0x88, 0x9A, -+ 0x44, 0xF0, 0xA9, 0x90, 0x8A, 0x44, 0xF0, 0xA9, -+ 0x92, 0x96, 0x44, 0xF0, 0xA9, 0x96, 0xB6, 0x44, -+ 0xF0, 0xA9, 0xAC, 0xB0, 0x44, 0xF0, 0xAA, 0x83, -+ // Bytes 1980 - 19bf -+ 0x8E, 0x44, 0xF0, 0xAA, 0x84, 0x85, 0x44, 0xF0, -+ 0xAA, 0x88, 0x8E, 0x44, 0xF0, 0xAA, 0x8A, 0x91, -+ 0x44, 0xF0, 0xAA, 0x8E, 0x92, 0x44, 0xF0, 0xAA, -+ 0x98, 0x80, 0x42, 0x21, 0x21, 0x42, 0x21, 0x3F, -+ 0x42, 0x2E, 0x2E, 0x42, 0x30, 0x2C, 0x42, 0x30, -+ 0x2E, 0x42, 0x31, 0x2C, 0x42, 0x31, 0x2E, 0x42, -+ 0x31, 0x30, 0x42, 0x31, 0x31, 0x42, 0x31, 0x32, -+ 0x42, 0x31, 0x33, 0x42, 0x31, 0x34, 0x42, 0x31, -+ // Bytes 19c0 - 19ff -+ 0x35, 0x42, 0x31, 0x36, 0x42, 0x31, 0x37, 0x42, -+ 0x31, 0x38, 0x42, 0x31, 0x39, 0x42, 0x32, 0x2C, -+ 0x42, 0x32, 0x2E, 0x42, 0x32, 0x30, 0x42, 0x32, -+ 0x31, 0x42, 0x32, 0x32, 0x42, 0x32, 0x33, 0x42, -+ 0x32, 0x34, 0x42, 0x32, 0x35, 0x42, 0x32, 0x36, -+ 0x42, 0x32, 0x37, 0x42, 0x32, 0x38, 0x42, 0x32, -+ 0x39, 0x42, 0x33, 0x2C, 0x42, 0x33, 0x2E, 0x42, -+ 0x33, 0x30, 0x42, 0x33, 0x31, 0x42, 0x33, 0x32, -+ // Bytes 1a00 - 1a3f -+ 0x42, 0x33, 0x33, 0x42, 0x33, 0x34, 0x42, 0x33, -+ 0x35, 0x42, 0x33, 0x36, 0x42, 0x33, 0x37, 0x42, -+ 0x33, 0x38, 0x42, 0x33, 0x39, 0x42, 0x34, 0x2C, -+ 0x42, 0x34, 0x2E, 0x42, 0x34, 0x30, 0x42, 0x34, -+ 0x31, 0x42, 0x34, 0x32, 0x42, 0x34, 0x33, 0x42, -+ 0x34, 0x34, 0x42, 0x34, 0x35, 0x42, 0x34, 0x36, -+ 0x42, 0x34, 0x37, 0x42, 0x34, 0x38, 0x42, 0x34, -+ 0x39, 0x42, 0x35, 0x2C, 0x42, 0x35, 0x2E, 0x42, -+ // Bytes 1a40 - 1a7f -+ 0x35, 0x30, 0x42, 0x36, 0x2C, 0x42, 0x36, 0x2E, -+ 0x42, 0x37, 0x2C, 0x42, 0x37, 0x2E, 0x42, 0x38, -+ 0x2C, 0x42, 0x38, 0x2E, 0x42, 0x39, 0x2C, 0x42, -+ 0x39, 0x2E, 0x42, 0x3D, 0x3D, 0x42, 0x3F, 0x21, -+ 0x42, 0x3F, 0x3F, 0x42, 0x41, 0x55, 0x42, 0x42, -+ 0x71, 0x42, 0x43, 0x44, 0x42, 0x44, 0x4A, 0x42, -+ 0x44, 0x5A, 0x42, 0x44, 0x7A, 0x42, 0x47, 0x42, -+ 0x42, 0x47, 0x79, 0x42, 0x48, 0x50, 0x42, 0x48, -+ // Bytes 1a80 - 1abf -+ 0x56, 0x42, 0x48, 0x67, 0x42, 0x48, 0x7A, 0x42, -+ 0x49, 0x49, 0x42, 0x49, 0x4A, 0x42, 0x49, 0x55, -+ 0x42, 0x49, 0x56, 0x42, 0x49, 0x58, 0x42, 0x4B, -+ 0x42, 0x42, 0x4B, 0x4B, 0x42, 0x4B, 0x4D, 0x42, -+ 0x4C, 0x4A, 0x42, 0x4C, 0x6A, 0x42, 0x4D, 0x42, -+ 0x42, 0x4D, 0x43, 0x42, 0x4D, 0x44, 0x42, 0x4D, -+ 0x52, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, -+ 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, -+ // Bytes 1ac0 - 1aff -+ 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, -+ 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, -+ 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, -+ 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, -+ 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, -+ 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, -+ 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, -+ 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, -+ // Bytes 1b00 - 1b3f -+ 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, -+ 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, -+ 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, -+ 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, -+ 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, -+ 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, -+ 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, -+ 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, -+ // Bytes 1b40 - 1b7f -+ 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, -+ 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, -+ 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, -+ 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, -+ 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, -+ 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, -+ 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, -+ 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, -+ // Bytes 1b80 - 1bbf -+ 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, -+ 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, -+ 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, -+ 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, -+ 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, -+ 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, -+ 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, -+ 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, -+ // Bytes 1bc0 - 1bff -+ 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, -+ 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, -+ 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, -+ 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, -+ 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, -+ 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, -+ 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, -+ 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, -+ // Bytes 1c00 - 1c3f -+ 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, -+ 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, -+ 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, -+ 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, -+ 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, -+ 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, -+ 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, -+ 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, -+ // Bytes 1c40 - 1c7f -+ 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, -+ 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, -+ 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, -+ 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, -+ 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, -+ 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, -+ 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, -+ 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, -+ // Bytes 1c80 - 1cbf -+ 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, -+ 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, -+ 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, -+ 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, -+ 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, -+ 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, -+ 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, -+ 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, -+ // Bytes 1cc0 - 1cff -+ 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, -+ 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, -+ 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, -+ 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, -+ 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, -+ 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, -+ 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, -+ 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, -+ // Bytes 1d00 - 1d3f -+ 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, -+ 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, -+ 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, -+ 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, -+ 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, -+ 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, -+ 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, -+ 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, -+ // Bytes 1d40 - 1d7f -+ 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, -+ 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, -+ 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, -+ 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, -+ 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, -+ 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, -+ 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, -+ 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, -+ // Bytes 1d80 - 1dbf -+ 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, -+ 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, -+ 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, -+ 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, -+ 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, -+ 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, -+ 0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, -+ 0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, -+ // Bytes 1dc0 - 1dff -+ 0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, -+ 0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, -+ 0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, -+ 0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, -+ 0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, -+ 0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, -+ 0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, -+ 0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, -+ // Bytes 1e00 - 1e3f -+ 0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, -+ 0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, -+ 0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, -+ 0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, -+ 0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, -+ 0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, -+ 0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, -+ 0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, -+ // Bytes 1e40 - 1e7f -+ 0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, -+ 0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, -+ 0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, -+ 0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, -+ 0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, -+ 0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, -+ 0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, -+ 0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, -+ // Bytes 1e80 - 1ebf -+ 0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, -+ 0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, -+ 0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, -+ 0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, -+ 0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, -+ 0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, -+ 0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, -+ 0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, -+ // Bytes 1ec0 - 1eff -+ 0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, -+ 0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, -+ 0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, -+ 0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, -+ 0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, -+ 0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, -+ 0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, -+ 0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, -+ // Bytes 1f00 - 1f3f -+ 0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, -+ 0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, -+ 0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, -+ 0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, -+ 0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, -+ 0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, -+ 0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, -+ 0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, -+ // Bytes 1f40 - 1f7f -+ 0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, -+ 0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, -+ 0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, -+ 0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, -+ 0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, -+ 0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, -+ 0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, -+ 0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, -+ // Bytes 1f80 - 1fbf -+ 0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, -+ 0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, -+ 0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, -+ 0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, -+ 0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, -+ 0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, -+ 0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, -+ 0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, -+ // Bytes 1fc0 - 1fff -+ 0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, -+ 0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, -+ 0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, -+ 0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, -+ 0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, -+ 0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, -+ 0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, -+ 0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, -+ // Bytes 2000 - 203f -+ 0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, -+ 0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, -+ 0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, -+ 0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, -+ 0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, -+ 0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, -+ 0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, -+ 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, -+ // Bytes 2040 - 207f -+ 0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, -+ 0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, -+ 0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, -+ 0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, -+ 0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, -+ 0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, -+ 0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, -+ 0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, -+ // Bytes 2080 - 20bf -+ 0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, -+ 0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, -+ 0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, -+ 0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, -+ 0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, -+ 0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, -+ 0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, -+ 0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, -+ // Bytes 20c0 - 20ff -+ 0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, -+ 0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, -+ 0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, -+ 0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, -+ 0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, -+ 0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, -+ 0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, -+ 0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, -+ // Bytes 2100 - 213f -+ 0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, -+ 0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, -+ 0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, -+ 0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, -+ 0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, -+ 0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, -+ 0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, -+ 0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, -+ // Bytes 2140 - 217f -+ 0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, -+ 0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, -+ 0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, -+ 0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, -+ 0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, -+ 0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, -+ 0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, -+ 0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, -+ // Bytes 2180 - 21bf -+ 0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, -+ 0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, -+ 0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, -+ 0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, -+ 0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, -+ 0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, -+ 0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, -+ 0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, -+ // Bytes 21c0 - 21ff -+ 0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, -+ 0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, -+ 0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, -+ 0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, -+ 0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, -+ 0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, -+ 0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, -+ 0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, -+ // Bytes 2200 - 223f -+ 0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, -+ 0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, -+ 0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, -+ 0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, -+ 0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, -+ 0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, -+ 0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, -+ 0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, -+ // Bytes 2240 - 227f -+ 0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, -+ 0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, -+ 0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, -+ 0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, -+ 0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, -+ 0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, -+ 0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, -+ 0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, -+ // Bytes 2280 - 22bf -+ 0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, -+ 0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, -+ 0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, -+ 0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, -+ 0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, -+ 0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, -+ 0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, -+ 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, -+ // Bytes 22c0 - 22ff -+ 0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, -+ 0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, -+ 0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, -+ 0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, -+ 0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, -+ 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, -+ 0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, -+ 0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, -+ // Bytes 2300 - 233f -+ 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, -+ 0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, -+ 0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, -+ 0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, -+ 0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, -+ 0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, -+ 0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, -+ 0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, -+ // Bytes 2340 - 237f -+ 0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, -+ 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, -+ 0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, -+ 0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, -+ 0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, -+ 0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, -+ 0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, -+ 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, -+ // Bytes 2380 - 23bf -+ 0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, -+ 0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, -+ 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, -+ 0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, -+ 0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, -+ 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, -+ 0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, -+ 0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, -+ // Bytes 23c0 - 23ff -+ 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, -+ 0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, -+ 0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, -+ 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, -+ 0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, -+ 0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, -+ 0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, -+ 0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, -+ // Bytes 2400 - 243f -+ 0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, -+ 0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, -+ 0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, -+ 0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, -+ 0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, -+ 0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, -+ 0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, -+ 0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, -+ // Bytes 2440 - 247f -+ 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, -+ 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, -+ 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, -+ 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, -+ 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, -+ 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, -+ 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, -+ 0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, -+ // Bytes 2480 - 24bf -+ 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, -+ 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, -+ 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, -+ 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, -+ 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, -+ 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, -+ 0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, -+ 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, -+ // Bytes 24c0 - 24ff -+ 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, -+ 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, -+ 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, -+ 0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, -+ 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, -+ 0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, -+ 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, -+ 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, -+ // Bytes 2500 - 253f -+ 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, -+ 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, -+ 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, -+ 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, -+ 0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, -+ 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, -+ 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, -+ 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, -+ // Bytes 2540 - 257f -+ 0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, -+ 0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, -+ 0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, -+ 0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, -+ 0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, -+ 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, -+ 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, -+ 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, -+ // Bytes 2580 - 25bf -+ 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, -+ 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, -+ 0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, -+ 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, -+ 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, -+ 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, -+ 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, -+ 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, -+ // Bytes 25c0 - 25ff -+ 0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, -+ 0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, -+ 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, -+ 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, -+ 0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, -+ 0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, -+ 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, -+ 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, -+ // Bytes 2600 - 263f -+ 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, -+ 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, -+ 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, -+ 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, -+ 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, -+ 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, -+ 0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, -+ 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, -+ // Bytes 2640 - 267f -+ 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, -+ 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, -+ 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, -+ 0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, -+ 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, -+ 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, -+ 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, -+ 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, -+ // Bytes 2680 - 26bf -+ 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, -+ 0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, -+ 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, -+ 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, -+ 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, -+ 0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, -+ 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, -+ 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, -+ // Bytes 26c0 - 26ff -+ 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, -+ 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, -+ 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, -+ 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, -+ 0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, -+ 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, -+ 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, -+ 0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, -+ // Bytes 2700 - 273f -+ 0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, -+ 0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, -+ 0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, -+ 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, -+ 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, -+ 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, -+ 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, -+ 0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, -+ // Bytes 2740 - 277f -+ 0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, -+ 0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, -+ 0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, -+ 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, -+ 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, -+ 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, -+ 0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, -+ 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, -+ // Bytes 2780 - 27bf -+ 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, -+ 0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, -+ 0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, -+ 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, -+ 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, -+ 0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, -+ 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, -+ 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, -+ // Bytes 27c0 - 27ff -+ 0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, -+ 0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, -+ 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, -+ 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, -+ 0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, -+ 0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, -+ 0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, -+ 0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, -+ // Bytes 2800 - 283f -+ 0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, -+ 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, -+ 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, -+ 0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, -+ 0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, -+ 0x83, 0xA0, 0x46, 0xE4, 0xBB, 0xA4, 0xE5, 0x92, -+ 0x8C, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, 0xA3, -+ 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, 0x46, -+ // Bytes 2840 - 287f -+ 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46, 0xE6, -+ 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72, 0x61, -+ 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3, 0x80, -+ 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28, 0xE1, -+ 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, -+ 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29, 0x48, -+ 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x29, -+ 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, -+ // Bytes 2880 - 28bf -+ 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1, 0x85, -+ 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87, 0xE1, -+ 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x89, -+ 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, -+ 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, -+ 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, -+ 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, 0x48, -+ 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x29, -+ // Bytes 28c0 - 28ff -+ 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, -+ 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1, 0x85, -+ 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91, 0xE1, -+ 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x92, -+ 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61, 0x64, -+ 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8, 0xA7, -+ 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, 0xD8, -+ 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x48, -+ // Bytes 2900 - 293f -+ 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9, 0x84, -+ 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, 0xD9, -+ 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8, 0xB9, -+ 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, -+ 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8, 0xAD, -+ 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88, 0xD8, -+ 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, 0x80, -+ 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x49, -+ // Bytes 2940 - 297f -+ 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, -+ 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, -+ 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE, 0xE2, -+ 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3, 0x80, -+ 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95, 0x49, -+ 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, 0x80, -+ 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, 0x9D, -+ 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, -+ // Bytes 2980 - 29bf -+ 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, -+ 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95, 0x49, -+ 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3, 0x80, -+ 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C, 0xAC, -+ 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, -+ 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, -+ 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, 0x49, -+ 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3, 0x83, -+ // Bytes 29c0 - 29ff -+ 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, -+ 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6, 0xE3, -+ 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x82, -+ 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x49, -+ 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, 0x83, -+ 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0xA4, -+ 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, 0xE3, -+ 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, -+ // Bytes 2a00 - 2a3f -+ 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A, 0x49, -+ 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, -+ 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, -+ 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86, 0xE3, -+ 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3, 0x83, -+ 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, -+ 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, 0x83, -+ 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0xA4, -+ // Bytes 2a40 - 2a7f -+ 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92, 0xE3, -+ 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, -+ 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, 0x49, -+ 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3, 0x83, -+ 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, -+ 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98, 0xE3, -+ 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, -+ 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, -+ // Bytes 2a80 - 2abf -+ 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, -+ 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, -+ 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E, 0xE3, -+ 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3, 0x83, -+ 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF, 0x49, -+ 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, -+ 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, 0xA2, -+ 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF, 0xE3, -+ // Bytes 2ac0 - 2aff -+ 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2, 0x80, -+ 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, -+ 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2, 0x88, -+ 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x4C, -+ 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3, 0x83, -+ 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82, 0xA8, -+ 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x83, -+ 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, -+ // Bytes 2b00 - 2b3f -+ 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, -+ 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, -+ 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, -+ 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, -+ 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD, 0xE3, -+ 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, -+ 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, 0xE3, -+ 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x83, -+ // Bytes 2b40 - 2b7f -+ 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, -+ 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, -+ 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82, 0xAF, -+ 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, 0x83, -+ 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0xA4, -+ 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, -+ 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, -+ 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F, 0xE3, -+ // Bytes 2b80 - 2bbf -+ 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x84, -+ 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, -+ 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, -+ 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, 0xE3, -+ 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, -+ 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF, 0x4C, -+ 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, -+ 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83, 0x98, -+ // Bytes 2bc0 - 2bff -+ 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x82, -+ 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, -+ 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C, 0xE3, -+ 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xAF, -+ 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F, 0xE3, -+ 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, -+ 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, -+ 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, -+ // Bytes 2c00 - 2c3f -+ 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, -+ 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3, 0x83, -+ 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0x4C, -+ 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, 0xBC, -+ 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1, 0x84, -+ 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, 0xE1, -+ 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, 0x84, -+ 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, -+ // Bytes 2c40 - 2c7f -+ 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, -+ 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, -+ 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, -+ 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, -+ 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD, 0xE3, -+ 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, -+ 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, 0xE3, -+ 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, -+ // Bytes 2c80 - 2cbf -+ 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F, 0xE3, -+ 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAC, -+ 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98, 0xE3, -+ 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83, 0xBC, -+ 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, -+ 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, -+ 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, 0xE3, -+ 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xA7, -+ // Bytes 2cc0 - 2cff -+ 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1, 0xE3, -+ 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x88, -+ 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB, 0xE3, -+ 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, -+ 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84, 0x8B, -+ 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, 0x85, -+ 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, 0x82, -+ 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, -+ // Bytes 2d00 - 2d3f -+ 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, -+ 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, -+ 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, -+ 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD, 0xE3, -+ 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, -+ 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3, -+ 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, -+ 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, 0x83, -+ // Bytes 2d40 - 2d7f -+ 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, -+ 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3, 0x82, -+ 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83, 0x8F, -+ 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x82, -+ 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x52, -+ 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, -+ 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, 0xE3, -+ 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3, 0x82, -+ // Bytes 2d80 - 2dbf -+ 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, 0xE3, -+ 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, -+ 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F, 0xE3, -+ 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, -+ 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3, 0xE3, -+ 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, -+ 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, 0x84, -+ 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, -+ // Bytes 2dc0 - 2dff -+ 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, -+ 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, -+ 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0, 0xA7, -+ 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0, 0xA7, -+ 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0, 0xAD, -+ 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0, 0xAD, -+ 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, 0xAD, -+ 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0, 0xAE, -+ // Bytes 2e00 - 2e3f -+ 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, -+ 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xAF, -+ 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, -+ 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xB2, -+ 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, -+ 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, -+ 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, 0xB5, -+ 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB5, -+ // Bytes 2e40 - 2e7f -+ 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0, 0xB5, -+ 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB7, -+ 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1, 0x80, -+ 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1, 0xAC, -+ 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ // Bytes 2e80 - 2ebf -+ 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, -+ 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAD, -+ 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, 0x91, -+ 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, -+ // Bytes 2ec0 - 2eff -+ 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, 0xA7, -+ 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, -+ 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, -+ 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, 0x91, -+ 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, 0x08, -+ 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBA, -+ 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, -+ 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB8, -+ // Bytes 2f00 - 2f3f -+ 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, -+ 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, -+ 0xF0, 0x91, 0xA4, 0xB5, 0xF0, 0x91, 0xA4, 0xB0, -+ 0x01, 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, -+ 0xE0, 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, -+ 0xE0, 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x16, 0x44, -+ 0x44, 0x5A, 0xCC, 0x8C, 0xCD, 0x44, 0x44, 0x7A, -+ 0xCC, 0x8C, 0xCD, 0x44, 0x64, 0x7A, 0xCC, 0x8C, -+ // Bytes 2f40 - 2f7f -+ 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, -+ 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, -+ 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, -+ 0xB9, 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, -+ // Bytes 2f80 - 2fbf -+ 0x01, 0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, -+ 0x01, 0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, -+ // Bytes 2fc0 - 2fff -+ 0x01, 0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, -+ 0x01, 0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, -+ 0x01, 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, -+ 0xE3, 0x82, 0x99, 0x11, 0x4C, 0xE1, 0x84, 0x8C, -+ 0xE1, 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, -+ 0xB4, 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, -+ 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, -+ 0x4C, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, -+ // Bytes 3000 - 303f -+ 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x11, 0x4C, 0xE3, -+ 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, -+ 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE1, 0x84, 0x8E, -+ 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, -+ 0x80, 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, -+ 0xA4, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, -+ 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, -+ 0x82, 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, -+ // Bytes 3040 - 307f -+ 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, -+ 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, -+ 0xBC, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, -+ 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, -+ 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, -+ 0x11, 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, -+ 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, -+ 0x88, 0xE3, 0x82, 0x99, 0x11, 0x52, 0xE3, 0x83, -+ // Bytes 3080 - 30bf -+ 0x95, 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, -+ 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, -+ 0x11, 0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, -+ 0x01, 0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, -+ 0x01, 0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, -+ 0xCC, 0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, -+ 0x03, 0x41, 0xCC, 0x80, 0xCD, 0x03, 0x41, 0xCC, -+ 0x81, 0xCD, 0x03, 0x41, 0xCC, 0x83, 0xCD, 0x03, -+ // Bytes 30c0 - 30ff -+ 0x41, 0xCC, 0x84, 0xCD, 0x03, 0x41, 0xCC, 0x89, -+ 0xCD, 0x03, 0x41, 0xCC, 0x8C, 0xCD, 0x03, 0x41, -+ 0xCC, 0x8F, 0xCD, 0x03, 0x41, 0xCC, 0x91, 0xCD, -+ 0x03, 0x41, 0xCC, 0xA5, 0xB9, 0x03, 0x41, 0xCC, -+ 0xA8, 0xA9, 0x03, 0x42, 0xCC, 0x87, 0xCD, 0x03, -+ 0x42, 0xCC, 0xA3, 0xB9, 0x03, 0x42, 0xCC, 0xB1, -+ 0xB9, 0x03, 0x43, 0xCC, 0x81, 0xCD, 0x03, 0x43, -+ 0xCC, 0x82, 0xCD, 0x03, 0x43, 0xCC, 0x87, 0xCD, -+ // Bytes 3100 - 313f -+ 0x03, 0x43, 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, -+ 0x87, 0xCD, 0x03, 0x44, 0xCC, 0x8C, 0xCD, 0x03, -+ 0x44, 0xCC, 0xA3, 0xB9, 0x03, 0x44, 0xCC, 0xA7, -+ 0xA9, 0x03, 0x44, 0xCC, 0xAD, 0xB9, 0x03, 0x44, -+ 0xCC, 0xB1, 0xB9, 0x03, 0x45, 0xCC, 0x80, 0xCD, -+ 0x03, 0x45, 0xCC, 0x81, 0xCD, 0x03, 0x45, 0xCC, -+ 0x83, 0xCD, 0x03, 0x45, 0xCC, 0x86, 0xCD, 0x03, -+ 0x45, 0xCC, 0x87, 0xCD, 0x03, 0x45, 0xCC, 0x88, -+ // Bytes 3140 - 317f -+ 0xCD, 0x03, 0x45, 0xCC, 0x89, 0xCD, 0x03, 0x45, -+ 0xCC, 0x8C, 0xCD, 0x03, 0x45, 0xCC, 0x8F, 0xCD, -+ 0x03, 0x45, 0xCC, 0x91, 0xCD, 0x03, 0x45, 0xCC, -+ 0xA8, 0xA9, 0x03, 0x45, 0xCC, 0xAD, 0xB9, 0x03, -+ 0x45, 0xCC, 0xB0, 0xB9, 0x03, 0x46, 0xCC, 0x87, -+ 0xCD, 0x03, 0x47, 0xCC, 0x81, 0xCD, 0x03, 0x47, -+ 0xCC, 0x82, 0xCD, 0x03, 0x47, 0xCC, 0x84, 0xCD, -+ 0x03, 0x47, 0xCC, 0x86, 0xCD, 0x03, 0x47, 0xCC, -+ // Bytes 3180 - 31bf -+ 0x87, 0xCD, 0x03, 0x47, 0xCC, 0x8C, 0xCD, 0x03, -+ 0x47, 0xCC, 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0x82, -+ 0xCD, 0x03, 0x48, 0xCC, 0x87, 0xCD, 0x03, 0x48, -+ 0xCC, 0x88, 0xCD, 0x03, 0x48, 0xCC, 0x8C, 0xCD, -+ 0x03, 0x48, 0xCC, 0xA3, 0xB9, 0x03, 0x48, 0xCC, -+ 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0xAE, 0xB9, 0x03, -+ 0x49, 0xCC, 0x80, 0xCD, 0x03, 0x49, 0xCC, 0x81, -+ 0xCD, 0x03, 0x49, 0xCC, 0x82, 0xCD, 0x03, 0x49, -+ // Bytes 31c0 - 31ff -+ 0xCC, 0x83, 0xCD, 0x03, 0x49, 0xCC, 0x84, 0xCD, -+ 0x03, 0x49, 0xCC, 0x86, 0xCD, 0x03, 0x49, 0xCC, -+ 0x87, 0xCD, 0x03, 0x49, 0xCC, 0x89, 0xCD, 0x03, -+ 0x49, 0xCC, 0x8C, 0xCD, 0x03, 0x49, 0xCC, 0x8F, -+ 0xCD, 0x03, 0x49, 0xCC, 0x91, 0xCD, 0x03, 0x49, -+ 0xCC, 0xA3, 0xB9, 0x03, 0x49, 0xCC, 0xA8, 0xA9, -+ 0x03, 0x49, 0xCC, 0xB0, 0xB9, 0x03, 0x4A, 0xCC, -+ 0x82, 0xCD, 0x03, 0x4B, 0xCC, 0x81, 0xCD, 0x03, -+ // Bytes 3200 - 323f -+ 0x4B, 0xCC, 0x8C, 0xCD, 0x03, 0x4B, 0xCC, 0xA3, -+ 0xB9, 0x03, 0x4B, 0xCC, 0xA7, 0xA9, 0x03, 0x4B, -+ 0xCC, 0xB1, 0xB9, 0x03, 0x4C, 0xCC, 0x81, 0xCD, -+ 0x03, 0x4C, 0xCC, 0x8C, 0xCD, 0x03, 0x4C, 0xCC, -+ 0xA7, 0xA9, 0x03, 0x4C, 0xCC, 0xAD, 0xB9, 0x03, -+ 0x4C, 0xCC, 0xB1, 0xB9, 0x03, 0x4D, 0xCC, 0x81, -+ 0xCD, 0x03, 0x4D, 0xCC, 0x87, 0xCD, 0x03, 0x4D, -+ 0xCC, 0xA3, 0xB9, 0x03, 0x4E, 0xCC, 0x80, 0xCD, -+ // Bytes 3240 - 327f -+ 0x03, 0x4E, 0xCC, 0x81, 0xCD, 0x03, 0x4E, 0xCC, -+ 0x83, 0xCD, 0x03, 0x4E, 0xCC, 0x87, 0xCD, 0x03, -+ 0x4E, 0xCC, 0x8C, 0xCD, 0x03, 0x4E, 0xCC, 0xA3, -+ 0xB9, 0x03, 0x4E, 0xCC, 0xA7, 0xA9, 0x03, 0x4E, -+ 0xCC, 0xAD, 0xB9, 0x03, 0x4E, 0xCC, 0xB1, 0xB9, -+ 0x03, 0x4F, 0xCC, 0x80, 0xCD, 0x03, 0x4F, 0xCC, -+ 0x81, 0xCD, 0x03, 0x4F, 0xCC, 0x86, 0xCD, 0x03, -+ 0x4F, 0xCC, 0x89, 0xCD, 0x03, 0x4F, 0xCC, 0x8B, -+ // Bytes 3280 - 32bf -+ 0xCD, 0x03, 0x4F, 0xCC, 0x8C, 0xCD, 0x03, 0x4F, -+ 0xCC, 0x8F, 0xCD, 0x03, 0x4F, 0xCC, 0x91, 0xCD, -+ 0x03, 0x50, 0xCC, 0x81, 0xCD, 0x03, 0x50, 0xCC, -+ 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x81, 0xCD, 0x03, -+ 0x52, 0xCC, 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x8C, -+ 0xCD, 0x03, 0x52, 0xCC, 0x8F, 0xCD, 0x03, 0x52, -+ 0xCC, 0x91, 0xCD, 0x03, 0x52, 0xCC, 0xA7, 0xA9, -+ 0x03, 0x52, 0xCC, 0xB1, 0xB9, 0x03, 0x53, 0xCC, -+ // Bytes 32c0 - 32ff -+ 0x82, 0xCD, 0x03, 0x53, 0xCC, 0x87, 0xCD, 0x03, -+ 0x53, 0xCC, 0xA6, 0xB9, 0x03, 0x53, 0xCC, 0xA7, -+ 0xA9, 0x03, 0x54, 0xCC, 0x87, 0xCD, 0x03, 0x54, -+ 0xCC, 0x8C, 0xCD, 0x03, 0x54, 0xCC, 0xA3, 0xB9, -+ 0x03, 0x54, 0xCC, 0xA6, 0xB9, 0x03, 0x54, 0xCC, -+ 0xA7, 0xA9, 0x03, 0x54, 0xCC, 0xAD, 0xB9, 0x03, -+ 0x54, 0xCC, 0xB1, 0xB9, 0x03, 0x55, 0xCC, 0x80, -+ 0xCD, 0x03, 0x55, 0xCC, 0x81, 0xCD, 0x03, 0x55, -+ // Bytes 3300 - 333f -+ 0xCC, 0x82, 0xCD, 0x03, 0x55, 0xCC, 0x86, 0xCD, -+ 0x03, 0x55, 0xCC, 0x89, 0xCD, 0x03, 0x55, 0xCC, -+ 0x8A, 0xCD, 0x03, 0x55, 0xCC, 0x8B, 0xCD, 0x03, -+ 0x55, 0xCC, 0x8C, 0xCD, 0x03, 0x55, 0xCC, 0x8F, -+ 0xCD, 0x03, 0x55, 0xCC, 0x91, 0xCD, 0x03, 0x55, -+ 0xCC, 0xA3, 0xB9, 0x03, 0x55, 0xCC, 0xA4, 0xB9, -+ 0x03, 0x55, 0xCC, 0xA8, 0xA9, 0x03, 0x55, 0xCC, -+ 0xAD, 0xB9, 0x03, 0x55, 0xCC, 0xB0, 0xB9, 0x03, -+ // Bytes 3340 - 337f -+ 0x56, 0xCC, 0x83, 0xCD, 0x03, 0x56, 0xCC, 0xA3, -+ 0xB9, 0x03, 0x57, 0xCC, 0x80, 0xCD, 0x03, 0x57, -+ 0xCC, 0x81, 0xCD, 0x03, 0x57, 0xCC, 0x82, 0xCD, -+ 0x03, 0x57, 0xCC, 0x87, 0xCD, 0x03, 0x57, 0xCC, -+ 0x88, 0xCD, 0x03, 0x57, 0xCC, 0xA3, 0xB9, 0x03, -+ 0x58, 0xCC, 0x87, 0xCD, 0x03, 0x58, 0xCC, 0x88, -+ 0xCD, 0x03, 0x59, 0xCC, 0x80, 0xCD, 0x03, 0x59, -+ 0xCC, 0x81, 0xCD, 0x03, 0x59, 0xCC, 0x82, 0xCD, -+ // Bytes 3380 - 33bf -+ 0x03, 0x59, 0xCC, 0x83, 0xCD, 0x03, 0x59, 0xCC, -+ 0x84, 0xCD, 0x03, 0x59, 0xCC, 0x87, 0xCD, 0x03, -+ 0x59, 0xCC, 0x88, 0xCD, 0x03, 0x59, 0xCC, 0x89, -+ 0xCD, 0x03, 0x59, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, -+ 0xCC, 0x81, 0xCD, 0x03, 0x5A, 0xCC, 0x82, 0xCD, -+ 0x03, 0x5A, 0xCC, 0x87, 0xCD, 0x03, 0x5A, 0xCC, -+ 0x8C, 0xCD, 0x03, 0x5A, 0xCC, 0xA3, 0xB9, 0x03, -+ 0x5A, 0xCC, 0xB1, 0xB9, 0x03, 0x61, 0xCC, 0x80, -+ // Bytes 33c0 - 33ff -+ 0xCD, 0x03, 0x61, 0xCC, 0x81, 0xCD, 0x03, 0x61, -+ 0xCC, 0x83, 0xCD, 0x03, 0x61, 0xCC, 0x84, 0xCD, -+ 0x03, 0x61, 0xCC, 0x89, 0xCD, 0x03, 0x61, 0xCC, -+ 0x8C, 0xCD, 0x03, 0x61, 0xCC, 0x8F, 0xCD, 0x03, -+ 0x61, 0xCC, 0x91, 0xCD, 0x03, 0x61, 0xCC, 0xA5, -+ 0xB9, 0x03, 0x61, 0xCC, 0xA8, 0xA9, 0x03, 0x62, -+ 0xCC, 0x87, 0xCD, 0x03, 0x62, 0xCC, 0xA3, 0xB9, -+ 0x03, 0x62, 0xCC, 0xB1, 0xB9, 0x03, 0x63, 0xCC, -+ // Bytes 3400 - 343f -+ 0x81, 0xCD, 0x03, 0x63, 0xCC, 0x82, 0xCD, 0x03, -+ 0x63, 0xCC, 0x87, 0xCD, 0x03, 0x63, 0xCC, 0x8C, -+ 0xCD, 0x03, 0x64, 0xCC, 0x87, 0xCD, 0x03, 0x64, -+ 0xCC, 0x8C, 0xCD, 0x03, 0x64, 0xCC, 0xA3, 0xB9, -+ 0x03, 0x64, 0xCC, 0xA7, 0xA9, 0x03, 0x64, 0xCC, -+ 0xAD, 0xB9, 0x03, 0x64, 0xCC, 0xB1, 0xB9, 0x03, -+ 0x65, 0xCC, 0x80, 0xCD, 0x03, 0x65, 0xCC, 0x81, -+ 0xCD, 0x03, 0x65, 0xCC, 0x83, 0xCD, 0x03, 0x65, -+ // Bytes 3440 - 347f -+ 0xCC, 0x86, 0xCD, 0x03, 0x65, 0xCC, 0x87, 0xCD, -+ 0x03, 0x65, 0xCC, 0x88, 0xCD, 0x03, 0x65, 0xCC, -+ 0x89, 0xCD, 0x03, 0x65, 0xCC, 0x8C, 0xCD, 0x03, -+ 0x65, 0xCC, 0x8F, 0xCD, 0x03, 0x65, 0xCC, 0x91, -+ 0xCD, 0x03, 0x65, 0xCC, 0xA8, 0xA9, 0x03, 0x65, -+ 0xCC, 0xAD, 0xB9, 0x03, 0x65, 0xCC, 0xB0, 0xB9, -+ 0x03, 0x66, 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, -+ 0x81, 0xCD, 0x03, 0x67, 0xCC, 0x82, 0xCD, 0x03, -+ // Bytes 3480 - 34bf -+ 0x67, 0xCC, 0x84, 0xCD, 0x03, 0x67, 0xCC, 0x86, -+ 0xCD, 0x03, 0x67, 0xCC, 0x87, 0xCD, 0x03, 0x67, -+ 0xCC, 0x8C, 0xCD, 0x03, 0x67, 0xCC, 0xA7, 0xA9, -+ 0x03, 0x68, 0xCC, 0x82, 0xCD, 0x03, 0x68, 0xCC, -+ 0x87, 0xCD, 0x03, 0x68, 0xCC, 0x88, 0xCD, 0x03, -+ 0x68, 0xCC, 0x8C, 0xCD, 0x03, 0x68, 0xCC, 0xA3, -+ 0xB9, 0x03, 0x68, 0xCC, 0xA7, 0xA9, 0x03, 0x68, -+ 0xCC, 0xAE, 0xB9, 0x03, 0x68, 0xCC, 0xB1, 0xB9, -+ // Bytes 34c0 - 34ff -+ 0x03, 0x69, 0xCC, 0x80, 0xCD, 0x03, 0x69, 0xCC, -+ 0x81, 0xCD, 0x03, 0x69, 0xCC, 0x82, 0xCD, 0x03, -+ 0x69, 0xCC, 0x83, 0xCD, 0x03, 0x69, 0xCC, 0x84, -+ 0xCD, 0x03, 0x69, 0xCC, 0x86, 0xCD, 0x03, 0x69, -+ 0xCC, 0x89, 0xCD, 0x03, 0x69, 0xCC, 0x8C, 0xCD, -+ 0x03, 0x69, 0xCC, 0x8F, 0xCD, 0x03, 0x69, 0xCC, -+ 0x91, 0xCD, 0x03, 0x69, 0xCC, 0xA3, 0xB9, 0x03, -+ 0x69, 0xCC, 0xA8, 0xA9, 0x03, 0x69, 0xCC, 0xB0, -+ // Bytes 3500 - 353f -+ 0xB9, 0x03, 0x6A, 0xCC, 0x82, 0xCD, 0x03, 0x6A, -+ 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, 0x81, 0xCD, -+ 0x03, 0x6B, 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, -+ 0xA3, 0xB9, 0x03, 0x6B, 0xCC, 0xA7, 0xA9, 0x03, -+ 0x6B, 0xCC, 0xB1, 0xB9, 0x03, 0x6C, 0xCC, 0x81, -+ 0xCD, 0x03, 0x6C, 0xCC, 0x8C, 0xCD, 0x03, 0x6C, -+ 0xCC, 0xA7, 0xA9, 0x03, 0x6C, 0xCC, 0xAD, 0xB9, -+ 0x03, 0x6C, 0xCC, 0xB1, 0xB9, 0x03, 0x6D, 0xCC, -+ // Bytes 3540 - 357f -+ 0x81, 0xCD, 0x03, 0x6D, 0xCC, 0x87, 0xCD, 0x03, -+ 0x6D, 0xCC, 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0x80, -+ 0xCD, 0x03, 0x6E, 0xCC, 0x81, 0xCD, 0x03, 0x6E, -+ 0xCC, 0x83, 0xCD, 0x03, 0x6E, 0xCC, 0x87, 0xCD, -+ 0x03, 0x6E, 0xCC, 0x8C, 0xCD, 0x03, 0x6E, 0xCC, -+ 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0xA7, 0xA9, 0x03, -+ 0x6E, 0xCC, 0xAD, 0xB9, 0x03, 0x6E, 0xCC, 0xB1, -+ 0xB9, 0x03, 0x6F, 0xCC, 0x80, 0xCD, 0x03, 0x6F, -+ // Bytes 3580 - 35bf -+ 0xCC, 0x81, 0xCD, 0x03, 0x6F, 0xCC, 0x86, 0xCD, -+ 0x03, 0x6F, 0xCC, 0x89, 0xCD, 0x03, 0x6F, 0xCC, -+ 0x8B, 0xCD, 0x03, 0x6F, 0xCC, 0x8C, 0xCD, 0x03, -+ 0x6F, 0xCC, 0x8F, 0xCD, 0x03, 0x6F, 0xCC, 0x91, -+ 0xCD, 0x03, 0x70, 0xCC, 0x81, 0xCD, 0x03, 0x70, -+ 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, 0x81, 0xCD, -+ 0x03, 0x72, 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, -+ 0x8C, 0xCD, 0x03, 0x72, 0xCC, 0x8F, 0xCD, 0x03, -+ // Bytes 35c0 - 35ff -+ 0x72, 0xCC, 0x91, 0xCD, 0x03, 0x72, 0xCC, 0xA7, -+ 0xA9, 0x03, 0x72, 0xCC, 0xB1, 0xB9, 0x03, 0x73, -+ 0xCC, 0x82, 0xCD, 0x03, 0x73, 0xCC, 0x87, 0xCD, -+ 0x03, 0x73, 0xCC, 0xA6, 0xB9, 0x03, 0x73, 0xCC, -+ 0xA7, 0xA9, 0x03, 0x74, 0xCC, 0x87, 0xCD, 0x03, -+ 0x74, 0xCC, 0x88, 0xCD, 0x03, 0x74, 0xCC, 0x8C, -+ 0xCD, 0x03, 0x74, 0xCC, 0xA3, 0xB9, 0x03, 0x74, -+ 0xCC, 0xA6, 0xB9, 0x03, 0x74, 0xCC, 0xA7, 0xA9, -+ // Bytes 3600 - 363f -+ 0x03, 0x74, 0xCC, 0xAD, 0xB9, 0x03, 0x74, 0xCC, -+ 0xB1, 0xB9, 0x03, 0x75, 0xCC, 0x80, 0xCD, 0x03, -+ 0x75, 0xCC, 0x81, 0xCD, 0x03, 0x75, 0xCC, 0x82, -+ 0xCD, 0x03, 0x75, 0xCC, 0x86, 0xCD, 0x03, 0x75, -+ 0xCC, 0x89, 0xCD, 0x03, 0x75, 0xCC, 0x8A, 0xCD, -+ 0x03, 0x75, 0xCC, 0x8B, 0xCD, 0x03, 0x75, 0xCC, -+ 0x8C, 0xCD, 0x03, 0x75, 0xCC, 0x8F, 0xCD, 0x03, -+ 0x75, 0xCC, 0x91, 0xCD, 0x03, 0x75, 0xCC, 0xA3, -+ // Bytes 3640 - 367f -+ 0xB9, 0x03, 0x75, 0xCC, 0xA4, 0xB9, 0x03, 0x75, -+ 0xCC, 0xA8, 0xA9, 0x03, 0x75, 0xCC, 0xAD, 0xB9, -+ 0x03, 0x75, 0xCC, 0xB0, 0xB9, 0x03, 0x76, 0xCC, -+ 0x83, 0xCD, 0x03, 0x76, 0xCC, 0xA3, 0xB9, 0x03, -+ 0x77, 0xCC, 0x80, 0xCD, 0x03, 0x77, 0xCC, 0x81, -+ 0xCD, 0x03, 0x77, 0xCC, 0x82, 0xCD, 0x03, 0x77, -+ 0xCC, 0x87, 0xCD, 0x03, 0x77, 0xCC, 0x88, 0xCD, -+ 0x03, 0x77, 0xCC, 0x8A, 0xCD, 0x03, 0x77, 0xCC, -+ // Bytes 3680 - 36bf -+ 0xA3, 0xB9, 0x03, 0x78, 0xCC, 0x87, 0xCD, 0x03, -+ 0x78, 0xCC, 0x88, 0xCD, 0x03, 0x79, 0xCC, 0x80, -+ 0xCD, 0x03, 0x79, 0xCC, 0x81, 0xCD, 0x03, 0x79, -+ 0xCC, 0x82, 0xCD, 0x03, 0x79, 0xCC, 0x83, 0xCD, -+ 0x03, 0x79, 0xCC, 0x84, 0xCD, 0x03, 0x79, 0xCC, -+ 0x87, 0xCD, 0x03, 0x79, 0xCC, 0x88, 0xCD, 0x03, -+ 0x79, 0xCC, 0x89, 0xCD, 0x03, 0x79, 0xCC, 0x8A, -+ 0xCD, 0x03, 0x79, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, -+ // Bytes 36c0 - 36ff -+ 0xCC, 0x81, 0xCD, 0x03, 0x7A, 0xCC, 0x82, 0xCD, -+ 0x03, 0x7A, 0xCC, 0x87, 0xCD, 0x03, 0x7A, 0xCC, -+ 0x8C, 0xCD, 0x03, 0x7A, 0xCC, 0xA3, 0xB9, 0x03, -+ 0x7A, 0xCC, 0xB1, 0xB9, 0x04, 0xC2, 0xA8, 0xCC, -+ 0x80, 0xCE, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, -+ 0x04, 0xC2, 0xA8, 0xCD, 0x82, 0xCE, 0x04, 0xC3, -+ 0x86, 0xCC, 0x81, 0xCD, 0x04, 0xC3, 0x86, 0xCC, -+ 0x84, 0xCD, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xCD, -+ // Bytes 3700 - 373f -+ 0x04, 0xC3, 0xA6, 0xCC, 0x81, 0xCD, 0x04, 0xC3, -+ 0xA6, 0xCC, 0x84, 0xCD, 0x04, 0xC3, 0xB8, 0xCC, -+ 0x81, 0xCD, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xCD, -+ 0x04, 0xC6, 0xB7, 0xCC, 0x8C, 0xCD, 0x04, 0xCA, -+ 0x92, 0xCC, 0x8C, 0xCD, 0x04, 0xCE, 0x91, 0xCC, -+ 0x80, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xCD, -+ 0x04, 0xCE, 0x91, 0xCC, 0x84, 0xCD, 0x04, 0xCE, -+ 0x91, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0x91, 0xCD, -+ // Bytes 3740 - 377f -+ 0x85, 0xDD, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xCD, -+ 0x04, 0xCE, 0x95, 0xCC, 0x81, 0xCD, 0x04, 0xCE, -+ 0x97, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x97, 0xCC, -+ 0x81, 0xCD, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xDD, -+ 0x04, 0xCE, 0x99, 0xCC, 0x80, 0xCD, 0x04, 0xCE, -+ 0x99, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x99, 0xCC, -+ 0x84, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xCD, -+ 0x04, 0xCE, 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xCE, -+ // Bytes 3780 - 37bf -+ 0x9F, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, -+ 0x81, 0xCD, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xCD, -+ 0x04, 0xCE, 0xA5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, -+ 0xA5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, -+ 0x84, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xCD, -+ 0x04, 0xCE, 0xA5, 0xCC, 0x88, 0xCD, 0x04, 0xCE, -+ 0xA9, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, -+ 0x81, 0xCD, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xDD, -+ // Bytes 37c0 - 37ff -+ 0x04, 0xCE, 0xB1, 0xCC, 0x84, 0xCD, 0x04, 0xCE, -+ 0xB1, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0xB1, 0xCD, -+ 0x85, 0xDD, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xCD, -+ 0x04, 0xCE, 0xB5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, -+ 0xB7, 0xCD, 0x85, 0xDD, 0x04, 0xCE, 0xB9, 0xCC, -+ 0x80, 0xCD, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, -+ 0x04, 0xCE, 0xB9, 0xCC, 0x84, 0xCD, 0x04, 0xCE, -+ 0xB9, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0xB9, 0xCD, -+ // Bytes 3800 - 383f -+ 0x82, 0xCD, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xCD, -+ 0x04, 0xCE, 0xBF, 0xCC, 0x81, 0xCD, 0x04, 0xCF, -+ 0x81, 0xCC, 0x93, 0xCD, 0x04, 0xCF, 0x81, 0xCC, -+ 0x94, 0xCD, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xCD, -+ 0x04, 0xCF, 0x85, 0xCC, 0x81, 0xCD, 0x04, 0xCF, -+ 0x85, 0xCC, 0x84, 0xCD, 0x04, 0xCF, 0x85, 0xCC, -+ 0x86, 0xCD, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xCD, -+ 0x04, 0xCF, 0x89, 0xCD, 0x85, 0xDD, 0x04, 0xCF, -+ // Bytes 3840 - 387f -+ 0x92, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x92, 0xCC, -+ 0x88, 0xCD, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xCD, -+ 0x04, 0xD0, 0x90, 0xCC, 0x86, 0xCD, 0x04, 0xD0, -+ 0x90, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x93, 0xCC, -+ 0x81, 0xCD, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xCD, -+ 0x04, 0xD0, 0x95, 0xCC, 0x86, 0xCD, 0x04, 0xD0, -+ 0x95, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x96, 0xCC, -+ 0x86, 0xCD, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xCD, -+ // Bytes 3880 - 38bf -+ 0x04, 0xD0, 0x97, 0xCC, 0x88, 0xCD, 0x04, 0xD0, -+ 0x98, 0xCC, 0x80, 0xCD, 0x04, 0xD0, 0x98, 0xCC, -+ 0x84, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xCD, -+ 0x04, 0xD0, 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD0, -+ 0x9A, 0xCC, 0x81, 0xCD, 0x04, 0xD0, 0x9E, 0xCC, -+ 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xCD, -+ 0x04, 0xD0, 0xA3, 0xCC, 0x86, 0xCD, 0x04, 0xD0, -+ 0xA3, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, -+ // Bytes 38c0 - 38ff -+ 0x8B, 0xCD, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xCD, -+ 0x04, 0xD0, 0xAB, 0xCC, 0x88, 0xCD, 0x04, 0xD0, -+ 0xAD, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, -+ 0x86, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xCD, -+ 0x04, 0xD0, 0xB3, 0xCC, 0x81, 0xCD, 0x04, 0xD0, -+ 0xB5, 0xCC, 0x80, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, -+ 0x86, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xCD, -+ 0x04, 0xD0, 0xB6, 0xCC, 0x86, 0xCD, 0x04, 0xD0, -+ // Bytes 3900 - 393f -+ 0xB6, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xB7, 0xCC, -+ 0x88, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xCD, -+ 0x04, 0xD0, 0xB8, 0xCC, 0x84, 0xCD, 0x04, 0xD0, -+ 0xB8, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, -+ 0x88, 0xCD, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xCD, -+ 0x04, 0xD0, 0xBE, 0xCC, 0x88, 0xCD, 0x04, 0xD1, -+ 0x83, 0xCC, 0x84, 0xCD, 0x04, 0xD1, 0x83, 0xCC, -+ 0x86, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xCD, -+ // Bytes 3940 - 397f -+ 0x04, 0xD1, 0x83, 0xCC, 0x8B, 0xCD, 0x04, 0xD1, -+ 0x87, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x8B, 0xCC, -+ 0x88, 0xCD, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xCD, -+ 0x04, 0xD1, 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD1, -+ 0xB4, 0xCC, 0x8F, 0xCD, 0x04, 0xD1, 0xB5, 0xCC, -+ 0x8F, 0xCD, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xCD, -+ 0x04, 0xD3, 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xD3, -+ 0xA8, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0xA9, 0xCC, -+ // Bytes 3980 - 39bf -+ 0x88, 0xCD, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, -+ 0x04, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x04, 0xD8, -+ 0xA7, 0xD9, 0x95, 0xB9, 0x04, 0xD9, 0x88, 0xD9, -+ 0x94, 0xCD, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, -+ 0x04, 0xDB, 0x81, 0xD9, 0x94, 0xCD, 0x04, 0xDB, -+ 0x92, 0xD9, 0x94, 0xCD, 0x04, 0xDB, 0x95, 0xD9, -+ 0x94, 0xCD, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, -+ 0xCE, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCE, -+ // Bytes 39c0 - 39ff -+ 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, -+ 0x41, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x41, -+ 0xCC, 0x86, 0xCC, 0x80, 0xCE, 0x05, 0x41, 0xCC, -+ 0x86, 0xCC, 0x81, 0xCE, 0x05, 0x41, 0xCC, 0x86, -+ 0xCC, 0x83, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, -+ 0x89, 0xCE, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, -+ 0xCE, 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCE, -+ 0x05, 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, -+ // Bytes 3a00 - 3a3f -+ 0x41, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x41, -+ 0xCC, 0xA3, 0xCC, 0x86, 0xCE, 0x05, 0x43, 0xCC, -+ 0xA7, 0xCC, 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, -+ 0xCC, 0x80, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, -+ 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, -+ 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCE, -+ 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, -+ 0x45, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x45, -+ // Bytes 3a40 - 3a7f -+ 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x45, 0xCC, -+ 0xA7, 0xCC, 0x86, 0xCE, 0x05, 0x49, 0xCC, 0x88, -+ 0xCC, 0x81, 0xCE, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, -+ 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, -+ 0xCE, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, -+ 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, -+ 0x4F, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x4F, -+ 0xCC, 0x83, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, -+ // Bytes 3a80 - 3abf -+ 0x83, 0xCC, 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x83, -+ 0xCC, 0x88, 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, -+ 0x80, 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, -+ 0xCE, 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, -+ 0x05, 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, -+ 0x4F, 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x4F, -+ 0xCC, 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, -+ 0x9B, 0xCC, 0x83, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, -+ // Bytes 3ac0 - 3aff -+ 0xCC, 0x89, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, -+ 0xA3, 0xBA, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, -+ 0xCE, 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, -+ 0x05, 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, -+ 0x53, 0xCC, 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x53, -+ 0xCC, 0x8C, 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, -+ 0xA3, 0xCC, 0x87, 0xCE, 0x05, 0x55, 0xCC, 0x83, -+ 0xCC, 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x84, 0xCC, -+ // Bytes 3b00 - 3b3f -+ 0x88, 0xCE, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, -+ 0xCE, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCE, -+ 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, -+ 0x55, 0xCC, 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x55, -+ 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x55, 0xCC, -+ 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x9B, -+ 0xCC, 0x83, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, -+ 0x89, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, -+ // Bytes 3b40 - 3b7f -+ 0xBA, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCE, -+ 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, -+ 0x61, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x61, -+ 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x61, 0xCC, -+ 0x86, 0xCC, 0x80, 0xCE, 0x05, 0x61, 0xCC, 0x86, -+ 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, -+ 0x83, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, -+ 0xCE, 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCE, -+ // Bytes 3b80 - 3bbf -+ 0x05, 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, -+ 0x61, 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x61, -+ 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x61, 0xCC, -+ 0xA3, 0xCC, 0x86, 0xCE, 0x05, 0x63, 0xCC, 0xA7, -+ 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, -+ 0x80, 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, -+ 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCE, -+ 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, -+ // Bytes 3bc0 - 3bff -+ 0x65, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x65, -+ 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, -+ 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x65, 0xCC, 0xA7, -+ 0xCC, 0x86, 0xCE, 0x05, 0x69, 0xCC, 0x88, 0xCC, -+ 0x81, 0xCE, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, -+ 0xCE, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, -+ 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, -+ 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x6F, -+ // Bytes 3c00 - 3c3f -+ 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x6F, 0xCC, -+ 0x83, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x83, -+ 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, -+ 0x88, 0xCE, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, -+ 0xCE, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, -+ 0x05, 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, -+ 0x6F, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x6F, -+ 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x6F, 0xCC, -+ // Bytes 3c40 - 3c7f -+ 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, -+ 0xCC, 0x83, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, -+ 0x89, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, -+ 0xBA, 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, -+ 0x05, 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, -+ 0x72, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x73, -+ 0xCC, 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, -+ 0x8C, 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, 0xA3, -+ // Bytes 3c80 - 3cbf -+ 0xCC, 0x87, 0xCE, 0x05, 0x75, 0xCC, 0x83, 0xCC, -+ 0x81, 0xCE, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, -+ 0xCE, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCE, -+ 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, -+ 0x75, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x75, -+ 0xCC, 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x75, 0xCC, -+ 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x75, 0xCC, 0x9B, -+ 0xCC, 0x81, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, -+ // Bytes 3cc0 - 3cff -+ 0x83, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, -+ 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, -+ 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCE, 0x05, -+ 0xE1, 0xBE, 0xBF, 0xCC, 0x81, 0xCE, 0x05, 0xE1, -+ 0xBE, 0xBF, 0xCD, 0x82, 0xCE, 0x05, 0xE1, 0xBF, -+ 0xBE, 0xCC, 0x80, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, -+ 0xCC, 0x81, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, -+ 0x82, 0xCE, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, -+ // Bytes 3d00 - 3d3f -+ 0x05, 0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, -+ 0x05, 0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, -+ 0xE2, 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, -+ 0x87, 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, -+ 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, -+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, -+ 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, -+ 0x05, 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, -+ // Bytes 3d40 - 3d7f -+ 0x05, 0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, -+ 0xE2, 0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, -+ 0x89, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, -+ 0x85, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, -+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, -+ 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, -+ 0x05, 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, -+ 0x05, 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, -+ // Bytes 3d80 - 3dbf -+ 0xE2, 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, -+ 0x89, 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, -+ 0xB6, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, -+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, -+ 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, -+ 0x05, 0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, -+ 0x05, 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, -+ 0xE2, 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, -+ // Bytes 3dc0 - 3dff -+ 0x8A, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, -+ 0x86, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, -+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, -+ 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, -+ 0x05, 0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, -+ 0x05, 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, -+ 0xE2, 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, -+ 0x8A, 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, -+ // Bytes 3e00 - 3e3f -+ 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, -+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, -+ 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, -+ 0x05, 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, -+ // Bytes 3e40 - 3e7f -+ 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, -+ 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, -+ // Bytes 3e80 - 3ebf -+ 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, -+ 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, -+ // Bytes 3ec0 - 3eff -+ 0xCE, 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, -+ // Bytes 3f00 - 3f3f -+ 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, -+ // Bytes 3f40 - 3f7f -+ 0xDE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, -+ 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, -+ 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, -+ // Bytes 3f80 - 3fbf -+ 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, -+ 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, -+ // Bytes 3fc0 - 3fff -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, -+ 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, -+ 0xCE, 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, -+ // Bytes 4000 - 403f -+ 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, -+ 0xDE, 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, -+ 0xDE, 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, -+ 0x0D, 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, -+ 0x0D, 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, -+ 0x0D, 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, -+ 0x89, 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, -+ // Bytes 4040 - 407f -+ 0x15, 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, -+ // Bytes 4080 - 40bf -+ 0x11, 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, -+ // Bytes 40c0 - 40ff -+ 0x11, 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, -+ // Bytes 4100 - 413f -+ 0x11, 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, -+ // Bytes 4140 - 417f -+ 0x11, 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, -+ // Bytes 4180 - 41bf -+ 0x11, 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, -+ // Bytes 41c0 - 41ff -+ 0x11, 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, -+ 0x11, 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, -+ // Bytes 4200 - 423f -+ 0x11, 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, -+ 0x11, 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, -+ 0x11, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, -+ 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, -+ 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, -+ 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, -+ 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, -+ // Bytes 4240 - 427f -+ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, -+ 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, -+ 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, -+ 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, -+ 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, -+ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, -+ 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, -+ 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, -+ // Bytes 4280 - 42bf -+ 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, -+ 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, -+ 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, -+ 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, -+ 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, -+ 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, -+ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, -+ // Bytes 42c0 - 42ff -+ 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, -+ 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, -+ 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, -+ 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, -+ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, -+ 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, -+ 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, -+ 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, -+ // Bytes 4300 - 433f -+ 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, -+ 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, -+ 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, -+ 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, -+ 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, -+ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, -+ 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, -+ // Bytes 4340 - 437f -+ 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, -+ 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, -+ 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, -+ 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, -+ 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, -+ 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, -+ 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, -+ 0xDF, 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, -+ // Bytes 4380 - 43bf -+ 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, 0x82, 0x9B, -+ 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, -+ 0x82, 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x42, -+ 0xC2, 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xCD, -+ 0x43, 0x20, 0xCC, 0x83, 0xCD, 0x43, 0x20, 0xCC, -+ 0x84, 0xCD, 0x43, 0x20, 0xCC, 0x85, 0xCD, 0x43, -+ 0x20, 0xCC, 0x86, 0xCD, 0x43, 0x20, 0xCC, 0x87, -+ 0xCD, 0x43, 0x20, 0xCC, 0x88, 0xCD, 0x43, 0x20, -+ // Bytes 43c0 - 43ff -+ 0xCC, 0x8A, 0xCD, 0x43, 0x20, 0xCC, 0x8B, 0xCD, -+ 0x43, 0x20, 0xCC, 0x93, 0xCD, 0x43, 0x20, 0xCC, -+ 0x94, 0xCD, 0x43, 0x20, 0xCC, 0xA7, 0xA9, 0x43, -+ 0x20, 0xCC, 0xA8, 0xA9, 0x43, 0x20, 0xCC, 0xB3, -+ 0xB9, 0x43, 0x20, 0xCD, 0x82, 0xCD, 0x43, 0x20, -+ 0xCD, 0x85, 0xDD, 0x43, 0x20, 0xD9, 0x8B, 0x5D, -+ 0x43, 0x20, 0xD9, 0x8C, 0x61, 0x43, 0x20, 0xD9, -+ 0x8D, 0x65, 0x43, 0x20, 0xD9, 0x8E, 0x69, 0x43, -+ // Bytes 4400 - 443f -+ 0x20, 0xD9, 0x8F, 0x6D, 0x43, 0x20, 0xD9, 0x90, -+ 0x71, 0x43, 0x20, 0xD9, 0x91, 0x75, 0x43, 0x20, -+ 0xD9, 0x92, 0x79, 0x43, 0x41, 0xCC, 0x8A, 0xCD, -+ 0x43, 0x73, 0xCC, 0x87, 0xCD, 0x44, 0x20, 0xE3, -+ 0x82, 0x99, 0x11, 0x44, 0x20, 0xE3, 0x82, 0x9A, -+ 0x11, 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x44, -+ 0xCE, 0x91, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x95, -+ 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x97, 0xCC, 0x81, -+ // Bytes 4440 - 447f -+ 0xCD, 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xCD, 0x44, -+ 0xCE, 0x9F, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, -+ 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x88, -+ 0xCD, 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xCD, 0x44, -+ 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB5, -+ 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB7, 0xCC, 0x81, -+ 0xCD, 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x44, -+ 0xCE, 0xBF, 0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x85, -+ // Bytes 4480 - 44bf -+ 0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x89, 0xCC, 0x81, -+ 0xCD, 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x35, 0x44, -+ 0xD7, 0x90, 0xD6, 0xB8, 0x39, 0x44, 0xD7, 0x90, -+ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBC, -+ 0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x4D, 0x44, -+ 0xD7, 0x92, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x93, -+ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x94, 0xD6, 0xBC, -+ 0x45, 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x3D, 0x44, -+ // Bytes 44c0 - 44ff -+ 0xD7, 0x95, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x96, -+ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x98, 0xD6, 0xBC, -+ 0x45, 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x29, 0x44, -+ 0xD7, 0x99, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9A, -+ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, -+ 0x45, 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x4D, 0x44, -+ 0xD7, 0x9C, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9E, -+ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, -+ // Bytes 4500 - 453f -+ 0x45, 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x45, 0x44, -+ 0xD7, 0xA3, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, -+ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, -+ 0x4D, 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x45, 0x44, -+ 0xD7, 0xA7, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA8, -+ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, -+ 0x45, 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x51, 0x44, -+ 0xD7, 0xA9, 0xD7, 0x82, 0x55, 0x44, 0xD7, 0xAA, -+ // Bytes 4540 - 457f -+ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, -+ 0x35, 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x5D, 0x44, -+ 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x44, 0xD8, 0xA7, -+ 0xD9, 0x94, 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x95, -+ 0xB9, 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x7D, 0x44, -+ 0xD8, 0xB1, 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x80, -+ 0xD9, 0x8B, 0x5D, 0x44, 0xD9, 0x80, 0xD9, 0x8E, -+ 0x69, 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x6D, 0x44, -+ // Bytes 4580 - 45bf -+ 0xD9, 0x80, 0xD9, 0x90, 0x71, 0x44, 0xD9, 0x80, -+ 0xD9, 0x91, 0x75, 0x44, 0xD9, 0x80, 0xD9, 0x92, -+ 0x79, 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x7D, 0x44, -+ 0xD9, 0x88, 0xD9, 0x94, 0xCD, 0x44, 0xD9, 0x89, -+ 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x8A, 0xD9, 0x94, -+ 0xCD, 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xCD, 0x44, -+ 0xDB, 0x95, 0xD9, 0x94, 0xCD, 0x45, 0x20, 0xCC, -+ 0x88, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x88, -+ // Bytes 45c0 - 45ff -+ 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCD, -+ 0x82, 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, -+ 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCE, -+ 0x45, 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x45, -+ 0x20, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x45, 0x20, -+ 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, -+ 0x94, 0xCD, 0x82, 0xCE, 0x45, 0x20, 0xD9, 0x8C, -+ 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x8D, 0xD9, -+ // Bytes 4600 - 463f -+ 0x91, 0x76, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, -+ 0x76, 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x76, -+ 0x45, 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x45, -+ 0x20, 0xD9, 0x91, 0xD9, 0xB0, 0x7E, 0x45, 0xE2, -+ 0xAB, 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, -+ 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x46, 0xCF, 0x85, -+ 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x46, 0xD7, 0xA9, -+ 0xD6, 0xBC, 0xD7, 0x81, 0x52, 0x46, 0xD7, 0xA9, -+ // Bytes 4640 - 467f -+ 0xD6, 0xBC, 0xD7, 0x82, 0x56, 0x46, 0xD9, 0x80, -+ 0xD9, 0x8E, 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, -+ 0xD9, 0x8F, 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, -+ 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x46, 0xE0, 0xA4, -+ 0x95, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, -+ 0x96, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, -+ 0x97, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, -+ 0x9C, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, -+ // Bytes 4680 - 46bf -+ 0xA1, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, -+ 0xA2, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, -+ 0xAB, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, -+ 0xAF, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, -+ 0xA1, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, -+ 0xA2, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, -+ 0xAF, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, -+ 0x96, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, -+ // Bytes 46c0 - 46ff -+ 0x97, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, -+ 0x9C, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, -+ 0xAB, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, -+ 0xB2, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, -+ 0xB8, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, -+ 0xA1, 0xE0, 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, -+ 0xA2, 0xE0, 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xBE, -+ 0xB2, 0xE0, 0xBE, 0x80, 0xA1, 0x46, 0xE0, 0xBE, -+ // Bytes 4700 - 473f -+ 0xB3, 0xE0, 0xBE, 0x80, 0xA1, 0x46, 0xE3, 0x83, -+ 0x86, 0xE3, 0x82, 0x99, 0x11, 0x48, 0xF0, 0x9D, -+ 0x85, 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, -+ 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, -+ 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, -+ 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xBA, -+ 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x49, 0xE0, 0xBE, -+ 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, -+ // Bytes 4740 - 477f -+ 0x49, 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, -+ 0xBE, 0x80, 0xA2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, -+ 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, -+ 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, -+ 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, -+ 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, -+ 0xF0, 0x9D, 0x85, 0xB0, 0xB2, 0x4C, 0xF0, 0x9D, -+ 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, -+ // Bytes 4780 - 47bf -+ 0x85, 0xB1, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, -+ 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, -+ 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, -+ 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, -+ 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, -+ 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, -+ 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, -+ 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, -+ // Bytes 47c0 - 47ff -+ 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, -+ 0xB2, 0x83, 0x41, 0xCC, 0x82, 0xCD, 0x83, 0x41, -+ 0xCC, 0x86, 0xCD, 0x83, 0x41, 0xCC, 0x87, 0xCD, -+ 0x83, 0x41, 0xCC, 0x88, 0xCD, 0x83, 0x41, 0xCC, -+ 0x8A, 0xCD, 0x83, 0x41, 0xCC, 0xA3, 0xB9, 0x83, -+ 0x43, 0xCC, 0xA7, 0xA9, 0x83, 0x45, 0xCC, 0x82, -+ 0xCD, 0x83, 0x45, 0xCC, 0x84, 0xCD, 0x83, 0x45, -+ 0xCC, 0xA3, 0xB9, 0x83, 0x45, 0xCC, 0xA7, 0xA9, -+ // Bytes 4800 - 483f -+ 0x83, 0x49, 0xCC, 0x88, 0xCD, 0x83, 0x4C, 0xCC, -+ 0xA3, 0xB9, 0x83, 0x4F, 0xCC, 0x82, 0xCD, 0x83, -+ 0x4F, 0xCC, 0x83, 0xCD, 0x83, 0x4F, 0xCC, 0x84, -+ 0xCD, 0x83, 0x4F, 0xCC, 0x87, 0xCD, 0x83, 0x4F, -+ 0xCC, 0x88, 0xCD, 0x83, 0x4F, 0xCC, 0x9B, 0xB1, -+ 0x83, 0x4F, 0xCC, 0xA3, 0xB9, 0x83, 0x4F, 0xCC, -+ 0xA8, 0xA9, 0x83, 0x52, 0xCC, 0xA3, 0xB9, 0x83, -+ 0x53, 0xCC, 0x81, 0xCD, 0x83, 0x53, 0xCC, 0x8C, -+ // Bytes 4840 - 487f -+ 0xCD, 0x83, 0x53, 0xCC, 0xA3, 0xB9, 0x83, 0x55, -+ 0xCC, 0x83, 0xCD, 0x83, 0x55, 0xCC, 0x84, 0xCD, -+ 0x83, 0x55, 0xCC, 0x88, 0xCD, 0x83, 0x55, 0xCC, -+ 0x9B, 0xB1, 0x83, 0x61, 0xCC, 0x82, 0xCD, 0x83, -+ 0x61, 0xCC, 0x86, 0xCD, 0x83, 0x61, 0xCC, 0x87, -+ 0xCD, 0x83, 0x61, 0xCC, 0x88, 0xCD, 0x83, 0x61, -+ 0xCC, 0x8A, 0xCD, 0x83, 0x61, 0xCC, 0xA3, 0xB9, -+ 0x83, 0x63, 0xCC, 0xA7, 0xA9, 0x83, 0x65, 0xCC, -+ // Bytes 4880 - 48bf -+ 0x82, 0xCD, 0x83, 0x65, 0xCC, 0x84, 0xCD, 0x83, -+ 0x65, 0xCC, 0xA3, 0xB9, 0x83, 0x65, 0xCC, 0xA7, -+ 0xA9, 0x83, 0x69, 0xCC, 0x88, 0xCD, 0x83, 0x6C, -+ 0xCC, 0xA3, 0xB9, 0x83, 0x6F, 0xCC, 0x82, 0xCD, -+ 0x83, 0x6F, 0xCC, 0x83, 0xCD, 0x83, 0x6F, 0xCC, -+ 0x84, 0xCD, 0x83, 0x6F, 0xCC, 0x87, 0xCD, 0x83, -+ 0x6F, 0xCC, 0x88, 0xCD, 0x83, 0x6F, 0xCC, 0x9B, -+ 0xB1, 0x83, 0x6F, 0xCC, 0xA3, 0xB9, 0x83, 0x6F, -+ // Bytes 48c0 - 48ff -+ 0xCC, 0xA8, 0xA9, 0x83, 0x72, 0xCC, 0xA3, 0xB9, -+ 0x83, 0x73, 0xCC, 0x81, 0xCD, 0x83, 0x73, 0xCC, -+ 0x8C, 0xCD, 0x83, 0x73, 0xCC, 0xA3, 0xB9, 0x83, -+ 0x75, 0xCC, 0x83, 0xCD, 0x83, 0x75, 0xCC, 0x84, -+ 0xCD, 0x83, 0x75, 0xCC, 0x88, 0xCD, 0x83, 0x75, -+ 0xCC, 0x9B, 0xB1, 0x84, 0xCE, 0x91, 0xCC, 0x93, -+ 0xCD, 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x84, -+ 0xCE, 0x95, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x95, -+ // Bytes 4900 - 493f -+ 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x93, -+ 0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x84, -+ 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x99, -+ 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x93, -+ 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xCD, 0x84, -+ 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA9, -+ 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x94, -+ 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x84, -+ // Bytes 4940 - 497f -+ 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB1, -+ 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x94, -+ 0xCD, 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x84, -+ 0xCE, 0xB5, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB5, -+ 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x80, -+ 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x84, -+ 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB7, -+ 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB7, 0xCD, 0x82, -+ // Bytes 4980 - 49bf -+ 0xCD, 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x84, -+ 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB9, -+ 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x93, -+ 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xCD, 0x84, -+ 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x84, 0xCF, 0x85, -+ 0xCC, 0x93, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x94, -+ 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x84, -+ 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x84, 0xCF, 0x89, -+ // Bytes 49c0 - 49ff -+ 0xCC, 0x93, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x94, -+ 0xCD, 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x86, -+ 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, -+ // Bytes 4a00 - 4a3f -+ 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, -+ // Bytes 4a40 - 4a7f -+ 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, -+ // Bytes 4a80 - 4abf -+ 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, -+ // Bytes 4ac0 - 4aff -+ 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, -+ 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, -+ 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, -+ 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x42, -+ 0xCC, 0x80, 0xCD, 0x33, 0x42, 0xCC, 0x81, 0xCD, -+ 0x33, 0x42, 0xCC, 0x93, 0xCD, 0x33, 0x43, 0xE1, -+ // Bytes 4b00 - 4b3f -+ 0x85, 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, -+ 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, -+ 0x43, 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, -+ 0x85, 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, -+ 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, -+ 0x43, 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, -+ 0x85, 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, -+ 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, -+ // Bytes 4b40 - 4b7f -+ 0x43, 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, -+ 0x85, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, -+ 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, -+ 0x43, 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, -+ 0x85, 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, -+ 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, -+ 0x43, 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, -+ 0x85, 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, -+ // Bytes 4b80 - 4bbf -+ 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, -+ 0x43, 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, -+ 0x86, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, -+ 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, -+ 0x43, 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, -+ 0x86, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, -+ 0x01, 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCE, -+ 0x33, 0x43, 0xE3, 0x82, 0x99, 0x11, 0x04, 0x43, -+ // Bytes 4bc0 - 4bff -+ 0xE3, 0x82, 0x9A, 0x11, 0x04, 0x46, 0xE0, 0xBD, -+ 0xB1, 0xE0, 0xBD, 0xB2, 0xA2, 0x27, 0x46, 0xE0, -+ 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0xA6, 0x27, 0x46, -+ 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x27, -+ 0x00, 0x01, -+} -+ -+// lookup returns the trie value for the first UTF-8 encoding in s and -+// the width in bytes of this encoding. The size will be 0 if s does not -+// hold enough bytes to complete the encoding. len(s) must be greater than 0. -+func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) { -+ c0 := s[0] -+ switch { -+ case c0 < 0x80: // is ASCII -+ return nfcValues[c0], 1 -+ case c0 < 0xC2: -+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII. -+ case c0 < 0xE0: // 2-byte UTF-8 -+ if len(s) < 2 { -+ return 0, 0 -+ } -+ i := nfcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c1), 2 -+ case c0 < 0xF0: // 3-byte UTF-8 -+ if len(s) < 3 { -+ return 0, 0 -+ } -+ i := nfcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = nfcIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c2), 3 -+ case c0 < 0xF8: // 4-byte UTF-8 -+ if len(s) < 4 { -+ return 0, 0 -+ } -+ i := nfcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = nfcIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ o = uint32(i)<<6 + uint32(c2) -+ i = nfcIndex[o] -+ c3 := s[3] -+ if c3 < 0x80 || 0xC0 <= c3 { -+ return 0, 3 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c3), 4 -+ } -+ // Illegal rune -+ return 0, 1 -+} -+ -+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -+// s must start with a full and valid UTF-8 encoded rune. -+func (t *nfcTrie) lookupUnsafe(s []byte) uint16 { -+ c0 := s[0] -+ if c0 < 0x80 { // is ASCII -+ return nfcValues[c0] -+ } -+ i := nfcIndex[c0] -+ if c0 < 0xE0 { // 2-byte UTF-8 -+ return t.lookupValue(uint32(i), s[1]) -+ } -+ i = nfcIndex[uint32(i)<<6+uint32(s[1])] -+ if c0 < 0xF0 { // 3-byte UTF-8 -+ return t.lookupValue(uint32(i), s[2]) -+ } -+ i = nfcIndex[uint32(i)<<6+uint32(s[2])] -+ if c0 < 0xF8 { // 4-byte UTF-8 -+ return t.lookupValue(uint32(i), s[3]) -+ } -+ return 0 -+} -+ -+// lookupString returns the trie value for the first UTF-8 encoding in s and -+// the width in bytes of this encoding. The size will be 0 if s does not -+// hold enough bytes to complete the encoding. len(s) must be greater than 0. -+func (t *nfcTrie) lookupString(s string) (v uint16, sz int) { -+ c0 := s[0] -+ switch { -+ case c0 < 0x80: // is ASCII -+ return nfcValues[c0], 1 -+ case c0 < 0xC2: -+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII. -+ case c0 < 0xE0: // 2-byte UTF-8 -+ if len(s) < 2 { -+ return 0, 0 -+ } -+ i := nfcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c1), 2 -+ case c0 < 0xF0: // 3-byte UTF-8 -+ if len(s) < 3 { -+ return 0, 0 -+ } -+ i := nfcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = nfcIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c2), 3 -+ case c0 < 0xF8: // 4-byte UTF-8 -+ if len(s) < 4 { -+ return 0, 0 -+ } -+ i := nfcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = nfcIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ o = uint32(i)<<6 + uint32(c2) -+ i = nfcIndex[o] -+ c3 := s[3] -+ if c3 < 0x80 || 0xC0 <= c3 { -+ return 0, 3 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c3), 4 -+ } -+ // Illegal rune -+ return 0, 1 -+} -+ -+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -+// s must start with a full and valid UTF-8 encoded rune. -+func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { -+ c0 := s[0] -+ if c0 < 0x80 { // is ASCII -+ return nfcValues[c0] -+ } -+ i := nfcIndex[c0] -+ if c0 < 0xE0 { // 2-byte UTF-8 -+ return t.lookupValue(uint32(i), s[1]) -+ } -+ i = nfcIndex[uint32(i)<<6+uint32(s[1])] -+ if c0 < 0xF0 { // 3-byte UTF-8 -+ return t.lookupValue(uint32(i), s[2]) -+ } -+ i = nfcIndex[uint32(i)<<6+uint32(s[2])] -+ if c0 < 0xF8 { // 4-byte UTF-8 -+ return t.lookupValue(uint32(i), s[3]) -+ } -+ return 0 -+} -+ -+// nfcTrie. Total size: 10798 bytes (10.54 KiB). Checksum: b5981cc85e3bd14. -+type nfcTrie struct{} -+ -+func newNfcTrie(i int) *nfcTrie { -+ return &nfcTrie{} -+} -+ -+// lookupValue determines the type of block n and looks up the value for b. -+func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 { -+ switch { -+ case n < 46: -+ return uint16(nfcValues[n<<6+uint32(b)]) -+ default: -+ n -= 46 -+ return uint16(nfcSparse.lookup(n, b)) -+ } -+} -+ -+// nfcValues: 48 blocks, 3072 entries, 6144 bytes -+// The third block is the zero block. -+var nfcValues = [3072]uint16{ -+ // Block 0x0, offset 0x0 -+ 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, -+ // Block 0x1, offset 0x40 -+ 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, -+ 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, -+ 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, -+ 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, -+ 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, -+ 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, -+ 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, -+ 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, -+ 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, -+ 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, -+ // Block 0x2, offset 0x80 -+ // Block 0x3, offset 0xc0 -+ 0xc0: 0x30b0, 0xc1: 0x30b5, 0xc2: 0x47c9, 0xc3: 0x30ba, 0xc4: 0x47d8, 0xc5: 0x47dd, -+ 0xc6: 0xa000, 0xc7: 0x47e7, 0xc8: 0x3123, 0xc9: 0x3128, 0xca: 0x47ec, 0xcb: 0x313c, -+ 0xcc: 0x31af, 0xcd: 0x31b4, 0xce: 0x31b9, 0xcf: 0x4800, 0xd1: 0x3245, -+ 0xd2: 0x3268, 0xd3: 0x326d, 0xd4: 0x480a, 0xd5: 0x480f, 0xd6: 0x481e, -+ 0xd8: 0xa000, 0xd9: 0x32f4, 0xda: 0x32f9, 0xdb: 0x32fe, 0xdc: 0x4850, 0xdd: 0x3376, -+ 0xe0: 0x33bc, 0xe1: 0x33c1, 0xe2: 0x485a, 0xe3: 0x33c6, -+ 0xe4: 0x4869, 0xe5: 0x486e, 0xe6: 0xa000, 0xe7: 0x4878, 0xe8: 0x342f, 0xe9: 0x3434, -+ 0xea: 0x487d, 0xeb: 0x3448, 0xec: 0x34c0, 0xed: 0x34c5, 0xee: 0x34ca, 0xef: 0x4891, -+ 0xf1: 0x3556, 0xf2: 0x3579, 0xf3: 0x357e, 0xf4: 0x489b, 0xf5: 0x48a0, -+ 0xf6: 0x48af, 0xf8: 0xa000, 0xf9: 0x360a, 0xfa: 0x360f, 0xfb: 0x3614, -+ 0xfc: 0x48e1, 0xfd: 0x3691, 0xff: 0x36aa, -+ // Block 0x4, offset 0x100 -+ 0x100: 0x30bf, 0x101: 0x33cb, 0x102: 0x47ce, 0x103: 0x485f, 0x104: 0x30dd, 0x105: 0x33e9, -+ 0x106: 0x30f1, 0x107: 0x33fd, 0x108: 0x30f6, 0x109: 0x3402, 0x10a: 0x30fb, 0x10b: 0x3407, -+ 0x10c: 0x3100, 0x10d: 0x340c, 0x10e: 0x310a, 0x10f: 0x3416, -+ 0x112: 0x47f1, 0x113: 0x4882, 0x114: 0x3132, 0x115: 0x343e, 0x116: 0x3137, 0x117: 0x3443, -+ 0x118: 0x3155, 0x119: 0x3461, 0x11a: 0x3146, 0x11b: 0x3452, 0x11c: 0x316e, 0x11d: 0x347a, -+ 0x11e: 0x3178, 0x11f: 0x3484, 0x120: 0x317d, 0x121: 0x3489, 0x122: 0x3187, 0x123: 0x3493, -+ 0x124: 0x318c, 0x125: 0x3498, 0x128: 0x31be, 0x129: 0x34cf, -+ 0x12a: 0x31c3, 0x12b: 0x34d4, 0x12c: 0x31c8, 0x12d: 0x34d9, 0x12e: 0x31eb, 0x12f: 0x34f7, -+ 0x130: 0x31cd, 0x134: 0x31f5, 0x135: 0x3501, -+ 0x136: 0x3209, 0x137: 0x351a, 0x139: 0x3213, 0x13a: 0x3524, 0x13b: 0x321d, -+ 0x13c: 0x352e, 0x13d: 0x3218, 0x13e: 0x3529, -+ // Block 0x5, offset 0x140 -+ 0x143: 0x3240, 0x144: 0x3551, 0x145: 0x3259, -+ 0x146: 0x356a, 0x147: 0x324f, 0x148: 0x3560, -+ 0x14c: 0x4814, 0x14d: 0x48a5, 0x14e: 0x3272, 0x14f: 0x3583, 0x150: 0x327c, 0x151: 0x358d, -+ 0x154: 0x329a, 0x155: 0x35ab, 0x156: 0x32b3, 0x157: 0x35c4, -+ 0x158: 0x32a4, 0x159: 0x35b5, 0x15a: 0x4837, 0x15b: 0x48c8, 0x15c: 0x32bd, 0x15d: 0x35ce, -+ 0x15e: 0x32cc, 0x15f: 0x35dd, 0x160: 0x483c, 0x161: 0x48cd, 0x162: 0x32e5, 0x163: 0x35fb, -+ 0x164: 0x32d6, 0x165: 0x35ec, 0x168: 0x4846, 0x169: 0x48d7, -+ 0x16a: 0x484b, 0x16b: 0x48dc, 0x16c: 0x3303, 0x16d: 0x3619, 0x16e: 0x330d, 0x16f: 0x3623, -+ 0x170: 0x3312, 0x171: 0x3628, 0x172: 0x3330, 0x173: 0x3646, 0x174: 0x3353, 0x175: 0x3669, -+ 0x176: 0x337b, 0x177: 0x3696, 0x178: 0x338f, 0x179: 0x339e, 0x17a: 0x36be, 0x17b: 0x33a8, -+ 0x17c: 0x36c8, 0x17d: 0x33ad, 0x17e: 0x36cd, 0x17f: 0xa000, -+ // Block 0x6, offset 0x180 -+ 0x184: 0x8100, 0x185: 0x8100, -+ 0x186: 0x8100, -+ 0x18d: 0x30c9, 0x18e: 0x33d5, 0x18f: 0x31d7, 0x190: 0x34e3, 0x191: 0x3281, -+ 0x192: 0x3592, 0x193: 0x3317, 0x194: 0x362d, 0x195: 0x3b10, 0x196: 0x3c9f, 0x197: 0x3b09, -+ 0x198: 0x3c98, 0x199: 0x3b17, 0x19a: 0x3ca6, 0x19b: 0x3b02, 0x19c: 0x3c91, -+ 0x19e: 0x39f1, 0x19f: 0x3b80, 0x1a0: 0x39ea, 0x1a1: 0x3b79, 0x1a2: 0x36f4, 0x1a3: 0x3706, -+ 0x1a6: 0x3182, 0x1a7: 0x348e, 0x1a8: 0x31ff, 0x1a9: 0x3510, -+ 0x1aa: 0x482d, 0x1ab: 0x48be, 0x1ac: 0x3ad1, 0x1ad: 0x3c60, 0x1ae: 0x3718, 0x1af: 0x371e, -+ 0x1b0: 0x3506, 0x1b4: 0x3169, 0x1b5: 0x3475, -+ 0x1b8: 0x323b, 0x1b9: 0x354c, 0x1ba: 0x39f8, 0x1bb: 0x3b87, -+ 0x1bc: 0x36ee, 0x1bd: 0x3700, 0x1be: 0x36fa, 0x1bf: 0x370c, -+ // Block 0x7, offset 0x1c0 -+ 0x1c0: 0x30ce, 0x1c1: 0x33da, 0x1c2: 0x30d3, 0x1c3: 0x33df, 0x1c4: 0x314b, 0x1c5: 0x3457, -+ 0x1c6: 0x3150, 0x1c7: 0x345c, 0x1c8: 0x31dc, 0x1c9: 0x34e8, 0x1ca: 0x31e1, 0x1cb: 0x34ed, -+ 0x1cc: 0x3286, 0x1cd: 0x3597, 0x1ce: 0x328b, 0x1cf: 0x359c, 0x1d0: 0x32a9, 0x1d1: 0x35ba, -+ 0x1d2: 0x32ae, 0x1d3: 0x35bf, 0x1d4: 0x331c, 0x1d5: 0x3632, 0x1d6: 0x3321, 0x1d7: 0x3637, -+ 0x1d8: 0x32c7, 0x1d9: 0x35d8, 0x1da: 0x32e0, 0x1db: 0x35f6, -+ 0x1de: 0x319b, 0x1df: 0x34a7, -+ 0x1e6: 0x47d3, 0x1e7: 0x4864, 0x1e8: 0x47fb, 0x1e9: 0x488c, -+ 0x1ea: 0x3aa0, 0x1eb: 0x3c2f, 0x1ec: 0x3a7d, 0x1ed: 0x3c0c, 0x1ee: 0x4819, 0x1ef: 0x48aa, -+ 0x1f0: 0x3a99, 0x1f1: 0x3c28, 0x1f2: 0x3385, 0x1f3: 0x36a0, -+ // Block 0x8, offset 0x200 -+ 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, -+ 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, -+ 0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933, -+ 0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e, -+ 0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e, -+ 0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e, -+ 0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e, -+ 0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e, -+ 0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101, -+ 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e, -+ 0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133, -+ // Block 0x9, offset 0x240 -+ 0x240: 0x4aef, 0x241: 0x4af4, 0x242: 0x9933, 0x243: 0x4af9, 0x244: 0x4bb2, 0x245: 0x9937, -+ 0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133, -+ 0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133, -+ 0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133, -+ 0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136, -+ 0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133, -+ 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, -+ 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, -+ 0x274: 0x01ee, -+ 0x27a: 0x8100, -+ 0x27e: 0x0037, -+ // Block 0xa, offset 0x280 -+ 0x284: 0x8100, 0x285: 0x36e2, -+ 0x286: 0x372a, 0x287: 0x00ce, 0x288: 0x3748, 0x289: 0x3754, 0x28a: 0x3766, -+ 0x28c: 0x3784, 0x28e: 0x3796, 0x28f: 0x37b4, 0x290: 0x3f49, 0x291: 0xa000, -+ 0x295: 0xa000, 0x297: 0xa000, -+ 0x299: 0xa000, -+ 0x29f: 0xa000, 0x2a1: 0xa000, -+ 0x2a5: 0xa000, 0x2a9: 0xa000, -+ 0x2aa: 0x3778, 0x2ab: 0x37a8, 0x2ac: 0x493f, 0x2ad: 0x37d8, 0x2ae: 0x4969, 0x2af: 0x37ea, -+ 0x2b0: 0x3fb1, 0x2b1: 0xa000, 0x2b5: 0xa000, -+ 0x2b7: 0xa000, 0x2b9: 0xa000, -+ 0x2bf: 0xa000, -+ // Block 0xb, offset 0x2c0 -+ 0x2c0: 0x3862, 0x2c1: 0x386e, 0x2c3: 0x385c, -+ 0x2c6: 0xa000, 0x2c7: 0x384a, -+ 0x2cc: 0x389e, 0x2cd: 0x3886, 0x2ce: 0x38b0, 0x2d0: 0xa000, -+ 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, -+ 0x2d8: 0xa000, 0x2d9: 0x3892, 0x2da: 0xa000, -+ 0x2de: 0xa000, 0x2e3: 0xa000, -+ 0x2e7: 0xa000, -+ 0x2eb: 0xa000, 0x2ed: 0xa000, -+ 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, -+ 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x3916, 0x2fa: 0xa000, -+ 0x2fe: 0xa000, -+ // Block 0xc, offset 0x300 -+ 0x301: 0x3874, 0x302: 0x38f8, -+ 0x310: 0x3850, 0x311: 0x38d4, -+ 0x312: 0x3856, 0x313: 0x38da, 0x316: 0x3868, 0x317: 0x38ec, -+ 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x396a, 0x31b: 0x3970, 0x31c: 0x387a, 0x31d: 0x38fe, -+ 0x31e: 0x3880, 0x31f: 0x3904, 0x322: 0x388c, 0x323: 0x3910, -+ 0x324: 0x3898, 0x325: 0x391c, 0x326: 0x38a4, 0x327: 0x3928, 0x328: 0xa000, 0x329: 0xa000, -+ 0x32a: 0x3976, 0x32b: 0x397c, 0x32c: 0x38ce, 0x32d: 0x3952, 0x32e: 0x38aa, 0x32f: 0x392e, -+ 0x330: 0x38b6, 0x331: 0x393a, 0x332: 0x38bc, 0x333: 0x3940, 0x334: 0x38c2, 0x335: 0x3946, -+ 0x338: 0x38c8, 0x339: 0x394c, -+ // Block 0xd, offset 0x340 -+ 0x351: 0x812e, -+ 0x352: 0x8133, 0x353: 0x8133, 0x354: 0x8133, 0x355: 0x8133, 0x356: 0x812e, 0x357: 0x8133, -+ 0x358: 0x8133, 0x359: 0x8133, 0x35a: 0x812f, 0x35b: 0x812e, 0x35c: 0x8133, 0x35d: 0x8133, -+ 0x35e: 0x8133, 0x35f: 0x8133, 0x360: 0x8133, 0x361: 0x8133, 0x362: 0x812e, 0x363: 0x812e, -+ 0x364: 0x812e, 0x365: 0x812e, 0x366: 0x812e, 0x367: 0x812e, 0x368: 0x8133, 0x369: 0x8133, -+ 0x36a: 0x812e, 0x36b: 0x8133, 0x36c: 0x8133, 0x36d: 0x812f, 0x36e: 0x8132, 0x36f: 0x8133, -+ 0x370: 0x8106, 0x371: 0x8107, 0x372: 0x8108, 0x373: 0x8109, 0x374: 0x810a, 0x375: 0x810b, -+ 0x376: 0x810c, 0x377: 0x810d, 0x378: 0x810e, 0x379: 0x810f, 0x37a: 0x810f, 0x37b: 0x8110, -+ 0x37c: 0x8111, 0x37d: 0x8112, 0x37f: 0x8113, -+ // Block 0xe, offset 0x380 -+ 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8117, -+ 0x38c: 0x8118, 0x38d: 0x8119, 0x38e: 0x811a, 0x38f: 0x811b, 0x390: 0x811c, 0x391: 0x811d, -+ 0x392: 0x811e, 0x393: 0x9933, 0x394: 0x9933, 0x395: 0x992e, 0x396: 0x812e, 0x397: 0x8133, -+ 0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x8133, 0x39b: 0x8133, 0x39c: 0x812e, 0x39d: 0x8133, -+ 0x39e: 0x8133, 0x39f: 0x812e, -+ 0x3b0: 0x811f, -+ // Block 0xf, offset 0x3c0 -+ 0x3ca: 0x8133, 0x3cb: 0x8133, -+ 0x3cc: 0x8133, 0x3cd: 0x8133, 0x3ce: 0x8133, 0x3cf: 0x812e, 0x3d0: 0x812e, 0x3d1: 0x812e, -+ 0x3d2: 0x812e, 0x3d3: 0x812e, 0x3d4: 0x8133, 0x3d5: 0x8133, 0x3d6: 0x8133, 0x3d7: 0x8133, -+ 0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x8133, 0x3dd: 0x8133, -+ 0x3de: 0x8133, 0x3df: 0x8133, 0x3e0: 0x8133, 0x3e1: 0x8133, 0x3e3: 0x812e, -+ 0x3e4: 0x8133, 0x3e5: 0x8133, 0x3e6: 0x812e, 0x3e7: 0x8133, 0x3e8: 0x8133, 0x3e9: 0x812e, -+ 0x3ea: 0x8133, 0x3eb: 0x8133, 0x3ec: 0x8133, 0x3ed: 0x812e, 0x3ee: 0x812e, 0x3ef: 0x812e, -+ 0x3f0: 0x8117, 0x3f1: 0x8118, 0x3f2: 0x8119, 0x3f3: 0x8133, 0x3f4: 0x8133, 0x3f5: 0x8133, -+ 0x3f6: 0x812e, 0x3f7: 0x8133, 0x3f8: 0x8133, 0x3f9: 0x812e, 0x3fa: 0x812e, 0x3fb: 0x8133, -+ 0x3fc: 0x8133, 0x3fd: 0x8133, 0x3fe: 0x8133, 0x3ff: 0x8133, -+ // Block 0x10, offset 0x400 -+ 0x405: 0xa000, -+ 0x406: 0x2e5d, 0x407: 0xa000, 0x408: 0x2e65, 0x409: 0xa000, 0x40a: 0x2e6d, 0x40b: 0xa000, -+ 0x40c: 0x2e75, 0x40d: 0xa000, 0x40e: 0x2e7d, 0x411: 0xa000, -+ 0x412: 0x2e85, -+ 0x434: 0x8103, 0x435: 0x9900, -+ 0x43a: 0xa000, 0x43b: 0x2e8d, -+ 0x43c: 0xa000, 0x43d: 0x2e95, 0x43e: 0xa000, 0x43f: 0xa000, -+ // Block 0x11, offset 0x440 -+ 0x440: 0x8133, 0x441: 0x8133, 0x442: 0x812e, 0x443: 0x8133, 0x444: 0x8133, 0x445: 0x8133, -+ 0x446: 0x8133, 0x447: 0x8133, 0x448: 0x8133, 0x449: 0x8133, 0x44a: 0x812e, 0x44b: 0x8133, -+ 0x44c: 0x8133, 0x44d: 0x8136, 0x44e: 0x812b, 0x44f: 0x812e, 0x450: 0x812a, 0x451: 0x8133, -+ 0x452: 0x8133, 0x453: 0x8133, 0x454: 0x8133, 0x455: 0x8133, 0x456: 0x8133, 0x457: 0x8133, -+ 0x458: 0x8133, 0x459: 0x8133, 0x45a: 0x8133, 0x45b: 0x8133, 0x45c: 0x8133, 0x45d: 0x8133, -+ 0x45e: 0x8133, 0x45f: 0x8133, 0x460: 0x8133, 0x461: 0x8133, 0x462: 0x8133, 0x463: 0x8133, -+ 0x464: 0x8133, 0x465: 0x8133, 0x466: 0x8133, 0x467: 0x8133, 0x468: 0x8133, 0x469: 0x8133, -+ 0x46a: 0x8133, 0x46b: 0x8133, 0x46c: 0x8133, 0x46d: 0x8133, 0x46e: 0x8133, 0x46f: 0x8133, -+ 0x470: 0x8133, 0x471: 0x8133, 0x472: 0x8133, 0x473: 0x8133, 0x474: 0x8133, 0x475: 0x8133, -+ 0x476: 0x8134, 0x477: 0x8132, 0x478: 0x8132, 0x479: 0x812e, 0x47a: 0x812d, 0x47b: 0x8133, -+ 0x47c: 0x8135, 0x47d: 0x812e, 0x47e: 0x8133, 0x47f: 0x812e, -+ // Block 0x12, offset 0x480 -+ 0x480: 0x30d8, 0x481: 0x33e4, 0x482: 0x30e2, 0x483: 0x33ee, 0x484: 0x30e7, 0x485: 0x33f3, -+ 0x486: 0x30ec, 0x487: 0x33f8, 0x488: 0x3a0d, 0x489: 0x3b9c, 0x48a: 0x3105, 0x48b: 0x3411, -+ 0x48c: 0x310f, 0x48d: 0x341b, 0x48e: 0x311e, 0x48f: 0x342a, 0x490: 0x3114, 0x491: 0x3420, -+ 0x492: 0x3119, 0x493: 0x3425, 0x494: 0x3a30, 0x495: 0x3bbf, 0x496: 0x3a37, 0x497: 0x3bc6, -+ 0x498: 0x315a, 0x499: 0x3466, 0x49a: 0x315f, 0x49b: 0x346b, 0x49c: 0x3a45, 0x49d: 0x3bd4, -+ 0x49e: 0x3164, 0x49f: 0x3470, 0x4a0: 0x3173, 0x4a1: 0x347f, 0x4a2: 0x3191, 0x4a3: 0x349d, -+ 0x4a4: 0x31a0, 0x4a5: 0x34ac, 0x4a6: 0x3196, 0x4a7: 0x34a2, 0x4a8: 0x31a5, 0x4a9: 0x34b1, -+ 0x4aa: 0x31aa, 0x4ab: 0x34b6, 0x4ac: 0x31f0, 0x4ad: 0x34fc, 0x4ae: 0x3a4c, 0x4af: 0x3bdb, -+ 0x4b0: 0x31fa, 0x4b1: 0x350b, 0x4b2: 0x3204, 0x4b3: 0x3515, 0x4b4: 0x320e, 0x4b5: 0x351f, -+ 0x4b6: 0x4805, 0x4b7: 0x4896, 0x4b8: 0x3a53, 0x4b9: 0x3be2, 0x4ba: 0x3227, 0x4bb: 0x3538, -+ 0x4bc: 0x3222, 0x4bd: 0x3533, 0x4be: 0x322c, 0x4bf: 0x353d, -+ // Block 0x13, offset 0x4c0 -+ 0x4c0: 0x3231, 0x4c1: 0x3542, 0x4c2: 0x3236, 0x4c3: 0x3547, 0x4c4: 0x324a, 0x4c5: 0x355b, -+ 0x4c6: 0x3254, 0x4c7: 0x3565, 0x4c8: 0x3263, 0x4c9: 0x3574, 0x4ca: 0x325e, 0x4cb: 0x356f, -+ 0x4cc: 0x3a76, 0x4cd: 0x3c05, 0x4ce: 0x3a84, 0x4cf: 0x3c13, 0x4d0: 0x3a8b, 0x4d1: 0x3c1a, -+ 0x4d2: 0x3a92, 0x4d3: 0x3c21, 0x4d4: 0x3290, 0x4d5: 0x35a1, 0x4d6: 0x3295, 0x4d7: 0x35a6, -+ 0x4d8: 0x329f, 0x4d9: 0x35b0, 0x4da: 0x4832, 0x4db: 0x48c3, 0x4dc: 0x3ad8, 0x4dd: 0x3c67, -+ 0x4de: 0x32b8, 0x4df: 0x35c9, 0x4e0: 0x32c2, 0x4e1: 0x35d3, 0x4e2: 0x4841, 0x4e3: 0x48d2, -+ 0x4e4: 0x3adf, 0x4e5: 0x3c6e, 0x4e6: 0x3ae6, 0x4e7: 0x3c75, 0x4e8: 0x3aed, 0x4e9: 0x3c7c, -+ 0x4ea: 0x32d1, 0x4eb: 0x35e2, 0x4ec: 0x32db, 0x4ed: 0x35f1, 0x4ee: 0x32ef, 0x4ef: 0x3605, -+ 0x4f0: 0x32ea, 0x4f1: 0x3600, 0x4f2: 0x332b, 0x4f3: 0x3641, 0x4f4: 0x333a, 0x4f5: 0x3650, -+ 0x4f6: 0x3335, 0x4f7: 0x364b, 0x4f8: 0x3af4, 0x4f9: 0x3c83, 0x4fa: 0x3afb, 0x4fb: 0x3c8a, -+ 0x4fc: 0x333f, 0x4fd: 0x3655, 0x4fe: 0x3344, 0x4ff: 0x365a, -+ // Block 0x14, offset 0x500 -+ 0x500: 0x3349, 0x501: 0x365f, 0x502: 0x334e, 0x503: 0x3664, 0x504: 0x335d, 0x505: 0x3673, -+ 0x506: 0x3358, 0x507: 0x366e, 0x508: 0x3362, 0x509: 0x367d, 0x50a: 0x3367, 0x50b: 0x3682, -+ 0x50c: 0x336c, 0x50d: 0x3687, 0x50e: 0x338a, 0x50f: 0x36a5, 0x510: 0x33a3, 0x511: 0x36c3, -+ 0x512: 0x33b2, 0x513: 0x36d2, 0x514: 0x33b7, 0x515: 0x36d7, 0x516: 0x34bb, 0x517: 0x35e7, -+ 0x518: 0x3678, 0x519: 0x36b4, 0x51b: 0x3712, -+ 0x520: 0x47e2, 0x521: 0x4873, 0x522: 0x30c4, 0x523: 0x33d0, -+ 0x524: 0x39b9, 0x525: 0x3b48, 0x526: 0x39b2, 0x527: 0x3b41, 0x528: 0x39c7, 0x529: 0x3b56, -+ 0x52a: 0x39c0, 0x52b: 0x3b4f, 0x52c: 0x39ff, 0x52d: 0x3b8e, 0x52e: 0x39d5, 0x52f: 0x3b64, -+ 0x530: 0x39ce, 0x531: 0x3b5d, 0x532: 0x39e3, 0x533: 0x3b72, 0x534: 0x39dc, 0x535: 0x3b6b, -+ 0x536: 0x3a06, 0x537: 0x3b95, 0x538: 0x47f6, 0x539: 0x4887, 0x53a: 0x3141, 0x53b: 0x344d, -+ 0x53c: 0x312d, 0x53d: 0x3439, 0x53e: 0x3a1b, 0x53f: 0x3baa, -+ // Block 0x15, offset 0x540 -+ 0x540: 0x3a14, 0x541: 0x3ba3, 0x542: 0x3a29, 0x543: 0x3bb8, 0x544: 0x3a22, 0x545: 0x3bb1, -+ 0x546: 0x3a3e, 0x547: 0x3bcd, 0x548: 0x31d2, 0x549: 0x34de, 0x54a: 0x31e6, 0x54b: 0x34f2, -+ 0x54c: 0x4828, 0x54d: 0x48b9, 0x54e: 0x3277, 0x54f: 0x3588, 0x550: 0x3a61, 0x551: 0x3bf0, -+ 0x552: 0x3a5a, 0x553: 0x3be9, 0x554: 0x3a6f, 0x555: 0x3bfe, 0x556: 0x3a68, 0x557: 0x3bf7, -+ 0x558: 0x3aca, 0x559: 0x3c59, 0x55a: 0x3aae, 0x55b: 0x3c3d, 0x55c: 0x3aa7, 0x55d: 0x3c36, -+ 0x55e: 0x3abc, 0x55f: 0x3c4b, 0x560: 0x3ab5, 0x561: 0x3c44, 0x562: 0x3ac3, 0x563: 0x3c52, -+ 0x564: 0x3326, 0x565: 0x363c, 0x566: 0x3308, 0x567: 0x361e, 0x568: 0x3b25, 0x569: 0x3cb4, -+ 0x56a: 0x3b1e, 0x56b: 0x3cad, 0x56c: 0x3b33, 0x56d: 0x3cc2, 0x56e: 0x3b2c, 0x56f: 0x3cbb, -+ 0x570: 0x3b3a, 0x571: 0x3cc9, 0x572: 0x3371, 0x573: 0x368c, 0x574: 0x3399, 0x575: 0x36b9, -+ 0x576: 0x3394, 0x577: 0x36af, 0x578: 0x3380, 0x579: 0x369b, -+ // Block 0x16, offset 0x580 -+ 0x580: 0x4945, 0x581: 0x494b, 0x582: 0x4a5f, 0x583: 0x4a77, 0x584: 0x4a67, 0x585: 0x4a7f, -+ 0x586: 0x4a6f, 0x587: 0x4a87, 0x588: 0x48eb, 0x589: 0x48f1, 0x58a: 0x49cf, 0x58b: 0x49e7, -+ 0x58c: 0x49d7, 0x58d: 0x49ef, 0x58e: 0x49df, 0x58f: 0x49f7, 0x590: 0x4957, 0x591: 0x495d, -+ 0x592: 0x3ef9, 0x593: 0x3f09, 0x594: 0x3f01, 0x595: 0x3f11, -+ 0x598: 0x48f7, 0x599: 0x48fd, 0x59a: 0x3e29, 0x59b: 0x3e39, 0x59c: 0x3e31, 0x59d: 0x3e41, -+ 0x5a0: 0x496f, 0x5a1: 0x4975, 0x5a2: 0x4a8f, 0x5a3: 0x4aa7, -+ 0x5a4: 0x4a97, 0x5a5: 0x4aaf, 0x5a6: 0x4a9f, 0x5a7: 0x4ab7, 0x5a8: 0x4903, 0x5a9: 0x4909, -+ 0x5aa: 0x49ff, 0x5ab: 0x4a17, 0x5ac: 0x4a07, 0x5ad: 0x4a1f, 0x5ae: 0x4a0f, 0x5af: 0x4a27, -+ 0x5b0: 0x4987, 0x5b1: 0x498d, 0x5b2: 0x3f59, 0x5b3: 0x3f71, 0x5b4: 0x3f61, 0x5b5: 0x3f79, -+ 0x5b6: 0x3f69, 0x5b7: 0x3f81, 0x5b8: 0x490f, 0x5b9: 0x4915, 0x5ba: 0x3e59, 0x5bb: 0x3e71, -+ 0x5bc: 0x3e61, 0x5bd: 0x3e79, 0x5be: 0x3e69, 0x5bf: 0x3e81, -+ // Block 0x17, offset 0x5c0 -+ 0x5c0: 0x4993, 0x5c1: 0x4999, 0x5c2: 0x3f89, 0x5c3: 0x3f99, 0x5c4: 0x3f91, 0x5c5: 0x3fa1, -+ 0x5c8: 0x491b, 0x5c9: 0x4921, 0x5ca: 0x3e89, 0x5cb: 0x3e99, -+ 0x5cc: 0x3e91, 0x5cd: 0x3ea1, 0x5d0: 0x49a5, 0x5d1: 0x49ab, -+ 0x5d2: 0x3fc1, 0x5d3: 0x3fd9, 0x5d4: 0x3fc9, 0x5d5: 0x3fe1, 0x5d6: 0x3fd1, 0x5d7: 0x3fe9, -+ 0x5d9: 0x4927, 0x5db: 0x3ea9, 0x5dd: 0x3eb1, -+ 0x5df: 0x3eb9, 0x5e0: 0x49bd, 0x5e1: 0x49c3, 0x5e2: 0x4abf, 0x5e3: 0x4ad7, -+ 0x5e4: 0x4ac7, 0x5e5: 0x4adf, 0x5e6: 0x4acf, 0x5e7: 0x4ae7, 0x5e8: 0x492d, 0x5e9: 0x4933, -+ 0x5ea: 0x4a2f, 0x5eb: 0x4a47, 0x5ec: 0x4a37, 0x5ed: 0x4a4f, 0x5ee: 0x4a3f, 0x5ef: 0x4a57, -+ 0x5f0: 0x4939, 0x5f1: 0x445f, 0x5f2: 0x37d2, 0x5f3: 0x4465, 0x5f4: 0x4963, 0x5f5: 0x446b, -+ 0x5f6: 0x37e4, 0x5f7: 0x4471, 0x5f8: 0x3802, 0x5f9: 0x4477, 0x5fa: 0x381a, 0x5fb: 0x447d, -+ 0x5fc: 0x49b1, 0x5fd: 0x4483, -+ // Block 0x18, offset 0x600 -+ 0x600: 0x3ee1, 0x601: 0x3ee9, 0x602: 0x42c5, 0x603: 0x42e3, 0x604: 0x42cf, 0x605: 0x42ed, -+ 0x606: 0x42d9, 0x607: 0x42f7, 0x608: 0x3e19, 0x609: 0x3e21, 0x60a: 0x4211, 0x60b: 0x422f, -+ 0x60c: 0x421b, 0x60d: 0x4239, 0x60e: 0x4225, 0x60f: 0x4243, 0x610: 0x3f29, 0x611: 0x3f31, -+ 0x612: 0x4301, 0x613: 0x431f, 0x614: 0x430b, 0x615: 0x4329, 0x616: 0x4315, 0x617: 0x4333, -+ 0x618: 0x3e49, 0x619: 0x3e51, 0x61a: 0x424d, 0x61b: 0x426b, 0x61c: 0x4257, 0x61d: 0x4275, -+ 0x61e: 0x4261, 0x61f: 0x427f, 0x620: 0x4001, 0x621: 0x4009, 0x622: 0x433d, 0x623: 0x435b, -+ 0x624: 0x4347, 0x625: 0x4365, 0x626: 0x4351, 0x627: 0x436f, 0x628: 0x3ec1, 0x629: 0x3ec9, -+ 0x62a: 0x4289, 0x62b: 0x42a7, 0x62c: 0x4293, 0x62d: 0x42b1, 0x62e: 0x429d, 0x62f: 0x42bb, -+ 0x630: 0x37c6, 0x631: 0x37c0, 0x632: 0x3ed1, 0x633: 0x37cc, 0x634: 0x3ed9, -+ 0x636: 0x4951, 0x637: 0x3ef1, 0x638: 0x3736, 0x639: 0x3730, 0x63a: 0x3724, 0x63b: 0x442f, -+ 0x63c: 0x373c, 0x63d: 0x8100, 0x63e: 0x0257, 0x63f: 0xa100, -+ // Block 0x19, offset 0x640 -+ 0x640: 0x8100, 0x641: 0x36e8, 0x642: 0x3f19, 0x643: 0x37de, 0x644: 0x3f21, -+ 0x646: 0x497b, 0x647: 0x3f39, 0x648: 0x3742, 0x649: 0x4435, 0x64a: 0x374e, 0x64b: 0x443b, -+ 0x64c: 0x375a, 0x64d: 0x3cd0, 0x64e: 0x3cd7, 0x64f: 0x3cde, 0x650: 0x37f6, 0x651: 0x37f0, -+ 0x652: 0x3f41, 0x653: 0x4625, 0x656: 0x37fc, 0x657: 0x3f51, -+ 0x658: 0x3772, 0x659: 0x376c, 0x65a: 0x3760, 0x65b: 0x4441, 0x65d: 0x3ce5, -+ 0x65e: 0x3cec, 0x65f: 0x3cf3, 0x660: 0x382c, 0x661: 0x3826, 0x662: 0x3fa9, 0x663: 0x462d, -+ 0x664: 0x380e, 0x665: 0x3814, 0x666: 0x3832, 0x667: 0x3fb9, 0x668: 0x37a2, 0x669: 0x379c, -+ 0x66a: 0x3790, 0x66b: 0x444d, 0x66c: 0x378a, 0x66d: 0x36dc, 0x66e: 0x4429, 0x66f: 0x0081, -+ 0x672: 0x3ff1, 0x673: 0x3838, 0x674: 0x3ff9, -+ 0x676: 0x49c9, 0x677: 0x4011, 0x678: 0x377e, 0x679: 0x4447, 0x67a: 0x37ae, 0x67b: 0x4459, -+ 0x67c: 0x37ba, 0x67d: 0x4397, 0x67e: 0xa100, -+ // Block 0x1a, offset 0x680 -+ 0x681: 0x3d47, 0x683: 0xa000, 0x684: 0x3d4e, 0x685: 0xa000, -+ 0x687: 0x3d55, 0x688: 0xa000, 0x689: 0x3d5c, -+ 0x68d: 0xa000, -+ 0x6a0: 0x30a6, 0x6a1: 0xa000, 0x6a2: 0x3d6a, -+ 0x6a4: 0xa000, 0x6a5: 0xa000, -+ 0x6ad: 0x3d63, 0x6ae: 0x30a1, 0x6af: 0x30ab, -+ 0x6b0: 0x3d71, 0x6b1: 0x3d78, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3d7f, 0x6b5: 0x3d86, -+ 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3d8d, 0x6b9: 0x3d94, 0x6ba: 0xa000, 0x6bb: 0xa000, -+ 0x6bc: 0xa000, 0x6bd: 0xa000, -+ // Block 0x1b, offset 0x6c0 -+ 0x6c0: 0x3d9b, 0x6c1: 0x3da2, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3db7, 0x6c5: 0x3dbe, -+ 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3dc5, 0x6c9: 0x3dcc, -+ 0x6d1: 0xa000, -+ 0x6d2: 0xa000, -+ 0x6e2: 0xa000, -+ 0x6e8: 0xa000, 0x6e9: 0xa000, -+ 0x6eb: 0xa000, 0x6ec: 0x3de1, 0x6ed: 0x3de8, 0x6ee: 0x3def, 0x6ef: 0x3df6, -+ 0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000, -+ // Block 0x1c, offset 0x700 -+ 0x706: 0xa000, 0x70b: 0xa000, -+ 0x70c: 0x4049, 0x70d: 0xa000, 0x70e: 0x4051, 0x70f: 0xa000, 0x710: 0x4059, 0x711: 0xa000, -+ 0x712: 0x4061, 0x713: 0xa000, 0x714: 0x4069, 0x715: 0xa000, 0x716: 0x4071, 0x717: 0xa000, -+ 0x718: 0x4079, 0x719: 0xa000, 0x71a: 0x4081, 0x71b: 0xa000, 0x71c: 0x4089, 0x71d: 0xa000, -+ 0x71e: 0x4091, 0x71f: 0xa000, 0x720: 0x4099, 0x721: 0xa000, 0x722: 0x40a1, -+ 0x724: 0xa000, 0x725: 0x40a9, 0x726: 0xa000, 0x727: 0x40b1, 0x728: 0xa000, 0x729: 0x40b9, -+ 0x72f: 0xa000, -+ 0x730: 0x40c1, 0x731: 0x40c9, 0x732: 0xa000, 0x733: 0x40d1, 0x734: 0x40d9, 0x735: 0xa000, -+ 0x736: 0x40e1, 0x737: 0x40e9, 0x738: 0xa000, 0x739: 0x40f1, 0x73a: 0x40f9, 0x73b: 0xa000, -+ 0x73c: 0x4101, 0x73d: 0x4109, -+ // Block 0x1d, offset 0x740 -+ 0x754: 0x4041, -+ 0x759: 0x9904, 0x75a: 0x9904, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000, -+ 0x75e: 0x4111, -+ 0x766: 0xa000, -+ 0x76b: 0xa000, 0x76c: 0x4121, 0x76d: 0xa000, 0x76e: 0x4129, 0x76f: 0xa000, -+ 0x770: 0x4131, 0x771: 0xa000, 0x772: 0x4139, 0x773: 0xa000, 0x774: 0x4141, 0x775: 0xa000, -+ 0x776: 0x4149, 0x777: 0xa000, 0x778: 0x4151, 0x779: 0xa000, 0x77a: 0x4159, 0x77b: 0xa000, -+ 0x77c: 0x4161, 0x77d: 0xa000, 0x77e: 0x4169, 0x77f: 0xa000, -+ // Block 0x1e, offset 0x780 -+ 0x780: 0x4171, 0x781: 0xa000, 0x782: 0x4179, 0x784: 0xa000, 0x785: 0x4181, -+ 0x786: 0xa000, 0x787: 0x4189, 0x788: 0xa000, 0x789: 0x4191, -+ 0x78f: 0xa000, 0x790: 0x4199, 0x791: 0x41a1, -+ 0x792: 0xa000, 0x793: 0x41a9, 0x794: 0x41b1, 0x795: 0xa000, 0x796: 0x41b9, 0x797: 0x41c1, -+ 0x798: 0xa000, 0x799: 0x41c9, 0x79a: 0x41d1, 0x79b: 0xa000, 0x79c: 0x41d9, 0x79d: 0x41e1, -+ 0x7af: 0xa000, -+ 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x4119, -+ 0x7b7: 0x41e9, 0x7b8: 0x41f1, 0x7b9: 0x41f9, 0x7ba: 0x4201, -+ 0x7bd: 0xa000, 0x7be: 0x4209, -+ // Block 0x1f, offset 0x7c0 -+ 0x7c0: 0x1472, 0x7c1: 0x0df6, 0x7c2: 0x14ce, 0x7c3: 0x149a, 0x7c4: 0x0f52, 0x7c5: 0x07e6, -+ 0x7c6: 0x09da, 0x7c7: 0x1726, 0x7c8: 0x1726, 0x7c9: 0x0b06, 0x7ca: 0x155a, 0x7cb: 0x0a3e, -+ 0x7cc: 0x0b02, 0x7cd: 0x0cea, 0x7ce: 0x10ca, 0x7cf: 0x125a, 0x7d0: 0x1392, 0x7d1: 0x13ce, -+ 0x7d2: 0x1402, 0x7d3: 0x1516, 0x7d4: 0x0e6e, 0x7d5: 0x0efa, 0x7d6: 0x0fa6, 0x7d7: 0x103e, -+ 0x7d8: 0x135a, 0x7d9: 0x1542, 0x7da: 0x166e, 0x7db: 0x080a, 0x7dc: 0x09ae, 0x7dd: 0x0e82, -+ 0x7de: 0x0fca, 0x7df: 0x138e, 0x7e0: 0x16be, 0x7e1: 0x0bae, 0x7e2: 0x0f72, 0x7e3: 0x137e, -+ 0x7e4: 0x1412, 0x7e5: 0x0d1e, 0x7e6: 0x12b6, 0x7e7: 0x13da, 0x7e8: 0x0c1a, 0x7e9: 0x0e0a, -+ 0x7ea: 0x0f12, 0x7eb: 0x1016, 0x7ec: 0x1522, 0x7ed: 0x084a, 0x7ee: 0x08e2, 0x7ef: 0x094e, -+ 0x7f0: 0x0d86, 0x7f1: 0x0e7a, 0x7f2: 0x0fc6, 0x7f3: 0x10ea, 0x7f4: 0x1272, 0x7f5: 0x1386, -+ 0x7f6: 0x139e, 0x7f7: 0x14c2, 0x7f8: 0x15ea, 0x7f9: 0x169e, 0x7fa: 0x16ba, 0x7fb: 0x1126, -+ 0x7fc: 0x1166, 0x7fd: 0x121e, 0x7fe: 0x133e, 0x7ff: 0x1576, -+ // Block 0x20, offset 0x800 -+ 0x800: 0x16c6, 0x801: 0x1446, 0x802: 0x0ac2, 0x803: 0x0c36, 0x804: 0x11d6, 0x805: 0x1296, -+ 0x806: 0x0ffa, 0x807: 0x112e, 0x808: 0x1492, 0x809: 0x15e2, 0x80a: 0x0abe, 0x80b: 0x0b8a, -+ 0x80c: 0x0e72, 0x80d: 0x0f26, 0x80e: 0x0f5a, 0x80f: 0x120e, 0x810: 0x1236, 0x811: 0x15a2, -+ 0x812: 0x094a, 0x813: 0x12a2, 0x814: 0x08ee, 0x815: 0x08ea, 0x816: 0x1192, 0x817: 0x1222, -+ 0x818: 0x1356, 0x819: 0x15aa, 0x81a: 0x1462, 0x81b: 0x0d22, 0x81c: 0x0e6e, 0x81d: 0x1452, -+ 0x81e: 0x07f2, 0x81f: 0x0b5e, 0x820: 0x0c8e, 0x821: 0x102a, 0x822: 0x10aa, 0x823: 0x096e, -+ 0x824: 0x1136, 0x825: 0x085a, 0x826: 0x0c72, 0x827: 0x07d2, 0x828: 0x0ee6, 0x829: 0x0d9e, -+ 0x82a: 0x120a, 0x82b: 0x09c2, 0x82c: 0x0aae, 0x82d: 0x10f6, 0x82e: 0x135e, 0x82f: 0x1436, -+ 0x830: 0x0eb2, 0x831: 0x14f2, 0x832: 0x0ede, 0x833: 0x0d32, 0x834: 0x1316, 0x835: 0x0d52, -+ 0x836: 0x10a6, 0x837: 0x0826, 0x838: 0x08a2, 0x839: 0x08e6, 0x83a: 0x0e4e, 0x83b: 0x11f6, -+ 0x83c: 0x12ee, 0x83d: 0x1442, 0x83e: 0x1556, 0x83f: 0x0956, -+ // Block 0x21, offset 0x840 -+ 0x840: 0x0a0a, 0x841: 0x0b12, 0x842: 0x0c2a, 0x843: 0x0dba, 0x844: 0x0f76, 0x845: 0x113a, -+ 0x846: 0x1592, 0x847: 0x1676, 0x848: 0x16ca, 0x849: 0x16e2, 0x84a: 0x0932, 0x84b: 0x0dee, -+ 0x84c: 0x0e9e, 0x84d: 0x14e6, 0x84e: 0x0bf6, 0x84f: 0x0cd2, 0x850: 0x0cee, 0x851: 0x0d7e, -+ 0x852: 0x0f66, 0x853: 0x0fb2, 0x854: 0x1062, 0x855: 0x1186, 0x856: 0x122a, 0x857: 0x128e, -+ 0x858: 0x14d6, 0x859: 0x1366, 0x85a: 0x14fe, 0x85b: 0x157a, 0x85c: 0x090a, 0x85d: 0x0936, -+ 0x85e: 0x0a1e, 0x85f: 0x0fa2, 0x860: 0x13ee, 0x861: 0x1436, 0x862: 0x0c16, 0x863: 0x0c86, -+ 0x864: 0x0d4a, 0x865: 0x0eaa, 0x866: 0x11d2, 0x867: 0x101e, 0x868: 0x0836, 0x869: 0x0a7a, -+ 0x86a: 0x0b5e, 0x86b: 0x0bc2, 0x86c: 0x0c92, 0x86d: 0x103a, 0x86e: 0x1056, 0x86f: 0x1266, -+ 0x870: 0x1286, 0x871: 0x155e, 0x872: 0x15de, 0x873: 0x15ee, 0x874: 0x162a, 0x875: 0x084e, -+ 0x876: 0x117a, 0x877: 0x154a, 0x878: 0x15c6, 0x879: 0x0caa, 0x87a: 0x0812, 0x87b: 0x0872, -+ 0x87c: 0x0b62, 0x87d: 0x0b82, 0x87e: 0x0daa, 0x87f: 0x0e6e, -+ // Block 0x22, offset 0x880 -+ 0x880: 0x0fbe, 0x881: 0x10c6, 0x882: 0x1372, 0x883: 0x1512, 0x884: 0x171e, 0x885: 0x0dde, -+ 0x886: 0x159e, 0x887: 0x092e, 0x888: 0x0e2a, 0x889: 0x0e36, 0x88a: 0x0f0a, 0x88b: 0x0f42, -+ 0x88c: 0x1046, 0x88d: 0x10a2, 0x88e: 0x1122, 0x88f: 0x1206, 0x890: 0x1636, 0x891: 0x08aa, -+ 0x892: 0x0cfe, 0x893: 0x15ae, 0x894: 0x0862, 0x895: 0x0ba6, 0x896: 0x0f2a, 0x897: 0x14da, -+ 0x898: 0x0c62, 0x899: 0x0cb2, 0x89a: 0x0e3e, 0x89b: 0x102a, 0x89c: 0x15b6, 0x89d: 0x0912, -+ 0x89e: 0x09fa, 0x89f: 0x0b92, 0x8a0: 0x0dce, 0x8a1: 0x0e1a, 0x8a2: 0x0e5a, 0x8a3: 0x0eee, -+ 0x8a4: 0x1042, 0x8a5: 0x10b6, 0x8a6: 0x1252, 0x8a7: 0x13f2, 0x8a8: 0x13fe, 0x8a9: 0x1552, -+ 0x8aa: 0x15d2, 0x8ab: 0x097e, 0x8ac: 0x0f46, 0x8ad: 0x09fe, 0x8ae: 0x0fc2, 0x8af: 0x1066, -+ 0x8b0: 0x1382, 0x8b1: 0x15ba, 0x8b2: 0x16a6, 0x8b3: 0x16ce, 0x8b4: 0x0e32, 0x8b5: 0x0f22, -+ 0x8b6: 0x12be, 0x8b7: 0x11b2, 0x8b8: 0x11be, 0x8b9: 0x11e2, 0x8ba: 0x1012, 0x8bb: 0x0f9a, -+ 0x8bc: 0x145e, 0x8bd: 0x082e, 0x8be: 0x1326, 0x8bf: 0x0916, -+ // Block 0x23, offset 0x8c0 -+ 0x8c0: 0x0906, 0x8c1: 0x0c06, 0x8c2: 0x0d26, 0x8c3: 0x11ee, 0x8c4: 0x0b4e, 0x8c5: 0x0efe, -+ 0x8c6: 0x0dea, 0x8c7: 0x14e2, 0x8c8: 0x13e2, 0x8c9: 0x15a6, 0x8ca: 0x141e, 0x8cb: 0x0c22, -+ 0x8cc: 0x0882, 0x8cd: 0x0a56, 0x8d0: 0x0aaa, -+ 0x8d2: 0x0dda, 0x8d5: 0x08f2, 0x8d6: 0x101a, 0x8d7: 0x10de, -+ 0x8d8: 0x1142, 0x8d9: 0x115e, 0x8da: 0x1162, 0x8db: 0x1176, 0x8dc: 0x15f6, 0x8dd: 0x11e6, -+ 0x8de: 0x126a, 0x8e0: 0x138a, 0x8e2: 0x144e, -+ 0x8e5: 0x1502, 0x8e6: 0x152e, -+ 0x8ea: 0x164a, 0x8eb: 0x164e, 0x8ec: 0x1652, 0x8ed: 0x16b6, 0x8ee: 0x1526, 0x8ef: 0x15c2, -+ 0x8f0: 0x0852, 0x8f1: 0x0876, 0x8f2: 0x088a, 0x8f3: 0x0946, 0x8f4: 0x0952, 0x8f5: 0x0992, -+ 0x8f6: 0x0a46, 0x8f7: 0x0a62, 0x8f8: 0x0a6a, 0x8f9: 0x0aa6, 0x8fa: 0x0ab2, 0x8fb: 0x0b8e, -+ 0x8fc: 0x0b96, 0x8fd: 0x0c9e, 0x8fe: 0x0cc6, 0x8ff: 0x0cce, -+ // Block 0x24, offset 0x900 -+ 0x900: 0x0ce6, 0x901: 0x0d92, 0x902: 0x0dc2, 0x903: 0x0de2, 0x904: 0x0e52, 0x905: 0x0f16, -+ 0x906: 0x0f32, 0x907: 0x0f62, 0x908: 0x0fb6, 0x909: 0x0fd6, 0x90a: 0x104a, 0x90b: 0x112a, -+ 0x90c: 0x1146, 0x90d: 0x114e, 0x90e: 0x114a, 0x90f: 0x1152, 0x910: 0x1156, 0x911: 0x115a, -+ 0x912: 0x116e, 0x913: 0x1172, 0x914: 0x1196, 0x915: 0x11aa, 0x916: 0x11c6, 0x917: 0x122a, -+ 0x918: 0x1232, 0x919: 0x123a, 0x91a: 0x124e, 0x91b: 0x1276, 0x91c: 0x12c6, 0x91d: 0x12fa, -+ 0x91e: 0x12fa, 0x91f: 0x1362, 0x920: 0x140a, 0x921: 0x1422, 0x922: 0x1456, 0x923: 0x145a, -+ 0x924: 0x149e, 0x925: 0x14a2, 0x926: 0x14fa, 0x927: 0x1502, 0x928: 0x15d6, 0x929: 0x161a, -+ 0x92a: 0x1632, 0x92b: 0x0c96, 0x92c: 0x184b, 0x92d: 0x12de, -+ 0x930: 0x07da, 0x931: 0x08de, 0x932: 0x089e, 0x933: 0x0846, 0x934: 0x0886, 0x935: 0x08b2, -+ 0x936: 0x0942, 0x937: 0x095e, 0x938: 0x0a46, 0x939: 0x0a32, 0x93a: 0x0a42, 0x93b: 0x0a5e, -+ 0x93c: 0x0aaa, 0x93d: 0x0aba, 0x93e: 0x0afe, 0x93f: 0x0b0a, -+ // Block 0x25, offset 0x940 -+ 0x940: 0x0b26, 0x941: 0x0b36, 0x942: 0x0c1e, 0x943: 0x0c26, 0x944: 0x0c56, 0x945: 0x0c76, -+ 0x946: 0x0ca6, 0x947: 0x0cbe, 0x948: 0x0cae, 0x949: 0x0cce, 0x94a: 0x0cc2, 0x94b: 0x0ce6, -+ 0x94c: 0x0d02, 0x94d: 0x0d5a, 0x94e: 0x0d66, 0x94f: 0x0d6e, 0x950: 0x0d96, 0x951: 0x0dda, -+ 0x952: 0x0e0a, 0x953: 0x0e0e, 0x954: 0x0e22, 0x955: 0x0ea2, 0x956: 0x0eb2, 0x957: 0x0f0a, -+ 0x958: 0x0f56, 0x959: 0x0f4e, 0x95a: 0x0f62, 0x95b: 0x0f7e, 0x95c: 0x0fb6, 0x95d: 0x110e, -+ 0x95e: 0x0fda, 0x95f: 0x100e, 0x960: 0x101a, 0x961: 0x105a, 0x962: 0x1076, 0x963: 0x109a, -+ 0x964: 0x10be, 0x965: 0x10c2, 0x966: 0x10de, 0x967: 0x10e2, 0x968: 0x10f2, 0x969: 0x1106, -+ 0x96a: 0x1102, 0x96b: 0x1132, 0x96c: 0x11ae, 0x96d: 0x11c6, 0x96e: 0x11de, 0x96f: 0x1216, -+ 0x970: 0x122a, 0x971: 0x1246, 0x972: 0x1276, 0x973: 0x132a, 0x974: 0x1352, 0x975: 0x13c6, -+ 0x976: 0x140e, 0x977: 0x141a, 0x978: 0x1422, 0x979: 0x143a, 0x97a: 0x144e, 0x97b: 0x143e, -+ 0x97c: 0x1456, 0x97d: 0x1452, 0x97e: 0x144a, 0x97f: 0x145a, -+ // Block 0x26, offset 0x980 -+ 0x980: 0x1466, 0x981: 0x14a2, 0x982: 0x14de, 0x983: 0x150e, 0x984: 0x1546, 0x985: 0x1566, -+ 0x986: 0x15b2, 0x987: 0x15d6, 0x988: 0x15f6, 0x989: 0x160a, 0x98a: 0x161a, 0x98b: 0x1626, -+ 0x98c: 0x1632, 0x98d: 0x1686, 0x98e: 0x1726, 0x98f: 0x17e2, 0x990: 0x17dd, 0x991: 0x180f, -+ 0x992: 0x0702, 0x993: 0x072a, 0x994: 0x072e, 0x995: 0x1891, 0x996: 0x18be, 0x997: 0x1936, -+ 0x998: 0x1712, 0x999: 0x1722, -+ // Block 0x27, offset 0x9c0 -+ 0x9c0: 0x07f6, 0x9c1: 0x07ee, 0x9c2: 0x07fe, 0x9c3: 0x1774, 0x9c4: 0x0842, 0x9c5: 0x0852, -+ 0x9c6: 0x0856, 0x9c7: 0x085e, 0x9c8: 0x0866, 0x9c9: 0x086a, 0x9ca: 0x0876, 0x9cb: 0x086e, -+ 0x9cc: 0x06ae, 0x9cd: 0x1788, 0x9ce: 0x088a, 0x9cf: 0x088e, 0x9d0: 0x0892, 0x9d1: 0x08ae, -+ 0x9d2: 0x1779, 0x9d3: 0x06b2, 0x9d4: 0x089a, 0x9d5: 0x08ba, 0x9d6: 0x1783, 0x9d7: 0x08ca, -+ 0x9d8: 0x08d2, 0x9d9: 0x0832, 0x9da: 0x08da, 0x9db: 0x08de, 0x9dc: 0x195e, 0x9dd: 0x08fa, -+ 0x9de: 0x0902, 0x9df: 0x06ba, 0x9e0: 0x091a, 0x9e1: 0x091e, 0x9e2: 0x0926, 0x9e3: 0x092a, -+ 0x9e4: 0x06be, 0x9e5: 0x0942, 0x9e6: 0x0946, 0x9e7: 0x0952, 0x9e8: 0x095e, 0x9e9: 0x0962, -+ 0x9ea: 0x0966, 0x9eb: 0x096e, 0x9ec: 0x098e, 0x9ed: 0x0992, 0x9ee: 0x099a, 0x9ef: 0x09aa, -+ 0x9f0: 0x09b2, 0x9f1: 0x09b6, 0x9f2: 0x09b6, 0x9f3: 0x09b6, 0x9f4: 0x1797, 0x9f5: 0x0f8e, -+ 0x9f6: 0x09ca, 0x9f7: 0x09d2, 0x9f8: 0x179c, 0x9f9: 0x09de, 0x9fa: 0x09e6, 0x9fb: 0x09ee, -+ 0x9fc: 0x0a16, 0x9fd: 0x0a02, 0x9fe: 0x0a0e, 0x9ff: 0x0a12, -+ // Block 0x28, offset 0xa00 -+ 0xa00: 0x0a1a, 0xa01: 0x0a22, 0xa02: 0x0a26, 0xa03: 0x0a2e, 0xa04: 0x0a36, 0xa05: 0x0a3a, -+ 0xa06: 0x0a3a, 0xa07: 0x0a42, 0xa08: 0x0a4a, 0xa09: 0x0a4e, 0xa0a: 0x0a5a, 0xa0b: 0x0a7e, -+ 0xa0c: 0x0a62, 0xa0d: 0x0a82, 0xa0e: 0x0a66, 0xa0f: 0x0a6e, 0xa10: 0x0906, 0xa11: 0x0aca, -+ 0xa12: 0x0a92, 0xa13: 0x0a96, 0xa14: 0x0a9a, 0xa15: 0x0a8e, 0xa16: 0x0aa2, 0xa17: 0x0a9e, -+ 0xa18: 0x0ab6, 0xa19: 0x17a1, 0xa1a: 0x0ad2, 0xa1b: 0x0ad6, 0xa1c: 0x0ade, 0xa1d: 0x0aea, -+ 0xa1e: 0x0af2, 0xa1f: 0x0b0e, 0xa20: 0x17a6, 0xa21: 0x17ab, 0xa22: 0x0b1a, 0xa23: 0x0b1e, -+ 0xa24: 0x0b22, 0xa25: 0x0b16, 0xa26: 0x0b2a, 0xa27: 0x06c2, 0xa28: 0x06c6, 0xa29: 0x0b32, -+ 0xa2a: 0x0b3a, 0xa2b: 0x0b3a, 0xa2c: 0x17b0, 0xa2d: 0x0b56, 0xa2e: 0x0b5a, 0xa2f: 0x0b5e, -+ 0xa30: 0x0b66, 0xa31: 0x17b5, 0xa32: 0x0b6e, 0xa33: 0x0b72, 0xa34: 0x0c4a, 0xa35: 0x0b7a, -+ 0xa36: 0x06ca, 0xa37: 0x0b86, 0xa38: 0x0b96, 0xa39: 0x0ba2, 0xa3a: 0x0b9e, 0xa3b: 0x17bf, -+ 0xa3c: 0x0baa, 0xa3d: 0x17c4, 0xa3e: 0x0bb6, 0xa3f: 0x0bb2, -+ // Block 0x29, offset 0xa40 -+ 0xa40: 0x0bba, 0xa41: 0x0bca, 0xa42: 0x0bce, 0xa43: 0x06ce, 0xa44: 0x0bde, 0xa45: 0x0be6, -+ 0xa46: 0x0bea, 0xa47: 0x0bee, 0xa48: 0x06d2, 0xa49: 0x17c9, 0xa4a: 0x06d6, 0xa4b: 0x0c0a, -+ 0xa4c: 0x0c0e, 0xa4d: 0x0c12, 0xa4e: 0x0c1a, 0xa4f: 0x1990, 0xa50: 0x0c32, 0xa51: 0x17d3, -+ 0xa52: 0x17d3, 0xa53: 0x12d2, 0xa54: 0x0c42, 0xa55: 0x0c42, 0xa56: 0x06da, 0xa57: 0x17f6, -+ 0xa58: 0x18c8, 0xa59: 0x0c52, 0xa5a: 0x0c5a, 0xa5b: 0x06de, 0xa5c: 0x0c6e, 0xa5d: 0x0c7e, -+ 0xa5e: 0x0c82, 0xa5f: 0x0c8a, 0xa60: 0x0c9a, 0xa61: 0x06e6, 0xa62: 0x06e2, 0xa63: 0x0c9e, -+ 0xa64: 0x17d8, 0xa65: 0x0ca2, 0xa66: 0x0cb6, 0xa67: 0x0cba, 0xa68: 0x0cbe, 0xa69: 0x0cba, -+ 0xa6a: 0x0cca, 0xa6b: 0x0cce, 0xa6c: 0x0cde, 0xa6d: 0x0cd6, 0xa6e: 0x0cda, 0xa6f: 0x0ce2, -+ 0xa70: 0x0ce6, 0xa71: 0x0cea, 0xa72: 0x0cf6, 0xa73: 0x0cfa, 0xa74: 0x0d12, 0xa75: 0x0d1a, -+ 0xa76: 0x0d2a, 0xa77: 0x0d3e, 0xa78: 0x17e7, 0xa79: 0x0d3a, 0xa7a: 0x0d2e, 0xa7b: 0x0d46, -+ 0xa7c: 0x0d4e, 0xa7d: 0x0d62, 0xa7e: 0x17ec, 0xa7f: 0x0d6a, -+ // Block 0x2a, offset 0xa80 -+ 0xa80: 0x0d5e, 0xa81: 0x0d56, 0xa82: 0x06ea, 0xa83: 0x0d72, 0xa84: 0x0d7a, 0xa85: 0x0d82, -+ 0xa86: 0x0d76, 0xa87: 0x06ee, 0xa88: 0x0d92, 0xa89: 0x0d9a, 0xa8a: 0x17f1, 0xa8b: 0x0dc6, -+ 0xa8c: 0x0dfa, 0xa8d: 0x0dd6, 0xa8e: 0x06fa, 0xa8f: 0x0de2, 0xa90: 0x06f6, 0xa91: 0x06f2, -+ 0xa92: 0x08be, 0xa93: 0x08c2, 0xa94: 0x0dfe, 0xa95: 0x0de6, 0xa96: 0x12a6, 0xa97: 0x075e, -+ 0xa98: 0x0e0a, 0xa99: 0x0e0e, 0xa9a: 0x0e12, 0xa9b: 0x0e26, 0xa9c: 0x0e1e, 0xa9d: 0x180a, -+ 0xa9e: 0x06fe, 0xa9f: 0x0e3a, 0xaa0: 0x0e2e, 0xaa1: 0x0e4a, 0xaa2: 0x0e52, 0xaa3: 0x1814, -+ 0xaa4: 0x0e56, 0xaa5: 0x0e42, 0xaa6: 0x0e5e, 0xaa7: 0x0702, 0xaa8: 0x0e62, 0xaa9: 0x0e66, -+ 0xaaa: 0x0e6a, 0xaab: 0x0e76, 0xaac: 0x1819, 0xaad: 0x0e7e, 0xaae: 0x0706, 0xaaf: 0x0e8a, -+ 0xab0: 0x181e, 0xab1: 0x0e8e, 0xab2: 0x070a, 0xab3: 0x0e9a, 0xab4: 0x0ea6, 0xab5: 0x0eb2, -+ 0xab6: 0x0eb6, 0xab7: 0x1823, 0xab8: 0x17ba, 0xab9: 0x1828, 0xaba: 0x0ed6, 0xabb: 0x182d, -+ 0xabc: 0x0ee2, 0xabd: 0x0eea, 0xabe: 0x0eda, 0xabf: 0x0ef6, -+ // Block 0x2b, offset 0xac0 -+ 0xac0: 0x0f06, 0xac1: 0x0f16, 0xac2: 0x0f0a, 0xac3: 0x0f0e, 0xac4: 0x0f1a, 0xac5: 0x0f1e, -+ 0xac6: 0x1832, 0xac7: 0x0f02, 0xac8: 0x0f36, 0xac9: 0x0f3a, 0xaca: 0x070e, 0xacb: 0x0f4e, -+ 0xacc: 0x0f4a, 0xacd: 0x1837, 0xace: 0x0f2e, 0xacf: 0x0f6a, 0xad0: 0x183c, 0xad1: 0x1841, -+ 0xad2: 0x0f6e, 0xad3: 0x0f82, 0xad4: 0x0f7e, 0xad5: 0x0f7a, 0xad6: 0x0712, 0xad7: 0x0f86, -+ 0xad8: 0x0f96, 0xad9: 0x0f92, 0xada: 0x0f9e, 0xadb: 0x177e, 0xadc: 0x0fae, 0xadd: 0x1846, -+ 0xade: 0x0fba, 0xadf: 0x1850, 0xae0: 0x0fce, 0xae1: 0x0fda, 0xae2: 0x0fee, 0xae3: 0x1855, -+ 0xae4: 0x1002, 0xae5: 0x1006, 0xae6: 0x185a, 0xae7: 0x185f, 0xae8: 0x1022, 0xae9: 0x1032, -+ 0xaea: 0x0716, 0xaeb: 0x1036, 0xaec: 0x071a, 0xaed: 0x071a, 0xaee: 0x104e, 0xaef: 0x1052, -+ 0xaf0: 0x105a, 0xaf1: 0x105e, 0xaf2: 0x106a, 0xaf3: 0x071e, 0xaf4: 0x1082, 0xaf5: 0x1864, -+ 0xaf6: 0x109e, 0xaf7: 0x1869, 0xaf8: 0x10aa, 0xaf9: 0x17ce, 0xafa: 0x10ba, 0xafb: 0x186e, -+ 0xafc: 0x1873, 0xafd: 0x1878, 0xafe: 0x0722, 0xaff: 0x0726, -+ // Block 0x2c, offset 0xb00 -+ 0xb00: 0x10f2, 0xb01: 0x1882, 0xb02: 0x187d, 0xb03: 0x1887, 0xb04: 0x188c, 0xb05: 0x10fa, -+ 0xb06: 0x10fe, 0xb07: 0x10fe, 0xb08: 0x1106, 0xb09: 0x072e, 0xb0a: 0x110a, 0xb0b: 0x0732, -+ 0xb0c: 0x0736, 0xb0d: 0x1896, 0xb0e: 0x111e, 0xb0f: 0x1126, 0xb10: 0x1132, 0xb11: 0x073a, -+ 0xb12: 0x189b, 0xb13: 0x1156, 0xb14: 0x18a0, 0xb15: 0x18a5, 0xb16: 0x1176, 0xb17: 0x118e, -+ 0xb18: 0x073e, 0xb19: 0x1196, 0xb1a: 0x119a, 0xb1b: 0x119e, 0xb1c: 0x18aa, 0xb1d: 0x18af, -+ 0xb1e: 0x18af, 0xb1f: 0x11b6, 0xb20: 0x0742, 0xb21: 0x18b4, 0xb22: 0x11ca, 0xb23: 0x11ce, -+ 0xb24: 0x0746, 0xb25: 0x18b9, 0xb26: 0x11ea, 0xb27: 0x074a, 0xb28: 0x11fa, 0xb29: 0x11f2, -+ 0xb2a: 0x1202, 0xb2b: 0x18c3, 0xb2c: 0x121a, 0xb2d: 0x074e, 0xb2e: 0x1226, 0xb2f: 0x122e, -+ 0xb30: 0x123e, 0xb31: 0x0752, 0xb32: 0x18cd, 0xb33: 0x18d2, 0xb34: 0x0756, 0xb35: 0x18d7, -+ 0xb36: 0x1256, 0xb37: 0x18dc, 0xb38: 0x1262, 0xb39: 0x126e, 0xb3a: 0x1276, 0xb3b: 0x18e1, -+ 0xb3c: 0x18e6, 0xb3d: 0x128a, 0xb3e: 0x18eb, 0xb3f: 0x1292, -+ // Block 0x2d, offset 0xb40 -+ 0xb40: 0x17fb, 0xb41: 0x075a, 0xb42: 0x12aa, 0xb43: 0x12ae, 0xb44: 0x0762, 0xb45: 0x12b2, -+ 0xb46: 0x0b2e, 0xb47: 0x18f0, 0xb48: 0x18f5, 0xb49: 0x1800, 0xb4a: 0x1805, 0xb4b: 0x12d2, -+ 0xb4c: 0x12d6, 0xb4d: 0x14ee, 0xb4e: 0x0766, 0xb4f: 0x1302, 0xb50: 0x12fe, 0xb51: 0x1306, -+ 0xb52: 0x093a, 0xb53: 0x130a, 0xb54: 0x130e, 0xb55: 0x1312, 0xb56: 0x131a, 0xb57: 0x18fa, -+ 0xb58: 0x1316, 0xb59: 0x131e, 0xb5a: 0x1332, 0xb5b: 0x1336, 0xb5c: 0x1322, 0xb5d: 0x133a, -+ 0xb5e: 0x134e, 0xb5f: 0x1362, 0xb60: 0x132e, 0xb61: 0x1342, 0xb62: 0x1346, 0xb63: 0x134a, -+ 0xb64: 0x18ff, 0xb65: 0x1909, 0xb66: 0x1904, 0xb67: 0x076a, 0xb68: 0x136a, 0xb69: 0x136e, -+ 0xb6a: 0x1376, 0xb6b: 0x191d, 0xb6c: 0x137a, 0xb6d: 0x190e, 0xb6e: 0x076e, 0xb6f: 0x0772, -+ 0xb70: 0x1913, 0xb71: 0x1918, 0xb72: 0x0776, 0xb73: 0x139a, 0xb74: 0x139e, 0xb75: 0x13a2, -+ 0xb76: 0x13a6, 0xb77: 0x13b2, 0xb78: 0x13ae, 0xb79: 0x13ba, 0xb7a: 0x13b6, 0xb7b: 0x13c6, -+ 0xb7c: 0x13be, 0xb7d: 0x13c2, 0xb7e: 0x13ca, 0xb7f: 0x077a, -+ // Block 0x2e, offset 0xb80 -+ 0xb80: 0x13d2, 0xb81: 0x13d6, 0xb82: 0x077e, 0xb83: 0x13e6, 0xb84: 0x13ea, 0xb85: 0x1922, -+ 0xb86: 0x13f6, 0xb87: 0x13fa, 0xb88: 0x0782, 0xb89: 0x1406, 0xb8a: 0x06b6, 0xb8b: 0x1927, -+ 0xb8c: 0x192c, 0xb8d: 0x0786, 0xb8e: 0x078a, 0xb8f: 0x1432, 0xb90: 0x144a, 0xb91: 0x1466, -+ 0xb92: 0x1476, 0xb93: 0x1931, 0xb94: 0x148a, 0xb95: 0x148e, 0xb96: 0x14a6, 0xb97: 0x14b2, -+ 0xb98: 0x193b, 0xb99: 0x178d, 0xb9a: 0x14be, 0xb9b: 0x14ba, 0xb9c: 0x14c6, 0xb9d: 0x1792, -+ 0xb9e: 0x14d2, 0xb9f: 0x14de, 0xba0: 0x1940, 0xba1: 0x1945, 0xba2: 0x151e, 0xba3: 0x152a, -+ 0xba4: 0x1532, 0xba5: 0x194a, 0xba6: 0x1536, 0xba7: 0x1562, 0xba8: 0x156e, 0xba9: 0x1572, -+ 0xbaa: 0x156a, 0xbab: 0x157e, 0xbac: 0x1582, 0xbad: 0x194f, 0xbae: 0x158e, 0xbaf: 0x078e, -+ 0xbb0: 0x1596, 0xbb1: 0x1954, 0xbb2: 0x0792, 0xbb3: 0x15ce, 0xbb4: 0x0bbe, 0xbb5: 0x15e6, -+ 0xbb6: 0x1959, 0xbb7: 0x1963, 0xbb8: 0x0796, 0xbb9: 0x079a, 0xbba: 0x160e, 0xbbb: 0x1968, -+ 0xbbc: 0x079e, 0xbbd: 0x196d, 0xbbe: 0x1626, 0xbbf: 0x1626, -+ // Block 0x2f, offset 0xbc0 -+ 0xbc0: 0x162e, 0xbc1: 0x1972, 0xbc2: 0x1646, 0xbc3: 0x07a2, 0xbc4: 0x1656, 0xbc5: 0x1662, -+ 0xbc6: 0x166a, 0xbc7: 0x1672, 0xbc8: 0x07a6, 0xbc9: 0x1977, 0xbca: 0x1686, 0xbcb: 0x16a2, -+ 0xbcc: 0x16ae, 0xbcd: 0x07aa, 0xbce: 0x07ae, 0xbcf: 0x16b2, 0xbd0: 0x197c, 0xbd1: 0x07b2, -+ 0xbd2: 0x1981, 0xbd3: 0x1986, 0xbd4: 0x198b, 0xbd5: 0x16d6, 0xbd6: 0x07b6, 0xbd7: 0x16ea, -+ 0xbd8: 0x16f2, 0xbd9: 0x16f6, 0xbda: 0x16fe, 0xbdb: 0x1706, 0xbdc: 0x170e, 0xbdd: 0x1995, -+} -+ -+// nfcIndex: 22 blocks, 1408 entries, 1408 bytes -+// Block 0 is the zero block. -+var nfcIndex = [1408]uint8{ -+ // Block 0x0, offset 0x0 -+ // Block 0x1, offset 0x40 -+ // Block 0x2, offset 0x80 -+ // Block 0x3, offset 0xc0 -+ 0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04, -+ 0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32, -+ 0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35, -+ 0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a, -+ 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, -+ 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, -+ 0xf0: 0x13, -+ // Block 0x4, offset 0x100 -+ 0x120: 0x3b, 0x121: 0x3c, 0x122: 0x3d, 0x123: 0x0d, 0x124: 0x3e, 0x125: 0x3f, 0x126: 0x40, 0x127: 0x41, -+ 0x128: 0x42, 0x129: 0x43, 0x12a: 0x44, 0x12b: 0x45, 0x12c: 0x40, 0x12d: 0x46, 0x12e: 0x47, 0x12f: 0x48, -+ 0x130: 0x44, 0x131: 0x49, 0x132: 0x4a, 0x133: 0x4b, 0x134: 0x4c, 0x135: 0x4d, 0x137: 0x4e, -+ 0x138: 0x4f, 0x139: 0x50, 0x13a: 0x51, 0x13b: 0x52, 0x13c: 0x53, 0x13d: 0x54, 0x13e: 0x55, 0x13f: 0x56, -+ // Block 0x5, offset 0x140 -+ 0x140: 0x57, 0x142: 0x58, 0x144: 0x59, 0x145: 0x5a, 0x146: 0x5b, 0x147: 0x5c, -+ 0x14d: 0x5d, -+ 0x15c: 0x5e, 0x15f: 0x5f, -+ 0x162: 0x60, 0x164: 0x61, -+ 0x168: 0x62, 0x169: 0x63, 0x16a: 0x64, 0x16b: 0x65, 0x16c: 0x0e, 0x16d: 0x66, 0x16e: 0x67, 0x16f: 0x68, -+ 0x170: 0x69, 0x173: 0x6a, 0x177: 0x0f, -+ 0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17, -+ // Block 0x6, offset 0x180 -+ 0x180: 0x6b, 0x183: 0x6c, 0x184: 0x6d, 0x186: 0x6e, 0x187: 0x6f, -+ 0x188: 0x70, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x71, 0x18c: 0x72, -+ 0x1ab: 0x73, -+ 0x1b3: 0x74, 0x1b5: 0x75, 0x1b7: 0x76, -+ // Block 0x7, offset 0x1c0 -+ 0x1c0: 0x77, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x78, 0x1c5: 0x79, -+ 0x1c9: 0x7a, 0x1cc: 0x7b, 0x1cd: 0x7c, -+ // Block 0x8, offset 0x200 -+ 0x219: 0x7d, 0x21a: 0x7e, 0x21b: 0x7f, -+ 0x220: 0x80, 0x223: 0x81, 0x224: 0x82, 0x225: 0x83, 0x226: 0x84, 0x227: 0x85, -+ 0x22a: 0x86, 0x22b: 0x87, 0x22f: 0x88, -+ 0x230: 0x89, 0x231: 0x8a, 0x232: 0x8b, 0x233: 0x8c, 0x234: 0x8d, 0x235: 0x8e, 0x236: 0x8f, 0x237: 0x89, -+ 0x238: 0x8a, 0x239: 0x8b, 0x23a: 0x8c, 0x23b: 0x8d, 0x23c: 0x8e, 0x23d: 0x8f, 0x23e: 0x89, 0x23f: 0x8a, -+ // Block 0x9, offset 0x240 -+ 0x240: 0x8b, 0x241: 0x8c, 0x242: 0x8d, 0x243: 0x8e, 0x244: 0x8f, 0x245: 0x89, 0x246: 0x8a, 0x247: 0x8b, -+ 0x248: 0x8c, 0x249: 0x8d, 0x24a: 0x8e, 0x24b: 0x8f, 0x24c: 0x89, 0x24d: 0x8a, 0x24e: 0x8b, 0x24f: 0x8c, -+ 0x250: 0x8d, 0x251: 0x8e, 0x252: 0x8f, 0x253: 0x89, 0x254: 0x8a, 0x255: 0x8b, 0x256: 0x8c, 0x257: 0x8d, -+ 0x258: 0x8e, 0x259: 0x8f, 0x25a: 0x89, 0x25b: 0x8a, 0x25c: 0x8b, 0x25d: 0x8c, 0x25e: 0x8d, 0x25f: 0x8e, -+ 0x260: 0x8f, 0x261: 0x89, 0x262: 0x8a, 0x263: 0x8b, 0x264: 0x8c, 0x265: 0x8d, 0x266: 0x8e, 0x267: 0x8f, -+ 0x268: 0x89, 0x269: 0x8a, 0x26a: 0x8b, 0x26b: 0x8c, 0x26c: 0x8d, 0x26d: 0x8e, 0x26e: 0x8f, 0x26f: 0x89, -+ 0x270: 0x8a, 0x271: 0x8b, 0x272: 0x8c, 0x273: 0x8d, 0x274: 0x8e, 0x275: 0x8f, 0x276: 0x89, 0x277: 0x8a, -+ 0x278: 0x8b, 0x279: 0x8c, 0x27a: 0x8d, 0x27b: 0x8e, 0x27c: 0x8f, 0x27d: 0x89, 0x27e: 0x8a, 0x27f: 0x8b, -+ // Block 0xa, offset 0x280 -+ 0x280: 0x8c, 0x281: 0x8d, 0x282: 0x8e, 0x283: 0x8f, 0x284: 0x89, 0x285: 0x8a, 0x286: 0x8b, 0x287: 0x8c, -+ 0x288: 0x8d, 0x289: 0x8e, 0x28a: 0x8f, 0x28b: 0x89, 0x28c: 0x8a, 0x28d: 0x8b, 0x28e: 0x8c, 0x28f: 0x8d, -+ 0x290: 0x8e, 0x291: 0x8f, 0x292: 0x89, 0x293: 0x8a, 0x294: 0x8b, 0x295: 0x8c, 0x296: 0x8d, 0x297: 0x8e, -+ 0x298: 0x8f, 0x299: 0x89, 0x29a: 0x8a, 0x29b: 0x8b, 0x29c: 0x8c, 0x29d: 0x8d, 0x29e: 0x8e, 0x29f: 0x8f, -+ 0x2a0: 0x89, 0x2a1: 0x8a, 0x2a2: 0x8b, 0x2a3: 0x8c, 0x2a4: 0x8d, 0x2a5: 0x8e, 0x2a6: 0x8f, 0x2a7: 0x89, -+ 0x2a8: 0x8a, 0x2a9: 0x8b, 0x2aa: 0x8c, 0x2ab: 0x8d, 0x2ac: 0x8e, 0x2ad: 0x8f, 0x2ae: 0x89, 0x2af: 0x8a, -+ 0x2b0: 0x8b, 0x2b1: 0x8c, 0x2b2: 0x8d, 0x2b3: 0x8e, 0x2b4: 0x8f, 0x2b5: 0x89, 0x2b6: 0x8a, 0x2b7: 0x8b, -+ 0x2b8: 0x8c, 0x2b9: 0x8d, 0x2ba: 0x8e, 0x2bb: 0x8f, 0x2bc: 0x89, 0x2bd: 0x8a, 0x2be: 0x8b, 0x2bf: 0x8c, -+ // Block 0xb, offset 0x2c0 -+ 0x2c0: 0x8d, 0x2c1: 0x8e, 0x2c2: 0x8f, 0x2c3: 0x89, 0x2c4: 0x8a, 0x2c5: 0x8b, 0x2c6: 0x8c, 0x2c7: 0x8d, -+ 0x2c8: 0x8e, 0x2c9: 0x8f, 0x2ca: 0x89, 0x2cb: 0x8a, 0x2cc: 0x8b, 0x2cd: 0x8c, 0x2ce: 0x8d, 0x2cf: 0x8e, -+ 0x2d0: 0x8f, 0x2d1: 0x89, 0x2d2: 0x8a, 0x2d3: 0x8b, 0x2d4: 0x8c, 0x2d5: 0x8d, 0x2d6: 0x8e, 0x2d7: 0x8f, -+ 0x2d8: 0x89, 0x2d9: 0x8a, 0x2da: 0x8b, 0x2db: 0x8c, 0x2dc: 0x8d, 0x2dd: 0x8e, 0x2de: 0x90, -+ // Block 0xc, offset 0x300 -+ 0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20, -+ 0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x91, 0x32d: 0x92, 0x32e: 0x93, -+ 0x331: 0x94, 0x332: 0x95, 0x333: 0x96, 0x334: 0x97, -+ 0x338: 0x98, 0x339: 0x99, 0x33a: 0x9a, 0x33b: 0x9b, 0x33e: 0x9c, 0x33f: 0x9d, -+ // Block 0xd, offset 0x340 -+ 0x347: 0x9e, -+ 0x34b: 0x9f, 0x34d: 0xa0, -+ 0x368: 0xa1, 0x36b: 0xa2, -+ 0x374: 0xa3, -+ 0x37a: 0xa4, 0x37b: 0xa5, 0x37d: 0xa6, 0x37e: 0xa7, -+ // Block 0xe, offset 0x380 -+ 0x381: 0xa8, 0x382: 0xa9, 0x384: 0xaa, 0x385: 0x84, 0x387: 0xab, -+ 0x388: 0xac, 0x38b: 0xad, 0x38c: 0xae, 0x38d: 0xaf, -+ 0x391: 0xb0, 0x392: 0xb1, 0x393: 0xb2, 0x396: 0xb3, 0x397: 0xb4, -+ 0x398: 0x75, 0x39a: 0xb5, 0x39c: 0xb6, -+ 0x3a0: 0xb7, 0x3a4: 0xb8, 0x3a5: 0xb9, 0x3a7: 0xba, -+ 0x3a8: 0xbb, 0x3a9: 0xbc, 0x3aa: 0xbd, -+ 0x3b0: 0x75, 0x3b5: 0xbe, 0x3b6: 0xbf, -+ 0x3bd: 0xc0, -+ // Block 0xf, offset 0x3c0 -+ 0x3eb: 0xc1, 0x3ec: 0xc2, -+ 0x3ff: 0xc3, -+ // Block 0x10, offset 0x400 -+ 0x432: 0xc4, -+ // Block 0x11, offset 0x440 -+ 0x445: 0xc5, 0x446: 0xc6, 0x447: 0xc7, -+ 0x449: 0xc8, -+ // Block 0x12, offset 0x480 -+ 0x480: 0xc9, 0x482: 0xca, 0x484: 0xc2, -+ 0x48a: 0xcb, 0x48b: 0xcc, -+ 0x493: 0xcd, -+ 0x4a3: 0xce, 0x4a5: 0xcf, -+ // Block 0x13, offset 0x4c0 -+ 0x4c8: 0xd0, -+ // Block 0x14, offset 0x500 -+ 0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c, -+ 0x528: 0x2d, -+ // Block 0x15, offset 0x540 -+ 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, -+ 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, -+ 0x56f: 0x12, -+} -+ -+// nfcSparseOffset: 163 entries, 326 bytes -+var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x6e, 0x76, 0x7d, 0x80, 0x88, 0x8c, 0x90, 0x92, 0x94, 0x9d, 0xa1, 0xa8, 0xad, 0xb0, 0xba, 0xbd, 0xc4, 0xcc, 0xcf, 0xd1, 0xd4, 0xd6, 0xdb, 0xec, 0xf8, 0xfa, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10f, 0x112, 0x114, 0x117, 0x11a, 0x11e, 0x124, 0x12b, 0x134, 0x136, 0x139, 0x13b, 0x146, 0x14a, 0x158, 0x15b, 0x161, 0x167, 0x172, 0x176, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x186, 0x18a, 0x18c, 0x18e, 0x196, 0x19a, 0x19d, 0x19f, 0x1a1, 0x1a4, 0x1a7, 0x1a9, 0x1ab, 0x1ad, 0x1af, 0x1b5, 0x1b8, 0x1ba, 0x1c1, 0x1c7, 0x1cd, 0x1d5, 0x1db, 0x1e1, 0x1e7, 0x1eb, 0x1f9, 0x202, 0x205, 0x208, 0x20a, 0x20d, 0x20f, 0x213, 0x218, 0x21a, 0x21c, 0x221, 0x227, 0x229, 0x22b, 0x22d, 0x233, 0x236, 0x238, 0x23a, 0x23c, 0x242, 0x246, 0x24a, 0x252, 0x259, 0x25c, 0x25f, 0x261, 0x264, 0x26c, 0x270, 0x277, 0x27a, 0x280, 0x282, 0x285, 0x287, 0x28a, 0x28f, 0x291, 0x293, 0x295, 0x297, 0x299, 0x29c, 0x29e, 0x2a0, 0x2a2, 0x2a4, 0x2a6, 0x2a8, 0x2b5, 0x2bf, 0x2c1, 0x2c3, 0x2c9, 0x2cb, 0x2cd, 0x2cf, 0x2d3, 0x2d5, 0x2d8} -+ -+// nfcSparseValues: 730 entries, 2920 bytes -+var nfcSparseValues = [730]valueRange{ -+ // Block 0x0, offset 0x0 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0xa100, lo: 0xa8, hi: 0xa8}, -+ {value: 0x8100, lo: 0xaf, hi: 0xaf}, -+ {value: 0x8100, lo: 0xb4, hi: 0xb4}, -+ {value: 0x8100, lo: 0xb8, hi: 0xb8}, -+ // Block 0x1, offset 0x5 -+ {value: 0x0091, lo: 0x03}, -+ {value: 0x4823, lo: 0xa0, hi: 0xa1}, -+ {value: 0x4855, lo: 0xaf, hi: 0xb0}, -+ {value: 0xa000, lo: 0xb7, hi: 0xb7}, -+ // Block 0x2, offset 0x9 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ // Block 0x3, offset 0xb -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8100, lo: 0x98, hi: 0x9d}, -+ // Block 0x4, offset 0xd -+ {value: 0x0006, lo: 0x0a}, -+ {value: 0xa000, lo: 0x81, hi: 0x81}, -+ {value: 0xa000, lo: 0x85, hi: 0x85}, -+ {value: 0xa000, lo: 0x89, hi: 0x89}, -+ {value: 0x4981, lo: 0x8a, hi: 0x8a}, -+ {value: 0x499f, lo: 0x8b, hi: 0x8b}, -+ {value: 0x3808, lo: 0x8c, hi: 0x8c}, -+ {value: 0x3820, lo: 0x8d, hi: 0x8d}, -+ {value: 0x49b7, lo: 0x8e, hi: 0x8e}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0x383e, lo: 0x93, hi: 0x94}, -+ // Block 0x5, offset 0x18 -+ {value: 0x0000, lo: 0x0f}, -+ {value: 0xa000, lo: 0x83, hi: 0x83}, -+ {value: 0xa000, lo: 0x87, hi: 0x87}, -+ {value: 0xa000, lo: 0x8b, hi: 0x8b}, -+ {value: 0xa000, lo: 0x8d, hi: 0x8d}, -+ {value: 0x38e6, lo: 0x90, hi: 0x90}, -+ {value: 0x38f2, lo: 0x91, hi: 0x91}, -+ {value: 0x38e0, lo: 0x93, hi: 0x93}, -+ {value: 0xa000, lo: 0x96, hi: 0x96}, -+ {value: 0x3958, lo: 0x97, hi: 0x97}, -+ {value: 0x3922, lo: 0x9c, hi: 0x9c}, -+ {value: 0x390a, lo: 0x9d, hi: 0x9d}, -+ {value: 0x3934, lo: 0x9e, hi: 0x9e}, -+ {value: 0xa000, lo: 0xb4, hi: 0xb5}, -+ {value: 0x395e, lo: 0xb6, hi: 0xb6}, -+ {value: 0x3964, lo: 0xb7, hi: 0xb7}, -+ // Block 0x6, offset 0x28 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x83, hi: 0x87}, -+ // Block 0x7, offset 0x2a -+ {value: 0x0001, lo: 0x04}, -+ {value: 0x8114, lo: 0x81, hi: 0x82}, -+ {value: 0x8133, lo: 0x84, hi: 0x84}, -+ {value: 0x812e, lo: 0x85, hi: 0x85}, -+ {value: 0x810e, lo: 0x87, hi: 0x87}, -+ // Block 0x8, offset 0x2f -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x8133, lo: 0x90, hi: 0x97}, -+ {value: 0x811a, lo: 0x98, hi: 0x98}, -+ {value: 0x811b, lo: 0x99, hi: 0x99}, -+ {value: 0x811c, lo: 0x9a, hi: 0x9a}, -+ {value: 0x3982, lo: 0xa2, hi: 0xa2}, -+ {value: 0x3988, lo: 0xa3, hi: 0xa3}, -+ {value: 0x3994, lo: 0xa4, hi: 0xa4}, -+ {value: 0x398e, lo: 0xa5, hi: 0xa5}, -+ {value: 0x399a, lo: 0xa6, hi: 0xa6}, -+ {value: 0xa000, lo: 0xa7, hi: 0xa7}, -+ // Block 0x9, offset 0x3a -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x39ac, lo: 0x80, hi: 0x80}, -+ {value: 0xa000, lo: 0x81, hi: 0x81}, -+ {value: 0x39a0, lo: 0x82, hi: 0x82}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0x39a6, lo: 0x93, hi: 0x93}, -+ {value: 0xa000, lo: 0x95, hi: 0x95}, -+ {value: 0x8133, lo: 0x96, hi: 0x9c}, -+ {value: 0x8133, lo: 0x9f, hi: 0xa2}, -+ {value: 0x812e, lo: 0xa3, hi: 0xa3}, -+ {value: 0x8133, lo: 0xa4, hi: 0xa4}, -+ {value: 0x8133, lo: 0xa7, hi: 0xa8}, -+ {value: 0x812e, lo: 0xaa, hi: 0xaa}, -+ {value: 0x8133, lo: 0xab, hi: 0xac}, -+ {value: 0x812e, lo: 0xad, hi: 0xad}, -+ // Block 0xa, offset 0x49 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x8120, lo: 0x91, hi: 0x91}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb0}, -+ {value: 0x812e, lo: 0xb1, hi: 0xb1}, -+ {value: 0x8133, lo: 0xb2, hi: 0xb3}, -+ {value: 0x812e, lo: 0xb4, hi: 0xb4}, -+ {value: 0x8133, lo: 0xb5, hi: 0xb6}, -+ {value: 0x812e, lo: 0xb7, hi: 0xb9}, -+ {value: 0x8133, lo: 0xba, hi: 0xba}, -+ {value: 0x812e, lo: 0xbb, hi: 0xbc}, -+ {value: 0x8133, lo: 0xbd, hi: 0xbd}, -+ {value: 0x812e, lo: 0xbe, hi: 0xbe}, -+ {value: 0x8133, lo: 0xbf, hi: 0xbf}, -+ // Block 0xb, offset 0x56 -+ {value: 0x0005, lo: 0x07}, -+ {value: 0x8133, lo: 0x80, hi: 0x80}, -+ {value: 0x8133, lo: 0x81, hi: 0x81}, -+ {value: 0x812e, lo: 0x82, hi: 0x83}, -+ {value: 0x812e, lo: 0x84, hi: 0x85}, -+ {value: 0x812e, lo: 0x86, hi: 0x87}, -+ {value: 0x812e, lo: 0x88, hi: 0x89}, -+ {value: 0x8133, lo: 0x8a, hi: 0x8a}, -+ // Block 0xc, offset 0x5e -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x8133, lo: 0xab, hi: 0xb1}, -+ {value: 0x812e, lo: 0xb2, hi: 0xb2}, -+ {value: 0x8133, lo: 0xb3, hi: 0xb3}, -+ {value: 0x812e, lo: 0xbd, hi: 0xbd}, -+ // Block 0xd, offset 0x63 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x8133, lo: 0x96, hi: 0x99}, -+ {value: 0x8133, lo: 0x9b, hi: 0xa3}, -+ {value: 0x8133, lo: 0xa5, hi: 0xa7}, -+ {value: 0x8133, lo: 0xa9, hi: 0xad}, -+ // Block 0xe, offset 0x68 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0x99, hi: 0x9b}, -+ // Block 0xf, offset 0x6a -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8133, lo: 0x98, hi: 0x98}, -+ {value: 0x812e, lo: 0x99, hi: 0x9b}, -+ {value: 0x8133, lo: 0x9c, hi: 0x9f}, -+ // Block 0x10, offset 0x6e -+ {value: 0x0000, lo: 0x07}, -+ {value: 0xa000, lo: 0xa8, hi: 0xa8}, -+ {value: 0x4019, lo: 0xa9, hi: 0xa9}, -+ {value: 0xa000, lo: 0xb0, hi: 0xb0}, -+ {value: 0x4021, lo: 0xb1, hi: 0xb1}, -+ {value: 0xa000, lo: 0xb3, hi: 0xb3}, -+ {value: 0x4029, lo: 0xb4, hi: 0xb4}, -+ {value: 0x9903, lo: 0xbc, hi: 0xbc}, -+ // Block 0x11, offset 0x76 -+ {value: 0x0008, lo: 0x06}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x8133, lo: 0x91, hi: 0x91}, -+ {value: 0x812e, lo: 0x92, hi: 0x92}, -+ {value: 0x8133, lo: 0x93, hi: 0x93}, -+ {value: 0x8133, lo: 0x94, hi: 0x94}, -+ {value: 0x465d, lo: 0x98, hi: 0x9f}, -+ // Block 0x12, offset 0x7d -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0xbc, hi: 0xbc}, -+ {value: 0x9900, lo: 0xbe, hi: 0xbe}, -+ // Block 0x13, offset 0x80 -+ {value: 0x0008, lo: 0x07}, -+ {value: 0xa000, lo: 0x87, hi: 0x87}, -+ {value: 0x2dd5, lo: 0x8b, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x97, hi: 0x97}, -+ {value: 0x469d, lo: 0x9c, hi: 0x9d}, -+ {value: 0x46ad, lo: 0x9f, hi: 0x9f}, -+ {value: 0x8133, lo: 0xbe, hi: 0xbe}, -+ // Block 0x14, offset 0x88 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x46d5, lo: 0xb3, hi: 0xb3}, -+ {value: 0x46dd, lo: 0xb6, hi: 0xb6}, -+ {value: 0x8103, lo: 0xbc, hi: 0xbc}, -+ // Block 0x15, offset 0x8c -+ {value: 0x0008, lo: 0x03}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x46b5, lo: 0x99, hi: 0x9b}, -+ {value: 0x46cd, lo: 0x9e, hi: 0x9e}, -+ // Block 0x16, offset 0x90 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0xbc, hi: 0xbc}, -+ // Block 0x17, offset 0x92 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ // Block 0x18, offset 0x94 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0xa000, lo: 0x87, hi: 0x87}, -+ {value: 0x2ded, lo: 0x88, hi: 0x88}, -+ {value: 0x2de5, lo: 0x8b, hi: 0x8b}, -+ {value: 0x2df5, lo: 0x8c, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x96, hi: 0x97}, -+ {value: 0x46e5, lo: 0x9c, hi: 0x9c}, -+ {value: 0x46ed, lo: 0x9d, hi: 0x9d}, -+ // Block 0x19, offset 0x9d -+ {value: 0x0000, lo: 0x03}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0x2dfd, lo: 0x94, hi: 0x94}, -+ {value: 0x9900, lo: 0xbe, hi: 0xbe}, -+ // Block 0x1a, offset 0xa1 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xa000, lo: 0x86, hi: 0x87}, -+ {value: 0x2e05, lo: 0x8a, hi: 0x8a}, -+ {value: 0x2e15, lo: 0x8b, hi: 0x8b}, -+ {value: 0x2e0d, lo: 0x8c, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x97, hi: 0x97}, -+ // Block 0x1b, offset 0xa8 -+ {value: 0x1801, lo: 0x04}, -+ {value: 0xa000, lo: 0x86, hi: 0x86}, -+ {value: 0x4031, lo: 0x88, hi: 0x88}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x8121, lo: 0x95, hi: 0x96}, -+ // Block 0x1c, offset 0xad -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0xbc, hi: 0xbc}, -+ {value: 0xa000, lo: 0xbf, hi: 0xbf}, -+ // Block 0x1d, offset 0xb0 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x2e1d, lo: 0x80, hi: 0x80}, -+ {value: 0x9900, lo: 0x82, hi: 0x82}, -+ {value: 0xa000, lo: 0x86, hi: 0x86}, -+ {value: 0x2e25, lo: 0x87, hi: 0x87}, -+ {value: 0x2e2d, lo: 0x88, hi: 0x88}, -+ {value: 0x3091, lo: 0x8a, hi: 0x8a}, -+ {value: 0x2f19, lo: 0x8b, hi: 0x8b}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x95, hi: 0x96}, -+ // Block 0x1e, offset 0xba -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0xbb, hi: 0xbc}, -+ {value: 0x9900, lo: 0xbe, hi: 0xbe}, -+ // Block 0x1f, offset 0xbd -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xa000, lo: 0x86, hi: 0x87}, -+ {value: 0x2e35, lo: 0x8a, hi: 0x8a}, -+ {value: 0x2e45, lo: 0x8b, hi: 0x8b}, -+ {value: 0x2e3d, lo: 0x8c, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x97, hi: 0x97}, -+ // Block 0x20, offset 0xc4 -+ {value: 0x6ab3, lo: 0x07}, -+ {value: 0x9905, lo: 0x8a, hi: 0x8a}, -+ {value: 0x9900, lo: 0x8f, hi: 0x8f}, -+ {value: 0xa000, lo: 0x99, hi: 0x99}, -+ {value: 0x4039, lo: 0x9a, hi: 0x9a}, -+ {value: 0x3099, lo: 0x9c, hi: 0x9c}, -+ {value: 0x2f24, lo: 0x9d, hi: 0x9d}, -+ {value: 0x2e4d, lo: 0x9e, hi: 0x9f}, -+ // Block 0x21, offset 0xcc -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8123, lo: 0xb8, hi: 0xb9}, -+ {value: 0x8105, lo: 0xba, hi: 0xba}, -+ // Block 0x22, offset 0xcf -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8124, lo: 0x88, hi: 0x8b}, -+ // Block 0x23, offset 0xd1 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8125, lo: 0xb8, hi: 0xb9}, -+ {value: 0x8105, lo: 0xba, hi: 0xba}, -+ // Block 0x24, offset 0xd4 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8126, lo: 0x88, hi: 0x8b}, -+ // Block 0x25, offset 0xd6 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x812e, lo: 0x98, hi: 0x99}, -+ {value: 0x812e, lo: 0xb5, hi: 0xb5}, -+ {value: 0x812e, lo: 0xb7, hi: 0xb7}, -+ {value: 0x812c, lo: 0xb9, hi: 0xb9}, -+ // Block 0x26, offset 0xdb -+ {value: 0x0000, lo: 0x10}, -+ {value: 0x2774, lo: 0x83, hi: 0x83}, -+ {value: 0x277b, lo: 0x8d, hi: 0x8d}, -+ {value: 0x2782, lo: 0x92, hi: 0x92}, -+ {value: 0x2789, lo: 0x97, hi: 0x97}, -+ {value: 0x2790, lo: 0x9c, hi: 0x9c}, -+ {value: 0x276d, lo: 0xa9, hi: 0xa9}, -+ {value: 0x8127, lo: 0xb1, hi: 0xb1}, -+ {value: 0x8128, lo: 0xb2, hi: 0xb2}, -+ {value: 0x4bc5, lo: 0xb3, hi: 0xb3}, -+ {value: 0x8129, lo: 0xb4, hi: 0xb4}, -+ {value: 0x4bce, lo: 0xb5, hi: 0xb5}, -+ {value: 0x46f5, lo: 0xb6, hi: 0xb6}, -+ {value: 0x8200, lo: 0xb7, hi: 0xb7}, -+ {value: 0x46fd, lo: 0xb8, hi: 0xb8}, -+ {value: 0x8200, lo: 0xb9, hi: 0xb9}, -+ {value: 0x8128, lo: 0xba, hi: 0xbd}, -+ // Block 0x27, offset 0xec -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x8128, lo: 0x80, hi: 0x80}, -+ {value: 0x4bd7, lo: 0x81, hi: 0x81}, -+ {value: 0x8133, lo: 0x82, hi: 0x83}, -+ {value: 0x8105, lo: 0x84, hi: 0x84}, -+ {value: 0x8133, lo: 0x86, hi: 0x87}, -+ {value: 0x279e, lo: 0x93, hi: 0x93}, -+ {value: 0x27a5, lo: 0x9d, hi: 0x9d}, -+ {value: 0x27ac, lo: 0xa2, hi: 0xa2}, -+ {value: 0x27b3, lo: 0xa7, hi: 0xa7}, -+ {value: 0x27ba, lo: 0xac, hi: 0xac}, -+ {value: 0x2797, lo: 0xb9, hi: 0xb9}, -+ // Block 0x28, offset 0xf8 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0x86, hi: 0x86}, -+ // Block 0x29, offset 0xfa -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xa000, lo: 0xa5, hi: 0xa5}, -+ {value: 0x2e55, lo: 0xa6, hi: 0xa6}, -+ {value: 0x9900, lo: 0xae, hi: 0xae}, -+ {value: 0x8103, lo: 0xb7, hi: 0xb7}, -+ {value: 0x8105, lo: 0xb9, hi: 0xba}, -+ // Block 0x2a, offset 0x100 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0x8d, hi: 0x8d}, -+ // Block 0x2b, offset 0x102 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0xa000, lo: 0x80, hi: 0x92}, -+ // Block 0x2c, offset 0x104 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0xb900, lo: 0xa1, hi: 0xb5}, -+ // Block 0x2d, offset 0x106 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x9900, lo: 0xa8, hi: 0xbf}, -+ // Block 0x2e, offset 0x108 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x9900, lo: 0x80, hi: 0x82}, -+ // Block 0x2f, offset 0x10a -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x9d, hi: 0x9f}, -+ // Block 0x30, offset 0x10c -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x94, hi: 0x95}, -+ {value: 0x8105, lo: 0xb4, hi: 0xb4}, -+ // Block 0x31, offset 0x10f -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x92, hi: 0x92}, -+ {value: 0x8133, lo: 0x9d, hi: 0x9d}, -+ // Block 0x32, offset 0x112 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8132, lo: 0xa9, hi: 0xa9}, -+ // Block 0x33, offset 0x114 -+ {value: 0x0004, lo: 0x02}, -+ {value: 0x812f, lo: 0xb9, hi: 0xba}, -+ {value: 0x812e, lo: 0xbb, hi: 0xbb}, -+ // Block 0x34, offset 0x117 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0x97, hi: 0x97}, -+ {value: 0x812e, lo: 0x98, hi: 0x98}, -+ // Block 0x35, offset 0x11a -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8105, lo: 0xa0, hi: 0xa0}, -+ {value: 0x8133, lo: 0xb5, hi: 0xbc}, -+ {value: 0x812e, lo: 0xbf, hi: 0xbf}, -+ // Block 0x36, offset 0x11e -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb4}, -+ {value: 0x812e, lo: 0xb5, hi: 0xba}, -+ {value: 0x8133, lo: 0xbb, hi: 0xbc}, -+ {value: 0x812e, lo: 0xbd, hi: 0xbd}, -+ {value: 0x812e, lo: 0xbf, hi: 0xbf}, -+ // Block 0x37, offset 0x124 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x812e, lo: 0x80, hi: 0x80}, -+ {value: 0x8133, lo: 0x81, hi: 0x82}, -+ {value: 0x812e, lo: 0x83, hi: 0x84}, -+ {value: 0x8133, lo: 0x85, hi: 0x89}, -+ {value: 0x812e, lo: 0x8a, hi: 0x8a}, -+ {value: 0x8133, lo: 0x8b, hi: 0x8e}, -+ // Block 0x38, offset 0x12b -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x2e9d, lo: 0x80, hi: 0x80}, -+ {value: 0x2ea5, lo: 0x81, hi: 0x81}, -+ {value: 0xa000, lo: 0x82, hi: 0x82}, -+ {value: 0x2ead, lo: 0x83, hi: 0x83}, -+ {value: 0x8105, lo: 0x84, hi: 0x84}, -+ {value: 0x8133, lo: 0xab, hi: 0xab}, -+ {value: 0x812e, lo: 0xac, hi: 0xac}, -+ {value: 0x8133, lo: 0xad, hi: 0xb3}, -+ // Block 0x39, offset 0x134 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xaa, hi: 0xab}, -+ // Block 0x3a, offset 0x136 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0xa6, hi: 0xa6}, -+ {value: 0x8105, lo: 0xb2, hi: 0xb3}, -+ // Block 0x3b, offset 0x139 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0xb7, hi: 0xb7}, -+ // Block 0x3c, offset 0x13b -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x8133, lo: 0x90, hi: 0x92}, -+ {value: 0x8101, lo: 0x94, hi: 0x94}, -+ {value: 0x812e, lo: 0x95, hi: 0x99}, -+ {value: 0x8133, lo: 0x9a, hi: 0x9b}, -+ {value: 0x812e, lo: 0x9c, hi: 0x9f}, -+ {value: 0x8133, lo: 0xa0, hi: 0xa0}, -+ {value: 0x8101, lo: 0xa2, hi: 0xa8}, -+ {value: 0x812e, lo: 0xad, hi: 0xad}, -+ {value: 0x8133, lo: 0xb4, hi: 0xb4}, -+ {value: 0x8133, lo: 0xb8, hi: 0xb9}, -+ // Block 0x3d, offset 0x146 -+ {value: 0x0004, lo: 0x03}, -+ {value: 0x052a, lo: 0x80, hi: 0x81}, -+ {value: 0x8100, lo: 0x97, hi: 0x97}, -+ {value: 0x8100, lo: 0xbe, hi: 0xbe}, -+ // Block 0x3e, offset 0x14a -+ {value: 0x0000, lo: 0x0d}, -+ {value: 0x8133, lo: 0x90, hi: 0x91}, -+ {value: 0x8101, lo: 0x92, hi: 0x93}, -+ {value: 0x8133, lo: 0x94, hi: 0x97}, -+ {value: 0x8101, lo: 0x98, hi: 0x9a}, -+ {value: 0x8133, lo: 0x9b, hi: 0x9c}, -+ {value: 0x8133, lo: 0xa1, hi: 0xa1}, -+ {value: 0x8101, lo: 0xa5, hi: 0xa6}, -+ {value: 0x8133, lo: 0xa7, hi: 0xa7}, -+ {value: 0x812e, lo: 0xa8, hi: 0xa8}, -+ {value: 0x8133, lo: 0xa9, hi: 0xa9}, -+ {value: 0x8101, lo: 0xaa, hi: 0xab}, -+ {value: 0x812e, lo: 0xac, hi: 0xaf}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb0}, -+ // Block 0x3f, offset 0x158 -+ {value: 0x43bc, lo: 0x02}, -+ {value: 0x023c, lo: 0xa6, hi: 0xa6}, -+ {value: 0x0057, lo: 0xaa, hi: 0xab}, -+ // Block 0x40, offset 0x15b -+ {value: 0x0007, lo: 0x05}, -+ {value: 0xa000, lo: 0x90, hi: 0x90}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0xa000, lo: 0x94, hi: 0x94}, -+ {value: 0x3cfa, lo: 0x9a, hi: 0x9b}, -+ {value: 0x3d08, lo: 0xae, hi: 0xae}, -+ // Block 0x41, offset 0x161 -+ {value: 0x000e, lo: 0x05}, -+ {value: 0x3d0f, lo: 0x8d, hi: 0x8e}, -+ {value: 0x3d16, lo: 0x8f, hi: 0x8f}, -+ {value: 0xa000, lo: 0x90, hi: 0x90}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0xa000, lo: 0x94, hi: 0x94}, -+ // Block 0x42, offset 0x167 -+ {value: 0x62c7, lo: 0x0a}, -+ {value: 0xa000, lo: 0x83, hi: 0x83}, -+ {value: 0x3d24, lo: 0x84, hi: 0x84}, -+ {value: 0xa000, lo: 0x88, hi: 0x88}, -+ {value: 0x3d2b, lo: 0x89, hi: 0x89}, -+ {value: 0xa000, lo: 0x8b, hi: 0x8b}, -+ {value: 0x3d32, lo: 0x8c, hi: 0x8c}, -+ {value: 0xa000, lo: 0xa3, hi: 0xa3}, -+ {value: 0x3d39, lo: 0xa4, hi: 0xa5}, -+ {value: 0x3d40, lo: 0xa6, hi: 0xa6}, -+ {value: 0xa000, lo: 0xbc, hi: 0xbc}, -+ // Block 0x43, offset 0x172 -+ {value: 0x0007, lo: 0x03}, -+ {value: 0x3da9, lo: 0xa0, hi: 0xa1}, -+ {value: 0x3dd3, lo: 0xa2, hi: 0xa3}, -+ {value: 0x3dfd, lo: 0xaa, hi: 0xad}, -+ // Block 0x44, offset 0x176 -+ {value: 0x0004, lo: 0x01}, -+ {value: 0x0586, lo: 0xa9, hi: 0xaa}, -+ // Block 0x45, offset 0x178 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x461e, lo: 0x9c, hi: 0x9c}, -+ // Block 0x46, offset 0x17a -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xaf, hi: 0xb1}, -+ // Block 0x47, offset 0x17c -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x48, offset 0x17e -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xa0, hi: 0xbf}, -+ // Block 0x49, offset 0x180 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x812d, lo: 0xaa, hi: 0xaa}, -+ {value: 0x8132, lo: 0xab, hi: 0xab}, -+ {value: 0x8134, lo: 0xac, hi: 0xac}, -+ {value: 0x812f, lo: 0xad, hi: 0xad}, -+ {value: 0x8130, lo: 0xae, hi: 0xaf}, -+ // Block 0x4a, offset 0x186 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x4be0, lo: 0xb3, hi: 0xb3}, -+ {value: 0x4be0, lo: 0xb5, hi: 0xb6}, -+ {value: 0x4be0, lo: 0xba, hi: 0xbf}, -+ // Block 0x4b, offset 0x18a -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x4be0, lo: 0x8f, hi: 0xa3}, -+ // Block 0x4c, offset 0x18c -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8100, lo: 0xae, hi: 0xbe}, -+ // Block 0x4d, offset 0x18e -+ {value: 0x0000, lo: 0x07}, -+ {value: 0x8100, lo: 0x84, hi: 0x84}, -+ {value: 0x8100, lo: 0x87, hi: 0x87}, -+ {value: 0x8100, lo: 0x90, hi: 0x90}, -+ {value: 0x8100, lo: 0x9e, hi: 0x9e}, -+ {value: 0x8100, lo: 0xa1, hi: 0xa1}, -+ {value: 0x8100, lo: 0xb2, hi: 0xb2}, -+ {value: 0x8100, lo: 0xbb, hi: 0xbb}, -+ // Block 0x4e, offset 0x196 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8100, lo: 0x80, hi: 0x80}, -+ {value: 0x8100, lo: 0x8b, hi: 0x8b}, -+ {value: 0x8100, lo: 0x8e, hi: 0x8e}, -+ // Block 0x4f, offset 0x19a -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0xaf, hi: 0xaf}, -+ {value: 0x8133, lo: 0xb4, hi: 0xbd}, -+ // Block 0x50, offset 0x19d -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x9e, hi: 0x9f}, -+ // Block 0x51, offset 0x19f -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb1}, -+ // Block 0x52, offset 0x1a1 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x86, hi: 0x86}, -+ {value: 0x8105, lo: 0xac, hi: 0xac}, -+ // Block 0x53, offset 0x1a4 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x84, hi: 0x84}, -+ {value: 0x8133, lo: 0xa0, hi: 0xb1}, -+ // Block 0x54, offset 0x1a7 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0xab, hi: 0xad}, -+ // Block 0x55, offset 0x1a9 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x93, hi: 0x93}, -+ // Block 0x56, offset 0x1ab -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0xb3, hi: 0xb3}, -+ // Block 0x57, offset 0x1ad -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x80, hi: 0x80}, -+ // Block 0x58, offset 0x1af -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb0}, -+ {value: 0x8133, lo: 0xb2, hi: 0xb3}, -+ {value: 0x812e, lo: 0xb4, hi: 0xb4}, -+ {value: 0x8133, lo: 0xb7, hi: 0xb8}, -+ {value: 0x8133, lo: 0xbe, hi: 0xbf}, -+ // Block 0x59, offset 0x1b5 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0x81, hi: 0x81}, -+ {value: 0x8105, lo: 0xb6, hi: 0xb6}, -+ // Block 0x5a, offset 0x1b8 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xad, hi: 0xad}, -+ // Block 0x5b, offset 0x1ba -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xe500, lo: 0x80, hi: 0x80}, -+ {value: 0xc600, lo: 0x81, hi: 0x9b}, -+ {value: 0xe500, lo: 0x9c, hi: 0x9c}, -+ {value: 0xc600, lo: 0x9d, hi: 0xb7}, -+ {value: 0xe500, lo: 0xb8, hi: 0xb8}, -+ {value: 0xc600, lo: 0xb9, hi: 0xbf}, -+ // Block 0x5c, offset 0x1c1 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x93}, -+ {value: 0xe500, lo: 0x94, hi: 0x94}, -+ {value: 0xc600, lo: 0x95, hi: 0xaf}, -+ {value: 0xe500, lo: 0xb0, hi: 0xb0}, -+ {value: 0xc600, lo: 0xb1, hi: 0xbf}, -+ // Block 0x5d, offset 0x1c7 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x8b}, -+ {value: 0xe500, lo: 0x8c, hi: 0x8c}, -+ {value: 0xc600, lo: 0x8d, hi: 0xa7}, -+ {value: 0xe500, lo: 0xa8, hi: 0xa8}, -+ {value: 0xc600, lo: 0xa9, hi: 0xbf}, -+ // Block 0x5e, offset 0x1cd -+ {value: 0x0000, lo: 0x07}, -+ {value: 0xc600, lo: 0x80, hi: 0x83}, -+ {value: 0xe500, lo: 0x84, hi: 0x84}, -+ {value: 0xc600, lo: 0x85, hi: 0x9f}, -+ {value: 0xe500, lo: 0xa0, hi: 0xa0}, -+ {value: 0xc600, lo: 0xa1, hi: 0xbb}, -+ {value: 0xe500, lo: 0xbc, hi: 0xbc}, -+ {value: 0xc600, lo: 0xbd, hi: 0xbf}, -+ // Block 0x5f, offset 0x1d5 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x97}, -+ {value: 0xe500, lo: 0x98, hi: 0x98}, -+ {value: 0xc600, lo: 0x99, hi: 0xb3}, -+ {value: 0xe500, lo: 0xb4, hi: 0xb4}, -+ {value: 0xc600, lo: 0xb5, hi: 0xbf}, -+ // Block 0x60, offset 0x1db -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x8f}, -+ {value: 0xe500, lo: 0x90, hi: 0x90}, -+ {value: 0xc600, lo: 0x91, hi: 0xab}, -+ {value: 0xe500, lo: 0xac, hi: 0xac}, -+ {value: 0xc600, lo: 0xad, hi: 0xbf}, -+ // Block 0x61, offset 0x1e1 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x87}, -+ {value: 0xe500, lo: 0x88, hi: 0x88}, -+ {value: 0xc600, lo: 0x89, hi: 0xa3}, -+ {value: 0xe500, lo: 0xa4, hi: 0xa4}, -+ {value: 0xc600, lo: 0xa5, hi: 0xbf}, -+ // Block 0x62, offset 0x1e7 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0xc600, lo: 0x80, hi: 0x87}, -+ {value: 0xe500, lo: 0x88, hi: 0x88}, -+ {value: 0xc600, lo: 0x89, hi: 0xa3}, -+ // Block 0x63, offset 0x1eb -+ {value: 0x0006, lo: 0x0d}, -+ {value: 0x44d1, lo: 0x9d, hi: 0x9d}, -+ {value: 0x8116, lo: 0x9e, hi: 0x9e}, -+ {value: 0x4543, lo: 0x9f, hi: 0x9f}, -+ {value: 0x4531, lo: 0xaa, hi: 0xab}, -+ {value: 0x4635, lo: 0xac, hi: 0xac}, -+ {value: 0x463d, lo: 0xad, hi: 0xad}, -+ {value: 0x4489, lo: 0xae, hi: 0xb1}, -+ {value: 0x44a7, lo: 0xb2, hi: 0xb4}, -+ {value: 0x44bf, lo: 0xb5, hi: 0xb6}, -+ {value: 0x44cb, lo: 0xb8, hi: 0xb8}, -+ {value: 0x44d7, lo: 0xb9, hi: 0xbb}, -+ {value: 0x44ef, lo: 0xbc, hi: 0xbc}, -+ {value: 0x44f5, lo: 0xbe, hi: 0xbe}, -+ // Block 0x64, offset 0x1f9 -+ {value: 0x0006, lo: 0x08}, -+ {value: 0x44fb, lo: 0x80, hi: 0x81}, -+ {value: 0x4507, lo: 0x83, hi: 0x84}, -+ {value: 0x4519, lo: 0x86, hi: 0x89}, -+ {value: 0x453d, lo: 0x8a, hi: 0x8a}, -+ {value: 0x44b9, lo: 0x8b, hi: 0x8b}, -+ {value: 0x44a1, lo: 0x8c, hi: 0x8c}, -+ {value: 0x44e9, lo: 0x8d, hi: 0x8d}, -+ {value: 0x4513, lo: 0x8e, hi: 0x8e}, -+ // Block 0x65, offset 0x202 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8100, lo: 0xa4, hi: 0xa5}, -+ {value: 0x8100, lo: 0xb0, hi: 0xb1}, -+ // Block 0x66, offset 0x205 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8100, lo: 0x9b, hi: 0x9d}, -+ {value: 0x8200, lo: 0x9e, hi: 0xa3}, -+ // Block 0x67, offset 0x208 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8100, lo: 0x90, hi: 0x90}, -+ // Block 0x68, offset 0x20a -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8100, lo: 0x99, hi: 0x99}, -+ {value: 0x8200, lo: 0xb2, hi: 0xb4}, -+ // Block 0x69, offset 0x20d -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8100, lo: 0xbc, hi: 0xbd}, -+ // Block 0x6a, offset 0x20f -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8133, lo: 0xa0, hi: 0xa6}, -+ {value: 0x812e, lo: 0xa7, hi: 0xad}, -+ {value: 0x8133, lo: 0xae, hi: 0xaf}, -+ // Block 0x6b, offset 0x213 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x8100, lo: 0x89, hi: 0x8c}, -+ {value: 0x8100, lo: 0xb0, hi: 0xb2}, -+ {value: 0x8100, lo: 0xb4, hi: 0xb4}, -+ {value: 0x8100, lo: 0xb6, hi: 0xbf}, -+ // Block 0x6c, offset 0x218 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8100, lo: 0x81, hi: 0x8c}, -+ // Block 0x6d, offset 0x21a -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8100, lo: 0xb5, hi: 0xba}, -+ // Block 0x6e, offset 0x21c -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x4be0, lo: 0x9e, hi: 0x9f}, -+ {value: 0x4be0, lo: 0xa3, hi: 0xa3}, -+ {value: 0x4be0, lo: 0xa5, hi: 0xa6}, -+ {value: 0x4be0, lo: 0xaa, hi: 0xaf}, -+ // Block 0x6f, offset 0x221 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x4be0, lo: 0x82, hi: 0x87}, -+ {value: 0x4be0, lo: 0x8a, hi: 0x8f}, -+ {value: 0x4be0, lo: 0x92, hi: 0x97}, -+ {value: 0x4be0, lo: 0x9a, hi: 0x9c}, -+ {value: 0x8100, lo: 0xa3, hi: 0xa3}, -+ // Block 0x70, offset 0x227 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0xbd, hi: 0xbd}, -+ // Block 0x71, offset 0x229 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0xa0, hi: 0xa0}, -+ // Block 0x72, offset 0x22b -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xb6, hi: 0xba}, -+ // Block 0x73, offset 0x22d -+ {value: 0x002d, lo: 0x05}, -+ {value: 0x812e, lo: 0x8d, hi: 0x8d}, -+ {value: 0x8133, lo: 0x8f, hi: 0x8f}, -+ {value: 0x8133, lo: 0xb8, hi: 0xb8}, -+ {value: 0x8101, lo: 0xb9, hi: 0xba}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x74, offset 0x233 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0xa5, hi: 0xa5}, -+ {value: 0x812e, lo: 0xa6, hi: 0xa6}, -+ // Block 0x75, offset 0x236 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xa4, hi: 0xa7}, -+ // Block 0x76, offset 0x238 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xab, hi: 0xac}, -+ // Block 0x77, offset 0x23a -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0xbd, hi: 0xbf}, -+ // Block 0x78, offset 0x23c -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x812e, lo: 0x86, hi: 0x87}, -+ {value: 0x8133, lo: 0x88, hi: 0x8a}, -+ {value: 0x812e, lo: 0x8b, hi: 0x8b}, -+ {value: 0x8133, lo: 0x8c, hi: 0x8c}, -+ {value: 0x812e, lo: 0x8d, hi: 0x90}, -+ // Block 0x79, offset 0x242 -+ {value: 0x0005, lo: 0x03}, -+ {value: 0x8133, lo: 0x82, hi: 0x82}, -+ {value: 0x812e, lo: 0x83, hi: 0x84}, -+ {value: 0x812e, lo: 0x85, hi: 0x85}, -+ // Block 0x7a, offset 0x246 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8105, lo: 0x86, hi: 0x86}, -+ {value: 0x8105, lo: 0xb0, hi: 0xb0}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x7b, offset 0x24a -+ {value: 0x17fe, lo: 0x07}, -+ {value: 0xa000, lo: 0x99, hi: 0x99}, -+ {value: 0x4379, lo: 0x9a, hi: 0x9a}, -+ {value: 0xa000, lo: 0x9b, hi: 0x9b}, -+ {value: 0x4383, lo: 0x9c, hi: 0x9c}, -+ {value: 0xa000, lo: 0xa5, hi: 0xa5}, -+ {value: 0x438d, lo: 0xab, hi: 0xab}, -+ {value: 0x8105, lo: 0xb9, hi: 0xba}, -+ // Block 0x7c, offset 0x252 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x8133, lo: 0x80, hi: 0x82}, -+ {value: 0x9900, lo: 0xa7, hi: 0xa7}, -+ {value: 0x2eb5, lo: 0xae, hi: 0xae}, -+ {value: 0x2ebf, lo: 0xaf, hi: 0xaf}, -+ {value: 0xa000, lo: 0xb1, hi: 0xb2}, -+ {value: 0x8105, lo: 0xb3, hi: 0xb4}, -+ // Block 0x7d, offset 0x259 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x80, hi: 0x80}, -+ {value: 0x8103, lo: 0x8a, hi: 0x8a}, -+ // Block 0x7e, offset 0x25c -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0xb5, hi: 0xb5}, -+ {value: 0x8103, lo: 0xb6, hi: 0xb6}, -+ // Block 0x7f, offset 0x25f -+ {value: 0x0002, lo: 0x01}, -+ {value: 0x8103, lo: 0xa9, hi: 0xaa}, -+ // Block 0x80, offset 0x261 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0xbb, hi: 0xbc}, -+ {value: 0x9900, lo: 0xbe, hi: 0xbe}, -+ // Block 0x81, offset 0x264 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0xa000, lo: 0x87, hi: 0x87}, -+ {value: 0x2ec9, lo: 0x8b, hi: 0x8b}, -+ {value: 0x2ed3, lo: 0x8c, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x97, hi: 0x97}, -+ {value: 0x8133, lo: 0xa6, hi: 0xac}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb4}, -+ // Block 0x82, offset 0x26c -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8105, lo: 0x82, hi: 0x82}, -+ {value: 0x8103, lo: 0x86, hi: 0x86}, -+ {value: 0x8133, lo: 0x9e, hi: 0x9e}, -+ // Block 0x83, offset 0x270 -+ {value: 0x6a23, lo: 0x06}, -+ {value: 0x9900, lo: 0xb0, hi: 0xb0}, -+ {value: 0xa000, lo: 0xb9, hi: 0xb9}, -+ {value: 0x9900, lo: 0xba, hi: 0xba}, -+ {value: 0x2ee7, lo: 0xbb, hi: 0xbb}, -+ {value: 0x2edd, lo: 0xbc, hi: 0xbd}, -+ {value: 0x2ef1, lo: 0xbe, hi: 0xbe}, -+ // Block 0x84, offset 0x277 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x82, hi: 0x82}, -+ {value: 0x8103, lo: 0x83, hi: 0x83}, -+ // Block 0x85, offset 0x27a -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x9900, lo: 0xaf, hi: 0xaf}, -+ {value: 0xa000, lo: 0xb8, hi: 0xb9}, -+ {value: 0x2efb, lo: 0xba, hi: 0xba}, -+ {value: 0x2f05, lo: 0xbb, hi: 0xbb}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x86, offset 0x280 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0x80, hi: 0x80}, -+ // Block 0x87, offset 0x282 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0xb6, hi: 0xb6}, -+ {value: 0x8103, lo: 0xb7, hi: 0xb7}, -+ // Block 0x88, offset 0x285 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xab, hi: 0xab}, -+ // Block 0x89, offset 0x287 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0xb9, hi: 0xb9}, -+ {value: 0x8103, lo: 0xba, hi: 0xba}, -+ // Block 0x8a, offset 0x28a -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x9900, lo: 0xb0, hi: 0xb0}, -+ {value: 0xa000, lo: 0xb5, hi: 0xb5}, -+ {value: 0x2f0f, lo: 0xb8, hi: 0xb8}, -+ {value: 0x8105, lo: 0xbd, hi: 0xbe}, -+ // Block 0x8b, offset 0x28f -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0x83, hi: 0x83}, -+ // Block 0x8c, offset 0x291 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xa0, hi: 0xa0}, -+ // Block 0x8d, offset 0x293 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xb4, hi: 0xb4}, -+ // Block 0x8e, offset 0x295 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x87, hi: 0x87}, -+ // Block 0x8f, offset 0x297 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x99, hi: 0x99}, -+ // Block 0x90, offset 0x299 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0x82, hi: 0x82}, -+ {value: 0x8105, lo: 0x84, hi: 0x85}, -+ // Block 0x91, offset 0x29c -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x97, hi: 0x97}, -+ // Block 0x92, offset 0x29e -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x81, hi: 0x82}, -+ // Block 0x93, offset 0x2a0 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8101, lo: 0xb0, hi: 0xb4}, -+ // Block 0x94, offset 0x2a2 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb6}, -+ // Block 0x95, offset 0x2a4 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8102, lo: 0xb0, hi: 0xb1}, -+ // Block 0x96, offset 0x2a6 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8101, lo: 0x9e, hi: 0x9e}, -+ // Block 0x97, offset 0x2a8 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x470d, lo: 0x9e, hi: 0x9e}, -+ {value: 0x4717, lo: 0x9f, hi: 0x9f}, -+ {value: 0x474b, lo: 0xa0, hi: 0xa0}, -+ {value: 0x4759, lo: 0xa1, hi: 0xa1}, -+ {value: 0x4767, lo: 0xa2, hi: 0xa2}, -+ {value: 0x4775, lo: 0xa3, hi: 0xa3}, -+ {value: 0x4783, lo: 0xa4, hi: 0xa4}, -+ {value: 0x812c, lo: 0xa5, hi: 0xa6}, -+ {value: 0x8101, lo: 0xa7, hi: 0xa9}, -+ {value: 0x8131, lo: 0xad, hi: 0xad}, -+ {value: 0x812c, lo: 0xae, hi: 0xb2}, -+ {value: 0x812e, lo: 0xbb, hi: 0xbf}, -+ // Block 0x98, offset 0x2b5 -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x812e, lo: 0x80, hi: 0x82}, -+ {value: 0x8133, lo: 0x85, hi: 0x89}, -+ {value: 0x812e, lo: 0x8a, hi: 0x8b}, -+ {value: 0x8133, lo: 0xaa, hi: 0xad}, -+ {value: 0x4721, lo: 0xbb, hi: 0xbb}, -+ {value: 0x472b, lo: 0xbc, hi: 0xbc}, -+ {value: 0x4791, lo: 0xbd, hi: 0xbd}, -+ {value: 0x47ad, lo: 0xbe, hi: 0xbe}, -+ {value: 0x479f, lo: 0xbf, hi: 0xbf}, -+ // Block 0x99, offset 0x2bf -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x47bb, lo: 0x80, hi: 0x80}, -+ // Block 0x9a, offset 0x2c1 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x82, hi: 0x84}, -+ // Block 0x9b, offset 0x2c3 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x8133, lo: 0x80, hi: 0x86}, -+ {value: 0x8133, lo: 0x88, hi: 0x98}, -+ {value: 0x8133, lo: 0x9b, hi: 0xa1}, -+ {value: 0x8133, lo: 0xa3, hi: 0xa4}, -+ {value: 0x8133, lo: 0xa6, hi: 0xaa}, -+ // Block 0x9c, offset 0x2c9 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x8f, hi: 0x8f}, -+ // Block 0x9d, offset 0x2cb -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xae, hi: 0xae}, -+ // Block 0x9e, offset 0x2cd -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xac, hi: 0xaf}, -+ // Block 0x9f, offset 0x2cf -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8134, lo: 0xac, hi: 0xad}, -+ {value: 0x812e, lo: 0xae, hi: 0xae}, -+ {value: 0x8133, lo: 0xaf, hi: 0xaf}, -+ // Block 0xa0, offset 0x2d3 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0x90, hi: 0x96}, -+ // Block 0xa1, offset 0x2d5 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0x84, hi: 0x89}, -+ {value: 0x8103, lo: 0x8a, hi: 0x8a}, -+ // Block 0xa2, offset 0x2d8 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8100, lo: 0x93, hi: 0x93}, -+} -+ -+// lookup returns the trie value for the first UTF-8 encoding in s and -+// the width in bytes of this encoding. The size will be 0 if s does not -+// hold enough bytes to complete the encoding. len(s) must be greater than 0. -+func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) { -+ c0 := s[0] -+ switch { -+ case c0 < 0x80: // is ASCII -+ return nfkcValues[c0], 1 -+ case c0 < 0xC2: -+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII. -+ case c0 < 0xE0: // 2-byte UTF-8 -+ if len(s) < 2 { -+ return 0, 0 -+ } -+ i := nfkcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c1), 2 -+ case c0 < 0xF0: // 3-byte UTF-8 -+ if len(s) < 3 { -+ return 0, 0 -+ } -+ i := nfkcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = nfkcIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c2), 3 -+ case c0 < 0xF8: // 4-byte UTF-8 -+ if len(s) < 4 { -+ return 0, 0 -+ } -+ i := nfkcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = nfkcIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ o = uint32(i)<<6 + uint32(c2) -+ i = nfkcIndex[o] -+ c3 := s[3] -+ if c3 < 0x80 || 0xC0 <= c3 { -+ return 0, 3 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c3), 4 -+ } -+ // Illegal rune -+ return 0, 1 -+} -+ -+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -+// s must start with a full and valid UTF-8 encoded rune. -+func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 { -+ c0 := s[0] -+ if c0 < 0x80 { // is ASCII -+ return nfkcValues[c0] -+ } -+ i := nfkcIndex[c0] -+ if c0 < 0xE0 { // 2-byte UTF-8 -+ return t.lookupValue(uint32(i), s[1]) -+ } -+ i = nfkcIndex[uint32(i)<<6+uint32(s[1])] -+ if c0 < 0xF0 { // 3-byte UTF-8 -+ return t.lookupValue(uint32(i), s[2]) -+ } -+ i = nfkcIndex[uint32(i)<<6+uint32(s[2])] -+ if c0 < 0xF8 { // 4-byte UTF-8 -+ return t.lookupValue(uint32(i), s[3]) -+ } -+ return 0 -+} -+ -+// lookupString returns the trie value for the first UTF-8 encoding in s and -+// the width in bytes of this encoding. The size will be 0 if s does not -+// hold enough bytes to complete the encoding. len(s) must be greater than 0. -+func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) { -+ c0 := s[0] -+ switch { -+ case c0 < 0x80: // is ASCII -+ return nfkcValues[c0], 1 -+ case c0 < 0xC2: -+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII. -+ case c0 < 0xE0: // 2-byte UTF-8 -+ if len(s) < 2 { -+ return 0, 0 -+ } -+ i := nfkcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c1), 2 -+ case c0 < 0xF0: // 3-byte UTF-8 -+ if len(s) < 3 { -+ return 0, 0 -+ } -+ i := nfkcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = nfkcIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c2), 3 -+ case c0 < 0xF8: // 4-byte UTF-8 -+ if len(s) < 4 { -+ return 0, 0 -+ } -+ i := nfkcIndex[c0] -+ c1 := s[1] -+ if c1 < 0x80 || 0xC0 <= c1 { -+ return 0, 1 // Illegal UTF-8: not a continuation byte. -+ } -+ o := uint32(i)<<6 + uint32(c1) -+ i = nfkcIndex[o] -+ c2 := s[2] -+ if c2 < 0x80 || 0xC0 <= c2 { -+ return 0, 2 // Illegal UTF-8: not a continuation byte. -+ } -+ o = uint32(i)<<6 + uint32(c2) -+ i = nfkcIndex[o] -+ c3 := s[3] -+ if c3 < 0x80 || 0xC0 <= c3 { -+ return 0, 3 // Illegal UTF-8: not a continuation byte. -+ } -+ return t.lookupValue(uint32(i), c3), 4 -+ } -+ // Illegal rune -+ return 0, 1 -+} -+ -+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -+// s must start with a full and valid UTF-8 encoded rune. -+func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { -+ c0 := s[0] -+ if c0 < 0x80 { // is ASCII -+ return nfkcValues[c0] -+ } -+ i := nfkcIndex[c0] -+ if c0 < 0xE0 { // 2-byte UTF-8 -+ return t.lookupValue(uint32(i), s[1]) -+ } -+ i = nfkcIndex[uint32(i)<<6+uint32(s[1])] -+ if c0 < 0xF0 { // 3-byte UTF-8 -+ return t.lookupValue(uint32(i), s[2]) -+ } -+ i = nfkcIndex[uint32(i)<<6+uint32(s[2])] -+ if c0 < 0xF8 { // 4-byte UTF-8 -+ return t.lookupValue(uint32(i), s[3]) -+ } -+ return 0 -+} -+ -+// nfkcTrie. Total size: 19260 bytes (18.81 KiB). Checksum: 1a0bbc4c8c24da49. -+type nfkcTrie struct{} -+ -+func newNfkcTrie(i int) *nfkcTrie { -+ return &nfkcTrie{} -+} -+ -+// lookupValue determines the type of block n and looks up the value for b. -+func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { -+ switch { -+ case n < 95: -+ return uint16(nfkcValues[n<<6+uint32(b)]) -+ default: -+ n -= 95 -+ return uint16(nfkcSparse.lookup(n, b)) -+ } -+} -+ -+// nfkcValues: 97 blocks, 6208 entries, 12416 bytes -+// The third block is the zero block. -+var nfkcValues = [6208]uint16{ -+ // Block 0x0, offset 0x0 -+ 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, -+ // Block 0x1, offset 0x40 -+ 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, -+ 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, -+ 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, -+ 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, -+ 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, -+ 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, -+ 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, -+ 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, -+ 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, -+ 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, -+ // Block 0x2, offset 0x80 -+ // Block 0x3, offset 0xc0 -+ 0xc0: 0x30b0, 0xc1: 0x30b5, 0xc2: 0x47c9, 0xc3: 0x30ba, 0xc4: 0x47d8, 0xc5: 0x47dd, -+ 0xc6: 0xa000, 0xc7: 0x47e7, 0xc8: 0x3123, 0xc9: 0x3128, 0xca: 0x47ec, 0xcb: 0x313c, -+ 0xcc: 0x31af, 0xcd: 0x31b4, 0xce: 0x31b9, 0xcf: 0x4800, 0xd1: 0x3245, -+ 0xd2: 0x3268, 0xd3: 0x326d, 0xd4: 0x480a, 0xd5: 0x480f, 0xd6: 0x481e, -+ 0xd8: 0xa000, 0xd9: 0x32f4, 0xda: 0x32f9, 0xdb: 0x32fe, 0xdc: 0x4850, 0xdd: 0x3376, -+ 0xe0: 0x33bc, 0xe1: 0x33c1, 0xe2: 0x485a, 0xe3: 0x33c6, -+ 0xe4: 0x4869, 0xe5: 0x486e, 0xe6: 0xa000, 0xe7: 0x4878, 0xe8: 0x342f, 0xe9: 0x3434, -+ 0xea: 0x487d, 0xeb: 0x3448, 0xec: 0x34c0, 0xed: 0x34c5, 0xee: 0x34ca, 0xef: 0x4891, -+ 0xf1: 0x3556, 0xf2: 0x3579, 0xf3: 0x357e, 0xf4: 0x489b, 0xf5: 0x48a0, -+ 0xf6: 0x48af, 0xf8: 0xa000, 0xf9: 0x360a, 0xfa: 0x360f, 0xfb: 0x3614, -+ 0xfc: 0x48e1, 0xfd: 0x3691, 0xff: 0x36aa, -+ // Block 0x4, offset 0x100 -+ 0x100: 0x30bf, 0x101: 0x33cb, 0x102: 0x47ce, 0x103: 0x485f, 0x104: 0x30dd, 0x105: 0x33e9, -+ 0x106: 0x30f1, 0x107: 0x33fd, 0x108: 0x30f6, 0x109: 0x3402, 0x10a: 0x30fb, 0x10b: 0x3407, -+ 0x10c: 0x3100, 0x10d: 0x340c, 0x10e: 0x310a, 0x10f: 0x3416, -+ 0x112: 0x47f1, 0x113: 0x4882, 0x114: 0x3132, 0x115: 0x343e, 0x116: 0x3137, 0x117: 0x3443, -+ 0x118: 0x3155, 0x119: 0x3461, 0x11a: 0x3146, 0x11b: 0x3452, 0x11c: 0x316e, 0x11d: 0x347a, -+ 0x11e: 0x3178, 0x11f: 0x3484, 0x120: 0x317d, 0x121: 0x3489, 0x122: 0x3187, 0x123: 0x3493, -+ 0x124: 0x318c, 0x125: 0x3498, 0x128: 0x31be, 0x129: 0x34cf, -+ 0x12a: 0x31c3, 0x12b: 0x34d4, 0x12c: 0x31c8, 0x12d: 0x34d9, 0x12e: 0x31eb, 0x12f: 0x34f7, -+ 0x130: 0x31cd, 0x132: 0x1a8a, 0x133: 0x1b17, 0x134: 0x31f5, 0x135: 0x3501, -+ 0x136: 0x3209, 0x137: 0x351a, 0x139: 0x3213, 0x13a: 0x3524, 0x13b: 0x321d, -+ 0x13c: 0x352e, 0x13d: 0x3218, 0x13e: 0x3529, 0x13f: 0x1cdc, -+ // Block 0x5, offset 0x140 -+ 0x140: 0x1d64, 0x143: 0x3240, 0x144: 0x3551, 0x145: 0x3259, -+ 0x146: 0x356a, 0x147: 0x324f, 0x148: 0x3560, 0x149: 0x1d8c, -+ 0x14c: 0x4814, 0x14d: 0x48a5, 0x14e: 0x3272, 0x14f: 0x3583, 0x150: 0x327c, 0x151: 0x358d, -+ 0x154: 0x329a, 0x155: 0x35ab, 0x156: 0x32b3, 0x157: 0x35c4, -+ 0x158: 0x32a4, 0x159: 0x35b5, 0x15a: 0x4837, 0x15b: 0x48c8, 0x15c: 0x32bd, 0x15d: 0x35ce, -+ 0x15e: 0x32cc, 0x15f: 0x35dd, 0x160: 0x483c, 0x161: 0x48cd, 0x162: 0x32e5, 0x163: 0x35fb, -+ 0x164: 0x32d6, 0x165: 0x35ec, 0x168: 0x4846, 0x169: 0x48d7, -+ 0x16a: 0x484b, 0x16b: 0x48dc, 0x16c: 0x3303, 0x16d: 0x3619, 0x16e: 0x330d, 0x16f: 0x3623, -+ 0x170: 0x3312, 0x171: 0x3628, 0x172: 0x3330, 0x173: 0x3646, 0x174: 0x3353, 0x175: 0x3669, -+ 0x176: 0x337b, 0x177: 0x3696, 0x178: 0x338f, 0x179: 0x339e, 0x17a: 0x36be, 0x17b: 0x33a8, -+ 0x17c: 0x36c8, 0x17d: 0x33ad, 0x17e: 0x36cd, 0x17f: 0x00a7, -+ // Block 0x6, offset 0x180 -+ 0x184: 0x2f2f, 0x185: 0x2f35, -+ 0x186: 0x2f3b, 0x187: 0x1a9f, 0x188: 0x1aa2, 0x189: 0x1b38, 0x18a: 0x1ab7, 0x18b: 0x1aba, -+ 0x18c: 0x1b6e, 0x18d: 0x30c9, 0x18e: 0x33d5, 0x18f: 0x31d7, 0x190: 0x34e3, 0x191: 0x3281, -+ 0x192: 0x3592, 0x193: 0x3317, 0x194: 0x362d, 0x195: 0x3b10, 0x196: 0x3c9f, 0x197: 0x3b09, -+ 0x198: 0x3c98, 0x199: 0x3b17, 0x19a: 0x3ca6, 0x19b: 0x3b02, 0x19c: 0x3c91, -+ 0x19e: 0x39f1, 0x19f: 0x3b80, 0x1a0: 0x39ea, 0x1a1: 0x3b79, 0x1a2: 0x36f4, 0x1a3: 0x3706, -+ 0x1a6: 0x3182, 0x1a7: 0x348e, 0x1a8: 0x31ff, 0x1a9: 0x3510, -+ 0x1aa: 0x482d, 0x1ab: 0x48be, 0x1ac: 0x3ad1, 0x1ad: 0x3c60, 0x1ae: 0x3718, 0x1af: 0x371e, -+ 0x1b0: 0x3506, 0x1b1: 0x1a6f, 0x1b2: 0x1a72, 0x1b3: 0x1aff, 0x1b4: 0x3169, 0x1b5: 0x3475, -+ 0x1b8: 0x323b, 0x1b9: 0x354c, 0x1ba: 0x39f8, 0x1bb: 0x3b87, -+ 0x1bc: 0x36ee, 0x1bd: 0x3700, 0x1be: 0x36fa, 0x1bf: 0x370c, -+ // Block 0x7, offset 0x1c0 -+ 0x1c0: 0x30ce, 0x1c1: 0x33da, 0x1c2: 0x30d3, 0x1c3: 0x33df, 0x1c4: 0x314b, 0x1c5: 0x3457, -+ 0x1c6: 0x3150, 0x1c7: 0x345c, 0x1c8: 0x31dc, 0x1c9: 0x34e8, 0x1ca: 0x31e1, 0x1cb: 0x34ed, -+ 0x1cc: 0x3286, 0x1cd: 0x3597, 0x1ce: 0x328b, 0x1cf: 0x359c, 0x1d0: 0x32a9, 0x1d1: 0x35ba, -+ 0x1d2: 0x32ae, 0x1d3: 0x35bf, 0x1d4: 0x331c, 0x1d5: 0x3632, 0x1d6: 0x3321, 0x1d7: 0x3637, -+ 0x1d8: 0x32c7, 0x1d9: 0x35d8, 0x1da: 0x32e0, 0x1db: 0x35f6, -+ 0x1de: 0x319b, 0x1df: 0x34a7, -+ 0x1e6: 0x47d3, 0x1e7: 0x4864, 0x1e8: 0x47fb, 0x1e9: 0x488c, -+ 0x1ea: 0x3aa0, 0x1eb: 0x3c2f, 0x1ec: 0x3a7d, 0x1ed: 0x3c0c, 0x1ee: 0x4819, 0x1ef: 0x48aa, -+ 0x1f0: 0x3a99, 0x1f1: 0x3c28, 0x1f2: 0x3385, 0x1f3: 0x36a0, -+ // Block 0x8, offset 0x200 -+ 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, -+ 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, -+ 0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933, -+ 0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e, -+ 0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e, -+ 0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e, -+ 0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e, -+ 0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e, -+ 0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101, -+ 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e, -+ 0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133, -+ // Block 0x9, offset 0x240 -+ 0x240: 0x4aef, 0x241: 0x4af4, 0x242: 0x9933, 0x243: 0x4af9, 0x244: 0x4bb2, 0x245: 0x9937, -+ 0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133, -+ 0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133, -+ 0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133, -+ 0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136, -+ 0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133, -+ 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, -+ 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, -+ 0x274: 0x01ee, -+ 0x27a: 0x43e6, -+ 0x27e: 0x0037, -+ // Block 0xa, offset 0x280 -+ 0x284: 0x439b, 0x285: 0x45bc, -+ 0x286: 0x372a, 0x287: 0x00ce, 0x288: 0x3748, 0x289: 0x3754, 0x28a: 0x3766, -+ 0x28c: 0x3784, 0x28e: 0x3796, 0x28f: 0x37b4, 0x290: 0x3f49, 0x291: 0xa000, -+ 0x295: 0xa000, 0x297: 0xa000, -+ 0x299: 0xa000, -+ 0x29f: 0xa000, 0x2a1: 0xa000, -+ 0x2a5: 0xa000, 0x2a9: 0xa000, -+ 0x2aa: 0x3778, 0x2ab: 0x37a8, 0x2ac: 0x493f, 0x2ad: 0x37d8, 0x2ae: 0x4969, 0x2af: 0x37ea, -+ 0x2b0: 0x3fb1, 0x2b1: 0xa000, 0x2b5: 0xa000, -+ 0x2b7: 0xa000, 0x2b9: 0xa000, -+ 0x2bf: 0xa000, -+ // Block 0xb, offset 0x2c0 -+ 0x2c1: 0xa000, 0x2c5: 0xa000, -+ 0x2c9: 0xa000, 0x2ca: 0x4981, 0x2cb: 0x499f, -+ 0x2cc: 0x3808, 0x2cd: 0x3820, 0x2ce: 0x49b7, 0x2d0: 0x0242, 0x2d1: 0x0254, -+ 0x2d2: 0x0230, 0x2d3: 0x444d, 0x2d4: 0x4453, 0x2d5: 0x027e, 0x2d6: 0x026c, -+ 0x2f0: 0x025a, 0x2f1: 0x026f, 0x2f2: 0x0272, 0x2f4: 0x020c, 0x2f5: 0x024b, -+ 0x2f9: 0x022a, -+ // Block 0xc, offset 0x300 -+ 0x300: 0x3862, 0x301: 0x386e, 0x303: 0x385c, -+ 0x306: 0xa000, 0x307: 0x384a, -+ 0x30c: 0x389e, 0x30d: 0x3886, 0x30e: 0x38b0, 0x310: 0xa000, -+ 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, -+ 0x318: 0xa000, 0x319: 0x3892, 0x31a: 0xa000, -+ 0x31e: 0xa000, 0x323: 0xa000, -+ 0x327: 0xa000, -+ 0x32b: 0xa000, 0x32d: 0xa000, -+ 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, -+ 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x3916, 0x33a: 0xa000, -+ 0x33e: 0xa000, -+ // Block 0xd, offset 0x340 -+ 0x341: 0x3874, 0x342: 0x38f8, -+ 0x350: 0x3850, 0x351: 0x38d4, -+ 0x352: 0x3856, 0x353: 0x38da, 0x356: 0x3868, 0x357: 0x38ec, -+ 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x396a, 0x35b: 0x3970, 0x35c: 0x387a, 0x35d: 0x38fe, -+ 0x35e: 0x3880, 0x35f: 0x3904, 0x362: 0x388c, 0x363: 0x3910, -+ 0x364: 0x3898, 0x365: 0x391c, 0x366: 0x38a4, 0x367: 0x3928, 0x368: 0xa000, 0x369: 0xa000, -+ 0x36a: 0x3976, 0x36b: 0x397c, 0x36c: 0x38ce, 0x36d: 0x3952, 0x36e: 0x38aa, 0x36f: 0x392e, -+ 0x370: 0x38b6, 0x371: 0x393a, 0x372: 0x38bc, 0x373: 0x3940, 0x374: 0x38c2, 0x375: 0x3946, -+ 0x378: 0x38c8, 0x379: 0x394c, -+ // Block 0xe, offset 0x380 -+ 0x387: 0x1e91, -+ 0x391: 0x812e, -+ 0x392: 0x8133, 0x393: 0x8133, 0x394: 0x8133, 0x395: 0x8133, 0x396: 0x812e, 0x397: 0x8133, -+ 0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x812f, 0x39b: 0x812e, 0x39c: 0x8133, 0x39d: 0x8133, -+ 0x39e: 0x8133, 0x39f: 0x8133, 0x3a0: 0x8133, 0x3a1: 0x8133, 0x3a2: 0x812e, 0x3a3: 0x812e, -+ 0x3a4: 0x812e, 0x3a5: 0x812e, 0x3a6: 0x812e, 0x3a7: 0x812e, 0x3a8: 0x8133, 0x3a9: 0x8133, -+ 0x3aa: 0x812e, 0x3ab: 0x8133, 0x3ac: 0x8133, 0x3ad: 0x812f, 0x3ae: 0x8132, 0x3af: 0x8133, -+ 0x3b0: 0x8106, 0x3b1: 0x8107, 0x3b2: 0x8108, 0x3b3: 0x8109, 0x3b4: 0x810a, 0x3b5: 0x810b, -+ 0x3b6: 0x810c, 0x3b7: 0x810d, 0x3b8: 0x810e, 0x3b9: 0x810f, 0x3ba: 0x810f, 0x3bb: 0x8110, -+ 0x3bc: 0x8111, 0x3bd: 0x8112, 0x3bf: 0x8113, -+ // Block 0xf, offset 0x3c0 -+ 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8117, -+ 0x3cc: 0x8118, 0x3cd: 0x8119, 0x3ce: 0x811a, 0x3cf: 0x811b, 0x3d0: 0x811c, 0x3d1: 0x811d, -+ 0x3d2: 0x811e, 0x3d3: 0x9933, 0x3d4: 0x9933, 0x3d5: 0x992e, 0x3d6: 0x812e, 0x3d7: 0x8133, -+ 0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x812e, 0x3dd: 0x8133, -+ 0x3de: 0x8133, 0x3df: 0x812e, -+ 0x3f0: 0x811f, 0x3f5: 0x1eb4, -+ 0x3f6: 0x2143, 0x3f7: 0x217f, 0x3f8: 0x217a, -+ // Block 0x10, offset 0x400 -+ 0x40a: 0x8133, 0x40b: 0x8133, -+ 0x40c: 0x8133, 0x40d: 0x8133, 0x40e: 0x8133, 0x40f: 0x812e, 0x410: 0x812e, 0x411: 0x812e, -+ 0x412: 0x812e, 0x413: 0x812e, 0x414: 0x8133, 0x415: 0x8133, 0x416: 0x8133, 0x417: 0x8133, -+ 0x418: 0x8133, 0x419: 0x8133, 0x41a: 0x8133, 0x41b: 0x8133, 0x41c: 0x8133, 0x41d: 0x8133, -+ 0x41e: 0x8133, 0x41f: 0x8133, 0x420: 0x8133, 0x421: 0x8133, 0x423: 0x812e, -+ 0x424: 0x8133, 0x425: 0x8133, 0x426: 0x812e, 0x427: 0x8133, 0x428: 0x8133, 0x429: 0x812e, -+ 0x42a: 0x8133, 0x42b: 0x8133, 0x42c: 0x8133, 0x42d: 0x812e, 0x42e: 0x812e, 0x42f: 0x812e, -+ 0x430: 0x8117, 0x431: 0x8118, 0x432: 0x8119, 0x433: 0x8133, 0x434: 0x8133, 0x435: 0x8133, -+ 0x436: 0x812e, 0x437: 0x8133, 0x438: 0x8133, 0x439: 0x812e, 0x43a: 0x812e, 0x43b: 0x8133, -+ 0x43c: 0x8133, 0x43d: 0x8133, 0x43e: 0x8133, 0x43f: 0x8133, -+ // Block 0x11, offset 0x440 -+ 0x445: 0xa000, -+ 0x446: 0x2e5d, 0x447: 0xa000, 0x448: 0x2e65, 0x449: 0xa000, 0x44a: 0x2e6d, 0x44b: 0xa000, -+ 0x44c: 0x2e75, 0x44d: 0xa000, 0x44e: 0x2e7d, 0x451: 0xa000, -+ 0x452: 0x2e85, -+ 0x474: 0x8103, 0x475: 0x9900, -+ 0x47a: 0xa000, 0x47b: 0x2e8d, -+ 0x47c: 0xa000, 0x47d: 0x2e95, 0x47e: 0xa000, 0x47f: 0xa000, -+ // Block 0x12, offset 0x480 -+ 0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x0104, 0x485: 0x0107, -+ 0x486: 0x0506, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x011f, 0x48b: 0x0122, -+ 0x48c: 0x0125, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e6, -+ 0x492: 0x009f, 0x493: 0x0110, 0x494: 0x050a, 0x495: 0x050e, 0x496: 0x00a1, 0x497: 0x00a9, -+ 0x498: 0x00ab, 0x499: 0x0516, 0x49a: 0x015b, 0x49b: 0x00ad, 0x49c: 0x051a, 0x49d: 0x0242, -+ 0x49e: 0x0245, 0x49f: 0x0248, 0x4a0: 0x027e, 0x4a1: 0x0281, 0x4a2: 0x0093, 0x4a3: 0x00a5, -+ 0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x0242, 0x4a7: 0x0245, 0x4a8: 0x026f, 0x4a9: 0x027e, -+ 0x4aa: 0x0281, -+ 0x4b8: 0x02b4, -+ // Block 0x13, offset 0x4c0 -+ 0x4db: 0x010a, 0x4dc: 0x0087, 0x4dd: 0x0113, -+ 0x4de: 0x00d7, 0x4df: 0x0125, 0x4e0: 0x008d, 0x4e1: 0x012b, 0x4e2: 0x0131, 0x4e3: 0x013d, -+ 0x4e4: 0x0146, 0x4e5: 0x0149, 0x4e6: 0x014c, 0x4e7: 0x051e, 0x4e8: 0x01c7, 0x4e9: 0x0155, -+ 0x4ea: 0x0522, 0x4eb: 0x01ca, 0x4ec: 0x0161, 0x4ed: 0x015e, 0x4ee: 0x0164, 0x4ef: 0x0167, -+ 0x4f0: 0x016a, 0x4f1: 0x016d, 0x4f2: 0x0176, 0x4f3: 0x018e, 0x4f4: 0x0191, 0x4f5: 0x00f2, -+ 0x4f6: 0x019a, 0x4f7: 0x019d, 0x4f8: 0x0512, 0x4f9: 0x01a0, 0x4fa: 0x01a3, 0x4fb: 0x00b5, -+ 0x4fc: 0x01af, 0x4fd: 0x01b2, 0x4fe: 0x01b5, 0x4ff: 0x0254, -+ // Block 0x14, offset 0x500 -+ 0x500: 0x8133, 0x501: 0x8133, 0x502: 0x812e, 0x503: 0x8133, 0x504: 0x8133, 0x505: 0x8133, -+ 0x506: 0x8133, 0x507: 0x8133, 0x508: 0x8133, 0x509: 0x8133, 0x50a: 0x812e, 0x50b: 0x8133, -+ 0x50c: 0x8133, 0x50d: 0x8136, 0x50e: 0x812b, 0x50f: 0x812e, 0x510: 0x812a, 0x511: 0x8133, -+ 0x512: 0x8133, 0x513: 0x8133, 0x514: 0x8133, 0x515: 0x8133, 0x516: 0x8133, 0x517: 0x8133, -+ 0x518: 0x8133, 0x519: 0x8133, 0x51a: 0x8133, 0x51b: 0x8133, 0x51c: 0x8133, 0x51d: 0x8133, -+ 0x51e: 0x8133, 0x51f: 0x8133, 0x520: 0x8133, 0x521: 0x8133, 0x522: 0x8133, 0x523: 0x8133, -+ 0x524: 0x8133, 0x525: 0x8133, 0x526: 0x8133, 0x527: 0x8133, 0x528: 0x8133, 0x529: 0x8133, -+ 0x52a: 0x8133, 0x52b: 0x8133, 0x52c: 0x8133, 0x52d: 0x8133, 0x52e: 0x8133, 0x52f: 0x8133, -+ 0x530: 0x8133, 0x531: 0x8133, 0x532: 0x8133, 0x533: 0x8133, 0x534: 0x8133, 0x535: 0x8133, -+ 0x536: 0x8134, 0x537: 0x8132, 0x538: 0x8132, 0x539: 0x812e, 0x53a: 0x812d, 0x53b: 0x8133, -+ 0x53c: 0x8135, 0x53d: 0x812e, 0x53e: 0x8133, 0x53f: 0x812e, -+ // Block 0x15, offset 0x540 -+ 0x540: 0x30d8, 0x541: 0x33e4, 0x542: 0x30e2, 0x543: 0x33ee, 0x544: 0x30e7, 0x545: 0x33f3, -+ 0x546: 0x30ec, 0x547: 0x33f8, 0x548: 0x3a0d, 0x549: 0x3b9c, 0x54a: 0x3105, 0x54b: 0x3411, -+ 0x54c: 0x310f, 0x54d: 0x341b, 0x54e: 0x311e, 0x54f: 0x342a, 0x550: 0x3114, 0x551: 0x3420, -+ 0x552: 0x3119, 0x553: 0x3425, 0x554: 0x3a30, 0x555: 0x3bbf, 0x556: 0x3a37, 0x557: 0x3bc6, -+ 0x558: 0x315a, 0x559: 0x3466, 0x55a: 0x315f, 0x55b: 0x346b, 0x55c: 0x3a45, 0x55d: 0x3bd4, -+ 0x55e: 0x3164, 0x55f: 0x3470, 0x560: 0x3173, 0x561: 0x347f, 0x562: 0x3191, 0x563: 0x349d, -+ 0x564: 0x31a0, 0x565: 0x34ac, 0x566: 0x3196, 0x567: 0x34a2, 0x568: 0x31a5, 0x569: 0x34b1, -+ 0x56a: 0x31aa, 0x56b: 0x34b6, 0x56c: 0x31f0, 0x56d: 0x34fc, 0x56e: 0x3a4c, 0x56f: 0x3bdb, -+ 0x570: 0x31fa, 0x571: 0x350b, 0x572: 0x3204, 0x573: 0x3515, 0x574: 0x320e, 0x575: 0x351f, -+ 0x576: 0x4805, 0x577: 0x4896, 0x578: 0x3a53, 0x579: 0x3be2, 0x57a: 0x3227, 0x57b: 0x3538, -+ 0x57c: 0x3222, 0x57d: 0x3533, 0x57e: 0x322c, 0x57f: 0x353d, -+ // Block 0x16, offset 0x580 -+ 0x580: 0x3231, 0x581: 0x3542, 0x582: 0x3236, 0x583: 0x3547, 0x584: 0x324a, 0x585: 0x355b, -+ 0x586: 0x3254, 0x587: 0x3565, 0x588: 0x3263, 0x589: 0x3574, 0x58a: 0x325e, 0x58b: 0x356f, -+ 0x58c: 0x3a76, 0x58d: 0x3c05, 0x58e: 0x3a84, 0x58f: 0x3c13, 0x590: 0x3a8b, 0x591: 0x3c1a, -+ 0x592: 0x3a92, 0x593: 0x3c21, 0x594: 0x3290, 0x595: 0x35a1, 0x596: 0x3295, 0x597: 0x35a6, -+ 0x598: 0x329f, 0x599: 0x35b0, 0x59a: 0x4832, 0x59b: 0x48c3, 0x59c: 0x3ad8, 0x59d: 0x3c67, -+ 0x59e: 0x32b8, 0x59f: 0x35c9, 0x5a0: 0x32c2, 0x5a1: 0x35d3, 0x5a2: 0x4841, 0x5a3: 0x48d2, -+ 0x5a4: 0x3adf, 0x5a5: 0x3c6e, 0x5a6: 0x3ae6, 0x5a7: 0x3c75, 0x5a8: 0x3aed, 0x5a9: 0x3c7c, -+ 0x5aa: 0x32d1, 0x5ab: 0x35e2, 0x5ac: 0x32db, 0x5ad: 0x35f1, 0x5ae: 0x32ef, 0x5af: 0x3605, -+ 0x5b0: 0x32ea, 0x5b1: 0x3600, 0x5b2: 0x332b, 0x5b3: 0x3641, 0x5b4: 0x333a, 0x5b5: 0x3650, -+ 0x5b6: 0x3335, 0x5b7: 0x364b, 0x5b8: 0x3af4, 0x5b9: 0x3c83, 0x5ba: 0x3afb, 0x5bb: 0x3c8a, -+ 0x5bc: 0x333f, 0x5bd: 0x3655, 0x5be: 0x3344, 0x5bf: 0x365a, -+ // Block 0x17, offset 0x5c0 -+ 0x5c0: 0x3349, 0x5c1: 0x365f, 0x5c2: 0x334e, 0x5c3: 0x3664, 0x5c4: 0x335d, 0x5c5: 0x3673, -+ 0x5c6: 0x3358, 0x5c7: 0x366e, 0x5c8: 0x3362, 0x5c9: 0x367d, 0x5ca: 0x3367, 0x5cb: 0x3682, -+ 0x5cc: 0x336c, 0x5cd: 0x3687, 0x5ce: 0x338a, 0x5cf: 0x36a5, 0x5d0: 0x33a3, 0x5d1: 0x36c3, -+ 0x5d2: 0x33b2, 0x5d3: 0x36d2, 0x5d4: 0x33b7, 0x5d5: 0x36d7, 0x5d6: 0x34bb, 0x5d7: 0x35e7, -+ 0x5d8: 0x3678, 0x5d9: 0x36b4, 0x5da: 0x1d10, 0x5db: 0x4418, -+ 0x5e0: 0x47e2, 0x5e1: 0x4873, 0x5e2: 0x30c4, 0x5e3: 0x33d0, -+ 0x5e4: 0x39b9, 0x5e5: 0x3b48, 0x5e6: 0x39b2, 0x5e7: 0x3b41, 0x5e8: 0x39c7, 0x5e9: 0x3b56, -+ 0x5ea: 0x39c0, 0x5eb: 0x3b4f, 0x5ec: 0x39ff, 0x5ed: 0x3b8e, 0x5ee: 0x39d5, 0x5ef: 0x3b64, -+ 0x5f0: 0x39ce, 0x5f1: 0x3b5d, 0x5f2: 0x39e3, 0x5f3: 0x3b72, 0x5f4: 0x39dc, 0x5f5: 0x3b6b, -+ 0x5f6: 0x3a06, 0x5f7: 0x3b95, 0x5f8: 0x47f6, 0x5f9: 0x4887, 0x5fa: 0x3141, 0x5fb: 0x344d, -+ 0x5fc: 0x312d, 0x5fd: 0x3439, 0x5fe: 0x3a1b, 0x5ff: 0x3baa, -+ // Block 0x18, offset 0x600 -+ 0x600: 0x3a14, 0x601: 0x3ba3, 0x602: 0x3a29, 0x603: 0x3bb8, 0x604: 0x3a22, 0x605: 0x3bb1, -+ 0x606: 0x3a3e, 0x607: 0x3bcd, 0x608: 0x31d2, 0x609: 0x34de, 0x60a: 0x31e6, 0x60b: 0x34f2, -+ 0x60c: 0x4828, 0x60d: 0x48b9, 0x60e: 0x3277, 0x60f: 0x3588, 0x610: 0x3a61, 0x611: 0x3bf0, -+ 0x612: 0x3a5a, 0x613: 0x3be9, 0x614: 0x3a6f, 0x615: 0x3bfe, 0x616: 0x3a68, 0x617: 0x3bf7, -+ 0x618: 0x3aca, 0x619: 0x3c59, 0x61a: 0x3aae, 0x61b: 0x3c3d, 0x61c: 0x3aa7, 0x61d: 0x3c36, -+ 0x61e: 0x3abc, 0x61f: 0x3c4b, 0x620: 0x3ab5, 0x621: 0x3c44, 0x622: 0x3ac3, 0x623: 0x3c52, -+ 0x624: 0x3326, 0x625: 0x363c, 0x626: 0x3308, 0x627: 0x361e, 0x628: 0x3b25, 0x629: 0x3cb4, -+ 0x62a: 0x3b1e, 0x62b: 0x3cad, 0x62c: 0x3b33, 0x62d: 0x3cc2, 0x62e: 0x3b2c, 0x62f: 0x3cbb, -+ 0x630: 0x3b3a, 0x631: 0x3cc9, 0x632: 0x3371, 0x633: 0x368c, 0x634: 0x3399, 0x635: 0x36b9, -+ 0x636: 0x3394, 0x637: 0x36af, 0x638: 0x3380, 0x639: 0x369b, -+ // Block 0x19, offset 0x640 -+ 0x640: 0x4945, 0x641: 0x494b, 0x642: 0x4a5f, 0x643: 0x4a77, 0x644: 0x4a67, 0x645: 0x4a7f, -+ 0x646: 0x4a6f, 0x647: 0x4a87, 0x648: 0x48eb, 0x649: 0x48f1, 0x64a: 0x49cf, 0x64b: 0x49e7, -+ 0x64c: 0x49d7, 0x64d: 0x49ef, 0x64e: 0x49df, 0x64f: 0x49f7, 0x650: 0x4957, 0x651: 0x495d, -+ 0x652: 0x3ef9, 0x653: 0x3f09, 0x654: 0x3f01, 0x655: 0x3f11, -+ 0x658: 0x48f7, 0x659: 0x48fd, 0x65a: 0x3e29, 0x65b: 0x3e39, 0x65c: 0x3e31, 0x65d: 0x3e41, -+ 0x660: 0x496f, 0x661: 0x4975, 0x662: 0x4a8f, 0x663: 0x4aa7, -+ 0x664: 0x4a97, 0x665: 0x4aaf, 0x666: 0x4a9f, 0x667: 0x4ab7, 0x668: 0x4903, 0x669: 0x4909, -+ 0x66a: 0x49ff, 0x66b: 0x4a17, 0x66c: 0x4a07, 0x66d: 0x4a1f, 0x66e: 0x4a0f, 0x66f: 0x4a27, -+ 0x670: 0x4987, 0x671: 0x498d, 0x672: 0x3f59, 0x673: 0x3f71, 0x674: 0x3f61, 0x675: 0x3f79, -+ 0x676: 0x3f69, 0x677: 0x3f81, 0x678: 0x490f, 0x679: 0x4915, 0x67a: 0x3e59, 0x67b: 0x3e71, -+ 0x67c: 0x3e61, 0x67d: 0x3e79, 0x67e: 0x3e69, 0x67f: 0x3e81, -+ // Block 0x1a, offset 0x680 -+ 0x680: 0x4993, 0x681: 0x4999, 0x682: 0x3f89, 0x683: 0x3f99, 0x684: 0x3f91, 0x685: 0x3fa1, -+ 0x688: 0x491b, 0x689: 0x4921, 0x68a: 0x3e89, 0x68b: 0x3e99, -+ 0x68c: 0x3e91, 0x68d: 0x3ea1, 0x690: 0x49a5, 0x691: 0x49ab, -+ 0x692: 0x3fc1, 0x693: 0x3fd9, 0x694: 0x3fc9, 0x695: 0x3fe1, 0x696: 0x3fd1, 0x697: 0x3fe9, -+ 0x699: 0x4927, 0x69b: 0x3ea9, 0x69d: 0x3eb1, -+ 0x69f: 0x3eb9, 0x6a0: 0x49bd, 0x6a1: 0x49c3, 0x6a2: 0x4abf, 0x6a3: 0x4ad7, -+ 0x6a4: 0x4ac7, 0x6a5: 0x4adf, 0x6a6: 0x4acf, 0x6a7: 0x4ae7, 0x6a8: 0x492d, 0x6a9: 0x4933, -+ 0x6aa: 0x4a2f, 0x6ab: 0x4a47, 0x6ac: 0x4a37, 0x6ad: 0x4a4f, 0x6ae: 0x4a3f, 0x6af: 0x4a57, -+ 0x6b0: 0x4939, 0x6b1: 0x445f, 0x6b2: 0x37d2, 0x6b3: 0x4465, 0x6b4: 0x4963, 0x6b5: 0x446b, -+ 0x6b6: 0x37e4, 0x6b7: 0x4471, 0x6b8: 0x3802, 0x6b9: 0x4477, 0x6ba: 0x381a, 0x6bb: 0x447d, -+ 0x6bc: 0x49b1, 0x6bd: 0x4483, -+ // Block 0x1b, offset 0x6c0 -+ 0x6c0: 0x3ee1, 0x6c1: 0x3ee9, 0x6c2: 0x42c5, 0x6c3: 0x42e3, 0x6c4: 0x42cf, 0x6c5: 0x42ed, -+ 0x6c6: 0x42d9, 0x6c7: 0x42f7, 0x6c8: 0x3e19, 0x6c9: 0x3e21, 0x6ca: 0x4211, 0x6cb: 0x422f, -+ 0x6cc: 0x421b, 0x6cd: 0x4239, 0x6ce: 0x4225, 0x6cf: 0x4243, 0x6d0: 0x3f29, 0x6d1: 0x3f31, -+ 0x6d2: 0x4301, 0x6d3: 0x431f, 0x6d4: 0x430b, 0x6d5: 0x4329, 0x6d6: 0x4315, 0x6d7: 0x4333, -+ 0x6d8: 0x3e49, 0x6d9: 0x3e51, 0x6da: 0x424d, 0x6db: 0x426b, 0x6dc: 0x4257, 0x6dd: 0x4275, -+ 0x6de: 0x4261, 0x6df: 0x427f, 0x6e0: 0x4001, 0x6e1: 0x4009, 0x6e2: 0x433d, 0x6e3: 0x435b, -+ 0x6e4: 0x4347, 0x6e5: 0x4365, 0x6e6: 0x4351, 0x6e7: 0x436f, 0x6e8: 0x3ec1, 0x6e9: 0x3ec9, -+ 0x6ea: 0x4289, 0x6eb: 0x42a7, 0x6ec: 0x4293, 0x6ed: 0x42b1, 0x6ee: 0x429d, 0x6ef: 0x42bb, -+ 0x6f0: 0x37c6, 0x6f1: 0x37c0, 0x6f2: 0x3ed1, 0x6f3: 0x37cc, 0x6f4: 0x3ed9, -+ 0x6f6: 0x4951, 0x6f7: 0x3ef1, 0x6f8: 0x3736, 0x6f9: 0x3730, 0x6fa: 0x3724, 0x6fb: 0x442f, -+ 0x6fc: 0x373c, 0x6fd: 0x43c8, 0x6fe: 0x0257, 0x6ff: 0x43c8, -+ // Block 0x1c, offset 0x700 -+ 0x700: 0x43e1, 0x701: 0x45c3, 0x702: 0x3f19, 0x703: 0x37de, 0x704: 0x3f21, -+ 0x706: 0x497b, 0x707: 0x3f39, 0x708: 0x3742, 0x709: 0x4435, 0x70a: 0x374e, 0x70b: 0x443b, -+ 0x70c: 0x375a, 0x70d: 0x45ca, 0x70e: 0x45d1, 0x70f: 0x45d8, 0x710: 0x37f6, 0x711: 0x37f0, -+ 0x712: 0x3f41, 0x713: 0x4625, 0x716: 0x37fc, 0x717: 0x3f51, -+ 0x718: 0x3772, 0x719: 0x376c, 0x71a: 0x3760, 0x71b: 0x4441, 0x71d: 0x45df, -+ 0x71e: 0x45e6, 0x71f: 0x45ed, 0x720: 0x382c, 0x721: 0x3826, 0x722: 0x3fa9, 0x723: 0x462d, -+ 0x724: 0x380e, 0x725: 0x3814, 0x726: 0x3832, 0x727: 0x3fb9, 0x728: 0x37a2, 0x729: 0x379c, -+ 0x72a: 0x3790, 0x72b: 0x444d, 0x72c: 0x378a, 0x72d: 0x45b5, 0x72e: 0x45bc, 0x72f: 0x0081, -+ 0x732: 0x3ff1, 0x733: 0x3838, 0x734: 0x3ff9, -+ 0x736: 0x49c9, 0x737: 0x4011, 0x738: 0x377e, 0x739: 0x4447, 0x73a: 0x37ae, 0x73b: 0x4459, -+ 0x73c: 0x37ba, 0x73d: 0x439b, 0x73e: 0x43cd, -+ // Block 0x1d, offset 0x740 -+ 0x740: 0x1d08, 0x741: 0x1d0c, 0x742: 0x0047, 0x743: 0x1d84, 0x745: 0x1d18, -+ 0x746: 0x1d1c, 0x747: 0x00ef, 0x749: 0x1d88, 0x74a: 0x008f, 0x74b: 0x0051, -+ 0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00e0, 0x750: 0x0053, 0x751: 0x0053, -+ 0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x1abd, -+ 0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065, -+ 0x760: 0x1acf, 0x761: 0x1cf8, 0x762: 0x1ad8, -+ 0x764: 0x0075, 0x766: 0x023c, 0x768: 0x0075, -+ 0x76a: 0x0057, 0x76b: 0x4413, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, -+ 0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0308, -+ 0x776: 0x030b, 0x777: 0x030e, 0x778: 0x0311, 0x779: 0x0093, 0x77b: 0x1cc8, -+ 0x77c: 0x026c, 0x77d: 0x0245, 0x77e: 0x01fd, 0x77f: 0x0224, -+ // Block 0x1e, offset 0x780 -+ 0x780: 0x055a, 0x785: 0x0049, -+ 0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095, -+ 0x790: 0x235e, 0x791: 0x236a, -+ 0x792: 0x241e, 0x793: 0x2346, 0x794: 0x23ca, 0x795: 0x2352, 0x796: 0x23d0, 0x797: 0x23e8, -+ 0x798: 0x23f4, 0x799: 0x2358, 0x79a: 0x23fa, 0x79b: 0x2364, 0x79c: 0x23ee, 0x79d: 0x2400, -+ 0x79e: 0x2406, 0x79f: 0x1dec, 0x7a0: 0x0053, 0x7a1: 0x1a87, 0x7a2: 0x1cd4, 0x7a3: 0x1a90, -+ 0x7a4: 0x006d, 0x7a5: 0x1adb, 0x7a6: 0x1d00, 0x7a7: 0x1e78, 0x7a8: 0x1a93, 0x7a9: 0x0071, -+ 0x7aa: 0x1ae7, 0x7ab: 0x1d04, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b, -+ 0x7b0: 0x0093, 0x7b1: 0x1b14, 0x7b2: 0x1d48, 0x7b3: 0x1b1d, 0x7b4: 0x00ad, 0x7b5: 0x1b92, -+ 0x7b6: 0x1d7c, 0x7b7: 0x1e8c, 0x7b8: 0x1b20, 0x7b9: 0x00b1, 0x7ba: 0x1b95, 0x7bb: 0x1d80, -+ 0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b, -+ // Block 0x1f, offset 0x7c0 -+ 0x7c1: 0x3d47, 0x7c3: 0xa000, 0x7c4: 0x3d4e, 0x7c5: 0xa000, -+ 0x7c7: 0x3d55, 0x7c8: 0xa000, 0x7c9: 0x3d5c, -+ 0x7cd: 0xa000, -+ 0x7e0: 0x30a6, 0x7e1: 0xa000, 0x7e2: 0x3d6a, -+ 0x7e4: 0xa000, 0x7e5: 0xa000, -+ 0x7ed: 0x3d63, 0x7ee: 0x30a1, 0x7ef: 0x30ab, -+ 0x7f0: 0x3d71, 0x7f1: 0x3d78, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3d7f, 0x7f5: 0x3d86, -+ 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3d8d, 0x7f9: 0x3d94, 0x7fa: 0xa000, 0x7fb: 0xa000, -+ 0x7fc: 0xa000, 0x7fd: 0xa000, -+ // Block 0x20, offset 0x800 -+ 0x800: 0x3d9b, 0x801: 0x3da2, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3db7, 0x805: 0x3dbe, -+ 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3dc5, 0x809: 0x3dcc, -+ 0x811: 0xa000, -+ 0x812: 0xa000, -+ 0x822: 0xa000, -+ 0x828: 0xa000, 0x829: 0xa000, -+ 0x82b: 0xa000, 0x82c: 0x3de1, 0x82d: 0x3de8, 0x82e: 0x3def, 0x82f: 0x3df6, -+ 0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000, -+ // Block 0x21, offset 0x840 -+ 0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029, -+ 0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x19af, -+ 0x86a: 0x19b2, 0x86b: 0x19b5, 0x86c: 0x19b8, 0x86d: 0x19bb, 0x86e: 0x19be, 0x86f: 0x19c1, -+ 0x870: 0x19c4, 0x871: 0x19c7, 0x872: 0x19ca, 0x873: 0x19d3, 0x874: 0x1b98, 0x875: 0x1b9c, -+ 0x876: 0x1ba0, 0x877: 0x1ba4, 0x878: 0x1ba8, 0x879: 0x1bac, 0x87a: 0x1bb0, 0x87b: 0x1bb4, -+ 0x87c: 0x1bb8, 0x87d: 0x1db0, 0x87e: 0x1db5, 0x87f: 0x1dba, -+ // Block 0x22, offset 0x880 -+ 0x880: 0x1dbf, 0x881: 0x1dc4, 0x882: 0x1dc9, 0x883: 0x1dce, 0x884: 0x1dd3, 0x885: 0x1dd8, -+ 0x886: 0x1ddd, 0x887: 0x1de2, 0x888: 0x19ac, 0x889: 0x19d0, 0x88a: 0x19f4, 0x88b: 0x1a18, -+ 0x88c: 0x1a3c, 0x88d: 0x1a45, 0x88e: 0x1a4b, 0x88f: 0x1a51, 0x890: 0x1a57, 0x891: 0x1c90, -+ 0x892: 0x1c94, 0x893: 0x1c98, 0x894: 0x1c9c, 0x895: 0x1ca0, 0x896: 0x1ca4, 0x897: 0x1ca8, -+ 0x898: 0x1cac, 0x899: 0x1cb0, 0x89a: 0x1cb4, 0x89b: 0x1cb8, 0x89c: 0x1c24, 0x89d: 0x1c28, -+ 0x89e: 0x1c2c, 0x89f: 0x1c30, 0x8a0: 0x1c34, 0x8a1: 0x1c38, 0x8a2: 0x1c3c, 0x8a3: 0x1c40, -+ 0x8a4: 0x1c44, 0x8a5: 0x1c48, 0x8a6: 0x1c4c, 0x8a7: 0x1c50, 0x8a8: 0x1c54, 0x8a9: 0x1c58, -+ 0x8aa: 0x1c5c, 0x8ab: 0x1c60, 0x8ac: 0x1c64, 0x8ad: 0x1c68, 0x8ae: 0x1c6c, 0x8af: 0x1c70, -+ 0x8b0: 0x1c74, 0x8b1: 0x1c78, 0x8b2: 0x1c7c, 0x8b3: 0x1c80, 0x8b4: 0x1c84, 0x8b5: 0x1c88, -+ 0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d, -+ 0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055, -+ // Block 0x23, offset 0x8c0 -+ 0x8c0: 0x07ba, 0x8c1: 0x07de, 0x8c2: 0x07ea, 0x8c3: 0x07fa, 0x8c4: 0x0802, 0x8c5: 0x080e, -+ 0x8c6: 0x0816, 0x8c7: 0x081e, 0x8c8: 0x082a, 0x8c9: 0x087e, 0x8ca: 0x0896, 0x8cb: 0x08a6, -+ 0x8cc: 0x08b6, 0x8cd: 0x08c6, 0x8ce: 0x08d6, 0x8cf: 0x08f6, 0x8d0: 0x08fa, 0x8d1: 0x08fe, -+ 0x8d2: 0x0932, 0x8d3: 0x095a, 0x8d4: 0x096a, 0x8d5: 0x0972, 0x8d6: 0x0976, 0x8d7: 0x0982, -+ 0x8d8: 0x099e, 0x8d9: 0x09a2, 0x8da: 0x09ba, 0x8db: 0x09be, 0x8dc: 0x09c6, 0x8dd: 0x09d6, -+ 0x8de: 0x0a72, 0x8df: 0x0a86, 0x8e0: 0x0ac6, 0x8e1: 0x0ada, 0x8e2: 0x0ae2, 0x8e3: 0x0ae6, -+ 0x8e4: 0x0af6, 0x8e5: 0x0b12, 0x8e6: 0x0b3e, 0x8e7: 0x0b4a, 0x8e8: 0x0b6a, 0x8e9: 0x0b76, -+ 0x8ea: 0x0b7a, 0x8eb: 0x0b7e, 0x8ec: 0x0b96, 0x8ed: 0x0b9a, 0x8ee: 0x0bc6, 0x8ef: 0x0bd2, -+ 0x8f0: 0x0bda, 0x8f1: 0x0be2, 0x8f2: 0x0bf2, 0x8f3: 0x0bfa, 0x8f4: 0x0c02, 0x8f5: 0x0c2e, -+ 0x8f6: 0x0c32, 0x8f7: 0x0c3a, 0x8f8: 0x0c3e, 0x8f9: 0x0c46, 0x8fa: 0x0c4e, 0x8fb: 0x0c5e, -+ 0x8fc: 0x0c7a, 0x8fd: 0x0cf2, 0x8fe: 0x0d06, 0x8ff: 0x0d0a, -+ // Block 0x24, offset 0x900 -+ 0x900: 0x0d8a, 0x901: 0x0d8e, 0x902: 0x0da2, 0x903: 0x0da6, 0x904: 0x0dae, 0x905: 0x0db6, -+ 0x906: 0x0dbe, 0x907: 0x0dca, 0x908: 0x0df2, 0x909: 0x0e02, 0x90a: 0x0e16, 0x90b: 0x0e86, -+ 0x90c: 0x0e92, 0x90d: 0x0ea2, 0x90e: 0x0eae, 0x90f: 0x0eba, 0x910: 0x0ec2, 0x911: 0x0ec6, -+ 0x912: 0x0eca, 0x913: 0x0ece, 0x914: 0x0ed2, 0x915: 0x0f8a, 0x916: 0x0fd2, 0x917: 0x0fde, -+ 0x918: 0x0fe2, 0x919: 0x0fe6, 0x91a: 0x0fea, 0x91b: 0x0ff2, 0x91c: 0x0ff6, 0x91d: 0x100a, -+ 0x91e: 0x1026, 0x91f: 0x102e, 0x920: 0x106e, 0x921: 0x1072, 0x922: 0x107a, 0x923: 0x107e, -+ 0x924: 0x1086, 0x925: 0x108a, 0x926: 0x10ae, 0x927: 0x10b2, 0x928: 0x10ce, 0x929: 0x10d2, -+ 0x92a: 0x10d6, 0x92b: 0x10da, 0x92c: 0x10ee, 0x92d: 0x1112, 0x92e: 0x1116, 0x92f: 0x111a, -+ 0x930: 0x113e, 0x931: 0x117e, 0x932: 0x1182, 0x933: 0x11a2, 0x934: 0x11b2, 0x935: 0x11ba, -+ 0x936: 0x11da, 0x937: 0x11fe, 0x938: 0x1242, 0x939: 0x124a, 0x93a: 0x125e, 0x93b: 0x126a, -+ 0x93c: 0x1272, 0x93d: 0x127a, 0x93e: 0x127e, 0x93f: 0x1282, -+ // Block 0x25, offset 0x940 -+ 0x940: 0x129a, 0x941: 0x129e, 0x942: 0x12ba, 0x943: 0x12c2, 0x944: 0x12ca, 0x945: 0x12ce, -+ 0x946: 0x12da, 0x947: 0x12e2, 0x948: 0x12e6, 0x949: 0x12ea, 0x94a: 0x12f2, 0x94b: 0x12f6, -+ 0x94c: 0x1396, 0x94d: 0x13aa, 0x94e: 0x13de, 0x94f: 0x13e2, 0x950: 0x13ea, 0x951: 0x1416, -+ 0x952: 0x141e, 0x953: 0x1426, 0x954: 0x142e, 0x955: 0x146a, 0x956: 0x146e, 0x957: 0x1476, -+ 0x958: 0x147a, 0x959: 0x147e, 0x95a: 0x14aa, 0x95b: 0x14ae, 0x95c: 0x14b6, 0x95d: 0x14ca, -+ 0x95e: 0x14ce, 0x95f: 0x14ea, 0x960: 0x14f2, 0x961: 0x14f6, 0x962: 0x151a, 0x963: 0x153a, -+ 0x964: 0x154e, 0x965: 0x1552, 0x966: 0x155a, 0x967: 0x1586, 0x968: 0x158a, 0x969: 0x159a, -+ 0x96a: 0x15be, 0x96b: 0x15ca, 0x96c: 0x15da, 0x96d: 0x15f2, 0x96e: 0x15fa, 0x96f: 0x15fe, -+ 0x970: 0x1602, 0x971: 0x1606, 0x972: 0x1612, 0x973: 0x1616, 0x974: 0x161e, 0x975: 0x163a, -+ 0x976: 0x163e, 0x977: 0x1642, 0x978: 0x165a, 0x979: 0x165e, 0x97a: 0x1666, 0x97b: 0x167a, -+ 0x97c: 0x167e, 0x97d: 0x1682, 0x97e: 0x168a, 0x97f: 0x168e, -+ // Block 0x26, offset 0x980 -+ 0x986: 0xa000, 0x98b: 0xa000, -+ 0x98c: 0x4049, 0x98d: 0xa000, 0x98e: 0x4051, 0x98f: 0xa000, 0x990: 0x4059, 0x991: 0xa000, -+ 0x992: 0x4061, 0x993: 0xa000, 0x994: 0x4069, 0x995: 0xa000, 0x996: 0x4071, 0x997: 0xa000, -+ 0x998: 0x4079, 0x999: 0xa000, 0x99a: 0x4081, 0x99b: 0xa000, 0x99c: 0x4089, 0x99d: 0xa000, -+ 0x99e: 0x4091, 0x99f: 0xa000, 0x9a0: 0x4099, 0x9a1: 0xa000, 0x9a2: 0x40a1, -+ 0x9a4: 0xa000, 0x9a5: 0x40a9, 0x9a6: 0xa000, 0x9a7: 0x40b1, 0x9a8: 0xa000, 0x9a9: 0x40b9, -+ 0x9af: 0xa000, -+ 0x9b0: 0x40c1, 0x9b1: 0x40c9, 0x9b2: 0xa000, 0x9b3: 0x40d1, 0x9b4: 0x40d9, 0x9b5: 0xa000, -+ 0x9b6: 0x40e1, 0x9b7: 0x40e9, 0x9b8: 0xa000, 0x9b9: 0x40f1, 0x9ba: 0x40f9, 0x9bb: 0xa000, -+ 0x9bc: 0x4101, 0x9bd: 0x4109, -+ // Block 0x27, offset 0x9c0 -+ 0x9d4: 0x4041, -+ 0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x441d, 0x9dc: 0x4423, 0x9dd: 0xa000, -+ 0x9de: 0x4111, 0x9df: 0x27e4, -+ 0x9e6: 0xa000, -+ 0x9eb: 0xa000, 0x9ec: 0x4121, 0x9ed: 0xa000, 0x9ee: 0x4129, 0x9ef: 0xa000, -+ 0x9f0: 0x4131, 0x9f1: 0xa000, 0x9f2: 0x4139, 0x9f3: 0xa000, 0x9f4: 0x4141, 0x9f5: 0xa000, -+ 0x9f6: 0x4149, 0x9f7: 0xa000, 0x9f8: 0x4151, 0x9f9: 0xa000, 0x9fa: 0x4159, 0x9fb: 0xa000, -+ 0x9fc: 0x4161, 0x9fd: 0xa000, 0x9fe: 0x4169, 0x9ff: 0xa000, -+ // Block 0x28, offset 0xa00 -+ 0xa00: 0x4171, 0xa01: 0xa000, 0xa02: 0x4179, 0xa04: 0xa000, 0xa05: 0x4181, -+ 0xa06: 0xa000, 0xa07: 0x4189, 0xa08: 0xa000, 0xa09: 0x4191, -+ 0xa0f: 0xa000, 0xa10: 0x4199, 0xa11: 0x41a1, -+ 0xa12: 0xa000, 0xa13: 0x41a9, 0xa14: 0x41b1, 0xa15: 0xa000, 0xa16: 0x41b9, 0xa17: 0x41c1, -+ 0xa18: 0xa000, 0xa19: 0x41c9, 0xa1a: 0x41d1, 0xa1b: 0xa000, 0xa1c: 0x41d9, 0xa1d: 0x41e1, -+ 0xa2f: 0xa000, -+ 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x4119, -+ 0xa37: 0x41e9, 0xa38: 0x41f1, 0xa39: 0x41f9, 0xa3a: 0x4201, -+ 0xa3d: 0xa000, 0xa3e: 0x4209, 0xa3f: 0x27f9, -+ // Block 0x29, offset 0xa40 -+ 0xa40: 0x045a, 0xa41: 0x041e, 0xa42: 0x0422, 0xa43: 0x0426, 0xa44: 0x046e, 0xa45: 0x042a, -+ 0xa46: 0x042e, 0xa47: 0x0432, 0xa48: 0x0436, 0xa49: 0x043a, 0xa4a: 0x043e, 0xa4b: 0x0442, -+ 0xa4c: 0x0446, 0xa4d: 0x044a, 0xa4e: 0x044e, 0xa4f: 0x4afe, 0xa50: 0x4b04, 0xa51: 0x4b0a, -+ 0xa52: 0x4b10, 0xa53: 0x4b16, 0xa54: 0x4b1c, 0xa55: 0x4b22, 0xa56: 0x4b28, 0xa57: 0x4b2e, -+ 0xa58: 0x4b34, 0xa59: 0x4b3a, 0xa5a: 0x4b40, 0xa5b: 0x4b46, 0xa5c: 0x4b4c, 0xa5d: 0x4b52, -+ 0xa5e: 0x4b58, 0xa5f: 0x4b5e, 0xa60: 0x4b64, 0xa61: 0x4b6a, 0xa62: 0x4b70, 0xa63: 0x4b76, -+ 0xa64: 0x04b6, 0xa65: 0x0452, 0xa66: 0x0456, 0xa67: 0x04da, 0xa68: 0x04de, 0xa69: 0x04e2, -+ 0xa6a: 0x04e6, 0xa6b: 0x04ea, 0xa6c: 0x04ee, 0xa6d: 0x04f2, 0xa6e: 0x045e, 0xa6f: 0x04f6, -+ 0xa70: 0x04fa, 0xa71: 0x0462, 0xa72: 0x0466, 0xa73: 0x046a, 0xa74: 0x0472, 0xa75: 0x0476, -+ 0xa76: 0x047a, 0xa77: 0x047e, 0xa78: 0x0482, 0xa79: 0x0486, 0xa7a: 0x048a, 0xa7b: 0x048e, -+ 0xa7c: 0x0492, 0xa7d: 0x0496, 0xa7e: 0x049a, 0xa7f: 0x049e, -+ // Block 0x2a, offset 0xa80 -+ 0xa80: 0x04a2, 0xa81: 0x04a6, 0xa82: 0x04fe, 0xa83: 0x0502, 0xa84: 0x04aa, 0xa85: 0x04ae, -+ 0xa86: 0x04b2, 0xa87: 0x04ba, 0xa88: 0x04be, 0xa89: 0x04c2, 0xa8a: 0x04c6, 0xa8b: 0x04ca, -+ 0xa8c: 0x04ce, 0xa8d: 0x04d2, 0xa8e: 0x04d6, -+ 0xa92: 0x07ba, 0xa93: 0x0816, 0xa94: 0x07c6, 0xa95: 0x0a76, 0xa96: 0x07ca, 0xa97: 0x07e2, -+ 0xa98: 0x07ce, 0xa99: 0x108e, 0xa9a: 0x0802, 0xa9b: 0x07d6, 0xa9c: 0x07be, 0xa9d: 0x0afa, -+ 0xa9e: 0x0a8a, 0xa9f: 0x082a, -+ // Block 0x2b, offset 0xac0 -+ 0xac0: 0x2184, 0xac1: 0x218a, 0xac2: 0x2190, 0xac3: 0x2196, 0xac4: 0x219c, 0xac5: 0x21a2, -+ 0xac6: 0x21a8, 0xac7: 0x21ae, 0xac8: 0x21b4, 0xac9: 0x21ba, 0xaca: 0x21c0, 0xacb: 0x21c6, -+ 0xacc: 0x21cc, 0xacd: 0x21d2, 0xace: 0x285d, 0xacf: 0x2866, 0xad0: 0x286f, 0xad1: 0x2878, -+ 0xad2: 0x2881, 0xad3: 0x288a, 0xad4: 0x2893, 0xad5: 0x289c, 0xad6: 0x28a5, 0xad7: 0x28b7, -+ 0xad8: 0x28c0, 0xad9: 0x28c9, 0xada: 0x28d2, 0xadb: 0x28db, 0xadc: 0x28ae, 0xadd: 0x2ce3, -+ 0xade: 0x2c24, 0xae0: 0x21d8, 0xae1: 0x21f0, 0xae2: 0x21e4, 0xae3: 0x2238, -+ 0xae4: 0x21f6, 0xae5: 0x2214, 0xae6: 0x21de, 0xae7: 0x220e, 0xae8: 0x21ea, 0xae9: 0x2220, -+ 0xaea: 0x2250, 0xaeb: 0x226e, 0xaec: 0x2268, 0xaed: 0x225c, 0xaee: 0x22aa, 0xaef: 0x223e, -+ 0xaf0: 0x224a, 0xaf1: 0x2262, 0xaf2: 0x2256, 0xaf3: 0x2280, 0xaf4: 0x222c, 0xaf5: 0x2274, -+ 0xaf6: 0x229e, 0xaf7: 0x2286, 0xaf8: 0x221a, 0xaf9: 0x21fc, 0xafa: 0x2232, 0xafb: 0x2244, -+ 0xafc: 0x227a, 0xafd: 0x2202, 0xafe: 0x22a4, 0xaff: 0x2226, -+ // Block 0x2c, offset 0xb00 -+ 0xb00: 0x228c, 0xb01: 0x2208, 0xb02: 0x2292, 0xb03: 0x2298, 0xb04: 0x0a2a, 0xb05: 0x0bfe, -+ 0xb06: 0x0da2, 0xb07: 0x11c2, -+ 0xb10: 0x1cf4, 0xb11: 0x19d6, -+ 0xb12: 0x19d9, 0xb13: 0x19dc, 0xb14: 0x19df, 0xb15: 0x19e2, 0xb16: 0x19e5, 0xb17: 0x19e8, -+ 0xb18: 0x19eb, 0xb19: 0x19ee, 0xb1a: 0x19f7, 0xb1b: 0x19fa, 0xb1c: 0x19fd, 0xb1d: 0x1a00, -+ 0xb1e: 0x1a03, 0xb1f: 0x1a06, 0xb20: 0x0406, 0xb21: 0x040e, 0xb22: 0x0412, 0xb23: 0x041a, -+ 0xb24: 0x041e, 0xb25: 0x0422, 0xb26: 0x042a, 0xb27: 0x0432, 0xb28: 0x0436, 0xb29: 0x043e, -+ 0xb2a: 0x0442, 0xb2b: 0x0446, 0xb2c: 0x044a, 0xb2d: 0x044e, 0xb2e: 0x2f59, 0xb2f: 0x2f61, -+ 0xb30: 0x2f69, 0xb31: 0x2f71, 0xb32: 0x2f79, 0xb33: 0x2f81, 0xb34: 0x2f89, 0xb35: 0x2f91, -+ 0xb36: 0x2fa1, 0xb37: 0x2fa9, 0xb38: 0x2fb1, 0xb39: 0x2fb9, 0xb3a: 0x2fc1, 0xb3b: 0x2fc9, -+ 0xb3c: 0x3014, 0xb3d: 0x2fdc, 0xb3e: 0x2f99, -+ // Block 0x2d, offset 0xb40 -+ 0xb40: 0x07ba, 0xb41: 0x0816, 0xb42: 0x07c6, 0xb43: 0x0a76, 0xb44: 0x081a, 0xb45: 0x08aa, -+ 0xb46: 0x07c2, 0xb47: 0x08a6, 0xb48: 0x0806, 0xb49: 0x0982, 0xb4a: 0x0e02, 0xb4b: 0x0f8a, -+ 0xb4c: 0x0ed2, 0xb4d: 0x0e16, 0xb4e: 0x155a, 0xb4f: 0x0a86, 0xb50: 0x0dca, 0xb51: 0x0e46, -+ 0xb52: 0x0e06, 0xb53: 0x1146, 0xb54: 0x09f6, 0xb55: 0x0ffe, 0xb56: 0x1482, 0xb57: 0x115a, -+ 0xb58: 0x093e, 0xb59: 0x118a, 0xb5a: 0x1096, 0xb5b: 0x0b12, 0xb5c: 0x150a, 0xb5d: 0x087a, -+ 0xb5e: 0x09a6, 0xb5f: 0x0ef2, 0xb60: 0x1622, 0xb61: 0x083e, 0xb62: 0x08ce, 0xb63: 0x0e96, -+ 0xb64: 0x07ca, 0xb65: 0x07e2, 0xb66: 0x07ce, 0xb67: 0x0bd6, 0xb68: 0x09ea, 0xb69: 0x097a, -+ 0xb6a: 0x0b52, 0xb6b: 0x0b46, 0xb6c: 0x10e6, 0xb6d: 0x083a, 0xb6e: 0x1496, 0xb6f: 0x0996, -+ 0xb70: 0x0aee, 0xb71: 0x1a09, 0xb72: 0x1a0c, 0xb73: 0x1a0f, 0xb74: 0x1a12, 0xb75: 0x1a1b, -+ 0xb76: 0x1a1e, 0xb77: 0x1a21, 0xb78: 0x1a24, 0xb79: 0x1a27, 0xb7a: 0x1a2a, 0xb7b: 0x1a2d, -+ 0xb7c: 0x1a30, 0xb7d: 0x1a33, 0xb7e: 0x1a36, 0xb7f: 0x1a3f, -+ // Block 0x2e, offset 0xb80 -+ 0xb80: 0x1df6, 0xb81: 0x1e05, 0xb82: 0x1e14, 0xb83: 0x1e23, 0xb84: 0x1e32, 0xb85: 0x1e41, -+ 0xb86: 0x1e50, 0xb87: 0x1e5f, 0xb88: 0x1e6e, 0xb89: 0x22bc, 0xb8a: 0x22ce, 0xb8b: 0x22e0, -+ 0xb8c: 0x1a81, 0xb8d: 0x1d34, 0xb8e: 0x1b02, 0xb8f: 0x1cd8, 0xb90: 0x05c6, 0xb91: 0x05ce, -+ 0xb92: 0x05d6, 0xb93: 0x05de, 0xb94: 0x05e6, 0xb95: 0x05ea, 0xb96: 0x05ee, 0xb97: 0x05f2, -+ 0xb98: 0x05f6, 0xb99: 0x05fa, 0xb9a: 0x05fe, 0xb9b: 0x0602, 0xb9c: 0x0606, 0xb9d: 0x060a, -+ 0xb9e: 0x060e, 0xb9f: 0x0612, 0xba0: 0x0616, 0xba1: 0x061e, 0xba2: 0x0622, 0xba3: 0x0626, -+ 0xba4: 0x062a, 0xba5: 0x062e, 0xba6: 0x0632, 0xba7: 0x0636, 0xba8: 0x063a, 0xba9: 0x063e, -+ 0xbaa: 0x0642, 0xbab: 0x0646, 0xbac: 0x064a, 0xbad: 0x064e, 0xbae: 0x0652, 0xbaf: 0x0656, -+ 0xbb0: 0x065a, 0xbb1: 0x065e, 0xbb2: 0x0662, 0xbb3: 0x066a, 0xbb4: 0x0672, 0xbb5: 0x067a, -+ 0xbb6: 0x067e, 0xbb7: 0x0682, 0xbb8: 0x0686, 0xbb9: 0x068a, 0xbba: 0x068e, 0xbbb: 0x0692, -+ 0xbbc: 0x0696, 0xbbd: 0x069a, 0xbbe: 0x069e, 0xbbf: 0x282a, -+ // Block 0x2f, offset 0xbc0 -+ 0xbc0: 0x2c43, 0xbc1: 0x2adf, 0xbc2: 0x2c53, 0xbc3: 0x29b7, 0xbc4: 0x3025, 0xbc5: 0x29c1, -+ 0xbc6: 0x29cb, 0xbc7: 0x3069, 0xbc8: 0x2aec, 0xbc9: 0x29d5, 0xbca: 0x29df, 0xbcb: 0x29e9, -+ 0xbcc: 0x2b13, 0xbcd: 0x2b20, 0xbce: 0x2af9, 0xbcf: 0x2b06, 0xbd0: 0x2fea, 0xbd1: 0x2b2d, -+ 0xbd2: 0x2b3a, 0xbd3: 0x2cf5, 0xbd4: 0x27eb, 0xbd5: 0x2d08, 0xbd6: 0x2d1b, 0xbd7: 0x2c63, -+ 0xbd8: 0x2b47, 0xbd9: 0x2d2e, 0xbda: 0x2d41, 0xbdb: 0x2b54, 0xbdc: 0x29f3, 0xbdd: 0x29fd, -+ 0xbde: 0x2ff8, 0xbdf: 0x2b61, 0xbe0: 0x2c73, 0xbe1: 0x3036, 0xbe2: 0x2a07, 0xbe3: 0x2a11, -+ 0xbe4: 0x2b6e, 0xbe5: 0x2a1b, 0xbe6: 0x2a25, 0xbe7: 0x2800, 0xbe8: 0x2807, 0xbe9: 0x2a2f, -+ 0xbea: 0x2a39, 0xbeb: 0x2d54, 0xbec: 0x2b7b, 0xbed: 0x2c83, 0xbee: 0x2d67, 0xbef: 0x2b88, -+ 0xbf0: 0x2a4d, 0xbf1: 0x2a43, 0xbf2: 0x307d, 0xbf3: 0x2b95, 0xbf4: 0x2d7a, 0xbf5: 0x2a57, -+ 0xbf6: 0x2c93, 0xbf7: 0x2a61, 0xbf8: 0x2baf, 0xbf9: 0x2a6b, 0xbfa: 0x2bbc, 0xbfb: 0x3047, -+ 0xbfc: 0x2ba2, 0xbfd: 0x2ca3, 0xbfe: 0x2bc9, 0xbff: 0x280e, -+ // Block 0x30, offset 0xc00 -+ 0xc00: 0x3058, 0xc01: 0x2a75, 0xc02: 0x2a7f, 0xc03: 0x2bd6, 0xc04: 0x2a89, 0xc05: 0x2a93, -+ 0xc06: 0x2a9d, 0xc07: 0x2cb3, 0xc08: 0x2be3, 0xc09: 0x2815, 0xc0a: 0x2d8d, 0xc0b: 0x2fd1, -+ 0xc0c: 0x2cc3, 0xc0d: 0x2bf0, 0xc0e: 0x3006, 0xc0f: 0x2aa7, 0xc10: 0x2ab1, 0xc11: 0x2bfd, -+ 0xc12: 0x281c, 0xc13: 0x2c0a, 0xc14: 0x2cd3, 0xc15: 0x2823, 0xc16: 0x2da0, 0xc17: 0x2abb, -+ 0xc18: 0x1de7, 0xc19: 0x1dfb, 0xc1a: 0x1e0a, 0xc1b: 0x1e19, 0xc1c: 0x1e28, 0xc1d: 0x1e37, -+ 0xc1e: 0x1e46, 0xc1f: 0x1e55, 0xc20: 0x1e64, 0xc21: 0x1e73, 0xc22: 0x22c2, 0xc23: 0x22d4, -+ 0xc24: 0x22e6, 0xc25: 0x22f2, 0xc26: 0x22fe, 0xc27: 0x230a, 0xc28: 0x2316, 0xc29: 0x2322, -+ 0xc2a: 0x232e, 0xc2b: 0x233a, 0xc2c: 0x2376, 0xc2d: 0x2382, 0xc2e: 0x238e, 0xc2f: 0x239a, -+ 0xc30: 0x23a6, 0xc31: 0x1d44, 0xc32: 0x1af6, 0xc33: 0x1a63, 0xc34: 0x1d14, 0xc35: 0x1b77, -+ 0xc36: 0x1b86, 0xc37: 0x1afc, 0xc38: 0x1d2c, 0xc39: 0x1d30, 0xc3a: 0x1a8d, 0xc3b: 0x2838, -+ 0xc3c: 0x2846, 0xc3d: 0x2831, 0xc3e: 0x283f, 0xc3f: 0x2c17, -+ // Block 0x31, offset 0xc40 -+ 0xc40: 0x1b7a, 0xc41: 0x1b62, 0xc42: 0x1d90, 0xc43: 0x1b4a, 0xc44: 0x1b23, 0xc45: 0x1a96, -+ 0xc46: 0x1aa5, 0xc47: 0x1a75, 0xc48: 0x1d20, 0xc49: 0x1e82, 0xc4a: 0x1b7d, 0xc4b: 0x1b65, -+ 0xc4c: 0x1d94, 0xc4d: 0x1da0, 0xc4e: 0x1b56, 0xc4f: 0x1b2c, 0xc50: 0x1a84, 0xc51: 0x1d4c, -+ 0xc52: 0x1ce0, 0xc53: 0x1ccc, 0xc54: 0x1cfc, 0xc55: 0x1da4, 0xc56: 0x1b59, 0xc57: 0x1af9, -+ 0xc58: 0x1b2f, 0xc59: 0x1b0e, 0xc5a: 0x1b71, 0xc5b: 0x1da8, 0xc5c: 0x1b5c, 0xc5d: 0x1af0, -+ 0xc5e: 0x1b32, 0xc5f: 0x1d6c, 0xc60: 0x1d24, 0xc61: 0x1b44, 0xc62: 0x1d54, 0xc63: 0x1d70, -+ 0xc64: 0x1d28, 0xc65: 0x1b47, 0xc66: 0x1d58, 0xc67: 0x2418, 0xc68: 0x242c, 0xc69: 0x1ac6, -+ 0xc6a: 0x1d50, 0xc6b: 0x1ce4, 0xc6c: 0x1cd0, 0xc6d: 0x1d78, 0xc6e: 0x284d, 0xc6f: 0x28e4, -+ 0xc70: 0x1b89, 0xc71: 0x1b74, 0xc72: 0x1dac, 0xc73: 0x1b5f, 0xc74: 0x1b80, 0xc75: 0x1b68, -+ 0xc76: 0x1d98, 0xc77: 0x1b4d, 0xc78: 0x1b26, 0xc79: 0x1ab1, 0xc7a: 0x1b83, 0xc7b: 0x1b6b, -+ 0xc7c: 0x1d9c, 0xc7d: 0x1b50, 0xc7e: 0x1b29, 0xc7f: 0x1ab4, -+ // Block 0x32, offset 0xc80 -+ 0xc80: 0x1d5c, 0xc81: 0x1ce8, 0xc82: 0x1e7d, 0xc83: 0x1a66, 0xc84: 0x1aea, 0xc85: 0x1aed, -+ 0xc86: 0x2425, 0xc87: 0x1cc4, 0xc88: 0x1af3, 0xc89: 0x1a78, 0xc8a: 0x1b11, 0xc8b: 0x1a7b, -+ 0xc8c: 0x1b1a, 0xc8d: 0x1a99, 0xc8e: 0x1a9c, 0xc8f: 0x1b35, 0xc90: 0x1b3b, 0xc91: 0x1b3e, -+ 0xc92: 0x1d60, 0xc93: 0x1b41, 0xc94: 0x1b53, 0xc95: 0x1d68, 0xc96: 0x1d74, 0xc97: 0x1ac0, -+ 0xc98: 0x1e87, 0xc99: 0x1cec, 0xc9a: 0x1ac3, 0xc9b: 0x1b8c, 0xc9c: 0x1ad5, 0xc9d: 0x1ae4, -+ 0xc9e: 0x2412, 0xc9f: 0x240c, 0xca0: 0x1df1, 0xca1: 0x1e00, 0xca2: 0x1e0f, 0xca3: 0x1e1e, -+ 0xca4: 0x1e2d, 0xca5: 0x1e3c, 0xca6: 0x1e4b, 0xca7: 0x1e5a, 0xca8: 0x1e69, 0xca9: 0x22b6, -+ 0xcaa: 0x22c8, 0xcab: 0x22da, 0xcac: 0x22ec, 0xcad: 0x22f8, 0xcae: 0x2304, 0xcaf: 0x2310, -+ 0xcb0: 0x231c, 0xcb1: 0x2328, 0xcb2: 0x2334, 0xcb3: 0x2370, 0xcb4: 0x237c, 0xcb5: 0x2388, -+ 0xcb6: 0x2394, 0xcb7: 0x23a0, 0xcb8: 0x23ac, 0xcb9: 0x23b2, 0xcba: 0x23b8, 0xcbb: 0x23be, -+ 0xcbc: 0x23c4, 0xcbd: 0x23d6, 0xcbe: 0x23dc, 0xcbf: 0x1d40, -+ // Block 0x33, offset 0xcc0 -+ 0xcc0: 0x1472, 0xcc1: 0x0df6, 0xcc2: 0x14ce, 0xcc3: 0x149a, 0xcc4: 0x0f52, 0xcc5: 0x07e6, -+ 0xcc6: 0x09da, 0xcc7: 0x1726, 0xcc8: 0x1726, 0xcc9: 0x0b06, 0xcca: 0x155a, 0xccb: 0x0a3e, -+ 0xccc: 0x0b02, 0xccd: 0x0cea, 0xcce: 0x10ca, 0xccf: 0x125a, 0xcd0: 0x1392, 0xcd1: 0x13ce, -+ 0xcd2: 0x1402, 0xcd3: 0x1516, 0xcd4: 0x0e6e, 0xcd5: 0x0efa, 0xcd6: 0x0fa6, 0xcd7: 0x103e, -+ 0xcd8: 0x135a, 0xcd9: 0x1542, 0xcda: 0x166e, 0xcdb: 0x080a, 0xcdc: 0x09ae, 0xcdd: 0x0e82, -+ 0xcde: 0x0fca, 0xcdf: 0x138e, 0xce0: 0x16be, 0xce1: 0x0bae, 0xce2: 0x0f72, 0xce3: 0x137e, -+ 0xce4: 0x1412, 0xce5: 0x0d1e, 0xce6: 0x12b6, 0xce7: 0x13da, 0xce8: 0x0c1a, 0xce9: 0x0e0a, -+ 0xcea: 0x0f12, 0xceb: 0x1016, 0xcec: 0x1522, 0xced: 0x084a, 0xcee: 0x08e2, 0xcef: 0x094e, -+ 0xcf0: 0x0d86, 0xcf1: 0x0e7a, 0xcf2: 0x0fc6, 0xcf3: 0x10ea, 0xcf4: 0x1272, 0xcf5: 0x1386, -+ 0xcf6: 0x139e, 0xcf7: 0x14c2, 0xcf8: 0x15ea, 0xcf9: 0x169e, 0xcfa: 0x16ba, 0xcfb: 0x1126, -+ 0xcfc: 0x1166, 0xcfd: 0x121e, 0xcfe: 0x133e, 0xcff: 0x1576, -+ // Block 0x34, offset 0xd00 -+ 0xd00: 0x16c6, 0xd01: 0x1446, 0xd02: 0x0ac2, 0xd03: 0x0c36, 0xd04: 0x11d6, 0xd05: 0x1296, -+ 0xd06: 0x0ffa, 0xd07: 0x112e, 0xd08: 0x1492, 0xd09: 0x15e2, 0xd0a: 0x0abe, 0xd0b: 0x0b8a, -+ 0xd0c: 0x0e72, 0xd0d: 0x0f26, 0xd0e: 0x0f5a, 0xd0f: 0x120e, 0xd10: 0x1236, 0xd11: 0x15a2, -+ 0xd12: 0x094a, 0xd13: 0x12a2, 0xd14: 0x08ee, 0xd15: 0x08ea, 0xd16: 0x1192, 0xd17: 0x1222, -+ 0xd18: 0x1356, 0xd19: 0x15aa, 0xd1a: 0x1462, 0xd1b: 0x0d22, 0xd1c: 0x0e6e, 0xd1d: 0x1452, -+ 0xd1e: 0x07f2, 0xd1f: 0x0b5e, 0xd20: 0x0c8e, 0xd21: 0x102a, 0xd22: 0x10aa, 0xd23: 0x096e, -+ 0xd24: 0x1136, 0xd25: 0x085a, 0xd26: 0x0c72, 0xd27: 0x07d2, 0xd28: 0x0ee6, 0xd29: 0x0d9e, -+ 0xd2a: 0x120a, 0xd2b: 0x09c2, 0xd2c: 0x0aae, 0xd2d: 0x10f6, 0xd2e: 0x135e, 0xd2f: 0x1436, -+ 0xd30: 0x0eb2, 0xd31: 0x14f2, 0xd32: 0x0ede, 0xd33: 0x0d32, 0xd34: 0x1316, 0xd35: 0x0d52, -+ 0xd36: 0x10a6, 0xd37: 0x0826, 0xd38: 0x08a2, 0xd39: 0x08e6, 0xd3a: 0x0e4e, 0xd3b: 0x11f6, -+ 0xd3c: 0x12ee, 0xd3d: 0x1442, 0xd3e: 0x1556, 0xd3f: 0x0956, -+ // Block 0x35, offset 0xd40 -+ 0xd40: 0x0a0a, 0xd41: 0x0b12, 0xd42: 0x0c2a, 0xd43: 0x0dba, 0xd44: 0x0f76, 0xd45: 0x113a, -+ 0xd46: 0x1592, 0xd47: 0x1676, 0xd48: 0x16ca, 0xd49: 0x16e2, 0xd4a: 0x0932, 0xd4b: 0x0dee, -+ 0xd4c: 0x0e9e, 0xd4d: 0x14e6, 0xd4e: 0x0bf6, 0xd4f: 0x0cd2, 0xd50: 0x0cee, 0xd51: 0x0d7e, -+ 0xd52: 0x0f66, 0xd53: 0x0fb2, 0xd54: 0x1062, 0xd55: 0x1186, 0xd56: 0x122a, 0xd57: 0x128e, -+ 0xd58: 0x14d6, 0xd59: 0x1366, 0xd5a: 0x14fe, 0xd5b: 0x157a, 0xd5c: 0x090a, 0xd5d: 0x0936, -+ 0xd5e: 0x0a1e, 0xd5f: 0x0fa2, 0xd60: 0x13ee, 0xd61: 0x1436, 0xd62: 0x0c16, 0xd63: 0x0c86, -+ 0xd64: 0x0d4a, 0xd65: 0x0eaa, 0xd66: 0x11d2, 0xd67: 0x101e, 0xd68: 0x0836, 0xd69: 0x0a7a, -+ 0xd6a: 0x0b5e, 0xd6b: 0x0bc2, 0xd6c: 0x0c92, 0xd6d: 0x103a, 0xd6e: 0x1056, 0xd6f: 0x1266, -+ 0xd70: 0x1286, 0xd71: 0x155e, 0xd72: 0x15de, 0xd73: 0x15ee, 0xd74: 0x162a, 0xd75: 0x084e, -+ 0xd76: 0x117a, 0xd77: 0x154a, 0xd78: 0x15c6, 0xd79: 0x0caa, 0xd7a: 0x0812, 0xd7b: 0x0872, -+ 0xd7c: 0x0b62, 0xd7d: 0x0b82, 0xd7e: 0x0daa, 0xd7f: 0x0e6e, -+ // Block 0x36, offset 0xd80 -+ 0xd80: 0x0fbe, 0xd81: 0x10c6, 0xd82: 0x1372, 0xd83: 0x1512, 0xd84: 0x171e, 0xd85: 0x0dde, -+ 0xd86: 0x159e, 0xd87: 0x092e, 0xd88: 0x0e2a, 0xd89: 0x0e36, 0xd8a: 0x0f0a, 0xd8b: 0x0f42, -+ 0xd8c: 0x1046, 0xd8d: 0x10a2, 0xd8e: 0x1122, 0xd8f: 0x1206, 0xd90: 0x1636, 0xd91: 0x08aa, -+ 0xd92: 0x0cfe, 0xd93: 0x15ae, 0xd94: 0x0862, 0xd95: 0x0ba6, 0xd96: 0x0f2a, 0xd97: 0x14da, -+ 0xd98: 0x0c62, 0xd99: 0x0cb2, 0xd9a: 0x0e3e, 0xd9b: 0x102a, 0xd9c: 0x15b6, 0xd9d: 0x0912, -+ 0xd9e: 0x09fa, 0xd9f: 0x0b92, 0xda0: 0x0dce, 0xda1: 0x0e1a, 0xda2: 0x0e5a, 0xda3: 0x0eee, -+ 0xda4: 0x1042, 0xda5: 0x10b6, 0xda6: 0x1252, 0xda7: 0x13f2, 0xda8: 0x13fe, 0xda9: 0x1552, -+ 0xdaa: 0x15d2, 0xdab: 0x097e, 0xdac: 0x0f46, 0xdad: 0x09fe, 0xdae: 0x0fc2, 0xdaf: 0x1066, -+ 0xdb0: 0x1382, 0xdb1: 0x15ba, 0xdb2: 0x16a6, 0xdb3: 0x16ce, 0xdb4: 0x0e32, 0xdb5: 0x0f22, -+ 0xdb6: 0x12be, 0xdb7: 0x11b2, 0xdb8: 0x11be, 0xdb9: 0x11e2, 0xdba: 0x1012, 0xdbb: 0x0f9a, -+ 0xdbc: 0x145e, 0xdbd: 0x082e, 0xdbe: 0x1326, 0xdbf: 0x0916, -+ // Block 0x37, offset 0xdc0 -+ 0xdc0: 0x0906, 0xdc1: 0x0c06, 0xdc2: 0x0d26, 0xdc3: 0x11ee, 0xdc4: 0x0b4e, 0xdc5: 0x0efe, -+ 0xdc6: 0x0dea, 0xdc7: 0x14e2, 0xdc8: 0x13e2, 0xdc9: 0x15a6, 0xdca: 0x141e, 0xdcb: 0x0c22, -+ 0xdcc: 0x0882, 0xdcd: 0x0a56, 0xdd0: 0x0aaa, -+ 0xdd2: 0x0dda, 0xdd5: 0x08f2, 0xdd6: 0x101a, 0xdd7: 0x10de, -+ 0xdd8: 0x1142, 0xdd9: 0x115e, 0xdda: 0x1162, 0xddb: 0x1176, 0xddc: 0x15f6, 0xddd: 0x11e6, -+ 0xdde: 0x126a, 0xde0: 0x138a, 0xde2: 0x144e, -+ 0xde5: 0x1502, 0xde6: 0x152e, -+ 0xdea: 0x164a, 0xdeb: 0x164e, 0xdec: 0x1652, 0xded: 0x16b6, 0xdee: 0x1526, 0xdef: 0x15c2, -+ 0xdf0: 0x0852, 0xdf1: 0x0876, 0xdf2: 0x088a, 0xdf3: 0x0946, 0xdf4: 0x0952, 0xdf5: 0x0992, -+ 0xdf6: 0x0a46, 0xdf7: 0x0a62, 0xdf8: 0x0a6a, 0xdf9: 0x0aa6, 0xdfa: 0x0ab2, 0xdfb: 0x0b8e, -+ 0xdfc: 0x0b96, 0xdfd: 0x0c9e, 0xdfe: 0x0cc6, 0xdff: 0x0cce, -+ // Block 0x38, offset 0xe00 -+ 0xe00: 0x0ce6, 0xe01: 0x0d92, 0xe02: 0x0dc2, 0xe03: 0x0de2, 0xe04: 0x0e52, 0xe05: 0x0f16, -+ 0xe06: 0x0f32, 0xe07: 0x0f62, 0xe08: 0x0fb6, 0xe09: 0x0fd6, 0xe0a: 0x104a, 0xe0b: 0x112a, -+ 0xe0c: 0x1146, 0xe0d: 0x114e, 0xe0e: 0x114a, 0xe0f: 0x1152, 0xe10: 0x1156, 0xe11: 0x115a, -+ 0xe12: 0x116e, 0xe13: 0x1172, 0xe14: 0x1196, 0xe15: 0x11aa, 0xe16: 0x11c6, 0xe17: 0x122a, -+ 0xe18: 0x1232, 0xe19: 0x123a, 0xe1a: 0x124e, 0xe1b: 0x1276, 0xe1c: 0x12c6, 0xe1d: 0x12fa, -+ 0xe1e: 0x12fa, 0xe1f: 0x1362, 0xe20: 0x140a, 0xe21: 0x1422, 0xe22: 0x1456, 0xe23: 0x145a, -+ 0xe24: 0x149e, 0xe25: 0x14a2, 0xe26: 0x14fa, 0xe27: 0x1502, 0xe28: 0x15d6, 0xe29: 0x161a, -+ 0xe2a: 0x1632, 0xe2b: 0x0c96, 0xe2c: 0x184b, 0xe2d: 0x12de, -+ 0xe30: 0x07da, 0xe31: 0x08de, 0xe32: 0x089e, 0xe33: 0x0846, 0xe34: 0x0886, 0xe35: 0x08b2, -+ 0xe36: 0x0942, 0xe37: 0x095e, 0xe38: 0x0a46, 0xe39: 0x0a32, 0xe3a: 0x0a42, 0xe3b: 0x0a5e, -+ 0xe3c: 0x0aaa, 0xe3d: 0x0aba, 0xe3e: 0x0afe, 0xe3f: 0x0b0a, -+ // Block 0x39, offset 0xe40 -+ 0xe40: 0x0b26, 0xe41: 0x0b36, 0xe42: 0x0c1e, 0xe43: 0x0c26, 0xe44: 0x0c56, 0xe45: 0x0c76, -+ 0xe46: 0x0ca6, 0xe47: 0x0cbe, 0xe48: 0x0cae, 0xe49: 0x0cce, 0xe4a: 0x0cc2, 0xe4b: 0x0ce6, -+ 0xe4c: 0x0d02, 0xe4d: 0x0d5a, 0xe4e: 0x0d66, 0xe4f: 0x0d6e, 0xe50: 0x0d96, 0xe51: 0x0dda, -+ 0xe52: 0x0e0a, 0xe53: 0x0e0e, 0xe54: 0x0e22, 0xe55: 0x0ea2, 0xe56: 0x0eb2, 0xe57: 0x0f0a, -+ 0xe58: 0x0f56, 0xe59: 0x0f4e, 0xe5a: 0x0f62, 0xe5b: 0x0f7e, 0xe5c: 0x0fb6, 0xe5d: 0x110e, -+ 0xe5e: 0x0fda, 0xe5f: 0x100e, 0xe60: 0x101a, 0xe61: 0x105a, 0xe62: 0x1076, 0xe63: 0x109a, -+ 0xe64: 0x10be, 0xe65: 0x10c2, 0xe66: 0x10de, 0xe67: 0x10e2, 0xe68: 0x10f2, 0xe69: 0x1106, -+ 0xe6a: 0x1102, 0xe6b: 0x1132, 0xe6c: 0x11ae, 0xe6d: 0x11c6, 0xe6e: 0x11de, 0xe6f: 0x1216, -+ 0xe70: 0x122a, 0xe71: 0x1246, 0xe72: 0x1276, 0xe73: 0x132a, 0xe74: 0x1352, 0xe75: 0x13c6, -+ 0xe76: 0x140e, 0xe77: 0x141a, 0xe78: 0x1422, 0xe79: 0x143a, 0xe7a: 0x144e, 0xe7b: 0x143e, -+ 0xe7c: 0x1456, 0xe7d: 0x1452, 0xe7e: 0x144a, 0xe7f: 0x145a, -+ // Block 0x3a, offset 0xe80 -+ 0xe80: 0x1466, 0xe81: 0x14a2, 0xe82: 0x14de, 0xe83: 0x150e, 0xe84: 0x1546, 0xe85: 0x1566, -+ 0xe86: 0x15b2, 0xe87: 0x15d6, 0xe88: 0x15f6, 0xe89: 0x160a, 0xe8a: 0x161a, 0xe8b: 0x1626, -+ 0xe8c: 0x1632, 0xe8d: 0x1686, 0xe8e: 0x1726, 0xe8f: 0x17e2, 0xe90: 0x17dd, 0xe91: 0x180f, -+ 0xe92: 0x0702, 0xe93: 0x072a, 0xe94: 0x072e, 0xe95: 0x1891, 0xe96: 0x18be, 0xe97: 0x1936, -+ 0xe98: 0x1712, 0xe99: 0x1722, -+ // Block 0x3b, offset 0xec0 -+ 0xec0: 0x1b05, 0xec1: 0x1b08, 0xec2: 0x1b0b, 0xec3: 0x1d38, 0xec4: 0x1d3c, 0xec5: 0x1b8f, -+ 0xec6: 0x1b8f, -+ 0xed3: 0x1ea5, 0xed4: 0x1e96, 0xed5: 0x1e9b, 0xed6: 0x1eaa, 0xed7: 0x1ea0, -+ 0xedd: 0x44d1, -+ 0xede: 0x8116, 0xedf: 0x4543, 0xee0: 0x0320, 0xee1: 0x0308, 0xee2: 0x0311, 0xee3: 0x0314, -+ 0xee4: 0x0317, 0xee5: 0x031a, 0xee6: 0x031d, 0xee7: 0x0323, 0xee8: 0x0326, 0xee9: 0x0017, -+ 0xeea: 0x4531, 0xeeb: 0x4537, 0xeec: 0x4635, 0xeed: 0x463d, 0xeee: 0x4489, 0xeef: 0x448f, -+ 0xef0: 0x4495, 0xef1: 0x449b, 0xef2: 0x44a7, 0xef3: 0x44ad, 0xef4: 0x44b3, 0xef5: 0x44bf, -+ 0xef6: 0x44c5, 0xef8: 0x44cb, 0xef9: 0x44d7, 0xefa: 0x44dd, 0xefb: 0x44e3, -+ 0xefc: 0x44ef, 0xefe: 0x44f5, -+ // Block 0x3c, offset 0xf00 -+ 0xf00: 0x44fb, 0xf01: 0x4501, 0xf03: 0x4507, 0xf04: 0x450d, -+ 0xf06: 0x4519, 0xf07: 0x451f, 0xf08: 0x4525, 0xf09: 0x452b, 0xf0a: 0x453d, 0xf0b: 0x44b9, -+ 0xf0c: 0x44a1, 0xf0d: 0x44e9, 0xf0e: 0x4513, 0xf0f: 0x1eaf, 0xf10: 0x038c, 0xf11: 0x038c, -+ 0xf12: 0x0395, 0xf13: 0x0395, 0xf14: 0x0395, 0xf15: 0x0395, 0xf16: 0x0398, 0xf17: 0x0398, -+ 0xf18: 0x0398, 0xf19: 0x0398, 0xf1a: 0x039e, 0xf1b: 0x039e, 0xf1c: 0x039e, 0xf1d: 0x039e, -+ 0xf1e: 0x0392, 0xf1f: 0x0392, 0xf20: 0x0392, 0xf21: 0x0392, 0xf22: 0x039b, 0xf23: 0x039b, -+ 0xf24: 0x039b, 0xf25: 0x039b, 0xf26: 0x038f, 0xf27: 0x038f, 0xf28: 0x038f, 0xf29: 0x038f, -+ 0xf2a: 0x03c2, 0xf2b: 0x03c2, 0xf2c: 0x03c2, 0xf2d: 0x03c2, 0xf2e: 0x03c5, 0xf2f: 0x03c5, -+ 0xf30: 0x03c5, 0xf31: 0x03c5, 0xf32: 0x03a4, 0xf33: 0x03a4, 0xf34: 0x03a4, 0xf35: 0x03a4, -+ 0xf36: 0x03a1, 0xf37: 0x03a1, 0xf38: 0x03a1, 0xf39: 0x03a1, 0xf3a: 0x03a7, 0xf3b: 0x03a7, -+ 0xf3c: 0x03a7, 0xf3d: 0x03a7, 0xf3e: 0x03aa, 0xf3f: 0x03aa, -+ // Block 0x3d, offset 0xf40 -+ 0xf40: 0x03aa, 0xf41: 0x03aa, 0xf42: 0x03b3, 0xf43: 0x03b3, 0xf44: 0x03b0, 0xf45: 0x03b0, -+ 0xf46: 0x03b6, 0xf47: 0x03b6, 0xf48: 0x03ad, 0xf49: 0x03ad, 0xf4a: 0x03bc, 0xf4b: 0x03bc, -+ 0xf4c: 0x03b9, 0xf4d: 0x03b9, 0xf4e: 0x03c8, 0xf4f: 0x03c8, 0xf50: 0x03c8, 0xf51: 0x03c8, -+ 0xf52: 0x03ce, 0xf53: 0x03ce, 0xf54: 0x03ce, 0xf55: 0x03ce, 0xf56: 0x03d4, 0xf57: 0x03d4, -+ 0xf58: 0x03d4, 0xf59: 0x03d4, 0xf5a: 0x03d1, 0xf5b: 0x03d1, 0xf5c: 0x03d1, 0xf5d: 0x03d1, -+ 0xf5e: 0x03d7, 0xf5f: 0x03d7, 0xf60: 0x03da, 0xf61: 0x03da, 0xf62: 0x03da, 0xf63: 0x03da, -+ 0xf64: 0x45af, 0xf65: 0x45af, 0xf66: 0x03e0, 0xf67: 0x03e0, 0xf68: 0x03e0, 0xf69: 0x03e0, -+ 0xf6a: 0x03dd, 0xf6b: 0x03dd, 0xf6c: 0x03dd, 0xf6d: 0x03dd, 0xf6e: 0x03fb, 0xf6f: 0x03fb, -+ 0xf70: 0x45a9, 0xf71: 0x45a9, -+ // Block 0x3e, offset 0xf80 -+ 0xf93: 0x03cb, 0xf94: 0x03cb, 0xf95: 0x03cb, 0xf96: 0x03cb, 0xf97: 0x03e9, -+ 0xf98: 0x03e9, 0xf99: 0x03e6, 0xf9a: 0x03e6, 0xf9b: 0x03ec, 0xf9c: 0x03ec, 0xf9d: 0x217f, -+ 0xf9e: 0x03f2, 0xf9f: 0x03f2, 0xfa0: 0x03e3, 0xfa1: 0x03e3, 0xfa2: 0x03ef, 0xfa3: 0x03ef, -+ 0xfa4: 0x03f8, 0xfa5: 0x03f8, 0xfa6: 0x03f8, 0xfa7: 0x03f8, 0xfa8: 0x0380, 0xfa9: 0x0380, -+ 0xfaa: 0x26da, 0xfab: 0x26da, 0xfac: 0x274a, 0xfad: 0x274a, 0xfae: 0x2719, 0xfaf: 0x2719, -+ 0xfb0: 0x2735, 0xfb1: 0x2735, 0xfb2: 0x272e, 0xfb3: 0x272e, 0xfb4: 0x273c, 0xfb5: 0x273c, -+ 0xfb6: 0x2743, 0xfb7: 0x2743, 0xfb8: 0x2743, 0xfb9: 0x2720, 0xfba: 0x2720, 0xfbb: 0x2720, -+ 0xfbc: 0x03f5, 0xfbd: 0x03f5, 0xfbe: 0x03f5, 0xfbf: 0x03f5, -+ // Block 0x3f, offset 0xfc0 -+ 0xfc0: 0x26e1, 0xfc1: 0x26e8, 0xfc2: 0x2704, 0xfc3: 0x2720, 0xfc4: 0x2727, 0xfc5: 0x1eb9, -+ 0xfc6: 0x1ebe, 0xfc7: 0x1ec3, 0xfc8: 0x1ed2, 0xfc9: 0x1ee1, 0xfca: 0x1ee6, 0xfcb: 0x1eeb, -+ 0xfcc: 0x1ef0, 0xfcd: 0x1ef5, 0xfce: 0x1f04, 0xfcf: 0x1f13, 0xfd0: 0x1f18, 0xfd1: 0x1f1d, -+ 0xfd2: 0x1f2c, 0xfd3: 0x1f3b, 0xfd4: 0x1f40, 0xfd5: 0x1f45, 0xfd6: 0x1f4a, 0xfd7: 0x1f59, -+ 0xfd8: 0x1f5e, 0xfd9: 0x1f6d, 0xfda: 0x1f72, 0xfdb: 0x1f77, 0xfdc: 0x1f86, 0xfdd: 0x1f8b, -+ 0xfde: 0x1f90, 0xfdf: 0x1f9a, 0xfe0: 0x1fd6, 0xfe1: 0x1fe5, 0xfe2: 0x1ff4, 0xfe3: 0x1ff9, -+ 0xfe4: 0x1ffe, 0xfe5: 0x2008, 0xfe6: 0x2017, 0xfe7: 0x201c, 0xfe8: 0x202b, 0xfe9: 0x2030, -+ 0xfea: 0x2035, 0xfeb: 0x2044, 0xfec: 0x2049, 0xfed: 0x2058, 0xfee: 0x205d, 0xfef: 0x2062, -+ 0xff0: 0x2067, 0xff1: 0x206c, 0xff2: 0x2071, 0xff3: 0x2076, 0xff4: 0x207b, 0xff5: 0x2080, -+ 0xff6: 0x2085, 0xff7: 0x208a, 0xff8: 0x208f, 0xff9: 0x2094, 0xffa: 0x2099, 0xffb: 0x209e, -+ 0xffc: 0x20a3, 0xffd: 0x20a8, 0xffe: 0x20ad, 0xfff: 0x20b7, -+ // Block 0x40, offset 0x1000 -+ 0x1000: 0x20bc, 0x1001: 0x20c1, 0x1002: 0x20c6, 0x1003: 0x20d0, 0x1004: 0x20d5, 0x1005: 0x20df, -+ 0x1006: 0x20e4, 0x1007: 0x20e9, 0x1008: 0x20ee, 0x1009: 0x20f3, 0x100a: 0x20f8, 0x100b: 0x20fd, -+ 0x100c: 0x2102, 0x100d: 0x2107, 0x100e: 0x2116, 0x100f: 0x2125, 0x1010: 0x212a, 0x1011: 0x212f, -+ 0x1012: 0x2134, 0x1013: 0x2139, 0x1014: 0x213e, 0x1015: 0x2148, 0x1016: 0x214d, 0x1017: 0x2152, -+ 0x1018: 0x2161, 0x1019: 0x2170, 0x101a: 0x2175, 0x101b: 0x4561, 0x101c: 0x4567, 0x101d: 0x459d, -+ 0x101e: 0x45f4, 0x101f: 0x45fb, 0x1020: 0x4602, 0x1021: 0x4609, 0x1022: 0x4610, 0x1023: 0x4617, -+ 0x1024: 0x26f6, 0x1025: 0x26fd, 0x1026: 0x2704, 0x1027: 0x270b, 0x1028: 0x2720, 0x1029: 0x2727, -+ 0x102a: 0x1ec8, 0x102b: 0x1ecd, 0x102c: 0x1ed2, 0x102d: 0x1ed7, 0x102e: 0x1ee1, 0x102f: 0x1ee6, -+ 0x1030: 0x1efa, 0x1031: 0x1eff, 0x1032: 0x1f04, 0x1033: 0x1f09, 0x1034: 0x1f13, 0x1035: 0x1f18, -+ 0x1036: 0x1f22, 0x1037: 0x1f27, 0x1038: 0x1f2c, 0x1039: 0x1f31, 0x103a: 0x1f3b, 0x103b: 0x1f40, -+ 0x103c: 0x206c, 0x103d: 0x2071, 0x103e: 0x2080, 0x103f: 0x2085, -+ // Block 0x41, offset 0x1040 -+ 0x1040: 0x208a, 0x1041: 0x209e, 0x1042: 0x20a3, 0x1043: 0x20a8, 0x1044: 0x20ad, 0x1045: 0x20c6, -+ 0x1046: 0x20d0, 0x1047: 0x20d5, 0x1048: 0x20da, 0x1049: 0x20ee, 0x104a: 0x210c, 0x104b: 0x2111, -+ 0x104c: 0x2116, 0x104d: 0x211b, 0x104e: 0x2125, 0x104f: 0x212a, 0x1050: 0x459d, 0x1051: 0x2157, -+ 0x1052: 0x215c, 0x1053: 0x2161, 0x1054: 0x2166, 0x1055: 0x2170, 0x1056: 0x2175, 0x1057: 0x26e1, -+ 0x1058: 0x26e8, 0x1059: 0x26ef, 0x105a: 0x2704, 0x105b: 0x2712, 0x105c: 0x1eb9, 0x105d: 0x1ebe, -+ 0x105e: 0x1ec3, 0x105f: 0x1ed2, 0x1060: 0x1edc, 0x1061: 0x1eeb, 0x1062: 0x1ef0, 0x1063: 0x1ef5, -+ 0x1064: 0x1f04, 0x1065: 0x1f0e, 0x1066: 0x1f2c, 0x1067: 0x1f45, 0x1068: 0x1f4a, 0x1069: 0x1f59, -+ 0x106a: 0x1f5e, 0x106b: 0x1f6d, 0x106c: 0x1f77, 0x106d: 0x1f86, 0x106e: 0x1f8b, 0x106f: 0x1f90, -+ 0x1070: 0x1f9a, 0x1071: 0x1fd6, 0x1072: 0x1fdb, 0x1073: 0x1fe5, 0x1074: 0x1ff4, 0x1075: 0x1ff9, -+ 0x1076: 0x1ffe, 0x1077: 0x2008, 0x1078: 0x2017, 0x1079: 0x202b, 0x107a: 0x2030, 0x107b: 0x2035, -+ 0x107c: 0x2044, 0x107d: 0x2049, 0x107e: 0x2058, 0x107f: 0x205d, -+ // Block 0x42, offset 0x1080 -+ 0x1080: 0x2062, 0x1081: 0x2067, 0x1082: 0x2076, 0x1083: 0x207b, 0x1084: 0x208f, 0x1085: 0x2094, -+ 0x1086: 0x2099, 0x1087: 0x209e, 0x1088: 0x20a3, 0x1089: 0x20b7, 0x108a: 0x20bc, 0x108b: 0x20c1, -+ 0x108c: 0x20c6, 0x108d: 0x20cb, 0x108e: 0x20df, 0x108f: 0x20e4, 0x1090: 0x20e9, 0x1091: 0x20ee, -+ 0x1092: 0x20fd, 0x1093: 0x2102, 0x1094: 0x2107, 0x1095: 0x2116, 0x1096: 0x2120, 0x1097: 0x212f, -+ 0x1098: 0x2134, 0x1099: 0x4591, 0x109a: 0x2148, 0x109b: 0x214d, 0x109c: 0x2152, 0x109d: 0x2161, -+ 0x109e: 0x216b, 0x109f: 0x2704, 0x10a0: 0x2712, 0x10a1: 0x1ed2, 0x10a2: 0x1edc, 0x10a3: 0x1f04, -+ 0x10a4: 0x1f0e, 0x10a5: 0x1f2c, 0x10a6: 0x1f36, 0x10a7: 0x1f9a, 0x10a8: 0x1f9f, 0x10a9: 0x1fc2, -+ 0x10aa: 0x1fc7, 0x10ab: 0x209e, 0x10ac: 0x20a3, 0x10ad: 0x20c6, 0x10ae: 0x2116, 0x10af: 0x2120, -+ 0x10b0: 0x2161, 0x10b1: 0x216b, 0x10b2: 0x4645, 0x10b3: 0x464d, 0x10b4: 0x4655, 0x10b5: 0x2021, -+ 0x10b6: 0x2026, 0x10b7: 0x203a, 0x10b8: 0x203f, 0x10b9: 0x204e, 0x10ba: 0x2053, 0x10bb: 0x1fa4, -+ 0x10bc: 0x1fa9, 0x10bd: 0x1fcc, 0x10be: 0x1fd1, 0x10bf: 0x1f63, -+ // Block 0x43, offset 0x10c0 -+ 0x10c0: 0x1f68, 0x10c1: 0x1f4f, 0x10c2: 0x1f54, 0x10c3: 0x1f7c, 0x10c4: 0x1f81, 0x10c5: 0x1fea, -+ 0x10c6: 0x1fef, 0x10c7: 0x200d, 0x10c8: 0x2012, 0x10c9: 0x1fae, 0x10ca: 0x1fb3, 0x10cb: 0x1fb8, -+ 0x10cc: 0x1fc2, 0x10cd: 0x1fbd, 0x10ce: 0x1f95, 0x10cf: 0x1fe0, 0x10d0: 0x2003, 0x10d1: 0x2021, -+ 0x10d2: 0x2026, 0x10d3: 0x203a, 0x10d4: 0x203f, 0x10d5: 0x204e, 0x10d6: 0x2053, 0x10d7: 0x1fa4, -+ 0x10d8: 0x1fa9, 0x10d9: 0x1fcc, 0x10da: 0x1fd1, 0x10db: 0x1f63, 0x10dc: 0x1f68, 0x10dd: 0x1f4f, -+ 0x10de: 0x1f54, 0x10df: 0x1f7c, 0x10e0: 0x1f81, 0x10e1: 0x1fea, 0x10e2: 0x1fef, 0x10e3: 0x200d, -+ 0x10e4: 0x2012, 0x10e5: 0x1fae, 0x10e6: 0x1fb3, 0x10e7: 0x1fb8, 0x10e8: 0x1fc2, 0x10e9: 0x1fbd, -+ 0x10ea: 0x1f95, 0x10eb: 0x1fe0, 0x10ec: 0x2003, 0x10ed: 0x1fae, 0x10ee: 0x1fb3, 0x10ef: 0x1fb8, -+ 0x10f0: 0x1fc2, 0x10f1: 0x1f9f, 0x10f2: 0x1fc7, 0x10f3: 0x201c, 0x10f4: 0x1f86, 0x10f5: 0x1f8b, -+ 0x10f6: 0x1f90, 0x10f7: 0x1fae, 0x10f8: 0x1fb3, 0x10f9: 0x1fb8, 0x10fa: 0x201c, 0x10fb: 0x202b, -+ 0x10fc: 0x4549, 0x10fd: 0x4549, -+ // Block 0x44, offset 0x1100 -+ 0x1110: 0x2441, 0x1111: 0x2456, -+ 0x1112: 0x2456, 0x1113: 0x245d, 0x1114: 0x2464, 0x1115: 0x2479, 0x1116: 0x2480, 0x1117: 0x2487, -+ 0x1118: 0x24aa, 0x1119: 0x24aa, 0x111a: 0x24cd, 0x111b: 0x24c6, 0x111c: 0x24e2, 0x111d: 0x24d4, -+ 0x111e: 0x24db, 0x111f: 0x24fe, 0x1120: 0x24fe, 0x1121: 0x24f7, 0x1122: 0x2505, 0x1123: 0x2505, -+ 0x1124: 0x252f, 0x1125: 0x252f, 0x1126: 0x254b, 0x1127: 0x2513, 0x1128: 0x2513, 0x1129: 0x250c, -+ 0x112a: 0x2521, 0x112b: 0x2521, 0x112c: 0x2528, 0x112d: 0x2528, 0x112e: 0x2552, 0x112f: 0x2560, -+ 0x1130: 0x2560, 0x1131: 0x2567, 0x1132: 0x2567, 0x1133: 0x256e, 0x1134: 0x2575, 0x1135: 0x257c, -+ 0x1136: 0x2583, 0x1137: 0x2583, 0x1138: 0x258a, 0x1139: 0x2598, 0x113a: 0x25a6, 0x113b: 0x259f, -+ 0x113c: 0x25ad, 0x113d: 0x25ad, 0x113e: 0x25c2, 0x113f: 0x25c9, -+ // Block 0x45, offset 0x1140 -+ 0x1140: 0x25fa, 0x1141: 0x2608, 0x1142: 0x2601, 0x1143: 0x25e5, 0x1144: 0x25e5, 0x1145: 0x260f, -+ 0x1146: 0x260f, 0x1147: 0x2616, 0x1148: 0x2616, 0x1149: 0x2640, 0x114a: 0x2647, 0x114b: 0x264e, -+ 0x114c: 0x2624, 0x114d: 0x2632, 0x114e: 0x2655, 0x114f: 0x265c, -+ 0x1152: 0x262b, 0x1153: 0x26b0, 0x1154: 0x26b7, 0x1155: 0x268d, 0x1156: 0x2694, 0x1157: 0x2678, -+ 0x1158: 0x2678, 0x1159: 0x267f, 0x115a: 0x26a9, 0x115b: 0x26a2, 0x115c: 0x26cc, 0x115d: 0x26cc, -+ 0x115e: 0x243a, 0x115f: 0x244f, 0x1160: 0x2448, 0x1161: 0x2472, 0x1162: 0x246b, 0x1163: 0x2495, -+ 0x1164: 0x248e, 0x1165: 0x24b8, 0x1166: 0x249c, 0x1167: 0x24b1, 0x1168: 0x24e9, 0x1169: 0x2536, -+ 0x116a: 0x251a, 0x116b: 0x2559, 0x116c: 0x25f3, 0x116d: 0x261d, 0x116e: 0x26c5, 0x116f: 0x26be, -+ 0x1170: 0x26d3, 0x1171: 0x266a, 0x1172: 0x25d0, 0x1173: 0x269b, 0x1174: 0x25c2, 0x1175: 0x25fa, -+ 0x1176: 0x2591, 0x1177: 0x25de, 0x1178: 0x2671, 0x1179: 0x2663, 0x117a: 0x25ec, 0x117b: 0x25d7, -+ 0x117c: 0x25ec, 0x117d: 0x2671, 0x117e: 0x24a3, 0x117f: 0x24bf, -+ // Block 0x46, offset 0x1180 -+ 0x1180: 0x2639, 0x1181: 0x25b4, 0x1182: 0x2433, 0x1183: 0x25d7, 0x1184: 0x257c, 0x1185: 0x254b, -+ 0x1186: 0x24f0, 0x1187: 0x2686, -+ 0x11b0: 0x2544, 0x11b1: 0x25bb, 0x11b2: 0x28f6, 0x11b3: 0x28ed, 0x11b4: 0x2923, 0x11b5: 0x2911, -+ 0x11b6: 0x28ff, 0x11b7: 0x291a, 0x11b8: 0x292c, 0x11b9: 0x253d, 0x11ba: 0x2db3, 0x11bb: 0x2c33, -+ 0x11bc: 0x2908, -+ // Block 0x47, offset 0x11c0 -+ 0x11d0: 0x0019, 0x11d1: 0x057e, -+ 0x11d2: 0x0582, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x05ba, -+ 0x11d8: 0x05be, 0x11d9: 0x1c8c, -+ 0x11e0: 0x8133, 0x11e1: 0x8133, 0x11e2: 0x8133, 0x11e3: 0x8133, -+ 0x11e4: 0x8133, 0x11e5: 0x8133, 0x11e6: 0x8133, 0x11e7: 0x812e, 0x11e8: 0x812e, 0x11e9: 0x812e, -+ 0x11ea: 0x812e, 0x11eb: 0x812e, 0x11ec: 0x812e, 0x11ed: 0x812e, 0x11ee: 0x8133, 0x11ef: 0x8133, -+ 0x11f0: 0x19a0, 0x11f1: 0x053a, 0x11f2: 0x0536, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011, -+ 0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x05b2, 0x11fa: 0x05b6, 0x11fb: 0x05a6, -+ 0x11fc: 0x05aa, 0x11fd: 0x058e, 0x11fe: 0x0592, 0x11ff: 0x0586, -+ // Block 0x48, offset 0x1200 -+ 0x1200: 0x058a, 0x1201: 0x0596, 0x1202: 0x059a, 0x1203: 0x059e, 0x1204: 0x05a2, -+ 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x43aa, 0x120a: 0x43aa, 0x120b: 0x43aa, -+ 0x120c: 0x43aa, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x057e, -+ 0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003, -+ 0x1218: 0x053a, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x05b2, -+ 0x121e: 0x05b6, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b, -+ 0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009, -+ 0x122a: 0x000b, 0x122b: 0x0041, -+ 0x1230: 0x43eb, 0x1231: 0x456d, 0x1232: 0x43f0, 0x1234: 0x43f5, -+ 0x1236: 0x43fa, 0x1237: 0x4573, 0x1238: 0x43ff, 0x1239: 0x4579, 0x123a: 0x4404, 0x123b: 0x457f, -+ 0x123c: 0x4409, 0x123d: 0x4585, 0x123e: 0x440e, 0x123f: 0x458b, -+ // Block 0x49, offset 0x1240 -+ 0x1240: 0x0329, 0x1241: 0x454f, 0x1242: 0x454f, 0x1243: 0x4555, 0x1244: 0x4555, 0x1245: 0x4597, -+ 0x1246: 0x4597, 0x1247: 0x455b, 0x1248: 0x455b, 0x1249: 0x45a3, 0x124a: 0x45a3, 0x124b: 0x45a3, -+ 0x124c: 0x45a3, 0x124d: 0x032c, 0x124e: 0x032c, 0x124f: 0x032f, 0x1250: 0x032f, 0x1251: 0x032f, -+ 0x1252: 0x032f, 0x1253: 0x0332, 0x1254: 0x0332, 0x1255: 0x0335, 0x1256: 0x0335, 0x1257: 0x0335, -+ 0x1258: 0x0335, 0x1259: 0x0338, 0x125a: 0x0338, 0x125b: 0x0338, 0x125c: 0x0338, 0x125d: 0x033b, -+ 0x125e: 0x033b, 0x125f: 0x033b, 0x1260: 0x033b, 0x1261: 0x033e, 0x1262: 0x033e, 0x1263: 0x033e, -+ 0x1264: 0x033e, 0x1265: 0x0341, 0x1266: 0x0341, 0x1267: 0x0341, 0x1268: 0x0341, 0x1269: 0x0344, -+ 0x126a: 0x0344, 0x126b: 0x0347, 0x126c: 0x0347, 0x126d: 0x034a, 0x126e: 0x034a, 0x126f: 0x034d, -+ 0x1270: 0x034d, 0x1271: 0x0350, 0x1272: 0x0350, 0x1273: 0x0350, 0x1274: 0x0350, 0x1275: 0x0353, -+ 0x1276: 0x0353, 0x1277: 0x0353, 0x1278: 0x0353, 0x1279: 0x0356, 0x127a: 0x0356, 0x127b: 0x0356, -+ 0x127c: 0x0356, 0x127d: 0x0359, 0x127e: 0x0359, 0x127f: 0x0359, -+ // Block 0x4a, offset 0x1280 -+ 0x1280: 0x0359, 0x1281: 0x035c, 0x1282: 0x035c, 0x1283: 0x035c, 0x1284: 0x035c, 0x1285: 0x035f, -+ 0x1286: 0x035f, 0x1287: 0x035f, 0x1288: 0x035f, 0x1289: 0x0362, 0x128a: 0x0362, 0x128b: 0x0362, -+ 0x128c: 0x0362, 0x128d: 0x0365, 0x128e: 0x0365, 0x128f: 0x0365, 0x1290: 0x0365, 0x1291: 0x0368, -+ 0x1292: 0x0368, 0x1293: 0x0368, 0x1294: 0x0368, 0x1295: 0x036b, 0x1296: 0x036b, 0x1297: 0x036b, -+ 0x1298: 0x036b, 0x1299: 0x036e, 0x129a: 0x036e, 0x129b: 0x036e, 0x129c: 0x036e, 0x129d: 0x0371, -+ 0x129e: 0x0371, 0x129f: 0x0371, 0x12a0: 0x0371, 0x12a1: 0x0374, 0x12a2: 0x0374, 0x12a3: 0x0374, -+ 0x12a4: 0x0374, 0x12a5: 0x0377, 0x12a6: 0x0377, 0x12a7: 0x0377, 0x12a8: 0x0377, 0x12a9: 0x037a, -+ 0x12aa: 0x037a, 0x12ab: 0x037a, 0x12ac: 0x037a, 0x12ad: 0x037d, 0x12ae: 0x037d, 0x12af: 0x0380, -+ 0x12b0: 0x0380, 0x12b1: 0x0383, 0x12b2: 0x0383, 0x12b3: 0x0383, 0x12b4: 0x0383, 0x12b5: 0x2f41, -+ 0x12b6: 0x2f41, 0x12b7: 0x2f49, 0x12b8: 0x2f49, 0x12b9: 0x2f51, 0x12ba: 0x2f51, 0x12bb: 0x20b2, -+ 0x12bc: 0x20b2, -+ // Block 0x4b, offset 0x12c0 -+ 0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b, -+ 0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097, -+ 0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3, -+ 0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af, -+ 0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb, -+ 0x12de: 0x00bd, 0x12df: 0x056e, 0x12e0: 0x0572, 0x12e1: 0x0582, 0x12e2: 0x0596, 0x12e3: 0x059a, -+ 0x12e4: 0x057e, 0x12e5: 0x06a6, 0x12e6: 0x069e, 0x12e7: 0x05c2, 0x12e8: 0x05ca, 0x12e9: 0x05d2, -+ 0x12ea: 0x05da, 0x12eb: 0x05e2, 0x12ec: 0x0666, 0x12ed: 0x066e, 0x12ee: 0x0676, 0x12ef: 0x061a, -+ 0x12f0: 0x06aa, 0x12f1: 0x05c6, 0x12f2: 0x05ce, 0x12f3: 0x05d6, 0x12f4: 0x05de, 0x12f5: 0x05e6, -+ 0x12f6: 0x05ea, 0x12f7: 0x05ee, 0x12f8: 0x05f2, 0x12f9: 0x05f6, 0x12fa: 0x05fa, 0x12fb: 0x05fe, -+ 0x12fc: 0x0602, 0x12fd: 0x0606, 0x12fe: 0x060a, 0x12ff: 0x060e, -+ // Block 0x4c, offset 0x1300 -+ 0x1300: 0x0612, 0x1301: 0x0616, 0x1302: 0x061e, 0x1303: 0x0622, 0x1304: 0x0626, 0x1305: 0x062a, -+ 0x1306: 0x062e, 0x1307: 0x0632, 0x1308: 0x0636, 0x1309: 0x063a, 0x130a: 0x063e, 0x130b: 0x0642, -+ 0x130c: 0x0646, 0x130d: 0x064a, 0x130e: 0x064e, 0x130f: 0x0652, 0x1310: 0x0656, 0x1311: 0x065a, -+ 0x1312: 0x065e, 0x1313: 0x0662, 0x1314: 0x066a, 0x1315: 0x0672, 0x1316: 0x067a, 0x1317: 0x067e, -+ 0x1318: 0x0682, 0x1319: 0x0686, 0x131a: 0x068a, 0x131b: 0x068e, 0x131c: 0x0692, 0x131d: 0x06a2, -+ 0x131e: 0x4bb9, 0x131f: 0x4bbf, 0x1320: 0x04b6, 0x1321: 0x0406, 0x1322: 0x040a, 0x1323: 0x4b7c, -+ 0x1324: 0x040e, 0x1325: 0x4b82, 0x1326: 0x4b88, 0x1327: 0x0412, 0x1328: 0x0416, 0x1329: 0x041a, -+ 0x132a: 0x4b8e, 0x132b: 0x4b94, 0x132c: 0x4b9a, 0x132d: 0x4ba0, 0x132e: 0x4ba6, 0x132f: 0x4bac, -+ 0x1330: 0x045a, 0x1331: 0x041e, 0x1332: 0x0422, 0x1333: 0x0426, 0x1334: 0x046e, 0x1335: 0x042a, -+ 0x1336: 0x042e, 0x1337: 0x0432, 0x1338: 0x0436, 0x1339: 0x043a, 0x133a: 0x043e, 0x133b: 0x0442, -+ 0x133c: 0x0446, 0x133d: 0x044a, 0x133e: 0x044e, -+ // Block 0x4d, offset 0x1340 -+ 0x1342: 0x4afe, 0x1343: 0x4b04, 0x1344: 0x4b0a, 0x1345: 0x4b10, -+ 0x1346: 0x4b16, 0x1347: 0x4b1c, 0x134a: 0x4b22, 0x134b: 0x4b28, -+ 0x134c: 0x4b2e, 0x134d: 0x4b34, 0x134e: 0x4b3a, 0x134f: 0x4b40, -+ 0x1352: 0x4b46, 0x1353: 0x4b4c, 0x1354: 0x4b52, 0x1355: 0x4b58, 0x1356: 0x4b5e, 0x1357: 0x4b64, -+ 0x135a: 0x4b6a, 0x135b: 0x4b70, 0x135c: 0x4b76, -+ 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x43a5, -+ 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x053e, 0x1368: 0x0562, 0x1369: 0x0542, -+ 0x136a: 0x0546, 0x136b: 0x054a, 0x136c: 0x054e, 0x136d: 0x0566, 0x136e: 0x056a, -+ // Block 0x4e, offset 0x1380 -+ 0x1381: 0x01f1, 0x1382: 0x01f4, 0x1383: 0x00d4, 0x1384: 0x01be, 0x1385: 0x010d, -+ 0x1387: 0x01d3, 0x1388: 0x174e, 0x1389: 0x01d9, 0x138a: 0x01d6, 0x138b: 0x0116, -+ 0x138c: 0x0119, 0x138d: 0x0526, 0x138e: 0x011c, 0x138f: 0x0128, 0x1390: 0x01e5, 0x1391: 0x013a, -+ 0x1392: 0x0134, 0x1393: 0x012e, 0x1394: 0x01c1, 0x1395: 0x00e0, 0x1396: 0x01c4, 0x1397: 0x0143, -+ 0x1398: 0x0194, 0x1399: 0x01e8, 0x139a: 0x01eb, 0x139b: 0x0152, 0x139c: 0x1756, 0x139d: 0x1742, -+ 0x139e: 0x0158, 0x139f: 0x175b, 0x13a0: 0x01a9, 0x13a1: 0x1760, 0x13a2: 0x00da, 0x13a3: 0x0170, -+ 0x13a4: 0x0173, 0x13a5: 0x00a3, 0x13a6: 0x017c, 0x13a7: 0x1765, 0x13a8: 0x0182, 0x13a9: 0x0185, -+ 0x13aa: 0x0188, 0x13ab: 0x01e2, 0x13ac: 0x01dc, 0x13ad: 0x1752, 0x13ae: 0x01df, 0x13af: 0x0197, -+ 0x13b0: 0x0576, 0x13b2: 0x01ac, 0x13b3: 0x01cd, 0x13b4: 0x01d0, 0x13b5: 0x01bb, -+ 0x13b6: 0x00f5, 0x13b7: 0x00f8, 0x13b8: 0x00fb, 0x13b9: 0x176a, 0x13ba: 0x176f, -+ // Block 0x4f, offset 0x13c0 -+ 0x13c0: 0x0063, 0x13c1: 0x0065, 0x13c2: 0x0067, 0x13c3: 0x0069, 0x13c4: 0x006b, 0x13c5: 0x006d, -+ 0x13c6: 0x006f, 0x13c7: 0x0071, 0x13c8: 0x0073, 0x13c9: 0x0075, 0x13ca: 0x0083, 0x13cb: 0x0085, -+ 0x13cc: 0x0087, 0x13cd: 0x0089, 0x13ce: 0x008b, 0x13cf: 0x008d, 0x13d0: 0x008f, 0x13d1: 0x0091, -+ 0x13d2: 0x0093, 0x13d3: 0x0095, 0x13d4: 0x0097, 0x13d5: 0x0099, 0x13d6: 0x009b, 0x13d7: 0x009d, -+ 0x13d8: 0x009f, 0x13d9: 0x00a1, 0x13da: 0x00a3, 0x13db: 0x00a5, 0x13dc: 0x00a7, 0x13dd: 0x00a9, -+ 0x13de: 0x00ab, 0x13df: 0x00ad, 0x13e0: 0x00af, 0x13e1: 0x00b1, 0x13e2: 0x00b3, 0x13e3: 0x00b5, -+ 0x13e4: 0x00e3, 0x13e5: 0x0101, 0x13e8: 0x01f7, 0x13e9: 0x01fa, -+ 0x13ea: 0x01fd, 0x13eb: 0x0200, 0x13ec: 0x0203, 0x13ed: 0x0206, 0x13ee: 0x0209, 0x13ef: 0x020c, -+ 0x13f0: 0x020f, 0x13f1: 0x0212, 0x13f2: 0x0215, 0x13f3: 0x0218, 0x13f4: 0x021b, 0x13f5: 0x021e, -+ 0x13f6: 0x0221, 0x13f7: 0x0224, 0x13f8: 0x0227, 0x13f9: 0x020c, 0x13fa: 0x022a, 0x13fb: 0x022d, -+ 0x13fc: 0x0230, 0x13fd: 0x0233, 0x13fe: 0x0236, 0x13ff: 0x0239, -+ // Block 0x50, offset 0x1400 -+ 0x1400: 0x0281, 0x1401: 0x0284, 0x1402: 0x0287, 0x1403: 0x0552, 0x1404: 0x024b, 0x1405: 0x0254, -+ 0x1406: 0x025a, 0x1407: 0x027e, 0x1408: 0x026f, 0x1409: 0x026c, 0x140a: 0x028a, 0x140b: 0x028d, -+ 0x140e: 0x0021, 0x140f: 0x0023, 0x1410: 0x0025, 0x1411: 0x0027, -+ 0x1412: 0x0029, 0x1413: 0x002b, 0x1414: 0x002d, 0x1415: 0x002f, 0x1416: 0x0031, 0x1417: 0x0033, -+ 0x1418: 0x0021, 0x1419: 0x0023, 0x141a: 0x0025, 0x141b: 0x0027, 0x141c: 0x0029, 0x141d: 0x002b, -+ 0x141e: 0x002d, 0x141f: 0x002f, 0x1420: 0x0031, 0x1421: 0x0033, 0x1422: 0x0021, 0x1423: 0x0023, -+ 0x1424: 0x0025, 0x1425: 0x0027, 0x1426: 0x0029, 0x1427: 0x002b, 0x1428: 0x002d, 0x1429: 0x002f, -+ 0x142a: 0x0031, 0x142b: 0x0033, 0x142c: 0x0021, 0x142d: 0x0023, 0x142e: 0x0025, 0x142f: 0x0027, -+ 0x1430: 0x0029, 0x1431: 0x002b, 0x1432: 0x002d, 0x1433: 0x002f, 0x1434: 0x0031, 0x1435: 0x0033, -+ 0x1436: 0x0021, 0x1437: 0x0023, 0x1438: 0x0025, 0x1439: 0x0027, 0x143a: 0x0029, 0x143b: 0x002b, -+ 0x143c: 0x002d, 0x143d: 0x002f, 0x143e: 0x0031, 0x143f: 0x0033, -+ // Block 0x51, offset 0x1440 -+ 0x1440: 0x8133, 0x1441: 0x8133, 0x1442: 0x8133, 0x1443: 0x8133, 0x1444: 0x8133, 0x1445: 0x8133, -+ 0x1446: 0x8133, 0x1448: 0x8133, 0x1449: 0x8133, 0x144a: 0x8133, 0x144b: 0x8133, -+ 0x144c: 0x8133, 0x144d: 0x8133, 0x144e: 0x8133, 0x144f: 0x8133, 0x1450: 0x8133, 0x1451: 0x8133, -+ 0x1452: 0x8133, 0x1453: 0x8133, 0x1454: 0x8133, 0x1455: 0x8133, 0x1456: 0x8133, 0x1457: 0x8133, -+ 0x1458: 0x8133, 0x145b: 0x8133, 0x145c: 0x8133, 0x145d: 0x8133, -+ 0x145e: 0x8133, 0x145f: 0x8133, 0x1460: 0x8133, 0x1461: 0x8133, 0x1463: 0x8133, -+ 0x1464: 0x8133, 0x1466: 0x8133, 0x1467: 0x8133, 0x1468: 0x8133, 0x1469: 0x8133, -+ 0x146a: 0x8133, -+ 0x1470: 0x0290, 0x1471: 0x0293, 0x1472: 0x0296, 0x1473: 0x0299, 0x1474: 0x029c, 0x1475: 0x029f, -+ 0x1476: 0x02a2, 0x1477: 0x02a5, 0x1478: 0x02a8, 0x1479: 0x02ab, 0x147a: 0x02ae, 0x147b: 0x02b1, -+ 0x147c: 0x02b7, 0x147d: 0x02ba, 0x147e: 0x02bd, 0x147f: 0x02c0, -+ // Block 0x52, offset 0x1480 -+ 0x1480: 0x02c3, 0x1481: 0x02c6, 0x1482: 0x02c9, 0x1483: 0x02cc, 0x1484: 0x02cf, 0x1485: 0x02d2, -+ 0x1486: 0x02d5, 0x1487: 0x02db, 0x1488: 0x02e1, 0x1489: 0x02e4, 0x148a: 0x1736, 0x148b: 0x0302, -+ 0x148c: 0x02ea, 0x148d: 0x02ed, 0x148e: 0x0305, 0x148f: 0x02f9, 0x1490: 0x02ff, 0x1491: 0x0290, -+ 0x1492: 0x0293, 0x1493: 0x0296, 0x1494: 0x0299, 0x1495: 0x029c, 0x1496: 0x029f, 0x1497: 0x02a2, -+ 0x1498: 0x02a5, 0x1499: 0x02a8, 0x149a: 0x02ab, 0x149b: 0x02ae, 0x149c: 0x02b7, 0x149d: 0x02ba, -+ 0x149e: 0x02c0, 0x149f: 0x02c6, 0x14a0: 0x02c9, 0x14a1: 0x02cc, 0x14a2: 0x02cf, 0x14a3: 0x02d2, -+ 0x14a4: 0x02d5, 0x14a5: 0x02d8, 0x14a6: 0x02db, 0x14a7: 0x02f3, 0x14a8: 0x02ea, 0x14a9: 0x02e7, -+ 0x14aa: 0x02f0, 0x14ab: 0x02f6, 0x14ac: 0x1732, 0x14ad: 0x02fc, -+ // Block 0x53, offset 0x14c0 -+ 0x14c0: 0x032c, 0x14c1: 0x032f, 0x14c2: 0x033b, 0x14c3: 0x0344, 0x14c5: 0x037d, -+ 0x14c6: 0x034d, 0x14c7: 0x033e, 0x14c8: 0x035c, 0x14c9: 0x0383, 0x14ca: 0x036e, 0x14cb: 0x0371, -+ 0x14cc: 0x0374, 0x14cd: 0x0377, 0x14ce: 0x0350, 0x14cf: 0x0362, 0x14d0: 0x0368, 0x14d1: 0x0356, -+ 0x14d2: 0x036b, 0x14d3: 0x034a, 0x14d4: 0x0353, 0x14d5: 0x0335, 0x14d6: 0x0338, 0x14d7: 0x0341, -+ 0x14d8: 0x0347, 0x14d9: 0x0359, 0x14da: 0x035f, 0x14db: 0x0365, 0x14dc: 0x0386, 0x14dd: 0x03d7, -+ 0x14de: 0x03bf, 0x14df: 0x0389, 0x14e1: 0x032f, 0x14e2: 0x033b, -+ 0x14e4: 0x037a, 0x14e7: 0x033e, 0x14e9: 0x0383, -+ 0x14ea: 0x036e, 0x14eb: 0x0371, 0x14ec: 0x0374, 0x14ed: 0x0377, 0x14ee: 0x0350, 0x14ef: 0x0362, -+ 0x14f0: 0x0368, 0x14f1: 0x0356, 0x14f2: 0x036b, 0x14f4: 0x0353, 0x14f5: 0x0335, -+ 0x14f6: 0x0338, 0x14f7: 0x0341, 0x14f9: 0x0359, 0x14fb: 0x0365, -+ // Block 0x54, offset 0x1500 -+ 0x1502: 0x033b, -+ 0x1507: 0x033e, 0x1509: 0x0383, 0x150b: 0x0371, -+ 0x150d: 0x0377, 0x150e: 0x0350, 0x150f: 0x0362, 0x1511: 0x0356, -+ 0x1512: 0x036b, 0x1514: 0x0353, 0x1517: 0x0341, -+ 0x1519: 0x0359, 0x151b: 0x0365, 0x151d: 0x03d7, -+ 0x151f: 0x0389, 0x1521: 0x032f, 0x1522: 0x033b, -+ 0x1524: 0x037a, 0x1527: 0x033e, 0x1528: 0x035c, 0x1529: 0x0383, -+ 0x152a: 0x036e, 0x152c: 0x0374, 0x152d: 0x0377, 0x152e: 0x0350, 0x152f: 0x0362, -+ 0x1530: 0x0368, 0x1531: 0x0356, 0x1532: 0x036b, 0x1534: 0x0353, 0x1535: 0x0335, -+ 0x1536: 0x0338, 0x1537: 0x0341, 0x1539: 0x0359, 0x153a: 0x035f, 0x153b: 0x0365, -+ 0x153c: 0x0386, 0x153e: 0x03bf, -+ // Block 0x55, offset 0x1540 -+ 0x1540: 0x032c, 0x1541: 0x032f, 0x1542: 0x033b, 0x1543: 0x0344, 0x1544: 0x037a, 0x1545: 0x037d, -+ 0x1546: 0x034d, 0x1547: 0x033e, 0x1548: 0x035c, 0x1549: 0x0383, 0x154b: 0x0371, -+ 0x154c: 0x0374, 0x154d: 0x0377, 0x154e: 0x0350, 0x154f: 0x0362, 0x1550: 0x0368, 0x1551: 0x0356, -+ 0x1552: 0x036b, 0x1553: 0x034a, 0x1554: 0x0353, 0x1555: 0x0335, 0x1556: 0x0338, 0x1557: 0x0341, -+ 0x1558: 0x0347, 0x1559: 0x0359, 0x155a: 0x035f, 0x155b: 0x0365, -+ 0x1561: 0x032f, 0x1562: 0x033b, 0x1563: 0x0344, -+ 0x1565: 0x037d, 0x1566: 0x034d, 0x1567: 0x033e, 0x1568: 0x035c, 0x1569: 0x0383, -+ 0x156b: 0x0371, 0x156c: 0x0374, 0x156d: 0x0377, 0x156e: 0x0350, 0x156f: 0x0362, -+ 0x1570: 0x0368, 0x1571: 0x0356, 0x1572: 0x036b, 0x1573: 0x034a, 0x1574: 0x0353, 0x1575: 0x0335, -+ 0x1576: 0x0338, 0x1577: 0x0341, 0x1578: 0x0347, 0x1579: 0x0359, 0x157a: 0x035f, 0x157b: 0x0365, -+ // Block 0x56, offset 0x1580 -+ 0x1580: 0x19a6, 0x1581: 0x19a3, 0x1582: 0x19a9, 0x1583: 0x19cd, 0x1584: 0x19f1, 0x1585: 0x1a15, -+ 0x1586: 0x1a39, 0x1587: 0x1a42, 0x1588: 0x1a48, 0x1589: 0x1a4e, 0x158a: 0x1a54, -+ 0x1590: 0x1bbc, 0x1591: 0x1bc0, -+ 0x1592: 0x1bc4, 0x1593: 0x1bc8, 0x1594: 0x1bcc, 0x1595: 0x1bd0, 0x1596: 0x1bd4, 0x1597: 0x1bd8, -+ 0x1598: 0x1bdc, 0x1599: 0x1be0, 0x159a: 0x1be4, 0x159b: 0x1be8, 0x159c: 0x1bec, 0x159d: 0x1bf0, -+ 0x159e: 0x1bf4, 0x159f: 0x1bf8, 0x15a0: 0x1bfc, 0x15a1: 0x1c00, 0x15a2: 0x1c04, 0x15a3: 0x1c08, -+ 0x15a4: 0x1c0c, 0x15a5: 0x1c10, 0x15a6: 0x1c14, 0x15a7: 0x1c18, 0x15a8: 0x1c1c, 0x15a9: 0x1c20, -+ 0x15aa: 0x2855, 0x15ab: 0x0047, 0x15ac: 0x0065, 0x15ad: 0x1a69, 0x15ae: 0x1ae1, -+ 0x15b0: 0x0043, 0x15b1: 0x0045, 0x15b2: 0x0047, 0x15b3: 0x0049, 0x15b4: 0x004b, 0x15b5: 0x004d, -+ 0x15b6: 0x004f, 0x15b7: 0x0051, 0x15b8: 0x0053, 0x15b9: 0x0055, 0x15ba: 0x0057, 0x15bb: 0x0059, -+ 0x15bc: 0x005b, 0x15bd: 0x005d, 0x15be: 0x005f, 0x15bf: 0x0061, -+ // Block 0x57, offset 0x15c0 -+ 0x15c0: 0x27dd, 0x15c1: 0x27f2, 0x15c2: 0x05fe, -+ 0x15d0: 0x0d0a, 0x15d1: 0x0b42, -+ 0x15d2: 0x09ce, 0x15d3: 0x4705, 0x15d4: 0x0816, 0x15d5: 0x0aea, 0x15d6: 0x142a, 0x15d7: 0x0afa, -+ 0x15d8: 0x0822, 0x15d9: 0x0dd2, 0x15da: 0x0faa, 0x15db: 0x0daa, 0x15dc: 0x0922, 0x15dd: 0x0c66, -+ 0x15de: 0x08ba, 0x15df: 0x0db2, 0x15e0: 0x090e, 0x15e1: 0x1212, 0x15e2: 0x107e, 0x15e3: 0x1486, -+ 0x15e4: 0x0ace, 0x15e5: 0x0a06, 0x15e6: 0x0f5e, 0x15e7: 0x0d16, 0x15e8: 0x0d42, 0x15e9: 0x07ba, -+ 0x15ea: 0x07c6, 0x15eb: 0x1506, 0x15ec: 0x0bd6, 0x15ed: 0x07e2, 0x15ee: 0x09ea, 0x15ef: 0x0d36, -+ 0x15f0: 0x14ae, 0x15f1: 0x0d0e, 0x15f2: 0x116a, 0x15f3: 0x11a6, 0x15f4: 0x09f2, 0x15f5: 0x0f3e, -+ 0x15f6: 0x0e06, 0x15f7: 0x0e02, 0x15f8: 0x1092, 0x15f9: 0x0926, 0x15fa: 0x0a52, 0x15fb: 0x153e, -+ // Block 0x58, offset 0x1600 -+ 0x1600: 0x07f6, 0x1601: 0x07ee, 0x1602: 0x07fe, 0x1603: 0x1774, 0x1604: 0x0842, 0x1605: 0x0852, -+ 0x1606: 0x0856, 0x1607: 0x085e, 0x1608: 0x0866, 0x1609: 0x086a, 0x160a: 0x0876, 0x160b: 0x086e, -+ 0x160c: 0x06ae, 0x160d: 0x1788, 0x160e: 0x088a, 0x160f: 0x088e, 0x1610: 0x0892, 0x1611: 0x08ae, -+ 0x1612: 0x1779, 0x1613: 0x06b2, 0x1614: 0x089a, 0x1615: 0x08ba, 0x1616: 0x1783, 0x1617: 0x08ca, -+ 0x1618: 0x08d2, 0x1619: 0x0832, 0x161a: 0x08da, 0x161b: 0x08de, 0x161c: 0x195e, 0x161d: 0x08fa, -+ 0x161e: 0x0902, 0x161f: 0x06ba, 0x1620: 0x091a, 0x1621: 0x091e, 0x1622: 0x0926, 0x1623: 0x092a, -+ 0x1624: 0x06be, 0x1625: 0x0942, 0x1626: 0x0946, 0x1627: 0x0952, 0x1628: 0x095e, 0x1629: 0x0962, -+ 0x162a: 0x0966, 0x162b: 0x096e, 0x162c: 0x098e, 0x162d: 0x0992, 0x162e: 0x099a, 0x162f: 0x09aa, -+ 0x1630: 0x09b2, 0x1631: 0x09b6, 0x1632: 0x09b6, 0x1633: 0x09b6, 0x1634: 0x1797, 0x1635: 0x0f8e, -+ 0x1636: 0x09ca, 0x1637: 0x09d2, 0x1638: 0x179c, 0x1639: 0x09de, 0x163a: 0x09e6, 0x163b: 0x09ee, -+ 0x163c: 0x0a16, 0x163d: 0x0a02, 0x163e: 0x0a0e, 0x163f: 0x0a12, -+ // Block 0x59, offset 0x1640 -+ 0x1640: 0x0a1a, 0x1641: 0x0a22, 0x1642: 0x0a26, 0x1643: 0x0a2e, 0x1644: 0x0a36, 0x1645: 0x0a3a, -+ 0x1646: 0x0a3a, 0x1647: 0x0a42, 0x1648: 0x0a4a, 0x1649: 0x0a4e, 0x164a: 0x0a5a, 0x164b: 0x0a7e, -+ 0x164c: 0x0a62, 0x164d: 0x0a82, 0x164e: 0x0a66, 0x164f: 0x0a6e, 0x1650: 0x0906, 0x1651: 0x0aca, -+ 0x1652: 0x0a92, 0x1653: 0x0a96, 0x1654: 0x0a9a, 0x1655: 0x0a8e, 0x1656: 0x0aa2, 0x1657: 0x0a9e, -+ 0x1658: 0x0ab6, 0x1659: 0x17a1, 0x165a: 0x0ad2, 0x165b: 0x0ad6, 0x165c: 0x0ade, 0x165d: 0x0aea, -+ 0x165e: 0x0af2, 0x165f: 0x0b0e, 0x1660: 0x17a6, 0x1661: 0x17ab, 0x1662: 0x0b1a, 0x1663: 0x0b1e, -+ 0x1664: 0x0b22, 0x1665: 0x0b16, 0x1666: 0x0b2a, 0x1667: 0x06c2, 0x1668: 0x06c6, 0x1669: 0x0b32, -+ 0x166a: 0x0b3a, 0x166b: 0x0b3a, 0x166c: 0x17b0, 0x166d: 0x0b56, 0x166e: 0x0b5a, 0x166f: 0x0b5e, -+ 0x1670: 0x0b66, 0x1671: 0x17b5, 0x1672: 0x0b6e, 0x1673: 0x0b72, 0x1674: 0x0c4a, 0x1675: 0x0b7a, -+ 0x1676: 0x06ca, 0x1677: 0x0b86, 0x1678: 0x0b96, 0x1679: 0x0ba2, 0x167a: 0x0b9e, 0x167b: 0x17bf, -+ 0x167c: 0x0baa, 0x167d: 0x17c4, 0x167e: 0x0bb6, 0x167f: 0x0bb2, -+ // Block 0x5a, offset 0x1680 -+ 0x1680: 0x0bba, 0x1681: 0x0bca, 0x1682: 0x0bce, 0x1683: 0x06ce, 0x1684: 0x0bde, 0x1685: 0x0be6, -+ 0x1686: 0x0bea, 0x1687: 0x0bee, 0x1688: 0x06d2, 0x1689: 0x17c9, 0x168a: 0x06d6, 0x168b: 0x0c0a, -+ 0x168c: 0x0c0e, 0x168d: 0x0c12, 0x168e: 0x0c1a, 0x168f: 0x1990, 0x1690: 0x0c32, 0x1691: 0x17d3, -+ 0x1692: 0x17d3, 0x1693: 0x12d2, 0x1694: 0x0c42, 0x1695: 0x0c42, 0x1696: 0x06da, 0x1697: 0x17f6, -+ 0x1698: 0x18c8, 0x1699: 0x0c52, 0x169a: 0x0c5a, 0x169b: 0x06de, 0x169c: 0x0c6e, 0x169d: 0x0c7e, -+ 0x169e: 0x0c82, 0x169f: 0x0c8a, 0x16a0: 0x0c9a, 0x16a1: 0x06e6, 0x16a2: 0x06e2, 0x16a3: 0x0c9e, -+ 0x16a4: 0x17d8, 0x16a5: 0x0ca2, 0x16a6: 0x0cb6, 0x16a7: 0x0cba, 0x16a8: 0x0cbe, 0x16a9: 0x0cba, -+ 0x16aa: 0x0cca, 0x16ab: 0x0cce, 0x16ac: 0x0cde, 0x16ad: 0x0cd6, 0x16ae: 0x0cda, 0x16af: 0x0ce2, -+ 0x16b0: 0x0ce6, 0x16b1: 0x0cea, 0x16b2: 0x0cf6, 0x16b3: 0x0cfa, 0x16b4: 0x0d12, 0x16b5: 0x0d1a, -+ 0x16b6: 0x0d2a, 0x16b7: 0x0d3e, 0x16b8: 0x17e7, 0x16b9: 0x0d3a, 0x16ba: 0x0d2e, 0x16bb: 0x0d46, -+ 0x16bc: 0x0d4e, 0x16bd: 0x0d62, 0x16be: 0x17ec, 0x16bf: 0x0d6a, -+ // Block 0x5b, offset 0x16c0 -+ 0x16c0: 0x0d5e, 0x16c1: 0x0d56, 0x16c2: 0x06ea, 0x16c3: 0x0d72, 0x16c4: 0x0d7a, 0x16c5: 0x0d82, -+ 0x16c6: 0x0d76, 0x16c7: 0x06ee, 0x16c8: 0x0d92, 0x16c9: 0x0d9a, 0x16ca: 0x17f1, 0x16cb: 0x0dc6, -+ 0x16cc: 0x0dfa, 0x16cd: 0x0dd6, 0x16ce: 0x06fa, 0x16cf: 0x0de2, 0x16d0: 0x06f6, 0x16d1: 0x06f2, -+ 0x16d2: 0x08be, 0x16d3: 0x08c2, 0x16d4: 0x0dfe, 0x16d5: 0x0de6, 0x16d6: 0x12a6, 0x16d7: 0x075e, -+ 0x16d8: 0x0e0a, 0x16d9: 0x0e0e, 0x16da: 0x0e12, 0x16db: 0x0e26, 0x16dc: 0x0e1e, 0x16dd: 0x180a, -+ 0x16de: 0x06fe, 0x16df: 0x0e3a, 0x16e0: 0x0e2e, 0x16e1: 0x0e4a, 0x16e2: 0x0e52, 0x16e3: 0x1814, -+ 0x16e4: 0x0e56, 0x16e5: 0x0e42, 0x16e6: 0x0e5e, 0x16e7: 0x0702, 0x16e8: 0x0e62, 0x16e9: 0x0e66, -+ 0x16ea: 0x0e6a, 0x16eb: 0x0e76, 0x16ec: 0x1819, 0x16ed: 0x0e7e, 0x16ee: 0x0706, 0x16ef: 0x0e8a, -+ 0x16f0: 0x181e, 0x16f1: 0x0e8e, 0x16f2: 0x070a, 0x16f3: 0x0e9a, 0x16f4: 0x0ea6, 0x16f5: 0x0eb2, -+ 0x16f6: 0x0eb6, 0x16f7: 0x1823, 0x16f8: 0x17ba, 0x16f9: 0x1828, 0x16fa: 0x0ed6, 0x16fb: 0x182d, -+ 0x16fc: 0x0ee2, 0x16fd: 0x0eea, 0x16fe: 0x0eda, 0x16ff: 0x0ef6, -+ // Block 0x5c, offset 0x1700 -+ 0x1700: 0x0f06, 0x1701: 0x0f16, 0x1702: 0x0f0a, 0x1703: 0x0f0e, 0x1704: 0x0f1a, 0x1705: 0x0f1e, -+ 0x1706: 0x1832, 0x1707: 0x0f02, 0x1708: 0x0f36, 0x1709: 0x0f3a, 0x170a: 0x070e, 0x170b: 0x0f4e, -+ 0x170c: 0x0f4a, 0x170d: 0x1837, 0x170e: 0x0f2e, 0x170f: 0x0f6a, 0x1710: 0x183c, 0x1711: 0x1841, -+ 0x1712: 0x0f6e, 0x1713: 0x0f82, 0x1714: 0x0f7e, 0x1715: 0x0f7a, 0x1716: 0x0712, 0x1717: 0x0f86, -+ 0x1718: 0x0f96, 0x1719: 0x0f92, 0x171a: 0x0f9e, 0x171b: 0x177e, 0x171c: 0x0fae, 0x171d: 0x1846, -+ 0x171e: 0x0fba, 0x171f: 0x1850, 0x1720: 0x0fce, 0x1721: 0x0fda, 0x1722: 0x0fee, 0x1723: 0x1855, -+ 0x1724: 0x1002, 0x1725: 0x1006, 0x1726: 0x185a, 0x1727: 0x185f, 0x1728: 0x1022, 0x1729: 0x1032, -+ 0x172a: 0x0716, 0x172b: 0x1036, 0x172c: 0x071a, 0x172d: 0x071a, 0x172e: 0x104e, 0x172f: 0x1052, -+ 0x1730: 0x105a, 0x1731: 0x105e, 0x1732: 0x106a, 0x1733: 0x071e, 0x1734: 0x1082, 0x1735: 0x1864, -+ 0x1736: 0x109e, 0x1737: 0x1869, 0x1738: 0x10aa, 0x1739: 0x17ce, 0x173a: 0x10ba, 0x173b: 0x186e, -+ 0x173c: 0x1873, 0x173d: 0x1878, 0x173e: 0x0722, 0x173f: 0x0726, -+ // Block 0x5d, offset 0x1740 -+ 0x1740: 0x10f2, 0x1741: 0x1882, 0x1742: 0x187d, 0x1743: 0x1887, 0x1744: 0x188c, 0x1745: 0x10fa, -+ 0x1746: 0x10fe, 0x1747: 0x10fe, 0x1748: 0x1106, 0x1749: 0x072e, 0x174a: 0x110a, 0x174b: 0x0732, -+ 0x174c: 0x0736, 0x174d: 0x1896, 0x174e: 0x111e, 0x174f: 0x1126, 0x1750: 0x1132, 0x1751: 0x073a, -+ 0x1752: 0x189b, 0x1753: 0x1156, 0x1754: 0x18a0, 0x1755: 0x18a5, 0x1756: 0x1176, 0x1757: 0x118e, -+ 0x1758: 0x073e, 0x1759: 0x1196, 0x175a: 0x119a, 0x175b: 0x119e, 0x175c: 0x18aa, 0x175d: 0x18af, -+ 0x175e: 0x18af, 0x175f: 0x11b6, 0x1760: 0x0742, 0x1761: 0x18b4, 0x1762: 0x11ca, 0x1763: 0x11ce, -+ 0x1764: 0x0746, 0x1765: 0x18b9, 0x1766: 0x11ea, 0x1767: 0x074a, 0x1768: 0x11fa, 0x1769: 0x11f2, -+ 0x176a: 0x1202, 0x176b: 0x18c3, 0x176c: 0x121a, 0x176d: 0x074e, 0x176e: 0x1226, 0x176f: 0x122e, -+ 0x1770: 0x123e, 0x1771: 0x0752, 0x1772: 0x18cd, 0x1773: 0x18d2, 0x1774: 0x0756, 0x1775: 0x18d7, -+ 0x1776: 0x1256, 0x1777: 0x18dc, 0x1778: 0x1262, 0x1779: 0x126e, 0x177a: 0x1276, 0x177b: 0x18e1, -+ 0x177c: 0x18e6, 0x177d: 0x128a, 0x177e: 0x18eb, 0x177f: 0x1292, -+ // Block 0x5e, offset 0x1780 -+ 0x1780: 0x17fb, 0x1781: 0x075a, 0x1782: 0x12aa, 0x1783: 0x12ae, 0x1784: 0x0762, 0x1785: 0x12b2, -+ 0x1786: 0x0b2e, 0x1787: 0x18f0, 0x1788: 0x18f5, 0x1789: 0x1800, 0x178a: 0x1805, 0x178b: 0x12d2, -+ 0x178c: 0x12d6, 0x178d: 0x14ee, 0x178e: 0x0766, 0x178f: 0x1302, 0x1790: 0x12fe, 0x1791: 0x1306, -+ 0x1792: 0x093a, 0x1793: 0x130a, 0x1794: 0x130e, 0x1795: 0x1312, 0x1796: 0x131a, 0x1797: 0x18fa, -+ 0x1798: 0x1316, 0x1799: 0x131e, 0x179a: 0x1332, 0x179b: 0x1336, 0x179c: 0x1322, 0x179d: 0x133a, -+ 0x179e: 0x134e, 0x179f: 0x1362, 0x17a0: 0x132e, 0x17a1: 0x1342, 0x17a2: 0x1346, 0x17a3: 0x134a, -+ 0x17a4: 0x18ff, 0x17a5: 0x1909, 0x17a6: 0x1904, 0x17a7: 0x076a, 0x17a8: 0x136a, 0x17a9: 0x136e, -+ 0x17aa: 0x1376, 0x17ab: 0x191d, 0x17ac: 0x137a, 0x17ad: 0x190e, 0x17ae: 0x076e, 0x17af: 0x0772, -+ 0x17b0: 0x1913, 0x17b1: 0x1918, 0x17b2: 0x0776, 0x17b3: 0x139a, 0x17b4: 0x139e, 0x17b5: 0x13a2, -+ 0x17b6: 0x13a6, 0x17b7: 0x13b2, 0x17b8: 0x13ae, 0x17b9: 0x13ba, 0x17ba: 0x13b6, 0x17bb: 0x13c6, -+ 0x17bc: 0x13be, 0x17bd: 0x13c2, 0x17be: 0x13ca, 0x17bf: 0x077a, -+ // Block 0x5f, offset 0x17c0 -+ 0x17c0: 0x13d2, 0x17c1: 0x13d6, 0x17c2: 0x077e, 0x17c3: 0x13e6, 0x17c4: 0x13ea, 0x17c5: 0x1922, -+ 0x17c6: 0x13f6, 0x17c7: 0x13fa, 0x17c8: 0x0782, 0x17c9: 0x1406, 0x17ca: 0x06b6, 0x17cb: 0x1927, -+ 0x17cc: 0x192c, 0x17cd: 0x0786, 0x17ce: 0x078a, 0x17cf: 0x1432, 0x17d0: 0x144a, 0x17d1: 0x1466, -+ 0x17d2: 0x1476, 0x17d3: 0x1931, 0x17d4: 0x148a, 0x17d5: 0x148e, 0x17d6: 0x14a6, 0x17d7: 0x14b2, -+ 0x17d8: 0x193b, 0x17d9: 0x178d, 0x17da: 0x14be, 0x17db: 0x14ba, 0x17dc: 0x14c6, 0x17dd: 0x1792, -+ 0x17de: 0x14d2, 0x17df: 0x14de, 0x17e0: 0x1940, 0x17e1: 0x1945, 0x17e2: 0x151e, 0x17e3: 0x152a, -+ 0x17e4: 0x1532, 0x17e5: 0x194a, 0x17e6: 0x1536, 0x17e7: 0x1562, 0x17e8: 0x156e, 0x17e9: 0x1572, -+ 0x17ea: 0x156a, 0x17eb: 0x157e, 0x17ec: 0x1582, 0x17ed: 0x194f, 0x17ee: 0x158e, 0x17ef: 0x078e, -+ 0x17f0: 0x1596, 0x17f1: 0x1954, 0x17f2: 0x0792, 0x17f3: 0x15ce, 0x17f4: 0x0bbe, 0x17f5: 0x15e6, -+ 0x17f6: 0x1959, 0x17f7: 0x1963, 0x17f8: 0x0796, 0x17f9: 0x079a, 0x17fa: 0x160e, 0x17fb: 0x1968, -+ 0x17fc: 0x079e, 0x17fd: 0x196d, 0x17fe: 0x1626, 0x17ff: 0x1626, -+ // Block 0x60, offset 0x1800 -+ 0x1800: 0x162e, 0x1801: 0x1972, 0x1802: 0x1646, 0x1803: 0x07a2, 0x1804: 0x1656, 0x1805: 0x1662, -+ 0x1806: 0x166a, 0x1807: 0x1672, 0x1808: 0x07a6, 0x1809: 0x1977, 0x180a: 0x1686, 0x180b: 0x16a2, -+ 0x180c: 0x16ae, 0x180d: 0x07aa, 0x180e: 0x07ae, 0x180f: 0x16b2, 0x1810: 0x197c, 0x1811: 0x07b2, -+ 0x1812: 0x1981, 0x1813: 0x1986, 0x1814: 0x198b, 0x1815: 0x16d6, 0x1816: 0x07b6, 0x1817: 0x16ea, -+ 0x1818: 0x16f2, 0x1819: 0x16f6, 0x181a: 0x16fe, 0x181b: 0x1706, 0x181c: 0x170e, 0x181d: 0x1995, -+} -+ -+// nfkcIndex: 22 blocks, 1408 entries, 2816 bytes -+// Block 0 is the zero block. -+var nfkcIndex = [1408]uint16{ -+ // Block 0x0, offset 0x0 -+ // Block 0x1, offset 0x40 -+ // Block 0x2, offset 0x80 -+ // Block 0x3, offset 0xc0 -+ 0xc2: 0x5f, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x60, 0xc7: 0x04, -+ 0xc8: 0x05, 0xca: 0x61, 0xcb: 0x62, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, -+ 0xd0: 0x0a, 0xd1: 0x63, 0xd2: 0x64, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x65, -+ 0xd8: 0x66, 0xd9: 0x0d, 0xdb: 0x67, 0xdc: 0x68, 0xdd: 0x69, 0xdf: 0x6a, -+ 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, -+ 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, -+ 0xf0: 0x13, -+ // Block 0x4, offset 0x100 -+ 0x120: 0x6b, 0x121: 0x6c, 0x122: 0x6d, 0x123: 0x0e, 0x124: 0x6e, 0x125: 0x6f, 0x126: 0x70, 0x127: 0x71, -+ 0x128: 0x72, 0x129: 0x73, 0x12a: 0x74, 0x12b: 0x75, 0x12c: 0x70, 0x12d: 0x76, 0x12e: 0x77, 0x12f: 0x78, -+ 0x130: 0x74, 0x131: 0x79, 0x132: 0x7a, 0x133: 0x7b, 0x134: 0x7c, 0x135: 0x7d, 0x137: 0x7e, -+ 0x138: 0x7f, 0x139: 0x80, 0x13a: 0x81, 0x13b: 0x82, 0x13c: 0x83, 0x13d: 0x84, 0x13e: 0x85, 0x13f: 0x86, -+ // Block 0x5, offset 0x140 -+ 0x140: 0x87, 0x142: 0x88, 0x143: 0x89, 0x144: 0x8a, 0x145: 0x8b, 0x146: 0x8c, 0x147: 0x8d, -+ 0x14d: 0x8e, -+ 0x15c: 0x8f, 0x15f: 0x90, -+ 0x162: 0x91, 0x164: 0x92, -+ 0x168: 0x93, 0x169: 0x94, 0x16a: 0x95, 0x16b: 0x96, 0x16c: 0x0f, 0x16d: 0x97, 0x16e: 0x98, 0x16f: 0x99, -+ 0x170: 0x9a, 0x173: 0x9b, 0x174: 0x9c, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12, -+ 0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a, -+ // Block 0x6, offset 0x180 -+ 0x180: 0x9d, 0x181: 0x9e, 0x182: 0x9f, 0x183: 0xa0, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0xa1, 0x187: 0xa2, -+ 0x188: 0xa3, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0xa4, 0x18c: 0xa5, -+ 0x191: 0x1f, 0x192: 0x20, 0x193: 0xa6, -+ 0x1a8: 0xa7, 0x1a9: 0xa8, 0x1ab: 0xa9, -+ 0x1b1: 0xaa, 0x1b3: 0xab, 0x1b5: 0xac, 0x1b7: 0xad, -+ 0x1ba: 0xae, 0x1bb: 0xaf, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xb0, -+ // Block 0x7, offset 0x1c0 -+ 0x1c0: 0xb1, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xb2, 0x1c5: 0x27, 0x1c6: 0x28, -+ 0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30, -+ // Block 0x8, offset 0x200 -+ 0x219: 0xb3, 0x21a: 0xb4, 0x21b: 0xb5, 0x21d: 0xb6, 0x21f: 0xb7, -+ 0x220: 0xb8, 0x223: 0xb9, 0x224: 0xba, 0x225: 0xbb, 0x226: 0xbc, 0x227: 0xbd, -+ 0x22a: 0xbe, 0x22b: 0xbf, 0x22d: 0xc0, 0x22f: 0xc1, -+ 0x230: 0xc2, 0x231: 0xc3, 0x232: 0xc4, 0x233: 0xc5, 0x234: 0xc6, 0x235: 0xc7, 0x236: 0xc8, 0x237: 0xc2, -+ 0x238: 0xc3, 0x239: 0xc4, 0x23a: 0xc5, 0x23b: 0xc6, 0x23c: 0xc7, 0x23d: 0xc8, 0x23e: 0xc2, 0x23f: 0xc3, -+ // Block 0x9, offset 0x240 -+ 0x240: 0xc4, 0x241: 0xc5, 0x242: 0xc6, 0x243: 0xc7, 0x244: 0xc8, 0x245: 0xc2, 0x246: 0xc3, 0x247: 0xc4, -+ 0x248: 0xc5, 0x249: 0xc6, 0x24a: 0xc7, 0x24b: 0xc8, 0x24c: 0xc2, 0x24d: 0xc3, 0x24e: 0xc4, 0x24f: 0xc5, -+ 0x250: 0xc6, 0x251: 0xc7, 0x252: 0xc8, 0x253: 0xc2, 0x254: 0xc3, 0x255: 0xc4, 0x256: 0xc5, 0x257: 0xc6, -+ 0x258: 0xc7, 0x259: 0xc8, 0x25a: 0xc2, 0x25b: 0xc3, 0x25c: 0xc4, 0x25d: 0xc5, 0x25e: 0xc6, 0x25f: 0xc7, -+ 0x260: 0xc8, 0x261: 0xc2, 0x262: 0xc3, 0x263: 0xc4, 0x264: 0xc5, 0x265: 0xc6, 0x266: 0xc7, 0x267: 0xc8, -+ 0x268: 0xc2, 0x269: 0xc3, 0x26a: 0xc4, 0x26b: 0xc5, 0x26c: 0xc6, 0x26d: 0xc7, 0x26e: 0xc8, 0x26f: 0xc2, -+ 0x270: 0xc3, 0x271: 0xc4, 0x272: 0xc5, 0x273: 0xc6, 0x274: 0xc7, 0x275: 0xc8, 0x276: 0xc2, 0x277: 0xc3, -+ 0x278: 0xc4, 0x279: 0xc5, 0x27a: 0xc6, 0x27b: 0xc7, 0x27c: 0xc8, 0x27d: 0xc2, 0x27e: 0xc3, 0x27f: 0xc4, -+ // Block 0xa, offset 0x280 -+ 0x280: 0xc5, 0x281: 0xc6, 0x282: 0xc7, 0x283: 0xc8, 0x284: 0xc2, 0x285: 0xc3, 0x286: 0xc4, 0x287: 0xc5, -+ 0x288: 0xc6, 0x289: 0xc7, 0x28a: 0xc8, 0x28b: 0xc2, 0x28c: 0xc3, 0x28d: 0xc4, 0x28e: 0xc5, 0x28f: 0xc6, -+ 0x290: 0xc7, 0x291: 0xc8, 0x292: 0xc2, 0x293: 0xc3, 0x294: 0xc4, 0x295: 0xc5, 0x296: 0xc6, 0x297: 0xc7, -+ 0x298: 0xc8, 0x299: 0xc2, 0x29a: 0xc3, 0x29b: 0xc4, 0x29c: 0xc5, 0x29d: 0xc6, 0x29e: 0xc7, 0x29f: 0xc8, -+ 0x2a0: 0xc2, 0x2a1: 0xc3, 0x2a2: 0xc4, 0x2a3: 0xc5, 0x2a4: 0xc6, 0x2a5: 0xc7, 0x2a6: 0xc8, 0x2a7: 0xc2, -+ 0x2a8: 0xc3, 0x2a9: 0xc4, 0x2aa: 0xc5, 0x2ab: 0xc6, 0x2ac: 0xc7, 0x2ad: 0xc8, 0x2ae: 0xc2, 0x2af: 0xc3, -+ 0x2b0: 0xc4, 0x2b1: 0xc5, 0x2b2: 0xc6, 0x2b3: 0xc7, 0x2b4: 0xc8, 0x2b5: 0xc2, 0x2b6: 0xc3, 0x2b7: 0xc4, -+ 0x2b8: 0xc5, 0x2b9: 0xc6, 0x2ba: 0xc7, 0x2bb: 0xc8, 0x2bc: 0xc2, 0x2bd: 0xc3, 0x2be: 0xc4, 0x2bf: 0xc5, -+ // Block 0xb, offset 0x2c0 -+ 0x2c0: 0xc6, 0x2c1: 0xc7, 0x2c2: 0xc8, 0x2c3: 0xc2, 0x2c4: 0xc3, 0x2c5: 0xc4, 0x2c6: 0xc5, 0x2c7: 0xc6, -+ 0x2c8: 0xc7, 0x2c9: 0xc8, 0x2ca: 0xc2, 0x2cb: 0xc3, 0x2cc: 0xc4, 0x2cd: 0xc5, 0x2ce: 0xc6, 0x2cf: 0xc7, -+ 0x2d0: 0xc8, 0x2d1: 0xc2, 0x2d2: 0xc3, 0x2d3: 0xc4, 0x2d4: 0xc5, 0x2d5: 0xc6, 0x2d6: 0xc7, 0x2d7: 0xc8, -+ 0x2d8: 0xc2, 0x2d9: 0xc3, 0x2da: 0xc4, 0x2db: 0xc5, 0x2dc: 0xc6, 0x2dd: 0xc7, 0x2de: 0xc9, -+ // Block 0xc, offset 0x300 -+ 0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34, -+ 0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c, -+ 0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44, -+ 0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xca, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b, -+ // Block 0xd, offset 0x340 -+ 0x347: 0xcb, -+ 0x34b: 0xcc, 0x34d: 0xcd, -+ 0x35e: 0x4c, -+ 0x368: 0xce, 0x36b: 0xcf, -+ 0x374: 0xd0, -+ 0x37a: 0xd1, 0x37b: 0xd2, 0x37d: 0xd3, 0x37e: 0xd4, -+ // Block 0xe, offset 0x380 -+ 0x381: 0xd5, 0x382: 0xd6, 0x384: 0xd7, 0x385: 0xbc, 0x387: 0xd8, -+ 0x388: 0xd9, 0x38b: 0xda, 0x38c: 0xdb, 0x38d: 0xdc, -+ 0x391: 0xdd, 0x392: 0xde, 0x393: 0xdf, 0x396: 0xe0, 0x397: 0xe1, -+ 0x398: 0xe2, 0x39a: 0xe3, 0x39c: 0xe4, -+ 0x3a0: 0xe5, 0x3a4: 0xe6, 0x3a5: 0xe7, 0x3a7: 0xe8, -+ 0x3a8: 0xe9, 0x3a9: 0xea, 0x3aa: 0xeb, -+ 0x3b0: 0xe2, 0x3b5: 0xec, 0x3b6: 0xed, -+ 0x3bd: 0xee, -+ // Block 0xf, offset 0x3c0 -+ 0x3eb: 0xef, 0x3ec: 0xf0, -+ 0x3ff: 0xf1, -+ // Block 0x10, offset 0x400 -+ 0x432: 0xf2, -+ // Block 0x11, offset 0x440 -+ 0x445: 0xf3, 0x446: 0xf4, 0x447: 0xf5, -+ 0x449: 0xf6, -+ 0x450: 0xf7, 0x451: 0xf8, 0x452: 0xf9, 0x453: 0xfa, 0x454: 0xfb, 0x455: 0xfc, 0x456: 0xfd, 0x457: 0xfe, -+ 0x458: 0xff, 0x459: 0x100, 0x45a: 0x4d, 0x45b: 0x101, 0x45c: 0x102, 0x45d: 0x103, 0x45e: 0x104, 0x45f: 0x4e, -+ // Block 0x12, offset 0x480 -+ 0x480: 0x4f, 0x481: 0x50, 0x482: 0x105, 0x484: 0xf0, -+ 0x48a: 0x106, 0x48b: 0x107, -+ 0x493: 0x108, -+ 0x4a3: 0x109, 0x4a5: 0x10a, -+ 0x4b8: 0x51, 0x4b9: 0x52, 0x4ba: 0x53, -+ // Block 0x13, offset 0x4c0 -+ 0x4c4: 0x54, 0x4c5: 0x10b, 0x4c6: 0x10c, -+ 0x4c8: 0x55, 0x4c9: 0x10d, -+ 0x4ef: 0x10e, -+ // Block 0x14, offset 0x500 -+ 0x520: 0x56, 0x521: 0x57, 0x522: 0x58, 0x523: 0x59, 0x524: 0x5a, 0x525: 0x5b, 0x526: 0x5c, 0x527: 0x5d, -+ 0x528: 0x5e, -+ // Block 0x15, offset 0x540 -+ 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, -+ 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, -+ 0x56f: 0x12, -+} -+ -+// nfkcSparseOffset: 176 entries, 352 bytes -+var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1c, 0x26, 0x36, 0x38, 0x3d, 0x48, 0x57, 0x64, 0x6c, 0x71, 0x76, 0x78, 0x7c, 0x84, 0x8b, 0x8e, 0x96, 0x9a, 0x9e, 0xa0, 0xa2, 0xab, 0xaf, 0xb6, 0xbb, 0xbe, 0xc8, 0xcb, 0xd2, 0xda, 0xde, 0xe0, 0xe4, 0xe8, 0xee, 0xff, 0x10b, 0x10d, 0x113, 0x115, 0x117, 0x119, 0x11b, 0x11d, 0x11f, 0x121, 0x124, 0x127, 0x129, 0x12c, 0x12f, 0x133, 0x139, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x174, 0x182, 0x192, 0x1a0, 0x1a7, 0x1ad, 0x1bc, 0x1c0, 0x1c2, 0x1c6, 0x1c8, 0x1cb, 0x1cd, 0x1d0, 0x1d2, 0x1d5, 0x1d7, 0x1d9, 0x1db, 0x1e7, 0x1f1, 0x1fb, 0x1fe, 0x202, 0x204, 0x206, 0x20b, 0x20e, 0x211, 0x213, 0x215, 0x217, 0x219, 0x21f, 0x222, 0x227, 0x229, 0x230, 0x236, 0x23c, 0x244, 0x24a, 0x250, 0x256, 0x25a, 0x25c, 0x25e, 0x260, 0x262, 0x268, 0x26b, 0x26d, 0x26f, 0x271, 0x277, 0x27b, 0x27f, 0x287, 0x28e, 0x291, 0x294, 0x296, 0x299, 0x2a1, 0x2a5, 0x2ac, 0x2af, 0x2b5, 0x2b7, 0x2b9, 0x2bc, 0x2be, 0x2c1, 0x2c6, 0x2c8, 0x2ca, 0x2cc, 0x2ce, 0x2d0, 0x2d3, 0x2d5, 0x2d7, 0x2d9, 0x2db, 0x2dd, 0x2df, 0x2ec, 0x2f6, 0x2f8, 0x2fa, 0x2fe, 0x303, 0x30f, 0x314, 0x31d, 0x323, 0x328, 0x32c, 0x331, 0x335, 0x345, 0x353, 0x361, 0x36f, 0x371, 0x373, 0x375, 0x379, 0x37b, 0x37e, 0x389, 0x38b, 0x395} -+ -+// nfkcSparseValues: 919 entries, 3676 bytes -+var nfkcSparseValues = [919]valueRange{ -+ // Block 0x0, offset 0x0 -+ {value: 0x0002, lo: 0x0d}, -+ {value: 0x0001, lo: 0xa0, hi: 0xa0}, -+ {value: 0x43b9, lo: 0xa8, hi: 0xa8}, -+ {value: 0x0083, lo: 0xaa, hi: 0xaa}, -+ {value: 0x43a5, lo: 0xaf, hi: 0xaf}, -+ {value: 0x0025, lo: 0xb2, hi: 0xb3}, -+ {value: 0x439b, lo: 0xb4, hi: 0xb4}, -+ {value: 0x0260, lo: 0xb5, hi: 0xb5}, -+ {value: 0x43d2, lo: 0xb8, hi: 0xb8}, -+ {value: 0x0023, lo: 0xb9, hi: 0xb9}, -+ {value: 0x009f, lo: 0xba, hi: 0xba}, -+ {value: 0x234c, lo: 0xbc, hi: 0xbc}, -+ {value: 0x2340, lo: 0xbd, hi: 0xbd}, -+ {value: 0x23e2, lo: 0xbe, hi: 0xbe}, -+ // Block 0x1, offset 0xe -+ {value: 0x0091, lo: 0x03}, -+ {value: 0x4823, lo: 0xa0, hi: 0xa1}, -+ {value: 0x4855, lo: 0xaf, hi: 0xb0}, -+ {value: 0xa000, lo: 0xb7, hi: 0xb7}, -+ // Block 0x2, offset 0x12 -+ {value: 0x0004, lo: 0x09}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0x0091, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0140, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0095, lo: 0xb2, hi: 0xb2}, -+ {value: 0x00a5, lo: 0xb3, hi: 0xb3}, -+ {value: 0x0179, lo: 0xb4, hi: 0xb4}, -+ {value: 0x017f, lo: 0xb5, hi: 0xb5}, -+ {value: 0x018b, lo: 0xb6, hi: 0xb6}, -+ {value: 0x00af, lo: 0xb7, hi: 0xb8}, -+ // Block 0x3, offset 0x1c -+ {value: 0x000a, lo: 0x09}, -+ {value: 0x43af, lo: 0x98, hi: 0x98}, -+ {value: 0x43b4, lo: 0x99, hi: 0x9a}, -+ {value: 0x43d7, lo: 0x9b, hi: 0x9b}, -+ {value: 0x43a0, lo: 0x9c, hi: 0x9c}, -+ {value: 0x43c3, lo: 0x9d, hi: 0x9d}, -+ {value: 0x0137, lo: 0xa0, hi: 0xa0}, -+ {value: 0x0099, lo: 0xa1, hi: 0xa1}, -+ {value: 0x00a7, lo: 0xa2, hi: 0xa3}, -+ {value: 0x01b8, lo: 0xa4, hi: 0xa4}, -+ // Block 0x4, offset 0x26 -+ {value: 0x0000, lo: 0x0f}, -+ {value: 0xa000, lo: 0x83, hi: 0x83}, -+ {value: 0xa000, lo: 0x87, hi: 0x87}, -+ {value: 0xa000, lo: 0x8b, hi: 0x8b}, -+ {value: 0xa000, lo: 0x8d, hi: 0x8d}, -+ {value: 0x38e6, lo: 0x90, hi: 0x90}, -+ {value: 0x38f2, lo: 0x91, hi: 0x91}, -+ {value: 0x38e0, lo: 0x93, hi: 0x93}, -+ {value: 0xa000, lo: 0x96, hi: 0x96}, -+ {value: 0x3958, lo: 0x97, hi: 0x97}, -+ {value: 0x3922, lo: 0x9c, hi: 0x9c}, -+ {value: 0x390a, lo: 0x9d, hi: 0x9d}, -+ {value: 0x3934, lo: 0x9e, hi: 0x9e}, -+ {value: 0xa000, lo: 0xb4, hi: 0xb5}, -+ {value: 0x395e, lo: 0xb6, hi: 0xb6}, -+ {value: 0x3964, lo: 0xb7, hi: 0xb7}, -+ // Block 0x5, offset 0x36 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x83, hi: 0x87}, -+ // Block 0x6, offset 0x38 -+ {value: 0x0001, lo: 0x04}, -+ {value: 0x8114, lo: 0x81, hi: 0x82}, -+ {value: 0x8133, lo: 0x84, hi: 0x84}, -+ {value: 0x812e, lo: 0x85, hi: 0x85}, -+ {value: 0x810e, lo: 0x87, hi: 0x87}, -+ // Block 0x7, offset 0x3d -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x8133, lo: 0x90, hi: 0x97}, -+ {value: 0x811a, lo: 0x98, hi: 0x98}, -+ {value: 0x811b, lo: 0x99, hi: 0x99}, -+ {value: 0x811c, lo: 0x9a, hi: 0x9a}, -+ {value: 0x3982, lo: 0xa2, hi: 0xa2}, -+ {value: 0x3988, lo: 0xa3, hi: 0xa3}, -+ {value: 0x3994, lo: 0xa4, hi: 0xa4}, -+ {value: 0x398e, lo: 0xa5, hi: 0xa5}, -+ {value: 0x399a, lo: 0xa6, hi: 0xa6}, -+ {value: 0xa000, lo: 0xa7, hi: 0xa7}, -+ // Block 0x8, offset 0x48 -+ {value: 0x0000, lo: 0x0e}, -+ {value: 0x39ac, lo: 0x80, hi: 0x80}, -+ {value: 0xa000, lo: 0x81, hi: 0x81}, -+ {value: 0x39a0, lo: 0x82, hi: 0x82}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0x39a6, lo: 0x93, hi: 0x93}, -+ {value: 0xa000, lo: 0x95, hi: 0x95}, -+ {value: 0x8133, lo: 0x96, hi: 0x9c}, -+ {value: 0x8133, lo: 0x9f, hi: 0xa2}, -+ {value: 0x812e, lo: 0xa3, hi: 0xa3}, -+ {value: 0x8133, lo: 0xa4, hi: 0xa4}, -+ {value: 0x8133, lo: 0xa7, hi: 0xa8}, -+ {value: 0x812e, lo: 0xaa, hi: 0xaa}, -+ {value: 0x8133, lo: 0xab, hi: 0xac}, -+ {value: 0x812e, lo: 0xad, hi: 0xad}, -+ // Block 0x9, offset 0x57 -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x8120, lo: 0x91, hi: 0x91}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb0}, -+ {value: 0x812e, lo: 0xb1, hi: 0xb1}, -+ {value: 0x8133, lo: 0xb2, hi: 0xb3}, -+ {value: 0x812e, lo: 0xb4, hi: 0xb4}, -+ {value: 0x8133, lo: 0xb5, hi: 0xb6}, -+ {value: 0x812e, lo: 0xb7, hi: 0xb9}, -+ {value: 0x8133, lo: 0xba, hi: 0xba}, -+ {value: 0x812e, lo: 0xbb, hi: 0xbc}, -+ {value: 0x8133, lo: 0xbd, hi: 0xbd}, -+ {value: 0x812e, lo: 0xbe, hi: 0xbe}, -+ {value: 0x8133, lo: 0xbf, hi: 0xbf}, -+ // Block 0xa, offset 0x64 -+ {value: 0x0005, lo: 0x07}, -+ {value: 0x8133, lo: 0x80, hi: 0x80}, -+ {value: 0x8133, lo: 0x81, hi: 0x81}, -+ {value: 0x812e, lo: 0x82, hi: 0x83}, -+ {value: 0x812e, lo: 0x84, hi: 0x85}, -+ {value: 0x812e, lo: 0x86, hi: 0x87}, -+ {value: 0x812e, lo: 0x88, hi: 0x89}, -+ {value: 0x8133, lo: 0x8a, hi: 0x8a}, -+ // Block 0xb, offset 0x6c -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x8133, lo: 0xab, hi: 0xb1}, -+ {value: 0x812e, lo: 0xb2, hi: 0xb2}, -+ {value: 0x8133, lo: 0xb3, hi: 0xb3}, -+ {value: 0x812e, lo: 0xbd, hi: 0xbd}, -+ // Block 0xc, offset 0x71 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x8133, lo: 0x96, hi: 0x99}, -+ {value: 0x8133, lo: 0x9b, hi: 0xa3}, -+ {value: 0x8133, lo: 0xa5, hi: 0xa7}, -+ {value: 0x8133, lo: 0xa9, hi: 0xad}, -+ // Block 0xd, offset 0x76 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0x99, hi: 0x9b}, -+ // Block 0xe, offset 0x78 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8133, lo: 0x98, hi: 0x98}, -+ {value: 0x812e, lo: 0x99, hi: 0x9b}, -+ {value: 0x8133, lo: 0x9c, hi: 0x9f}, -+ // Block 0xf, offset 0x7c -+ {value: 0x0000, lo: 0x07}, -+ {value: 0xa000, lo: 0xa8, hi: 0xa8}, -+ {value: 0x4019, lo: 0xa9, hi: 0xa9}, -+ {value: 0xa000, lo: 0xb0, hi: 0xb0}, -+ {value: 0x4021, lo: 0xb1, hi: 0xb1}, -+ {value: 0xa000, lo: 0xb3, hi: 0xb3}, -+ {value: 0x4029, lo: 0xb4, hi: 0xb4}, -+ {value: 0x9903, lo: 0xbc, hi: 0xbc}, -+ // Block 0x10, offset 0x84 -+ {value: 0x0008, lo: 0x06}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x8133, lo: 0x91, hi: 0x91}, -+ {value: 0x812e, lo: 0x92, hi: 0x92}, -+ {value: 0x8133, lo: 0x93, hi: 0x93}, -+ {value: 0x8133, lo: 0x94, hi: 0x94}, -+ {value: 0x465d, lo: 0x98, hi: 0x9f}, -+ // Block 0x11, offset 0x8b -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0xbc, hi: 0xbc}, -+ {value: 0x9900, lo: 0xbe, hi: 0xbe}, -+ // Block 0x12, offset 0x8e -+ {value: 0x0008, lo: 0x07}, -+ {value: 0xa000, lo: 0x87, hi: 0x87}, -+ {value: 0x2dd5, lo: 0x8b, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x97, hi: 0x97}, -+ {value: 0x469d, lo: 0x9c, hi: 0x9d}, -+ {value: 0x46ad, lo: 0x9f, hi: 0x9f}, -+ {value: 0x8133, lo: 0xbe, hi: 0xbe}, -+ // Block 0x13, offset 0x96 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x46d5, lo: 0xb3, hi: 0xb3}, -+ {value: 0x46dd, lo: 0xb6, hi: 0xb6}, -+ {value: 0x8103, lo: 0xbc, hi: 0xbc}, -+ // Block 0x14, offset 0x9a -+ {value: 0x0008, lo: 0x03}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x46b5, lo: 0x99, hi: 0x9b}, -+ {value: 0x46cd, lo: 0x9e, hi: 0x9e}, -+ // Block 0x15, offset 0x9e -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0xbc, hi: 0xbc}, -+ // Block 0x16, offset 0xa0 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ // Block 0x17, offset 0xa2 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0xa000, lo: 0x87, hi: 0x87}, -+ {value: 0x2ded, lo: 0x88, hi: 0x88}, -+ {value: 0x2de5, lo: 0x8b, hi: 0x8b}, -+ {value: 0x2df5, lo: 0x8c, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x96, hi: 0x97}, -+ {value: 0x46e5, lo: 0x9c, hi: 0x9c}, -+ {value: 0x46ed, lo: 0x9d, hi: 0x9d}, -+ // Block 0x18, offset 0xab -+ {value: 0x0000, lo: 0x03}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0x2dfd, lo: 0x94, hi: 0x94}, -+ {value: 0x9900, lo: 0xbe, hi: 0xbe}, -+ // Block 0x19, offset 0xaf -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xa000, lo: 0x86, hi: 0x87}, -+ {value: 0x2e05, lo: 0x8a, hi: 0x8a}, -+ {value: 0x2e15, lo: 0x8b, hi: 0x8b}, -+ {value: 0x2e0d, lo: 0x8c, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x97, hi: 0x97}, -+ // Block 0x1a, offset 0xb6 -+ {value: 0x1801, lo: 0x04}, -+ {value: 0xa000, lo: 0x86, hi: 0x86}, -+ {value: 0x4031, lo: 0x88, hi: 0x88}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x8121, lo: 0x95, hi: 0x96}, -+ // Block 0x1b, offset 0xbb -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0xbc, hi: 0xbc}, -+ {value: 0xa000, lo: 0xbf, hi: 0xbf}, -+ // Block 0x1c, offset 0xbe -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x2e1d, lo: 0x80, hi: 0x80}, -+ {value: 0x9900, lo: 0x82, hi: 0x82}, -+ {value: 0xa000, lo: 0x86, hi: 0x86}, -+ {value: 0x2e25, lo: 0x87, hi: 0x87}, -+ {value: 0x2e2d, lo: 0x88, hi: 0x88}, -+ {value: 0x3091, lo: 0x8a, hi: 0x8a}, -+ {value: 0x2f19, lo: 0x8b, hi: 0x8b}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x95, hi: 0x96}, -+ // Block 0x1d, offset 0xc8 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0xbb, hi: 0xbc}, -+ {value: 0x9900, lo: 0xbe, hi: 0xbe}, -+ // Block 0x1e, offset 0xcb -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xa000, lo: 0x86, hi: 0x87}, -+ {value: 0x2e35, lo: 0x8a, hi: 0x8a}, -+ {value: 0x2e45, lo: 0x8b, hi: 0x8b}, -+ {value: 0x2e3d, lo: 0x8c, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x97, hi: 0x97}, -+ // Block 0x1f, offset 0xd2 -+ {value: 0x6ab3, lo: 0x07}, -+ {value: 0x9905, lo: 0x8a, hi: 0x8a}, -+ {value: 0x9900, lo: 0x8f, hi: 0x8f}, -+ {value: 0xa000, lo: 0x99, hi: 0x99}, -+ {value: 0x4039, lo: 0x9a, hi: 0x9a}, -+ {value: 0x3099, lo: 0x9c, hi: 0x9c}, -+ {value: 0x2f24, lo: 0x9d, hi: 0x9d}, -+ {value: 0x2e4d, lo: 0x9e, hi: 0x9f}, -+ // Block 0x20, offset 0xda -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x2751, lo: 0xb3, hi: 0xb3}, -+ {value: 0x8123, lo: 0xb8, hi: 0xb9}, -+ {value: 0x8105, lo: 0xba, hi: 0xba}, -+ // Block 0x21, offset 0xde -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8124, lo: 0x88, hi: 0x8b}, -+ // Block 0x22, offset 0xe0 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x2766, lo: 0xb3, hi: 0xb3}, -+ {value: 0x8125, lo: 0xb8, hi: 0xb9}, -+ {value: 0x8105, lo: 0xba, hi: 0xba}, -+ // Block 0x23, offset 0xe4 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8126, lo: 0x88, hi: 0x8b}, -+ {value: 0x2758, lo: 0x9c, hi: 0x9c}, -+ {value: 0x275f, lo: 0x9d, hi: 0x9d}, -+ // Block 0x24, offset 0xe8 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x03fe, lo: 0x8c, hi: 0x8c}, -+ {value: 0x812e, lo: 0x98, hi: 0x99}, -+ {value: 0x812e, lo: 0xb5, hi: 0xb5}, -+ {value: 0x812e, lo: 0xb7, hi: 0xb7}, -+ {value: 0x812c, lo: 0xb9, hi: 0xb9}, -+ // Block 0x25, offset 0xee -+ {value: 0x0000, lo: 0x10}, -+ {value: 0x2774, lo: 0x83, hi: 0x83}, -+ {value: 0x277b, lo: 0x8d, hi: 0x8d}, -+ {value: 0x2782, lo: 0x92, hi: 0x92}, -+ {value: 0x2789, lo: 0x97, hi: 0x97}, -+ {value: 0x2790, lo: 0x9c, hi: 0x9c}, -+ {value: 0x276d, lo: 0xa9, hi: 0xa9}, -+ {value: 0x8127, lo: 0xb1, hi: 0xb1}, -+ {value: 0x8128, lo: 0xb2, hi: 0xb2}, -+ {value: 0x4bc5, lo: 0xb3, hi: 0xb3}, -+ {value: 0x8129, lo: 0xb4, hi: 0xb4}, -+ {value: 0x4bce, lo: 0xb5, hi: 0xb5}, -+ {value: 0x46f5, lo: 0xb6, hi: 0xb6}, -+ {value: 0x4735, lo: 0xb7, hi: 0xb7}, -+ {value: 0x46fd, lo: 0xb8, hi: 0xb8}, -+ {value: 0x4740, lo: 0xb9, hi: 0xb9}, -+ {value: 0x8128, lo: 0xba, hi: 0xbd}, -+ // Block 0x26, offset 0xff -+ {value: 0x0000, lo: 0x0b}, -+ {value: 0x8128, lo: 0x80, hi: 0x80}, -+ {value: 0x4bd7, lo: 0x81, hi: 0x81}, -+ {value: 0x8133, lo: 0x82, hi: 0x83}, -+ {value: 0x8105, lo: 0x84, hi: 0x84}, -+ {value: 0x8133, lo: 0x86, hi: 0x87}, -+ {value: 0x279e, lo: 0x93, hi: 0x93}, -+ {value: 0x27a5, lo: 0x9d, hi: 0x9d}, -+ {value: 0x27ac, lo: 0xa2, hi: 0xa2}, -+ {value: 0x27b3, lo: 0xa7, hi: 0xa7}, -+ {value: 0x27ba, lo: 0xac, hi: 0xac}, -+ {value: 0x2797, lo: 0xb9, hi: 0xb9}, -+ // Block 0x27, offset 0x10b -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0x86, hi: 0x86}, -+ // Block 0x28, offset 0x10d -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xa000, lo: 0xa5, hi: 0xa5}, -+ {value: 0x2e55, lo: 0xa6, hi: 0xa6}, -+ {value: 0x9900, lo: 0xae, hi: 0xae}, -+ {value: 0x8103, lo: 0xb7, hi: 0xb7}, -+ {value: 0x8105, lo: 0xb9, hi: 0xba}, -+ // Block 0x29, offset 0x113 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0x8d, hi: 0x8d}, -+ // Block 0x2a, offset 0x115 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x0402, lo: 0xbc, hi: 0xbc}, -+ // Block 0x2b, offset 0x117 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0xa000, lo: 0x80, hi: 0x92}, -+ // Block 0x2c, offset 0x119 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0xb900, lo: 0xa1, hi: 0xb5}, -+ // Block 0x2d, offset 0x11b -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x9900, lo: 0xa8, hi: 0xbf}, -+ // Block 0x2e, offset 0x11d -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x9900, lo: 0x80, hi: 0x82}, -+ // Block 0x2f, offset 0x11f -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x9d, hi: 0x9f}, -+ // Block 0x30, offset 0x121 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x94, hi: 0x95}, -+ {value: 0x8105, lo: 0xb4, hi: 0xb4}, -+ // Block 0x31, offset 0x124 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x92, hi: 0x92}, -+ {value: 0x8133, lo: 0x9d, hi: 0x9d}, -+ // Block 0x32, offset 0x127 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8132, lo: 0xa9, hi: 0xa9}, -+ // Block 0x33, offset 0x129 -+ {value: 0x0004, lo: 0x02}, -+ {value: 0x812f, lo: 0xb9, hi: 0xba}, -+ {value: 0x812e, lo: 0xbb, hi: 0xbb}, -+ // Block 0x34, offset 0x12c -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0x97, hi: 0x97}, -+ {value: 0x812e, lo: 0x98, hi: 0x98}, -+ // Block 0x35, offset 0x12f -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8105, lo: 0xa0, hi: 0xa0}, -+ {value: 0x8133, lo: 0xb5, hi: 0xbc}, -+ {value: 0x812e, lo: 0xbf, hi: 0xbf}, -+ // Block 0x36, offset 0x133 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb4}, -+ {value: 0x812e, lo: 0xb5, hi: 0xba}, -+ {value: 0x8133, lo: 0xbb, hi: 0xbc}, -+ {value: 0x812e, lo: 0xbd, hi: 0xbd}, -+ {value: 0x812e, lo: 0xbf, hi: 0xbf}, -+ // Block 0x37, offset 0x139 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x812e, lo: 0x80, hi: 0x80}, -+ {value: 0x8133, lo: 0x81, hi: 0x82}, -+ {value: 0x812e, lo: 0x83, hi: 0x84}, -+ {value: 0x8133, lo: 0x85, hi: 0x89}, -+ {value: 0x812e, lo: 0x8a, hi: 0x8a}, -+ {value: 0x8133, lo: 0x8b, hi: 0x8e}, -+ // Block 0x38, offset 0x140 -+ {value: 0x0000, lo: 0x08}, -+ {value: 0x2e9d, lo: 0x80, hi: 0x80}, -+ {value: 0x2ea5, lo: 0x81, hi: 0x81}, -+ {value: 0xa000, lo: 0x82, hi: 0x82}, -+ {value: 0x2ead, lo: 0x83, hi: 0x83}, -+ {value: 0x8105, lo: 0x84, hi: 0x84}, -+ {value: 0x8133, lo: 0xab, hi: 0xab}, -+ {value: 0x812e, lo: 0xac, hi: 0xac}, -+ {value: 0x8133, lo: 0xad, hi: 0xb3}, -+ // Block 0x39, offset 0x149 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xaa, hi: 0xab}, -+ // Block 0x3a, offset 0x14b -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0xa6, hi: 0xa6}, -+ {value: 0x8105, lo: 0xb2, hi: 0xb3}, -+ // Block 0x3b, offset 0x14e -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0xb7, hi: 0xb7}, -+ // Block 0x3c, offset 0x150 -+ {value: 0x0000, lo: 0x0a}, -+ {value: 0x8133, lo: 0x90, hi: 0x92}, -+ {value: 0x8101, lo: 0x94, hi: 0x94}, -+ {value: 0x812e, lo: 0x95, hi: 0x99}, -+ {value: 0x8133, lo: 0x9a, hi: 0x9b}, -+ {value: 0x812e, lo: 0x9c, hi: 0x9f}, -+ {value: 0x8133, lo: 0xa0, hi: 0xa0}, -+ {value: 0x8101, lo: 0xa2, hi: 0xa8}, -+ {value: 0x812e, lo: 0xad, hi: 0xad}, -+ {value: 0x8133, lo: 0xb4, hi: 0xb4}, -+ {value: 0x8133, lo: 0xb8, hi: 0xb9}, -+ // Block 0x3d, offset 0x15b -+ {value: 0x0002, lo: 0x0a}, -+ {value: 0x0043, lo: 0xac, hi: 0xac}, -+ {value: 0x00d1, lo: 0xad, hi: 0xad}, -+ {value: 0x0045, lo: 0xae, hi: 0xae}, -+ {value: 0x0049, lo: 0xb0, hi: 0xb1}, -+ {value: 0x00ec, lo: 0xb2, hi: 0xb2}, -+ {value: 0x004f, lo: 0xb3, hi: 0xba}, -+ {value: 0x005f, lo: 0xbc, hi: 0xbc}, -+ {value: 0x00fe, lo: 0xbd, hi: 0xbd}, -+ {value: 0x0061, lo: 0xbe, hi: 0xbe}, -+ {value: 0x0065, lo: 0xbf, hi: 0xbf}, -+ // Block 0x3e, offset 0x166 -+ {value: 0x0000, lo: 0x0d}, -+ {value: 0x0001, lo: 0x80, hi: 0x8a}, -+ {value: 0x0532, lo: 0x91, hi: 0x91}, -+ {value: 0x43dc, lo: 0x97, hi: 0x97}, -+ {value: 0x001d, lo: 0xa4, hi: 0xa4}, -+ {value: 0x19a0, lo: 0xa5, hi: 0xa5}, -+ {value: 0x1c8c, lo: 0xa6, hi: 0xa6}, -+ {value: 0x0001, lo: 0xaf, hi: 0xaf}, -+ {value: 0x27c1, lo: 0xb3, hi: 0xb3}, -+ {value: 0x2935, lo: 0xb4, hi: 0xb4}, -+ {value: 0x27c8, lo: 0xb6, hi: 0xb6}, -+ {value: 0x293f, lo: 0xb7, hi: 0xb7}, -+ {value: 0x199a, lo: 0xbc, hi: 0xbc}, -+ {value: 0x43aa, lo: 0xbe, hi: 0xbe}, -+ // Block 0x3f, offset 0x174 -+ {value: 0x0002, lo: 0x0d}, -+ {value: 0x1a60, lo: 0x87, hi: 0x87}, -+ {value: 0x1a5d, lo: 0x88, hi: 0x88}, -+ {value: 0x199d, lo: 0x89, hi: 0x89}, -+ {value: 0x2ac5, lo: 0x97, hi: 0x97}, -+ {value: 0x0001, lo: 0x9f, hi: 0x9f}, -+ {value: 0x0021, lo: 0xb0, hi: 0xb0}, -+ {value: 0x0093, lo: 0xb1, hi: 0xb1}, -+ {value: 0x0029, lo: 0xb4, hi: 0xb9}, -+ {value: 0x0017, lo: 0xba, hi: 0xba}, -+ {value: 0x055e, lo: 0xbb, hi: 0xbb}, -+ {value: 0x003b, lo: 0xbc, hi: 0xbc}, -+ {value: 0x0011, lo: 0xbd, hi: 0xbe}, -+ {value: 0x009d, lo: 0xbf, hi: 0xbf}, -+ // Block 0x40, offset 0x182 -+ {value: 0x0002, lo: 0x0f}, -+ {value: 0x0021, lo: 0x80, hi: 0x89}, -+ {value: 0x0017, lo: 0x8a, hi: 0x8a}, -+ {value: 0x055e, lo: 0x8b, hi: 0x8b}, -+ {value: 0x003b, lo: 0x8c, hi: 0x8c}, -+ {value: 0x0011, lo: 0x8d, hi: 0x8e}, -+ {value: 0x0083, lo: 0x90, hi: 0x90}, -+ {value: 0x008b, lo: 0x91, hi: 0x91}, -+ {value: 0x009f, lo: 0x92, hi: 0x92}, -+ {value: 0x00b1, lo: 0x93, hi: 0x93}, -+ {value: 0x011f, lo: 0x94, hi: 0x94}, -+ {value: 0x0091, lo: 0x95, hi: 0x95}, -+ {value: 0x0097, lo: 0x96, hi: 0x99}, -+ {value: 0x00a1, lo: 0x9a, hi: 0x9a}, -+ {value: 0x00a7, lo: 0x9b, hi: 0x9c}, -+ {value: 0x1ac9, lo: 0xa8, hi: 0xa8}, -+ // Block 0x41, offset 0x192 -+ {value: 0x0000, lo: 0x0d}, -+ {value: 0x8133, lo: 0x90, hi: 0x91}, -+ {value: 0x8101, lo: 0x92, hi: 0x93}, -+ {value: 0x8133, lo: 0x94, hi: 0x97}, -+ {value: 0x8101, lo: 0x98, hi: 0x9a}, -+ {value: 0x8133, lo: 0x9b, hi: 0x9c}, -+ {value: 0x8133, lo: 0xa1, hi: 0xa1}, -+ {value: 0x8101, lo: 0xa5, hi: 0xa6}, -+ {value: 0x8133, lo: 0xa7, hi: 0xa7}, -+ {value: 0x812e, lo: 0xa8, hi: 0xa8}, -+ {value: 0x8133, lo: 0xa9, hi: 0xa9}, -+ {value: 0x8101, lo: 0xaa, hi: 0xab}, -+ {value: 0x812e, lo: 0xac, hi: 0xaf}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb0}, -+ // Block 0x42, offset 0x1a0 -+ {value: 0x0007, lo: 0x06}, -+ {value: 0x22b0, lo: 0x89, hi: 0x89}, -+ {value: 0xa000, lo: 0x90, hi: 0x90}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0xa000, lo: 0x94, hi: 0x94}, -+ {value: 0x3cfa, lo: 0x9a, hi: 0x9b}, -+ {value: 0x3d08, lo: 0xae, hi: 0xae}, -+ // Block 0x43, offset 0x1a7 -+ {value: 0x000e, lo: 0x05}, -+ {value: 0x3d0f, lo: 0x8d, hi: 0x8e}, -+ {value: 0x3d16, lo: 0x8f, hi: 0x8f}, -+ {value: 0xa000, lo: 0x90, hi: 0x90}, -+ {value: 0xa000, lo: 0x92, hi: 0x92}, -+ {value: 0xa000, lo: 0x94, hi: 0x94}, -+ // Block 0x44, offset 0x1ad -+ {value: 0x017a, lo: 0x0e}, -+ {value: 0xa000, lo: 0x83, hi: 0x83}, -+ {value: 0x3d24, lo: 0x84, hi: 0x84}, -+ {value: 0xa000, lo: 0x88, hi: 0x88}, -+ {value: 0x3d2b, lo: 0x89, hi: 0x89}, -+ {value: 0xa000, lo: 0x8b, hi: 0x8b}, -+ {value: 0x3d32, lo: 0x8c, hi: 0x8c}, -+ {value: 0xa000, lo: 0xa3, hi: 0xa3}, -+ {value: 0x3d39, lo: 0xa4, hi: 0xa4}, -+ {value: 0xa000, lo: 0xa5, hi: 0xa5}, -+ {value: 0x3d40, lo: 0xa6, hi: 0xa6}, -+ {value: 0x27cf, lo: 0xac, hi: 0xad}, -+ {value: 0x27d6, lo: 0xaf, hi: 0xaf}, -+ {value: 0x2953, lo: 0xb0, hi: 0xb0}, -+ {value: 0xa000, lo: 0xbc, hi: 0xbc}, -+ // Block 0x45, offset 0x1bc -+ {value: 0x0007, lo: 0x03}, -+ {value: 0x3da9, lo: 0xa0, hi: 0xa1}, -+ {value: 0x3dd3, lo: 0xa2, hi: 0xa3}, -+ {value: 0x3dfd, lo: 0xaa, hi: 0xad}, -+ // Block 0x46, offset 0x1c0 -+ {value: 0x0004, lo: 0x01}, -+ {value: 0x0586, lo: 0xa9, hi: 0xaa}, -+ // Block 0x47, offset 0x1c2 -+ {value: 0x0002, lo: 0x03}, -+ {value: 0x0057, lo: 0x80, hi: 0x8f}, -+ {value: 0x0083, lo: 0x90, hi: 0xa9}, -+ {value: 0x0021, lo: 0xaa, hi: 0xaa}, -+ // Block 0x48, offset 0x1c6 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x2ad2, lo: 0x8c, hi: 0x8c}, -+ // Block 0x49, offset 0x1c8 -+ {value: 0x0266, lo: 0x02}, -+ {value: 0x1cbc, lo: 0xb4, hi: 0xb4}, -+ {value: 0x1a5a, lo: 0xb5, hi: 0xb6}, -+ // Block 0x4a, offset 0x1cb -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x461e, lo: 0x9c, hi: 0x9c}, -+ // Block 0x4b, offset 0x1cd -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x0095, lo: 0xbc, hi: 0xbc}, -+ {value: 0x006d, lo: 0xbd, hi: 0xbd}, -+ // Block 0x4c, offset 0x1d0 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xaf, hi: 0xb1}, -+ // Block 0x4d, offset 0x1d2 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x057a, lo: 0xaf, hi: 0xaf}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x4e, offset 0x1d5 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xa0, hi: 0xbf}, -+ // Block 0x4f, offset 0x1d7 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x0ebe, lo: 0x9f, hi: 0x9f}, -+ // Block 0x50, offset 0x1d9 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x172a, lo: 0xb3, hi: 0xb3}, -+ // Block 0x51, offset 0x1db -+ {value: 0x0004, lo: 0x0b}, -+ {value: 0x1692, lo: 0x80, hi: 0x82}, -+ {value: 0x16aa, lo: 0x83, hi: 0x83}, -+ {value: 0x16c2, lo: 0x84, hi: 0x85}, -+ {value: 0x16d2, lo: 0x86, hi: 0x89}, -+ {value: 0x16e6, lo: 0x8a, hi: 0x8c}, -+ {value: 0x16fa, lo: 0x8d, hi: 0x8d}, -+ {value: 0x1702, lo: 0x8e, hi: 0x8e}, -+ {value: 0x170a, lo: 0x8f, hi: 0x90}, -+ {value: 0x1716, lo: 0x91, hi: 0x93}, -+ {value: 0x1726, lo: 0x94, hi: 0x94}, -+ {value: 0x172e, lo: 0x95, hi: 0x95}, -+ // Block 0x52, offset 0x1e7 -+ {value: 0x0004, lo: 0x09}, -+ {value: 0x0001, lo: 0x80, hi: 0x80}, -+ {value: 0x812d, lo: 0xaa, hi: 0xaa}, -+ {value: 0x8132, lo: 0xab, hi: 0xab}, -+ {value: 0x8134, lo: 0xac, hi: 0xac}, -+ {value: 0x812f, lo: 0xad, hi: 0xad}, -+ {value: 0x8130, lo: 0xae, hi: 0xae}, -+ {value: 0x8130, lo: 0xaf, hi: 0xaf}, -+ {value: 0x05ae, lo: 0xb6, hi: 0xb6}, -+ {value: 0x0982, lo: 0xb8, hi: 0xba}, -+ // Block 0x53, offset 0x1f1 -+ {value: 0x0006, lo: 0x09}, -+ {value: 0x0406, lo: 0xb1, hi: 0xb1}, -+ {value: 0x040a, lo: 0xb2, hi: 0xb2}, -+ {value: 0x4b7c, lo: 0xb3, hi: 0xb3}, -+ {value: 0x040e, lo: 0xb4, hi: 0xb4}, -+ {value: 0x4b82, lo: 0xb5, hi: 0xb6}, -+ {value: 0x0412, lo: 0xb7, hi: 0xb7}, -+ {value: 0x0416, lo: 0xb8, hi: 0xb8}, -+ {value: 0x041a, lo: 0xb9, hi: 0xb9}, -+ {value: 0x4b8e, lo: 0xba, hi: 0xbf}, -+ // Block 0x54, offset 0x1fb -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0xaf, hi: 0xaf}, -+ {value: 0x8133, lo: 0xb4, hi: 0xbd}, -+ // Block 0x55, offset 0x1fe -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x02d8, lo: 0x9c, hi: 0x9c}, -+ {value: 0x02de, lo: 0x9d, hi: 0x9d}, -+ {value: 0x8133, lo: 0x9e, hi: 0x9f}, -+ // Block 0x56, offset 0x202 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb1}, -+ // Block 0x57, offset 0x204 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x173e, lo: 0xb0, hi: 0xb0}, -+ // Block 0x58, offset 0x206 -+ {value: 0x0006, lo: 0x04}, -+ {value: 0x0047, lo: 0xb2, hi: 0xb3}, -+ {value: 0x0063, lo: 0xb4, hi: 0xb4}, -+ {value: 0x00dd, lo: 0xb8, hi: 0xb8}, -+ {value: 0x00e9, lo: 0xb9, hi: 0xb9}, -+ // Block 0x59, offset 0x20b -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x86, hi: 0x86}, -+ {value: 0x8105, lo: 0xac, hi: 0xac}, -+ // Block 0x5a, offset 0x20e -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x84, hi: 0x84}, -+ {value: 0x8133, lo: 0xa0, hi: 0xb1}, -+ // Block 0x5b, offset 0x211 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0xab, hi: 0xad}, -+ // Block 0x5c, offset 0x213 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x93, hi: 0x93}, -+ // Block 0x5d, offset 0x215 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0xb3, hi: 0xb3}, -+ // Block 0x5e, offset 0x217 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x80, hi: 0x80}, -+ // Block 0x5f, offset 0x219 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb0}, -+ {value: 0x8133, lo: 0xb2, hi: 0xb3}, -+ {value: 0x812e, lo: 0xb4, hi: 0xb4}, -+ {value: 0x8133, lo: 0xb7, hi: 0xb8}, -+ {value: 0x8133, lo: 0xbe, hi: 0xbf}, -+ // Block 0x60, offset 0x21f -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0x81, hi: 0x81}, -+ {value: 0x8105, lo: 0xb6, hi: 0xb6}, -+ // Block 0x61, offset 0x222 -+ {value: 0x000c, lo: 0x04}, -+ {value: 0x173a, lo: 0x9c, hi: 0x9d}, -+ {value: 0x014f, lo: 0x9e, hi: 0x9e}, -+ {value: 0x174a, lo: 0x9f, hi: 0x9f}, -+ {value: 0x01a6, lo: 0xa9, hi: 0xa9}, -+ // Block 0x62, offset 0x227 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xad, hi: 0xad}, -+ // Block 0x63, offset 0x229 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0xe500, lo: 0x80, hi: 0x80}, -+ {value: 0xc600, lo: 0x81, hi: 0x9b}, -+ {value: 0xe500, lo: 0x9c, hi: 0x9c}, -+ {value: 0xc600, lo: 0x9d, hi: 0xb7}, -+ {value: 0xe500, lo: 0xb8, hi: 0xb8}, -+ {value: 0xc600, lo: 0xb9, hi: 0xbf}, -+ // Block 0x64, offset 0x230 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x93}, -+ {value: 0xe500, lo: 0x94, hi: 0x94}, -+ {value: 0xc600, lo: 0x95, hi: 0xaf}, -+ {value: 0xe500, lo: 0xb0, hi: 0xb0}, -+ {value: 0xc600, lo: 0xb1, hi: 0xbf}, -+ // Block 0x65, offset 0x236 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x8b}, -+ {value: 0xe500, lo: 0x8c, hi: 0x8c}, -+ {value: 0xc600, lo: 0x8d, hi: 0xa7}, -+ {value: 0xe500, lo: 0xa8, hi: 0xa8}, -+ {value: 0xc600, lo: 0xa9, hi: 0xbf}, -+ // Block 0x66, offset 0x23c -+ {value: 0x0000, lo: 0x07}, -+ {value: 0xc600, lo: 0x80, hi: 0x83}, -+ {value: 0xe500, lo: 0x84, hi: 0x84}, -+ {value: 0xc600, lo: 0x85, hi: 0x9f}, -+ {value: 0xe500, lo: 0xa0, hi: 0xa0}, -+ {value: 0xc600, lo: 0xa1, hi: 0xbb}, -+ {value: 0xe500, lo: 0xbc, hi: 0xbc}, -+ {value: 0xc600, lo: 0xbd, hi: 0xbf}, -+ // Block 0x67, offset 0x244 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x97}, -+ {value: 0xe500, lo: 0x98, hi: 0x98}, -+ {value: 0xc600, lo: 0x99, hi: 0xb3}, -+ {value: 0xe500, lo: 0xb4, hi: 0xb4}, -+ {value: 0xc600, lo: 0xb5, hi: 0xbf}, -+ // Block 0x68, offset 0x24a -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x8f}, -+ {value: 0xe500, lo: 0x90, hi: 0x90}, -+ {value: 0xc600, lo: 0x91, hi: 0xab}, -+ {value: 0xe500, lo: 0xac, hi: 0xac}, -+ {value: 0xc600, lo: 0xad, hi: 0xbf}, -+ // Block 0x69, offset 0x250 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0xc600, lo: 0x80, hi: 0x87}, -+ {value: 0xe500, lo: 0x88, hi: 0x88}, -+ {value: 0xc600, lo: 0x89, hi: 0xa3}, -+ {value: 0xe500, lo: 0xa4, hi: 0xa4}, -+ {value: 0xc600, lo: 0xa5, hi: 0xbf}, -+ // Block 0x6a, offset 0x256 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0xc600, lo: 0x80, hi: 0x87}, -+ {value: 0xe500, lo: 0x88, hi: 0x88}, -+ {value: 0xc600, lo: 0x89, hi: 0xa3}, -+ // Block 0x6b, offset 0x25a -+ {value: 0x0002, lo: 0x01}, -+ {value: 0x0003, lo: 0x81, hi: 0xbf}, -+ // Block 0x6c, offset 0x25c -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0xbd, hi: 0xbd}, -+ // Block 0x6d, offset 0x25e -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0xa0, hi: 0xa0}, -+ // Block 0x6e, offset 0x260 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xb6, hi: 0xba}, -+ // Block 0x6f, offset 0x262 -+ {value: 0x002d, lo: 0x05}, -+ {value: 0x812e, lo: 0x8d, hi: 0x8d}, -+ {value: 0x8133, lo: 0x8f, hi: 0x8f}, -+ {value: 0x8133, lo: 0xb8, hi: 0xb8}, -+ {value: 0x8101, lo: 0xb9, hi: 0xba}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x70, offset 0x268 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0xa5, hi: 0xa5}, -+ {value: 0x812e, lo: 0xa6, hi: 0xa6}, -+ // Block 0x71, offset 0x26b -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xa4, hi: 0xa7}, -+ // Block 0x72, offset 0x26d -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xab, hi: 0xac}, -+ // Block 0x73, offset 0x26f -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0xbd, hi: 0xbf}, -+ // Block 0x74, offset 0x271 -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x812e, lo: 0x86, hi: 0x87}, -+ {value: 0x8133, lo: 0x88, hi: 0x8a}, -+ {value: 0x812e, lo: 0x8b, hi: 0x8b}, -+ {value: 0x8133, lo: 0x8c, hi: 0x8c}, -+ {value: 0x812e, lo: 0x8d, hi: 0x90}, -+ // Block 0x75, offset 0x277 -+ {value: 0x0005, lo: 0x03}, -+ {value: 0x8133, lo: 0x82, hi: 0x82}, -+ {value: 0x812e, lo: 0x83, hi: 0x84}, -+ {value: 0x812e, lo: 0x85, hi: 0x85}, -+ // Block 0x76, offset 0x27b -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8105, lo: 0x86, hi: 0x86}, -+ {value: 0x8105, lo: 0xb0, hi: 0xb0}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x77, offset 0x27f -+ {value: 0x17fe, lo: 0x07}, -+ {value: 0xa000, lo: 0x99, hi: 0x99}, -+ {value: 0x4379, lo: 0x9a, hi: 0x9a}, -+ {value: 0xa000, lo: 0x9b, hi: 0x9b}, -+ {value: 0x4383, lo: 0x9c, hi: 0x9c}, -+ {value: 0xa000, lo: 0xa5, hi: 0xa5}, -+ {value: 0x438d, lo: 0xab, hi: 0xab}, -+ {value: 0x8105, lo: 0xb9, hi: 0xba}, -+ // Block 0x78, offset 0x287 -+ {value: 0x0000, lo: 0x06}, -+ {value: 0x8133, lo: 0x80, hi: 0x82}, -+ {value: 0x9900, lo: 0xa7, hi: 0xa7}, -+ {value: 0x2eb5, lo: 0xae, hi: 0xae}, -+ {value: 0x2ebf, lo: 0xaf, hi: 0xaf}, -+ {value: 0xa000, lo: 0xb1, hi: 0xb2}, -+ {value: 0x8105, lo: 0xb3, hi: 0xb4}, -+ // Block 0x79, offset 0x28e -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x80, hi: 0x80}, -+ {value: 0x8103, lo: 0x8a, hi: 0x8a}, -+ // Block 0x7a, offset 0x291 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0xb5, hi: 0xb5}, -+ {value: 0x8103, lo: 0xb6, hi: 0xb6}, -+ // Block 0x7b, offset 0x294 -+ {value: 0x0002, lo: 0x01}, -+ {value: 0x8103, lo: 0xa9, hi: 0xaa}, -+ // Block 0x7c, offset 0x296 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0xbb, hi: 0xbc}, -+ {value: 0x9900, lo: 0xbe, hi: 0xbe}, -+ // Block 0x7d, offset 0x299 -+ {value: 0x0000, lo: 0x07}, -+ {value: 0xa000, lo: 0x87, hi: 0x87}, -+ {value: 0x2ec9, lo: 0x8b, hi: 0x8b}, -+ {value: 0x2ed3, lo: 0x8c, hi: 0x8c}, -+ {value: 0x8105, lo: 0x8d, hi: 0x8d}, -+ {value: 0x9900, lo: 0x97, hi: 0x97}, -+ {value: 0x8133, lo: 0xa6, hi: 0xac}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb4}, -+ // Block 0x7e, offset 0x2a1 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8105, lo: 0x82, hi: 0x82}, -+ {value: 0x8103, lo: 0x86, hi: 0x86}, -+ {value: 0x8133, lo: 0x9e, hi: 0x9e}, -+ // Block 0x7f, offset 0x2a5 -+ {value: 0x6a23, lo: 0x06}, -+ {value: 0x9900, lo: 0xb0, hi: 0xb0}, -+ {value: 0xa000, lo: 0xb9, hi: 0xb9}, -+ {value: 0x9900, lo: 0xba, hi: 0xba}, -+ {value: 0x2ee7, lo: 0xbb, hi: 0xbb}, -+ {value: 0x2edd, lo: 0xbc, hi: 0xbd}, -+ {value: 0x2ef1, lo: 0xbe, hi: 0xbe}, -+ // Block 0x80, offset 0x2ac -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0x82, hi: 0x82}, -+ {value: 0x8103, lo: 0x83, hi: 0x83}, -+ // Block 0x81, offset 0x2af -+ {value: 0x0000, lo: 0x05}, -+ {value: 0x9900, lo: 0xaf, hi: 0xaf}, -+ {value: 0xa000, lo: 0xb8, hi: 0xb9}, -+ {value: 0x2efb, lo: 0xba, hi: 0xba}, -+ {value: 0x2f05, lo: 0xbb, hi: 0xbb}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x82, offset 0x2b5 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0x80, hi: 0x80}, -+ // Block 0x83, offset 0x2b7 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xbf, hi: 0xbf}, -+ // Block 0x84, offset 0x2b9 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0xb6, hi: 0xb6}, -+ {value: 0x8103, lo: 0xb7, hi: 0xb7}, -+ // Block 0x85, offset 0x2bc -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xab, hi: 0xab}, -+ // Block 0x86, offset 0x2be -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8105, lo: 0xb9, hi: 0xb9}, -+ {value: 0x8103, lo: 0xba, hi: 0xba}, -+ // Block 0x87, offset 0x2c1 -+ {value: 0x0000, lo: 0x04}, -+ {value: 0x9900, lo: 0xb0, hi: 0xb0}, -+ {value: 0xa000, lo: 0xb5, hi: 0xb5}, -+ {value: 0x2f0f, lo: 0xb8, hi: 0xb8}, -+ {value: 0x8105, lo: 0xbd, hi: 0xbe}, -+ // Block 0x88, offset 0x2c6 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8103, lo: 0x83, hi: 0x83}, -+ // Block 0x89, offset 0x2c8 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xa0, hi: 0xa0}, -+ // Block 0x8a, offset 0x2ca -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0xb4, hi: 0xb4}, -+ // Block 0x8b, offset 0x2cc -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x87, hi: 0x87}, -+ // Block 0x8c, offset 0x2ce -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x99, hi: 0x99}, -+ // Block 0x8d, offset 0x2d0 -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8103, lo: 0x82, hi: 0x82}, -+ {value: 0x8105, lo: 0x84, hi: 0x85}, -+ // Block 0x8e, offset 0x2d3 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x97, hi: 0x97}, -+ // Block 0x8f, offset 0x2d5 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8105, lo: 0x81, hi: 0x82}, -+ // Block 0x90, offset 0x2d7 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8101, lo: 0xb0, hi: 0xb4}, -+ // Block 0x91, offset 0x2d9 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xb0, hi: 0xb6}, -+ // Block 0x92, offset 0x2db -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8102, lo: 0xb0, hi: 0xb1}, -+ // Block 0x93, offset 0x2dd -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8101, lo: 0x9e, hi: 0x9e}, -+ // Block 0x94, offset 0x2df -+ {value: 0x0000, lo: 0x0c}, -+ {value: 0x470d, lo: 0x9e, hi: 0x9e}, -+ {value: 0x4717, lo: 0x9f, hi: 0x9f}, -+ {value: 0x474b, lo: 0xa0, hi: 0xa0}, -+ {value: 0x4759, lo: 0xa1, hi: 0xa1}, -+ {value: 0x4767, lo: 0xa2, hi: 0xa2}, -+ {value: 0x4775, lo: 0xa3, hi: 0xa3}, -+ {value: 0x4783, lo: 0xa4, hi: 0xa4}, -+ {value: 0x812c, lo: 0xa5, hi: 0xa6}, -+ {value: 0x8101, lo: 0xa7, hi: 0xa9}, -+ {value: 0x8131, lo: 0xad, hi: 0xad}, -+ {value: 0x812c, lo: 0xae, hi: 0xb2}, -+ {value: 0x812e, lo: 0xbb, hi: 0xbf}, -+ // Block 0x95, offset 0x2ec -+ {value: 0x0000, lo: 0x09}, -+ {value: 0x812e, lo: 0x80, hi: 0x82}, -+ {value: 0x8133, lo: 0x85, hi: 0x89}, -+ {value: 0x812e, lo: 0x8a, hi: 0x8b}, -+ {value: 0x8133, lo: 0xaa, hi: 0xad}, -+ {value: 0x4721, lo: 0xbb, hi: 0xbb}, -+ {value: 0x472b, lo: 0xbc, hi: 0xbc}, -+ {value: 0x4791, lo: 0xbd, hi: 0xbd}, -+ {value: 0x47ad, lo: 0xbe, hi: 0xbe}, -+ {value: 0x479f, lo: 0xbf, hi: 0xbf}, -+ // Block 0x96, offset 0x2f6 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x47bb, lo: 0x80, hi: 0x80}, -+ // Block 0x97, offset 0x2f8 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x82, hi: 0x84}, -+ // Block 0x98, offset 0x2fa -+ {value: 0x0002, lo: 0x03}, -+ {value: 0x0043, lo: 0x80, hi: 0x99}, -+ {value: 0x0083, lo: 0x9a, hi: 0xb3}, -+ {value: 0x0043, lo: 0xb4, hi: 0xbf}, -+ // Block 0x99, offset 0x2fe -+ {value: 0x0002, lo: 0x04}, -+ {value: 0x005b, lo: 0x80, hi: 0x8d}, -+ {value: 0x0083, lo: 0x8e, hi: 0x94}, -+ {value: 0x0093, lo: 0x96, hi: 0xa7}, -+ {value: 0x0043, lo: 0xa8, hi: 0xbf}, -+ // Block 0x9a, offset 0x303 -+ {value: 0x0002, lo: 0x0b}, -+ {value: 0x0073, lo: 0x80, hi: 0x81}, -+ {value: 0x0083, lo: 0x82, hi: 0x9b}, -+ {value: 0x0043, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0047, lo: 0x9e, hi: 0x9f}, -+ {value: 0x004f, lo: 0xa2, hi: 0xa2}, -+ {value: 0x0055, lo: 0xa5, hi: 0xa6}, -+ {value: 0x005d, lo: 0xa9, hi: 0xac}, -+ {value: 0x0067, lo: 0xae, hi: 0xb5}, -+ {value: 0x0083, lo: 0xb6, hi: 0xb9}, -+ {value: 0x008d, lo: 0xbb, hi: 0xbb}, -+ {value: 0x0091, lo: 0xbd, hi: 0xbf}, -+ // Block 0x9b, offset 0x30f -+ {value: 0x0002, lo: 0x04}, -+ {value: 0x0097, lo: 0x80, hi: 0x83}, -+ {value: 0x00a1, lo: 0x85, hi: 0x8f}, -+ {value: 0x0043, lo: 0x90, hi: 0xa9}, -+ {value: 0x0083, lo: 0xaa, hi: 0xbf}, -+ // Block 0x9c, offset 0x314 -+ {value: 0x0002, lo: 0x08}, -+ {value: 0x00af, lo: 0x80, hi: 0x83}, -+ {value: 0x0043, lo: 0x84, hi: 0x85}, -+ {value: 0x0049, lo: 0x87, hi: 0x8a}, -+ {value: 0x0055, lo: 0x8d, hi: 0x94}, -+ {value: 0x0067, lo: 0x96, hi: 0x9c}, -+ {value: 0x0083, lo: 0x9e, hi: 0xb7}, -+ {value: 0x0043, lo: 0xb8, hi: 0xb9}, -+ {value: 0x0049, lo: 0xbb, hi: 0xbe}, -+ // Block 0x9d, offset 0x31d -+ {value: 0x0002, lo: 0x05}, -+ {value: 0x0053, lo: 0x80, hi: 0x84}, -+ {value: 0x005f, lo: 0x86, hi: 0x86}, -+ {value: 0x0067, lo: 0x8a, hi: 0x90}, -+ {value: 0x0083, lo: 0x92, hi: 0xab}, -+ {value: 0x0043, lo: 0xac, hi: 0xbf}, -+ // Block 0x9e, offset 0x323 -+ {value: 0x0002, lo: 0x04}, -+ {value: 0x006b, lo: 0x80, hi: 0x85}, -+ {value: 0x0083, lo: 0x86, hi: 0x9f}, -+ {value: 0x0043, lo: 0xa0, hi: 0xb9}, -+ {value: 0x0083, lo: 0xba, hi: 0xbf}, -+ // Block 0x9f, offset 0x328 -+ {value: 0x0002, lo: 0x03}, -+ {value: 0x008f, lo: 0x80, hi: 0x93}, -+ {value: 0x0043, lo: 0x94, hi: 0xad}, -+ {value: 0x0083, lo: 0xae, hi: 0xbf}, -+ // Block 0xa0, offset 0x32c -+ {value: 0x0002, lo: 0x04}, -+ {value: 0x00a7, lo: 0x80, hi: 0x87}, -+ {value: 0x0043, lo: 0x88, hi: 0xa1}, -+ {value: 0x0083, lo: 0xa2, hi: 0xbb}, -+ {value: 0x0043, lo: 0xbc, hi: 0xbf}, -+ // Block 0xa1, offset 0x331 -+ {value: 0x0002, lo: 0x03}, -+ {value: 0x004b, lo: 0x80, hi: 0x95}, -+ {value: 0x0083, lo: 0x96, hi: 0xaf}, -+ {value: 0x0043, lo: 0xb0, hi: 0xbf}, -+ // Block 0xa2, offset 0x335 -+ {value: 0x0003, lo: 0x0f}, -+ {value: 0x023c, lo: 0x80, hi: 0x80}, -+ {value: 0x0556, lo: 0x81, hi: 0x81}, -+ {value: 0x023f, lo: 0x82, hi: 0x9a}, -+ {value: 0x0552, lo: 0x9b, hi: 0x9b}, -+ {value: 0x024b, lo: 0x9c, hi: 0x9c}, -+ {value: 0x0254, lo: 0x9d, hi: 0x9d}, -+ {value: 0x025a, lo: 0x9e, hi: 0x9e}, -+ {value: 0x027e, lo: 0x9f, hi: 0x9f}, -+ {value: 0x026f, lo: 0xa0, hi: 0xa0}, -+ {value: 0x026c, lo: 0xa1, hi: 0xa1}, -+ {value: 0x01f7, lo: 0xa2, hi: 0xb2}, -+ {value: 0x020c, lo: 0xb3, hi: 0xb3}, -+ {value: 0x022a, lo: 0xb4, hi: 0xba}, -+ {value: 0x0556, lo: 0xbb, hi: 0xbb}, -+ {value: 0x023f, lo: 0xbc, hi: 0xbf}, -+ // Block 0xa3, offset 0x345 -+ {value: 0x0003, lo: 0x0d}, -+ {value: 0x024b, lo: 0x80, hi: 0x94}, -+ {value: 0x0552, lo: 0x95, hi: 0x95}, -+ {value: 0x024b, lo: 0x96, hi: 0x96}, -+ {value: 0x0254, lo: 0x97, hi: 0x97}, -+ {value: 0x025a, lo: 0x98, hi: 0x98}, -+ {value: 0x027e, lo: 0x99, hi: 0x99}, -+ {value: 0x026f, lo: 0x9a, hi: 0x9a}, -+ {value: 0x026c, lo: 0x9b, hi: 0x9b}, -+ {value: 0x01f7, lo: 0x9c, hi: 0xac}, -+ {value: 0x020c, lo: 0xad, hi: 0xad}, -+ {value: 0x022a, lo: 0xae, hi: 0xb4}, -+ {value: 0x0556, lo: 0xb5, hi: 0xb5}, -+ {value: 0x023f, lo: 0xb6, hi: 0xbf}, -+ // Block 0xa4, offset 0x353 -+ {value: 0x0003, lo: 0x0d}, -+ {value: 0x025d, lo: 0x80, hi: 0x8e}, -+ {value: 0x0552, lo: 0x8f, hi: 0x8f}, -+ {value: 0x024b, lo: 0x90, hi: 0x90}, -+ {value: 0x0254, lo: 0x91, hi: 0x91}, -+ {value: 0x025a, lo: 0x92, hi: 0x92}, -+ {value: 0x027e, lo: 0x93, hi: 0x93}, -+ {value: 0x026f, lo: 0x94, hi: 0x94}, -+ {value: 0x026c, lo: 0x95, hi: 0x95}, -+ {value: 0x01f7, lo: 0x96, hi: 0xa6}, -+ {value: 0x020c, lo: 0xa7, hi: 0xa7}, -+ {value: 0x022a, lo: 0xa8, hi: 0xae}, -+ {value: 0x0556, lo: 0xaf, hi: 0xaf}, -+ {value: 0x023f, lo: 0xb0, hi: 0xbf}, -+ // Block 0xa5, offset 0x361 -+ {value: 0x0003, lo: 0x0d}, -+ {value: 0x026f, lo: 0x80, hi: 0x88}, -+ {value: 0x0552, lo: 0x89, hi: 0x89}, -+ {value: 0x024b, lo: 0x8a, hi: 0x8a}, -+ {value: 0x0254, lo: 0x8b, hi: 0x8b}, -+ {value: 0x025a, lo: 0x8c, hi: 0x8c}, -+ {value: 0x027e, lo: 0x8d, hi: 0x8d}, -+ {value: 0x026f, lo: 0x8e, hi: 0x8e}, -+ {value: 0x026c, lo: 0x8f, hi: 0x8f}, -+ {value: 0x01f7, lo: 0x90, hi: 0xa0}, -+ {value: 0x020c, lo: 0xa1, hi: 0xa1}, -+ {value: 0x022a, lo: 0xa2, hi: 0xa8}, -+ {value: 0x0556, lo: 0xa9, hi: 0xa9}, -+ {value: 0x023f, lo: 0xaa, hi: 0xbf}, -+ // Block 0xa6, offset 0x36f -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0x8f, hi: 0x8f}, -+ // Block 0xa7, offset 0x371 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xae, hi: 0xae}, -+ // Block 0xa8, offset 0x373 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x8133, lo: 0xac, hi: 0xaf}, -+ // Block 0xa9, offset 0x375 -+ {value: 0x0000, lo: 0x03}, -+ {value: 0x8134, lo: 0xac, hi: 0xad}, -+ {value: 0x812e, lo: 0xae, hi: 0xae}, -+ {value: 0x8133, lo: 0xaf, hi: 0xaf}, -+ // Block 0xaa, offset 0x379 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x812e, lo: 0x90, hi: 0x96}, -+ // Block 0xab, offset 0x37b -+ {value: 0x0000, lo: 0x02}, -+ {value: 0x8133, lo: 0x84, hi: 0x89}, -+ {value: 0x8103, lo: 0x8a, hi: 0x8a}, -+ // Block 0xac, offset 0x37e -+ {value: 0x0002, lo: 0x0a}, -+ {value: 0x0063, lo: 0x80, hi: 0x89}, -+ {value: 0x1a7e, lo: 0x8a, hi: 0x8a}, -+ {value: 0x1ab1, lo: 0x8b, hi: 0x8b}, -+ {value: 0x1acc, lo: 0x8c, hi: 0x8c}, -+ {value: 0x1ad2, lo: 0x8d, hi: 0x8d}, -+ {value: 0x1cf0, lo: 0x8e, hi: 0x8e}, -+ {value: 0x1ade, lo: 0x8f, hi: 0x8f}, -+ {value: 0x1aa8, lo: 0xaa, hi: 0xaa}, -+ {value: 0x1aab, lo: 0xab, hi: 0xab}, -+ {value: 0x1aae, lo: 0xac, hi: 0xac}, -+ // Block 0xad, offset 0x389 -+ {value: 0x0000, lo: 0x01}, -+ {value: 0x1a6c, lo: 0x90, hi: 0x90}, -+ // Block 0xae, offset 0x38b -+ {value: 0x0028, lo: 0x09}, -+ {value: 0x2999, lo: 0x80, hi: 0x80}, -+ {value: 0x295d, lo: 0x81, hi: 0x81}, -+ {value: 0x2967, lo: 0x82, hi: 0x82}, -+ {value: 0x297b, lo: 0x83, hi: 0x84}, -+ {value: 0x2985, lo: 0x85, hi: 0x86}, -+ {value: 0x2971, lo: 0x87, hi: 0x87}, -+ {value: 0x298f, lo: 0x88, hi: 0x88}, -+ {value: 0x0c6a, lo: 0x90, hi: 0x90}, -+ {value: 0x09e2, lo: 0x91, hi: 0x91}, -+ // Block 0xaf, offset 0x395 -+ {value: 0x0002, lo: 0x01}, -+ {value: 0x0021, lo: 0xb0, hi: 0xb9}, -+} -+ -+// recompMap: 7528 bytes (entries only) -+var recompMap map[uint32]rune -+var recompMapOnce sync.Once -+ -+const recompMapPacked = "" + -+ "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0 -+ "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1 -+ "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2 -+ "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3 -+ "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4 -+ "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5 -+ "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7 -+ "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8 -+ "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9 -+ "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA -+ "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB -+ "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC -+ "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD -+ "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE -+ "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF -+ "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1 -+ "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2 -+ "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3 -+ "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4 -+ "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5 -+ "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6 -+ "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9 -+ "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA -+ "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB -+ "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC -+ "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD -+ "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0 -+ "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1 -+ "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2 -+ "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3 -+ "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4 -+ "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5 -+ "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7 -+ "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8 -+ "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9 -+ "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA -+ "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB -+ "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC -+ "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED -+ "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE -+ "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF -+ "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1 -+ "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2 -+ "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3 -+ "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4 -+ "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5 -+ "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6 -+ "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9 -+ "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA -+ "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB -+ "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC -+ "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD -+ "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF -+ "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100 -+ "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101 -+ "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102 -+ "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103 -+ "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104 -+ "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105 -+ "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106 -+ "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107 -+ "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108 -+ "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109 -+ "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A -+ "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B -+ "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C -+ "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D -+ "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E -+ "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F -+ "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112 -+ "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113 -+ "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114 -+ "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115 -+ "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116 -+ "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117 -+ "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118 -+ "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119 -+ "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A -+ "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B -+ "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C -+ "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D -+ "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E -+ "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F -+ "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120 -+ "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121 -+ "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122 -+ "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123 -+ "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124 -+ "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125 -+ "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128 -+ "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129 -+ "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A -+ "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B -+ "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C -+ "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D -+ "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E -+ "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F -+ "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130 -+ "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134 -+ "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135 -+ "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136 -+ "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137 -+ "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139 -+ "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A -+ "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B -+ "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C -+ "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D -+ "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E -+ "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 -+ "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 -+ "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 -+ "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 -+ "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 -+ "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 -+ "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C -+ "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D -+ "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E -+ "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F -+ "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 -+ "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 -+ "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 -+ "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 -+ "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 -+ "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 -+ "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 -+ "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 -+ "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A -+ "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B -+ "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C -+ "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D -+ "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E -+ "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F -+ "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 -+ "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 -+ "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 -+ "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 -+ "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 -+ "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 -+ "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 -+ "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 -+ "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A -+ "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B -+ "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C -+ "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D -+ "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E -+ "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F -+ "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 -+ "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 -+ "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 -+ "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 -+ "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 -+ "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 -+ "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 -+ "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 -+ "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 -+ "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 -+ "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A -+ "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B -+ "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C -+ "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D -+ "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E -+ "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 -+ "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 -+ "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF -+ "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 -+ "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD -+ "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE -+ "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF -+ "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 -+ "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 -+ "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 -+ "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 -+ "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 -+ "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 -+ "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 -+ "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 -+ "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 -+ "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 -+ "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA -+ "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB -+ "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC -+ "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE -+ "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF -+ "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 -+ "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 -+ "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 -+ "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 -+ "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 -+ "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 -+ "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 -+ "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 -+ "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA -+ "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB -+ "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC -+ "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED -+ "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE -+ "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF -+ "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 -+ "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 -+ "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 -+ "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 -+ "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 -+ "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA -+ "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB -+ "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC -+ "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD -+ "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE -+ "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF -+ "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 -+ "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 -+ "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 -+ "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 -+ "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 -+ "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 -+ "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 -+ "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 -+ "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 -+ "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 -+ "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A -+ "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B -+ "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C -+ "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D -+ "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E -+ "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F -+ "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 -+ "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 -+ "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 -+ "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 -+ "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 -+ "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 -+ "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 -+ "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 -+ "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 -+ "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 -+ "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A -+ "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B -+ "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E -+ "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F -+ "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 -+ "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 -+ "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 -+ "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 -+ "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A -+ "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B -+ "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C -+ "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D -+ "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E -+ "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F -+ "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 -+ "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 -+ "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 -+ "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 -+ "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 -+ "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 -+ "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 -+ "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 -+ "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A -+ "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C -+ "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E -+ "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F -+ "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 -+ "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA -+ "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB -+ "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC -+ "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD -+ "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE -+ "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF -+ "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 -+ "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA -+ "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB -+ "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC -+ "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD -+ "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE -+ "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 -+ "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 -+ "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 -+ "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 -+ "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 -+ "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 -+ "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C -+ "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D -+ "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E -+ "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 -+ "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 -+ "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 -+ "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 -+ "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 -+ "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 -+ "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C -+ "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D -+ "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E -+ "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 -+ "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 -+ "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 -+ "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 -+ "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 -+ "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 -+ "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 -+ "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 -+ "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 -+ "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 -+ "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA -+ "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB -+ "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC -+ "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD -+ "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE -+ "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF -+ "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 -+ "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 -+ "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 -+ "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 -+ "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 -+ "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 -+ "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA -+ "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB -+ "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC -+ "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED -+ "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE -+ "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF -+ "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 -+ "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 -+ "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 -+ "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 -+ "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 -+ "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 -+ "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 -+ "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 -+ "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 -+ "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 -+ "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 -+ "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 -+ "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 -+ "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 -+ "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 -+ "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 -+ "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 -+ "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 -+ "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 -+ "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB -+ "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC -+ "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 -+ "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B -+ "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C -+ "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 -+ "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA -+ "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB -+ "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC -+ "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 -+ "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 -+ "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 -+ "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 -+ "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA -+ "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB -+ "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A -+ "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B -+ "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C -+ "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA -+ "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC -+ "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD -+ "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE -+ "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 -+ "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 -+ "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 -+ "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A -+ "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C -+ "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E -+ "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 -+ "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B -+ "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D -+ "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 -+ "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 -+ "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 -+ "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 -+ "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 -+ "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 -+ "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 -+ "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 -+ "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 -+ "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 -+ "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 -+ "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 -+ "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 -+ "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A -+ "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B -+ "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C -+ "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D -+ "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E -+ "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F -+ "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 -+ "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 -+ "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 -+ "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 -+ "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 -+ "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 -+ "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 -+ "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 -+ "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 -+ "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 -+ "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A -+ "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B -+ "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C -+ "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D -+ "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E -+ "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F -+ "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 -+ "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 -+ "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 -+ "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 -+ "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 -+ "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 -+ "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 -+ "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 -+ "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 -+ "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 -+ "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A -+ "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B -+ "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C -+ "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D -+ "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E -+ "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F -+ "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 -+ "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 -+ "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 -+ "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 -+ "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 -+ "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 -+ "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 -+ "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 -+ "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 -+ "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 -+ "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A -+ "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B -+ "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C -+ "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D -+ "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E -+ "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F -+ "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 -+ "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 -+ "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 -+ "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 -+ "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 -+ "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 -+ "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 -+ "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 -+ "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 -+ "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 -+ "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A -+ "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B -+ "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C -+ "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D -+ "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E -+ "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F -+ "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 -+ "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 -+ "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 -+ "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 -+ "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 -+ "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 -+ "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 -+ "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 -+ "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 -+ "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 -+ "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A -+ "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B -+ "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C -+ "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D -+ "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E -+ "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F -+ "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 -+ "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 -+ "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 -+ "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 -+ "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 -+ "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 -+ "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 -+ "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 -+ "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 -+ "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 -+ "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A -+ "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B -+ "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C -+ "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D -+ "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E -+ "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F -+ "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 -+ "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 -+ "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 -+ "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 -+ "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 -+ "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 -+ "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 -+ "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 -+ "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 -+ "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 -+ "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A -+ "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B -+ "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C -+ "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D -+ "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E -+ "\x00v\x03#\x00\x00\x1e\x7f" + // 0x00760323: 0x00001E7F -+ "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 -+ "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 -+ "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 -+ "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 -+ "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 -+ "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 -+ "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 -+ "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 -+ "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 -+ "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 -+ "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A -+ "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B -+ "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C -+ "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D -+ "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E -+ "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F -+ "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 -+ "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 -+ "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 -+ "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 -+ "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 -+ "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 -+ "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 -+ "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 -+ "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 -+ "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 -+ "\x01\x7f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B -+ "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 -+ "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 -+ "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 -+ "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 -+ "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 -+ "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 -+ "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 -+ "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 -+ "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 -+ "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 -+ "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA -+ "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB -+ "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC -+ "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD -+ "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE -+ "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF -+ "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 -+ "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 -+ "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 -+ "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 -+ "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 -+ "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 -+ "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 -+ "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 -+ "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 -+ "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 -+ "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA -+ "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB -+ "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC -+ "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD -+ "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE -+ "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF -+ "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 -+ "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 -+ "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 -+ "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 -+ "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 -+ "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 -+ "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 -+ "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 -+ "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 -+ "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 -+ "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA -+ "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB -+ "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC -+ "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD -+ "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE -+ "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF -+ "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 -+ "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 -+ "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 -+ "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 -+ "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 -+ "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 -+ "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 -+ "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 -+ "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 -+ "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 -+ "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA -+ "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB -+ "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC -+ "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD -+ "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE -+ "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF -+ "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 -+ "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 -+ "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 -+ "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 -+ "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 -+ "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 -+ "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 -+ "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 -+ "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 -+ "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 -+ "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA -+ "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB -+ "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC -+ "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED -+ "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE -+ "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF -+ "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 -+ "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 -+ "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 -+ "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 -+ "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 -+ "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 -+ "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 -+ "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 -+ "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 -+ "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 -+ "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 -+ "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 -+ "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 -+ "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 -+ "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 -+ "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 -+ "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 -+ "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 -+ "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 -+ "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 -+ "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A -+ "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B -+ "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C -+ "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D -+ "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E -+ "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F -+ "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 -+ "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 -+ "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 -+ "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 -+ "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 -+ "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 -+ "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 -+ "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 -+ "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A -+ "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B -+ "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C -+ "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D -+ "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 -+ "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 -+ "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 -+ "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 -+ "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 -+ "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 -+ "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 -+ "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 -+ "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 -+ "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 -+ "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A -+ "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B -+ "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C -+ "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D -+ "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E -+ "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F -+ "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 -+ "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 -+ "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 -+ "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 -+ "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 -+ "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 -+ "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 -+ "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 -+ "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 -+ "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 -+ "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A -+ "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B -+ "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C -+ "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D -+ "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E -+ "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F -+ "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 -+ "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 -+ "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 -+ "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 -+ "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 -+ "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 -+ "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 -+ "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 -+ "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A -+ "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B -+ "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C -+ "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D -+ "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 -+ "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 -+ "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 -+ "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 -+ "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 -+ "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 -+ "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 -+ "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 -+ "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 -+ "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B -+ "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D -+ "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F -+ "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 -+ "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 -+ "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 -+ "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 -+ "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 -+ "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 -+ "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 -+ "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 -+ "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 -+ "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 -+ "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A -+ "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B -+ "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C -+ "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D -+ "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E -+ "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F -+ "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 -+ "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 -+ "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 -+ "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 -+ "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 -+ "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A -+ "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C -+ "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 -+ "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 -+ "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 -+ "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 -+ "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 -+ "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 -+ "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 -+ "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 -+ "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 -+ "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 -+ "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A -+ "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B -+ "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C -+ "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D -+ "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E -+ "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F -+ "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 -+ "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 -+ "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 -+ "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 -+ "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 -+ "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 -+ "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 -+ "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 -+ "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 -+ "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 -+ "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A -+ "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B -+ "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C -+ "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D -+ "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E -+ "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F -+ "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 -+ "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 -+ "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 -+ "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 -+ "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 -+ "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 -+ "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 -+ "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 -+ "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 -+ "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 -+ "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA -+ "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB -+ "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC -+ "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD -+ "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE -+ "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF -+ "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 -+ "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 -+ "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 -+ "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 -+ "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 -+ "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 -+ "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 -+ "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 -+ "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 -+ "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA -+ "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC -+ "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 -+ "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 -+ "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 -+ "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 -+ "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 -+ "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 -+ "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 -+ "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA -+ "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC -+ "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD -+ "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE -+ "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF -+ "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 -+ "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 -+ "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 -+ "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 -+ "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 -+ "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 -+ "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 -+ "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA -+ "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD -+ "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE -+ "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF -+ "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 -+ "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 -+ "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 -+ "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 -+ "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 -+ "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 -+ "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 -+ "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 -+ "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 -+ "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA -+ "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC -+ "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED -+ "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 -+ "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 -+ "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 -+ "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 -+ "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 -+ "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 -+ "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA -+ "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC -+ "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A -+ "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B -+ "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE -+ "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD -+ "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE -+ "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF -+ "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 -+ "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 -+ "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C -+ "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 -+ "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 -+ "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 -+ "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 -+ "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 -+ "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 -+ "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 -+ "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 -+ "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D -+ "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E -+ "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F -+ "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 -+ "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 -+ "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 -+ "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 -+ "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 -+ "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 -+ "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 -+ "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 -+ "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 -+ "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 -+ "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 -+ "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 -+ "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC -+ "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD -+ "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE -+ "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF -+ "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 -+ "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 -+ "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 -+ "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 -+ "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA -+ "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB -+ "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC -+ "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED -+ "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C -+ "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E -+ "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 -+ "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 -+ "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 -+ "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 -+ "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 -+ "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A -+ "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C -+ "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E -+ "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 -+ "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 -+ "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 -+ "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 -+ "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 -+ "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 -+ "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 -+ "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 -+ "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 -+ "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 -+ "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 -+ "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 -+ "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A -+ "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C -+ "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D -+ "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 -+ "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E -+ "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC -+ "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE -+ "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 -+ "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 -+ "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 -+ "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 -+ "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 -+ "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA -+ "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC -+ "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE -+ "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 -+ "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 -+ "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 -+ "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 -+ "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 -+ "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 -+ "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 -+ "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 -+ "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 -+ "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 -+ "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 -+ "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 -+ "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA -+ "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC -+ "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD -+ "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 -+ "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 -+ "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 -+ "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 -+ "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA -+ "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE -+ "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A -+ "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C -+ "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB -+ "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E -+ "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F -+ "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B -+ "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C -+ "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB -+ "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC -+ "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE -+ "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA -+ "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB -+ "\x195\x190\x00\x01\x198" + // 0x19351930: 0x00011938 -+ "" -+ // Total size of tables: 56KB (57068 bytes) -diff --git a/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/transform.go b/vendor/golang.org/x/text/unicode/norm/transform.go -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/text/unicode/norm/trie.go b/vendor/golang.org/x/text/unicode/norm/trie.go -old mode 100644 -new mode 100755 -index 423386b..e4250ae ---- a/vendor/golang.org/x/text/unicode/norm/trie.go -+++ b/vendor/golang.org/x/text/unicode/norm/trie.go -@@ -29,7 +29,7 @@ var ( - nfkcData = newNfkcTrie(0) - ) - --// lookupValue determines the type of block n and looks up the value for b. -+// lookup determines the type of block n and looks up the value for b. - // For n < t.cutoff, the block is a simple lookup table. Otherwise, the block - // is a list of ranges with an accompanying value. Given a matching range r, - // the value for b is by r.value + (b - r.lo) * stride. -diff --git a/vendor/golang.org/x/time/AUTHORS b/vendor/golang.org/x/time/AUTHORS -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/time/CONTRIBUTORS b/vendor/golang.org/x/time/CONTRIBUTORS -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/time/LICENSE b/vendor/golang.org/x/time/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/time/PATENTS b/vendor/golang.org/x/time/PATENTS -old mode 100644 -new mode 100755 -diff --git a/vendor/golang.org/x/time/rate/rate.go b/vendor/golang.org/x/time/rate/rate.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/LICENSE b/vendor/google.golang.org/appengine/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/api.go b/vendor/google.golang.org/appengine/internal/api.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/api_classic.go b/vendor/google.golang.org/appengine/internal/api_classic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/api_common.go b/vendor/google.golang.org/appengine/internal/api_common.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/app_id.go b/vendor/google.golang.org/appengine/internal/app_id.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/base/api_base.pb.go b/vendor/google.golang.org/appengine/internal/base/api_base.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/base/api_base.proto b/vendor/google.golang.org/appengine/internal/base/api_base.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/identity.go b/vendor/google.golang.org/appengine/internal/identity.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/identity_classic.go b/vendor/google.golang.org/appengine/internal/identity_classic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/identity_flex.go b/vendor/google.golang.org/appengine/internal/identity_flex.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/identity_vm.go b/vendor/google.golang.org/appengine/internal/identity_vm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/internal.go b/vendor/google.golang.org/appengine/internal/internal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/log/log_service.pb.go b/vendor/google.golang.org/appengine/internal/log/log_service.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/log/log_service.proto b/vendor/google.golang.org/appengine/internal/log/log_service.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/main.go b/vendor/google.golang.org/appengine/internal/main.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/main_common.go b/vendor/google.golang.org/appengine/internal/main_common.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/main_vm.go b/vendor/google.golang.org/appengine/internal/main_vm.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/metadata.go b/vendor/google.golang.org/appengine/internal/metadata.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/net.go b/vendor/google.golang.org/appengine/internal/net.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/regen.sh b/vendor/google.golang.org/appengine/internal/regen.sh -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/transaction.go b/vendor/google.golang.org/appengine/internal/transaction.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go b/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto b/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/appengine/urlfetch/urlfetch.go b/vendor/google.golang.org/appengine/urlfetch/urlfetch.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE b/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE -new file mode 100755 -index 0000000..d645695 ---- /dev/null -+++ b/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE -@@ -0,0 +1,202 @@ -+ -+ Apache License -+ Version 2.0, January 2004 -+ http://www.apache.org/licenses/ -+ -+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -+ -+ 1. Definitions. -+ -+ "License" shall mean the terms and conditions for use, reproduction, -+ and distribution as defined by Sections 1 through 9 of this document. -+ -+ "Licensor" shall mean the copyright owner or entity authorized by -+ the copyright owner that is granting the License. -+ -+ "Legal Entity" shall mean the union of the acting entity and all -+ other entities that control, are controlled by, or are under common -+ control with that entity. For the purposes of this definition, -+ "control" means (i) the power, direct or indirect, to cause the -+ direction or management of such entity, whether by contract or -+ otherwise, or (ii) ownership of fifty percent (50%) or more of the -+ outstanding shares, or (iii) beneficial ownership of such entity. -+ -+ "You" (or "Your") shall mean an individual or Legal Entity -+ exercising permissions granted by this License. -+ -+ "Source" form shall mean the preferred form for making modifications, -+ including but not limited to software source code, documentation -+ source, and configuration files. -+ -+ "Object" form shall mean any form resulting from mechanical -+ transformation or translation of a Source form, including but -+ not limited to compiled object code, generated documentation, -+ and conversions to other media types. -+ -+ "Work" shall mean the work of authorship, whether in Source or -+ Object form, made available under the License, as indicated by a -+ copyright notice that is included in or attached to the work -+ (an example is provided in the Appendix below). -+ -+ "Derivative Works" shall mean any work, whether in Source or Object -+ form, that is based on (or derived from) the Work and for which the -+ editorial revisions, annotations, elaborations, or other modifications -+ represent, as a whole, an original work of authorship. For the purposes -+ of this License, Derivative Works shall not include works that remain -+ separable from, or merely link (or bind by name) to the interfaces of, -+ the Work and Derivative Works thereof. -+ -+ "Contribution" shall mean any work of authorship, including -+ the original version of the Work and any modifications or additions -+ to that Work or Derivative Works thereof, that is intentionally -+ submitted to Licensor for inclusion in the Work by the copyright owner -+ or by an individual or Legal Entity authorized to submit on behalf of -+ the copyright owner. For the purposes of this definition, "submitted" -+ means any form of electronic, verbal, or written communication sent -+ to the Licensor or its representatives, including but not limited to -+ communication on electronic mailing lists, source code control systems, -+ and issue tracking systems that are managed by, or on behalf of, the -+ Licensor for the purpose of discussing and improving the Work, but -+ excluding communication that is conspicuously marked or otherwise -+ designated in writing by the copyright owner as "Not a Contribution." -+ -+ "Contributor" shall mean Licensor and any individual or Legal Entity -+ on behalf of whom a Contribution has been received by Licensor and -+ subsequently incorporated within the Work. -+ -+ 2. Grant of Copyright License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ copyright license to reproduce, prepare Derivative Works of, -+ publicly display, publicly perform, sublicense, and distribute the -+ Work and such Derivative Works in Source or Object form. -+ -+ 3. Grant of Patent License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ (except as stated in this section) patent license to make, have made, -+ use, offer to sell, sell, import, and otherwise transfer the Work, -+ where such license applies only to those patent claims licensable -+ by such Contributor that are necessarily infringed by their -+ Contribution(s) alone or by combination of their Contribution(s) -+ with the Work to which such Contribution(s) was submitted. If You -+ institute patent litigation against any entity (including a -+ cross-claim or counterclaim in a lawsuit) alleging that the Work -+ or a Contribution incorporated within the Work constitutes direct -+ or contributory patent infringement, then any patent licenses -+ granted to You under this License for that Work shall terminate -+ as of the date such litigation is filed. -+ -+ 4. Redistribution. You may reproduce and distribute copies of the -+ Work or Derivative Works thereof in any medium, with or without -+ modifications, and in Source or Object form, provided that You -+ meet the following conditions: -+ -+ (a) You must give any other recipients of the Work or -+ Derivative Works a copy of this License; and -+ -+ (b) You must cause any modified files to carry prominent notices -+ stating that You changed the files; and -+ -+ (c) You must retain, in the Source form of any Derivative Works -+ that You distribute, all copyright, patent, trademark, and -+ attribution notices from the Source form of the Work, -+ excluding those notices that do not pertain to any part of -+ the Derivative Works; and -+ -+ (d) If the Work includes a "NOTICE" text file as part of its -+ distribution, then any Derivative Works that You distribute must -+ include a readable copy of the attribution notices contained -+ within such NOTICE file, excluding those notices that do not -+ pertain to any part of the Derivative Works, in at least one -+ of the following places: within a NOTICE text file distributed -+ as part of the Derivative Works; within the Source form or -+ documentation, if provided along with the Derivative Works; or, -+ within a display generated by the Derivative Works, if and -+ wherever such third-party notices normally appear. The contents -+ of the NOTICE file are for informational purposes only and -+ do not modify the License. You may add Your own attribution -+ notices within Derivative Works that You distribute, alongside -+ or as an addendum to the NOTICE text from the Work, provided -+ that such additional attribution notices cannot be construed -+ as modifying the License. -+ -+ You may add Your own copyright statement to Your modifications and -+ may provide additional or different license terms and conditions -+ for use, reproduction, or distribution of Your modifications, or -+ for any such Derivative Works as a whole, provided Your use, -+ reproduction, and distribution of the Work otherwise complies with -+ the conditions stated in this License. -+ -+ 5. Submission of Contributions. Unless You explicitly state otherwise, -+ any Contribution intentionally submitted for inclusion in the Work -+ by You to the Licensor shall be under the terms and conditions of -+ this License, without any additional terms or conditions. -+ Notwithstanding the above, nothing herein shall supersede or modify -+ the terms of any separate license agreement you may have executed -+ with Licensor regarding such Contributions. -+ -+ 6. Trademarks. This License does not grant permission to use the trade -+ names, trademarks, service marks, or product names of the Licensor, -+ except as required for reasonable and customary use in describing the -+ origin of the Work and reproducing the content of the NOTICE file. -+ -+ 7. Disclaimer of Warranty. Unless required by applicable law or -+ agreed to in writing, Licensor provides the Work (and each -+ Contributor provides its Contributions) on an "AS IS" BASIS, -+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -+ implied, including, without limitation, any warranties or conditions -+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -+ PARTICULAR PURPOSE. You are solely responsible for determining the -+ appropriateness of using or redistributing the Work and assume any -+ risks associated with Your exercise of permissions under this License. -+ -+ 8. Limitation of Liability. In no event and under no legal theory, -+ whether in tort (including negligence), contract, or otherwise, -+ unless required by applicable law (such as deliberate and grossly -+ negligent acts) or agreed to in writing, shall any Contributor be -+ liable to You for damages, including any direct, indirect, special, -+ incidental, or consequential damages of any character arising as a -+ result of this License or out of the use or inability to use the -+ Work (including but not limited to damages for loss of goodwill, -+ work stoppage, computer failure or malfunction, or any and all -+ other commercial damages or losses), even if such Contributor -+ has been advised of the possibility of such damages. -+ -+ 9. Accepting Warranty or Additional Liability. While redistributing -+ the Work or Derivative Works thereof, You may choose to offer, -+ and charge a fee for, acceptance of support, warranty, indemnity, -+ or other liability obligations and/or rights consistent with this -+ License. However, in accepting such obligations, You may act only -+ on Your own behalf and on Your sole responsibility, not on behalf -+ of any other Contributor, and only if You agree to indemnify, -+ defend, and hold each Contributor harmless for any liability -+ incurred by, or claims asserted against, such Contributor by reason -+ of your accepting any such warranty or additional liability. -+ -+ END OF TERMS AND CONDITIONS -+ -+ APPENDIX: How to apply the Apache License to your work. -+ -+ To apply the Apache License to your work, attach the following -+ boilerplate notice, with the fields enclosed by brackets "[]" -+ replaced with your own identifying information. (Don't include -+ the brackets!) The text should be enclosed in the appropriate -+ comment syntax for the file format. We also recommend that a -+ file or class name and description of purpose be included on the -+ same "printed page" as the copyright notice for easier -+ identification within third-party archives. -+ -+ Copyright [yyyy] [name of copyright owner] -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go -new file mode 100755 -index 0000000..a6b5081 ---- /dev/null -+++ b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go -@@ -0,0 +1,203 @@ -+// Copyright 2022 Google LLC -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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. -+ -+// Code generated by protoc-gen-go. DO NOT EDIT. -+// versions: -+// protoc-gen-go v1.26.0 -+// protoc v3.21.9 -+// source: google/rpc/status.proto -+ -+package status -+ -+import ( -+ reflect "reflect" -+ sync "sync" -+ -+ protoreflect "google.golang.org/protobuf/reflect/protoreflect" -+ protoimpl "google.golang.org/protobuf/runtime/protoimpl" -+ anypb "google.golang.org/protobuf/types/known/anypb" -+) -+ -+const ( -+ // Verify that this generated code is sufficiently up-to-date. -+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) -+ // Verify that runtime/protoimpl is sufficiently up-to-date. -+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -+) -+ -+// The `Status` type defines a logical error model that is suitable for -+// different programming environments, including REST APIs and RPC APIs. It is -+// used by [gRPC](https://github.com/grpc). Each `Status` message contains -+// three pieces of data: error code, error message, and error details. -+// -+// You can find out more about this error model and how to work with it in the -+// [API Design Guide](https://cloud.google.com/apis/design/errors). -+type Status struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // The status code, which should be an enum value of -+ // [google.rpc.Code][google.rpc.Code]. -+ Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` -+ // A developer-facing error message, which should be in English. Any -+ // user-facing error message should be localized and sent in the -+ // [google.rpc.Status.details][google.rpc.Status.details] field, or localized -+ // by the client. -+ Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` -+ // A list of messages that carry the error details. There is a common set of -+ // message types for APIs to use. -+ Details []*anypb.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` -+} -+ -+func (x *Status) Reset() { -+ *x = Status{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_google_rpc_status_proto_msgTypes[0] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Status) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Status) ProtoMessage() {} -+ -+func (x *Status) ProtoReflect() protoreflect.Message { -+ mi := &file_google_rpc_status_proto_msgTypes[0] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Status.ProtoReflect.Descriptor instead. -+func (*Status) Descriptor() ([]byte, []int) { -+ return file_google_rpc_status_proto_rawDescGZIP(), []int{0} -+} -+ -+func (x *Status) GetCode() int32 { -+ if x != nil { -+ return x.Code -+ } -+ return 0 -+} -+ -+func (x *Status) GetMessage() string { -+ if x != nil { -+ return x.Message -+ } -+ return "" -+} -+ -+func (x *Status) GetDetails() []*anypb.Any { -+ if x != nil { -+ return x.Details -+ } -+ return nil -+} -+ -+var File_google_rpc_status_proto protoreflect.FileDescriptor -+ -+var file_google_rpc_status_proto_rawDesc = []byte{ -+ 0x0a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, -+ 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x72, 0x70, 0x63, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, -+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, -+ 0x22, 0x66, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, -+ 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, -+ 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, -+ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, -+ 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, -+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, -+ 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x61, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, -+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x0b, 0x53, 0x74, 0x61, 0x74, -+ 0x75, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, -+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, -+ 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3b, 0x73, 0x74, 0x61, 0x74, -+ 0x75, 0x73, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x52, 0x50, 0x43, 0x62, 0x06, 0x70, 0x72, 0x6f, -+ 0x74, 0x6f, 0x33, -+} -+ -+var ( -+ file_google_rpc_status_proto_rawDescOnce sync.Once -+ file_google_rpc_status_proto_rawDescData = file_google_rpc_status_proto_rawDesc -+) -+ -+func file_google_rpc_status_proto_rawDescGZIP() []byte { -+ file_google_rpc_status_proto_rawDescOnce.Do(func() { -+ file_google_rpc_status_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_rpc_status_proto_rawDescData) -+ }) -+ return file_google_rpc_status_proto_rawDescData -+} -+ -+var file_google_rpc_status_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -+var file_google_rpc_status_proto_goTypes = []interface{}{ -+ (*Status)(nil), // 0: google.rpc.Status -+ (*anypb.Any)(nil), // 1: google.protobuf.Any -+} -+var file_google_rpc_status_proto_depIdxs = []int32{ -+ 1, // 0: google.rpc.Status.details:type_name -> google.protobuf.Any -+ 1, // [1:1] is the sub-list for method output_type -+ 1, // [1:1] is the sub-list for method input_type -+ 1, // [1:1] is the sub-list for extension type_name -+ 1, // [1:1] is the sub-list for extension extendee -+ 0, // [0:1] is the sub-list for field type_name -+} -+ -+func init() { file_google_rpc_status_proto_init() } -+func file_google_rpc_status_proto_init() { -+ if File_google_rpc_status_proto != nil { -+ return -+ } -+ if !protoimpl.UnsafeEnabled { -+ file_google_rpc_status_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Status); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ } -+ type x struct{} -+ out := protoimpl.TypeBuilder{ -+ File: protoimpl.DescBuilder{ -+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), -+ RawDescriptor: file_google_rpc_status_proto_rawDesc, -+ NumEnums: 0, -+ NumMessages: 1, -+ NumExtensions: 0, -+ NumServices: 0, -+ }, -+ GoTypes: file_google_rpc_status_proto_goTypes, -+ DependencyIndexes: file_google_rpc_status_proto_depIdxs, -+ MessageInfos: file_google_rpc_status_proto_msgTypes, -+ }.Build() -+ File_google_rpc_status_proto = out.File -+ file_google_rpc_status_proto_rawDesc = nil -+ file_google_rpc_status_proto_goTypes = nil -+ file_google_rpc_status_proto_depIdxs = nil -+} -diff --git a/vendor/google.golang.org/grpc/AUTHORS b/vendor/google.golang.org/grpc/AUTHORS -new file mode 100755 -index 0000000..e491a9e ---- /dev/null -+++ b/vendor/google.golang.org/grpc/AUTHORS -@@ -0,0 +1 @@ -+Google Inc. -diff --git a/vendor/google.golang.org/grpc/CODE-OF-CONDUCT.md b/vendor/google.golang.org/grpc/CODE-OF-CONDUCT.md -new file mode 100755 -index 0000000..9d4213e ---- /dev/null -+++ b/vendor/google.golang.org/grpc/CODE-OF-CONDUCT.md -@@ -0,0 +1,3 @@ -+## Community Code of Conduct -+ -+gRPC follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). -diff --git a/vendor/google.golang.org/grpc/CONTRIBUTING.md b/vendor/google.golang.org/grpc/CONTRIBUTING.md -new file mode 100755 -index 0000000..608aa6e ---- /dev/null -+++ b/vendor/google.golang.org/grpc/CONTRIBUTING.md -@@ -0,0 +1,73 @@ -+# How to contribute -+ -+We definitely welcome your patches and contributions to gRPC! Please read the gRPC -+organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md) -+and [contribution guidelines](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) before proceeding. -+ -+If you are new to github, please start by reading [Pull Request howto](https://help.github.com/articles/about-pull-requests/) -+ -+## Legal requirements -+ -+In order to protect both you and ourselves, you will need to sign the -+[Contributor License Agreement](https://identity.linuxfoundation.org/projects/cncf). -+ -+## Guidelines for Pull Requests -+How to get your contributions merged smoothly and quickly. -+ -+- Create **small PRs** that are narrowly focused on **addressing a single -+ concern**. We often times receive PRs that are trying to fix several things at -+ a time, but only one fix is considered acceptable, nothing gets merged and -+ both author's & review's time is wasted. Create more PRs to address different -+ concerns and everyone will be happy. -+ -+- If you are searching for features to work on, issues labeled [Status: Help -+ Wanted](https://github.com/grpc/grpc-go/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Status%3A+Help+Wanted%22) -+ is a great place to start. These issues are well-documented and usually can be -+ resolved with a single pull request. -+ -+- If you are adding a new file, make sure it has the copyright message template -+ at the top as a comment. You can copy over the message from an existing file -+ and update the year. -+ -+- The grpc package should only depend on standard Go packages and a small number -+ of exceptions. If your contribution introduces new dependencies which are NOT -+ in the [list](https://godoc.org/google.golang.org/grpc?imports), you need a -+ discussion with gRPC-Go authors and consultants. -+ -+- For speculative changes, consider opening an issue and discussing it first. If -+ you are suggesting a behavioral or API change, consider starting with a [gRFC -+ proposal](https://github.com/grpc/proposal). -+ -+- Provide a good **PR description** as a record of **what** change is being made -+ and **why** it was made. Link to a github issue if it exists. -+ -+- If you want to fix formatting or style, consider whether your changes are an -+ obvious improvement or might be considered a personal preference. If a style -+ change is based on preference, it likely will not be accepted. If it corrects -+ widely agreed-upon anti-patterns, then please do create a PR and explain the -+ benefits of the change. -+ -+- Unless your PR is trivial, you should expect there will be reviewer comments -+ that you'll need to address before merging. We'll mark it as `Status: Requires -+ Reporter Clarification` if we expect you to respond to these comments in a -+ timely manner. If the PR remains inactive for 6 days, it will be marked as -+ `stale` and automatically close 7 days after that if we don't hear back from -+ you. -+ -+- Maintain **clean commit history** and use **meaningful commit messages**. PRs -+ with messy commit history are difficult to review and won't be merged. Use -+ `rebase -i upstream/master` to curate your commit history and/or to bring in -+ latest changes from master (but avoid rebasing in the middle of a code -+ review). -+ -+- Keep your PR up to date with upstream/master (if there are merge conflicts, we -+ can't really merge your change). -+ -+- **All tests need to be passing** before your change can be merged. We -+ recommend you **run tests locally** before creating your PR to catch breakages -+ early on. -+ - `VET_SKIP_PROTO=1 ./vet.sh` to catch vet errors -+ - `go test -cpu 1,4 -timeout 7m ./...` to run the tests -+ - `go test -race -cpu 1,4 -timeout 7m ./...` to run tests in race mode -+ -+- Exceptions to the rules can be made if there's a compelling reason for doing so. -diff --git a/vendor/google.golang.org/grpc/GOVERNANCE.md b/vendor/google.golang.org/grpc/GOVERNANCE.md -new file mode 100755 -index 0000000..d6ff267 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/GOVERNANCE.md -@@ -0,0 +1 @@ -+This repository is governed by the gRPC organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md). -diff --git a/vendor/google.golang.org/grpc/LICENSE b/vendor/google.golang.org/grpc/LICENSE -new file mode 100755 -index 0000000..d645695 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/LICENSE -@@ -0,0 +1,202 @@ -+ -+ Apache License -+ Version 2.0, January 2004 -+ http://www.apache.org/licenses/ -+ -+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -+ -+ 1. Definitions. -+ -+ "License" shall mean the terms and conditions for use, reproduction, -+ and distribution as defined by Sections 1 through 9 of this document. -+ -+ "Licensor" shall mean the copyright owner or entity authorized by -+ the copyright owner that is granting the License. -+ -+ "Legal Entity" shall mean the union of the acting entity and all -+ other entities that control, are controlled by, or are under common -+ control with that entity. For the purposes of this definition, -+ "control" means (i) the power, direct or indirect, to cause the -+ direction or management of such entity, whether by contract or -+ otherwise, or (ii) ownership of fifty percent (50%) or more of the -+ outstanding shares, or (iii) beneficial ownership of such entity. -+ -+ "You" (or "Your") shall mean an individual or Legal Entity -+ exercising permissions granted by this License. -+ -+ "Source" form shall mean the preferred form for making modifications, -+ including but not limited to software source code, documentation -+ source, and configuration files. -+ -+ "Object" form shall mean any form resulting from mechanical -+ transformation or translation of a Source form, including but -+ not limited to compiled object code, generated documentation, -+ and conversions to other media types. -+ -+ "Work" shall mean the work of authorship, whether in Source or -+ Object form, made available under the License, as indicated by a -+ copyright notice that is included in or attached to the work -+ (an example is provided in the Appendix below). -+ -+ "Derivative Works" shall mean any work, whether in Source or Object -+ form, that is based on (or derived from) the Work and for which the -+ editorial revisions, annotations, elaborations, or other modifications -+ represent, as a whole, an original work of authorship. For the purposes -+ of this License, Derivative Works shall not include works that remain -+ separable from, or merely link (or bind by name) to the interfaces of, -+ the Work and Derivative Works thereof. -+ -+ "Contribution" shall mean any work of authorship, including -+ the original version of the Work and any modifications or additions -+ to that Work or Derivative Works thereof, that is intentionally -+ submitted to Licensor for inclusion in the Work by the copyright owner -+ or by an individual or Legal Entity authorized to submit on behalf of -+ the copyright owner. For the purposes of this definition, "submitted" -+ means any form of electronic, verbal, or written communication sent -+ to the Licensor or its representatives, including but not limited to -+ communication on electronic mailing lists, source code control systems, -+ and issue tracking systems that are managed by, or on behalf of, the -+ Licensor for the purpose of discussing and improving the Work, but -+ excluding communication that is conspicuously marked or otherwise -+ designated in writing by the copyright owner as "Not a Contribution." -+ -+ "Contributor" shall mean Licensor and any individual or Legal Entity -+ on behalf of whom a Contribution has been received by Licensor and -+ subsequently incorporated within the Work. -+ -+ 2. Grant of Copyright License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ copyright license to reproduce, prepare Derivative Works of, -+ publicly display, publicly perform, sublicense, and distribute the -+ Work and such Derivative Works in Source or Object form. -+ -+ 3. Grant of Patent License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ (except as stated in this section) patent license to make, have made, -+ use, offer to sell, sell, import, and otherwise transfer the Work, -+ where such license applies only to those patent claims licensable -+ by such Contributor that are necessarily infringed by their -+ Contribution(s) alone or by combination of their Contribution(s) -+ with the Work to which such Contribution(s) was submitted. If You -+ institute patent litigation against any entity (including a -+ cross-claim or counterclaim in a lawsuit) alleging that the Work -+ or a Contribution incorporated within the Work constitutes direct -+ or contributory patent infringement, then any patent licenses -+ granted to You under this License for that Work shall terminate -+ as of the date such litigation is filed. -+ -+ 4. Redistribution. You may reproduce and distribute copies of the -+ Work or Derivative Works thereof in any medium, with or without -+ modifications, and in Source or Object form, provided that You -+ meet the following conditions: -+ -+ (a) You must give any other recipients of the Work or -+ Derivative Works a copy of this License; and -+ -+ (b) You must cause any modified files to carry prominent notices -+ stating that You changed the files; and -+ -+ (c) You must retain, in the Source form of any Derivative Works -+ that You distribute, all copyright, patent, trademark, and -+ attribution notices from the Source form of the Work, -+ excluding those notices that do not pertain to any part of -+ the Derivative Works; and -+ -+ (d) If the Work includes a "NOTICE" text file as part of its -+ distribution, then any Derivative Works that You distribute must -+ include a readable copy of the attribution notices contained -+ within such NOTICE file, excluding those notices that do not -+ pertain to any part of the Derivative Works, in at least one -+ of the following places: within a NOTICE text file distributed -+ as part of the Derivative Works; within the Source form or -+ documentation, if provided along with the Derivative Works; or, -+ within a display generated by the Derivative Works, if and -+ wherever such third-party notices normally appear. The contents -+ of the NOTICE file are for informational purposes only and -+ do not modify the License. You may add Your own attribution -+ notices within Derivative Works that You distribute, alongside -+ or as an addendum to the NOTICE text from the Work, provided -+ that such additional attribution notices cannot be construed -+ as modifying the License. -+ -+ You may add Your own copyright statement to Your modifications and -+ may provide additional or different license terms and conditions -+ for use, reproduction, or distribution of Your modifications, or -+ for any such Derivative Works as a whole, provided Your use, -+ reproduction, and distribution of the Work otherwise complies with -+ the conditions stated in this License. -+ -+ 5. Submission of Contributions. Unless You explicitly state otherwise, -+ any Contribution intentionally submitted for inclusion in the Work -+ by You to the Licensor shall be under the terms and conditions of -+ this License, without any additional terms or conditions. -+ Notwithstanding the above, nothing herein shall supersede or modify -+ the terms of any separate license agreement you may have executed -+ with Licensor regarding such Contributions. -+ -+ 6. Trademarks. This License does not grant permission to use the trade -+ names, trademarks, service marks, or product names of the Licensor, -+ except as required for reasonable and customary use in describing the -+ origin of the Work and reproducing the content of the NOTICE file. -+ -+ 7. Disclaimer of Warranty. Unless required by applicable law or -+ agreed to in writing, Licensor provides the Work (and each -+ Contributor provides its Contributions) on an "AS IS" BASIS, -+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -+ implied, including, without limitation, any warranties or conditions -+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -+ PARTICULAR PURPOSE. You are solely responsible for determining the -+ appropriateness of using or redistributing the Work and assume any -+ risks associated with Your exercise of permissions under this License. -+ -+ 8. Limitation of Liability. In no event and under no legal theory, -+ whether in tort (including negligence), contract, or otherwise, -+ unless required by applicable law (such as deliberate and grossly -+ negligent acts) or agreed to in writing, shall any Contributor be -+ liable to You for damages, including any direct, indirect, special, -+ incidental, or consequential damages of any character arising as a -+ result of this License or out of the use or inability to use the -+ Work (including but not limited to damages for loss of goodwill, -+ work stoppage, computer failure or malfunction, or any and all -+ other commercial damages or losses), even if such Contributor -+ has been advised of the possibility of such damages. -+ -+ 9. Accepting Warranty or Additional Liability. While redistributing -+ the Work or Derivative Works thereof, You may choose to offer, -+ and charge a fee for, acceptance of support, warranty, indemnity, -+ or other liability obligations and/or rights consistent with this -+ License. However, in accepting such obligations, You may act only -+ on Your own behalf and on Your sole responsibility, not on behalf -+ of any other Contributor, and only if You agree to indemnify, -+ defend, and hold each Contributor harmless for any liability -+ incurred by, or claims asserted against, such Contributor by reason -+ of your accepting any such warranty or additional liability. -+ -+ END OF TERMS AND CONDITIONS -+ -+ APPENDIX: How to apply the Apache License to your work. -+ -+ To apply the Apache License to your work, attach the following -+ boilerplate notice, with the fields enclosed by brackets "[]" -+ replaced with your own identifying information. (Don't include -+ the brackets!) The text should be enclosed in the appropriate -+ comment syntax for the file format. We also recommend that a -+ file or class name and description of purpose be included on the -+ same "printed page" as the copyright notice for easier -+ identification within third-party archives. -+ -+ Copyright [yyyy] [name of copyright owner] -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -diff --git a/vendor/google.golang.org/grpc/MAINTAINERS.md b/vendor/google.golang.org/grpc/MAINTAINERS.md -new file mode 100755 -index 0000000..c6672c0 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/MAINTAINERS.md -@@ -0,0 +1,28 @@ -+This page lists all active maintainers of this repository. If you were a -+maintainer and would like to add your name to the Emeritus list, please send us a -+PR. -+ -+See [GOVERNANCE.md](https://github.com/grpc/grpc-community/blob/master/governance.md) -+for governance guidelines and how to become a maintainer. -+See [CONTRIBUTING.md](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) -+for general contribution guidelines. -+ -+## Maintainers (in alphabetical order) -+ -+- [cesarghali](https://github.com/cesarghali), Google LLC -+- [dfawley](https://github.com/dfawley), Google LLC -+- [easwars](https://github.com/easwars), Google LLC -+- [menghanl](https://github.com/menghanl), Google LLC -+- [srini100](https://github.com/srini100), Google LLC -+ -+## Emeritus Maintainers (in alphabetical order) -+- [adelez](https://github.com/adelez), Google LLC -+- [canguler](https://github.com/canguler), Google LLC -+- [iamqizhao](https://github.com/iamqizhao), Google LLC -+- [jadekler](https://github.com/jadekler), Google LLC -+- [jtattermusch](https://github.com/jtattermusch), Google LLC -+- [lyuxuan](https://github.com/lyuxuan), Google LLC -+- [makmukhi](https://github.com/makmukhi), Google LLC -+- [matt-kwong](https://github.com/matt-kwong), Google LLC -+- [nicolasnoble](https://github.com/nicolasnoble), Google LLC -+- [yongni](https://github.com/yongni), Google LLC -diff --git a/vendor/google.golang.org/grpc/Makefile b/vendor/google.golang.org/grpc/Makefile -new file mode 100755 -index 0000000..1f89609 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/Makefile -@@ -0,0 +1,46 @@ -+all: vet test testrace -+ -+build: -+ go build google.golang.org/grpc/... -+ -+clean: -+ go clean -i google.golang.org/grpc/... -+ -+deps: -+ GO111MODULE=on go get -d -v google.golang.org/grpc/... -+ -+proto: -+ @ if ! which protoc > /dev/null; then \ -+ echo "error: protoc not installed" >&2; \ -+ exit 1; \ -+ fi -+ go generate google.golang.org/grpc/... -+ -+test: -+ go test -cpu 1,4 -timeout 7m google.golang.org/grpc/... -+ -+testsubmodule: -+ cd security/advancedtls && go test -cpu 1,4 -timeout 7m google.golang.org/grpc/security/advancedtls/... -+ cd security/authorization && go test -cpu 1,4 -timeout 7m google.golang.org/grpc/security/authorization/... -+ -+testrace: -+ go test -race -cpu 1,4 -timeout 7m google.golang.org/grpc/... -+ -+testdeps: -+ GO111MODULE=on go get -d -v -t google.golang.org/grpc/... -+ -+vet: vetdeps -+ ./vet.sh -+ -+vetdeps: -+ ./vet.sh -install -+ -+.PHONY: \ -+ all \ -+ build \ -+ clean \ -+ proto \ -+ test \ -+ testrace \ -+ vet \ -+ vetdeps -diff --git a/vendor/google.golang.org/grpc/NOTICE.txt b/vendor/google.golang.org/grpc/NOTICE.txt -new file mode 100755 -index 0000000..5301977 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/NOTICE.txt -@@ -0,0 +1,13 @@ -+Copyright 2014 gRPC authors. -+ -+Licensed under the Apache License, Version 2.0 (the "License"); -+you may not use this file except in compliance with the License. -+You may obtain a copy of the License at -+ -+ 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. -diff --git a/vendor/google.golang.org/grpc/README.md b/vendor/google.golang.org/grpc/README.md -new file mode 100755 -index 0000000..0e6ae69 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/README.md -@@ -0,0 +1,141 @@ -+# gRPC-Go -+ -+[![Build Status](https://travis-ci.org/grpc/grpc-go.svg)](https://travis-ci.org/grpc/grpc-go) -+[![GoDoc](https://pkg.go.dev/badge/google.golang.org/grpc)][API] -+[![GoReportCard](https://goreportcard.com/badge/grpc/grpc-go)](https://goreportcard.com/report/github.com/grpc/grpc-go) -+ -+The [Go][] implementation of [gRPC][]: A high performance, open source, general -+RPC framework that puts mobile and HTTP/2 first. For more information see the -+[Go gRPC docs][], or jump directly into the [quick start][]. -+ -+## Prerequisites -+ -+- **[Go][]**: any one of the **three latest major** [releases][go-releases]. -+ -+## Installation -+ -+With [Go module][] support (Go 1.11+), simply add the following import -+ -+```go -+import "google.golang.org/grpc" -+``` -+ -+to your code, and then `go [build|run|test]` will automatically fetch the -+necessary dependencies. -+ -+Otherwise, to install the `grpc-go` package, run the following command: -+ -+```console -+$ go get -u google.golang.org/grpc -+``` -+ -+> **Note:** If you are trying to access `grpc-go` from **China**, see the -+> [FAQ](#FAQ) below. -+ -+## Learn more -+ -+- [Go gRPC docs][], which include a [quick start][] and [API -+ reference][API] among other resources -+- [Low-level technical docs](Documentation) from this repository -+- [Performance benchmark][] -+- [Examples](examples) -+ -+## FAQ -+ -+### I/O Timeout Errors -+ -+The `golang.org` domain may be blocked from some countries. `go get` usually -+produces an error like the following when this happens: -+ -+```console -+$ go get -u google.golang.org/grpc -+package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout) -+``` -+ -+To build Go code, there are several options: -+ -+- Set up a VPN and access google.golang.org through that. -+ -+- Without Go module support: `git clone` the repo manually: -+ -+ ```sh -+ git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc -+ ``` -+ -+ You will need to do the same for all of grpc's dependencies in `golang.org`, -+ e.g. `golang.org/x/net`. -+ -+- With Go module support: it is possible to use the `replace` feature of `go -+ mod` to create aliases for golang.org packages. In your project's directory: -+ -+ ```sh -+ go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest -+ go mod tidy -+ go mod vendor -+ go build -mod=vendor -+ ``` -+ -+ Again, this will need to be done for all transitive dependencies hosted on -+ golang.org as well. For details, refer to [golang/go issue #28652](https://github.com/golang/go/issues/28652). -+ -+### Compiling error, undefined: grpc.SupportPackageIsVersion -+ -+#### If you are using Go modules: -+ -+Ensure your gRPC-Go version is `require`d at the appropriate version in -+the same module containing the generated `.pb.go` files. For example, -+`SupportPackageIsVersion6` needs `v1.27.0`, so in your `go.mod` file: -+ -+```go -+module -+ -+require ( -+ google.golang.org/grpc v1.27.0 -+) -+``` -+ -+#### If you are *not* using Go modules: -+ -+Update the `proto` package, gRPC package, and rebuild the `.proto` files: -+ -+```sh -+go get -u github.com/golang/protobuf/{proto,protoc-gen-go} -+go get -u google.golang.org/grpc -+protoc --go_out=plugins=grpc:. *.proto -+``` -+ -+### How to turn on logging -+ -+The default logger is controlled by environment variables. Turn everything on -+like this: -+ -+```console -+$ export GRPC_GO_LOG_VERBOSITY_LEVEL=99 -+$ export GRPC_GO_LOG_SEVERITY_LEVEL=info -+``` -+ -+### The RPC failed with error `"code = Unavailable desc = transport is closing"` -+ -+This error means the connection the RPC is using was closed, and there are many -+possible reasons, including: -+ 1. mis-configured transport credentials, connection failed on handshaking -+ 1. bytes disrupted, possibly by a proxy in between -+ 1. server shutdown -+ 1. Keepalive parameters caused connection shutdown, for example if you have configured -+ your server to terminate connections regularly to [trigger DNS lookups](https://github.com/grpc/grpc-go/issues/3170#issuecomment-552517779). -+ If this is the case, you may want to increase your [MaxConnectionAgeGrace](https://pkg.go.dev/google.golang.org/grpc/keepalive?tab=doc#ServerParameters), -+ to allow longer RPC calls to finish. -+ -+It can be tricky to debug this because the error happens on the client side but -+the root cause of the connection being closed is on the server side. Turn on -+logging on __both client and server__, and see if there are any transport -+errors. -+ -+[API]: https://pkg.go.dev/google.golang.org/grpc -+[Go]: https://golang.org -+[Go module]: https://github.com/golang/go/wiki/Modules -+[gRPC]: https://grpc.io -+[Go gRPC docs]: https://grpc.io/docs/languages/go -+[Performance benchmark]: https://performance-dot-grpc-testing.appspot.com/explore?dashboard=5180705743044608 -+[quick start]: https://grpc.io/docs/languages/go/quickstart -+[go-releases]: https://golang.org/doc/devel/release.html -diff --git a/vendor/google.golang.org/grpc/SECURITY.md b/vendor/google.golang.org/grpc/SECURITY.md -new file mode 100755 -index 0000000..be6e108 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/SECURITY.md -@@ -0,0 +1,3 @@ -+# Security Policy -+ -+For information on gRPC Security Policy and reporting potentional security issues, please see [gRPC CVE Process](https://github.com/grpc/proposal/blob/master/P4-grpc-cve-process.md). -diff --git a/vendor/google.golang.org/grpc/attributes/attributes.go b/vendor/google.golang.org/grpc/attributes/attributes.go -new file mode 100755 -index 0000000..49712ac ---- /dev/null -+++ b/vendor/google.golang.org/grpc/attributes/attributes.go -@@ -0,0 +1,142 @@ -+/* -+ * -+ * Copyright 2019 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package attributes defines a generic key/value store used in various gRPC -+// components. -+// -+// # Experimental -+// -+// Notice: This package is EXPERIMENTAL and may be changed or removed in a -+// later release. -+package attributes -+ -+import ( -+ "fmt" -+ "strings" -+) -+ -+// Attributes is an immutable struct for storing and retrieving generic -+// key/value pairs. Keys must be hashable, and users should define their own -+// types for keys. Values should not be modified after they are added to an -+// Attributes or if they were received from one. If values implement 'Equal(o -+// interface{}) bool', it will be called by (*Attributes).Equal to determine -+// whether two values with the same key should be considered equal. -+type Attributes struct { -+ m map[interface{}]interface{} -+} -+ -+// New returns a new Attributes containing the key/value pair. -+func New(key, value interface{}) *Attributes { -+ return &Attributes{m: map[interface{}]interface{}{key: value}} -+} -+ -+// WithValue returns a new Attributes containing the previous keys and values -+// and the new key/value pair. If the same key appears multiple times, the -+// last value overwrites all previous values for that key. To remove an -+// existing key, use a nil value. value should not be modified later. -+func (a *Attributes) WithValue(key, value interface{}) *Attributes { -+ if a == nil { -+ return New(key, value) -+ } -+ n := &Attributes{m: make(map[interface{}]interface{}, len(a.m)+1)} -+ for k, v := range a.m { -+ n.m[k] = v -+ } -+ n.m[key] = value -+ return n -+} -+ -+// Value returns the value associated with these attributes for key, or nil if -+// no value is associated with key. The returned value should not be modified. -+func (a *Attributes) Value(key interface{}) interface{} { -+ if a == nil { -+ return nil -+ } -+ return a.m[key] -+} -+ -+// Equal returns whether a and o are equivalent. If 'Equal(o interface{}) -+// bool' is implemented for a value in the attributes, it is called to -+// determine if the value matches the one stored in the other attributes. If -+// Equal is not implemented, standard equality is used to determine if the two -+// values are equal. Note that some types (e.g. maps) aren't comparable by -+// default, so they must be wrapped in a struct, or in an alias type, with Equal -+// defined. -+func (a *Attributes) Equal(o *Attributes) bool { -+ if a == nil && o == nil { -+ return true -+ } -+ if a == nil || o == nil { -+ return false -+ } -+ if len(a.m) != len(o.m) { -+ return false -+ } -+ for k, v := range a.m { -+ ov, ok := o.m[k] -+ if !ok { -+ // o missing element of a -+ return false -+ } -+ if eq, ok := v.(interface{ Equal(o interface{}) bool }); ok { -+ if !eq.Equal(ov) { -+ return false -+ } -+ } else if v != ov { -+ // Fallback to a standard equality check if Value is unimplemented. -+ return false -+ } -+ } -+ return true -+} -+ -+// String prints the attribute map. If any key or values throughout the map -+// implement fmt.Stringer, it calls that method and appends. -+func (a *Attributes) String() string { -+ var sb strings.Builder -+ sb.WriteString("{") -+ first := true -+ for k, v := range a.m { -+ if !first { -+ sb.WriteString(", ") -+ } -+ sb.WriteString(fmt.Sprintf("%q: %q ", str(k), str(v))) -+ first = false -+ } -+ sb.WriteString("}") -+ return sb.String() -+} -+ -+func str(x interface{}) string { -+ if v, ok := x.(fmt.Stringer); ok { -+ return v.String() -+ } else if v, ok := x.(string); ok { -+ return v -+ } -+ return fmt.Sprintf("<%p>", x) -+} -+ -+// MarshalJSON helps implement the json.Marshaler interface, thereby rendering -+// the Attributes correctly when printing (via pretty.JSON) structs containing -+// Attributes as fields. -+// -+// Is it impossible to unmarshal attributes from a JSON representation and this -+// method is meant only for debugging purposes. -+func (a *Attributes) MarshalJSON() ([]byte, error) { -+ return []byte(a.String()), nil -+} -diff --git a/vendor/google.golang.org/grpc/backoff.go b/vendor/google.golang.org/grpc/backoff.go -new file mode 100755 -index 0000000..29475e3 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/backoff.go -@@ -0,0 +1,61 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// See internal/backoff package for the backoff implementation. This file is -+// kept for the exported types and API backward compatibility. -+ -+package grpc -+ -+import ( -+ "time" -+ -+ "google.golang.org/grpc/backoff" -+) -+ -+// DefaultBackoffConfig uses values specified for backoff in -+// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. -+// -+// Deprecated: use ConnectParams instead. Will be supported throughout 1.x. -+var DefaultBackoffConfig = BackoffConfig{ -+ MaxDelay: 120 * time.Second, -+} -+ -+// BackoffConfig defines the parameters for the default gRPC backoff strategy. -+// -+// Deprecated: use ConnectParams instead. Will be supported throughout 1.x. -+type BackoffConfig struct { -+ // MaxDelay is the upper bound of backoff delay. -+ MaxDelay time.Duration -+} -+ -+// ConnectParams defines the parameters for connecting and retrying. Users are -+// encouraged to use this instead of the BackoffConfig type defined above. See -+// here for more details: -+// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type ConnectParams struct { -+ // Backoff specifies the configuration options for connection backoff. -+ Backoff backoff.Config -+ // MinConnectTimeout is the minimum amount of time we are willing to give a -+ // connection to complete. -+ MinConnectTimeout time.Duration -+} -diff --git a/vendor/google.golang.org/grpc/backoff/backoff.go b/vendor/google.golang.org/grpc/backoff/backoff.go -new file mode 100755 -index 0000000..0787d0b ---- /dev/null -+++ b/vendor/google.golang.org/grpc/backoff/backoff.go -@@ -0,0 +1,52 @@ -+/* -+ * -+ * Copyright 2019 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package backoff provides configuration options for backoff. -+// -+// More details can be found at: -+// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. -+// -+// All APIs in this package are experimental. -+package backoff -+ -+import "time" -+ -+// Config defines the configuration options for backoff. -+type Config struct { -+ // BaseDelay is the amount of time to backoff after the first failure. -+ BaseDelay time.Duration -+ // Multiplier is the factor with which to multiply backoffs after a -+ // failed retry. Should ideally be greater than 1. -+ Multiplier float64 -+ // Jitter is the factor with which backoffs are randomized. -+ Jitter float64 -+ // MaxDelay is the upper bound of backoff delay. -+ MaxDelay time.Duration -+} -+ -+// DefaultConfig is a backoff configuration with the default values specfied -+// at https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. -+// -+// This should be useful for callers who want to configure backoff with -+// non-default values only for a subset of the options. -+var DefaultConfig = Config{ -+ BaseDelay: 1.0 * time.Second, -+ Multiplier: 1.6, -+ Jitter: 0.2, -+ MaxDelay: 120 * time.Second, -+} -diff --git a/vendor/google.golang.org/grpc/balancer/balancer.go b/vendor/google.golang.org/grpc/balancer/balancer.go -new file mode 100755 -index 0000000..8f00523 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/balancer/balancer.go -@@ -0,0 +1,404 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package balancer defines APIs for load balancing in gRPC. -+// All APIs in this package are experimental. -+package balancer -+ -+import ( -+ "context" -+ "encoding/json" -+ "errors" -+ "net" -+ "strings" -+ -+ "google.golang.org/grpc/channelz" -+ "google.golang.org/grpc/connectivity" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/internal" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/resolver" -+ "google.golang.org/grpc/serviceconfig" -+) -+ -+var ( -+ // m is a map from name to balancer builder. -+ m = make(map[string]Builder) -+) -+ -+// Register registers the balancer builder to the balancer map. b.Name -+// (lowercased) will be used as the name registered with this builder. If the -+// Builder implements ConfigParser, ParseConfig will be called when new service -+// configs are received by the resolver, and the result will be provided to the -+// Balancer in UpdateClientConnState. -+// -+// NOTE: this function must only be called during initialization time (i.e. in -+// an init() function), and is not thread-safe. If multiple Balancers are -+// registered with the same name, the one registered last will take effect. -+func Register(b Builder) { -+ m[strings.ToLower(b.Name())] = b -+} -+ -+// unregisterForTesting deletes the balancer with the given name from the -+// balancer map. -+// -+// This function is not thread-safe. -+func unregisterForTesting(name string) { -+ delete(m, name) -+} -+ -+func init() { -+ internal.BalancerUnregister = unregisterForTesting -+} -+ -+// Get returns the resolver builder registered with the given name. -+// Note that the compare is done in a case-insensitive fashion. -+// If no builder is register with the name, nil will be returned. -+func Get(name string) Builder { -+ if b, ok := m[strings.ToLower(name)]; ok { -+ return b -+ } -+ return nil -+} -+ -+// A SubConn represents a single connection to a gRPC backend service. -+// -+// Each SubConn contains a list of addresses. -+// -+// All SubConns start in IDLE, and will not try to connect. To trigger the -+// connecting, Balancers must call Connect. If a connection re-enters IDLE, -+// Balancers must call Connect again to trigger a new connection attempt. -+// -+// gRPC will try to connect to the addresses in sequence, and stop trying the -+// remainder once the first connection is successful. If an attempt to connect -+// to all addresses encounters an error, the SubConn will enter -+// TRANSIENT_FAILURE for a backoff period, and then transition to IDLE. -+// -+// Once established, if a connection is lost, the SubConn will transition -+// directly to IDLE. -+// -+// This interface is to be implemented by gRPC. Users should not need their own -+// implementation of this interface. For situations like testing, any -+// implementations should embed this interface. This allows gRPC to add new -+// methods to this interface. -+type SubConn interface { -+ // UpdateAddresses updates the addresses used in this SubConn. -+ // gRPC checks if currently-connected address is still in the new list. -+ // If it's in the list, the connection will be kept. -+ // If it's not in the list, the connection will gracefully closed, and -+ // a new connection will be created. -+ // -+ // This will trigger a state transition for the SubConn. -+ // -+ // Deprecated: This method is now part of the ClientConn interface and will -+ // eventually be removed from here. -+ UpdateAddresses([]resolver.Address) -+ // Connect starts the connecting for this SubConn. -+ Connect() -+ // GetOrBuildProducer returns a reference to the existing Producer for this -+ // ProducerBuilder in this SubConn, or, if one does not currently exist, -+ // creates a new one and returns it. Returns a close function which must -+ // be called when the Producer is no longer needed. -+ GetOrBuildProducer(ProducerBuilder) (p Producer, close func()) -+} -+ -+// NewSubConnOptions contains options to create new SubConn. -+type NewSubConnOptions struct { -+ // CredsBundle is the credentials bundle that will be used in the created -+ // SubConn. If it's nil, the original creds from grpc DialOptions will be -+ // used. -+ // -+ // Deprecated: Use the Attributes field in resolver.Address to pass -+ // arbitrary data to the credential handshaker. -+ CredsBundle credentials.Bundle -+ // HealthCheckEnabled indicates whether health check service should be -+ // enabled on this SubConn -+ HealthCheckEnabled bool -+} -+ -+// State contains the balancer's state relevant to the gRPC ClientConn. -+type State struct { -+ // State contains the connectivity state of the balancer, which is used to -+ // determine the state of the ClientConn. -+ ConnectivityState connectivity.State -+ // Picker is used to choose connections (SubConns) for RPCs. -+ Picker Picker -+} -+ -+// ClientConn represents a gRPC ClientConn. -+// -+// This interface is to be implemented by gRPC. Users should not need a -+// brand new implementation of this interface. For the situations like -+// testing, the new implementation should embed this interface. This allows -+// gRPC to add new methods to this interface. -+type ClientConn interface { -+ // NewSubConn is called by balancer to create a new SubConn. -+ // It doesn't block and wait for the connections to be established. -+ // Behaviors of the SubConn can be controlled by options. -+ NewSubConn([]resolver.Address, NewSubConnOptions) (SubConn, error) -+ // RemoveSubConn removes the SubConn from ClientConn. -+ // The SubConn will be shutdown. -+ RemoveSubConn(SubConn) -+ // UpdateAddresses updates the addresses used in the passed in SubConn. -+ // gRPC checks if the currently connected address is still in the new list. -+ // If so, the connection will be kept. Else, the connection will be -+ // gracefully closed, and a new connection will be created. -+ // -+ // This will trigger a state transition for the SubConn. -+ UpdateAddresses(SubConn, []resolver.Address) -+ -+ // UpdateState notifies gRPC that the balancer's internal state has -+ // changed. -+ // -+ // gRPC will update the connectivity state of the ClientConn, and will call -+ // Pick on the new Picker to pick new SubConns. -+ UpdateState(State) -+ -+ // ResolveNow is called by balancer to notify gRPC to do a name resolving. -+ ResolveNow(resolver.ResolveNowOptions) -+ -+ // Target returns the dial target for this ClientConn. -+ // -+ // Deprecated: Use the Target field in the BuildOptions instead. -+ Target() string -+} -+ -+// BuildOptions contains additional information for Build. -+type BuildOptions struct { -+ // DialCreds is the transport credentials to use when communicating with a -+ // remote load balancer server. Balancer implementations which do not -+ // communicate with a remote load balancer server can ignore this field. -+ DialCreds credentials.TransportCredentials -+ // CredsBundle is the credentials bundle to use when communicating with a -+ // remote load balancer server. Balancer implementations which do not -+ // communicate with a remote load balancer server can ignore this field. -+ CredsBundle credentials.Bundle -+ // Dialer is the custom dialer to use when communicating with a remote load -+ // balancer server. Balancer implementations which do not communicate with a -+ // remote load balancer server can ignore this field. -+ Dialer func(context.Context, string) (net.Conn, error) -+ // Authority is the server name to use as part of the authentication -+ // handshake when communicating with a remote load balancer server. Balancer -+ // implementations which do not communicate with a remote load balancer -+ // server can ignore this field. -+ Authority string -+ // ChannelzParentID is the parent ClientConn's channelz ID. -+ ChannelzParentID *channelz.Identifier -+ // CustomUserAgent is the custom user agent set on the parent ClientConn. -+ // The balancer should set the same custom user agent if it creates a -+ // ClientConn. -+ CustomUserAgent string -+ // Target contains the parsed address info of the dial target. It is the -+ // same resolver.Target as passed to the resolver. See the documentation for -+ // the resolver.Target type for details about what it contains. -+ Target resolver.Target -+} -+ -+// Builder creates a balancer. -+type Builder interface { -+ // Build creates a new balancer with the ClientConn. -+ Build(cc ClientConn, opts BuildOptions) Balancer -+ // Name returns the name of balancers built by this builder. -+ // It will be used to pick balancers (for example in service config). -+ Name() string -+} -+ -+// ConfigParser parses load balancer configs. -+type ConfigParser interface { -+ // ParseConfig parses the JSON load balancer config provided into an -+ // internal form or returns an error if the config is invalid. For future -+ // compatibility reasons, unknown fields in the config should be ignored. -+ ParseConfig(LoadBalancingConfigJSON json.RawMessage) (serviceconfig.LoadBalancingConfig, error) -+} -+ -+// PickInfo contains additional information for the Pick operation. -+type PickInfo struct { -+ // FullMethodName is the method name that NewClientStream() is called -+ // with. The canonical format is /service/Method. -+ FullMethodName string -+ // Ctx is the RPC's context, and may contain relevant RPC-level information -+ // like the outgoing header metadata. -+ Ctx context.Context -+} -+ -+// DoneInfo contains additional information for done. -+type DoneInfo struct { -+ // Err is the rpc error the RPC finished with. It could be nil. -+ Err error -+ // Trailer contains the metadata from the RPC's trailer, if present. -+ Trailer metadata.MD -+ // BytesSent indicates if any bytes have been sent to the server. -+ BytesSent bool -+ // BytesReceived indicates if any byte has been received from the server. -+ BytesReceived bool -+ // ServerLoad is the load received from server. It's usually sent as part of -+ // trailing metadata. -+ // -+ // The only supported type now is *orca_v3.LoadReport. -+ ServerLoad interface{} -+} -+ -+var ( -+ // ErrNoSubConnAvailable indicates no SubConn is available for pick(). -+ // gRPC will block the RPC until a new picker is available via UpdateState(). -+ ErrNoSubConnAvailable = errors.New("no SubConn is available") -+ // ErrTransientFailure indicates all SubConns are in TransientFailure. -+ // WaitForReady RPCs will block, non-WaitForReady RPCs will fail. -+ // -+ // Deprecated: return an appropriate error based on the last resolution or -+ // connection attempt instead. The behavior is the same for any non-gRPC -+ // status error. -+ ErrTransientFailure = errors.New("all SubConns are in TransientFailure") -+) -+ -+// PickResult contains information related to a connection chosen for an RPC. -+type PickResult struct { -+ // SubConn is the connection to use for this pick, if its state is Ready. -+ // If the state is not Ready, gRPC will block the RPC until a new Picker is -+ // provided by the balancer (using ClientConn.UpdateState). The SubConn -+ // must be one returned by ClientConn.NewSubConn. -+ SubConn SubConn -+ -+ // Done is called when the RPC is completed. If the SubConn is not ready, -+ // this will be called with a nil parameter. If the SubConn is not a valid -+ // type, Done may not be called. May be nil if the balancer does not wish -+ // to be notified when the RPC completes. -+ Done func(DoneInfo) -+ -+ // Metadata provides a way for LB policies to inject arbitrary per-call -+ // metadata. Any metadata returned here will be merged with existing -+ // metadata added by the client application. -+ // -+ // LB policies with child policies are responsible for propagating metadata -+ // injected by their children to the ClientConn, as part of Pick(). -+ Metadata metadata.MD -+} -+ -+// TransientFailureError returns e. It exists for backward compatibility and -+// will be deleted soon. -+// -+// Deprecated: no longer necessary, picker errors are treated this way by -+// default. -+func TransientFailureError(e error) error { return e } -+ -+// Picker is used by gRPC to pick a SubConn to send an RPC. -+// Balancer is expected to generate a new picker from its snapshot every time its -+// internal state has changed. -+// -+// The pickers used by gRPC can be updated by ClientConn.UpdateState(). -+type Picker interface { -+ // Pick returns the connection to use for this RPC and related information. -+ // -+ // Pick should not block. If the balancer needs to do I/O or any blocking -+ // or time-consuming work to service this call, it should return -+ // ErrNoSubConnAvailable, and the Pick call will be repeated by gRPC when -+ // the Picker is updated (using ClientConn.UpdateState). -+ // -+ // If an error is returned: -+ // -+ // - If the error is ErrNoSubConnAvailable, gRPC will block until a new -+ // Picker is provided by the balancer (using ClientConn.UpdateState). -+ // -+ // - If the error is a status error (implemented by the grpc/status -+ // package), gRPC will terminate the RPC with the code and message -+ // provided. -+ // -+ // - For all other errors, wait for ready RPCs will wait, but non-wait for -+ // ready RPCs will be terminated with this error's Error() string and -+ // status code Unavailable. -+ Pick(info PickInfo) (PickResult, error) -+} -+ -+// Balancer takes input from gRPC, manages SubConns, and collects and aggregates -+// the connectivity states. -+// -+// It also generates and updates the Picker used by gRPC to pick SubConns for RPCs. -+// -+// UpdateClientConnState, ResolverError, UpdateSubConnState, and Close are -+// guaranteed to be called synchronously from the same goroutine. There's no -+// guarantee on picker.Pick, it may be called anytime. -+type Balancer interface { -+ // UpdateClientConnState is called by gRPC when the state of the ClientConn -+ // changes. If the error returned is ErrBadResolverState, the ClientConn -+ // will begin calling ResolveNow on the active name resolver with -+ // exponential backoff until a subsequent call to UpdateClientConnState -+ // returns a nil error. Any other errors are currently ignored. -+ UpdateClientConnState(ClientConnState) error -+ // ResolverError is called by gRPC when the name resolver reports an error. -+ ResolverError(error) -+ // UpdateSubConnState is called by gRPC when the state of a SubConn -+ // changes. -+ UpdateSubConnState(SubConn, SubConnState) -+ // Close closes the balancer. The balancer is not required to call -+ // ClientConn.RemoveSubConn for its existing SubConns. -+ Close() -+} -+ -+// ExitIdler is an optional interface for balancers to implement. If -+// implemented, ExitIdle will be called when ClientConn.Connect is called, if -+// the ClientConn is idle. If unimplemented, ClientConn.Connect will cause -+// all SubConns to connect. -+// -+// Notice: it will be required for all balancers to implement this in a future -+// release. -+type ExitIdler interface { -+ // ExitIdle instructs the LB policy to reconnect to backends / exit the -+ // IDLE state, if appropriate and possible. Note that SubConns that enter -+ // the IDLE state will not reconnect until SubConn.Connect is called. -+ ExitIdle() -+} -+ -+// SubConnState describes the state of a SubConn. -+type SubConnState struct { -+ // ConnectivityState is the connectivity state of the SubConn. -+ ConnectivityState connectivity.State -+ // ConnectionError is set if the ConnectivityState is TransientFailure, -+ // describing the reason the SubConn failed. Otherwise, it is nil. -+ ConnectionError error -+} -+ -+// ClientConnState describes the state of a ClientConn relevant to the -+// balancer. -+type ClientConnState struct { -+ ResolverState resolver.State -+ // The parsed load balancing configuration returned by the builder's -+ // ParseConfig method, if implemented. -+ BalancerConfig serviceconfig.LoadBalancingConfig -+} -+ -+// ErrBadResolverState may be returned by UpdateClientConnState to indicate a -+// problem with the provided name resolver data. -+var ErrBadResolverState = errors.New("bad resolver state") -+ -+// A ProducerBuilder is a simple constructor for a Producer. It is used by the -+// SubConn to create producers when needed. -+type ProducerBuilder interface { -+ // Build creates a Producer. The first parameter is always a -+ // grpc.ClientConnInterface (a type to allow creating RPCs/streams on the -+ // associated SubConn), but is declared as interface{} to avoid a -+ // dependency cycle. Should also return a close function that will be -+ // called when all references to the Producer have been given up. -+ Build(grpcClientConnInterface interface{}) (p Producer, close func()) -+} -+ -+// A Producer is a type shared among potentially many consumers. It is -+// associated with a SubConn, and an implementation will typically contain -+// other methods to provide additional functionality, e.g. configuration or -+// subscription registration. -+type Producer interface { -+} -diff --git a/vendor/google.golang.org/grpc/balancer/base/balancer.go b/vendor/google.golang.org/grpc/balancer/base/balancer.go -new file mode 100755 -index 0000000..3929c26 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/balancer/base/balancer.go -@@ -0,0 +1,254 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package base -+ -+import ( -+ "errors" -+ "fmt" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/connectivity" -+ "google.golang.org/grpc/grpclog" -+ "google.golang.org/grpc/resolver" -+) -+ -+var logger = grpclog.Component("balancer") -+ -+type baseBuilder struct { -+ name string -+ pickerBuilder PickerBuilder -+ config Config -+} -+ -+func (bb *baseBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { -+ bal := &baseBalancer{ -+ cc: cc, -+ pickerBuilder: bb.pickerBuilder, -+ -+ subConns: resolver.NewAddressMap(), -+ scStates: make(map[balancer.SubConn]connectivity.State), -+ csEvltr: &balancer.ConnectivityStateEvaluator{}, -+ config: bb.config, -+ state: connectivity.Connecting, -+ } -+ // Initialize picker to a picker that always returns -+ // ErrNoSubConnAvailable, because when state of a SubConn changes, we -+ // may call UpdateState with this picker. -+ bal.picker = NewErrPicker(balancer.ErrNoSubConnAvailable) -+ return bal -+} -+ -+func (bb *baseBuilder) Name() string { -+ return bb.name -+} -+ -+type baseBalancer struct { -+ cc balancer.ClientConn -+ pickerBuilder PickerBuilder -+ -+ csEvltr *balancer.ConnectivityStateEvaluator -+ state connectivity.State -+ -+ subConns *resolver.AddressMap -+ scStates map[balancer.SubConn]connectivity.State -+ picker balancer.Picker -+ config Config -+ -+ resolverErr error // the last error reported by the resolver; cleared on successful resolution -+ connErr error // the last connection error; cleared upon leaving TransientFailure -+} -+ -+func (b *baseBalancer) ResolverError(err error) { -+ b.resolverErr = err -+ if b.subConns.Len() == 0 { -+ b.state = connectivity.TransientFailure -+ } -+ -+ if b.state != connectivity.TransientFailure { -+ // The picker will not change since the balancer does not currently -+ // report an error. -+ return -+ } -+ b.regeneratePicker() -+ b.cc.UpdateState(balancer.State{ -+ ConnectivityState: b.state, -+ Picker: b.picker, -+ }) -+} -+ -+func (b *baseBalancer) UpdateClientConnState(s balancer.ClientConnState) error { -+ // TODO: handle s.ResolverState.ServiceConfig? -+ if logger.V(2) { -+ logger.Info("base.baseBalancer: got new ClientConn state: ", s) -+ } -+ // Successful resolution; clear resolver error and ensure we return nil. -+ b.resolverErr = nil -+ // addrsSet is the set converted from addrs, it's used for quick lookup of an address. -+ addrsSet := resolver.NewAddressMap() -+ for _, a := range s.ResolverState.Addresses { -+ addrsSet.Set(a, nil) -+ if _, ok := b.subConns.Get(a); !ok { -+ // a is a new address (not existing in b.subConns). -+ sc, err := b.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{HealthCheckEnabled: b.config.HealthCheck}) -+ if err != nil { -+ logger.Warningf("base.baseBalancer: failed to create new SubConn: %v", err) -+ continue -+ } -+ b.subConns.Set(a, sc) -+ b.scStates[sc] = connectivity.Idle -+ b.csEvltr.RecordTransition(connectivity.Shutdown, connectivity.Idle) -+ sc.Connect() -+ } -+ } -+ for _, a := range b.subConns.Keys() { -+ sci, _ := b.subConns.Get(a) -+ sc := sci.(balancer.SubConn) -+ // a was removed by resolver. -+ if _, ok := addrsSet.Get(a); !ok { -+ b.cc.RemoveSubConn(sc) -+ b.subConns.Delete(a) -+ // Keep the state of this sc in b.scStates until sc's state becomes Shutdown. -+ // The entry will be deleted in UpdateSubConnState. -+ } -+ } -+ // If resolver state contains no addresses, return an error so ClientConn -+ // will trigger re-resolve. Also records this as an resolver error, so when -+ // the overall state turns transient failure, the error message will have -+ // the zero address information. -+ if len(s.ResolverState.Addresses) == 0 { -+ b.ResolverError(errors.New("produced zero addresses")) -+ return balancer.ErrBadResolverState -+ } -+ -+ b.regeneratePicker() -+ b.cc.UpdateState(balancer.State{ConnectivityState: b.state, Picker: b.picker}) -+ return nil -+} -+ -+// mergeErrors builds an error from the last connection error and the last -+// resolver error. Must only be called if b.state is TransientFailure. -+func (b *baseBalancer) mergeErrors() error { -+ // connErr must always be non-nil unless there are no SubConns, in which -+ // case resolverErr must be non-nil. -+ if b.connErr == nil { -+ return fmt.Errorf("last resolver error: %v", b.resolverErr) -+ } -+ if b.resolverErr == nil { -+ return fmt.Errorf("last connection error: %v", b.connErr) -+ } -+ return fmt.Errorf("last connection error: %v; last resolver error: %v", b.connErr, b.resolverErr) -+} -+ -+// regeneratePicker takes a snapshot of the balancer, and generates a picker -+// from it. The picker is -+// - errPicker if the balancer is in TransientFailure, -+// - built by the pickerBuilder with all READY SubConns otherwise. -+func (b *baseBalancer) regeneratePicker() { -+ if b.state == connectivity.TransientFailure { -+ b.picker = NewErrPicker(b.mergeErrors()) -+ return -+ } -+ readySCs := make(map[balancer.SubConn]SubConnInfo) -+ -+ // Filter out all ready SCs from full subConn map. -+ for _, addr := range b.subConns.Keys() { -+ sci, _ := b.subConns.Get(addr) -+ sc := sci.(balancer.SubConn) -+ if st, ok := b.scStates[sc]; ok && st == connectivity.Ready { -+ readySCs[sc] = SubConnInfo{Address: addr} -+ } -+ } -+ b.picker = b.pickerBuilder.Build(PickerBuildInfo{ReadySCs: readySCs}) -+} -+ -+func (b *baseBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { -+ s := state.ConnectivityState -+ if logger.V(2) { -+ logger.Infof("base.baseBalancer: handle SubConn state change: %p, %v", sc, s) -+ } -+ oldS, ok := b.scStates[sc] -+ if !ok { -+ if logger.V(2) { -+ logger.Infof("base.baseBalancer: got state changes for an unknown SubConn: %p, %v", sc, s) -+ } -+ return -+ } -+ if oldS == connectivity.TransientFailure && -+ (s == connectivity.Connecting || s == connectivity.Idle) { -+ // Once a subconn enters TRANSIENT_FAILURE, ignore subsequent IDLE or -+ // CONNECTING transitions to prevent the aggregated state from being -+ // always CONNECTING when many backends exist but are all down. -+ if s == connectivity.Idle { -+ sc.Connect() -+ } -+ return -+ } -+ b.scStates[sc] = s -+ switch s { -+ case connectivity.Idle: -+ sc.Connect() -+ case connectivity.Shutdown: -+ // When an address was removed by resolver, b called RemoveSubConn but -+ // kept the sc's state in scStates. Remove state for this sc here. -+ delete(b.scStates, sc) -+ case connectivity.TransientFailure: -+ // Save error to be reported via picker. -+ b.connErr = state.ConnectionError -+ } -+ -+ b.state = b.csEvltr.RecordTransition(oldS, s) -+ -+ // Regenerate picker when one of the following happens: -+ // - this sc entered or left ready -+ // - the aggregated state of balancer is TransientFailure -+ // (may need to update error message) -+ if (s == connectivity.Ready) != (oldS == connectivity.Ready) || -+ b.state == connectivity.TransientFailure { -+ b.regeneratePicker() -+ } -+ b.cc.UpdateState(balancer.State{ConnectivityState: b.state, Picker: b.picker}) -+} -+ -+// Close is a nop because base balancer doesn't have internal state to clean up, -+// and it doesn't need to call RemoveSubConn for the SubConns. -+func (b *baseBalancer) Close() { -+} -+ -+// ExitIdle is a nop because the base balancer attempts to stay connected to -+// all SubConns at all times. -+func (b *baseBalancer) ExitIdle() { -+} -+ -+// NewErrPicker returns a Picker that always returns err on Pick(). -+func NewErrPicker(err error) balancer.Picker { -+ return &errPicker{err: err} -+} -+ -+// NewErrPickerV2 is temporarily defined for backward compatibility reasons. -+// -+// Deprecated: use NewErrPicker instead. -+var NewErrPickerV2 = NewErrPicker -+ -+type errPicker struct { -+ err error // Pick() always returns this err. -+} -+ -+func (p *errPicker) Pick(info balancer.PickInfo) (balancer.PickResult, error) { -+ return balancer.PickResult{}, p.err -+} -diff --git a/vendor/google.golang.org/grpc/balancer/base/base.go b/vendor/google.golang.org/grpc/balancer/base/base.go -new file mode 100755 -index 0000000..e31d76e ---- /dev/null -+++ b/vendor/google.golang.org/grpc/balancer/base/base.go -@@ -0,0 +1,71 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package base defines a balancer base that can be used to build balancers with -+// different picking algorithms. -+// -+// The base balancer creates a new SubConn for each resolved address. The -+// provided picker will only be notified about READY SubConns. -+// -+// This package is the base of round_robin balancer, its purpose is to be used -+// to build round_robin like balancers with complex picking algorithms. -+// Balancers with more complicated logic should try to implement a balancer -+// builder from scratch. -+// -+// All APIs in this package are experimental. -+package base -+ -+import ( -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/resolver" -+) -+ -+// PickerBuilder creates balancer.Picker. -+type PickerBuilder interface { -+ // Build returns a picker that will be used by gRPC to pick a SubConn. -+ Build(info PickerBuildInfo) balancer.Picker -+} -+ -+// PickerBuildInfo contains information needed by the picker builder to -+// construct a picker. -+type PickerBuildInfo struct { -+ // ReadySCs is a map from all ready SubConns to the Addresses used to -+ // create them. -+ ReadySCs map[balancer.SubConn]SubConnInfo -+} -+ -+// SubConnInfo contains information about a SubConn created by the base -+// balancer. -+type SubConnInfo struct { -+ Address resolver.Address // the address used to create this SubConn -+} -+ -+// Config contains the config info about the base balancer builder. -+type Config struct { -+ // HealthCheck indicates whether health checking should be enabled for this specific balancer. -+ HealthCheck bool -+} -+ -+// NewBalancerBuilder returns a base balancer builder configured by the provided config. -+func NewBalancerBuilder(name string, pb PickerBuilder, config Config) balancer.Builder { -+ return &baseBuilder{ -+ name: name, -+ pickerBuilder: pb, -+ config: config, -+ } -+} -diff --git a/vendor/google.golang.org/grpc/balancer/conn_state_evaluator.go b/vendor/google.golang.org/grpc/balancer/conn_state_evaluator.go -new file mode 100755 -index 0000000..c334135 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/balancer/conn_state_evaluator.go -@@ -0,0 +1,74 @@ -+/* -+ * -+ * Copyright 2022 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package balancer -+ -+import "google.golang.org/grpc/connectivity" -+ -+// ConnectivityStateEvaluator takes the connectivity states of multiple SubConns -+// and returns one aggregated connectivity state. -+// -+// It's not thread safe. -+type ConnectivityStateEvaluator struct { -+ numReady uint64 // Number of addrConns in ready state. -+ numConnecting uint64 // Number of addrConns in connecting state. -+ numTransientFailure uint64 // Number of addrConns in transient failure state. -+ numIdle uint64 // Number of addrConns in idle state. -+} -+ -+// RecordTransition records state change happening in subConn and based on that -+// it evaluates what aggregated state should be. -+// -+// - If at least one SubConn in Ready, the aggregated state is Ready; -+// - Else if at least one SubConn in Connecting, the aggregated state is Connecting; -+// - Else if at least one SubConn is Idle, the aggregated state is Idle; -+// - Else if at least one SubConn is TransientFailure (or there are no SubConns), the aggregated state is Transient Failure. -+// -+// Shutdown is not considered. -+func (cse *ConnectivityStateEvaluator) RecordTransition(oldState, newState connectivity.State) connectivity.State { -+ // Update counters. -+ for idx, state := range []connectivity.State{oldState, newState} { -+ updateVal := 2*uint64(idx) - 1 // -1 for oldState and +1 for new. -+ switch state { -+ case connectivity.Ready: -+ cse.numReady += updateVal -+ case connectivity.Connecting: -+ cse.numConnecting += updateVal -+ case connectivity.TransientFailure: -+ cse.numTransientFailure += updateVal -+ case connectivity.Idle: -+ cse.numIdle += updateVal -+ } -+ } -+ return cse.CurrentState() -+} -+ -+// CurrentState returns the current aggregate conn state by evaluating the counters -+func (cse *ConnectivityStateEvaluator) CurrentState() connectivity.State { -+ // Evaluate. -+ if cse.numReady > 0 { -+ return connectivity.Ready -+ } -+ if cse.numConnecting > 0 { -+ return connectivity.Connecting -+ } -+ if cse.numIdle > 0 { -+ return connectivity.Idle -+ } -+ return connectivity.TransientFailure -+} -diff --git a/vendor/google.golang.org/grpc/balancer/grpclb/state/state.go b/vendor/google.golang.org/grpc/balancer/grpclb/state/state.go -new file mode 100755 -index 0000000..4ecfa1c ---- /dev/null -+++ b/vendor/google.golang.org/grpc/balancer/grpclb/state/state.go -@@ -0,0 +1,51 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package state declares grpclb types to be set by resolvers wishing to pass -+// information to grpclb via resolver.State Attributes. -+package state -+ -+import ( -+ "google.golang.org/grpc/resolver" -+) -+ -+// keyType is the key to use for storing State in Attributes. -+type keyType string -+ -+const key = keyType("grpc.grpclb.state") -+ -+// State contains gRPCLB-relevant data passed from the name resolver. -+type State struct { -+ // BalancerAddresses contains the remote load balancer address(es). If -+ // set, overrides any resolver-provided addresses with Type of GRPCLB. -+ BalancerAddresses []resolver.Address -+} -+ -+// Set returns a copy of the provided state with attributes containing s. s's -+// data should not be mutated after calling Set. -+func Set(state resolver.State, s *State) resolver.State { -+ state.Attributes = state.Attributes.WithValue(key, s) -+ return state -+} -+ -+// Get returns the grpclb State in the resolver.State, or nil if not present. -+// The returned data should not be mutated. -+func Get(state resolver.State) *State { -+ s, _ := state.Attributes.Value(key).(*State) -+ return s -+} -diff --git a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go -new file mode 100755 -index 0000000..f7031ad ---- /dev/null -+++ b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go -@@ -0,0 +1,81 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package roundrobin defines a roundrobin balancer. Roundrobin balancer is -+// installed as one of the default balancers in gRPC, users don't need to -+// explicitly install this balancer. -+package roundrobin -+ -+import ( -+ "sync/atomic" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/balancer/base" -+ "google.golang.org/grpc/grpclog" -+ "google.golang.org/grpc/internal/grpcrand" -+) -+ -+// Name is the name of round_robin balancer. -+const Name = "round_robin" -+ -+var logger = grpclog.Component("roundrobin") -+ -+// newBuilder creates a new roundrobin balancer builder. -+func newBuilder() balancer.Builder { -+ return base.NewBalancerBuilder(Name, &rrPickerBuilder{}, base.Config{HealthCheck: true}) -+} -+ -+func init() { -+ balancer.Register(newBuilder()) -+} -+ -+type rrPickerBuilder struct{} -+ -+func (*rrPickerBuilder) Build(info base.PickerBuildInfo) balancer.Picker { -+ logger.Infof("roundrobinPicker: Build called with info: %v", info) -+ if len(info.ReadySCs) == 0 { -+ return base.NewErrPicker(balancer.ErrNoSubConnAvailable) -+ } -+ scs := make([]balancer.SubConn, 0, len(info.ReadySCs)) -+ for sc := range info.ReadySCs { -+ scs = append(scs, sc) -+ } -+ return &rrPicker{ -+ subConns: scs, -+ // Start at a random index, as the same RR balancer rebuilds a new -+ // picker when SubConn states change, and we don't want to apply excess -+ // load to the first server in the list. -+ next: uint32(grpcrand.Intn(len(scs))), -+ } -+} -+ -+type rrPicker struct { -+ // subConns is the snapshot of the roundrobin balancer when this picker was -+ // created. The slice is immutable. Each Get() will do a round robin -+ // selection from it and return the selected SubConn. -+ subConns []balancer.SubConn -+ next uint32 -+} -+ -+func (p *rrPicker) Pick(balancer.PickInfo) (balancer.PickResult, error) { -+ subConnsLen := uint32(len(p.subConns)) -+ nextIndex := atomic.AddUint32(&p.next, 1) -+ -+ sc := p.subConns[nextIndex%subConnsLen] -+ return balancer.PickResult{SubConn: sc}, nil -+} -diff --git a/vendor/google.golang.org/grpc/balancer_conn_wrappers.go b/vendor/google.golang.org/grpc/balancer_conn_wrappers.go -new file mode 100755 -index 0000000..04b9ad4 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/balancer_conn_wrappers.go -@@ -0,0 +1,459 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+ "fmt" -+ "strings" -+ "sync" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/connectivity" -+ "google.golang.org/grpc/internal/balancer/gracefulswitch" -+ "google.golang.org/grpc/internal/channelz" -+ "google.golang.org/grpc/internal/grpcsync" -+ "google.golang.org/grpc/resolver" -+) -+ -+type ccbMode int -+ -+const ( -+ ccbModeActive = iota -+ ccbModeIdle -+ ccbModeClosed -+ ccbModeExitingIdle -+) -+ -+// ccBalancerWrapper sits between the ClientConn and the Balancer. -+// -+// ccBalancerWrapper implements methods corresponding to the ones on the -+// balancer.Balancer interface. The ClientConn is free to call these methods -+// concurrently and the ccBalancerWrapper ensures that calls from the ClientConn -+// to the Balancer happen synchronously and in order. -+// -+// ccBalancerWrapper also implements the balancer.ClientConn interface and is -+// passed to the Balancer implementations. It invokes unexported methods on the -+// ClientConn to handle these calls from the Balancer. -+// -+// It uses the gracefulswitch.Balancer internally to ensure that balancer -+// switches happen in a graceful manner. -+type ccBalancerWrapper struct { -+ // The following fields are initialized when the wrapper is created and are -+ // read-only afterwards, and therefore can be accessed without a mutex. -+ cc *ClientConn -+ opts balancer.BuildOptions -+ -+ // Outgoing (gRPC --> balancer) calls are guaranteed to execute in a -+ // mutually exclusive manner as they are scheduled in the serializer. Fields -+ // accessed *only* in these serializer callbacks, can therefore be accessed -+ // without a mutex. -+ balancer *gracefulswitch.Balancer -+ curBalancerName string -+ -+ // mu guards access to the below fields. Access to the serializer and its -+ // cancel function needs to be mutex protected because they are overwritten -+ // when the wrapper exits idle mode. -+ mu sync.Mutex -+ serializer *grpcsync.CallbackSerializer // To serialize all outoing calls. -+ serializerCancel context.CancelFunc // To close the seralizer at close/enterIdle time. -+ mode ccbMode // Tracks the current mode of the wrapper. -+} -+ -+// newCCBalancerWrapper creates a new balancer wrapper. The underlying balancer -+// is not created until the switchTo() method is invoked. -+func newCCBalancerWrapper(cc *ClientConn, bopts balancer.BuildOptions) *ccBalancerWrapper { -+ ctx, cancel := context.WithCancel(context.Background()) -+ ccb := &ccBalancerWrapper{ -+ cc: cc, -+ opts: bopts, -+ serializer: grpcsync.NewCallbackSerializer(ctx), -+ serializerCancel: cancel, -+ } -+ ccb.balancer = gracefulswitch.NewBalancer(ccb, bopts) -+ return ccb -+} -+ -+// updateClientConnState is invoked by grpc to push a ClientConnState update to -+// the underlying balancer. -+func (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnState) error { -+ ccb.mu.Lock() -+ errCh := make(chan error, 1) -+ // Here and everywhere else where Schedule() is called, it is done with the -+ // lock held. But the lock guards only the scheduling part. The actual -+ // callback is called asynchronously without the lock being held. -+ ok := ccb.serializer.Schedule(func(_ context.Context) { -+ // If the addresses specified in the update contain addresses of type -+ // "grpclb" and the selected LB policy is not "grpclb", these addresses -+ // will be filtered out and ccs will be modified with the updated -+ // address list. -+ if ccb.curBalancerName != grpclbName { -+ var addrs []resolver.Address -+ for _, addr := range ccs.ResolverState.Addresses { -+ if addr.Type == resolver.GRPCLB { -+ continue -+ } -+ addrs = append(addrs, addr) -+ } -+ ccs.ResolverState.Addresses = addrs -+ } -+ errCh <- ccb.balancer.UpdateClientConnState(*ccs) -+ }) -+ if !ok { -+ // If we are unable to schedule a function with the serializer, it -+ // indicates that it has been closed. A serializer is only closed when -+ // the wrapper is closed or is in idle. -+ ccb.mu.Unlock() -+ return fmt.Errorf("grpc: cannot send state update to a closed or idle balancer") -+ } -+ ccb.mu.Unlock() -+ -+ // We get here only if the above call to Schedule succeeds, in which case it -+ // is guaranteed that the scheduled function will run. Therefore it is safe -+ // to block on this channel. -+ err := <-errCh -+ if logger.V(2) && err != nil { -+ logger.Infof("error from balancer.UpdateClientConnState: %v", err) -+ } -+ return err -+} -+ -+// updateSubConnState is invoked by grpc to push a subConn state update to the -+// underlying balancer. -+func (ccb *ccBalancerWrapper) updateSubConnState(sc balancer.SubConn, s connectivity.State, err error) { -+ ccb.mu.Lock() -+ ccb.serializer.Schedule(func(_ context.Context) { -+ ccb.balancer.UpdateSubConnState(sc, balancer.SubConnState{ConnectivityState: s, ConnectionError: err}) -+ }) -+ ccb.mu.Unlock() -+} -+ -+func (ccb *ccBalancerWrapper) resolverError(err error) { -+ ccb.mu.Lock() -+ ccb.serializer.Schedule(func(_ context.Context) { -+ ccb.balancer.ResolverError(err) -+ }) -+ ccb.mu.Unlock() -+} -+ -+// switchTo is invoked by grpc to instruct the balancer wrapper to switch to the -+// LB policy identified by name. -+// -+// ClientConn calls newCCBalancerWrapper() at creation time. Upon receipt of the -+// first good update from the name resolver, it determines the LB policy to use -+// and invokes the switchTo() method. Upon receipt of every subsequent update -+// from the name resolver, it invokes this method. -+// -+// the ccBalancerWrapper keeps track of the current LB policy name, and skips -+// the graceful balancer switching process if the name does not change. -+func (ccb *ccBalancerWrapper) switchTo(name string) { -+ ccb.mu.Lock() -+ ccb.serializer.Schedule(func(_ context.Context) { -+ // TODO: Other languages use case-sensitive balancer registries. We should -+ // switch as well. See: https://github.com/grpc/grpc-go/issues/5288. -+ if strings.EqualFold(ccb.curBalancerName, name) { -+ return -+ } -+ ccb.buildLoadBalancingPolicy(name) -+ }) -+ ccb.mu.Unlock() -+} -+ -+// buildLoadBalancingPolicy performs the following: -+// - retrieve a balancer builder for the given name. Use the default LB -+// policy, pick_first, if no LB policy with name is found in the registry. -+// - instruct the gracefulswitch balancer to switch to the above builder. This -+// will actually build the new balancer. -+// - update the `curBalancerName` field -+// -+// Must be called from a serializer callback. -+func (ccb *ccBalancerWrapper) buildLoadBalancingPolicy(name string) { -+ builder := balancer.Get(name) -+ if builder == nil { -+ channelz.Warningf(logger, ccb.cc.channelzID, "Channel switches to new LB policy %q, since the specified LB policy %q was not registered", PickFirstBalancerName, name) -+ builder = newPickfirstBuilder() -+ } else { -+ channelz.Infof(logger, ccb.cc.channelzID, "Channel switches to new LB policy %q", name) -+ } -+ -+ if err := ccb.balancer.SwitchTo(builder); err != nil { -+ channelz.Errorf(logger, ccb.cc.channelzID, "Channel failed to build new LB policy %q: %v", name, err) -+ return -+ } -+ ccb.curBalancerName = builder.Name() -+} -+ -+func (ccb *ccBalancerWrapper) close() { -+ channelz.Info(logger, ccb.cc.channelzID, "ccBalancerWrapper: closing") -+ ccb.closeBalancer(ccbModeClosed) -+} -+ -+// enterIdleMode is invoked by grpc when the channel enters idle mode upon -+// expiry of idle_timeout. This call blocks until the balancer is closed. -+func (ccb *ccBalancerWrapper) enterIdleMode() { -+ channelz.Info(logger, ccb.cc.channelzID, "ccBalancerWrapper: entering idle mode") -+ ccb.closeBalancer(ccbModeIdle) -+} -+ -+// closeBalancer is invoked when the channel is being closed or when it enters -+// idle mode upon expiry of idle_timeout. -+func (ccb *ccBalancerWrapper) closeBalancer(m ccbMode) { -+ ccb.mu.Lock() -+ if ccb.mode == ccbModeClosed || ccb.mode == ccbModeIdle { -+ ccb.mu.Unlock() -+ return -+ } -+ -+ ccb.mode = m -+ done := ccb.serializer.Done -+ b := ccb.balancer -+ ok := ccb.serializer.Schedule(func(_ context.Context) { -+ // Close the serializer to ensure that no more calls from gRPC are sent -+ // to the balancer. -+ ccb.serializerCancel() -+ // Empty the current balancer name because we don't have a balancer -+ // anymore and also so that we act on the next call to switchTo by -+ // creating a new balancer specified by the new resolver. -+ ccb.curBalancerName = "" -+ }) -+ if !ok { -+ ccb.mu.Unlock() -+ return -+ } -+ ccb.mu.Unlock() -+ -+ // Give enqueued callbacks a chance to finish. -+ <-done -+ // Spawn a goroutine to close the balancer (since it may block trying to -+ // cleanup all allocated resources) and return early. -+ go b.Close() -+} -+ -+// exitIdleMode is invoked by grpc when the channel exits idle mode either -+// because of an RPC or because of an invocation of the Connect() API. This -+// recreates the balancer that was closed previously when entering idle mode. -+// -+// If the channel is not in idle mode, we know for a fact that we are here as a -+// result of the user calling the Connect() method on the ClientConn. In this -+// case, we can simply forward the call to the underlying balancer, instructing -+// it to reconnect to the backends. -+func (ccb *ccBalancerWrapper) exitIdleMode() { -+ ccb.mu.Lock() -+ if ccb.mode == ccbModeClosed { -+ // Request to exit idle is a no-op when wrapper is already closed. -+ ccb.mu.Unlock() -+ return -+ } -+ -+ if ccb.mode == ccbModeIdle { -+ // Recreate the serializer which was closed when we entered idle. -+ ctx, cancel := context.WithCancel(context.Background()) -+ ccb.serializer = grpcsync.NewCallbackSerializer(ctx) -+ ccb.serializerCancel = cancel -+ } -+ -+ // The ClientConn guarantees that mutual exclusion between close() and -+ // exitIdleMode(), and since we just created a new serializer, we can be -+ // sure that the below function will be scheduled. -+ done := make(chan struct{}) -+ ccb.serializer.Schedule(func(_ context.Context) { -+ defer close(done) -+ -+ ccb.mu.Lock() -+ defer ccb.mu.Unlock() -+ -+ if ccb.mode != ccbModeIdle { -+ ccb.balancer.ExitIdle() -+ return -+ } -+ -+ // Gracefulswitch balancer does not support a switchTo operation after -+ // being closed. Hence we need to create a new one here. -+ ccb.balancer = gracefulswitch.NewBalancer(ccb, ccb.opts) -+ ccb.mode = ccbModeActive -+ channelz.Info(logger, ccb.cc.channelzID, "ccBalancerWrapper: exiting idle mode") -+ -+ }) -+ ccb.mu.Unlock() -+ -+ <-done -+} -+ -+func (ccb *ccBalancerWrapper) isIdleOrClosed() bool { -+ ccb.mu.Lock() -+ defer ccb.mu.Unlock() -+ return ccb.mode == ccbModeIdle || ccb.mode == ccbModeClosed -+} -+ -+func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) { -+ if ccb.isIdleOrClosed() { -+ return nil, fmt.Errorf("grpc: cannot create SubConn when balancer is closed or idle") -+ } -+ -+ if len(addrs) == 0 { -+ return nil, fmt.Errorf("grpc: cannot create SubConn with empty address list") -+ } -+ ac, err := ccb.cc.newAddrConn(addrs, opts) -+ if err != nil { -+ channelz.Warningf(logger, ccb.cc.channelzID, "acBalancerWrapper: NewSubConn: failed to newAddrConn: %v", err) -+ return nil, err -+ } -+ acbw := &acBalancerWrapper{ac: ac, producers: make(map[balancer.ProducerBuilder]*refCountedProducer)} -+ ac.acbw = acbw -+ return acbw, nil -+} -+ -+func (ccb *ccBalancerWrapper) RemoveSubConn(sc balancer.SubConn) { -+ if ccb.isIdleOrClosed() { -+ // It it safe to ignore this call when the balancer is closed or in idle -+ // because the ClientConn takes care of closing the connections. -+ // -+ // Not returning early from here when the balancer is closed or in idle -+ // leads to a deadlock though, because of the following sequence of -+ // calls when holding cc.mu: -+ // cc.exitIdleMode --> ccb.enterIdleMode --> gsw.Close --> -+ // ccb.RemoveAddrConn --> cc.removeAddrConn -+ return -+ } -+ -+ acbw, ok := sc.(*acBalancerWrapper) -+ if !ok { -+ return -+ } -+ ccb.cc.removeAddrConn(acbw.ac, errConnDrain) -+} -+ -+func (ccb *ccBalancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) { -+ if ccb.isIdleOrClosed() { -+ return -+ } -+ -+ acbw, ok := sc.(*acBalancerWrapper) -+ if !ok { -+ return -+ } -+ acbw.UpdateAddresses(addrs) -+} -+ -+func (ccb *ccBalancerWrapper) UpdateState(s balancer.State) { -+ if ccb.isIdleOrClosed() { -+ return -+ } -+ -+ // Update picker before updating state. Even though the ordering here does -+ // not matter, it can lead to multiple calls of Pick in the common start-up -+ // case where we wait for ready and then perform an RPC. If the picker is -+ // updated later, we could call the "connecting" picker when the state is -+ // updated, and then call the "ready" picker after the picker gets updated. -+ ccb.cc.blockingpicker.updatePicker(s.Picker) -+ ccb.cc.csMgr.updateState(s.ConnectivityState) -+} -+ -+func (ccb *ccBalancerWrapper) ResolveNow(o resolver.ResolveNowOptions) { -+ if ccb.isIdleOrClosed() { -+ return -+ } -+ -+ ccb.cc.resolveNow(o) -+} -+ -+func (ccb *ccBalancerWrapper) Target() string { -+ return ccb.cc.target -+} -+ -+// acBalancerWrapper is a wrapper on top of ac for balancers. -+// It implements balancer.SubConn interface. -+type acBalancerWrapper struct { -+ ac *addrConn // read-only -+ -+ mu sync.Mutex -+ producers map[balancer.ProducerBuilder]*refCountedProducer -+} -+ -+func (acbw *acBalancerWrapper) String() string { -+ return fmt.Sprintf("SubConn(id:%d)", acbw.ac.channelzID.Int()) -+} -+ -+func (acbw *acBalancerWrapper) UpdateAddresses(addrs []resolver.Address) { -+ acbw.ac.updateAddrs(addrs) -+} -+ -+func (acbw *acBalancerWrapper) Connect() { -+ go acbw.ac.connect() -+} -+ -+// NewStream begins a streaming RPC on the addrConn. If the addrConn is not -+// ready, blocks until it is or ctx expires. Returns an error when the context -+// expires or the addrConn is shut down. -+func (acbw *acBalancerWrapper) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) { -+ transport, err := acbw.ac.getTransport(ctx) -+ if err != nil { -+ return nil, err -+ } -+ return newNonRetryClientStream(ctx, desc, method, transport, acbw.ac, opts...) -+} -+ -+// Invoke performs a unary RPC. If the addrConn is not ready, returns -+// errSubConnNotReady. -+func (acbw *acBalancerWrapper) Invoke(ctx context.Context, method string, args interface{}, reply interface{}, opts ...CallOption) error { -+ cs, err := acbw.NewStream(ctx, unaryStreamDesc, method, opts...) -+ if err != nil { -+ return err -+ } -+ if err := cs.SendMsg(args); err != nil { -+ return err -+ } -+ return cs.RecvMsg(reply) -+} -+ -+type refCountedProducer struct { -+ producer balancer.Producer -+ refs int // number of current refs to the producer -+ close func() // underlying producer's close function -+} -+ -+func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) (balancer.Producer, func()) { -+ acbw.mu.Lock() -+ defer acbw.mu.Unlock() -+ -+ // Look up existing producer from this builder. -+ pData := acbw.producers[pb] -+ if pData == nil { -+ // Not found; create a new one and add it to the producers map. -+ p, close := pb.Build(acbw) -+ pData = &refCountedProducer{producer: p, close: close} -+ acbw.producers[pb] = pData -+ } -+ // Account for this new reference. -+ pData.refs++ -+ -+ // Return a cleanup function wrapped in a OnceFunc to remove this reference -+ // and delete the refCountedProducer from the map if the total reference -+ // count goes to zero. -+ unref := func() { -+ acbw.mu.Lock() -+ pData.refs-- -+ if pData.refs == 0 { -+ defer pData.close() // Run outside the acbw mutex -+ delete(acbw.producers, pb) -+ } -+ acbw.mu.Unlock() -+ } -+ return pData.producer, grpcsync.OnceFunc(unref) -+} -diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go -new file mode 100755 -index 0000000..ec2c2fa ---- /dev/null -+++ b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go -@@ -0,0 +1,1183 @@ -+// Copyright 2018 The gRPC Authors -+// All rights reserved. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// 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 canonical version of this proto can be found at -+// https://github.com/grpc/grpc-proto/blob/master/grpc/binlog/v1/binarylog.proto -+ -+// Code generated by protoc-gen-go. DO NOT EDIT. -+// versions: -+// protoc-gen-go v1.30.0 -+// protoc v4.22.0 -+// source: grpc/binlog/v1/binarylog.proto -+ -+package grpc_binarylog_v1 -+ -+import ( -+ protoreflect "google.golang.org/protobuf/reflect/protoreflect" -+ protoimpl "google.golang.org/protobuf/runtime/protoimpl" -+ durationpb "google.golang.org/protobuf/types/known/durationpb" -+ timestamppb "google.golang.org/protobuf/types/known/timestamppb" -+ reflect "reflect" -+ sync "sync" -+) -+ -+const ( -+ // Verify that this generated code is sufficiently up-to-date. -+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) -+ // Verify that runtime/protoimpl is sufficiently up-to-date. -+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -+) -+ -+// Enumerates the type of event -+// Note the terminology is different from the RPC semantics -+// definition, but the same meaning is expressed here. -+type GrpcLogEntry_EventType int32 -+ -+const ( -+ GrpcLogEntry_EVENT_TYPE_UNKNOWN GrpcLogEntry_EventType = 0 -+ // Header sent from client to server -+ GrpcLogEntry_EVENT_TYPE_CLIENT_HEADER GrpcLogEntry_EventType = 1 -+ // Header sent from server to client -+ GrpcLogEntry_EVENT_TYPE_SERVER_HEADER GrpcLogEntry_EventType = 2 -+ // Message sent from client to server -+ GrpcLogEntry_EVENT_TYPE_CLIENT_MESSAGE GrpcLogEntry_EventType = 3 -+ // Message sent from server to client -+ GrpcLogEntry_EVENT_TYPE_SERVER_MESSAGE GrpcLogEntry_EventType = 4 -+ // A signal that client is done sending -+ GrpcLogEntry_EVENT_TYPE_CLIENT_HALF_CLOSE GrpcLogEntry_EventType = 5 -+ // Trailer indicates the end of the RPC. -+ // On client side, this event means a trailer was either received -+ // from the network or the gRPC library locally generated a status -+ // to inform the application about a failure. -+ // On server side, this event means the server application requested -+ // to send a trailer. Note: EVENT_TYPE_CANCEL may still arrive after -+ // this due to races on server side. -+ GrpcLogEntry_EVENT_TYPE_SERVER_TRAILER GrpcLogEntry_EventType = 6 -+ // A signal that the RPC is cancelled. On client side, this -+ // indicates the client application requests a cancellation. -+ // On server side, this indicates that cancellation was detected. -+ // Note: This marks the end of the RPC. Events may arrive after -+ // this due to races. For example, on client side a trailer -+ // may arrive even though the application requested to cancel the RPC. -+ GrpcLogEntry_EVENT_TYPE_CANCEL GrpcLogEntry_EventType = 7 -+) -+ -+// Enum value maps for GrpcLogEntry_EventType. -+var ( -+ GrpcLogEntry_EventType_name = map[int32]string{ -+ 0: "EVENT_TYPE_UNKNOWN", -+ 1: "EVENT_TYPE_CLIENT_HEADER", -+ 2: "EVENT_TYPE_SERVER_HEADER", -+ 3: "EVENT_TYPE_CLIENT_MESSAGE", -+ 4: "EVENT_TYPE_SERVER_MESSAGE", -+ 5: "EVENT_TYPE_CLIENT_HALF_CLOSE", -+ 6: "EVENT_TYPE_SERVER_TRAILER", -+ 7: "EVENT_TYPE_CANCEL", -+ } -+ GrpcLogEntry_EventType_value = map[string]int32{ -+ "EVENT_TYPE_UNKNOWN": 0, -+ "EVENT_TYPE_CLIENT_HEADER": 1, -+ "EVENT_TYPE_SERVER_HEADER": 2, -+ "EVENT_TYPE_CLIENT_MESSAGE": 3, -+ "EVENT_TYPE_SERVER_MESSAGE": 4, -+ "EVENT_TYPE_CLIENT_HALF_CLOSE": 5, -+ "EVENT_TYPE_SERVER_TRAILER": 6, -+ "EVENT_TYPE_CANCEL": 7, -+ } -+) -+ -+func (x GrpcLogEntry_EventType) Enum() *GrpcLogEntry_EventType { -+ p := new(GrpcLogEntry_EventType) -+ *p = x -+ return p -+} -+ -+func (x GrpcLogEntry_EventType) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (GrpcLogEntry_EventType) Descriptor() protoreflect.EnumDescriptor { -+ return file_grpc_binlog_v1_binarylog_proto_enumTypes[0].Descriptor() -+} -+ -+func (GrpcLogEntry_EventType) Type() protoreflect.EnumType { -+ return &file_grpc_binlog_v1_binarylog_proto_enumTypes[0] -+} -+ -+func (x GrpcLogEntry_EventType) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Use GrpcLogEntry_EventType.Descriptor instead. -+func (GrpcLogEntry_EventType) EnumDescriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0, 0} -+} -+ -+// Enumerates the entity that generates the log entry -+type GrpcLogEntry_Logger int32 -+ -+const ( -+ GrpcLogEntry_LOGGER_UNKNOWN GrpcLogEntry_Logger = 0 -+ GrpcLogEntry_LOGGER_CLIENT GrpcLogEntry_Logger = 1 -+ GrpcLogEntry_LOGGER_SERVER GrpcLogEntry_Logger = 2 -+) -+ -+// Enum value maps for GrpcLogEntry_Logger. -+var ( -+ GrpcLogEntry_Logger_name = map[int32]string{ -+ 0: "LOGGER_UNKNOWN", -+ 1: "LOGGER_CLIENT", -+ 2: "LOGGER_SERVER", -+ } -+ GrpcLogEntry_Logger_value = map[string]int32{ -+ "LOGGER_UNKNOWN": 0, -+ "LOGGER_CLIENT": 1, -+ "LOGGER_SERVER": 2, -+ } -+) -+ -+func (x GrpcLogEntry_Logger) Enum() *GrpcLogEntry_Logger { -+ p := new(GrpcLogEntry_Logger) -+ *p = x -+ return p -+} -+ -+func (x GrpcLogEntry_Logger) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (GrpcLogEntry_Logger) Descriptor() protoreflect.EnumDescriptor { -+ return file_grpc_binlog_v1_binarylog_proto_enumTypes[1].Descriptor() -+} -+ -+func (GrpcLogEntry_Logger) Type() protoreflect.EnumType { -+ return &file_grpc_binlog_v1_binarylog_proto_enumTypes[1] -+} -+ -+func (x GrpcLogEntry_Logger) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Use GrpcLogEntry_Logger.Descriptor instead. -+func (GrpcLogEntry_Logger) EnumDescriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0, 1} -+} -+ -+type Address_Type int32 -+ -+const ( -+ Address_TYPE_UNKNOWN Address_Type = 0 -+ // address is in 1.2.3.4 form -+ Address_TYPE_IPV4 Address_Type = 1 -+ // address is in IPv6 canonical form (RFC5952 section 4) -+ // The scope is NOT included in the address string. -+ Address_TYPE_IPV6 Address_Type = 2 -+ // address is UDS string -+ Address_TYPE_UNIX Address_Type = 3 -+) -+ -+// Enum value maps for Address_Type. -+var ( -+ Address_Type_name = map[int32]string{ -+ 0: "TYPE_UNKNOWN", -+ 1: "TYPE_IPV4", -+ 2: "TYPE_IPV6", -+ 3: "TYPE_UNIX", -+ } -+ Address_Type_value = map[string]int32{ -+ "TYPE_UNKNOWN": 0, -+ "TYPE_IPV4": 1, -+ "TYPE_IPV6": 2, -+ "TYPE_UNIX": 3, -+ } -+) -+ -+func (x Address_Type) Enum() *Address_Type { -+ p := new(Address_Type) -+ *p = x -+ return p -+} -+ -+func (x Address_Type) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (Address_Type) Descriptor() protoreflect.EnumDescriptor { -+ return file_grpc_binlog_v1_binarylog_proto_enumTypes[2].Descriptor() -+} -+ -+func (Address_Type) Type() protoreflect.EnumType { -+ return &file_grpc_binlog_v1_binarylog_proto_enumTypes[2] -+} -+ -+func (x Address_Type) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Use Address_Type.Descriptor instead. -+func (Address_Type) EnumDescriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{7, 0} -+} -+ -+// Log entry we store in binary logs -+type GrpcLogEntry struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // The timestamp of the binary log message -+ Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -+ // Uniquely identifies a call. The value must not be 0 in order to disambiguate -+ // from an unset value. -+ // Each call may have several log entries, they will all have the same call_id. -+ // Nothing is guaranteed about their value other than they are unique across -+ // different RPCs in the same gRPC process. -+ CallId uint64 `protobuf:"varint,2,opt,name=call_id,json=callId,proto3" json:"call_id,omitempty"` -+ // The entry sequence id for this call. The first GrpcLogEntry has a -+ // value of 1, to disambiguate from an unset value. The purpose of -+ // this field is to detect missing entries in environments where -+ // durability or ordering is not guaranteed. -+ SequenceIdWithinCall uint64 `protobuf:"varint,3,opt,name=sequence_id_within_call,json=sequenceIdWithinCall,proto3" json:"sequence_id_within_call,omitempty"` -+ Type GrpcLogEntry_EventType `protobuf:"varint,4,opt,name=type,proto3,enum=grpc.binarylog.v1.GrpcLogEntry_EventType" json:"type,omitempty"` -+ Logger GrpcLogEntry_Logger `protobuf:"varint,5,opt,name=logger,proto3,enum=grpc.binarylog.v1.GrpcLogEntry_Logger" json:"logger,omitempty"` // One of the above Logger enum -+ // The logger uses one of the following fields to record the payload, -+ // according to the type of the log entry. -+ // -+ // Types that are assignable to Payload: -+ // -+ // *GrpcLogEntry_ClientHeader -+ // *GrpcLogEntry_ServerHeader -+ // *GrpcLogEntry_Message -+ // *GrpcLogEntry_Trailer -+ Payload isGrpcLogEntry_Payload `protobuf_oneof:"payload"` -+ // true if payload does not represent the full message or metadata. -+ PayloadTruncated bool `protobuf:"varint,10,opt,name=payload_truncated,json=payloadTruncated,proto3" json:"payload_truncated,omitempty"` -+ // Peer address information, will only be recorded on the first -+ // incoming event. On client side, peer is logged on -+ // EVENT_TYPE_SERVER_HEADER normally or EVENT_TYPE_SERVER_TRAILER in -+ // the case of trailers-only. On server side, peer is always -+ // logged on EVENT_TYPE_CLIENT_HEADER. -+ Peer *Address `protobuf:"bytes,11,opt,name=peer,proto3" json:"peer,omitempty"` -+} -+ -+func (x *GrpcLogEntry) Reset() { -+ *x = GrpcLogEntry{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[0] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *GrpcLogEntry) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*GrpcLogEntry) ProtoMessage() {} -+ -+func (x *GrpcLogEntry) ProtoReflect() protoreflect.Message { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[0] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use GrpcLogEntry.ProtoReflect.Descriptor instead. -+func (*GrpcLogEntry) Descriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0} -+} -+ -+func (x *GrpcLogEntry) GetTimestamp() *timestamppb.Timestamp { -+ if x != nil { -+ return x.Timestamp -+ } -+ return nil -+} -+ -+func (x *GrpcLogEntry) GetCallId() uint64 { -+ if x != nil { -+ return x.CallId -+ } -+ return 0 -+} -+ -+func (x *GrpcLogEntry) GetSequenceIdWithinCall() uint64 { -+ if x != nil { -+ return x.SequenceIdWithinCall -+ } -+ return 0 -+} -+ -+func (x *GrpcLogEntry) GetType() GrpcLogEntry_EventType { -+ if x != nil { -+ return x.Type -+ } -+ return GrpcLogEntry_EVENT_TYPE_UNKNOWN -+} -+ -+func (x *GrpcLogEntry) GetLogger() GrpcLogEntry_Logger { -+ if x != nil { -+ return x.Logger -+ } -+ return GrpcLogEntry_LOGGER_UNKNOWN -+} -+ -+func (m *GrpcLogEntry) GetPayload() isGrpcLogEntry_Payload { -+ if m != nil { -+ return m.Payload -+ } -+ return nil -+} -+ -+func (x *GrpcLogEntry) GetClientHeader() *ClientHeader { -+ if x, ok := x.GetPayload().(*GrpcLogEntry_ClientHeader); ok { -+ return x.ClientHeader -+ } -+ return nil -+} -+ -+func (x *GrpcLogEntry) GetServerHeader() *ServerHeader { -+ if x, ok := x.GetPayload().(*GrpcLogEntry_ServerHeader); ok { -+ return x.ServerHeader -+ } -+ return nil -+} -+ -+func (x *GrpcLogEntry) GetMessage() *Message { -+ if x, ok := x.GetPayload().(*GrpcLogEntry_Message); ok { -+ return x.Message -+ } -+ return nil -+} -+ -+func (x *GrpcLogEntry) GetTrailer() *Trailer { -+ if x, ok := x.GetPayload().(*GrpcLogEntry_Trailer); ok { -+ return x.Trailer -+ } -+ return nil -+} -+ -+func (x *GrpcLogEntry) GetPayloadTruncated() bool { -+ if x != nil { -+ return x.PayloadTruncated -+ } -+ return false -+} -+ -+func (x *GrpcLogEntry) GetPeer() *Address { -+ if x != nil { -+ return x.Peer -+ } -+ return nil -+} -+ -+type isGrpcLogEntry_Payload interface { -+ isGrpcLogEntry_Payload() -+} -+ -+type GrpcLogEntry_ClientHeader struct { -+ ClientHeader *ClientHeader `protobuf:"bytes,6,opt,name=client_header,json=clientHeader,proto3,oneof"` -+} -+ -+type GrpcLogEntry_ServerHeader struct { -+ ServerHeader *ServerHeader `protobuf:"bytes,7,opt,name=server_header,json=serverHeader,proto3,oneof"` -+} -+ -+type GrpcLogEntry_Message struct { -+ // Used by EVENT_TYPE_CLIENT_MESSAGE, EVENT_TYPE_SERVER_MESSAGE -+ Message *Message `protobuf:"bytes,8,opt,name=message,proto3,oneof"` -+} -+ -+type GrpcLogEntry_Trailer struct { -+ Trailer *Trailer `protobuf:"bytes,9,opt,name=trailer,proto3,oneof"` -+} -+ -+func (*GrpcLogEntry_ClientHeader) isGrpcLogEntry_Payload() {} -+ -+func (*GrpcLogEntry_ServerHeader) isGrpcLogEntry_Payload() {} -+ -+func (*GrpcLogEntry_Message) isGrpcLogEntry_Payload() {} -+ -+func (*GrpcLogEntry_Trailer) isGrpcLogEntry_Payload() {} -+ -+type ClientHeader struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // This contains only the metadata from the application. -+ Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // The name of the RPC method, which looks something like: -+ // // -+ // Note the leading "/" character. -+ MethodName string `protobuf:"bytes,2,opt,name=method_name,json=methodName,proto3" json:"method_name,omitempty"` -+ // A single process may be used to run multiple virtual -+ // servers with different identities. -+ // The authority is the name of such a server identitiy. -+ // It is typically a portion of the URI in the form of -+ // or : . -+ Authority string `protobuf:"bytes,3,opt,name=authority,proto3" json:"authority,omitempty"` -+ // the RPC timeout -+ Timeout *durationpb.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"` -+} -+ -+func (x *ClientHeader) Reset() { -+ *x = ClientHeader{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[1] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *ClientHeader) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*ClientHeader) ProtoMessage() {} -+ -+func (x *ClientHeader) ProtoReflect() protoreflect.Message { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[1] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use ClientHeader.ProtoReflect.Descriptor instead. -+func (*ClientHeader) Descriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{1} -+} -+ -+func (x *ClientHeader) GetMetadata() *Metadata { -+ if x != nil { -+ return x.Metadata -+ } -+ return nil -+} -+ -+func (x *ClientHeader) GetMethodName() string { -+ if x != nil { -+ return x.MethodName -+ } -+ return "" -+} -+ -+func (x *ClientHeader) GetAuthority() string { -+ if x != nil { -+ return x.Authority -+ } -+ return "" -+} -+ -+func (x *ClientHeader) GetTimeout() *durationpb.Duration { -+ if x != nil { -+ return x.Timeout -+ } -+ return nil -+} -+ -+type ServerHeader struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // This contains only the metadata from the application. -+ Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` -+} -+ -+func (x *ServerHeader) Reset() { -+ *x = ServerHeader{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[2] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *ServerHeader) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*ServerHeader) ProtoMessage() {} -+ -+func (x *ServerHeader) ProtoReflect() protoreflect.Message { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[2] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use ServerHeader.ProtoReflect.Descriptor instead. -+func (*ServerHeader) Descriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{2} -+} -+ -+func (x *ServerHeader) GetMetadata() *Metadata { -+ if x != nil { -+ return x.Metadata -+ } -+ return nil -+} -+ -+type Trailer struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // This contains only the metadata from the application. -+ Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // The gRPC status code. -+ StatusCode uint32 `protobuf:"varint,2,opt,name=status_code,json=statusCode,proto3" json:"status_code,omitempty"` -+ // An original status message before any transport specific -+ // encoding. -+ StatusMessage string `protobuf:"bytes,3,opt,name=status_message,json=statusMessage,proto3" json:"status_message,omitempty"` -+ // The value of the 'grpc-status-details-bin' metadata key. If -+ // present, this is always an encoded 'google.rpc.Status' message. -+ StatusDetails []byte `protobuf:"bytes,4,opt,name=status_details,json=statusDetails,proto3" json:"status_details,omitempty"` -+} -+ -+func (x *Trailer) Reset() { -+ *x = Trailer{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[3] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Trailer) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Trailer) ProtoMessage() {} -+ -+func (x *Trailer) ProtoReflect() protoreflect.Message { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[3] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Trailer.ProtoReflect.Descriptor instead. -+func (*Trailer) Descriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{3} -+} -+ -+func (x *Trailer) GetMetadata() *Metadata { -+ if x != nil { -+ return x.Metadata -+ } -+ return nil -+} -+ -+func (x *Trailer) GetStatusCode() uint32 { -+ if x != nil { -+ return x.StatusCode -+ } -+ return 0 -+} -+ -+func (x *Trailer) GetStatusMessage() string { -+ if x != nil { -+ return x.StatusMessage -+ } -+ return "" -+} -+ -+func (x *Trailer) GetStatusDetails() []byte { -+ if x != nil { -+ return x.StatusDetails -+ } -+ return nil -+} -+ -+// Message payload, used by CLIENT_MESSAGE and SERVER_MESSAGE -+type Message struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // Length of the message. It may not be the same as the length of the -+ // data field, as the logging payload can be truncated or omitted. -+ Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"` -+ // May be truncated or omitted. -+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` -+} -+ -+func (x *Message) Reset() { -+ *x = Message{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[4] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Message) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Message) ProtoMessage() {} -+ -+func (x *Message) ProtoReflect() protoreflect.Message { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[4] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Message.ProtoReflect.Descriptor instead. -+func (*Message) Descriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{4} -+} -+ -+func (x *Message) GetLength() uint32 { -+ if x != nil { -+ return x.Length -+ } -+ return 0 -+} -+ -+func (x *Message) GetData() []byte { -+ if x != nil { -+ return x.Data -+ } -+ return nil -+} -+ -+// A list of metadata pairs, used in the payload of client header, -+// server header, and server trailer. -+// Implementations may omit some entries to honor the header limits -+// of GRPC_BINARY_LOG_CONFIG. -+// -+// Header keys added by gRPC are omitted. To be more specific, -+// implementations will not log the following entries, and this is -+// not to be treated as a truncation: -+// - entries handled by grpc that are not user visible, such as those -+// that begin with 'grpc-' (with exception of grpc-trace-bin) -+// or keys like 'lb-token' -+// - transport specific entries, including but not limited to: -+// ':path', ':authority', 'content-encoding', 'user-agent', 'te', etc -+// - entries added for call credentials -+// -+// Implementations must always log grpc-trace-bin if it is present. -+// Practically speaking it will only be visible on server side because -+// grpc-trace-bin is managed by low level client side mechanisms -+// inaccessible from the application level. On server side, the -+// header is just a normal metadata key. -+// The pair will not count towards the size limit. -+type Metadata struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Entry []*MetadataEntry `protobuf:"bytes,1,rep,name=entry,proto3" json:"entry,omitempty"` -+} -+ -+func (x *Metadata) Reset() { -+ *x = Metadata{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[5] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Metadata) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Metadata) ProtoMessage() {} -+ -+func (x *Metadata) ProtoReflect() protoreflect.Message { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[5] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Metadata.ProtoReflect.Descriptor instead. -+func (*Metadata) Descriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{5} -+} -+ -+func (x *Metadata) GetEntry() []*MetadataEntry { -+ if x != nil { -+ return x.Entry -+ } -+ return nil -+} -+ -+// A metadata key value pair -+type MetadataEntry struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` -+ Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -+} -+ -+func (x *MetadataEntry) Reset() { -+ *x = MetadataEntry{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[6] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *MetadataEntry) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*MetadataEntry) ProtoMessage() {} -+ -+func (x *MetadataEntry) ProtoReflect() protoreflect.Message { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[6] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use MetadataEntry.ProtoReflect.Descriptor instead. -+func (*MetadataEntry) Descriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{6} -+} -+ -+func (x *MetadataEntry) GetKey() string { -+ if x != nil { -+ return x.Key -+ } -+ return "" -+} -+ -+func (x *MetadataEntry) GetValue() []byte { -+ if x != nil { -+ return x.Value -+ } -+ return nil -+} -+ -+// Address information -+type Address struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ Type Address_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.binarylog.v1.Address_Type" json:"type,omitempty"` -+ Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` -+ // only for TYPE_IPV4 and TYPE_IPV6 -+ IpPort uint32 `protobuf:"varint,3,opt,name=ip_port,json=ipPort,proto3" json:"ip_port,omitempty"` -+} -+ -+func (x *Address) Reset() { -+ *x = Address{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[7] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *Address) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*Address) ProtoMessage() {} -+ -+func (x *Address) ProtoReflect() protoreflect.Message { -+ mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[7] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use Address.ProtoReflect.Descriptor instead. -+func (*Address) Descriptor() ([]byte, []int) { -+ return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{7} -+} -+ -+func (x *Address) GetType() Address_Type { -+ if x != nil { -+ return x.Type -+ } -+ return Address_TYPE_UNKNOWN -+} -+ -+func (x *Address) GetAddress() string { -+ if x != nil { -+ return x.Address -+ } -+ return "" -+} -+ -+func (x *Address) GetIpPort() uint32 { -+ if x != nil { -+ return x.IpPort -+ } -+ return 0 -+} -+ -+var File_grpc_binlog_v1_binarylog_proto protoreflect.FileDescriptor -+ -+var file_grpc_binlog_v1_binarylog_proto_rawDesc = []byte{ -+ 0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x2f, 0x76, 0x31, -+ 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, -+ 0x12, 0x11, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, -+ 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, -+ 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, -+ 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, -+ 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, -+ 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x07, 0x0a, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, -+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, -+ 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, -+ 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, -+ 0x17, 0x0a, 0x07, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, -+ 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x65, 0x71, 0x75, -+ 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x5f, 0x63, -+ 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x73, 0x65, 0x71, 0x75, 0x65, -+ 0x6e, 0x63, 0x65, 0x49, 0x64, 0x57, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12, -+ 0x3d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, -+ 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, -+ 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x45, -+ 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3e, -+ 0x0a, 0x06, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, -+ 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, -+ 0x76, 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, -+ 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x12, 0x46, -+ 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, -+ 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, -+ 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, -+ 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, -+ 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, -+ 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, -+ 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, -+ 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, -+ 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, -+ 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, -+ 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, -+ 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, -+ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, -+ 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, -+ 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, -+ 0x6c, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x2b, -+ 0x0a, 0x11, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, -+ 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x70, 0x61, 0x79, 0x6c, 0x6f, -+ 0x61, 0x64, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x70, -+ 0x65, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, -+ 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, -+ 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x22, 0xf5, 0x01, 0x0a, 0x09, -+ 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45, -+ 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, -+ 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, -+ 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, -+ 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, -+ 0x52, 0x56, 0x45, 0x52, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, -+ 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45, -+ 0x4e, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, -+ 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, -+ 0x52, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x45, -+ 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, -+ 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x05, 0x12, 0x1d, 0x0a, -+ 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, -+ 0x45, 0x52, 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4c, 0x45, 0x52, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, -+ 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, -+ 0x4c, 0x10, 0x07, 0x22, 0x42, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a, -+ 0x0e, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, -+ 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x43, 0x4c, 0x49, 0x45, -+ 0x4e, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x53, -+ 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, -+ 0x61, 0x64, 0x22, 0xbb, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, -+ 0x64, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, -+ 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, -+ 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, -+ 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, -+ 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, -+ 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x74, -+ 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, -+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, -+ 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, -+ 0x22, 0x47, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, -+ 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, -+ 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, -+ 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, -+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb1, 0x01, 0x0a, 0x07, 0x54, 0x72, -+ 0x61, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, -+ 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, -+ 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, -+ 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, -+ 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, -+ 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, -+ 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, -+ 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, -+ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, -+ 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, -+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x35, 0x0a, -+ 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, -+ 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, -+ 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, -+ 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, -+ 0x12, 0x36, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, -+ 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, -+ 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, -+ 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x37, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, -+ 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, -+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, -+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, -+ 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a, -+ 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x72, -+ 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, -+ 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, -+ 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, -+ 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x07, -+ 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, -+ 0x70, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x45, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, -+ 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, -+ 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x50, 0x56, 0x34, 0x10, 0x01, 0x12, 0x0d, -+ 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x50, 0x56, 0x36, 0x10, 0x02, 0x12, 0x0d, 0x0a, -+ 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x10, 0x03, 0x42, 0x5c, 0x0a, 0x14, -+ 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, -+ 0x67, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x50, -+ 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, -+ 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, -+ 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x69, -+ 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, -+ 0x6f, 0x33, -+} -+ -+var ( -+ file_grpc_binlog_v1_binarylog_proto_rawDescOnce sync.Once -+ file_grpc_binlog_v1_binarylog_proto_rawDescData = file_grpc_binlog_v1_binarylog_proto_rawDesc -+) -+ -+func file_grpc_binlog_v1_binarylog_proto_rawDescGZIP() []byte { -+ file_grpc_binlog_v1_binarylog_proto_rawDescOnce.Do(func() { -+ file_grpc_binlog_v1_binarylog_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_binlog_v1_binarylog_proto_rawDescData) -+ }) -+ return file_grpc_binlog_v1_binarylog_proto_rawDescData -+} -+ -+var file_grpc_binlog_v1_binarylog_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -+var file_grpc_binlog_v1_binarylog_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -+var file_grpc_binlog_v1_binarylog_proto_goTypes = []interface{}{ -+ (GrpcLogEntry_EventType)(0), // 0: grpc.binarylog.v1.GrpcLogEntry.EventType -+ (GrpcLogEntry_Logger)(0), // 1: grpc.binarylog.v1.GrpcLogEntry.Logger -+ (Address_Type)(0), // 2: grpc.binarylog.v1.Address.Type -+ (*GrpcLogEntry)(nil), // 3: grpc.binarylog.v1.GrpcLogEntry -+ (*ClientHeader)(nil), // 4: grpc.binarylog.v1.ClientHeader -+ (*ServerHeader)(nil), // 5: grpc.binarylog.v1.ServerHeader -+ (*Trailer)(nil), // 6: grpc.binarylog.v1.Trailer -+ (*Message)(nil), // 7: grpc.binarylog.v1.Message -+ (*Metadata)(nil), // 8: grpc.binarylog.v1.Metadata -+ (*MetadataEntry)(nil), // 9: grpc.binarylog.v1.MetadataEntry -+ (*Address)(nil), // 10: grpc.binarylog.v1.Address -+ (*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp -+ (*durationpb.Duration)(nil), // 12: google.protobuf.Duration -+} -+var file_grpc_binlog_v1_binarylog_proto_depIdxs = []int32{ -+ 11, // 0: grpc.binarylog.v1.GrpcLogEntry.timestamp:type_name -> google.protobuf.Timestamp -+ 0, // 1: grpc.binarylog.v1.GrpcLogEntry.type:type_name -> grpc.binarylog.v1.GrpcLogEntry.EventType -+ 1, // 2: grpc.binarylog.v1.GrpcLogEntry.logger:type_name -> grpc.binarylog.v1.GrpcLogEntry.Logger -+ 4, // 3: grpc.binarylog.v1.GrpcLogEntry.client_header:type_name -> grpc.binarylog.v1.ClientHeader -+ 5, // 4: grpc.binarylog.v1.GrpcLogEntry.server_header:type_name -> grpc.binarylog.v1.ServerHeader -+ 7, // 5: grpc.binarylog.v1.GrpcLogEntry.message:type_name -> grpc.binarylog.v1.Message -+ 6, // 6: grpc.binarylog.v1.GrpcLogEntry.trailer:type_name -> grpc.binarylog.v1.Trailer -+ 10, // 7: grpc.binarylog.v1.GrpcLogEntry.peer:type_name -> grpc.binarylog.v1.Address -+ 8, // 8: grpc.binarylog.v1.ClientHeader.metadata:type_name -> grpc.binarylog.v1.Metadata -+ 12, // 9: grpc.binarylog.v1.ClientHeader.timeout:type_name -> google.protobuf.Duration -+ 8, // 10: grpc.binarylog.v1.ServerHeader.metadata:type_name -> grpc.binarylog.v1.Metadata -+ 8, // 11: grpc.binarylog.v1.Trailer.metadata:type_name -> grpc.binarylog.v1.Metadata -+ 9, // 12: grpc.binarylog.v1.Metadata.entry:type_name -> grpc.binarylog.v1.MetadataEntry -+ 2, // 13: grpc.binarylog.v1.Address.type:type_name -> grpc.binarylog.v1.Address.Type -+ 14, // [14:14] is the sub-list for method output_type -+ 14, // [14:14] is the sub-list for method input_type -+ 14, // [14:14] is the sub-list for extension type_name -+ 14, // [14:14] is the sub-list for extension extendee -+ 0, // [0:14] is the sub-list for field type_name -+} -+ -+func init() { file_grpc_binlog_v1_binarylog_proto_init() } -+func file_grpc_binlog_v1_binarylog_proto_init() { -+ if File_grpc_binlog_v1_binarylog_proto != nil { -+ return -+ } -+ if !protoimpl.UnsafeEnabled { -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*GrpcLogEntry); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*ClientHeader); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*ServerHeader); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Trailer); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Message); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Metadata); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*MetadataEntry); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*Address); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ } -+ file_grpc_binlog_v1_binarylog_proto_msgTypes[0].OneofWrappers = []interface{}{ -+ (*GrpcLogEntry_ClientHeader)(nil), -+ (*GrpcLogEntry_ServerHeader)(nil), -+ (*GrpcLogEntry_Message)(nil), -+ (*GrpcLogEntry_Trailer)(nil), -+ } -+ type x struct{} -+ out := protoimpl.TypeBuilder{ -+ File: protoimpl.DescBuilder{ -+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), -+ RawDescriptor: file_grpc_binlog_v1_binarylog_proto_rawDesc, -+ NumEnums: 3, -+ NumMessages: 8, -+ NumExtensions: 0, -+ NumServices: 0, -+ }, -+ GoTypes: file_grpc_binlog_v1_binarylog_proto_goTypes, -+ DependencyIndexes: file_grpc_binlog_v1_binarylog_proto_depIdxs, -+ EnumInfos: file_grpc_binlog_v1_binarylog_proto_enumTypes, -+ MessageInfos: file_grpc_binlog_v1_binarylog_proto_msgTypes, -+ }.Build() -+ File_grpc_binlog_v1_binarylog_proto = out.File -+ file_grpc_binlog_v1_binarylog_proto_rawDesc = nil -+ file_grpc_binlog_v1_binarylog_proto_goTypes = nil -+ file_grpc_binlog_v1_binarylog_proto_depIdxs = nil -+} -diff --git a/vendor/google.golang.org/grpc/call.go b/vendor/google.golang.org/grpc/call.go -new file mode 100755 -index 0000000..e6a1dc5 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/call.go -@@ -0,0 +1,79 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+) -+ -+// Invoke sends the RPC request on the wire and returns after response is -+// received. This is typically called by generated code. -+// -+// All errors returned by Invoke are compatible with the status package. -+func (cc *ClientConn) Invoke(ctx context.Context, method string, args, reply interface{}, opts ...CallOption) error { -+ if err := cc.idlenessMgr.onCallBegin(); err != nil { -+ return err -+ } -+ defer cc.idlenessMgr.onCallEnd() -+ -+ // allow interceptor to see all applicable call options, which means those -+ // configured as defaults from dial option as well as per-call options -+ opts = combine(cc.dopts.callOptions, opts) -+ -+ if cc.dopts.unaryInt != nil { -+ return cc.dopts.unaryInt(ctx, method, args, reply, cc, invoke, opts...) -+ } -+ return invoke(ctx, method, args, reply, cc, opts...) -+} -+ -+func combine(o1 []CallOption, o2 []CallOption) []CallOption { -+ // we don't use append because o1 could have extra capacity whose -+ // elements would be overwritten, which could cause inadvertent -+ // sharing (and race conditions) between concurrent calls -+ if len(o1) == 0 { -+ return o2 -+ } else if len(o2) == 0 { -+ return o1 -+ } -+ ret := make([]CallOption, len(o1)+len(o2)) -+ copy(ret, o1) -+ copy(ret[len(o1):], o2) -+ return ret -+} -+ -+// Invoke sends the RPC request on the wire and returns after response is -+// received. This is typically called by generated code. -+// -+// DEPRECATED: Use ClientConn.Invoke instead. -+func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) error { -+ return cc.Invoke(ctx, method, args, reply, opts...) -+} -+ -+var unaryStreamDesc = &StreamDesc{ServerStreams: false, ClientStreams: false} -+ -+func invoke(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error { -+ cs, err := newClientStream(ctx, unaryStreamDesc, cc, method, opts...) -+ if err != nil { -+ return err -+ } -+ if err := cs.SendMsg(req); err != nil { -+ return err -+ } -+ return cs.RecvMsg(reply) -+} -diff --git a/vendor/google.golang.org/grpc/channelz/channelz.go b/vendor/google.golang.org/grpc/channelz/channelz.go -new file mode 100755 -index 0000000..32b7fa5 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/channelz/channelz.go -@@ -0,0 +1,36 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package channelz exports internals of the channelz implementation as required -+// by other gRPC packages. -+// -+// The implementation of the channelz spec as defined in -+// https://github.com/grpc/proposal/blob/master/A14-channelz.md, is provided by -+// the `internal/channelz` package. -+// -+// # Experimental -+// -+// Notice: All APIs in this package are experimental and may be removed in a -+// later release. -+package channelz -+ -+import "google.golang.org/grpc/internal/channelz" -+ -+// Identifier is an opaque identifier which uniquely identifies an entity in the -+// channelz database. -+type Identifier = channelz.Identifier -diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go -new file mode 100755 -index 0000000..bfd7555 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/clientconn.go -@@ -0,0 +1,1979 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ "math" -+ "net/url" -+ "strings" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/balancer/base" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/connectivity" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/internal/backoff" -+ "google.golang.org/grpc/internal/channelz" -+ "google.golang.org/grpc/internal/grpcsync" -+ "google.golang.org/grpc/internal/pretty" -+ iresolver "google.golang.org/grpc/internal/resolver" -+ "google.golang.org/grpc/internal/transport" -+ "google.golang.org/grpc/keepalive" -+ "google.golang.org/grpc/resolver" -+ "google.golang.org/grpc/serviceconfig" -+ "google.golang.org/grpc/status" -+ -+ _ "google.golang.org/grpc/balancer/roundrobin" // To register roundrobin. -+ _ "google.golang.org/grpc/internal/resolver/dns" // To register dns resolver. -+ _ "google.golang.org/grpc/internal/resolver/passthrough" // To register passthrough resolver. -+ _ "google.golang.org/grpc/internal/resolver/unix" // To register unix resolver. -+) -+ -+const ( -+ // minimum time to give a connection to complete -+ minConnectTimeout = 20 * time.Second -+ // must match grpclbName in grpclb/grpclb.go -+ grpclbName = "grpclb" -+) -+ -+var ( -+ // ErrClientConnClosing indicates that the operation is illegal because -+ // the ClientConn is closing. -+ // -+ // Deprecated: this error should not be relied upon by users; use the status -+ // code of Canceled instead. -+ ErrClientConnClosing = status.Error(codes.Canceled, "grpc: the client connection is closing") -+ // errConnDrain indicates that the connection starts to be drained and does not accept any new RPCs. -+ errConnDrain = errors.New("grpc: the connection is drained") -+ // errConnClosing indicates that the connection is closing. -+ errConnClosing = errors.New("grpc: the connection is closing") -+ // errConnIdling indicates the the connection is being closed as the channel -+ // is moving to an idle mode due to inactivity. -+ errConnIdling = errors.New("grpc: the connection is closing due to channel idleness") -+ // invalidDefaultServiceConfigErrPrefix is used to prefix the json parsing error for the default -+ // service config. -+ invalidDefaultServiceConfigErrPrefix = "grpc: the provided default service config is invalid" -+) -+ -+// The following errors are returned from Dial and DialContext -+var ( -+ // errNoTransportSecurity indicates that there is no transport security -+ // being set for ClientConn. Users should either set one or explicitly -+ // call WithInsecure DialOption to disable security. -+ errNoTransportSecurity = errors.New("grpc: no transport security set (use grpc.WithTransportCredentials(insecure.NewCredentials()) explicitly or set credentials)") -+ // errTransportCredsAndBundle indicates that creds bundle is used together -+ // with other individual Transport Credentials. -+ errTransportCredsAndBundle = errors.New("grpc: credentials.Bundle may not be used with individual TransportCredentials") -+ // errNoTransportCredsInBundle indicated that the configured creds bundle -+ // returned a transport credentials which was nil. -+ errNoTransportCredsInBundle = errors.New("grpc: credentials.Bundle must return non-nil transport credentials") -+ // errTransportCredentialsMissing indicates that users want to transmit -+ // security information (e.g., OAuth2 token) which requires secure -+ // connection on an insecure connection. -+ errTransportCredentialsMissing = errors.New("grpc: the credentials require transport level security (use grpc.WithTransportCredentials() to set)") -+) -+ -+const ( -+ defaultClientMaxReceiveMessageSize = 1024 * 1024 * 4 -+ defaultClientMaxSendMessageSize = math.MaxInt32 -+ // http2IOBufSize specifies the buffer size for sending frames. -+ defaultWriteBufSize = 32 * 1024 -+ defaultReadBufSize = 32 * 1024 -+) -+ -+// Dial creates a client connection to the given target. -+func Dial(target string, opts ...DialOption) (*ClientConn, error) { -+ return DialContext(context.Background(), target, opts...) -+} -+ -+type defaultConfigSelector struct { -+ sc *ServiceConfig -+} -+ -+func (dcs *defaultConfigSelector) SelectConfig(rpcInfo iresolver.RPCInfo) (*iresolver.RPCConfig, error) { -+ return &iresolver.RPCConfig{ -+ Context: rpcInfo.Context, -+ MethodConfig: getMethodConfig(dcs.sc, rpcInfo.Method), -+ }, nil -+} -+ -+// DialContext creates a client connection to the given target. By default, it's -+// a non-blocking dial (the function won't wait for connections to be -+// established, and connecting happens in the background). To make it a blocking -+// dial, use WithBlock() dial option. -+// -+// In the non-blocking case, the ctx does not act against the connection. It -+// only controls the setup steps. -+// -+// In the blocking case, ctx can be used to cancel or expire the pending -+// connection. Once this function returns, the cancellation and expiration of -+// ctx will be noop. Users should call ClientConn.Close to terminate all the -+// pending operations after this function returns. -+// -+// The target name syntax is defined in -+// https://github.com/grpc/grpc/blob/master/doc/naming.md. -+// e.g. to use dns resolver, a "dns:///" prefix should be applied to the target. -+func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) { -+ cc := &ClientConn{ -+ target: target, -+ csMgr: &connectivityStateManager{}, -+ conns: make(map[*addrConn]struct{}), -+ dopts: defaultDialOptions(), -+ czData: new(channelzData), -+ } -+ -+ // We start the channel off in idle mode, but kick it out of idle at the end -+ // of this method, instead of waiting for the first RPC. Other gRPC -+ // implementations do wait for the first RPC to kick the channel out of -+ // idle. But doing so would be a major behavior change for our users who are -+ // used to seeing the channel active after Dial. -+ // -+ // Taking this approach of kicking it out of idle at the end of this method -+ // allows us to share the code between channel creation and exiting idle -+ // mode. This will also make it easy for us to switch to starting the -+ // channel off in idle, if at all we ever get to do that. -+ cc.idlenessState = ccIdlenessStateIdle -+ -+ cc.retryThrottler.Store((*retryThrottler)(nil)) -+ cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{nil}) -+ cc.ctx, cc.cancel = context.WithCancel(context.Background()) -+ cc.exitIdleCond = sync.NewCond(&cc.mu) -+ -+ disableGlobalOpts := false -+ for _, opt := range opts { -+ if _, ok := opt.(*disableGlobalDialOptions); ok { -+ disableGlobalOpts = true -+ break -+ } -+ } -+ -+ if !disableGlobalOpts { -+ for _, opt := range globalDialOptions { -+ opt.apply(&cc.dopts) -+ } -+ } -+ -+ for _, opt := range opts { -+ opt.apply(&cc.dopts) -+ } -+ -+ chainUnaryClientInterceptors(cc) -+ chainStreamClientInterceptors(cc) -+ -+ defer func() { -+ if err != nil { -+ cc.Close() -+ } -+ }() -+ -+ // Register ClientConn with channelz. -+ cc.channelzRegistration(target) -+ -+ if err := cc.validateTransportCredentials(); err != nil { -+ return nil, err -+ } -+ -+ if cc.dopts.defaultServiceConfigRawJSON != nil { -+ scpr := parseServiceConfig(*cc.dopts.defaultServiceConfigRawJSON) -+ if scpr.Err != nil { -+ return nil, fmt.Errorf("%s: %v", invalidDefaultServiceConfigErrPrefix, scpr.Err) -+ } -+ cc.dopts.defaultServiceConfig, _ = scpr.Config.(*ServiceConfig) -+ } -+ cc.mkp = cc.dopts.copts.KeepaliveParams -+ -+ if cc.dopts.copts.UserAgent != "" { -+ cc.dopts.copts.UserAgent += " " + grpcUA -+ } else { -+ cc.dopts.copts.UserAgent = grpcUA -+ } -+ -+ if cc.dopts.timeout > 0 { -+ var cancel context.CancelFunc -+ ctx, cancel = context.WithTimeout(ctx, cc.dopts.timeout) -+ defer cancel() -+ } -+ defer func() { -+ select { -+ case <-ctx.Done(): -+ switch { -+ case ctx.Err() == err: -+ conn = nil -+ case err == nil || !cc.dopts.returnLastError: -+ conn, err = nil, ctx.Err() -+ default: -+ conn, err = nil, fmt.Errorf("%v: %v", ctx.Err(), err) -+ } -+ default: -+ } -+ }() -+ -+ if cc.dopts.bs == nil { -+ cc.dopts.bs = backoff.DefaultExponential -+ } -+ -+ // Determine the resolver to use. -+ if err := cc.parseTargetAndFindResolver(); err != nil { -+ return nil, err -+ } -+ if err = cc.determineAuthority(); err != nil { -+ return nil, err -+ } -+ -+ if cc.dopts.scChan != nil { -+ // Blocking wait for the initial service config. -+ select { -+ case sc, ok := <-cc.dopts.scChan: -+ if ok { -+ cc.sc = &sc -+ cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{&sc}) -+ } -+ case <-ctx.Done(): -+ return nil, ctx.Err() -+ } -+ } -+ if cc.dopts.scChan != nil { -+ go cc.scWatcher() -+ } -+ -+ // This creates the name resolver, load balancer, blocking picker etc. -+ if err := cc.exitIdleMode(); err != nil { -+ return nil, err -+ } -+ -+ // Configure idleness support with configured idle timeout or default idle -+ // timeout duration. Idleness can be explicitly disabled by the user, by -+ // setting the dial option to 0. -+ cc.idlenessMgr = newIdlenessManager(cc, cc.dopts.idleTimeout) -+ -+ // Return early for non-blocking dials. -+ if !cc.dopts.block { -+ return cc, nil -+ } -+ -+ // A blocking dial blocks until the clientConn is ready. -+ for { -+ s := cc.GetState() -+ if s == connectivity.Idle { -+ cc.Connect() -+ } -+ if s == connectivity.Ready { -+ return cc, nil -+ } else if cc.dopts.copts.FailOnNonTempDialError && s == connectivity.TransientFailure { -+ if err = cc.connectionError(); err != nil { -+ terr, ok := err.(interface { -+ Temporary() bool -+ }) -+ if ok && !terr.Temporary() { -+ return nil, err -+ } -+ } -+ } -+ if !cc.WaitForStateChange(ctx, s) { -+ // ctx got timeout or canceled. -+ if err = cc.connectionError(); err != nil && cc.dopts.returnLastError { -+ return nil, err -+ } -+ return nil, ctx.Err() -+ } -+ } -+} -+ -+// addTraceEvent is a helper method to add a trace event on the channel. If the -+// channel is a nested one, the same event is also added on the parent channel. -+func (cc *ClientConn) addTraceEvent(msg string) { -+ ted := &channelz.TraceEventDesc{ -+ Desc: fmt.Sprintf("Channel %s", msg), -+ Severity: channelz.CtInfo, -+ } -+ if cc.dopts.channelzParentID != nil { -+ ted.Parent = &channelz.TraceEventDesc{ -+ Desc: fmt.Sprintf("Nested channel(id:%d) %s", cc.channelzID.Int(), msg), -+ Severity: channelz.CtInfo, -+ } -+ } -+ channelz.AddTraceEvent(logger, cc.channelzID, 0, ted) -+} -+ -+// exitIdleMode moves the channel out of idle mode by recreating the name -+// resolver and load balancer. -+func (cc *ClientConn) exitIdleMode() error { -+ cc.mu.Lock() -+ if cc.conns == nil { -+ cc.mu.Unlock() -+ return errConnClosing -+ } -+ if cc.idlenessState != ccIdlenessStateIdle { -+ cc.mu.Unlock() -+ logger.Info("ClientConn asked to exit idle mode when not in idle mode") -+ return nil -+ } -+ -+ defer func() { -+ // When Close() and exitIdleMode() race against each other, one of the -+ // following two can happen: -+ // - Close() wins the race and runs first. exitIdleMode() runs after, and -+ // sees that the ClientConn is already closed and hence returns early. -+ // - exitIdleMode() wins the race and runs first and recreates the balancer -+ // and releases the lock before recreating the resolver. If Close() runs -+ // in this window, it will wait for exitIdleMode to complete. -+ // -+ // We achieve this synchronization using the below condition variable. -+ cc.mu.Lock() -+ cc.idlenessState = ccIdlenessStateActive -+ cc.exitIdleCond.Signal() -+ cc.mu.Unlock() -+ }() -+ -+ cc.idlenessState = ccIdlenessStateExitingIdle -+ exitedIdle := false -+ if cc.blockingpicker == nil { -+ cc.blockingpicker = newPickerWrapper() -+ } else { -+ cc.blockingpicker.exitIdleMode() -+ exitedIdle = true -+ } -+ -+ var credsClone credentials.TransportCredentials -+ if creds := cc.dopts.copts.TransportCredentials; creds != nil { -+ credsClone = creds.Clone() -+ } -+ if cc.balancerWrapper == nil { -+ cc.balancerWrapper = newCCBalancerWrapper(cc, balancer.BuildOptions{ -+ DialCreds: credsClone, -+ CredsBundle: cc.dopts.copts.CredsBundle, -+ Dialer: cc.dopts.copts.Dialer, -+ Authority: cc.authority, -+ CustomUserAgent: cc.dopts.copts.UserAgent, -+ ChannelzParentID: cc.channelzID, -+ Target: cc.parsedTarget, -+ }) -+ } else { -+ cc.balancerWrapper.exitIdleMode() -+ } -+ cc.firstResolveEvent = grpcsync.NewEvent() -+ cc.mu.Unlock() -+ -+ // This needs to be called without cc.mu because this builds a new resolver -+ // which might update state or report error inline which needs to be handled -+ // by cc.updateResolverState() which also grabs cc.mu. -+ if err := cc.initResolverWrapper(credsClone); err != nil { -+ return err -+ } -+ -+ if exitedIdle { -+ cc.addTraceEvent("exiting idle mode") -+ } -+ return nil -+} -+ -+// enterIdleMode puts the channel in idle mode, and as part of it shuts down the -+// name resolver, load balancer and any subchannels. -+func (cc *ClientConn) enterIdleMode() error { -+ cc.mu.Lock() -+ if cc.conns == nil { -+ cc.mu.Unlock() -+ return ErrClientConnClosing -+ } -+ if cc.idlenessState != ccIdlenessStateActive { -+ logger.Error("ClientConn asked to enter idle mode when not active") -+ return nil -+ } -+ -+ // cc.conns == nil is a proxy for the ClientConn being closed. So, instead -+ // of setting it to nil here, we recreate the map. This also means that we -+ // don't have to do this when exiting idle mode. -+ conns := cc.conns -+ cc.conns = make(map[*addrConn]struct{}) -+ -+ // TODO: Currently, we close the resolver wrapper upon entering idle mode -+ // and create a new one upon exiting idle mode. This means that the -+ // `cc.resolverWrapper` field would be overwritten everytime we exit idle -+ // mode. While this means that we need to hold `cc.mu` when accessing -+ // `cc.resolverWrapper`, it makes the code simpler in the wrapper. We should -+ // try to do the same for the balancer and picker wrappers too. -+ cc.resolverWrapper.close() -+ cc.blockingpicker.enterIdleMode() -+ cc.balancerWrapper.enterIdleMode() -+ cc.csMgr.updateState(connectivity.Idle) -+ cc.idlenessState = ccIdlenessStateIdle -+ cc.mu.Unlock() -+ -+ go func() { -+ cc.addTraceEvent("entering idle mode") -+ for ac := range conns { -+ ac.tearDown(errConnIdling) -+ } -+ }() -+ return nil -+} -+ -+// validateTransportCredentials performs a series of checks on the configured -+// transport credentials. It returns a non-nil error if any of these conditions -+// are met: -+// - no transport creds and no creds bundle is configured -+// - both transport creds and creds bundle are configured -+// - creds bundle is configured, but it lacks a transport credentials -+// - insecure transport creds configured alongside call creds that require -+// transport level security -+// -+// If none of the above conditions are met, the configured credentials are -+// deemed valid and a nil error is returned. -+func (cc *ClientConn) validateTransportCredentials() error { -+ if cc.dopts.copts.TransportCredentials == nil && cc.dopts.copts.CredsBundle == nil { -+ return errNoTransportSecurity -+ } -+ if cc.dopts.copts.TransportCredentials != nil && cc.dopts.copts.CredsBundle != nil { -+ return errTransportCredsAndBundle -+ } -+ if cc.dopts.copts.CredsBundle != nil && cc.dopts.copts.CredsBundle.TransportCredentials() == nil { -+ return errNoTransportCredsInBundle -+ } -+ transportCreds := cc.dopts.copts.TransportCredentials -+ if transportCreds == nil { -+ transportCreds = cc.dopts.copts.CredsBundle.TransportCredentials() -+ } -+ if transportCreds.Info().SecurityProtocol == "insecure" { -+ for _, cd := range cc.dopts.copts.PerRPCCredentials { -+ if cd.RequireTransportSecurity() { -+ return errTransportCredentialsMissing -+ } -+ } -+ } -+ return nil -+} -+ -+// channelzRegistration registers the newly created ClientConn with channelz and -+// stores the returned identifier in `cc.channelzID` and `cc.csMgr.channelzID`. -+// A channelz trace event is emitted for ClientConn creation. If the newly -+// created ClientConn is a nested one, i.e a valid parent ClientConn ID is -+// specified via a dial option, the trace event is also added to the parent. -+// -+// Doesn't grab cc.mu as this method is expected to be called only at Dial time. -+func (cc *ClientConn) channelzRegistration(target string) { -+ cc.channelzID = channelz.RegisterChannel(&channelzChannel{cc}, cc.dopts.channelzParentID, target) -+ cc.addTraceEvent("created") -+ cc.csMgr.channelzID = cc.channelzID -+} -+ -+// chainUnaryClientInterceptors chains all unary client interceptors into one. -+func chainUnaryClientInterceptors(cc *ClientConn) { -+ interceptors := cc.dopts.chainUnaryInts -+ // Prepend dopts.unaryInt to the chaining interceptors if it exists, since unaryInt will -+ // be executed before any other chained interceptors. -+ if cc.dopts.unaryInt != nil { -+ interceptors = append([]UnaryClientInterceptor{cc.dopts.unaryInt}, interceptors...) -+ } -+ var chainedInt UnaryClientInterceptor -+ if len(interceptors) == 0 { -+ chainedInt = nil -+ } else if len(interceptors) == 1 { -+ chainedInt = interceptors[0] -+ } else { -+ chainedInt = func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error { -+ return interceptors[0](ctx, method, req, reply, cc, getChainUnaryInvoker(interceptors, 0, invoker), opts...) -+ } -+ } -+ cc.dopts.unaryInt = chainedInt -+} -+ -+// getChainUnaryInvoker recursively generate the chained unary invoker. -+func getChainUnaryInvoker(interceptors []UnaryClientInterceptor, curr int, finalInvoker UnaryInvoker) UnaryInvoker { -+ if curr == len(interceptors)-1 { -+ return finalInvoker -+ } -+ return func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error { -+ return interceptors[curr+1](ctx, method, req, reply, cc, getChainUnaryInvoker(interceptors, curr+1, finalInvoker), opts...) -+ } -+} -+ -+// chainStreamClientInterceptors chains all stream client interceptors into one. -+func chainStreamClientInterceptors(cc *ClientConn) { -+ interceptors := cc.dopts.chainStreamInts -+ // Prepend dopts.streamInt to the chaining interceptors if it exists, since streamInt will -+ // be executed before any other chained interceptors. -+ if cc.dopts.streamInt != nil { -+ interceptors = append([]StreamClientInterceptor{cc.dopts.streamInt}, interceptors...) -+ } -+ var chainedInt StreamClientInterceptor -+ if len(interceptors) == 0 { -+ chainedInt = nil -+ } else if len(interceptors) == 1 { -+ chainedInt = interceptors[0] -+ } else { -+ chainedInt = func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error) { -+ return interceptors[0](ctx, desc, cc, method, getChainStreamer(interceptors, 0, streamer), opts...) -+ } -+ } -+ cc.dopts.streamInt = chainedInt -+} -+ -+// getChainStreamer recursively generate the chained client stream constructor. -+func getChainStreamer(interceptors []StreamClientInterceptor, curr int, finalStreamer Streamer) Streamer { -+ if curr == len(interceptors)-1 { -+ return finalStreamer -+ } -+ return func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) { -+ return interceptors[curr+1](ctx, desc, cc, method, getChainStreamer(interceptors, curr+1, finalStreamer), opts...) -+ } -+} -+ -+// connectivityStateManager keeps the connectivity.State of ClientConn. -+// This struct will eventually be exported so the balancers can access it. -+type connectivityStateManager struct { -+ mu sync.Mutex -+ state connectivity.State -+ notifyChan chan struct{} -+ channelzID *channelz.Identifier -+} -+ -+// updateState updates the connectivity.State of ClientConn. -+// If there's a change it notifies goroutines waiting on state change to -+// happen. -+func (csm *connectivityStateManager) updateState(state connectivity.State) { -+ csm.mu.Lock() -+ defer csm.mu.Unlock() -+ if csm.state == connectivity.Shutdown { -+ return -+ } -+ if csm.state == state { -+ return -+ } -+ csm.state = state -+ channelz.Infof(logger, csm.channelzID, "Channel Connectivity change to %v", state) -+ if csm.notifyChan != nil { -+ // There are other goroutines waiting on this channel. -+ close(csm.notifyChan) -+ csm.notifyChan = nil -+ } -+} -+ -+func (csm *connectivityStateManager) getState() connectivity.State { -+ csm.mu.Lock() -+ defer csm.mu.Unlock() -+ return csm.state -+} -+ -+func (csm *connectivityStateManager) getNotifyChan() <-chan struct{} { -+ csm.mu.Lock() -+ defer csm.mu.Unlock() -+ if csm.notifyChan == nil { -+ csm.notifyChan = make(chan struct{}) -+ } -+ return csm.notifyChan -+} -+ -+// ClientConnInterface defines the functions clients need to perform unary and -+// streaming RPCs. It is implemented by *ClientConn, and is only intended to -+// be referenced by generated code. -+type ClientConnInterface interface { -+ // Invoke performs a unary RPC and returns after the response is received -+ // into reply. -+ Invoke(ctx context.Context, method string, args interface{}, reply interface{}, opts ...CallOption) error -+ // NewStream begins a streaming RPC. -+ NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) -+} -+ -+// Assert *ClientConn implements ClientConnInterface. -+var _ ClientConnInterface = (*ClientConn)(nil) -+ -+// ClientConn represents a virtual connection to a conceptual endpoint, to -+// perform RPCs. -+// -+// A ClientConn is free to have zero or more actual connections to the endpoint -+// based on configuration, load, etc. It is also free to determine which actual -+// endpoints to use and may change it every RPC, permitting client-side load -+// balancing. -+// -+// A ClientConn encapsulates a range of functionality including name -+// resolution, TCP connection establishment (with retries and backoff) and TLS -+// handshakes. It also handles errors on established connections by -+// re-resolving the name and reconnecting. -+type ClientConn struct { -+ ctx context.Context // Initialized using the background context at dial time. -+ cancel context.CancelFunc // Cancelled on close. -+ -+ // The following are initialized at dial time, and are read-only after that. -+ target string // User's dial target. -+ parsedTarget resolver.Target // See parseTargetAndFindResolver(). -+ authority string // See determineAuthority(). -+ dopts dialOptions // Default and user specified dial options. -+ channelzID *channelz.Identifier // Channelz identifier for the channel. -+ resolverBuilder resolver.Builder // See parseTargetAndFindResolver(). -+ balancerWrapper *ccBalancerWrapper // Uses gracefulswitch.balancer underneath. -+ idlenessMgr idlenessManager -+ -+ // The following provide their own synchronization, and therefore don't -+ // require cc.mu to be held to access them. -+ csMgr *connectivityStateManager -+ blockingpicker *pickerWrapper -+ safeConfigSelector iresolver.SafeConfigSelector -+ czData *channelzData -+ retryThrottler atomic.Value // Updated from service config. -+ -+ // firstResolveEvent is used to track whether the name resolver sent us at -+ // least one update. RPCs block on this event. -+ firstResolveEvent *grpcsync.Event -+ -+ // mu protects the following fields. -+ // TODO: split mu so the same mutex isn't used for everything. -+ mu sync.RWMutex -+ resolverWrapper *ccResolverWrapper // Initialized in Dial; cleared in Close. -+ sc *ServiceConfig // Latest service config received from the resolver. -+ conns map[*addrConn]struct{} // Set to nil on close. -+ mkp keepalive.ClientParameters // May be updated upon receipt of a GoAway. -+ idlenessState ccIdlenessState // Tracks idleness state of the channel. -+ exitIdleCond *sync.Cond // Signalled when channel exits idle. -+ -+ lceMu sync.Mutex // protects lastConnectionError -+ lastConnectionError error -+} -+ -+// ccIdlenessState tracks the idleness state of the channel. -+// -+// Channels start off in `active` and move to `idle` after a period of -+// inactivity. When moving back to `active` upon an incoming RPC, they -+// transition through `exiting_idle`. This state is useful for synchronization -+// with Close(). -+// -+// This state tracking is mostly for self-protection. The idlenessManager is -+// expected to keep track of the state as well, and is expected not to call into -+// the ClientConn unnecessarily. -+type ccIdlenessState int8 -+ -+const ( -+ ccIdlenessStateActive ccIdlenessState = iota -+ ccIdlenessStateIdle -+ ccIdlenessStateExitingIdle -+) -+ -+// WaitForStateChange waits until the connectivity.State of ClientConn changes from sourceState or -+// ctx expires. A true value is returned in former case and false in latter. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func (cc *ClientConn) WaitForStateChange(ctx context.Context, sourceState connectivity.State) bool { -+ ch := cc.csMgr.getNotifyChan() -+ if cc.csMgr.getState() != sourceState { -+ return true -+ } -+ select { -+ case <-ctx.Done(): -+ return false -+ case <-ch: -+ return true -+ } -+} -+ -+// GetState returns the connectivity.State of ClientConn. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a later -+// release. -+func (cc *ClientConn) GetState() connectivity.State { -+ return cc.csMgr.getState() -+} -+ -+// Connect causes all subchannels in the ClientConn to attempt to connect if -+// the channel is idle. Does not wait for the connection attempts to begin -+// before returning. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a later -+// release. -+func (cc *ClientConn) Connect() { -+ cc.exitIdleMode() -+ // If the ClientConn was not in idle mode, we need to call ExitIdle on the -+ // LB policy so that connections can be created. -+ cc.balancerWrapper.exitIdleMode() -+} -+ -+func (cc *ClientConn) scWatcher() { -+ for { -+ select { -+ case sc, ok := <-cc.dopts.scChan: -+ if !ok { -+ return -+ } -+ cc.mu.Lock() -+ // TODO: load balance policy runtime change is ignored. -+ // We may revisit this decision in the future. -+ cc.sc = &sc -+ cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{&sc}) -+ cc.mu.Unlock() -+ case <-cc.ctx.Done(): -+ return -+ } -+ } -+} -+ -+// waitForResolvedAddrs blocks until the resolver has provided addresses or the -+// context expires. Returns nil unless the context expires first; otherwise -+// returns a status error based on the context. -+func (cc *ClientConn) waitForResolvedAddrs(ctx context.Context) error { -+ // This is on the RPC path, so we use a fast path to avoid the -+ // more-expensive "select" below after the resolver has returned once. -+ if cc.firstResolveEvent.HasFired() { -+ return nil -+ } -+ select { -+ case <-cc.firstResolveEvent.Done(): -+ return nil -+ case <-ctx.Done(): -+ return status.FromContextError(ctx.Err()).Err() -+ case <-cc.ctx.Done(): -+ return ErrClientConnClosing -+ } -+} -+ -+var emptyServiceConfig *ServiceConfig -+ -+func init() { -+ cfg := parseServiceConfig("{}") -+ if cfg.Err != nil { -+ panic(fmt.Sprintf("impossible error parsing empty service config: %v", cfg.Err)) -+ } -+ emptyServiceConfig = cfg.Config.(*ServiceConfig) -+} -+ -+func (cc *ClientConn) maybeApplyDefaultServiceConfig(addrs []resolver.Address) { -+ if cc.sc != nil { -+ cc.applyServiceConfigAndBalancer(cc.sc, nil, addrs) -+ return -+ } -+ if cc.dopts.defaultServiceConfig != nil { -+ cc.applyServiceConfigAndBalancer(cc.dopts.defaultServiceConfig, &defaultConfigSelector{cc.dopts.defaultServiceConfig}, addrs) -+ } else { -+ cc.applyServiceConfigAndBalancer(emptyServiceConfig, &defaultConfigSelector{emptyServiceConfig}, addrs) -+ } -+} -+ -+func (cc *ClientConn) updateResolverState(s resolver.State, err error) error { -+ defer cc.firstResolveEvent.Fire() -+ cc.mu.Lock() -+ // Check if the ClientConn is already closed. Some fields (e.g. -+ // balancerWrapper) are set to nil when closing the ClientConn, and could -+ // cause nil pointer panic if we don't have this check. -+ if cc.conns == nil { -+ cc.mu.Unlock() -+ return nil -+ } -+ -+ if err != nil { -+ // May need to apply the initial service config in case the resolver -+ // doesn't support service configs, or doesn't provide a service config -+ // with the new addresses. -+ cc.maybeApplyDefaultServiceConfig(nil) -+ -+ cc.balancerWrapper.resolverError(err) -+ -+ // No addresses are valid with err set; return early. -+ cc.mu.Unlock() -+ return balancer.ErrBadResolverState -+ } -+ -+ var ret error -+ if cc.dopts.disableServiceConfig { -+ channelz.Infof(logger, cc.channelzID, "ignoring service config from resolver (%v) and applying the default because service config is disabled", s.ServiceConfig) -+ cc.maybeApplyDefaultServiceConfig(s.Addresses) -+ } else if s.ServiceConfig == nil { -+ cc.maybeApplyDefaultServiceConfig(s.Addresses) -+ // TODO: do we need to apply a failing LB policy if there is no -+ // default, per the error handling design? -+ } else { -+ if sc, ok := s.ServiceConfig.Config.(*ServiceConfig); s.ServiceConfig.Err == nil && ok { -+ configSelector := iresolver.GetConfigSelector(s) -+ if configSelector != nil { -+ if len(s.ServiceConfig.Config.(*ServiceConfig).Methods) != 0 { -+ channelz.Infof(logger, cc.channelzID, "method configs in service config will be ignored due to presence of config selector") -+ } -+ } else { -+ configSelector = &defaultConfigSelector{sc} -+ } -+ cc.applyServiceConfigAndBalancer(sc, configSelector, s.Addresses) -+ } else { -+ ret = balancer.ErrBadResolverState -+ if cc.sc == nil { -+ // Apply the failing LB only if we haven't received valid service config -+ // from the name resolver in the past. -+ cc.applyFailingLB(s.ServiceConfig) -+ cc.mu.Unlock() -+ return ret -+ } -+ } -+ } -+ -+ var balCfg serviceconfig.LoadBalancingConfig -+ if cc.sc != nil && cc.sc.lbConfig != nil { -+ balCfg = cc.sc.lbConfig.cfg -+ } -+ bw := cc.balancerWrapper -+ cc.mu.Unlock() -+ -+ uccsErr := bw.updateClientConnState(&balancer.ClientConnState{ResolverState: s, BalancerConfig: balCfg}) -+ if ret == nil { -+ ret = uccsErr // prefer ErrBadResolver state since any other error is -+ // currently meaningless to the caller. -+ } -+ return ret -+} -+ -+// applyFailingLB is akin to configuring an LB policy on the channel which -+// always fails RPCs. Here, an actual LB policy is not configured, but an always -+// erroring picker is configured, which returns errors with information about -+// what was invalid in the received service config. A config selector with no -+// service config is configured, and the connectivity state of the channel is -+// set to TransientFailure. -+// -+// Caller must hold cc.mu. -+func (cc *ClientConn) applyFailingLB(sc *serviceconfig.ParseResult) { -+ var err error -+ if sc.Err != nil { -+ err = status.Errorf(codes.Unavailable, "error parsing service config: %v", sc.Err) -+ } else { -+ err = status.Errorf(codes.Unavailable, "illegal service config type: %T", sc.Config) -+ } -+ cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{nil}) -+ cc.blockingpicker.updatePicker(base.NewErrPicker(err)) -+ cc.csMgr.updateState(connectivity.TransientFailure) -+} -+ -+func (cc *ClientConn) handleSubConnStateChange(sc balancer.SubConn, s connectivity.State, err error) { -+ cc.balancerWrapper.updateSubConnState(sc, s, err) -+} -+ -+// Makes a copy of the input addresses slice and clears out the balancer -+// attributes field. Addresses are passed during subconn creation and address -+// update operations. In both cases, we will clear the balancer attributes by -+// calling this function, and therefore we will be able to use the Equal method -+// provided by the resolver.Address type for comparison. -+func copyAddressesWithoutBalancerAttributes(in []resolver.Address) []resolver.Address { -+ out := make([]resolver.Address, len(in)) -+ for i := range in { -+ out[i] = in[i] -+ out[i].BalancerAttributes = nil -+ } -+ return out -+} -+ -+// newAddrConn creates an addrConn for addrs and adds it to cc.conns. -+// -+// Caller needs to make sure len(addrs) > 0. -+func (cc *ClientConn) newAddrConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (*addrConn, error) { -+ ac := &addrConn{ -+ state: connectivity.Idle, -+ cc: cc, -+ addrs: copyAddressesWithoutBalancerAttributes(addrs), -+ scopts: opts, -+ dopts: cc.dopts, -+ czData: new(channelzData), -+ resetBackoff: make(chan struct{}), -+ stateChan: make(chan struct{}), -+ } -+ ac.ctx, ac.cancel = context.WithCancel(cc.ctx) -+ // Track ac in cc. This needs to be done before any getTransport(...) is called. -+ cc.mu.Lock() -+ defer cc.mu.Unlock() -+ if cc.conns == nil { -+ return nil, ErrClientConnClosing -+ } -+ -+ var err error -+ ac.channelzID, err = channelz.RegisterSubChannel(ac, cc.channelzID, "") -+ if err != nil { -+ return nil, err -+ } -+ channelz.AddTraceEvent(logger, ac.channelzID, 0, &channelz.TraceEventDesc{ -+ Desc: "Subchannel created", -+ Severity: channelz.CtInfo, -+ Parent: &channelz.TraceEventDesc{ -+ Desc: fmt.Sprintf("Subchannel(id:%d) created", ac.channelzID.Int()), -+ Severity: channelz.CtInfo, -+ }, -+ }) -+ -+ cc.conns[ac] = struct{}{} -+ return ac, nil -+} -+ -+// removeAddrConn removes the addrConn in the subConn from clientConn. -+// It also tears down the ac with the given error. -+func (cc *ClientConn) removeAddrConn(ac *addrConn, err error) { -+ cc.mu.Lock() -+ if cc.conns == nil { -+ cc.mu.Unlock() -+ return -+ } -+ delete(cc.conns, ac) -+ cc.mu.Unlock() -+ ac.tearDown(err) -+} -+ -+func (cc *ClientConn) channelzMetric() *channelz.ChannelInternalMetric { -+ return &channelz.ChannelInternalMetric{ -+ State: cc.GetState(), -+ Target: cc.target, -+ CallsStarted: atomic.LoadInt64(&cc.czData.callsStarted), -+ CallsSucceeded: atomic.LoadInt64(&cc.czData.callsSucceeded), -+ CallsFailed: atomic.LoadInt64(&cc.czData.callsFailed), -+ LastCallStartedTimestamp: time.Unix(0, atomic.LoadInt64(&cc.czData.lastCallStartedTime)), -+ } -+} -+ -+// Target returns the target string of the ClientConn. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func (cc *ClientConn) Target() string { -+ return cc.target -+} -+ -+func (cc *ClientConn) incrCallsStarted() { -+ atomic.AddInt64(&cc.czData.callsStarted, 1) -+ atomic.StoreInt64(&cc.czData.lastCallStartedTime, time.Now().UnixNano()) -+} -+ -+func (cc *ClientConn) incrCallsSucceeded() { -+ atomic.AddInt64(&cc.czData.callsSucceeded, 1) -+} -+ -+func (cc *ClientConn) incrCallsFailed() { -+ atomic.AddInt64(&cc.czData.callsFailed, 1) -+} -+ -+// connect starts creating a transport. -+// It does nothing if the ac is not IDLE. -+// TODO(bar) Move this to the addrConn section. -+func (ac *addrConn) connect() error { -+ ac.mu.Lock() -+ if ac.state == connectivity.Shutdown { -+ if logger.V(2) { -+ logger.Infof("connect called on shutdown addrConn; ignoring.") -+ } -+ ac.mu.Unlock() -+ return errConnClosing -+ } -+ if ac.state != connectivity.Idle { -+ if logger.V(2) { -+ logger.Infof("connect called on addrConn in non-idle state (%v); ignoring.", ac.state) -+ } -+ ac.mu.Unlock() -+ return nil -+ } -+ ac.mu.Unlock() -+ -+ ac.resetTransport() -+ return nil -+} -+ -+func equalAddresses(a, b []resolver.Address) bool { -+ if len(a) != len(b) { -+ return false -+ } -+ for i, v := range a { -+ if !v.Equal(b[i]) { -+ return false -+ } -+ } -+ return true -+} -+ -+// updateAddrs updates ac.addrs with the new addresses list and handles active -+// connections or connection attempts. -+func (ac *addrConn) updateAddrs(addrs []resolver.Address) { -+ ac.mu.Lock() -+ channelz.Infof(logger, ac.channelzID, "addrConn: updateAddrs curAddr: %v, addrs: %v", pretty.ToJSON(ac.curAddr), pretty.ToJSON(addrs)) -+ -+ addrs = copyAddressesWithoutBalancerAttributes(addrs) -+ if equalAddresses(ac.addrs, addrs) { -+ ac.mu.Unlock() -+ return -+ } -+ -+ ac.addrs = addrs -+ -+ if ac.state == connectivity.Shutdown || -+ ac.state == connectivity.TransientFailure || -+ ac.state == connectivity.Idle { -+ // We were not connecting, so do nothing but update the addresses. -+ ac.mu.Unlock() -+ return -+ } -+ -+ if ac.state == connectivity.Ready { -+ // Try to find the connected address. -+ for _, a := range addrs { -+ a.ServerName = ac.cc.getServerName(a) -+ if a.Equal(ac.curAddr) { -+ // We are connected to a valid address, so do nothing but -+ // update the addresses. -+ ac.mu.Unlock() -+ return -+ } -+ } -+ } -+ -+ // We are either connected to the wrong address or currently connecting. -+ // Stop the current iteration and restart. -+ -+ ac.cancel() -+ ac.ctx, ac.cancel = context.WithCancel(ac.cc.ctx) -+ -+ // We have to defer here because GracefulClose => Close => onClose, which -+ // requires locking ac.mu. -+ if ac.transport != nil { -+ defer ac.transport.GracefulClose() -+ ac.transport = nil -+ } -+ -+ if len(addrs) == 0 { -+ ac.updateConnectivityState(connectivity.Idle, nil) -+ } -+ -+ ac.mu.Unlock() -+ -+ // Since we were connecting/connected, we should start a new connection -+ // attempt. -+ go ac.resetTransport() -+} -+ -+// getServerName determines the serverName to be used in the connection -+// handshake. The default value for the serverName is the authority on the -+// ClientConn, which either comes from the user's dial target or through an -+// authority override specified using the WithAuthority dial option. Name -+// resolvers can specify a per-address override for the serverName through the -+// resolver.Address.ServerName field which is used only if the WithAuthority -+// dial option was not used. The rationale is that per-address authority -+// overrides specified by the name resolver can represent a security risk, while -+// an override specified by the user is more dependable since they probably know -+// what they are doing. -+func (cc *ClientConn) getServerName(addr resolver.Address) string { -+ if cc.dopts.authority != "" { -+ return cc.dopts.authority -+ } -+ if addr.ServerName != "" { -+ return addr.ServerName -+ } -+ return cc.authority -+} -+ -+func getMethodConfig(sc *ServiceConfig, method string) MethodConfig { -+ if sc == nil { -+ return MethodConfig{} -+ } -+ if m, ok := sc.Methods[method]; ok { -+ return m -+ } -+ i := strings.LastIndex(method, "/") -+ if m, ok := sc.Methods[method[:i+1]]; ok { -+ return m -+ } -+ return sc.Methods[""] -+} -+ -+// GetMethodConfig gets the method config of the input method. -+// If there's an exact match for input method (i.e. /service/method), we return -+// the corresponding MethodConfig. -+// If there isn't an exact match for the input method, we look for the service's default -+// config under the service (i.e /service/) and then for the default for all services (empty string). -+// -+// If there is a default MethodConfig for the service, we return it. -+// Otherwise, we return an empty MethodConfig. -+func (cc *ClientConn) GetMethodConfig(method string) MethodConfig { -+ // TODO: Avoid the locking here. -+ cc.mu.RLock() -+ defer cc.mu.RUnlock() -+ return getMethodConfig(cc.sc, method) -+} -+ -+func (cc *ClientConn) healthCheckConfig() *healthCheckConfig { -+ cc.mu.RLock() -+ defer cc.mu.RUnlock() -+ if cc.sc == nil { -+ return nil -+ } -+ return cc.sc.healthCheckConfig -+} -+ -+func (cc *ClientConn) getTransport(ctx context.Context, failfast bool, method string) (transport.ClientTransport, balancer.PickResult, error) { -+ return cc.blockingpicker.pick(ctx, failfast, balancer.PickInfo{ -+ Ctx: ctx, -+ FullMethodName: method, -+ }) -+} -+ -+func (cc *ClientConn) applyServiceConfigAndBalancer(sc *ServiceConfig, configSelector iresolver.ConfigSelector, addrs []resolver.Address) { -+ if sc == nil { -+ // should never reach here. -+ return -+ } -+ cc.sc = sc -+ if configSelector != nil { -+ cc.safeConfigSelector.UpdateConfigSelector(configSelector) -+ } -+ -+ if cc.sc.retryThrottling != nil { -+ newThrottler := &retryThrottler{ -+ tokens: cc.sc.retryThrottling.MaxTokens, -+ max: cc.sc.retryThrottling.MaxTokens, -+ thresh: cc.sc.retryThrottling.MaxTokens / 2, -+ ratio: cc.sc.retryThrottling.TokenRatio, -+ } -+ cc.retryThrottler.Store(newThrottler) -+ } else { -+ cc.retryThrottler.Store((*retryThrottler)(nil)) -+ } -+ -+ var newBalancerName string -+ if cc.sc != nil && cc.sc.lbConfig != nil { -+ newBalancerName = cc.sc.lbConfig.name -+ } else { -+ var isGRPCLB bool -+ for _, a := range addrs { -+ if a.Type == resolver.GRPCLB { -+ isGRPCLB = true -+ break -+ } -+ } -+ if isGRPCLB { -+ newBalancerName = grpclbName -+ } else if cc.sc != nil && cc.sc.LB != nil { -+ newBalancerName = *cc.sc.LB -+ } else { -+ newBalancerName = PickFirstBalancerName -+ } -+ } -+ cc.balancerWrapper.switchTo(newBalancerName) -+} -+ -+func (cc *ClientConn) resolveNow(o resolver.ResolveNowOptions) { -+ cc.mu.RLock() -+ r := cc.resolverWrapper -+ cc.mu.RUnlock() -+ if r == nil { -+ return -+ } -+ go r.resolveNow(o) -+} -+ -+// ResetConnectBackoff wakes up all subchannels in transient failure and causes -+// them to attempt another connection immediately. It also resets the backoff -+// times used for subsequent attempts regardless of the current state. -+// -+// In general, this function should not be used. Typical service or network -+// outages result in a reasonable client reconnection strategy by default. -+// However, if a previously unavailable network becomes available, this may be -+// used to trigger an immediate reconnect. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func (cc *ClientConn) ResetConnectBackoff() { -+ cc.mu.Lock() -+ conns := cc.conns -+ cc.mu.Unlock() -+ for ac := range conns { -+ ac.resetConnectBackoff() -+ } -+} -+ -+// Close tears down the ClientConn and all underlying connections. -+func (cc *ClientConn) Close() error { -+ defer cc.cancel() -+ -+ cc.mu.Lock() -+ if cc.conns == nil { -+ cc.mu.Unlock() -+ return ErrClientConnClosing -+ } -+ -+ for cc.idlenessState == ccIdlenessStateExitingIdle { -+ cc.exitIdleCond.Wait() -+ } -+ -+ conns := cc.conns -+ cc.conns = nil -+ cc.csMgr.updateState(connectivity.Shutdown) -+ -+ pWrapper := cc.blockingpicker -+ rWrapper := cc.resolverWrapper -+ bWrapper := cc.balancerWrapper -+ idlenessMgr := cc.idlenessMgr -+ cc.mu.Unlock() -+ -+ // The order of closing matters here since the balancer wrapper assumes the -+ // picker is closed before it is closed. -+ if pWrapper != nil { -+ pWrapper.close() -+ } -+ if bWrapper != nil { -+ bWrapper.close() -+ } -+ if rWrapper != nil { -+ rWrapper.close() -+ } -+ if idlenessMgr != nil { -+ idlenessMgr.close() -+ } -+ -+ for ac := range conns { -+ ac.tearDown(ErrClientConnClosing) -+ } -+ cc.addTraceEvent("deleted") -+ // TraceEvent needs to be called before RemoveEntry, as TraceEvent may add -+ // trace reference to the entity being deleted, and thus prevent it from being -+ // deleted right away. -+ channelz.RemoveEntry(cc.channelzID) -+ -+ return nil -+} -+ -+// addrConn is a network connection to a given address. -+type addrConn struct { -+ ctx context.Context -+ cancel context.CancelFunc -+ -+ cc *ClientConn -+ dopts dialOptions -+ acbw balancer.SubConn -+ scopts balancer.NewSubConnOptions -+ -+ // transport is set when there's a viable transport (note: ac state may not be READY as LB channel -+ // health checking may require server to report healthy to set ac to READY), and is reset -+ // to nil when the current transport should no longer be used to create a stream (e.g. after GoAway -+ // is received, transport is closed, ac has been torn down). -+ transport transport.ClientTransport // The current transport. -+ -+ mu sync.Mutex -+ curAddr resolver.Address // The current address. -+ addrs []resolver.Address // All addresses that the resolver resolved to. -+ -+ // Use updateConnectivityState for updating addrConn's connectivity state. -+ state connectivity.State -+ stateChan chan struct{} // closed and recreated on every state change. -+ -+ backoffIdx int // Needs to be stateful for resetConnectBackoff. -+ resetBackoff chan struct{} -+ -+ channelzID *channelz.Identifier -+ czData *channelzData -+} -+ -+// Note: this requires a lock on ac.mu. -+func (ac *addrConn) updateConnectivityState(s connectivity.State, lastErr error) { -+ if ac.state == s { -+ return -+ } -+ // When changing states, reset the state change channel. -+ close(ac.stateChan) -+ ac.stateChan = make(chan struct{}) -+ ac.state = s -+ if lastErr == nil { -+ channelz.Infof(logger, ac.channelzID, "Subchannel Connectivity change to %v", s) -+ } else { -+ channelz.Infof(logger, ac.channelzID, "Subchannel Connectivity change to %v, last error: %s", s, lastErr) -+ } -+ ac.cc.handleSubConnStateChange(ac.acbw, s, lastErr) -+} -+ -+// adjustParams updates parameters used to create transports upon -+// receiving a GoAway. -+func (ac *addrConn) adjustParams(r transport.GoAwayReason) { -+ switch r { -+ case transport.GoAwayTooManyPings: -+ v := 2 * ac.dopts.copts.KeepaliveParams.Time -+ ac.cc.mu.Lock() -+ if v > ac.cc.mkp.Time { -+ ac.cc.mkp.Time = v -+ } -+ ac.cc.mu.Unlock() -+ } -+} -+ -+func (ac *addrConn) resetTransport() { -+ ac.mu.Lock() -+ acCtx := ac.ctx -+ if acCtx.Err() != nil { -+ ac.mu.Unlock() -+ return -+ } -+ -+ addrs := ac.addrs -+ backoffFor := ac.dopts.bs.Backoff(ac.backoffIdx) -+ // This will be the duration that dial gets to finish. -+ dialDuration := minConnectTimeout -+ if ac.dopts.minConnectTimeout != nil { -+ dialDuration = ac.dopts.minConnectTimeout() -+ } -+ -+ if dialDuration < backoffFor { -+ // Give dial more time as we keep failing to connect. -+ dialDuration = backoffFor -+ } -+ // We can potentially spend all the time trying the first address, and -+ // if the server accepts the connection and then hangs, the following -+ // addresses will never be tried. -+ // -+ // The spec doesn't mention what should be done for multiple addresses. -+ // https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md#proposed-backoff-algorithm -+ connectDeadline := time.Now().Add(dialDuration) -+ -+ ac.updateConnectivityState(connectivity.Connecting, nil) -+ ac.mu.Unlock() -+ -+ if err := ac.tryAllAddrs(acCtx, addrs, connectDeadline); err != nil { -+ ac.cc.resolveNow(resolver.ResolveNowOptions{}) -+ // After exhausting all addresses, the addrConn enters -+ // TRANSIENT_FAILURE. -+ if acCtx.Err() != nil { -+ return -+ } -+ ac.mu.Lock() -+ ac.updateConnectivityState(connectivity.TransientFailure, err) -+ -+ // Backoff. -+ b := ac.resetBackoff -+ ac.mu.Unlock() -+ -+ timer := time.NewTimer(backoffFor) -+ select { -+ case <-timer.C: -+ ac.mu.Lock() -+ ac.backoffIdx++ -+ ac.mu.Unlock() -+ case <-b: -+ timer.Stop() -+ case <-acCtx.Done(): -+ timer.Stop() -+ return -+ } -+ -+ ac.mu.Lock() -+ if acCtx.Err() == nil { -+ ac.updateConnectivityState(connectivity.Idle, err) -+ } -+ ac.mu.Unlock() -+ return -+ } -+ // Success; reset backoff. -+ ac.mu.Lock() -+ ac.backoffIdx = 0 -+ ac.mu.Unlock() -+} -+ -+// tryAllAddrs tries to creates a connection to the addresses, and stop when at -+// the first successful one. It returns an error if no address was successfully -+// connected, or updates ac appropriately with the new transport. -+func (ac *addrConn) tryAllAddrs(ctx context.Context, addrs []resolver.Address, connectDeadline time.Time) error { -+ var firstConnErr error -+ for _, addr := range addrs { -+ if ctx.Err() != nil { -+ return errConnClosing -+ } -+ ac.mu.Lock() -+ -+ ac.cc.mu.RLock() -+ ac.dopts.copts.KeepaliveParams = ac.cc.mkp -+ ac.cc.mu.RUnlock() -+ -+ copts := ac.dopts.copts -+ if ac.scopts.CredsBundle != nil { -+ copts.CredsBundle = ac.scopts.CredsBundle -+ } -+ ac.mu.Unlock() -+ -+ channelz.Infof(logger, ac.channelzID, "Subchannel picks a new address %q to connect", addr.Addr) -+ -+ err := ac.createTransport(ctx, addr, copts, connectDeadline) -+ if err == nil { -+ return nil -+ } -+ if firstConnErr == nil { -+ firstConnErr = err -+ } -+ ac.cc.updateConnectionError(err) -+ } -+ -+ // Couldn't connect to any address. -+ return firstConnErr -+} -+ -+// createTransport creates a connection to addr. It returns an error if the -+// address was not successfully connected, or updates ac appropriately with the -+// new transport. -+func (ac *addrConn) createTransport(ctx context.Context, addr resolver.Address, copts transport.ConnectOptions, connectDeadline time.Time) error { -+ addr.ServerName = ac.cc.getServerName(addr) -+ hctx, hcancel := context.WithCancel(ctx) -+ -+ onClose := func(r transport.GoAwayReason) { -+ ac.mu.Lock() -+ defer ac.mu.Unlock() -+ // adjust params based on GoAwayReason -+ ac.adjustParams(r) -+ if ctx.Err() != nil { -+ // Already shut down or connection attempt canceled. tearDown() or -+ // updateAddrs() already cleared the transport and canceled hctx -+ // via ac.ctx, and we expected this connection to be closed, so do -+ // nothing here. -+ return -+ } -+ hcancel() -+ if ac.transport == nil { -+ // We're still connecting to this address, which could error. Do -+ // not update the connectivity state or resolve; these will happen -+ // at the end of the tryAllAddrs connection loop in the event of an -+ // error. -+ return -+ } -+ ac.transport = nil -+ // Refresh the name resolver on any connection loss. -+ ac.cc.resolveNow(resolver.ResolveNowOptions{}) -+ // Always go idle and wait for the LB policy to initiate a new -+ // connection attempt. -+ ac.updateConnectivityState(connectivity.Idle, nil) -+ } -+ -+ connectCtx, cancel := context.WithDeadline(ctx, connectDeadline) -+ defer cancel() -+ copts.ChannelzParentID = ac.channelzID -+ -+ newTr, err := transport.NewClientTransport(connectCtx, ac.cc.ctx, addr, copts, onClose) -+ if err != nil { -+ if logger.V(2) { -+ logger.Infof("Creating new client transport to %q: %v", addr, err) -+ } -+ // newTr is either nil, or closed. -+ hcancel() -+ channelz.Warningf(logger, ac.channelzID, "grpc: addrConn.createTransport failed to connect to %s. Err: %v", addr, err) -+ return err -+ } -+ -+ ac.mu.Lock() -+ defer ac.mu.Unlock() -+ if ctx.Err() != nil { -+ // This can happen if the subConn was removed while in `Connecting` -+ // state. tearDown() would have set the state to `Shutdown`, but -+ // would not have closed the transport since ac.transport would not -+ // have been set at that point. -+ // -+ // We run this in a goroutine because newTr.Close() calls onClose() -+ // inline, which requires locking ac.mu. -+ // -+ // The error we pass to Close() is immaterial since there are no open -+ // streams at this point, so no trailers with error details will be sent -+ // out. We just need to pass a non-nil error. -+ // -+ // This can also happen when updateAddrs is called during a connection -+ // attempt. -+ go newTr.Close(transport.ErrConnClosing) -+ return nil -+ } -+ if hctx.Err() != nil { -+ // onClose was already called for this connection, but the connection -+ // was successfully established first. Consider it a success and set -+ // the new state to Idle. -+ ac.updateConnectivityState(connectivity.Idle, nil) -+ return nil -+ } -+ ac.curAddr = addr -+ ac.transport = newTr -+ ac.startHealthCheck(hctx) // Will set state to READY if appropriate. -+ return nil -+} -+ -+// startHealthCheck starts the health checking stream (RPC) to watch the health -+// stats of this connection if health checking is requested and configured. -+// -+// LB channel health checking is enabled when all requirements below are met: -+// 1. it is not disabled by the user with the WithDisableHealthCheck DialOption -+// 2. internal.HealthCheckFunc is set by importing the grpc/health package -+// 3. a service config with non-empty healthCheckConfig field is provided -+// 4. the load balancer requests it -+// -+// It sets addrConn to READY if the health checking stream is not started. -+// -+// Caller must hold ac.mu. -+func (ac *addrConn) startHealthCheck(ctx context.Context) { -+ var healthcheckManagingState bool -+ defer func() { -+ if !healthcheckManagingState { -+ ac.updateConnectivityState(connectivity.Ready, nil) -+ } -+ }() -+ -+ if ac.cc.dopts.disableHealthCheck { -+ return -+ } -+ healthCheckConfig := ac.cc.healthCheckConfig() -+ if healthCheckConfig == nil { -+ return -+ } -+ if !ac.scopts.HealthCheckEnabled { -+ return -+ } -+ healthCheckFunc := ac.cc.dopts.healthCheckFunc -+ if healthCheckFunc == nil { -+ // The health package is not imported to set health check function. -+ // -+ // TODO: add a link to the health check doc in the error message. -+ channelz.Error(logger, ac.channelzID, "Health check is requested but health check function is not set.") -+ return -+ } -+ -+ healthcheckManagingState = true -+ -+ // Set up the health check helper functions. -+ currentTr := ac.transport -+ newStream := func(method string) (interface{}, error) { -+ ac.mu.Lock() -+ if ac.transport != currentTr { -+ ac.mu.Unlock() -+ return nil, status.Error(codes.Canceled, "the provided transport is no longer valid to use") -+ } -+ ac.mu.Unlock() -+ return newNonRetryClientStream(ctx, &StreamDesc{ServerStreams: true}, method, currentTr, ac) -+ } -+ setConnectivityState := func(s connectivity.State, lastErr error) { -+ ac.mu.Lock() -+ defer ac.mu.Unlock() -+ if ac.transport != currentTr { -+ return -+ } -+ ac.updateConnectivityState(s, lastErr) -+ } -+ // Start the health checking stream. -+ go func() { -+ err := ac.cc.dopts.healthCheckFunc(ctx, newStream, setConnectivityState, healthCheckConfig.ServiceName) -+ if err != nil { -+ if status.Code(err) == codes.Unimplemented { -+ channelz.Error(logger, ac.channelzID, "Subchannel health check is unimplemented at server side, thus health check is disabled") -+ } else { -+ channelz.Errorf(logger, ac.channelzID, "Health checking failed: %v", err) -+ } -+ } -+ }() -+} -+ -+func (ac *addrConn) resetConnectBackoff() { -+ ac.mu.Lock() -+ close(ac.resetBackoff) -+ ac.backoffIdx = 0 -+ ac.resetBackoff = make(chan struct{}) -+ ac.mu.Unlock() -+} -+ -+// getReadyTransport returns the transport if ac's state is READY or nil if not. -+func (ac *addrConn) getReadyTransport() transport.ClientTransport { -+ ac.mu.Lock() -+ defer ac.mu.Unlock() -+ if ac.state == connectivity.Ready { -+ return ac.transport -+ } -+ return nil -+} -+ -+// getTransport waits until the addrconn is ready and returns the transport. -+// If the context expires first, returns an appropriate status. If the -+// addrConn is stopped first, returns an Unavailable status error. -+func (ac *addrConn) getTransport(ctx context.Context) (transport.ClientTransport, error) { -+ for ctx.Err() == nil { -+ ac.mu.Lock() -+ t, state, sc := ac.transport, ac.state, ac.stateChan -+ ac.mu.Unlock() -+ if state == connectivity.Ready { -+ return t, nil -+ } -+ if state == connectivity.Shutdown { -+ return nil, status.Errorf(codes.Unavailable, "SubConn shutting down") -+ } -+ -+ select { -+ case <-ctx.Done(): -+ case <-sc: -+ } -+ } -+ return nil, status.FromContextError(ctx.Err()).Err() -+} -+ -+// tearDown starts to tear down the addrConn. -+// -+// Note that tearDown doesn't remove ac from ac.cc.conns, so the addrConn struct -+// will leak. In most cases, call cc.removeAddrConn() instead. -+func (ac *addrConn) tearDown(err error) { -+ ac.mu.Lock() -+ if ac.state == connectivity.Shutdown { -+ ac.mu.Unlock() -+ return -+ } -+ curTr := ac.transport -+ ac.transport = nil -+ // We have to set the state to Shutdown before anything else to prevent races -+ // between setting the state and logic that waits on context cancellation / etc. -+ ac.updateConnectivityState(connectivity.Shutdown, nil) -+ ac.cancel() -+ ac.curAddr = resolver.Address{} -+ if err == errConnDrain && curTr != nil { -+ // GracefulClose(...) may be executed multiple times when -+ // i) receiving multiple GoAway frames from the server; or -+ // ii) there are concurrent name resolver/Balancer triggered -+ // address removal and GoAway. -+ // We have to unlock and re-lock here because GracefulClose => Close => onClose, which requires locking ac.mu. -+ ac.mu.Unlock() -+ curTr.GracefulClose() -+ ac.mu.Lock() -+ } -+ channelz.AddTraceEvent(logger, ac.channelzID, 0, &channelz.TraceEventDesc{ -+ Desc: "Subchannel deleted", -+ Severity: channelz.CtInfo, -+ Parent: &channelz.TraceEventDesc{ -+ Desc: fmt.Sprintf("Subchannel(id:%d) deleted", ac.channelzID.Int()), -+ Severity: channelz.CtInfo, -+ }, -+ }) -+ // TraceEvent needs to be called before RemoveEntry, as TraceEvent may add -+ // trace reference to the entity being deleted, and thus prevent it from -+ // being deleted right away. -+ channelz.RemoveEntry(ac.channelzID) -+ ac.mu.Unlock() -+} -+ -+func (ac *addrConn) getState() connectivity.State { -+ ac.mu.Lock() -+ defer ac.mu.Unlock() -+ return ac.state -+} -+ -+func (ac *addrConn) ChannelzMetric() *channelz.ChannelInternalMetric { -+ ac.mu.Lock() -+ addr := ac.curAddr.Addr -+ ac.mu.Unlock() -+ return &channelz.ChannelInternalMetric{ -+ State: ac.getState(), -+ Target: addr, -+ CallsStarted: atomic.LoadInt64(&ac.czData.callsStarted), -+ CallsSucceeded: atomic.LoadInt64(&ac.czData.callsSucceeded), -+ CallsFailed: atomic.LoadInt64(&ac.czData.callsFailed), -+ LastCallStartedTimestamp: time.Unix(0, atomic.LoadInt64(&ac.czData.lastCallStartedTime)), -+ } -+} -+ -+func (ac *addrConn) incrCallsStarted() { -+ atomic.AddInt64(&ac.czData.callsStarted, 1) -+ atomic.StoreInt64(&ac.czData.lastCallStartedTime, time.Now().UnixNano()) -+} -+ -+func (ac *addrConn) incrCallsSucceeded() { -+ atomic.AddInt64(&ac.czData.callsSucceeded, 1) -+} -+ -+func (ac *addrConn) incrCallsFailed() { -+ atomic.AddInt64(&ac.czData.callsFailed, 1) -+} -+ -+type retryThrottler struct { -+ max float64 -+ thresh float64 -+ ratio float64 -+ -+ mu sync.Mutex -+ tokens float64 // TODO(dfawley): replace with atomic and remove lock. -+} -+ -+// throttle subtracts a retry token from the pool and returns whether a retry -+// should be throttled (disallowed) based upon the retry throttling policy in -+// the service config. -+func (rt *retryThrottler) throttle() bool { -+ if rt == nil { -+ return false -+ } -+ rt.mu.Lock() -+ defer rt.mu.Unlock() -+ rt.tokens-- -+ if rt.tokens < 0 { -+ rt.tokens = 0 -+ } -+ return rt.tokens <= rt.thresh -+} -+ -+func (rt *retryThrottler) successfulRPC() { -+ if rt == nil { -+ return -+ } -+ rt.mu.Lock() -+ defer rt.mu.Unlock() -+ rt.tokens += rt.ratio -+ if rt.tokens > rt.max { -+ rt.tokens = rt.max -+ } -+} -+ -+type channelzChannel struct { -+ cc *ClientConn -+} -+ -+func (c *channelzChannel) ChannelzMetric() *channelz.ChannelInternalMetric { -+ return c.cc.channelzMetric() -+} -+ -+// ErrClientConnTimeout indicates that the ClientConn cannot establish the -+// underlying connections within the specified timeout. -+// -+// Deprecated: This error is never returned by grpc and should not be -+// referenced by users. -+var ErrClientConnTimeout = errors.New("grpc: timed out when dialing") -+ -+// getResolver finds the scheme in the cc's resolvers or the global registry. -+// scheme should always be lowercase (typically by virtue of url.Parse() -+// performing proper RFC3986 behavior). -+func (cc *ClientConn) getResolver(scheme string) resolver.Builder { -+ for _, rb := range cc.dopts.resolvers { -+ if scheme == rb.Scheme() { -+ return rb -+ } -+ } -+ return resolver.Get(scheme) -+} -+ -+func (cc *ClientConn) updateConnectionError(err error) { -+ cc.lceMu.Lock() -+ cc.lastConnectionError = err -+ cc.lceMu.Unlock() -+} -+ -+func (cc *ClientConn) connectionError() error { -+ cc.lceMu.Lock() -+ defer cc.lceMu.Unlock() -+ return cc.lastConnectionError -+} -+ -+// parseTargetAndFindResolver parses the user's dial target and stores the -+// parsed target in `cc.parsedTarget`. -+// -+// The resolver to use is determined based on the scheme in the parsed target -+// and the same is stored in `cc.resolverBuilder`. -+// -+// Doesn't grab cc.mu as this method is expected to be called only at Dial time. -+func (cc *ClientConn) parseTargetAndFindResolver() error { -+ channelz.Infof(logger, cc.channelzID, "original dial target is: %q", cc.target) -+ -+ var rb resolver.Builder -+ parsedTarget, err := parseTarget(cc.target) -+ if err != nil { -+ channelz.Infof(logger, cc.channelzID, "dial target %q parse failed: %v", cc.target, err) -+ } else { -+ channelz.Infof(logger, cc.channelzID, "parsed dial target is: %+v", parsedTarget) -+ rb = cc.getResolver(parsedTarget.URL.Scheme) -+ if rb != nil { -+ cc.parsedTarget = parsedTarget -+ cc.resolverBuilder = rb -+ return nil -+ } -+ } -+ -+ // We are here because the user's dial target did not contain a scheme or -+ // specified an unregistered scheme. We should fallback to the default -+ // scheme, except when a custom dialer is specified in which case, we should -+ // always use passthrough scheme. -+ defScheme := resolver.GetDefaultScheme() -+ channelz.Infof(logger, cc.channelzID, "fallback to scheme %q", defScheme) -+ canonicalTarget := defScheme + ":///" + cc.target -+ -+ parsedTarget, err = parseTarget(canonicalTarget) -+ if err != nil { -+ channelz.Infof(logger, cc.channelzID, "dial target %q parse failed: %v", canonicalTarget, err) -+ return err -+ } -+ channelz.Infof(logger, cc.channelzID, "parsed dial target is: %+v", parsedTarget) -+ rb = cc.getResolver(parsedTarget.URL.Scheme) -+ if rb == nil { -+ return fmt.Errorf("could not get resolver for default scheme: %q", parsedTarget.URL.Scheme) -+ } -+ cc.parsedTarget = parsedTarget -+ cc.resolverBuilder = rb -+ return nil -+} -+ -+// parseTarget uses RFC 3986 semantics to parse the given target into a -+// resolver.Target struct containing url. Query params are stripped from the -+// endpoint. -+func parseTarget(target string) (resolver.Target, error) { -+ u, err := url.Parse(target) -+ if err != nil { -+ return resolver.Target{}, err -+ } -+ -+ return resolver.Target{URL: *u}, nil -+} -+ -+func encodeAuthority(authority string) string { -+ const upperhex = "0123456789ABCDEF" -+ -+ // Return for characters that must be escaped as per -+ // Valid chars are mentioned here: -+ // https://datatracker.ietf.org/doc/html/rfc3986#section-3.2 -+ shouldEscape := func(c byte) bool { -+ // Alphanum are always allowed. -+ if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' { -+ return false -+ } -+ switch c { -+ case '-', '_', '.', '~': // Unreserved characters -+ return false -+ case '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=': // Subdelim characters -+ return false -+ case ':', '[', ']', '@': // Authority related delimeters -+ return false -+ } -+ // Everything else must be escaped. -+ return true -+ } -+ -+ hexCount := 0 -+ for i := 0; i < len(authority); i++ { -+ c := authority[i] -+ if shouldEscape(c) { -+ hexCount++ -+ } -+ } -+ -+ if hexCount == 0 { -+ return authority -+ } -+ -+ required := len(authority) + 2*hexCount -+ t := make([]byte, required) -+ -+ j := 0 -+ // This logic is a barebones version of escape in the go net/url library. -+ for i := 0; i < len(authority); i++ { -+ switch c := authority[i]; { -+ case shouldEscape(c): -+ t[j] = '%' -+ t[j+1] = upperhex[c>>4] -+ t[j+2] = upperhex[c&15] -+ j += 3 -+ default: -+ t[j] = authority[i] -+ j++ -+ } -+ } -+ return string(t) -+} -+ -+// Determine channel authority. The order of precedence is as follows: -+// - user specified authority override using `WithAuthority` dial option -+// - creds' notion of server name for the authentication handshake -+// - endpoint from dial target of the form "scheme://[authority]/endpoint" -+// -+// Stores the determined authority in `cc.authority`. -+// -+// Returns a non-nil error if the authority returned by the transport -+// credentials do not match the authority configured through the dial option. -+// -+// Doesn't grab cc.mu as this method is expected to be called only at Dial time. -+func (cc *ClientConn) determineAuthority() error { -+ dopts := cc.dopts -+ // Historically, we had two options for users to specify the serverName or -+ // authority for a channel. One was through the transport credentials -+ // (either in its constructor, or through the OverrideServerName() method). -+ // The other option (for cases where WithInsecure() dial option was used) -+ // was to use the WithAuthority() dial option. -+ // -+ // A few things have changed since: -+ // - `insecure` package with an implementation of the `TransportCredentials` -+ // interface for the insecure case -+ // - WithAuthority() dial option support for secure credentials -+ authorityFromCreds := "" -+ if creds := dopts.copts.TransportCredentials; creds != nil && creds.Info().ServerName != "" { -+ authorityFromCreds = creds.Info().ServerName -+ } -+ authorityFromDialOption := dopts.authority -+ if (authorityFromCreds != "" && authorityFromDialOption != "") && authorityFromCreds != authorityFromDialOption { -+ return fmt.Errorf("ClientConn's authority from transport creds %q and dial option %q don't match", authorityFromCreds, authorityFromDialOption) -+ } -+ -+ endpoint := cc.parsedTarget.Endpoint() -+ target := cc.target -+ switch { -+ case authorityFromDialOption != "": -+ cc.authority = authorityFromDialOption -+ case authorityFromCreds != "": -+ cc.authority = authorityFromCreds -+ case strings.HasPrefix(target, "unix:") || strings.HasPrefix(target, "unix-abstract:"): -+ // TODO: remove when the unix resolver implements optional interface to -+ // return channel authority. -+ cc.authority = "localhost" -+ case strings.HasPrefix(endpoint, ":"): -+ cc.authority = "localhost" + endpoint -+ default: -+ // TODO: Define an optional interface on the resolver builder to return -+ // the channel authority given the user's dial target. For resolvers -+ // which don't implement this interface, we will use the endpoint from -+ // "scheme://authority/endpoint" as the default authority. -+ // Escape the endpoint to handle use cases where the endpoint -+ // might not be a valid authority by default. -+ // For example an endpoint which has multiple paths like -+ // 'a/b/c', which is not a valid authority by default. -+ cc.authority = encodeAuthority(endpoint) -+ } -+ channelz.Infof(logger, cc.channelzID, "Channel authority set to %q", cc.authority) -+ return nil -+} -+ -+// initResolverWrapper creates a ccResolverWrapper, which builds the name -+// resolver. This method grabs the lock to assign the newly built resolver -+// wrapper to the cc.resolverWrapper field. -+func (cc *ClientConn) initResolverWrapper(creds credentials.TransportCredentials) error { -+ rw, err := newCCResolverWrapper(cc, ccResolverWrapperOpts{ -+ target: cc.parsedTarget, -+ builder: cc.resolverBuilder, -+ bOpts: resolver.BuildOptions{ -+ DisableServiceConfig: cc.dopts.disableServiceConfig, -+ DialCreds: creds, -+ CredsBundle: cc.dopts.copts.CredsBundle, -+ Dialer: cc.dopts.copts.Dialer, -+ }, -+ channelzID: cc.channelzID, -+ }) -+ if err != nil { -+ return fmt.Errorf("failed to build resolver: %v", err) -+ } -+ // Resolver implementations may report state update or error inline when -+ // built (or right after), and this is handled in cc.updateResolverState. -+ // Also, an error from the resolver might lead to a re-resolution request -+ // from the balancer, which is handled in resolveNow() where -+ // `cc.resolverWrapper` is accessed. Hence, we need to hold the lock here. -+ cc.mu.Lock() -+ cc.resolverWrapper = rw -+ cc.mu.Unlock() -+ return nil -+} -diff --git a/vendor/google.golang.org/grpc/codec.go b/vendor/google.golang.org/grpc/codec.go -new file mode 100755 -index 0000000..1297765 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/codec.go -@@ -0,0 +1,50 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "google.golang.org/grpc/encoding" -+ _ "google.golang.org/grpc/encoding/proto" // to register the Codec for "proto" -+) -+ -+// baseCodec contains the functionality of both Codec and encoding.Codec, but -+// omits the name/string, which vary between the two and are not needed for -+// anything besides the registry in the encoding package. -+type baseCodec interface { -+ Marshal(v interface{}) ([]byte, error) -+ Unmarshal(data []byte, v interface{}) error -+} -+ -+var _ baseCodec = Codec(nil) -+var _ baseCodec = encoding.Codec(nil) -+ -+// Codec defines the interface gRPC uses to encode and decode messages. -+// Note that implementations of this interface must be thread safe; -+// a Codec's methods can be called from concurrent goroutines. -+// -+// Deprecated: use encoding.Codec instead. -+type Codec interface { -+ // Marshal returns the wire format of v. -+ Marshal(v interface{}) ([]byte, error) -+ // Unmarshal parses the wire format into v. -+ Unmarshal(data []byte, v interface{}) error -+ // String returns the name of the Codec implementation. This is unused by -+ // gRPC. -+ String() string -+} -diff --git a/vendor/google.golang.org/grpc/codegen.sh b/vendor/google.golang.org/grpc/codegen.sh -new file mode 100755 -index 0000000..4cdc6ba ---- /dev/null -+++ b/vendor/google.golang.org/grpc/codegen.sh -@@ -0,0 +1,17 @@ -+#!/usr/bin/env bash -+ -+# This script serves as an example to demonstrate how to generate the gRPC-Go -+# interface and the related messages from .proto file. -+# -+# It assumes the installation of i) Google proto buffer compiler at -+# https://github.com/google/protobuf (after v2.6.1) and ii) the Go codegen -+# plugin at https://github.com/golang/protobuf (after 2015-02-20). If you have -+# not, please install them first. -+# -+# We recommend running this script at $GOPATH/src. -+# -+# If this is not what you need, feel free to make your own scripts. Again, this -+# script is for demonstration purpose. -+# -+proto=$1 -+protoc --go_out=plugins=grpc:. $proto -diff --git a/vendor/google.golang.org/grpc/codes/code_string.go b/vendor/google.golang.org/grpc/codes/code_string.go -new file mode 100755 -index 0000000..934fac2 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/codes/code_string.go -@@ -0,0 +1,111 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package codes -+ -+import ( -+ "strconv" -+ -+ "google.golang.org/grpc/internal" -+) -+ -+func init() { -+ internal.CanonicalString = canonicalString -+} -+ -+func (c Code) String() string { -+ switch c { -+ case OK: -+ return "OK" -+ case Canceled: -+ return "Canceled" -+ case Unknown: -+ return "Unknown" -+ case InvalidArgument: -+ return "InvalidArgument" -+ case DeadlineExceeded: -+ return "DeadlineExceeded" -+ case NotFound: -+ return "NotFound" -+ case AlreadyExists: -+ return "AlreadyExists" -+ case PermissionDenied: -+ return "PermissionDenied" -+ case ResourceExhausted: -+ return "ResourceExhausted" -+ case FailedPrecondition: -+ return "FailedPrecondition" -+ case Aborted: -+ return "Aborted" -+ case OutOfRange: -+ return "OutOfRange" -+ case Unimplemented: -+ return "Unimplemented" -+ case Internal: -+ return "Internal" -+ case Unavailable: -+ return "Unavailable" -+ case DataLoss: -+ return "DataLoss" -+ case Unauthenticated: -+ return "Unauthenticated" -+ default: -+ return "Code(" + strconv.FormatInt(int64(c), 10) + ")" -+ } -+} -+ -+func canonicalString(c Code) string { -+ switch c { -+ case OK: -+ return "OK" -+ case Canceled: -+ return "CANCELLED" -+ case Unknown: -+ return "UNKNOWN" -+ case InvalidArgument: -+ return "INVALID_ARGUMENT" -+ case DeadlineExceeded: -+ return "DEADLINE_EXCEEDED" -+ case NotFound: -+ return "NOT_FOUND" -+ case AlreadyExists: -+ return "ALREADY_EXISTS" -+ case PermissionDenied: -+ return "PERMISSION_DENIED" -+ case ResourceExhausted: -+ return "RESOURCE_EXHAUSTED" -+ case FailedPrecondition: -+ return "FAILED_PRECONDITION" -+ case Aborted: -+ return "ABORTED" -+ case OutOfRange: -+ return "OUT_OF_RANGE" -+ case Unimplemented: -+ return "UNIMPLEMENTED" -+ case Internal: -+ return "INTERNAL" -+ case Unavailable: -+ return "UNAVAILABLE" -+ case DataLoss: -+ return "DATA_LOSS" -+ case Unauthenticated: -+ return "UNAUTHENTICATED" -+ default: -+ return "CODE(" + strconv.FormatInt(int64(c), 10) + ")" -+ } -+} -diff --git a/vendor/google.golang.org/grpc/codes/codes.go b/vendor/google.golang.org/grpc/codes/codes.go -new file mode 100755 -index 0000000..11b1061 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/codes/codes.go -@@ -0,0 +1,244 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package codes defines the canonical error codes used by gRPC. It is -+// consistent across various languages. -+package codes // import "google.golang.org/grpc/codes" -+ -+import ( -+ "fmt" -+ "strconv" -+) -+ -+// A Code is an unsigned 32-bit error code as defined in the gRPC spec. -+type Code uint32 -+ -+const ( -+ // OK is returned on success. -+ OK Code = 0 -+ -+ // Canceled indicates the operation was canceled (typically by the caller). -+ // -+ // The gRPC framework will generate this error code when cancellation -+ // is requested. -+ Canceled Code = 1 -+ -+ // Unknown error. An example of where this error may be returned is -+ // if a Status value received from another address space belongs to -+ // an error-space that is not known in this address space. Also -+ // errors raised by APIs that do not return enough error information -+ // may be converted to this error. -+ // -+ // The gRPC framework will generate this error code in the above two -+ // mentioned cases. -+ Unknown Code = 2 -+ -+ // InvalidArgument indicates client specified an invalid argument. -+ // Note that this differs from FailedPrecondition. It indicates arguments -+ // that are problematic regardless of the state of the system -+ // (e.g., a malformed file name). -+ // -+ // This error code will not be generated by the gRPC framework. -+ InvalidArgument Code = 3 -+ -+ // DeadlineExceeded means operation expired before completion. -+ // For operations that change the state of the system, this error may be -+ // returned even if the operation has completed successfully. For -+ // example, a successful response from a server could have been delayed -+ // long enough for the deadline to expire. -+ // -+ // The gRPC framework will generate this error code when the deadline is -+ // exceeded. -+ DeadlineExceeded Code = 4 -+ -+ // NotFound means some requested entity (e.g., file or directory) was -+ // not found. -+ // -+ // This error code will not be generated by the gRPC framework. -+ NotFound Code = 5 -+ -+ // AlreadyExists means an attempt to create an entity failed because one -+ // already exists. -+ // -+ // This error code will not be generated by the gRPC framework. -+ AlreadyExists Code = 6 -+ -+ // PermissionDenied indicates the caller does not have permission to -+ // execute the specified operation. It must not be used for rejections -+ // caused by exhausting some resource (use ResourceExhausted -+ // instead for those errors). It must not be -+ // used if the caller cannot be identified (use Unauthenticated -+ // instead for those errors). -+ // -+ // This error code will not be generated by the gRPC core framework, -+ // but expect authentication middleware to use it. -+ PermissionDenied Code = 7 -+ -+ // ResourceExhausted indicates some resource has been exhausted, perhaps -+ // a per-user quota, or perhaps the entire file system is out of space. -+ // -+ // This error code will be generated by the gRPC framework in -+ // out-of-memory and server overload situations, or when a message is -+ // larger than the configured maximum size. -+ ResourceExhausted Code = 8 -+ -+ // FailedPrecondition indicates operation was rejected because the -+ // system is not in a state required for the operation's execution. -+ // For example, directory to be deleted may be non-empty, an rmdir -+ // operation is applied to a non-directory, etc. -+ // -+ // A litmus test that may help a service implementor in deciding -+ // between FailedPrecondition, Aborted, and Unavailable: -+ // (a) Use Unavailable if the client can retry just the failing call. -+ // (b) Use Aborted if the client should retry at a higher-level -+ // (e.g., restarting a read-modify-write sequence). -+ // (c) Use FailedPrecondition if the client should not retry until -+ // the system state has been explicitly fixed. E.g., if an "rmdir" -+ // fails because the directory is non-empty, FailedPrecondition -+ // should be returned since the client should not retry unless -+ // they have first fixed up the directory by deleting files from it. -+ // (d) Use FailedPrecondition if the client performs conditional -+ // REST Get/Update/Delete on a resource and the resource on the -+ // server does not match the condition. E.g., conflicting -+ // read-modify-write on the same resource. -+ // -+ // This error code will not be generated by the gRPC framework. -+ FailedPrecondition Code = 9 -+ -+ // Aborted indicates the operation was aborted, typically due to a -+ // concurrency issue like sequencer check failures, transaction aborts, -+ // etc. -+ // -+ // See litmus test above for deciding between FailedPrecondition, -+ // Aborted, and Unavailable. -+ // -+ // This error code will not be generated by the gRPC framework. -+ Aborted Code = 10 -+ -+ // OutOfRange means operation was attempted past the valid range. -+ // E.g., seeking or reading past end of file. -+ // -+ // Unlike InvalidArgument, this error indicates a problem that may -+ // be fixed if the system state changes. For example, a 32-bit file -+ // system will generate InvalidArgument if asked to read at an -+ // offset that is not in the range [0,2^32-1], but it will generate -+ // OutOfRange if asked to read from an offset past the current -+ // file size. -+ // -+ // There is a fair bit of overlap between FailedPrecondition and -+ // OutOfRange. We recommend using OutOfRange (the more specific -+ // error) when it applies so that callers who are iterating through -+ // a space can easily look for an OutOfRange error to detect when -+ // they are done. -+ // -+ // This error code will not be generated by the gRPC framework. -+ OutOfRange Code = 11 -+ -+ // Unimplemented indicates operation is not implemented or not -+ // supported/enabled in this service. -+ // -+ // This error code will be generated by the gRPC framework. Most -+ // commonly, you will see this error code when a method implementation -+ // is missing on the server. It can also be generated for unknown -+ // compression algorithms or a disagreement as to whether an RPC should -+ // be streaming. -+ Unimplemented Code = 12 -+ -+ // Internal errors. Means some invariants expected by underlying -+ // system has been broken. If you see one of these errors, -+ // something is very broken. -+ // -+ // This error code will be generated by the gRPC framework in several -+ // internal error conditions. -+ Internal Code = 13 -+ -+ // Unavailable indicates the service is currently unavailable. -+ // This is a most likely a transient condition and may be corrected -+ // by retrying with a backoff. Note that it is not always safe to retry -+ // non-idempotent operations. -+ // -+ // See litmus test above for deciding between FailedPrecondition, -+ // Aborted, and Unavailable. -+ // -+ // This error code will be generated by the gRPC framework during -+ // abrupt shutdown of a server process or network connection. -+ Unavailable Code = 14 -+ -+ // DataLoss indicates unrecoverable data loss or corruption. -+ // -+ // This error code will not be generated by the gRPC framework. -+ DataLoss Code = 15 -+ -+ // Unauthenticated indicates the request does not have valid -+ // authentication credentials for the operation. -+ // -+ // The gRPC framework will generate this error code when the -+ // authentication metadata is invalid or a Credentials callback fails, -+ // but also expect authentication middleware to generate it. -+ Unauthenticated Code = 16 -+ -+ _maxCode = 17 -+) -+ -+var strToCode = map[string]Code{ -+ `"OK"`: OK, -+ `"CANCELLED"`:/* [sic] */ Canceled, -+ `"UNKNOWN"`: Unknown, -+ `"INVALID_ARGUMENT"`: InvalidArgument, -+ `"DEADLINE_EXCEEDED"`: DeadlineExceeded, -+ `"NOT_FOUND"`: NotFound, -+ `"ALREADY_EXISTS"`: AlreadyExists, -+ `"PERMISSION_DENIED"`: PermissionDenied, -+ `"RESOURCE_EXHAUSTED"`: ResourceExhausted, -+ `"FAILED_PRECONDITION"`: FailedPrecondition, -+ `"ABORTED"`: Aborted, -+ `"OUT_OF_RANGE"`: OutOfRange, -+ `"UNIMPLEMENTED"`: Unimplemented, -+ `"INTERNAL"`: Internal, -+ `"UNAVAILABLE"`: Unavailable, -+ `"DATA_LOSS"`: DataLoss, -+ `"UNAUTHENTICATED"`: Unauthenticated, -+} -+ -+// UnmarshalJSON unmarshals b into the Code. -+func (c *Code) UnmarshalJSON(b []byte) error { -+ // From json.Unmarshaler: By convention, to approximate the behavior of -+ // Unmarshal itself, Unmarshalers implement UnmarshalJSON([]byte("null")) as -+ // a no-op. -+ if string(b) == "null" { -+ return nil -+ } -+ if c == nil { -+ return fmt.Errorf("nil receiver passed to UnmarshalJSON") -+ } -+ -+ if ci, err := strconv.ParseUint(string(b), 10, 32); err == nil { -+ if ci >= _maxCode { -+ return fmt.Errorf("invalid code: %q", ci) -+ } -+ -+ *c = Code(ci) -+ return nil -+ } -+ -+ if jc, ok := strToCode[string(b)]; ok { -+ *c = jc -+ return nil -+ } -+ return fmt.Errorf("invalid code: %q", string(b)) -+} -diff --git a/vendor/google.golang.org/grpc/connectivity/connectivity.go b/vendor/google.golang.org/grpc/connectivity/connectivity.go -new file mode 100755 -index 0000000..4a89926 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/connectivity/connectivity.go -@@ -0,0 +1,94 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package connectivity defines connectivity semantics. -+// For details, see https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md. -+package connectivity -+ -+import ( -+ "google.golang.org/grpc/grpclog" -+) -+ -+var logger = grpclog.Component("core") -+ -+// State indicates the state of connectivity. -+// It can be the state of a ClientConn or SubConn. -+type State int -+ -+func (s State) String() string { -+ switch s { -+ case Idle: -+ return "IDLE" -+ case Connecting: -+ return "CONNECTING" -+ case Ready: -+ return "READY" -+ case TransientFailure: -+ return "TRANSIENT_FAILURE" -+ case Shutdown: -+ return "SHUTDOWN" -+ default: -+ logger.Errorf("unknown connectivity state: %d", s) -+ return "INVALID_STATE" -+ } -+} -+ -+const ( -+ // Idle indicates the ClientConn is idle. -+ Idle State = iota -+ // Connecting indicates the ClientConn is connecting. -+ Connecting -+ // Ready indicates the ClientConn is ready for work. -+ Ready -+ // TransientFailure indicates the ClientConn has seen a failure but expects to recover. -+ TransientFailure -+ // Shutdown indicates the ClientConn has started shutting down. -+ Shutdown -+) -+ -+// ServingMode indicates the current mode of operation of the server. -+// -+// Only xDS enabled gRPC servers currently report their serving mode. -+type ServingMode int -+ -+const ( -+ // ServingModeStarting indicates that the server is starting up. -+ ServingModeStarting ServingMode = iota -+ // ServingModeServing indicates that the server contains all required -+ // configuration and is serving RPCs. -+ ServingModeServing -+ // ServingModeNotServing indicates that the server is not accepting new -+ // connections. Existing connections will be closed gracefully, allowing -+ // in-progress RPCs to complete. A server enters this mode when it does not -+ // contain the required configuration to serve RPCs. -+ ServingModeNotServing -+) -+ -+func (s ServingMode) String() string { -+ switch s { -+ case ServingModeStarting: -+ return "STARTING" -+ case ServingModeServing: -+ return "SERVING" -+ case ServingModeNotServing: -+ return "NOT_SERVING" -+ default: -+ logger.Errorf("unknown serving mode: %d", s) -+ return "INVALID_MODE" -+ } -+} -diff --git a/vendor/google.golang.org/grpc/credentials/credentials.go b/vendor/google.golang.org/grpc/credentials/credentials.go -new file mode 100755 -index 0000000..5feac3a ---- /dev/null -+++ b/vendor/google.golang.org/grpc/credentials/credentials.go -@@ -0,0 +1,291 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package credentials implements various credentials supported by gRPC library, -+// which encapsulate all the state needed by a client to authenticate with a -+// server and make various assertions, e.g., about the client's identity, role, -+// or whether it is authorized to make a particular call. -+package credentials // import "google.golang.org/grpc/credentials" -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ "net" -+ -+ "github.com/golang/protobuf/proto" -+ "google.golang.org/grpc/attributes" -+ icredentials "google.golang.org/grpc/internal/credentials" -+) -+ -+// PerRPCCredentials defines the common interface for the credentials which need to -+// attach security information to every RPC (e.g., oauth2). -+type PerRPCCredentials interface { -+ // GetRequestMetadata gets the current request metadata, refreshing tokens -+ // if required. This should be called by the transport layer on each -+ // request, and the data should be populated in headers or other -+ // context. If a status code is returned, it will be used as the status for -+ // the RPC (restricted to an allowable set of codes as defined by gRFC -+ // A54). uri is the URI of the entry point for the request. When supported -+ // by the underlying implementation, ctx can be used for timeout and -+ // cancellation. Additionally, RequestInfo data will be available via ctx -+ // to this call. TODO(zhaoq): Define the set of the qualified keys instead -+ // of leaving it as an arbitrary string. -+ GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) -+ // RequireTransportSecurity indicates whether the credentials requires -+ // transport security. -+ RequireTransportSecurity() bool -+} -+ -+// SecurityLevel defines the protection level on an established connection. -+// -+// This API is experimental. -+type SecurityLevel int -+ -+const ( -+ // InvalidSecurityLevel indicates an invalid security level. -+ // The zero SecurityLevel value is invalid for backward compatibility. -+ InvalidSecurityLevel SecurityLevel = iota -+ // NoSecurity indicates a connection is insecure. -+ NoSecurity -+ // IntegrityOnly indicates a connection only provides integrity protection. -+ IntegrityOnly -+ // PrivacyAndIntegrity indicates a connection provides both privacy and integrity protection. -+ PrivacyAndIntegrity -+) -+ -+// String returns SecurityLevel in a string format. -+func (s SecurityLevel) String() string { -+ switch s { -+ case NoSecurity: -+ return "NoSecurity" -+ case IntegrityOnly: -+ return "IntegrityOnly" -+ case PrivacyAndIntegrity: -+ return "PrivacyAndIntegrity" -+ } -+ return fmt.Sprintf("invalid SecurityLevel: %v", int(s)) -+} -+ -+// CommonAuthInfo contains authenticated information common to AuthInfo implementations. -+// It should be embedded in a struct implementing AuthInfo to provide additional information -+// about the credentials. -+// -+// This API is experimental. -+type CommonAuthInfo struct { -+ SecurityLevel SecurityLevel -+} -+ -+// GetCommonAuthInfo returns the pointer to CommonAuthInfo struct. -+func (c CommonAuthInfo) GetCommonAuthInfo() CommonAuthInfo { -+ return c -+} -+ -+// ProtocolInfo provides information regarding the gRPC wire protocol version, -+// security protocol, security protocol version in use, server name, etc. -+type ProtocolInfo struct { -+ // ProtocolVersion is the gRPC wire protocol version. -+ ProtocolVersion string -+ // SecurityProtocol is the security protocol in use. -+ SecurityProtocol string -+ // SecurityVersion is the security protocol version. It is a static version string from the -+ // credentials, not a value that reflects per-connection protocol negotiation. To retrieve -+ // details about the credentials used for a connection, use the Peer's AuthInfo field instead. -+ // -+ // Deprecated: please use Peer.AuthInfo. -+ SecurityVersion string -+ // ServerName is the user-configured server name. -+ ServerName string -+} -+ -+// AuthInfo defines the common interface for the auth information the users are interested in. -+// A struct that implements AuthInfo should embed CommonAuthInfo by including additional -+// information about the credentials in it. -+type AuthInfo interface { -+ AuthType() string -+} -+ -+// ErrConnDispatched indicates that rawConn has been dispatched out of gRPC -+// and the caller should not close rawConn. -+var ErrConnDispatched = errors.New("credentials: rawConn is dispatched out of gRPC") -+ -+// TransportCredentials defines the common interface for all the live gRPC wire -+// protocols and supported transport security protocols (e.g., TLS, SSL). -+type TransportCredentials interface { -+ // ClientHandshake does the authentication handshake specified by the -+ // corresponding authentication protocol on rawConn for clients. It returns -+ // the authenticated connection and the corresponding auth information -+ // about the connection. The auth information should embed CommonAuthInfo -+ // to return additional information about the credentials. Implementations -+ // must use the provided context to implement timely cancellation. gRPC -+ // will try to reconnect if the error returned is a temporary error -+ // (io.EOF, context.DeadlineExceeded or err.Temporary() == true). If the -+ // returned error is a wrapper error, implementations should make sure that -+ // the error implements Temporary() to have the correct retry behaviors. -+ // Additionally, ClientHandshakeInfo data will be available via the context -+ // passed to this call. -+ // -+ // The second argument to this method is the `:authority` header value used -+ // while creating new streams on this connection after authentication -+ // succeeds. Implementations must use this as the server name during the -+ // authentication handshake. -+ // -+ // If the returned net.Conn is closed, it MUST close the net.Conn provided. -+ ClientHandshake(context.Context, string, net.Conn) (net.Conn, AuthInfo, error) -+ // ServerHandshake does the authentication handshake for servers. It returns -+ // the authenticated connection and the corresponding auth information about -+ // the connection. The auth information should embed CommonAuthInfo to return additional information -+ // about the credentials. -+ // -+ // If the returned net.Conn is closed, it MUST close the net.Conn provided. -+ ServerHandshake(net.Conn) (net.Conn, AuthInfo, error) -+ // Info provides the ProtocolInfo of this TransportCredentials. -+ Info() ProtocolInfo -+ // Clone makes a copy of this TransportCredentials. -+ Clone() TransportCredentials -+ // OverrideServerName specifies the value used for the following: -+ // - verifying the hostname on the returned certificates -+ // - as SNI in the client's handshake to support virtual hosting -+ // - as the value for `:authority` header at stream creation time -+ // -+ // Deprecated: use grpc.WithAuthority instead. Will be supported -+ // throughout 1.x. -+ OverrideServerName(string) error -+} -+ -+// Bundle is a combination of TransportCredentials and PerRPCCredentials. -+// -+// It also contains a mode switching method, so it can be used as a combination -+// of different credential policies. -+// -+// Bundle cannot be used together with individual TransportCredentials. -+// PerRPCCredentials from Bundle will be appended to other PerRPCCredentials. -+// -+// This API is experimental. -+type Bundle interface { -+ // TransportCredentials returns the transport credentials from the Bundle. -+ // -+ // Implementations must return non-nil transport credentials. If transport -+ // security is not needed by the Bundle, implementations may choose to -+ // return insecure.NewCredentials(). -+ TransportCredentials() TransportCredentials -+ -+ // PerRPCCredentials returns the per-RPC credentials from the Bundle. -+ // -+ // May be nil if per-RPC credentials are not needed. -+ PerRPCCredentials() PerRPCCredentials -+ -+ // NewWithMode should make a copy of Bundle, and switch mode. Modifying the -+ // existing Bundle may cause races. -+ // -+ // NewWithMode returns nil if the requested mode is not supported. -+ NewWithMode(mode string) (Bundle, error) -+} -+ -+// RequestInfo contains request data attached to the context passed to GetRequestMetadata calls. -+// -+// This API is experimental. -+type RequestInfo struct { -+ // The method passed to Invoke or NewStream for this RPC. (For proto methods, this has the format "/some.Service/Method") -+ Method string -+ // AuthInfo contains the information from a security handshake (TransportCredentials.ClientHandshake, TransportCredentials.ServerHandshake) -+ AuthInfo AuthInfo -+} -+ -+// RequestInfoFromContext extracts the RequestInfo from the context if it exists. -+// -+// This API is experimental. -+func RequestInfoFromContext(ctx context.Context) (ri RequestInfo, ok bool) { -+ ri, ok = icredentials.RequestInfoFromContext(ctx).(RequestInfo) -+ return ri, ok -+} -+ -+// ClientHandshakeInfo holds data to be passed to ClientHandshake. This makes -+// it possible to pass arbitrary data to the handshaker from gRPC, resolver, -+// balancer etc. Individual credential implementations control the actual -+// format of the data that they are willing to receive. -+// -+// This API is experimental. -+type ClientHandshakeInfo struct { -+ // Attributes contains the attributes for the address. It could be provided -+ // by the gRPC, resolver, balancer etc. -+ Attributes *attributes.Attributes -+} -+ -+// ClientHandshakeInfoFromContext returns the ClientHandshakeInfo struct stored -+// in ctx. -+// -+// This API is experimental. -+func ClientHandshakeInfoFromContext(ctx context.Context) ClientHandshakeInfo { -+ chi, _ := icredentials.ClientHandshakeInfoFromContext(ctx).(ClientHandshakeInfo) -+ return chi -+} -+ -+// CheckSecurityLevel checks if a connection's security level is greater than or equal to the specified one. -+// It returns success if 1) the condition is satisified or 2) AuthInfo struct does not implement GetCommonAuthInfo() method -+// or 3) CommonAuthInfo.SecurityLevel has an invalid zero value. For 2) and 3), it is for the purpose of backward-compatibility. -+// -+// This API is experimental. -+func CheckSecurityLevel(ai AuthInfo, level SecurityLevel) error { -+ type internalInfo interface { -+ GetCommonAuthInfo() CommonAuthInfo -+ } -+ if ai == nil { -+ return errors.New("AuthInfo is nil") -+ } -+ if ci, ok := ai.(internalInfo); ok { -+ // CommonAuthInfo.SecurityLevel has an invalid value. -+ if ci.GetCommonAuthInfo().SecurityLevel == InvalidSecurityLevel { -+ return nil -+ } -+ if ci.GetCommonAuthInfo().SecurityLevel < level { -+ return fmt.Errorf("requires SecurityLevel %v; connection has %v", level, ci.GetCommonAuthInfo().SecurityLevel) -+ } -+ } -+ // The condition is satisfied or AuthInfo struct does not implement GetCommonAuthInfo() method. -+ return nil -+} -+ -+// ChannelzSecurityInfo defines the interface that security protocols should implement -+// in order to provide security info to channelz. -+// -+// This API is experimental. -+type ChannelzSecurityInfo interface { -+ GetSecurityValue() ChannelzSecurityValue -+} -+ -+// ChannelzSecurityValue defines the interface that GetSecurityValue() return value -+// should satisfy. This interface should only be satisfied by *TLSChannelzSecurityValue -+// and *OtherChannelzSecurityValue. -+// -+// This API is experimental. -+type ChannelzSecurityValue interface { -+ isChannelzSecurityValue() -+} -+ -+// OtherChannelzSecurityValue defines the struct that non-TLS protocol should return -+// from GetSecurityValue(), which contains protocol specific security info. Note -+// the Value field will be sent to users of channelz requesting channel info, and -+// thus sensitive info should better be avoided. -+// -+// This API is experimental. -+type OtherChannelzSecurityValue struct { -+ ChannelzSecurityValue -+ Name string -+ Value proto.Message -+} -diff --git a/vendor/google.golang.org/grpc/credentials/insecure/insecure.go b/vendor/google.golang.org/grpc/credentials/insecure/insecure.go -new file mode 100755 -index 0000000..82bee14 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/credentials/insecure/insecure.go -@@ -0,0 +1,98 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package insecure provides an implementation of the -+// credentials.TransportCredentials interface which disables transport security. -+package insecure -+ -+import ( -+ "context" -+ "net" -+ -+ "google.golang.org/grpc/credentials" -+) -+ -+// NewCredentials returns a credentials which disables transport security. -+// -+// Note that using this credentials with per-RPC credentials which require -+// transport security is incompatible and will cause grpc.Dial() to fail. -+func NewCredentials() credentials.TransportCredentials { -+ return insecureTC{} -+} -+ -+// insecureTC implements the insecure transport credentials. The handshake -+// methods simply return the passed in net.Conn and set the security level to -+// NoSecurity. -+type insecureTC struct{} -+ -+func (insecureTC) ClientHandshake(ctx context.Context, _ string, conn net.Conn) (net.Conn, credentials.AuthInfo, error) { -+ return conn, info{credentials.CommonAuthInfo{SecurityLevel: credentials.NoSecurity}}, nil -+} -+ -+func (insecureTC) ServerHandshake(conn net.Conn) (net.Conn, credentials.AuthInfo, error) { -+ return conn, info{credentials.CommonAuthInfo{SecurityLevel: credentials.NoSecurity}}, nil -+} -+ -+func (insecureTC) Info() credentials.ProtocolInfo { -+ return credentials.ProtocolInfo{SecurityProtocol: "insecure"} -+} -+ -+func (insecureTC) Clone() credentials.TransportCredentials { -+ return insecureTC{} -+} -+ -+func (insecureTC) OverrideServerName(string) error { -+ return nil -+} -+ -+// info contains the auth information for an insecure connection. -+// It implements the AuthInfo interface. -+type info struct { -+ credentials.CommonAuthInfo -+} -+ -+// AuthType returns the type of info as a string. -+func (info) AuthType() string { -+ return "insecure" -+} -+ -+// insecureBundle implements an insecure bundle. -+// An insecure bundle provides a thin wrapper around insecureTC to support -+// the credentials.Bundle interface. -+type insecureBundle struct{} -+ -+// NewBundle returns a bundle with disabled transport security and no per rpc credential. -+func NewBundle() credentials.Bundle { -+ return insecureBundle{} -+} -+ -+// NewWithMode returns a new insecure Bundle. The mode is ignored. -+func (insecureBundle) NewWithMode(string) (credentials.Bundle, error) { -+ return insecureBundle{}, nil -+} -+ -+// PerRPCCredentials returns an nil implementation as insecure -+// bundle does not support a per rpc credential. -+func (insecureBundle) PerRPCCredentials() credentials.PerRPCCredentials { -+ return nil -+} -+ -+// TransportCredentials returns the underlying insecure transport credential. -+func (insecureBundle) TransportCredentials() credentials.TransportCredentials { -+ return NewCredentials() -+} -diff --git a/vendor/google.golang.org/grpc/credentials/tls.go b/vendor/google.golang.org/grpc/credentials/tls.go -new file mode 100755 -index 0000000..877b7cd ---- /dev/null -+++ b/vendor/google.golang.org/grpc/credentials/tls.go -@@ -0,0 +1,236 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package credentials -+ -+import ( -+ "context" -+ "crypto/tls" -+ "crypto/x509" -+ "fmt" -+ "net" -+ "net/url" -+ "os" -+ -+ credinternal "google.golang.org/grpc/internal/credentials" -+) -+ -+// TLSInfo contains the auth information for a TLS authenticated connection. -+// It implements the AuthInfo interface. -+type TLSInfo struct { -+ State tls.ConnectionState -+ CommonAuthInfo -+ // This API is experimental. -+ SPIFFEID *url.URL -+} -+ -+// AuthType returns the type of TLSInfo as a string. -+func (t TLSInfo) AuthType() string { -+ return "tls" -+} -+ -+// GetSecurityValue returns security info requested by channelz. -+func (t TLSInfo) GetSecurityValue() ChannelzSecurityValue { -+ v := &TLSChannelzSecurityValue{ -+ StandardName: cipherSuiteLookup[t.State.CipherSuite], -+ } -+ // Currently there's no way to get LocalCertificate info from tls package. -+ if len(t.State.PeerCertificates) > 0 { -+ v.RemoteCertificate = t.State.PeerCertificates[0].Raw -+ } -+ return v -+} -+ -+// tlsCreds is the credentials required for authenticating a connection using TLS. -+type tlsCreds struct { -+ // TLS configuration -+ config *tls.Config -+} -+ -+func (c tlsCreds) Info() ProtocolInfo { -+ return ProtocolInfo{ -+ SecurityProtocol: "tls", -+ SecurityVersion: "1.2", -+ ServerName: c.config.ServerName, -+ } -+} -+ -+func (c *tlsCreds) ClientHandshake(ctx context.Context, authority string, rawConn net.Conn) (_ net.Conn, _ AuthInfo, err error) { -+ // use local cfg to avoid clobbering ServerName if using multiple endpoints -+ cfg := credinternal.CloneTLSConfig(c.config) -+ if cfg.ServerName == "" { -+ serverName, _, err := net.SplitHostPort(authority) -+ if err != nil { -+ // If the authority had no host port or if the authority cannot be parsed, use it as-is. -+ serverName = authority -+ } -+ cfg.ServerName = serverName -+ } -+ conn := tls.Client(rawConn, cfg) -+ errChannel := make(chan error, 1) -+ go func() { -+ errChannel <- conn.Handshake() -+ close(errChannel) -+ }() -+ select { -+ case err := <-errChannel: -+ if err != nil { -+ conn.Close() -+ return nil, nil, err -+ } -+ case <-ctx.Done(): -+ conn.Close() -+ return nil, nil, ctx.Err() -+ } -+ tlsInfo := TLSInfo{ -+ State: conn.ConnectionState(), -+ CommonAuthInfo: CommonAuthInfo{ -+ SecurityLevel: PrivacyAndIntegrity, -+ }, -+ } -+ id := credinternal.SPIFFEIDFromState(conn.ConnectionState()) -+ if id != nil { -+ tlsInfo.SPIFFEID = id -+ } -+ return credinternal.WrapSyscallConn(rawConn, conn), tlsInfo, nil -+} -+ -+func (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) { -+ conn := tls.Server(rawConn, c.config) -+ if err := conn.Handshake(); err != nil { -+ conn.Close() -+ return nil, nil, err -+ } -+ tlsInfo := TLSInfo{ -+ State: conn.ConnectionState(), -+ CommonAuthInfo: CommonAuthInfo{ -+ SecurityLevel: PrivacyAndIntegrity, -+ }, -+ } -+ id := credinternal.SPIFFEIDFromState(conn.ConnectionState()) -+ if id != nil { -+ tlsInfo.SPIFFEID = id -+ } -+ return credinternal.WrapSyscallConn(rawConn, conn), tlsInfo, nil -+} -+ -+func (c *tlsCreds) Clone() TransportCredentials { -+ return NewTLS(c.config) -+} -+ -+func (c *tlsCreds) OverrideServerName(serverNameOverride string) error { -+ c.config.ServerName = serverNameOverride -+ return nil -+} -+ -+// NewTLS uses c to construct a TransportCredentials based on TLS. -+func NewTLS(c *tls.Config) TransportCredentials { -+ tc := &tlsCreds{credinternal.CloneTLSConfig(c)} -+ tc.config.NextProtos = credinternal.AppendH2ToNextProtos(tc.config.NextProtos) -+ return tc -+} -+ -+// NewClientTLSFromCert constructs TLS credentials from the provided root -+// certificate authority certificate(s) to validate server connections. If -+// certificates to establish the identity of the client need to be included in -+// the credentials (eg: for mTLS), use NewTLS instead, where a complete -+// tls.Config can be specified. -+// serverNameOverride is for testing only. If set to a non empty string, -+// it will override the virtual host name of authority (e.g. :authority header -+// field) in requests. -+func NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) TransportCredentials { -+ return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp}) -+} -+ -+// NewClientTLSFromFile constructs TLS credentials from the provided root -+// certificate authority certificate file(s) to validate server connections. If -+// certificates to establish the identity of the client need to be included in -+// the credentials (eg: for mTLS), use NewTLS instead, where a complete -+// tls.Config can be specified. -+// serverNameOverride is for testing only. If set to a non empty string, -+// it will override the virtual host name of authority (e.g. :authority header -+// field) in requests. -+func NewClientTLSFromFile(certFile, serverNameOverride string) (TransportCredentials, error) { -+ b, err := os.ReadFile(certFile) -+ if err != nil { -+ return nil, err -+ } -+ cp := x509.NewCertPool() -+ if !cp.AppendCertsFromPEM(b) { -+ return nil, fmt.Errorf("credentials: failed to append certificates") -+ } -+ return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp}), nil -+} -+ -+// NewServerTLSFromCert constructs TLS credentials from the input certificate for server. -+func NewServerTLSFromCert(cert *tls.Certificate) TransportCredentials { -+ return NewTLS(&tls.Config{Certificates: []tls.Certificate{*cert}}) -+} -+ -+// NewServerTLSFromFile constructs TLS credentials from the input certificate file and key -+// file for server. -+func NewServerTLSFromFile(certFile, keyFile string) (TransportCredentials, error) { -+ cert, err := tls.LoadX509KeyPair(certFile, keyFile) -+ if err != nil { -+ return nil, err -+ } -+ return NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}), nil -+} -+ -+// TLSChannelzSecurityValue defines the struct that TLS protocol should return -+// from GetSecurityValue(), containing security info like cipher and certificate used. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type TLSChannelzSecurityValue struct { -+ ChannelzSecurityValue -+ StandardName string -+ LocalCertificate []byte -+ RemoteCertificate []byte -+} -+ -+var cipherSuiteLookup = map[uint16]string{ -+ tls.TLS_RSA_WITH_RC4_128_SHA: "TLS_RSA_WITH_RC4_128_SHA", -+ tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA: "TLS_RSA_WITH_3DES_EDE_CBC_SHA", -+ tls.TLS_RSA_WITH_AES_128_CBC_SHA: "TLS_RSA_WITH_AES_128_CBC_SHA", -+ tls.TLS_RSA_WITH_AES_256_CBC_SHA: "TLS_RSA_WITH_AES_256_CBC_SHA", -+ tls.TLS_RSA_WITH_AES_128_GCM_SHA256: "TLS_RSA_WITH_AES_128_GCM_SHA256", -+ tls.TLS_RSA_WITH_AES_256_GCM_SHA384: "TLS_RSA_WITH_AES_256_GCM_SHA384", -+ tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA: "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", -+ tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", -+ tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", -+ tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA: "TLS_ECDHE_RSA_WITH_RC4_128_SHA", -+ tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", -+ tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", -+ tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", -+ tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", -+ tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", -+ tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", -+ tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", -+ tls.TLS_FALLBACK_SCSV: "TLS_FALLBACK_SCSV", -+ tls.TLS_RSA_WITH_AES_128_CBC_SHA256: "TLS_RSA_WITH_AES_128_CBC_SHA256", -+ tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", -+ tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", -+ tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305: "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", -+ tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305: "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", -+ tls.TLS_AES_128_GCM_SHA256: "TLS_AES_128_GCM_SHA256", -+ tls.TLS_AES_256_GCM_SHA384: "TLS_AES_256_GCM_SHA384", -+ tls.TLS_CHACHA20_POLY1305_SHA256: "TLS_CHACHA20_POLY1305_SHA256", -+} -diff --git a/vendor/google.golang.org/grpc/dialoptions.go b/vendor/google.golang.org/grpc/dialoptions.go -new file mode 100755 -index 0000000..23ea952 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/dialoptions.go -@@ -0,0 +1,701 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+ "net" -+ "time" -+ -+ "google.golang.org/grpc/backoff" -+ "google.golang.org/grpc/channelz" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/credentials/insecure" -+ "google.golang.org/grpc/internal" -+ internalbackoff "google.golang.org/grpc/internal/backoff" -+ "google.golang.org/grpc/internal/binarylog" -+ "google.golang.org/grpc/internal/transport" -+ "google.golang.org/grpc/keepalive" -+ "google.golang.org/grpc/resolver" -+ "google.golang.org/grpc/stats" -+) -+ -+func init() { -+ internal.AddGlobalDialOptions = func(opt ...DialOption) { -+ globalDialOptions = append(globalDialOptions, opt...) -+ } -+ internal.ClearGlobalDialOptions = func() { -+ globalDialOptions = nil -+ } -+ internal.WithBinaryLogger = withBinaryLogger -+ internal.JoinDialOptions = newJoinDialOption -+ internal.DisableGlobalDialOptions = newDisableGlobalDialOptions -+} -+ -+// dialOptions configure a Dial call. dialOptions are set by the DialOption -+// values passed to Dial. -+type dialOptions struct { -+ unaryInt UnaryClientInterceptor -+ streamInt StreamClientInterceptor -+ -+ chainUnaryInts []UnaryClientInterceptor -+ chainStreamInts []StreamClientInterceptor -+ -+ cp Compressor -+ dc Decompressor -+ bs internalbackoff.Strategy -+ block bool -+ returnLastError bool -+ timeout time.Duration -+ scChan <-chan ServiceConfig -+ authority string -+ binaryLogger binarylog.Logger -+ copts transport.ConnectOptions -+ callOptions []CallOption -+ channelzParentID *channelz.Identifier -+ disableServiceConfig bool -+ disableRetry bool -+ disableHealthCheck bool -+ healthCheckFunc internal.HealthChecker -+ minConnectTimeout func() time.Duration -+ defaultServiceConfig *ServiceConfig // defaultServiceConfig is parsed from defaultServiceConfigRawJSON. -+ defaultServiceConfigRawJSON *string -+ resolvers []resolver.Builder -+ idleTimeout time.Duration -+ recvBufferPool SharedBufferPool -+} -+ -+// DialOption configures how we set up the connection. -+type DialOption interface { -+ apply(*dialOptions) -+} -+ -+var globalDialOptions []DialOption -+ -+// EmptyDialOption does not alter the dial configuration. It can be embedded in -+// another structure to build custom dial options. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type EmptyDialOption struct{} -+ -+func (EmptyDialOption) apply(*dialOptions) {} -+ -+type disableGlobalDialOptions struct{} -+ -+func (disableGlobalDialOptions) apply(*dialOptions) {} -+ -+// newDisableGlobalDialOptions returns a DialOption that prevents the ClientConn -+// from applying the global DialOptions (set via AddGlobalDialOptions). -+func newDisableGlobalDialOptions() DialOption { -+ return &disableGlobalDialOptions{} -+} -+ -+// funcDialOption wraps a function that modifies dialOptions into an -+// implementation of the DialOption interface. -+type funcDialOption struct { -+ f func(*dialOptions) -+} -+ -+func (fdo *funcDialOption) apply(do *dialOptions) { -+ fdo.f(do) -+} -+ -+func newFuncDialOption(f func(*dialOptions)) *funcDialOption { -+ return &funcDialOption{ -+ f: f, -+ } -+} -+ -+type joinDialOption struct { -+ opts []DialOption -+} -+ -+func (jdo *joinDialOption) apply(do *dialOptions) { -+ for _, opt := range jdo.opts { -+ opt.apply(do) -+ } -+} -+ -+func newJoinDialOption(opts ...DialOption) DialOption { -+ return &joinDialOption{opts: opts} -+} -+ -+// WithWriteBufferSize determines how much data can be batched before doing a -+// write on the wire. The corresponding memory allocation for this buffer will -+// be twice the size to keep syscalls low. The default value for this buffer is -+// 32KB. -+// -+// Zero or negative values will disable the write buffer such that each write -+// will be on underlying connection. Note: A Send call may not directly -+// translate to a write. -+func WithWriteBufferSize(s int) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.WriteBufferSize = s -+ }) -+} -+ -+// WithReadBufferSize lets you set the size of read buffer, this determines how -+// much data can be read at most for each read syscall. -+// -+// The default value for this buffer is 32KB. Zero or negative values will -+// disable read buffer for a connection so data framer can access the -+// underlying conn directly. -+func WithReadBufferSize(s int) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.ReadBufferSize = s -+ }) -+} -+ -+// WithInitialWindowSize returns a DialOption which sets the value for initial -+// window size on a stream. The lower bound for window size is 64K and any value -+// smaller than that will be ignored. -+func WithInitialWindowSize(s int32) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.InitialWindowSize = s -+ }) -+} -+ -+// WithInitialConnWindowSize returns a DialOption which sets the value for -+// initial window size on a connection. The lower bound for window size is 64K -+// and any value smaller than that will be ignored. -+func WithInitialConnWindowSize(s int32) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.InitialConnWindowSize = s -+ }) -+} -+ -+// WithMaxMsgSize returns a DialOption which sets the maximum message size the -+// client can receive. -+// -+// Deprecated: use WithDefaultCallOptions(MaxCallRecvMsgSize(s)) instead. Will -+// be supported throughout 1.x. -+func WithMaxMsgSize(s int) DialOption { -+ return WithDefaultCallOptions(MaxCallRecvMsgSize(s)) -+} -+ -+// WithDefaultCallOptions returns a DialOption which sets the default -+// CallOptions for calls over the connection. -+func WithDefaultCallOptions(cos ...CallOption) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.callOptions = append(o.callOptions, cos...) -+ }) -+} -+ -+// WithCodec returns a DialOption which sets a codec for message marshaling and -+// unmarshaling. -+// -+// Deprecated: use WithDefaultCallOptions(ForceCodec(_)) instead. Will be -+// supported throughout 1.x. -+func WithCodec(c Codec) DialOption { -+ return WithDefaultCallOptions(CallCustomCodec(c)) -+} -+ -+// WithCompressor returns a DialOption which sets a Compressor to use for -+// message compression. It has lower priority than the compressor set by the -+// UseCompressor CallOption. -+// -+// Deprecated: use UseCompressor instead. Will be supported throughout 1.x. -+func WithCompressor(cp Compressor) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.cp = cp -+ }) -+} -+ -+// WithDecompressor returns a DialOption which sets a Decompressor to use for -+// incoming message decompression. If incoming response messages are encoded -+// using the decompressor's Type(), it will be used. Otherwise, the message -+// encoding will be used to look up the compressor registered via -+// encoding.RegisterCompressor, which will then be used to decompress the -+// message. If no compressor is registered for the encoding, an Unimplemented -+// status error will be returned. -+// -+// Deprecated: use encoding.RegisterCompressor instead. Will be supported -+// throughout 1.x. -+func WithDecompressor(dc Decompressor) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.dc = dc -+ }) -+} -+ -+// WithServiceConfig returns a DialOption which has a channel to read the -+// service configuration. -+// -+// Deprecated: service config should be received through name resolver or via -+// WithDefaultServiceConfig, as specified at -+// https://github.com/grpc/grpc/blob/master/doc/service_config.md. Will be -+// removed in a future 1.x release. -+func WithServiceConfig(c <-chan ServiceConfig) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.scChan = c -+ }) -+} -+ -+// WithConnectParams configures the ClientConn to use the provided ConnectParams -+// for creating and maintaining connections to servers. -+// -+// The backoff configuration specified as part of the ConnectParams overrides -+// all defaults specified in -+// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. Consider -+// using the backoff.DefaultConfig as a base, in cases where you want to -+// override only a subset of the backoff configuration. -+func WithConnectParams(p ConnectParams) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.bs = internalbackoff.Exponential{Config: p.Backoff} -+ o.minConnectTimeout = func() time.Duration { -+ return p.MinConnectTimeout -+ } -+ }) -+} -+ -+// WithBackoffMaxDelay configures the dialer to use the provided maximum delay -+// when backing off after failed connection attempts. -+// -+// Deprecated: use WithConnectParams instead. Will be supported throughout 1.x. -+func WithBackoffMaxDelay(md time.Duration) DialOption { -+ return WithBackoffConfig(BackoffConfig{MaxDelay: md}) -+} -+ -+// WithBackoffConfig configures the dialer to use the provided backoff -+// parameters after connection failures. -+// -+// Deprecated: use WithConnectParams instead. Will be supported throughout 1.x. -+func WithBackoffConfig(b BackoffConfig) DialOption { -+ bc := backoff.DefaultConfig -+ bc.MaxDelay = b.MaxDelay -+ return withBackoff(internalbackoff.Exponential{Config: bc}) -+} -+ -+// withBackoff sets the backoff strategy used for connectRetryNum after a failed -+// connection attempt. -+// -+// This can be exported if arbitrary backoff strategies are allowed by gRPC. -+func withBackoff(bs internalbackoff.Strategy) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.bs = bs -+ }) -+} -+ -+// WithBlock returns a DialOption which makes callers of Dial block until the -+// underlying connection is up. Without this, Dial returns immediately and -+// connecting the server happens in background. -+// -+// Use of this feature is not recommended. For more information, please see: -+// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md -+func WithBlock() DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.block = true -+ }) -+} -+ -+// WithReturnConnectionError returns a DialOption which makes the client connection -+// return a string containing both the last connection error that occurred and -+// the context.DeadlineExceeded error. -+// Implies WithBlock() -+// -+// Use of this feature is not recommended. For more information, please see: -+// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func WithReturnConnectionError() DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.block = true -+ o.returnLastError = true -+ }) -+} -+ -+// WithInsecure returns a DialOption which disables transport security for this -+// ClientConn. Under the hood, it uses insecure.NewCredentials(). -+// -+// Note that using this DialOption with per-RPC credentials (through -+// WithCredentialsBundle or WithPerRPCCredentials) which require transport -+// security is incompatible and will cause grpc.Dial() to fail. -+// -+// Deprecated: use WithTransportCredentials and insecure.NewCredentials() -+// instead. Will be supported throughout 1.x. -+func WithInsecure() DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.TransportCredentials = insecure.NewCredentials() -+ }) -+} -+ -+// WithNoProxy returns a DialOption which disables the use of proxies for this -+// ClientConn. This is ignored if WithDialer or WithContextDialer are used. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func WithNoProxy() DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.UseProxy = false -+ }) -+} -+ -+// WithTransportCredentials returns a DialOption which configures a connection -+// level security credentials (e.g., TLS/SSL). This should not be used together -+// with WithCredentialsBundle. -+func WithTransportCredentials(creds credentials.TransportCredentials) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.TransportCredentials = creds -+ }) -+} -+ -+// WithPerRPCCredentials returns a DialOption which sets credentials and places -+// auth state on each outbound RPC. -+func WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.PerRPCCredentials = append(o.copts.PerRPCCredentials, creds) -+ }) -+} -+ -+// WithCredentialsBundle returns a DialOption to set a credentials bundle for -+// the ClientConn.WithCreds. This should not be used together with -+// WithTransportCredentials. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func WithCredentialsBundle(b credentials.Bundle) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.CredsBundle = b -+ }) -+} -+ -+// WithTimeout returns a DialOption that configures a timeout for dialing a -+// ClientConn initially. This is valid if and only if WithBlock() is present. -+// -+// Deprecated: use DialContext instead of Dial and context.WithTimeout -+// instead. Will be supported throughout 1.x. -+func WithTimeout(d time.Duration) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.timeout = d -+ }) -+} -+ -+// WithContextDialer returns a DialOption that sets a dialer to create -+// connections. If FailOnNonTempDialError() is set to true, and an error is -+// returned by f, gRPC checks the error's Temporary() method to decide if it -+// should try to reconnect to the network address. -+func WithContextDialer(f func(context.Context, string) (net.Conn, error)) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.Dialer = f -+ }) -+} -+ -+func init() { -+ internal.WithHealthCheckFunc = withHealthCheckFunc -+} -+ -+// WithDialer returns a DialOption that specifies a function to use for dialing -+// network addresses. If FailOnNonTempDialError() is set to true, and an error -+// is returned by f, gRPC checks the error's Temporary() method to decide if it -+// should try to reconnect to the network address. -+// -+// Deprecated: use WithContextDialer instead. Will be supported throughout -+// 1.x. -+func WithDialer(f func(string, time.Duration) (net.Conn, error)) DialOption { -+ return WithContextDialer( -+ func(ctx context.Context, addr string) (net.Conn, error) { -+ if deadline, ok := ctx.Deadline(); ok { -+ return f(addr, time.Until(deadline)) -+ } -+ return f(addr, 0) -+ }) -+} -+ -+// WithStatsHandler returns a DialOption that specifies the stats handler for -+// all the RPCs and underlying network connections in this ClientConn. -+func WithStatsHandler(h stats.Handler) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ if h == nil { -+ logger.Error("ignoring nil parameter in grpc.WithStatsHandler ClientOption") -+ // Do not allow a nil stats handler, which would otherwise cause -+ // panics. -+ return -+ } -+ o.copts.StatsHandlers = append(o.copts.StatsHandlers, h) -+ }) -+} -+ -+// withBinaryLogger returns a DialOption that specifies the binary logger for -+// this ClientConn. -+func withBinaryLogger(bl binarylog.Logger) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.binaryLogger = bl -+ }) -+} -+ -+// FailOnNonTempDialError returns a DialOption that specifies if gRPC fails on -+// non-temporary dial errors. If f is true, and dialer returns a non-temporary -+// error, gRPC will fail the connection to the network address and won't try to -+// reconnect. The default value of FailOnNonTempDialError is false. -+// -+// FailOnNonTempDialError only affects the initial dial, and does not do -+// anything useful unless you are also using WithBlock(). -+// -+// Use of this feature is not recommended. For more information, please see: -+// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func FailOnNonTempDialError(f bool) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.FailOnNonTempDialError = f -+ }) -+} -+ -+// WithUserAgent returns a DialOption that specifies a user agent string for all -+// the RPCs. -+func WithUserAgent(s string) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.UserAgent = s -+ }) -+} -+ -+// WithKeepaliveParams returns a DialOption that specifies keepalive parameters -+// for the client transport. -+func WithKeepaliveParams(kp keepalive.ClientParameters) DialOption { -+ if kp.Time < internal.KeepaliveMinPingTime { -+ logger.Warningf("Adjusting keepalive ping interval to minimum period of %v", internal.KeepaliveMinPingTime) -+ kp.Time = internal.KeepaliveMinPingTime -+ } -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.KeepaliveParams = kp -+ }) -+} -+ -+// WithUnaryInterceptor returns a DialOption that specifies the interceptor for -+// unary RPCs. -+func WithUnaryInterceptor(f UnaryClientInterceptor) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.unaryInt = f -+ }) -+} -+ -+// WithChainUnaryInterceptor returns a DialOption that specifies the chained -+// interceptor for unary RPCs. The first interceptor will be the outer most, -+// while the last interceptor will be the inner most wrapper around the real call. -+// All interceptors added by this method will be chained, and the interceptor -+// defined by WithUnaryInterceptor will always be prepended to the chain. -+func WithChainUnaryInterceptor(interceptors ...UnaryClientInterceptor) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.chainUnaryInts = append(o.chainUnaryInts, interceptors...) -+ }) -+} -+ -+// WithStreamInterceptor returns a DialOption that specifies the interceptor for -+// streaming RPCs. -+func WithStreamInterceptor(f StreamClientInterceptor) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.streamInt = f -+ }) -+} -+ -+// WithChainStreamInterceptor returns a DialOption that specifies the chained -+// interceptor for streaming RPCs. The first interceptor will be the outer most, -+// while the last interceptor will be the inner most wrapper around the real call. -+// All interceptors added by this method will be chained, and the interceptor -+// defined by WithStreamInterceptor will always be prepended to the chain. -+func WithChainStreamInterceptor(interceptors ...StreamClientInterceptor) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.chainStreamInts = append(o.chainStreamInts, interceptors...) -+ }) -+} -+ -+// WithAuthority returns a DialOption that specifies the value to be used as the -+// :authority pseudo-header and as the server name in authentication handshake. -+func WithAuthority(a string) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.authority = a -+ }) -+} -+ -+// WithChannelzParentID returns a DialOption that specifies the channelz ID of -+// current ClientConn's parent. This function is used in nested channel creation -+// (e.g. grpclb dial). -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func WithChannelzParentID(id *channelz.Identifier) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.channelzParentID = id -+ }) -+} -+ -+// WithDisableServiceConfig returns a DialOption that causes gRPC to ignore any -+// service config provided by the resolver and provides a hint to the resolver -+// to not fetch service configs. -+// -+// Note that this dial option only disables service config from resolver. If -+// default service config is provided, gRPC will use the default service config. -+func WithDisableServiceConfig() DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.disableServiceConfig = true -+ }) -+} -+ -+// WithDefaultServiceConfig returns a DialOption that configures the default -+// service config, which will be used in cases where: -+// -+// 1. WithDisableServiceConfig is also used, or -+// -+// 2. The name resolver does not provide a service config or provides an -+// invalid service config. -+// -+// The parameter s is the JSON representation of the default service config. -+// For more information about service configs, see: -+// https://github.com/grpc/grpc/blob/master/doc/service_config.md -+// For a simple example of usage, see: -+// examples/features/load_balancing/client/main.go -+func WithDefaultServiceConfig(s string) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.defaultServiceConfigRawJSON = &s -+ }) -+} -+ -+// WithDisableRetry returns a DialOption that disables retries, even if the -+// service config enables them. This does not impact transparent retries, which -+// will happen automatically if no data is written to the wire or if the RPC is -+// unprocessed by the remote server. -+func WithDisableRetry() DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.disableRetry = true -+ }) -+} -+ -+// WithMaxHeaderListSize returns a DialOption that specifies the maximum -+// (uncompressed) size of header list that the client is prepared to accept. -+func WithMaxHeaderListSize(s uint32) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.copts.MaxHeaderListSize = &s -+ }) -+} -+ -+// WithDisableHealthCheck disables the LB channel health checking for all -+// SubConns of this ClientConn. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func WithDisableHealthCheck() DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.disableHealthCheck = true -+ }) -+} -+ -+// withHealthCheckFunc replaces the default health check function with the -+// provided one. It makes tests easier to change the health check function. -+// -+// For testing purpose only. -+func withHealthCheckFunc(f internal.HealthChecker) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.healthCheckFunc = f -+ }) -+} -+ -+func defaultDialOptions() dialOptions { -+ return dialOptions{ -+ healthCheckFunc: internal.HealthCheckFunc, -+ copts: transport.ConnectOptions{ -+ WriteBufferSize: defaultWriteBufSize, -+ ReadBufferSize: defaultReadBufSize, -+ UseProxy: true, -+ }, -+ recvBufferPool: nopBufferPool{}, -+ } -+} -+ -+// withGetMinConnectDeadline specifies the function that clientconn uses to -+// get minConnectDeadline. This can be used to make connection attempts happen -+// faster/slower. -+// -+// For testing purpose only. -+func withMinConnectDeadline(f func() time.Duration) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.minConnectTimeout = f -+ }) -+} -+ -+// WithResolvers allows a list of resolver implementations to be registered -+// locally with the ClientConn without needing to be globally registered via -+// resolver.Register. They will be matched against the scheme used for the -+// current Dial only, and will take precedence over the global registry. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func WithResolvers(rs ...resolver.Builder) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.resolvers = append(o.resolvers, rs...) -+ }) -+} -+ -+// WithIdleTimeout returns a DialOption that configures an idle timeout for the -+// channel. If the channel is idle for the configured timeout, i.e there are no -+// ongoing RPCs and no new RPCs are initiated, the channel will enter idle mode -+// and as a result the name resolver and load balancer will be shut down. The -+// channel will exit idle mode when the Connect() method is called or when an -+// RPC is initiated. -+// -+// By default this feature is disabled, which can also be explicitly configured -+// by passing zero to this function. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func WithIdleTimeout(d time.Duration) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.idleTimeout = d -+ }) -+} -+ -+// WithRecvBufferPool returns a DialOption that configures the ClientConn -+// to use the provided shared buffer pool for parsing incoming messages. Depending -+// on the application's workload, this could result in reduced memory allocation. -+// -+// If you are unsure about how to implement a memory pool but want to utilize one, -+// begin with grpc.NewSharedBufferPool. -+// -+// Note: The shared buffer pool feature will not be active if any of the following -+// options are used: WithStatsHandler, EnableTracing, or binary logging. In such -+// cases, the shared buffer pool will be ignored. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func WithRecvBufferPool(bufferPool SharedBufferPool) DialOption { -+ return newFuncDialOption(func(o *dialOptions) { -+ o.recvBufferPool = bufferPool -+ }) -+} -diff --git a/vendor/google.golang.org/grpc/doc.go b/vendor/google.golang.org/grpc/doc.go -new file mode 100755 -index 0000000..0022859 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/doc.go -@@ -0,0 +1,26 @@ -+/* -+ * -+ * Copyright 2015 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+//go:generate ./regenerate.sh -+ -+/* -+Package grpc implements an RPC system called gRPC. -+ -+See grpc.io for more information about gRPC. -+*/ -+package grpc // import "google.golang.org/grpc" -diff --git a/vendor/google.golang.org/grpc/encoding/encoding.go b/vendor/google.golang.org/grpc/encoding/encoding.go -new file mode 100755 -index 0000000..07a5861 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/encoding/encoding.go -@@ -0,0 +1,135 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package encoding defines the interface for the compressor and codec, and -+// functions to register and retrieve compressors and codecs. -+// -+// # Experimental -+// -+// Notice: This package is EXPERIMENTAL and may be changed or removed in a -+// later release. -+package encoding -+ -+import ( -+ "io" -+ "strings" -+ -+ "google.golang.org/grpc/internal/grpcutil" -+) -+ -+// Identity specifies the optional encoding for uncompressed streams. -+// It is intended for grpc internal use only. -+const Identity = "identity" -+ -+// Compressor is used for compressing and decompressing when sending or -+// receiving messages. -+type Compressor interface { -+ // Compress writes the data written to wc to w after compressing it. If an -+ // error occurs while initializing the compressor, that error is returned -+ // instead. -+ Compress(w io.Writer) (io.WriteCloser, error) -+ // Decompress reads data from r, decompresses it, and provides the -+ // uncompressed data via the returned io.Reader. If an error occurs while -+ // initializing the decompressor, that error is returned instead. -+ Decompress(r io.Reader) (io.Reader, error) -+ // Name is the name of the compression codec and is used to set the content -+ // coding header. The result must be static; the result cannot change -+ // between calls. -+ Name() string -+ // If a Compressor implements -+ // DecompressedSize(compressedBytes []byte) int, gRPC will call it -+ // to determine the size of the buffer allocated for the result of decompression. -+ // Return -1 to indicate unknown size. -+ // -+ // Experimental -+ // -+ // Notice: This API is EXPERIMENTAL and may be changed or removed in a -+ // later release. -+} -+ -+var registeredCompressor = make(map[string]Compressor) -+ -+// RegisterCompressor registers the compressor with gRPC by its name. It can -+// be activated when sending an RPC via grpc.UseCompressor(). It will be -+// automatically accessed when receiving a message based on the content coding -+// header. Servers also use it to send a response with the same encoding as -+// the request. -+// -+// NOTE: this function must only be called during initialization time (i.e. in -+// an init() function), and is not thread-safe. If multiple Compressors are -+// registered with the same name, the one registered last will take effect. -+func RegisterCompressor(c Compressor) { -+ registeredCompressor[c.Name()] = c -+ if !grpcutil.IsCompressorNameRegistered(c.Name()) { -+ grpcutil.RegisteredCompressorNames = append(grpcutil.RegisteredCompressorNames, c.Name()) -+ } -+} -+ -+// GetCompressor returns Compressor for the given compressor name. -+func GetCompressor(name string) Compressor { -+ return registeredCompressor[name] -+} -+ -+// Codec defines the interface gRPC uses to encode and decode messages. Note -+// that implementations of this interface must be thread safe; a Codec's -+// methods can be called from concurrent goroutines. -+type Codec interface { -+ // Marshal returns the wire format of v. -+ Marshal(v interface{}) ([]byte, error) -+ // Unmarshal parses the wire format into v. -+ Unmarshal(data []byte, v interface{}) error -+ // Name returns the name of the Codec implementation. The returned string -+ // will be used as part of content type in transmission. The result must be -+ // static; the result cannot change between calls. -+ Name() string -+} -+ -+var registeredCodecs = make(map[string]Codec) -+ -+// RegisterCodec registers the provided Codec for use with all gRPC clients and -+// servers. -+// -+// The Codec will be stored and looked up by result of its Name() method, which -+// should match the content-subtype of the encoding handled by the Codec. This -+// is case-insensitive, and is stored and looked up as lowercase. If the -+// result of calling Name() is an empty string, RegisterCodec will panic. See -+// Content-Type on -+// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for -+// more details. -+// -+// NOTE: this function must only be called during initialization time (i.e. in -+// an init() function), and is not thread-safe. If multiple Codecs are -+// registered with the same name, the one registered last will take effect. -+func RegisterCodec(codec Codec) { -+ if codec == nil { -+ panic("cannot register a nil Codec") -+ } -+ if codec.Name() == "" { -+ panic("cannot register Codec with empty string result for Name()") -+ } -+ contentSubtype := strings.ToLower(codec.Name()) -+ registeredCodecs[contentSubtype] = codec -+} -+ -+// GetCodec gets a registered Codec by content-subtype, or nil if no Codec is -+// registered for the content-subtype. -+// -+// The content-subtype is expected to be lowercase. -+func GetCodec(contentSubtype string) Codec { -+ return registeredCodecs[contentSubtype] -+} -diff --git a/vendor/google.golang.org/grpc/encoding/proto/proto.go b/vendor/google.golang.org/grpc/encoding/proto/proto.go -new file mode 100755 -index 0000000..3009b35 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/encoding/proto/proto.go -@@ -0,0 +1,58 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package proto defines the protobuf codec. Importing this package will -+// register the codec. -+package proto -+ -+import ( -+ "fmt" -+ -+ "github.com/golang/protobuf/proto" -+ "google.golang.org/grpc/encoding" -+) -+ -+// Name is the name registered for the proto compressor. -+const Name = "proto" -+ -+func init() { -+ encoding.RegisterCodec(codec{}) -+} -+ -+// codec is a Codec implementation with protobuf. It is the default codec for gRPC. -+type codec struct{} -+ -+func (codec) Marshal(v interface{}) ([]byte, error) { -+ vv, ok := v.(proto.Message) -+ if !ok { -+ return nil, fmt.Errorf("failed to marshal, message is %T, want proto.Message", v) -+ } -+ return proto.Marshal(vv) -+} -+ -+func (codec) Unmarshal(data []byte, v interface{}) error { -+ vv, ok := v.(proto.Message) -+ if !ok { -+ return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v) -+ } -+ return proto.Unmarshal(data, vv) -+} -+ -+func (codec) Name() string { -+ return Name -+} -diff --git a/vendor/google.golang.org/grpc/grpclog/component.go b/vendor/google.golang.org/grpc/grpclog/component.go -new file mode 100755 -index 0000000..8358dd6 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/grpclog/component.go -@@ -0,0 +1,117 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpclog -+ -+import ( -+ "fmt" -+ -+ "google.golang.org/grpc/internal/grpclog" -+) -+ -+// componentData records the settings for a component. -+type componentData struct { -+ name string -+} -+ -+var cache = map[string]*componentData{} -+ -+func (c *componentData) InfoDepth(depth int, args ...interface{}) { -+ args = append([]interface{}{"[" + string(c.name) + "]"}, args...) -+ grpclog.InfoDepth(depth+1, args...) -+} -+ -+func (c *componentData) WarningDepth(depth int, args ...interface{}) { -+ args = append([]interface{}{"[" + string(c.name) + "]"}, args...) -+ grpclog.WarningDepth(depth+1, args...) -+} -+ -+func (c *componentData) ErrorDepth(depth int, args ...interface{}) { -+ args = append([]interface{}{"[" + string(c.name) + "]"}, args...) -+ grpclog.ErrorDepth(depth+1, args...) -+} -+ -+func (c *componentData) FatalDepth(depth int, args ...interface{}) { -+ args = append([]interface{}{"[" + string(c.name) + "]"}, args...) -+ grpclog.FatalDepth(depth+1, args...) -+} -+ -+func (c *componentData) Info(args ...interface{}) { -+ c.InfoDepth(1, args...) -+} -+ -+func (c *componentData) Warning(args ...interface{}) { -+ c.WarningDepth(1, args...) -+} -+ -+func (c *componentData) Error(args ...interface{}) { -+ c.ErrorDepth(1, args...) -+} -+ -+func (c *componentData) Fatal(args ...interface{}) { -+ c.FatalDepth(1, args...) -+} -+ -+func (c *componentData) Infof(format string, args ...interface{}) { -+ c.InfoDepth(1, fmt.Sprintf(format, args...)) -+} -+ -+func (c *componentData) Warningf(format string, args ...interface{}) { -+ c.WarningDepth(1, fmt.Sprintf(format, args...)) -+} -+ -+func (c *componentData) Errorf(format string, args ...interface{}) { -+ c.ErrorDepth(1, fmt.Sprintf(format, args...)) -+} -+ -+func (c *componentData) Fatalf(format string, args ...interface{}) { -+ c.FatalDepth(1, fmt.Sprintf(format, args...)) -+} -+ -+func (c *componentData) Infoln(args ...interface{}) { -+ c.InfoDepth(1, args...) -+} -+ -+func (c *componentData) Warningln(args ...interface{}) { -+ c.WarningDepth(1, args...) -+} -+ -+func (c *componentData) Errorln(args ...interface{}) { -+ c.ErrorDepth(1, args...) -+} -+ -+func (c *componentData) Fatalln(args ...interface{}) { -+ c.FatalDepth(1, args...) -+} -+ -+func (c *componentData) V(l int) bool { -+ return V(l) -+} -+ -+// Component creates a new component and returns it for logging. If a component -+// with the name already exists, nothing will be created and it will be -+// returned. SetLoggerV2 will panic if it is called with a logger created by -+// Component. -+func Component(componentName string) DepthLoggerV2 { -+ if cData, ok := cache[componentName]; ok { -+ return cData -+ } -+ c := &componentData{componentName} -+ cache[componentName] = c -+ return c -+} -diff --git a/vendor/google.golang.org/grpc/grpclog/grpclog.go b/vendor/google.golang.org/grpc/grpclog/grpclog.go -new file mode 100755 -index 0000000..c8bb2be ---- /dev/null -+++ b/vendor/google.golang.org/grpc/grpclog/grpclog.go -@@ -0,0 +1,132 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package grpclog defines logging for grpc. -+// -+// All logs in transport and grpclb packages only go to verbose level 2. -+// All logs in other packages in grpc are logged in spite of the verbosity level. -+// -+// In the default logger, -+// severity level can be set by environment variable GRPC_GO_LOG_SEVERITY_LEVEL, -+// verbosity level can be set by GRPC_GO_LOG_VERBOSITY_LEVEL. -+package grpclog // import "google.golang.org/grpc/grpclog" -+ -+import ( -+ "os" -+ -+ "google.golang.org/grpc/internal/grpclog" -+) -+ -+func init() { -+ SetLoggerV2(newLoggerV2()) -+} -+ -+// V reports whether verbosity level l is at least the requested verbose level. -+func V(l int) bool { -+ return grpclog.Logger.V(l) -+} -+ -+// Info logs to the INFO log. -+func Info(args ...interface{}) { -+ grpclog.Logger.Info(args...) -+} -+ -+// Infof logs to the INFO log. Arguments are handled in the manner of fmt.Printf. -+func Infof(format string, args ...interface{}) { -+ grpclog.Logger.Infof(format, args...) -+} -+ -+// Infoln logs to the INFO log. Arguments are handled in the manner of fmt.Println. -+func Infoln(args ...interface{}) { -+ grpclog.Logger.Infoln(args...) -+} -+ -+// Warning logs to the WARNING log. -+func Warning(args ...interface{}) { -+ grpclog.Logger.Warning(args...) -+} -+ -+// Warningf logs to the WARNING log. Arguments are handled in the manner of fmt.Printf. -+func Warningf(format string, args ...interface{}) { -+ grpclog.Logger.Warningf(format, args...) -+} -+ -+// Warningln logs to the WARNING log. Arguments are handled in the manner of fmt.Println. -+func Warningln(args ...interface{}) { -+ grpclog.Logger.Warningln(args...) -+} -+ -+// Error logs to the ERROR log. -+func Error(args ...interface{}) { -+ grpclog.Logger.Error(args...) -+} -+ -+// Errorf logs to the ERROR log. Arguments are handled in the manner of fmt.Printf. -+func Errorf(format string, args ...interface{}) { -+ grpclog.Logger.Errorf(format, args...) -+} -+ -+// Errorln logs to the ERROR log. Arguments are handled in the manner of fmt.Println. -+func Errorln(args ...interface{}) { -+ grpclog.Logger.Errorln(args...) -+} -+ -+// Fatal logs to the FATAL log. Arguments are handled in the manner of fmt.Print. -+// It calls os.Exit() with exit code 1. -+func Fatal(args ...interface{}) { -+ grpclog.Logger.Fatal(args...) -+ // Make sure fatal logs will exit. -+ os.Exit(1) -+} -+ -+// Fatalf logs to the FATAL log. Arguments are handled in the manner of fmt.Printf. -+// It calls os.Exit() with exit code 1. -+func Fatalf(format string, args ...interface{}) { -+ grpclog.Logger.Fatalf(format, args...) -+ // Make sure fatal logs will exit. -+ os.Exit(1) -+} -+ -+// Fatalln logs to the FATAL log. Arguments are handled in the manner of fmt.Println. -+// It calle os.Exit()) with exit code 1. -+func Fatalln(args ...interface{}) { -+ grpclog.Logger.Fatalln(args...) -+ // Make sure fatal logs will exit. -+ os.Exit(1) -+} -+ -+// Print prints to the logger. Arguments are handled in the manner of fmt.Print. -+// -+// Deprecated: use Info. -+func Print(args ...interface{}) { -+ grpclog.Logger.Info(args...) -+} -+ -+// Printf prints to the logger. Arguments are handled in the manner of fmt.Printf. -+// -+// Deprecated: use Infof. -+func Printf(format string, args ...interface{}) { -+ grpclog.Logger.Infof(format, args...) -+} -+ -+// Println prints to the logger. Arguments are handled in the manner of fmt.Println. -+// -+// Deprecated: use Infoln. -+func Println(args ...interface{}) { -+ grpclog.Logger.Infoln(args...) -+} -diff --git a/vendor/google.golang.org/grpc/grpclog/logger.go b/vendor/google.golang.org/grpc/grpclog/logger.go -new file mode 100755 -index 0000000..ef06a48 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/grpclog/logger.go -@@ -0,0 +1,87 @@ -+/* -+ * -+ * Copyright 2015 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpclog -+ -+import "google.golang.org/grpc/internal/grpclog" -+ -+// Logger mimics golang's standard Logger as an interface. -+// -+// Deprecated: use LoggerV2. -+type Logger interface { -+ Fatal(args ...interface{}) -+ Fatalf(format string, args ...interface{}) -+ Fatalln(args ...interface{}) -+ Print(args ...interface{}) -+ Printf(format string, args ...interface{}) -+ Println(args ...interface{}) -+} -+ -+// SetLogger sets the logger that is used in grpc. Call only from -+// init() functions. -+// -+// Deprecated: use SetLoggerV2. -+func SetLogger(l Logger) { -+ grpclog.Logger = &loggerWrapper{Logger: l} -+} -+ -+// loggerWrapper wraps Logger into a LoggerV2. -+type loggerWrapper struct { -+ Logger -+} -+ -+func (g *loggerWrapper) Info(args ...interface{}) { -+ g.Logger.Print(args...) -+} -+ -+func (g *loggerWrapper) Infoln(args ...interface{}) { -+ g.Logger.Println(args...) -+} -+ -+func (g *loggerWrapper) Infof(format string, args ...interface{}) { -+ g.Logger.Printf(format, args...) -+} -+ -+func (g *loggerWrapper) Warning(args ...interface{}) { -+ g.Logger.Print(args...) -+} -+ -+func (g *loggerWrapper) Warningln(args ...interface{}) { -+ g.Logger.Println(args...) -+} -+ -+func (g *loggerWrapper) Warningf(format string, args ...interface{}) { -+ g.Logger.Printf(format, args...) -+} -+ -+func (g *loggerWrapper) Error(args ...interface{}) { -+ g.Logger.Print(args...) -+} -+ -+func (g *loggerWrapper) Errorln(args ...interface{}) { -+ g.Logger.Println(args...) -+} -+ -+func (g *loggerWrapper) Errorf(format string, args ...interface{}) { -+ g.Logger.Printf(format, args...) -+} -+ -+func (g *loggerWrapper) V(l int) bool { -+ // Returns true for all verbose level. -+ return true -+} -diff --git a/vendor/google.golang.org/grpc/grpclog/loggerv2.go b/vendor/google.golang.org/grpc/grpclog/loggerv2.go -new file mode 100755 -index 0000000..5de66e4 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/grpclog/loggerv2.go -@@ -0,0 +1,258 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpclog -+ -+import ( -+ "encoding/json" -+ "fmt" -+ "io" -+ "log" -+ "os" -+ "strconv" -+ "strings" -+ -+ "google.golang.org/grpc/internal/grpclog" -+) -+ -+// LoggerV2 does underlying logging work for grpclog. -+type LoggerV2 interface { -+ // Info logs to INFO log. Arguments are handled in the manner of fmt.Print. -+ Info(args ...interface{}) -+ // Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println. -+ Infoln(args ...interface{}) -+ // Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf. -+ Infof(format string, args ...interface{}) -+ // Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print. -+ Warning(args ...interface{}) -+ // Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println. -+ Warningln(args ...interface{}) -+ // Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf. -+ Warningf(format string, args ...interface{}) -+ // Error logs to ERROR log. Arguments are handled in the manner of fmt.Print. -+ Error(args ...interface{}) -+ // Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println. -+ Errorln(args ...interface{}) -+ // Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. -+ Errorf(format string, args ...interface{}) -+ // Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print. -+ // gRPC ensures that all Fatal logs will exit with os.Exit(1). -+ // Implementations may also call os.Exit() with a non-zero exit code. -+ Fatal(args ...interface{}) -+ // Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println. -+ // gRPC ensures that all Fatal logs will exit with os.Exit(1). -+ // Implementations may also call os.Exit() with a non-zero exit code. -+ Fatalln(args ...interface{}) -+ // Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. -+ // gRPC ensures that all Fatal logs will exit with os.Exit(1). -+ // Implementations may also call os.Exit() with a non-zero exit code. -+ Fatalf(format string, args ...interface{}) -+ // V reports whether verbosity level l is at least the requested verbose level. -+ V(l int) bool -+} -+ -+// SetLoggerV2 sets logger that is used in grpc to a V2 logger. -+// Not mutex-protected, should be called before any gRPC functions. -+func SetLoggerV2(l LoggerV2) { -+ if _, ok := l.(*componentData); ok { -+ panic("cannot use component logger as grpclog logger") -+ } -+ grpclog.Logger = l -+ grpclog.DepthLogger, _ = l.(grpclog.DepthLoggerV2) -+} -+ -+const ( -+ // infoLog indicates Info severity. -+ infoLog int = iota -+ // warningLog indicates Warning severity. -+ warningLog -+ // errorLog indicates Error severity. -+ errorLog -+ // fatalLog indicates Fatal severity. -+ fatalLog -+) -+ -+// severityName contains the string representation of each severity. -+var severityName = []string{ -+ infoLog: "INFO", -+ warningLog: "WARNING", -+ errorLog: "ERROR", -+ fatalLog: "FATAL", -+} -+ -+// loggerT is the default logger used by grpclog. -+type loggerT struct { -+ m []*log.Logger -+ v int -+ jsonFormat bool -+} -+ -+// NewLoggerV2 creates a loggerV2 with the provided writers. -+// Fatal logs will be written to errorW, warningW, infoW, followed by exit(1). -+// Error logs will be written to errorW, warningW and infoW. -+// Warning logs will be written to warningW and infoW. -+// Info logs will be written to infoW. -+func NewLoggerV2(infoW, warningW, errorW io.Writer) LoggerV2 { -+ return newLoggerV2WithConfig(infoW, warningW, errorW, loggerV2Config{}) -+} -+ -+// NewLoggerV2WithVerbosity creates a loggerV2 with the provided writers and -+// verbosity level. -+func NewLoggerV2WithVerbosity(infoW, warningW, errorW io.Writer, v int) LoggerV2 { -+ return newLoggerV2WithConfig(infoW, warningW, errorW, loggerV2Config{verbose: v}) -+} -+ -+type loggerV2Config struct { -+ verbose int -+ jsonFormat bool -+} -+ -+func newLoggerV2WithConfig(infoW, warningW, errorW io.Writer, c loggerV2Config) LoggerV2 { -+ var m []*log.Logger -+ flag := log.LstdFlags -+ if c.jsonFormat { -+ flag = 0 -+ } -+ m = append(m, log.New(infoW, "", flag)) -+ m = append(m, log.New(io.MultiWriter(infoW, warningW), "", flag)) -+ ew := io.MultiWriter(infoW, warningW, errorW) // ew will be used for error and fatal. -+ m = append(m, log.New(ew, "", flag)) -+ m = append(m, log.New(ew, "", flag)) -+ return &loggerT{m: m, v: c.verbose, jsonFormat: c.jsonFormat} -+} -+ -+// newLoggerV2 creates a loggerV2 to be used as default logger. -+// All logs are written to stderr. -+func newLoggerV2() LoggerV2 { -+ errorW := io.Discard -+ warningW := io.Discard -+ infoW := io.Discard -+ -+ logLevel := os.Getenv("GRPC_GO_LOG_SEVERITY_LEVEL") -+ switch logLevel { -+ case "", "ERROR", "error": // If env is unset, set level to ERROR. -+ errorW = os.Stderr -+ case "WARNING", "warning": -+ warningW = os.Stderr -+ case "INFO", "info": -+ infoW = os.Stderr -+ } -+ -+ var v int -+ vLevel := os.Getenv("GRPC_GO_LOG_VERBOSITY_LEVEL") -+ if vl, err := strconv.Atoi(vLevel); err == nil { -+ v = vl -+ } -+ -+ jsonFormat := strings.EqualFold(os.Getenv("GRPC_GO_LOG_FORMATTER"), "json") -+ -+ return newLoggerV2WithConfig(infoW, warningW, errorW, loggerV2Config{ -+ verbose: v, -+ jsonFormat: jsonFormat, -+ }) -+} -+ -+func (g *loggerT) output(severity int, s string) { -+ sevStr := severityName[severity] -+ if !g.jsonFormat { -+ g.m[severity].Output(2, fmt.Sprintf("%v: %v", sevStr, s)) -+ return -+ } -+ // TODO: we can also include the logging component, but that needs more -+ // (API) changes. -+ b, _ := json.Marshal(map[string]string{ -+ "severity": sevStr, -+ "message": s, -+ }) -+ g.m[severity].Output(2, string(b)) -+} -+ -+func (g *loggerT) Info(args ...interface{}) { -+ g.output(infoLog, fmt.Sprint(args...)) -+} -+ -+func (g *loggerT) Infoln(args ...interface{}) { -+ g.output(infoLog, fmt.Sprintln(args...)) -+} -+ -+func (g *loggerT) Infof(format string, args ...interface{}) { -+ g.output(infoLog, fmt.Sprintf(format, args...)) -+} -+ -+func (g *loggerT) Warning(args ...interface{}) { -+ g.output(warningLog, fmt.Sprint(args...)) -+} -+ -+func (g *loggerT) Warningln(args ...interface{}) { -+ g.output(warningLog, fmt.Sprintln(args...)) -+} -+ -+func (g *loggerT) Warningf(format string, args ...interface{}) { -+ g.output(warningLog, fmt.Sprintf(format, args...)) -+} -+ -+func (g *loggerT) Error(args ...interface{}) { -+ g.output(errorLog, fmt.Sprint(args...)) -+} -+ -+func (g *loggerT) Errorln(args ...interface{}) { -+ g.output(errorLog, fmt.Sprintln(args...)) -+} -+ -+func (g *loggerT) Errorf(format string, args ...interface{}) { -+ g.output(errorLog, fmt.Sprintf(format, args...)) -+} -+ -+func (g *loggerT) Fatal(args ...interface{}) { -+ g.output(fatalLog, fmt.Sprint(args...)) -+ os.Exit(1) -+} -+ -+func (g *loggerT) Fatalln(args ...interface{}) { -+ g.output(fatalLog, fmt.Sprintln(args...)) -+ os.Exit(1) -+} -+ -+func (g *loggerT) Fatalf(format string, args ...interface{}) { -+ g.output(fatalLog, fmt.Sprintf(format, args...)) -+ os.Exit(1) -+} -+ -+func (g *loggerT) V(l int) bool { -+ return l <= g.v -+} -+ -+// DepthLoggerV2 logs at a specified call frame. If a LoggerV2 also implements -+// DepthLoggerV2, the below functions will be called with the appropriate stack -+// depth set for trivial functions the logger may ignore. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type DepthLoggerV2 interface { -+ LoggerV2 -+ // InfoDepth logs to INFO log at the specified depth. Arguments are handled in the manner of fmt.Println. -+ InfoDepth(depth int, args ...interface{}) -+ // WarningDepth logs to WARNING log at the specified depth. Arguments are handled in the manner of fmt.Println. -+ WarningDepth(depth int, args ...interface{}) -+ // ErrorDepth logs to ERROR log at the specified depth. Arguments are handled in the manner of fmt.Println. -+ ErrorDepth(depth int, args ...interface{}) -+ // FatalDepth logs to FATAL log at the specified depth. Arguments are handled in the manner of fmt.Println. -+ FatalDepth(depth int, args ...interface{}) -+} -diff --git a/vendor/google.golang.org/grpc/idle.go b/vendor/google.golang.org/grpc/idle.go -new file mode 100755 -index 0000000..dc3dc72 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/idle.go -@@ -0,0 +1,287 @@ -+/* -+ * -+ * Copyright 2023 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "fmt" -+ "math" -+ "sync" -+ "sync/atomic" -+ "time" -+) -+ -+// For overriding in unit tests. -+var timeAfterFunc = func(d time.Duration, f func()) *time.Timer { -+ return time.AfterFunc(d, f) -+} -+ -+// idlenessEnforcer is the functionality provided by grpc.ClientConn to enter -+// and exit from idle mode. -+type idlenessEnforcer interface { -+ exitIdleMode() error -+ enterIdleMode() error -+} -+ -+// idlenessManager defines the functionality required to track RPC activity on a -+// channel. -+type idlenessManager interface { -+ onCallBegin() error -+ onCallEnd() -+ close() -+} -+ -+type noopIdlenessManager struct{} -+ -+func (noopIdlenessManager) onCallBegin() error { return nil } -+func (noopIdlenessManager) onCallEnd() {} -+func (noopIdlenessManager) close() {} -+ -+// idlenessManagerImpl implements the idlenessManager interface. It uses atomic -+// operations to synchronize access to shared state and a mutex to guarantee -+// mutual exclusion in a critical section. -+type idlenessManagerImpl struct { -+ // State accessed atomically. -+ lastCallEndTime int64 // Unix timestamp in nanos; time when the most recent RPC completed. -+ activeCallsCount int32 // Count of active RPCs; -math.MaxInt32 means channel is idle or is trying to get there. -+ activeSinceLastTimerCheck int32 // Boolean; True if there was an RPC since the last timer callback. -+ closed int32 // Boolean; True when the manager is closed. -+ -+ // Can be accessed without atomics or mutex since these are set at creation -+ // time and read-only after that. -+ enforcer idlenessEnforcer // Functionality provided by grpc.ClientConn. -+ timeout int64 // Idle timeout duration nanos stored as an int64. -+ -+ // idleMu is used to guarantee mutual exclusion in two scenarios: -+ // - Opposing intentions: -+ // - a: Idle timeout has fired and handleIdleTimeout() is trying to put -+ // the channel in idle mode because the channel has been inactive. -+ // - b: At the same time an RPC is made on the channel, and onCallBegin() -+ // is trying to prevent the channel from going idle. -+ // - Competing intentions: -+ // - The channel is in idle mode and there are multiple RPCs starting at -+ // the same time, all trying to move the channel out of idle. Only one -+ // of them should succeed in doing so, while the other RPCs should -+ // piggyback on the first one and be successfully handled. -+ idleMu sync.RWMutex -+ actuallyIdle bool -+ timer *time.Timer -+} -+ -+// newIdlenessManager creates a new idleness manager implementation for the -+// given idle timeout. -+func newIdlenessManager(enforcer idlenessEnforcer, idleTimeout time.Duration) idlenessManager { -+ if idleTimeout == 0 { -+ return noopIdlenessManager{} -+ } -+ -+ i := &idlenessManagerImpl{ -+ enforcer: enforcer, -+ timeout: int64(idleTimeout), -+ } -+ i.timer = timeAfterFunc(idleTimeout, i.handleIdleTimeout) -+ return i -+} -+ -+// resetIdleTimer resets the idle timer to the given duration. This method -+// should only be called from the timer callback. -+func (i *idlenessManagerImpl) resetIdleTimer(d time.Duration) { -+ i.idleMu.Lock() -+ defer i.idleMu.Unlock() -+ -+ if i.timer == nil { -+ // Only close sets timer to nil. We are done. -+ return -+ } -+ -+ // It is safe to ignore the return value from Reset() because this method is -+ // only ever called from the timer callback, which means the timer has -+ // already fired. -+ i.timer.Reset(d) -+} -+ -+// handleIdleTimeout is the timer callback that is invoked upon expiry of the -+// configured idle timeout. The channel is considered inactive if there are no -+// ongoing calls and no RPC activity since the last time the timer fired. -+func (i *idlenessManagerImpl) handleIdleTimeout() { -+ if i.isClosed() { -+ return -+ } -+ -+ if atomic.LoadInt32(&i.activeCallsCount) > 0 { -+ i.resetIdleTimer(time.Duration(i.timeout)) -+ return -+ } -+ -+ // There has been activity on the channel since we last got here. Reset the -+ // timer and return. -+ if atomic.LoadInt32(&i.activeSinceLastTimerCheck) == 1 { -+ // Set the timer to fire after a duration of idle timeout, calculated -+ // from the time the most recent RPC completed. -+ atomic.StoreInt32(&i.activeSinceLastTimerCheck, 0) -+ i.resetIdleTimer(time.Duration(atomic.LoadInt64(&i.lastCallEndTime) + i.timeout - time.Now().UnixNano())) -+ return -+ } -+ -+ // This CAS operation is extremely likely to succeed given that there has -+ // been no activity since the last time we were here. Setting the -+ // activeCallsCount to -math.MaxInt32 indicates to onCallBegin() that the -+ // channel is either in idle mode or is trying to get there. -+ if !atomic.CompareAndSwapInt32(&i.activeCallsCount, 0, -math.MaxInt32) { -+ // This CAS operation can fail if an RPC started after we checked for -+ // activity at the top of this method, or one was ongoing from before -+ // the last time we were here. In both case, reset the timer and return. -+ i.resetIdleTimer(time.Duration(i.timeout)) -+ return -+ } -+ -+ // Now that we've set the active calls count to -math.MaxInt32, it's time to -+ // actually move to idle mode. -+ if i.tryEnterIdleMode() { -+ // Successfully entered idle mode. No timer needed until we exit idle. -+ return -+ } -+ -+ // Failed to enter idle mode due to a concurrent RPC that kept the channel -+ // active, or because of an error from the channel. Undo the attempt to -+ // enter idle, and reset the timer to try again later. -+ atomic.AddInt32(&i.activeCallsCount, math.MaxInt32) -+ i.resetIdleTimer(time.Duration(i.timeout)) -+} -+ -+// tryEnterIdleMode instructs the channel to enter idle mode. But before -+// that, it performs a last minute check to ensure that no new RPC has come in, -+// making the channel active. -+// -+// Return value indicates whether or not the channel moved to idle mode. -+// -+// Holds idleMu which ensures mutual exclusion with exitIdleMode. -+func (i *idlenessManagerImpl) tryEnterIdleMode() bool { -+ i.idleMu.Lock() -+ defer i.idleMu.Unlock() -+ -+ if atomic.LoadInt32(&i.activeCallsCount) != -math.MaxInt32 { -+ // We raced and lost to a new RPC. Very rare, but stop entering idle. -+ return false -+ } -+ if atomic.LoadInt32(&i.activeSinceLastTimerCheck) == 1 { -+ // An very short RPC could have come in (and also finished) after we -+ // checked for calls count and activity in handleIdleTimeout(), but -+ // before the CAS operation. So, we need to check for activity again. -+ return false -+ } -+ -+ // No new RPCs have come in since we last set the active calls count value -+ // -math.MaxInt32 in the timer callback. And since we have the lock, it is -+ // safe to enter idle mode now. -+ if err := i.enforcer.enterIdleMode(); err != nil { -+ logger.Errorf("Failed to enter idle mode: %v", err) -+ return false -+ } -+ -+ // Successfully entered idle mode. -+ i.actuallyIdle = true -+ return true -+} -+ -+// onCallBegin is invoked at the start of every RPC. -+func (i *idlenessManagerImpl) onCallBegin() error { -+ if i.isClosed() { -+ return nil -+ } -+ -+ if atomic.AddInt32(&i.activeCallsCount, 1) > 0 { -+ // Channel is not idle now. Set the activity bit and allow the call. -+ atomic.StoreInt32(&i.activeSinceLastTimerCheck, 1) -+ return nil -+ } -+ -+ // Channel is either in idle mode or is in the process of moving to idle -+ // mode. Attempt to exit idle mode to allow this RPC. -+ if err := i.exitIdleMode(); err != nil { -+ // Undo the increment to calls count, and return an error causing the -+ // RPC to fail. -+ atomic.AddInt32(&i.activeCallsCount, -1) -+ return err -+ } -+ -+ atomic.StoreInt32(&i.activeSinceLastTimerCheck, 1) -+ return nil -+} -+ -+// exitIdleMode instructs the channel to exit idle mode. -+// -+// Holds idleMu which ensures mutual exclusion with tryEnterIdleMode. -+func (i *idlenessManagerImpl) exitIdleMode() error { -+ i.idleMu.Lock() -+ defer i.idleMu.Unlock() -+ -+ if !i.actuallyIdle { -+ // This can happen in two scenarios: -+ // - handleIdleTimeout() set the calls count to -math.MaxInt32 and called -+ // tryEnterIdleMode(). But before the latter could grab the lock, an RPC -+ // came in and onCallBegin() noticed that the calls count is negative. -+ // - Channel is in idle mode, and multiple new RPCs come in at the same -+ // time, all of them notice a negative calls count in onCallBegin and get -+ // here. The first one to get the lock would got the channel to exit idle. -+ // -+ // Either way, nothing to do here. -+ return nil -+ } -+ -+ if err := i.enforcer.exitIdleMode(); err != nil { -+ return fmt.Errorf("channel failed to exit idle mode: %v", err) -+ } -+ -+ // Undo the idle entry process. This also respects any new RPC attempts. -+ atomic.AddInt32(&i.activeCallsCount, math.MaxInt32) -+ i.actuallyIdle = false -+ -+ // Start a new timer to fire after the configured idle timeout. -+ i.timer = timeAfterFunc(time.Duration(i.timeout), i.handleIdleTimeout) -+ return nil -+} -+ -+// onCallEnd is invoked at the end of every RPC. -+func (i *idlenessManagerImpl) onCallEnd() { -+ if i.isClosed() { -+ return -+ } -+ -+ // Record the time at which the most recent call finished. -+ atomic.StoreInt64(&i.lastCallEndTime, time.Now().UnixNano()) -+ -+ // Decrement the active calls count. This count can temporarily go negative -+ // when the timer callback is in the process of moving the channel to idle -+ // mode, but one or more RPCs come in and complete before the timer callback -+ // can get done with the process of moving to idle mode. -+ atomic.AddInt32(&i.activeCallsCount, -1) -+} -+ -+func (i *idlenessManagerImpl) isClosed() bool { -+ return atomic.LoadInt32(&i.closed) == 1 -+} -+ -+func (i *idlenessManagerImpl) close() { -+ atomic.StoreInt32(&i.closed, 1) -+ -+ i.idleMu.Lock() -+ i.timer.Stop() -+ i.timer = nil -+ i.idleMu.Unlock() -+} -diff --git a/vendor/google.golang.org/grpc/interceptor.go b/vendor/google.golang.org/grpc/interceptor.go -new file mode 100755 -index 0000000..bb96ef5 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/interceptor.go -@@ -0,0 +1,104 @@ -+/* -+ * -+ * Copyright 2016 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+) -+ -+// UnaryInvoker is called by UnaryClientInterceptor to complete RPCs. -+type UnaryInvoker func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error -+ -+// UnaryClientInterceptor intercepts the execution of a unary RPC on the client. -+// Unary interceptors can be specified as a DialOption, using -+// WithUnaryInterceptor() or WithChainUnaryInterceptor(), when creating a -+// ClientConn. When a unary interceptor(s) is set on a ClientConn, gRPC -+// delegates all unary RPC invocations to the interceptor, and it is the -+// responsibility of the interceptor to call invoker to complete the processing -+// of the RPC. -+// -+// method is the RPC name. req and reply are the corresponding request and -+// response messages. cc is the ClientConn on which the RPC was invoked. invoker -+// is the handler to complete the RPC and it is the responsibility of the -+// interceptor to call it. opts contain all applicable call options, including -+// defaults from the ClientConn as well as per-call options. -+// -+// The returned error must be compatible with the status package. -+type UnaryClientInterceptor func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error -+ -+// Streamer is called by StreamClientInterceptor to create a ClientStream. -+type Streamer func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) -+ -+// StreamClientInterceptor intercepts the creation of a ClientStream. Stream -+// interceptors can be specified as a DialOption, using WithStreamInterceptor() -+// or WithChainStreamInterceptor(), when creating a ClientConn. When a stream -+// interceptor(s) is set on the ClientConn, gRPC delegates all stream creations -+// to the interceptor, and it is the responsibility of the interceptor to call -+// streamer. -+// -+// desc contains a description of the stream. cc is the ClientConn on which the -+// RPC was invoked. streamer is the handler to create a ClientStream and it is -+// the responsibility of the interceptor to call it. opts contain all applicable -+// call options, including defaults from the ClientConn as well as per-call -+// options. -+// -+// StreamClientInterceptor may return a custom ClientStream to intercept all I/O -+// operations. The returned error must be compatible with the status package. -+type StreamClientInterceptor func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error) -+ -+// UnaryServerInfo consists of various information about a unary RPC on -+// server side. All per-rpc information may be mutated by the interceptor. -+type UnaryServerInfo struct { -+ // Server is the service implementation the user provides. This is read-only. -+ Server interface{} -+ // FullMethod is the full RPC method string, i.e., /package.service/method. -+ FullMethod string -+} -+ -+// UnaryHandler defines the handler invoked by UnaryServerInterceptor to complete the normal -+// execution of a unary RPC. -+// -+// If a UnaryHandler returns an error, it should either be produced by the -+// status package, or be one of the context errors. Otherwise, gRPC will use -+// codes.Unknown as the status code and err.Error() as the status message of the -+// RPC. -+type UnaryHandler func(ctx context.Context, req interface{}) (interface{}, error) -+ -+// UnaryServerInterceptor provides a hook to intercept the execution of a unary RPC on the server. info -+// contains all the information of this RPC the interceptor can operate on. And handler is the wrapper -+// of the service method implementation. It is the responsibility of the interceptor to invoke handler -+// to complete the RPC. -+type UnaryServerInterceptor func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (resp interface{}, err error) -+ -+// StreamServerInfo consists of various information about a streaming RPC on -+// server side. All per-rpc information may be mutated by the interceptor. -+type StreamServerInfo struct { -+ // FullMethod is the full RPC method string, i.e., /package.service/method. -+ FullMethod string -+ // IsClientStream indicates whether the RPC is a client streaming RPC. -+ IsClientStream bool -+ // IsServerStream indicates whether the RPC is a server streaming RPC. -+ IsServerStream bool -+} -+ -+// StreamServerInterceptor provides a hook to intercept the execution of a streaming RPC on the server. -+// info contains all the information of this RPC the interceptor can operate on. And handler is the -+// service method implementation. It is the responsibility of the interceptor to invoke handler to -+// complete the RPC. -+type StreamServerInterceptor func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error -diff --git a/vendor/google.golang.org/grpc/internal/backoff/backoff.go b/vendor/google.golang.org/grpc/internal/backoff/backoff.go -new file mode 100755 -index 0000000..5fc0ee3 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/backoff/backoff.go -@@ -0,0 +1,73 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package backoff implement the backoff strategy for gRPC. -+// -+// This is kept in internal until the gRPC project decides whether or not to -+// allow alternative backoff strategies. -+package backoff -+ -+import ( -+ "time" -+ -+ grpcbackoff "google.golang.org/grpc/backoff" -+ "google.golang.org/grpc/internal/grpcrand" -+) -+ -+// Strategy defines the methodology for backing off after a grpc connection -+// failure. -+type Strategy interface { -+ // Backoff returns the amount of time to wait before the next retry given -+ // the number of consecutive failures. -+ Backoff(retries int) time.Duration -+} -+ -+// DefaultExponential is an exponential backoff implementation using the -+// default values for all the configurable knobs defined in -+// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. -+var DefaultExponential = Exponential{Config: grpcbackoff.DefaultConfig} -+ -+// Exponential implements exponential backoff algorithm as defined in -+// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. -+type Exponential struct { -+ // Config contains all options to configure the backoff algorithm. -+ Config grpcbackoff.Config -+} -+ -+// Backoff returns the amount of time to wait before the next retry given the -+// number of retries. -+func (bc Exponential) Backoff(retries int) time.Duration { -+ if retries == 0 { -+ return bc.Config.BaseDelay -+ } -+ backoff, max := float64(bc.Config.BaseDelay), float64(bc.Config.MaxDelay) -+ for backoff < max && retries > 0 { -+ backoff *= bc.Config.Multiplier -+ retries-- -+ } -+ if backoff > max { -+ backoff = max -+ } -+ // Randomize backoff delays so that if a cluster of requests start at -+ // the same time, they won't operate in lockstep. -+ backoff *= 1 + bc.Config.Jitter*(grpcrand.Float64()*2-1) -+ if backoff < 0 { -+ return 0 -+ } -+ return time.Duration(backoff) -+} -diff --git a/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go b/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go -new file mode 100755 -index 0000000..08666f6 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go -@@ -0,0 +1,384 @@ -+/* -+ * -+ * Copyright 2022 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package gracefulswitch implements a graceful switch load balancer. -+package gracefulswitch -+ -+import ( -+ "errors" -+ "fmt" -+ "sync" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/balancer/base" -+ "google.golang.org/grpc/connectivity" -+ "google.golang.org/grpc/resolver" -+) -+ -+var errBalancerClosed = errors.New("gracefulSwitchBalancer is closed") -+var _ balancer.Balancer = (*Balancer)(nil) -+ -+// NewBalancer returns a graceful switch Balancer. -+func NewBalancer(cc balancer.ClientConn, opts balancer.BuildOptions) *Balancer { -+ return &Balancer{ -+ cc: cc, -+ bOpts: opts, -+ } -+} -+ -+// Balancer is a utility to gracefully switch from one balancer to -+// a new balancer. It implements the balancer.Balancer interface. -+type Balancer struct { -+ bOpts balancer.BuildOptions -+ cc balancer.ClientConn -+ -+ // mu protects the following fields and all fields within balancerCurrent -+ // and balancerPending. mu does not need to be held when calling into the -+ // child balancers, as all calls into these children happen only as a direct -+ // result of a call into the gracefulSwitchBalancer, which are also -+ // guaranteed to be synchronous. There is one exception: an UpdateState call -+ // from a child balancer when current and pending are populated can lead to -+ // calling Close() on the current. To prevent that racing with an -+ // UpdateSubConnState from the channel, we hold currentMu during Close and -+ // UpdateSubConnState calls. -+ mu sync.Mutex -+ balancerCurrent *balancerWrapper -+ balancerPending *balancerWrapper -+ closed bool // set to true when this balancer is closed -+ -+ // currentMu must be locked before mu. This mutex guards against this -+ // sequence of events: UpdateSubConnState() called, finds the -+ // balancerCurrent, gives up lock, updateState comes in, causes Close() on -+ // balancerCurrent before the UpdateSubConnState is called on the -+ // balancerCurrent. -+ currentMu sync.Mutex -+} -+ -+// swap swaps out the current lb with the pending lb and updates the ClientConn. -+// The caller must hold gsb.mu. -+func (gsb *Balancer) swap() { -+ gsb.cc.UpdateState(gsb.balancerPending.lastState) -+ cur := gsb.balancerCurrent -+ gsb.balancerCurrent = gsb.balancerPending -+ gsb.balancerPending = nil -+ go func() { -+ gsb.currentMu.Lock() -+ defer gsb.currentMu.Unlock() -+ cur.Close() -+ }() -+} -+ -+// Helper function that checks if the balancer passed in is current or pending. -+// The caller must hold gsb.mu. -+func (gsb *Balancer) balancerCurrentOrPending(bw *balancerWrapper) bool { -+ return bw == gsb.balancerCurrent || bw == gsb.balancerPending -+} -+ -+// SwitchTo initializes the graceful switch process, which completes based on -+// connectivity state changes on the current/pending balancer. Thus, the switch -+// process is not complete when this method returns. This method must be called -+// synchronously alongside the rest of the balancer.Balancer methods this -+// Graceful Switch Balancer implements. -+func (gsb *Balancer) SwitchTo(builder balancer.Builder) error { -+ gsb.mu.Lock() -+ if gsb.closed { -+ gsb.mu.Unlock() -+ return errBalancerClosed -+ } -+ bw := &balancerWrapper{ -+ gsb: gsb, -+ lastState: balancer.State{ -+ ConnectivityState: connectivity.Connecting, -+ Picker: base.NewErrPicker(balancer.ErrNoSubConnAvailable), -+ }, -+ subconns: make(map[balancer.SubConn]bool), -+ } -+ balToClose := gsb.balancerPending // nil if there is no pending balancer -+ if gsb.balancerCurrent == nil { -+ gsb.balancerCurrent = bw -+ } else { -+ gsb.balancerPending = bw -+ } -+ gsb.mu.Unlock() -+ balToClose.Close() -+ // This function takes a builder instead of a balancer because builder.Build -+ // can call back inline, and this utility needs to handle the callbacks. -+ newBalancer := builder.Build(bw, gsb.bOpts) -+ if newBalancer == nil { -+ // This is illegal and should never happen; we clear the balancerWrapper -+ // we were constructing if it happens to avoid a potential panic. -+ gsb.mu.Lock() -+ if gsb.balancerPending != nil { -+ gsb.balancerPending = nil -+ } else { -+ gsb.balancerCurrent = nil -+ } -+ gsb.mu.Unlock() -+ return balancer.ErrBadResolverState -+ } -+ -+ // This write doesn't need to take gsb.mu because this field never gets read -+ // or written to on any calls from the current or pending. Calls from grpc -+ // to this balancer are guaranteed to be called synchronously, so this -+ // bw.Balancer field will never be forwarded to until this SwitchTo() -+ // function returns. -+ bw.Balancer = newBalancer -+ return nil -+} -+ -+// Returns nil if the graceful switch balancer is closed. -+func (gsb *Balancer) latestBalancer() *balancerWrapper { -+ gsb.mu.Lock() -+ defer gsb.mu.Unlock() -+ if gsb.balancerPending != nil { -+ return gsb.balancerPending -+ } -+ return gsb.balancerCurrent -+} -+ -+// UpdateClientConnState forwards the update to the latest balancer created. -+func (gsb *Balancer) UpdateClientConnState(state balancer.ClientConnState) error { -+ // The resolver data is only relevant to the most recent LB Policy. -+ balToUpdate := gsb.latestBalancer() -+ if balToUpdate == nil { -+ return errBalancerClosed -+ } -+ // Perform this call without gsb.mu to prevent deadlocks if the child calls -+ // back into the channel. The latest balancer can never be closed during a -+ // call from the channel, even without gsb.mu held. -+ return balToUpdate.UpdateClientConnState(state) -+} -+ -+// ResolverError forwards the error to the latest balancer created. -+func (gsb *Balancer) ResolverError(err error) { -+ // The resolver data is only relevant to the most recent LB Policy. -+ balToUpdate := gsb.latestBalancer() -+ if balToUpdate == nil { -+ return -+ } -+ // Perform this call without gsb.mu to prevent deadlocks if the child calls -+ // back into the channel. The latest balancer can never be closed during a -+ // call from the channel, even without gsb.mu held. -+ balToUpdate.ResolverError(err) -+} -+ -+// ExitIdle forwards the call to the latest balancer created. -+// -+// If the latest balancer does not support ExitIdle, the subConns are -+// re-connected to manually. -+func (gsb *Balancer) ExitIdle() { -+ balToUpdate := gsb.latestBalancer() -+ if balToUpdate == nil { -+ return -+ } -+ // There is no need to protect this read with a mutex, as the write to the -+ // Balancer field happens in SwitchTo, which completes before this can be -+ // called. -+ if ei, ok := balToUpdate.Balancer.(balancer.ExitIdler); ok { -+ ei.ExitIdle() -+ return -+ } -+ gsb.mu.Lock() -+ defer gsb.mu.Unlock() -+ for sc := range balToUpdate.subconns { -+ sc.Connect() -+ } -+} -+ -+// UpdateSubConnState forwards the update to the appropriate child. -+func (gsb *Balancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { -+ gsb.currentMu.Lock() -+ defer gsb.currentMu.Unlock() -+ gsb.mu.Lock() -+ // Forward update to the appropriate child. Even if there is a pending -+ // balancer, the current balancer should continue to get SubConn updates to -+ // maintain the proper state while the pending is still connecting. -+ var balToUpdate *balancerWrapper -+ if gsb.balancerCurrent != nil && gsb.balancerCurrent.subconns[sc] { -+ balToUpdate = gsb.balancerCurrent -+ } else if gsb.balancerPending != nil && gsb.balancerPending.subconns[sc] { -+ balToUpdate = gsb.balancerPending -+ } -+ gsb.mu.Unlock() -+ if balToUpdate == nil { -+ // SubConn belonged to a stale lb policy that has not yet fully closed, -+ // or the balancer was already closed. -+ return -+ } -+ balToUpdate.UpdateSubConnState(sc, state) -+} -+ -+// Close closes any active child balancers. -+func (gsb *Balancer) Close() { -+ gsb.mu.Lock() -+ gsb.closed = true -+ currentBalancerToClose := gsb.balancerCurrent -+ gsb.balancerCurrent = nil -+ pendingBalancerToClose := gsb.balancerPending -+ gsb.balancerPending = nil -+ gsb.mu.Unlock() -+ -+ currentBalancerToClose.Close() -+ pendingBalancerToClose.Close() -+} -+ -+// balancerWrapper wraps a balancer.Balancer, and overrides some Balancer -+// methods to help cleanup SubConns created by the wrapped balancer. -+// -+// It implements the balancer.ClientConn interface and is passed down in that -+// capacity to the wrapped balancer. It maintains a set of subConns created by -+// the wrapped balancer and calls from the latter to create/update/remove -+// SubConns update this set before being forwarded to the parent ClientConn. -+// State updates from the wrapped balancer can result in invocation of the -+// graceful switch logic. -+type balancerWrapper struct { -+ balancer.Balancer -+ gsb *Balancer -+ -+ lastState balancer.State -+ subconns map[balancer.SubConn]bool // subconns created by this balancer -+} -+ -+func (bw *balancerWrapper) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { -+ if state.ConnectivityState == connectivity.Shutdown { -+ bw.gsb.mu.Lock() -+ delete(bw.subconns, sc) -+ bw.gsb.mu.Unlock() -+ } -+ // There is no need to protect this read with a mutex, as the write to the -+ // Balancer field happens in SwitchTo, which completes before this can be -+ // called. -+ bw.Balancer.UpdateSubConnState(sc, state) -+} -+ -+// Close closes the underlying LB policy and removes the subconns it created. bw -+// must not be referenced via balancerCurrent or balancerPending in gsb when -+// called. gsb.mu must not be held. Does not panic with a nil receiver. -+func (bw *balancerWrapper) Close() { -+ // before Close is called. -+ if bw == nil { -+ return -+ } -+ // There is no need to protect this read with a mutex, as Close() is -+ // impossible to be called concurrently with the write in SwitchTo(). The -+ // callsites of Close() for this balancer in Graceful Switch Balancer will -+ // never be called until SwitchTo() returns. -+ bw.Balancer.Close() -+ bw.gsb.mu.Lock() -+ for sc := range bw.subconns { -+ bw.gsb.cc.RemoveSubConn(sc) -+ } -+ bw.gsb.mu.Unlock() -+} -+ -+func (bw *balancerWrapper) UpdateState(state balancer.State) { -+ // Hold the mutex for this entire call to ensure it cannot occur -+ // concurrently with other updateState() calls. This causes updates to -+ // lastState and calls to cc.UpdateState to happen atomically. -+ bw.gsb.mu.Lock() -+ defer bw.gsb.mu.Unlock() -+ bw.lastState = state -+ -+ if !bw.gsb.balancerCurrentOrPending(bw) { -+ return -+ } -+ -+ if bw == bw.gsb.balancerCurrent { -+ // In the case that the current balancer exits READY, and there is a pending -+ // balancer, you can forward the pending balancer's cached State up to -+ // ClientConn and swap the pending into the current. This is because there -+ // is no reason to gracefully switch from and keep using the old policy as -+ // the ClientConn is not connected to any backends. -+ if state.ConnectivityState != connectivity.Ready && bw.gsb.balancerPending != nil { -+ bw.gsb.swap() -+ return -+ } -+ // Even if there is a pending balancer waiting to be gracefully switched to, -+ // continue to forward current balancer updates to the Client Conn. Ignoring -+ // state + picker from the current would cause undefined behavior/cause the -+ // system to behave incorrectly from the current LB policies perspective. -+ // Also, the current LB is still being used by grpc to choose SubConns per -+ // RPC, and thus should use the most updated form of the current balancer. -+ bw.gsb.cc.UpdateState(state) -+ return -+ } -+ // This method is now dealing with a state update from the pending balancer. -+ // If the current balancer is currently in a state other than READY, the new -+ // policy can be swapped into place immediately. This is because there is no -+ // reason to gracefully switch from and keep using the old policy as the -+ // ClientConn is not connected to any backends. -+ if state.ConnectivityState != connectivity.Connecting || bw.gsb.balancerCurrent.lastState.ConnectivityState != connectivity.Ready { -+ bw.gsb.swap() -+ } -+} -+ -+func (bw *balancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) { -+ bw.gsb.mu.Lock() -+ if !bw.gsb.balancerCurrentOrPending(bw) { -+ bw.gsb.mu.Unlock() -+ return nil, fmt.Errorf("%T at address %p that called NewSubConn is deleted", bw, bw) -+ } -+ bw.gsb.mu.Unlock() -+ -+ sc, err := bw.gsb.cc.NewSubConn(addrs, opts) -+ if err != nil { -+ return nil, err -+ } -+ bw.gsb.mu.Lock() -+ if !bw.gsb.balancerCurrentOrPending(bw) { // balancer was closed during this call -+ bw.gsb.cc.RemoveSubConn(sc) -+ bw.gsb.mu.Unlock() -+ return nil, fmt.Errorf("%T at address %p that called NewSubConn is deleted", bw, bw) -+ } -+ bw.subconns[sc] = true -+ bw.gsb.mu.Unlock() -+ return sc, nil -+} -+ -+func (bw *balancerWrapper) ResolveNow(opts resolver.ResolveNowOptions) { -+ // Ignore ResolveNow requests from anything other than the most recent -+ // balancer, because older balancers were already removed from the config. -+ if bw != bw.gsb.latestBalancer() { -+ return -+ } -+ bw.gsb.cc.ResolveNow(opts) -+} -+ -+func (bw *balancerWrapper) RemoveSubConn(sc balancer.SubConn) { -+ bw.gsb.mu.Lock() -+ if !bw.gsb.balancerCurrentOrPending(bw) { -+ bw.gsb.mu.Unlock() -+ return -+ } -+ bw.gsb.mu.Unlock() -+ bw.gsb.cc.RemoveSubConn(sc) -+} -+ -+func (bw *balancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) { -+ bw.gsb.mu.Lock() -+ if !bw.gsb.balancerCurrentOrPending(bw) { -+ bw.gsb.mu.Unlock() -+ return -+ } -+ bw.gsb.mu.Unlock() -+ bw.gsb.cc.UpdateAddresses(sc, addrs) -+} -+ -+func (bw *balancerWrapper) Target() string { -+ return bw.gsb.cc.Target() -+} -diff --git a/vendor/google.golang.org/grpc/internal/balancerload/load.go b/vendor/google.golang.org/grpc/internal/balancerload/load.go -new file mode 100755 -index 0000000..3a905d9 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/balancerload/load.go -@@ -0,0 +1,46 @@ -+/* -+ * Copyright 2019 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ */ -+ -+// Package balancerload defines APIs to parse server loads in trailers. The -+// parsed loads are sent to balancers in DoneInfo. -+package balancerload -+ -+import ( -+ "google.golang.org/grpc/metadata" -+) -+ -+// Parser converts loads from metadata into a concrete type. -+type Parser interface { -+ // Parse parses loads from metadata. -+ Parse(md metadata.MD) interface{} -+} -+ -+var parser Parser -+ -+// SetParser sets the load parser. -+// -+// Not mutex-protected, should be called before any gRPC functions. -+func SetParser(lr Parser) { -+ parser = lr -+} -+ -+// Parse calls parser.Read(). -+func Parse(md metadata.MD) interface{} { -+ if parser == nil { -+ return nil -+ } -+ return parser.Parse(md) -+} -diff --git a/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go b/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go -new file mode 100755 -index 0000000..755fdeb ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go -@@ -0,0 +1,192 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package binarylog implementation binary logging as defined in -+// https://github.com/grpc/proposal/blob/master/A16-binary-logging.md. -+package binarylog -+ -+import ( -+ "fmt" -+ "os" -+ -+ "google.golang.org/grpc/grpclog" -+ "google.golang.org/grpc/internal/grpcutil" -+) -+ -+var grpclogLogger = grpclog.Component("binarylog") -+ -+// Logger specifies MethodLoggers for method names with a Log call that -+// takes a context. -+// -+// This is used in the 1.0 release of gcp/observability, and thus must not be -+// deleted or changed. -+type Logger interface { -+ GetMethodLogger(methodName string) MethodLogger -+} -+ -+// binLogger is the global binary logger for the binary. One of this should be -+// built at init time from the configuration (environment variable or flags). -+// -+// It is used to get a MethodLogger for each individual method. -+var binLogger Logger -+ -+// SetLogger sets the binary logger. -+// -+// Only call this at init time. -+func SetLogger(l Logger) { -+ binLogger = l -+} -+ -+// GetLogger gets the binary logger. -+// -+// Only call this at init time. -+func GetLogger() Logger { -+ return binLogger -+} -+ -+// GetMethodLogger returns the MethodLogger for the given methodName. -+// -+// methodName should be in the format of "/service/method". -+// -+// Each MethodLogger returned by this method is a new instance. This is to -+// generate sequence id within the call. -+func GetMethodLogger(methodName string) MethodLogger { -+ if binLogger == nil { -+ return nil -+ } -+ return binLogger.GetMethodLogger(methodName) -+} -+ -+func init() { -+ const envStr = "GRPC_BINARY_LOG_FILTER" -+ configStr := os.Getenv(envStr) -+ binLogger = NewLoggerFromConfigString(configStr) -+} -+ -+// MethodLoggerConfig contains the setting for logging behavior of a method -+// logger. Currently, it contains the max length of header and message. -+type MethodLoggerConfig struct { -+ // Max length of header and message. -+ Header, Message uint64 -+} -+ -+// LoggerConfig contains the config for loggers to create method loggers. -+type LoggerConfig struct { -+ All *MethodLoggerConfig -+ Services map[string]*MethodLoggerConfig -+ Methods map[string]*MethodLoggerConfig -+ -+ Blacklist map[string]struct{} -+} -+ -+type logger struct { -+ config LoggerConfig -+} -+ -+// NewLoggerFromConfig builds a logger with the given LoggerConfig. -+func NewLoggerFromConfig(config LoggerConfig) Logger { -+ return &logger{config: config} -+} -+ -+// newEmptyLogger creates an empty logger. The map fields need to be filled in -+// using the set* functions. -+func newEmptyLogger() *logger { -+ return &logger{} -+} -+ -+// Set method logger for "*". -+func (l *logger) setDefaultMethodLogger(ml *MethodLoggerConfig) error { -+ if l.config.All != nil { -+ return fmt.Errorf("conflicting global rules found") -+ } -+ l.config.All = ml -+ return nil -+} -+ -+// Set method logger for "service/*". -+// -+// New MethodLogger with same service overrides the old one. -+func (l *logger) setServiceMethodLogger(service string, ml *MethodLoggerConfig) error { -+ if _, ok := l.config.Services[service]; ok { -+ return fmt.Errorf("conflicting service rules for service %v found", service) -+ } -+ if l.config.Services == nil { -+ l.config.Services = make(map[string]*MethodLoggerConfig) -+ } -+ l.config.Services[service] = ml -+ return nil -+} -+ -+// Set method logger for "service/method". -+// -+// New MethodLogger with same method overrides the old one. -+func (l *logger) setMethodMethodLogger(method string, ml *MethodLoggerConfig) error { -+ if _, ok := l.config.Blacklist[method]; ok { -+ return fmt.Errorf("conflicting blacklist rules for method %v found", method) -+ } -+ if _, ok := l.config.Methods[method]; ok { -+ return fmt.Errorf("conflicting method rules for method %v found", method) -+ } -+ if l.config.Methods == nil { -+ l.config.Methods = make(map[string]*MethodLoggerConfig) -+ } -+ l.config.Methods[method] = ml -+ return nil -+} -+ -+// Set blacklist method for "-service/method". -+func (l *logger) setBlacklist(method string) error { -+ if _, ok := l.config.Blacklist[method]; ok { -+ return fmt.Errorf("conflicting blacklist rules for method %v found", method) -+ } -+ if _, ok := l.config.Methods[method]; ok { -+ return fmt.Errorf("conflicting method rules for method %v found", method) -+ } -+ if l.config.Blacklist == nil { -+ l.config.Blacklist = make(map[string]struct{}) -+ } -+ l.config.Blacklist[method] = struct{}{} -+ return nil -+} -+ -+// getMethodLogger returns the MethodLogger for the given methodName. -+// -+// methodName should be in the format of "/service/method". -+// -+// Each MethodLogger returned by this method is a new instance. This is to -+// generate sequence id within the call. -+func (l *logger) GetMethodLogger(methodName string) MethodLogger { -+ s, m, err := grpcutil.ParseMethod(methodName) -+ if err != nil { -+ grpclogLogger.Infof("binarylogging: failed to parse %q: %v", methodName, err) -+ return nil -+ } -+ if ml, ok := l.config.Methods[s+"/"+m]; ok { -+ return NewTruncatingMethodLogger(ml.Header, ml.Message) -+ } -+ if _, ok := l.config.Blacklist[s+"/"+m]; ok { -+ return nil -+ } -+ if ml, ok := l.config.Services[s]; ok { -+ return NewTruncatingMethodLogger(ml.Header, ml.Message) -+ } -+ if l.config.All == nil { -+ return nil -+ } -+ return NewTruncatingMethodLogger(l.config.All.Header, l.config.All.Message) -+} -diff --git a/vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go b/vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go -new file mode 100755 -index 0000000..1ee00a3 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go -@@ -0,0 +1,42 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// This file contains exported variables/functions that are exported for testing -+// only. -+// -+// An ideal way for this would be to put those in a *_test.go but in binarylog -+// package. But this doesn't work with staticcheck with go module. Error was: -+// "MdToMetadataProto not declared by package binarylog". This could be caused -+// by the way staticcheck looks for files for a certain package, which doesn't -+// support *_test.go files. -+// -+// Move those to binary_test.go when staticcheck is fixed. -+ -+package binarylog -+ -+var ( -+ // AllLogger is a logger that logs all headers/messages for all RPCs. It's -+ // for testing only. -+ AllLogger = NewLoggerFromConfigString("*") -+ // MdToMetadataProto converts metadata to a binary logging proto message. -+ // It's for testing only. -+ MdToMetadataProto = mdToMetadataProto -+ // AddrToProto converts an address to a binary logging proto message. It's -+ // for testing only. -+ AddrToProto = addrToProto -+) -diff --git a/vendor/google.golang.org/grpc/internal/binarylog/env_config.go b/vendor/google.golang.org/grpc/internal/binarylog/env_config.go -new file mode 100755 -index 0000000..f9e80e2 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/binarylog/env_config.go -@@ -0,0 +1,208 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package binarylog -+ -+import ( -+ "errors" -+ "fmt" -+ "regexp" -+ "strconv" -+ "strings" -+) -+ -+// NewLoggerFromConfigString reads the string and build a logger. It can be used -+// to build a new logger and assign it to binarylog.Logger. -+// -+// Example filter config strings: -+// - "" Nothing will be logged -+// - "*" All headers and messages will be fully logged. -+// - "*{h}" Only headers will be logged. -+// - "*{m:256}" Only the first 256 bytes of each message will be logged. -+// - "Foo/*" Logs every method in service Foo -+// - "Foo/*,-Foo/Bar" Logs every method in service Foo except method /Foo/Bar -+// - "Foo/*,Foo/Bar{m:256}" Logs the first 256 bytes of each message in method -+// /Foo/Bar, logs all headers and messages in every other method in service -+// Foo. -+// -+// If two configs exist for one certain method or service, the one specified -+// later overrides the previous config. -+func NewLoggerFromConfigString(s string) Logger { -+ if s == "" { -+ return nil -+ } -+ l := newEmptyLogger() -+ methods := strings.Split(s, ",") -+ for _, method := range methods { -+ if err := l.fillMethodLoggerWithConfigString(method); err != nil { -+ grpclogLogger.Warningf("failed to parse binary log config: %v", err) -+ return nil -+ } -+ } -+ return l -+} -+ -+// fillMethodLoggerWithConfigString parses config, creates TruncatingMethodLogger and adds -+// it to the right map in the logger. -+func (l *logger) fillMethodLoggerWithConfigString(config string) error { -+ // "" is invalid. -+ if config == "" { -+ return errors.New("empty string is not a valid method binary logging config") -+ } -+ -+ // "-service/method", blacklist, no * or {} allowed. -+ if config[0] == '-' { -+ s, m, suffix, err := parseMethodConfigAndSuffix(config[1:]) -+ if err != nil { -+ return fmt.Errorf("invalid config: %q, %v", config, err) -+ } -+ if m == "*" { -+ return fmt.Errorf("invalid config: %q, %v", config, "* not allowed in blacklist config") -+ } -+ if suffix != "" { -+ return fmt.Errorf("invalid config: %q, %v", config, "header/message limit not allowed in blacklist config") -+ } -+ if err := l.setBlacklist(s + "/" + m); err != nil { -+ return fmt.Errorf("invalid config: %v", err) -+ } -+ return nil -+ } -+ -+ // "*{h:256;m:256}" -+ if config[0] == '*' { -+ hdr, msg, err := parseHeaderMessageLengthConfig(config[1:]) -+ if err != nil { -+ return fmt.Errorf("invalid config: %q, %v", config, err) -+ } -+ if err := l.setDefaultMethodLogger(&MethodLoggerConfig{Header: hdr, Message: msg}); err != nil { -+ return fmt.Errorf("invalid config: %v", err) -+ } -+ return nil -+ } -+ -+ s, m, suffix, err := parseMethodConfigAndSuffix(config) -+ if err != nil { -+ return fmt.Errorf("invalid config: %q, %v", config, err) -+ } -+ hdr, msg, err := parseHeaderMessageLengthConfig(suffix) -+ if err != nil { -+ return fmt.Errorf("invalid header/message length config: %q, %v", suffix, err) -+ } -+ if m == "*" { -+ if err := l.setServiceMethodLogger(s, &MethodLoggerConfig{Header: hdr, Message: msg}); err != nil { -+ return fmt.Errorf("invalid config: %v", err) -+ } -+ } else { -+ if err := l.setMethodMethodLogger(s+"/"+m, &MethodLoggerConfig{Header: hdr, Message: msg}); err != nil { -+ return fmt.Errorf("invalid config: %v", err) -+ } -+ } -+ return nil -+} -+ -+const ( -+ // TODO: this const is only used by env_config now. But could be useful for -+ // other config. Move to binarylog.go if necessary. -+ maxUInt = ^uint64(0) -+ -+ // For "p.s/m" plus any suffix. Suffix will be parsed again. See test for -+ // expected output. -+ longMethodConfigRegexpStr = `^([\w./]+)/((?:\w+)|[*])(.+)?$` -+ -+ // For suffix from above, "{h:123,m:123}". See test for expected output. -+ optionalLengthRegexpStr = `(?::(\d+))?` // Optional ":123". -+ headerConfigRegexpStr = `^{h` + optionalLengthRegexpStr + `}$` -+ messageConfigRegexpStr = `^{m` + optionalLengthRegexpStr + `}$` -+ headerMessageConfigRegexpStr = `^{h` + optionalLengthRegexpStr + `;m` + optionalLengthRegexpStr + `}$` -+) -+ -+var ( -+ longMethodConfigRegexp = regexp.MustCompile(longMethodConfigRegexpStr) -+ headerConfigRegexp = regexp.MustCompile(headerConfigRegexpStr) -+ messageConfigRegexp = regexp.MustCompile(messageConfigRegexpStr) -+ headerMessageConfigRegexp = regexp.MustCompile(headerMessageConfigRegexpStr) -+) -+ -+// Turn "service/method{h;m}" into "service", "method", "{h;m}". -+func parseMethodConfigAndSuffix(c string) (service, method, suffix string, _ error) { -+ // Regexp result: -+ // -+ // in: "p.s/m{h:123,m:123}", -+ // out: []string{"p.s/m{h:123,m:123}", "p.s", "m", "{h:123,m:123}"}, -+ match := longMethodConfigRegexp.FindStringSubmatch(c) -+ if match == nil { -+ return "", "", "", fmt.Errorf("%q contains invalid substring", c) -+ } -+ service = match[1] -+ method = match[2] -+ suffix = match[3] -+ return -+} -+ -+// Turn "{h:123;m:345}" into 123, 345. -+// -+// Return maxUInt if length is unspecified. -+func parseHeaderMessageLengthConfig(c string) (hdrLenStr, msgLenStr uint64, err error) { -+ if c == "" { -+ return maxUInt, maxUInt, nil -+ } -+ // Header config only. -+ if match := headerConfigRegexp.FindStringSubmatch(c); match != nil { -+ if s := match[1]; s != "" { -+ hdrLenStr, err = strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return 0, 0, fmt.Errorf("failed to convert %q to uint", s) -+ } -+ return hdrLenStr, 0, nil -+ } -+ return maxUInt, 0, nil -+ } -+ -+ // Message config only. -+ if match := messageConfigRegexp.FindStringSubmatch(c); match != nil { -+ if s := match[1]; s != "" { -+ msgLenStr, err = strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return 0, 0, fmt.Errorf("failed to convert %q to uint", s) -+ } -+ return 0, msgLenStr, nil -+ } -+ return 0, maxUInt, nil -+ } -+ -+ // Header and message config both. -+ if match := headerMessageConfigRegexp.FindStringSubmatch(c); match != nil { -+ // Both hdr and msg are specified, but one or two of them might be empty. -+ hdrLenStr = maxUInt -+ msgLenStr = maxUInt -+ if s := match[1]; s != "" { -+ hdrLenStr, err = strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return 0, 0, fmt.Errorf("failed to convert %q to uint", s) -+ } -+ } -+ if s := match[2]; s != "" { -+ msgLenStr, err = strconv.ParseUint(s, 10, 64) -+ if err != nil { -+ return 0, 0, fmt.Errorf("failed to convert %q to uint", s) -+ } -+ } -+ return hdrLenStr, msgLenStr, nil -+ } -+ return 0, 0, fmt.Errorf("%q contains invalid substring", c) -+} -diff --git a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go -new file mode 100755 -index 0000000..6c3f632 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go -@@ -0,0 +1,445 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package binarylog -+ -+import ( -+ "context" -+ "net" -+ "strings" -+ "sync/atomic" -+ "time" -+ -+ "github.com/golang/protobuf/proto" -+ "github.com/golang/protobuf/ptypes" -+ binlogpb "google.golang.org/grpc/binarylog/grpc_binarylog_v1" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/status" -+) -+ -+type callIDGenerator struct { -+ id uint64 -+} -+ -+func (g *callIDGenerator) next() uint64 { -+ id := atomic.AddUint64(&g.id, 1) -+ return id -+} -+ -+// reset is for testing only, and doesn't need to be thread safe. -+func (g *callIDGenerator) reset() { -+ g.id = 0 -+} -+ -+var idGen callIDGenerator -+ -+// MethodLogger is the sub-logger for each method. -+// -+// This is used in the 1.0 release of gcp/observability, and thus must not be -+// deleted or changed. -+type MethodLogger interface { -+ Log(context.Context, LogEntryConfig) -+} -+ -+// TruncatingMethodLogger is a method logger that truncates headers and messages -+// based on configured fields. -+type TruncatingMethodLogger struct { -+ headerMaxLen, messageMaxLen uint64 -+ -+ callID uint64 -+ idWithinCallGen *callIDGenerator -+ -+ sink Sink // TODO(blog): make this plugable. -+} -+ -+// NewTruncatingMethodLogger returns a new truncating method logger. -+// -+// This is used in the 1.0 release of gcp/observability, and thus must not be -+// deleted or changed. -+func NewTruncatingMethodLogger(h, m uint64) *TruncatingMethodLogger { -+ return &TruncatingMethodLogger{ -+ headerMaxLen: h, -+ messageMaxLen: m, -+ -+ callID: idGen.next(), -+ idWithinCallGen: &callIDGenerator{}, -+ -+ sink: DefaultSink, // TODO(blog): make it plugable. -+ } -+} -+ -+// Build is an internal only method for building the proto message out of the -+// input event. It's made public to enable other library to reuse as much logic -+// in TruncatingMethodLogger as possible. -+func (ml *TruncatingMethodLogger) Build(c LogEntryConfig) *binlogpb.GrpcLogEntry { -+ m := c.toProto() -+ timestamp, _ := ptypes.TimestampProto(time.Now()) -+ m.Timestamp = timestamp -+ m.CallId = ml.callID -+ m.SequenceIdWithinCall = ml.idWithinCallGen.next() -+ -+ switch pay := m.Payload.(type) { -+ case *binlogpb.GrpcLogEntry_ClientHeader: -+ m.PayloadTruncated = ml.truncateMetadata(pay.ClientHeader.GetMetadata()) -+ case *binlogpb.GrpcLogEntry_ServerHeader: -+ m.PayloadTruncated = ml.truncateMetadata(pay.ServerHeader.GetMetadata()) -+ case *binlogpb.GrpcLogEntry_Message: -+ m.PayloadTruncated = ml.truncateMessage(pay.Message) -+ } -+ return m -+} -+ -+// Log creates a proto binary log entry, and logs it to the sink. -+func (ml *TruncatingMethodLogger) Log(ctx context.Context, c LogEntryConfig) { -+ ml.sink.Write(ml.Build(c)) -+} -+ -+func (ml *TruncatingMethodLogger) truncateMetadata(mdPb *binlogpb.Metadata) (truncated bool) { -+ if ml.headerMaxLen == maxUInt { -+ return false -+ } -+ var ( -+ bytesLimit = ml.headerMaxLen -+ index int -+ ) -+ // At the end of the loop, index will be the first entry where the total -+ // size is greater than the limit: -+ // -+ // len(entry[:index]) <= ml.hdr && len(entry[:index+1]) > ml.hdr. -+ for ; index < len(mdPb.Entry); index++ { -+ entry := mdPb.Entry[index] -+ if entry.Key == "grpc-trace-bin" { -+ // "grpc-trace-bin" is a special key. It's kept in the log entry, -+ // but not counted towards the size limit. -+ continue -+ } -+ currentEntryLen := uint64(len(entry.GetKey())) + uint64(len(entry.GetValue())) -+ if currentEntryLen > bytesLimit { -+ break -+ } -+ bytesLimit -= currentEntryLen -+ } -+ truncated = index < len(mdPb.Entry) -+ mdPb.Entry = mdPb.Entry[:index] -+ return truncated -+} -+ -+func (ml *TruncatingMethodLogger) truncateMessage(msgPb *binlogpb.Message) (truncated bool) { -+ if ml.messageMaxLen == maxUInt { -+ return false -+ } -+ if ml.messageMaxLen >= uint64(len(msgPb.Data)) { -+ return false -+ } -+ msgPb.Data = msgPb.Data[:ml.messageMaxLen] -+ return true -+} -+ -+// LogEntryConfig represents the configuration for binary log entry. -+// -+// This is used in the 1.0 release of gcp/observability, and thus must not be -+// deleted or changed. -+type LogEntryConfig interface { -+ toProto() *binlogpb.GrpcLogEntry -+} -+ -+// ClientHeader configs the binary log entry to be a ClientHeader entry. -+type ClientHeader struct { -+ OnClientSide bool -+ Header metadata.MD -+ MethodName string -+ Authority string -+ Timeout time.Duration -+ // PeerAddr is required only when it's on server side. -+ PeerAddr net.Addr -+} -+ -+func (c *ClientHeader) toProto() *binlogpb.GrpcLogEntry { -+ // This function doesn't need to set all the fields (e.g. seq ID). The Log -+ // function will set the fields when necessary. -+ clientHeader := &binlogpb.ClientHeader{ -+ Metadata: mdToMetadataProto(c.Header), -+ MethodName: c.MethodName, -+ Authority: c.Authority, -+ } -+ if c.Timeout > 0 { -+ clientHeader.Timeout = ptypes.DurationProto(c.Timeout) -+ } -+ ret := &binlogpb.GrpcLogEntry{ -+ Type: binlogpb.GrpcLogEntry_EVENT_TYPE_CLIENT_HEADER, -+ Payload: &binlogpb.GrpcLogEntry_ClientHeader{ -+ ClientHeader: clientHeader, -+ }, -+ } -+ if c.OnClientSide { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT -+ } else { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER -+ } -+ if c.PeerAddr != nil { -+ ret.Peer = addrToProto(c.PeerAddr) -+ } -+ return ret -+} -+ -+// ServerHeader configs the binary log entry to be a ServerHeader entry. -+type ServerHeader struct { -+ OnClientSide bool -+ Header metadata.MD -+ // PeerAddr is required only when it's on client side. -+ PeerAddr net.Addr -+} -+ -+func (c *ServerHeader) toProto() *binlogpb.GrpcLogEntry { -+ ret := &binlogpb.GrpcLogEntry{ -+ Type: binlogpb.GrpcLogEntry_EVENT_TYPE_SERVER_HEADER, -+ Payload: &binlogpb.GrpcLogEntry_ServerHeader{ -+ ServerHeader: &binlogpb.ServerHeader{ -+ Metadata: mdToMetadataProto(c.Header), -+ }, -+ }, -+ } -+ if c.OnClientSide { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT -+ } else { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER -+ } -+ if c.PeerAddr != nil { -+ ret.Peer = addrToProto(c.PeerAddr) -+ } -+ return ret -+} -+ -+// ClientMessage configs the binary log entry to be a ClientMessage entry. -+type ClientMessage struct { -+ OnClientSide bool -+ // Message can be a proto.Message or []byte. Other messages formats are not -+ // supported. -+ Message interface{} -+} -+ -+func (c *ClientMessage) toProto() *binlogpb.GrpcLogEntry { -+ var ( -+ data []byte -+ err error -+ ) -+ if m, ok := c.Message.(proto.Message); ok { -+ data, err = proto.Marshal(m) -+ if err != nil { -+ grpclogLogger.Infof("binarylogging: failed to marshal proto message: %v", err) -+ } -+ } else if b, ok := c.Message.([]byte); ok { -+ data = b -+ } else { -+ grpclogLogger.Infof("binarylogging: message to log is neither proto.message nor []byte") -+ } -+ ret := &binlogpb.GrpcLogEntry{ -+ Type: binlogpb.GrpcLogEntry_EVENT_TYPE_CLIENT_MESSAGE, -+ Payload: &binlogpb.GrpcLogEntry_Message{ -+ Message: &binlogpb.Message{ -+ Length: uint32(len(data)), -+ Data: data, -+ }, -+ }, -+ } -+ if c.OnClientSide { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT -+ } else { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER -+ } -+ return ret -+} -+ -+// ServerMessage configs the binary log entry to be a ServerMessage entry. -+type ServerMessage struct { -+ OnClientSide bool -+ // Message can be a proto.Message or []byte. Other messages formats are not -+ // supported. -+ Message interface{} -+} -+ -+func (c *ServerMessage) toProto() *binlogpb.GrpcLogEntry { -+ var ( -+ data []byte -+ err error -+ ) -+ if m, ok := c.Message.(proto.Message); ok { -+ data, err = proto.Marshal(m) -+ if err != nil { -+ grpclogLogger.Infof("binarylogging: failed to marshal proto message: %v", err) -+ } -+ } else if b, ok := c.Message.([]byte); ok { -+ data = b -+ } else { -+ grpclogLogger.Infof("binarylogging: message to log is neither proto.message nor []byte") -+ } -+ ret := &binlogpb.GrpcLogEntry{ -+ Type: binlogpb.GrpcLogEntry_EVENT_TYPE_SERVER_MESSAGE, -+ Payload: &binlogpb.GrpcLogEntry_Message{ -+ Message: &binlogpb.Message{ -+ Length: uint32(len(data)), -+ Data: data, -+ }, -+ }, -+ } -+ if c.OnClientSide { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT -+ } else { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER -+ } -+ return ret -+} -+ -+// ClientHalfClose configs the binary log entry to be a ClientHalfClose entry. -+type ClientHalfClose struct { -+ OnClientSide bool -+} -+ -+func (c *ClientHalfClose) toProto() *binlogpb.GrpcLogEntry { -+ ret := &binlogpb.GrpcLogEntry{ -+ Type: binlogpb.GrpcLogEntry_EVENT_TYPE_CLIENT_HALF_CLOSE, -+ Payload: nil, // No payload here. -+ } -+ if c.OnClientSide { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT -+ } else { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER -+ } -+ return ret -+} -+ -+// ServerTrailer configs the binary log entry to be a ServerTrailer entry. -+type ServerTrailer struct { -+ OnClientSide bool -+ Trailer metadata.MD -+ // Err is the status error. -+ Err error -+ // PeerAddr is required only when it's on client side and the RPC is trailer -+ // only. -+ PeerAddr net.Addr -+} -+ -+func (c *ServerTrailer) toProto() *binlogpb.GrpcLogEntry { -+ st, ok := status.FromError(c.Err) -+ if !ok { -+ grpclogLogger.Info("binarylogging: error in trailer is not a status error") -+ } -+ var ( -+ detailsBytes []byte -+ err error -+ ) -+ stProto := st.Proto() -+ if stProto != nil && len(stProto.Details) != 0 { -+ detailsBytes, err = proto.Marshal(stProto) -+ if err != nil { -+ grpclogLogger.Infof("binarylogging: failed to marshal status proto: %v", err) -+ } -+ } -+ ret := &binlogpb.GrpcLogEntry{ -+ Type: binlogpb.GrpcLogEntry_EVENT_TYPE_SERVER_TRAILER, -+ Payload: &binlogpb.GrpcLogEntry_Trailer{ -+ Trailer: &binlogpb.Trailer{ -+ Metadata: mdToMetadataProto(c.Trailer), -+ StatusCode: uint32(st.Code()), -+ StatusMessage: st.Message(), -+ StatusDetails: detailsBytes, -+ }, -+ }, -+ } -+ if c.OnClientSide { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT -+ } else { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER -+ } -+ if c.PeerAddr != nil { -+ ret.Peer = addrToProto(c.PeerAddr) -+ } -+ return ret -+} -+ -+// Cancel configs the binary log entry to be a Cancel entry. -+type Cancel struct { -+ OnClientSide bool -+} -+ -+func (c *Cancel) toProto() *binlogpb.GrpcLogEntry { -+ ret := &binlogpb.GrpcLogEntry{ -+ Type: binlogpb.GrpcLogEntry_EVENT_TYPE_CANCEL, -+ Payload: nil, -+ } -+ if c.OnClientSide { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT -+ } else { -+ ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER -+ } -+ return ret -+} -+ -+// metadataKeyOmit returns whether the metadata entry with this key should be -+// omitted. -+func metadataKeyOmit(key string) bool { -+ switch key { -+ case "lb-token", ":path", ":authority", "content-encoding", "content-type", "user-agent", "te": -+ return true -+ case "grpc-trace-bin": // grpc-trace-bin is special because it's visiable to users. -+ return false -+ } -+ return strings.HasPrefix(key, "grpc-") -+} -+ -+func mdToMetadataProto(md metadata.MD) *binlogpb.Metadata { -+ ret := &binlogpb.Metadata{} -+ for k, vv := range md { -+ if metadataKeyOmit(k) { -+ continue -+ } -+ for _, v := range vv { -+ ret.Entry = append(ret.Entry, -+ &binlogpb.MetadataEntry{ -+ Key: k, -+ Value: []byte(v), -+ }, -+ ) -+ } -+ } -+ return ret -+} -+ -+func addrToProto(addr net.Addr) *binlogpb.Address { -+ ret := &binlogpb.Address{} -+ switch a := addr.(type) { -+ case *net.TCPAddr: -+ if a.IP.To4() != nil { -+ ret.Type = binlogpb.Address_TYPE_IPV4 -+ } else if a.IP.To16() != nil { -+ ret.Type = binlogpb.Address_TYPE_IPV6 -+ } else { -+ ret.Type = binlogpb.Address_TYPE_UNKNOWN -+ // Do not set address and port fields. -+ break -+ } -+ ret.Address = a.IP.String() -+ ret.IpPort = uint32(a.Port) -+ case *net.UnixAddr: -+ ret.Type = binlogpb.Address_TYPE_UNIX -+ ret.Address = a.String() -+ default: -+ ret.Type = binlogpb.Address_TYPE_UNKNOWN -+ } -+ return ret -+} -diff --git a/vendor/google.golang.org/grpc/internal/binarylog/sink.go b/vendor/google.golang.org/grpc/internal/binarylog/sink.go -new file mode 100755 -index 0000000..264de38 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/binarylog/sink.go -@@ -0,0 +1,170 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package binarylog -+ -+import ( -+ "bufio" -+ "encoding/binary" -+ "io" -+ "sync" -+ "time" -+ -+ "github.com/golang/protobuf/proto" -+ binlogpb "google.golang.org/grpc/binarylog/grpc_binarylog_v1" -+) -+ -+var ( -+ // DefaultSink is the sink where the logs will be written to. It's exported -+ // for the binarylog package to update. -+ DefaultSink Sink = &noopSink{} // TODO(blog): change this default (file in /tmp). -+) -+ -+// Sink writes log entry into the binary log sink. -+// -+// sink is a copy of the exported binarylog.Sink, to avoid circular dependency. -+type Sink interface { -+ // Write will be called to write the log entry into the sink. -+ // -+ // It should be thread-safe so it can be called in parallel. -+ Write(*binlogpb.GrpcLogEntry) error -+ // Close will be called when the Sink is replaced by a new Sink. -+ Close() error -+} -+ -+type noopSink struct{} -+ -+func (ns *noopSink) Write(*binlogpb.GrpcLogEntry) error { return nil } -+func (ns *noopSink) Close() error { return nil } -+ -+// newWriterSink creates a binary log sink with the given writer. -+// -+// Write() marshals the proto message and writes it to the given writer. Each -+// message is prefixed with a 4 byte big endian unsigned integer as the length. -+// -+// No buffer is done, Close() doesn't try to close the writer. -+func newWriterSink(w io.Writer) Sink { -+ return &writerSink{out: w} -+} -+ -+type writerSink struct { -+ out io.Writer -+} -+ -+func (ws *writerSink) Write(e *binlogpb.GrpcLogEntry) error { -+ b, err := proto.Marshal(e) -+ if err != nil { -+ grpclogLogger.Errorf("binary logging: failed to marshal proto message: %v", err) -+ return err -+ } -+ hdr := make([]byte, 4) -+ binary.BigEndian.PutUint32(hdr, uint32(len(b))) -+ if _, err := ws.out.Write(hdr); err != nil { -+ return err -+ } -+ if _, err := ws.out.Write(b); err != nil { -+ return err -+ } -+ return nil -+} -+ -+func (ws *writerSink) Close() error { return nil } -+ -+type bufferedSink struct { -+ mu sync.Mutex -+ closer io.Closer -+ out Sink // out is built on buf. -+ buf *bufio.Writer // buf is kept for flush. -+ flusherStarted bool -+ -+ writeTicker *time.Ticker -+ done chan struct{} -+} -+ -+func (fs *bufferedSink) Write(e *binlogpb.GrpcLogEntry) error { -+ fs.mu.Lock() -+ defer fs.mu.Unlock() -+ if !fs.flusherStarted { -+ // Start the write loop when Write is called. -+ fs.startFlushGoroutine() -+ fs.flusherStarted = true -+ } -+ if err := fs.out.Write(e); err != nil { -+ return err -+ } -+ return nil -+} -+ -+const ( -+ bufFlushDuration = 60 * time.Second -+) -+ -+func (fs *bufferedSink) startFlushGoroutine() { -+ fs.writeTicker = time.NewTicker(bufFlushDuration) -+ go func() { -+ for { -+ select { -+ case <-fs.done: -+ return -+ case <-fs.writeTicker.C: -+ } -+ fs.mu.Lock() -+ if err := fs.buf.Flush(); err != nil { -+ grpclogLogger.Warningf("failed to flush to Sink: %v", err) -+ } -+ fs.mu.Unlock() -+ } -+ }() -+} -+ -+func (fs *bufferedSink) Close() error { -+ fs.mu.Lock() -+ defer fs.mu.Unlock() -+ if fs.writeTicker != nil { -+ fs.writeTicker.Stop() -+ } -+ close(fs.done) -+ if err := fs.buf.Flush(); err != nil { -+ grpclogLogger.Warningf("failed to flush to Sink: %v", err) -+ } -+ if err := fs.closer.Close(); err != nil { -+ grpclogLogger.Warningf("failed to close the underlying WriterCloser: %v", err) -+ } -+ if err := fs.out.Close(); err != nil { -+ grpclogLogger.Warningf("failed to close the Sink: %v", err) -+ } -+ return nil -+} -+ -+// NewBufferedSink creates a binary log sink with the given WriteCloser. -+// -+// Write() marshals the proto message and writes it to the given writer. Each -+// message is prefixed with a 4 byte big endian unsigned integer as the length. -+// -+// Content is kept in a buffer, and is flushed every 60 seconds. -+// -+// Close closes the WriteCloser. -+func NewBufferedSink(o io.WriteCloser) Sink { -+ bufW := bufio.NewWriter(o) -+ return &bufferedSink{ -+ closer: o, -+ out: newWriterSink(bufW), -+ buf: bufW, -+ done: make(chan struct{}), -+ } -+} -diff --git a/vendor/google.golang.org/grpc/internal/buffer/unbounded.go b/vendor/google.golang.org/grpc/internal/buffer/unbounded.go -new file mode 100755 -index 0000000..81c2f5f ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/buffer/unbounded.go -@@ -0,0 +1,105 @@ -+/* -+ * Copyright 2019 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package buffer provides an implementation of an unbounded buffer. -+package buffer -+ -+import "sync" -+ -+// Unbounded is an implementation of an unbounded buffer which does not use -+// extra goroutines. This is typically used for passing updates from one entity -+// to another within gRPC. -+// -+// All methods on this type are thread-safe and don't block on anything except -+// the underlying mutex used for synchronization. -+// -+// Unbounded supports values of any type to be stored in it by using a channel -+// of `interface{}`. This means that a call to Put() incurs an extra memory -+// allocation, and also that users need a type assertion while reading. For -+// performance critical code paths, using Unbounded is strongly discouraged and -+// defining a new type specific implementation of this buffer is preferred. See -+// internal/transport/transport.go for an example of this. -+type Unbounded struct { -+ c chan interface{} -+ closed bool -+ mu sync.Mutex -+ backlog []interface{} -+} -+ -+// NewUnbounded returns a new instance of Unbounded. -+func NewUnbounded() *Unbounded { -+ return &Unbounded{c: make(chan interface{}, 1)} -+} -+ -+// Put adds t to the unbounded buffer. -+func (b *Unbounded) Put(t interface{}) { -+ b.mu.Lock() -+ defer b.mu.Unlock() -+ if b.closed { -+ return -+ } -+ if len(b.backlog) == 0 { -+ select { -+ case b.c <- t: -+ return -+ default: -+ } -+ } -+ b.backlog = append(b.backlog, t) -+} -+ -+// Load sends the earliest buffered data, if any, onto the read channel -+// returned by Get(). Users are expected to call this every time they read a -+// value from the read channel. -+func (b *Unbounded) Load() { -+ b.mu.Lock() -+ defer b.mu.Unlock() -+ if b.closed { -+ return -+ } -+ if len(b.backlog) > 0 { -+ select { -+ case b.c <- b.backlog[0]: -+ b.backlog[0] = nil -+ b.backlog = b.backlog[1:] -+ default: -+ } -+ } -+} -+ -+// Get returns a read channel on which values added to the buffer, via Put(), -+// are sent on. -+// -+// Upon reading a value from this channel, users are expected to call Load() to -+// send the next buffered value onto the channel if there is any. -+// -+// If the unbounded buffer is closed, the read channel returned by this method -+// is closed. -+func (b *Unbounded) Get() <-chan interface{} { -+ return b.c -+} -+ -+// Close closes the unbounded buffer. -+func (b *Unbounded) Close() { -+ b.mu.Lock() -+ defer b.mu.Unlock() -+ if b.closed { -+ return -+ } -+ b.closed = true -+ close(b.c) -+} -diff --git a/vendor/google.golang.org/grpc/internal/channelz/funcs.go b/vendor/google.golang.org/grpc/internal/channelz/funcs.go -new file mode 100755 -index 0000000..777cbcd ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/channelz/funcs.go -@@ -0,0 +1,789 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package channelz defines APIs for enabling channelz service, entry -+// registration/deletion, and accessing channelz data. It also defines channelz -+// metric struct formats. -+// -+// All APIs in this package are experimental. -+package channelz -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ "sort" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "google.golang.org/grpc/grpclog" -+) -+ -+const ( -+ defaultMaxTraceEntry int32 = 30 -+) -+ -+var ( -+ db dbWrapper -+ idGen idGenerator -+ // EntryPerPage defines the number of channelz entries to be shown on a web page. -+ EntryPerPage = int64(50) -+ curState int32 -+ maxTraceEntry = defaultMaxTraceEntry -+) -+ -+// TurnOn turns on channelz data collection. -+func TurnOn() { -+ if !IsOn() { -+ db.set(newChannelMap()) -+ idGen.reset() -+ atomic.StoreInt32(&curState, 1) -+ } -+} -+ -+// IsOn returns whether channelz data collection is on. -+func IsOn() bool { -+ return atomic.CompareAndSwapInt32(&curState, 1, 1) -+} -+ -+// SetMaxTraceEntry sets maximum number of trace entry per entity (i.e. channel/subchannel). -+// Setting it to 0 will disable channel tracing. -+func SetMaxTraceEntry(i int32) { -+ atomic.StoreInt32(&maxTraceEntry, i) -+} -+ -+// ResetMaxTraceEntryToDefault resets the maximum number of trace entry per entity to default. -+func ResetMaxTraceEntryToDefault() { -+ atomic.StoreInt32(&maxTraceEntry, defaultMaxTraceEntry) -+} -+ -+func getMaxTraceEntry() int { -+ i := atomic.LoadInt32(&maxTraceEntry) -+ return int(i) -+} -+ -+// dbWarpper wraps around a reference to internal channelz data storage, and -+// provide synchronized functionality to set and get the reference. -+type dbWrapper struct { -+ mu sync.RWMutex -+ DB *channelMap -+} -+ -+func (d *dbWrapper) set(db *channelMap) { -+ d.mu.Lock() -+ d.DB = db -+ d.mu.Unlock() -+} -+ -+func (d *dbWrapper) get() *channelMap { -+ d.mu.RLock() -+ defer d.mu.RUnlock() -+ return d.DB -+} -+ -+// NewChannelzStorageForTesting initializes channelz data storage and id -+// generator for testing purposes. -+// -+// Returns a cleanup function to be invoked by the test, which waits for up to -+// 10s for all channelz state to be reset by the grpc goroutines when those -+// entities get closed. This cleanup function helps with ensuring that tests -+// don't mess up each other. -+func NewChannelzStorageForTesting() (cleanup func() error) { -+ db.set(newChannelMap()) -+ idGen.reset() -+ -+ return func() error { -+ cm := db.get() -+ if cm == nil { -+ return nil -+ } -+ -+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) -+ defer cancel() -+ ticker := time.NewTicker(10 * time.Millisecond) -+ defer ticker.Stop() -+ for { -+ cm.mu.RLock() -+ topLevelChannels, servers, channels, subChannels, listenSockets, normalSockets := len(cm.topLevelChannels), len(cm.servers), len(cm.channels), len(cm.subChannels), len(cm.listenSockets), len(cm.normalSockets) -+ cm.mu.RUnlock() -+ -+ if err := ctx.Err(); err != nil { -+ return fmt.Errorf("after 10s the channelz map has not been cleaned up yet, topchannels: %d, servers: %d, channels: %d, subchannels: %d, listen sockets: %d, normal sockets: %d", topLevelChannels, servers, channels, subChannels, listenSockets, normalSockets) -+ } -+ if topLevelChannels == 0 && servers == 0 && channels == 0 && subChannels == 0 && listenSockets == 0 && normalSockets == 0 { -+ return nil -+ } -+ <-ticker.C -+ } -+ } -+} -+ -+// GetTopChannels returns a slice of top channel's ChannelMetric, along with a -+// boolean indicating whether there's more top channels to be queried for. -+// -+// The arg id specifies that only top channel with id at or above it will be included -+// in the result. The returned slice is up to a length of the arg maxResults or -+// EntryPerPage if maxResults is zero, and is sorted in ascending id order. -+func GetTopChannels(id int64, maxResults int64) ([]*ChannelMetric, bool) { -+ return db.get().GetTopChannels(id, maxResults) -+} -+ -+// GetServers returns a slice of server's ServerMetric, along with a -+// boolean indicating whether there's more servers to be queried for. -+// -+// The arg id specifies that only server with id at or above it will be included -+// in the result. The returned slice is up to a length of the arg maxResults or -+// EntryPerPage if maxResults is zero, and is sorted in ascending id order. -+func GetServers(id int64, maxResults int64) ([]*ServerMetric, bool) { -+ return db.get().GetServers(id, maxResults) -+} -+ -+// GetServerSockets returns a slice of server's (identified by id) normal socket's -+// SocketMetric, along with a boolean indicating whether there's more sockets to -+// be queried for. -+// -+// The arg startID specifies that only sockets with id at or above it will be -+// included in the result. The returned slice is up to a length of the arg maxResults -+// or EntryPerPage if maxResults is zero, and is sorted in ascending id order. -+func GetServerSockets(id int64, startID int64, maxResults int64) ([]*SocketMetric, bool) { -+ return db.get().GetServerSockets(id, startID, maxResults) -+} -+ -+// GetChannel returns the ChannelMetric for the channel (identified by id). -+func GetChannel(id int64) *ChannelMetric { -+ return db.get().GetChannel(id) -+} -+ -+// GetSubChannel returns the SubChannelMetric for the subchannel (identified by id). -+func GetSubChannel(id int64) *SubChannelMetric { -+ return db.get().GetSubChannel(id) -+} -+ -+// GetSocket returns the SocketInternalMetric for the socket (identified by id). -+func GetSocket(id int64) *SocketMetric { -+ return db.get().GetSocket(id) -+} -+ -+// GetServer returns the ServerMetric for the server (identified by id). -+func GetServer(id int64) *ServerMetric { -+ return db.get().GetServer(id) -+} -+ -+// RegisterChannel registers the given channel c in the channelz database with -+// ref as its reference name, and adds it to the child list of its parent -+// (identified by pid). pid == nil means no parent. -+// -+// Returns a unique channelz identifier assigned to this channel. -+// -+// If channelz is not turned ON, the channelz database is not mutated. -+func RegisterChannel(c Channel, pid *Identifier, ref string) *Identifier { -+ id := idGen.genID() -+ var parent int64 -+ isTopChannel := true -+ if pid != nil { -+ isTopChannel = false -+ parent = pid.Int() -+ } -+ -+ if !IsOn() { -+ return newIdentifer(RefChannel, id, pid) -+ } -+ -+ cn := &channel{ -+ refName: ref, -+ c: c, -+ subChans: make(map[int64]string), -+ nestedChans: make(map[int64]string), -+ id: id, -+ pid: parent, -+ trace: &channelTrace{createdTime: time.Now(), events: make([]*TraceEvent, 0, getMaxTraceEntry())}, -+ } -+ db.get().addChannel(id, cn, isTopChannel, parent) -+ return newIdentifer(RefChannel, id, pid) -+} -+ -+// RegisterSubChannel registers the given subChannel c in the channelz database -+// with ref as its reference name, and adds it to the child list of its parent -+// (identified by pid). -+// -+// Returns a unique channelz identifier assigned to this subChannel. -+// -+// If channelz is not turned ON, the channelz database is not mutated. -+func RegisterSubChannel(c Channel, pid *Identifier, ref string) (*Identifier, error) { -+ if pid == nil { -+ return nil, errors.New("a SubChannel's parent id cannot be nil") -+ } -+ id := idGen.genID() -+ if !IsOn() { -+ return newIdentifer(RefSubChannel, id, pid), nil -+ } -+ -+ sc := &subChannel{ -+ refName: ref, -+ c: c, -+ sockets: make(map[int64]string), -+ id: id, -+ pid: pid.Int(), -+ trace: &channelTrace{createdTime: time.Now(), events: make([]*TraceEvent, 0, getMaxTraceEntry())}, -+ } -+ db.get().addSubChannel(id, sc, pid.Int()) -+ return newIdentifer(RefSubChannel, id, pid), nil -+} -+ -+// RegisterServer registers the given server s in channelz database. It returns -+// the unique channelz tracking id assigned to this server. -+// -+// If channelz is not turned ON, the channelz database is not mutated. -+func RegisterServer(s Server, ref string) *Identifier { -+ id := idGen.genID() -+ if !IsOn() { -+ return newIdentifer(RefServer, id, nil) -+ } -+ -+ svr := &server{ -+ refName: ref, -+ s: s, -+ sockets: make(map[int64]string), -+ listenSockets: make(map[int64]string), -+ id: id, -+ } -+ db.get().addServer(id, svr) -+ return newIdentifer(RefServer, id, nil) -+} -+ -+// RegisterListenSocket registers the given listen socket s in channelz database -+// with ref as its reference name, and add it to the child list of its parent -+// (identified by pid). It returns the unique channelz tracking id assigned to -+// this listen socket. -+// -+// If channelz is not turned ON, the channelz database is not mutated. -+func RegisterListenSocket(s Socket, pid *Identifier, ref string) (*Identifier, error) { -+ if pid == nil { -+ return nil, errors.New("a ListenSocket's parent id cannot be 0") -+ } -+ id := idGen.genID() -+ if !IsOn() { -+ return newIdentifer(RefListenSocket, id, pid), nil -+ } -+ -+ ls := &listenSocket{refName: ref, s: s, id: id, pid: pid.Int()} -+ db.get().addListenSocket(id, ls, pid.Int()) -+ return newIdentifer(RefListenSocket, id, pid), nil -+} -+ -+// RegisterNormalSocket registers the given normal socket s in channelz database -+// with ref as its reference name, and adds it to the child list of its parent -+// (identified by pid). It returns the unique channelz tracking id assigned to -+// this normal socket. -+// -+// If channelz is not turned ON, the channelz database is not mutated. -+func RegisterNormalSocket(s Socket, pid *Identifier, ref string) (*Identifier, error) { -+ if pid == nil { -+ return nil, errors.New("a NormalSocket's parent id cannot be 0") -+ } -+ id := idGen.genID() -+ if !IsOn() { -+ return newIdentifer(RefNormalSocket, id, pid), nil -+ } -+ -+ ns := &normalSocket{refName: ref, s: s, id: id, pid: pid.Int()} -+ db.get().addNormalSocket(id, ns, pid.Int()) -+ return newIdentifer(RefNormalSocket, id, pid), nil -+} -+ -+// RemoveEntry removes an entry with unique channelz tracking id to be id from -+// channelz database. -+// -+// If channelz is not turned ON, this function is a no-op. -+func RemoveEntry(id *Identifier) { -+ if !IsOn() { -+ return -+ } -+ db.get().removeEntry(id.Int()) -+} -+ -+// TraceEventDesc is what the caller of AddTraceEvent should provide to describe -+// the event to be added to the channel trace. -+// -+// The Parent field is optional. It is used for an event that will be recorded -+// in the entity's parent trace. -+type TraceEventDesc struct { -+ Desc string -+ Severity Severity -+ Parent *TraceEventDesc -+} -+ -+// AddTraceEvent adds trace related to the entity with specified id, using the -+// provided TraceEventDesc. -+// -+// If channelz is not turned ON, this will simply log the event descriptions. -+func AddTraceEvent(l grpclog.DepthLoggerV2, id *Identifier, depth int, desc *TraceEventDesc) { -+ // Log only the trace description associated with the bottom most entity. -+ switch desc.Severity { -+ case CtUnknown, CtInfo: -+ l.InfoDepth(depth+1, withParens(id)+desc.Desc) -+ case CtWarning: -+ l.WarningDepth(depth+1, withParens(id)+desc.Desc) -+ case CtError: -+ l.ErrorDepth(depth+1, withParens(id)+desc.Desc) -+ } -+ -+ if getMaxTraceEntry() == 0 { -+ return -+ } -+ if IsOn() { -+ db.get().traceEvent(id.Int(), desc) -+ } -+} -+ -+// channelMap is the storage data structure for channelz. -+// Methods of channelMap can be divided in two two categories with respect to locking. -+// 1. Methods acquire the global lock. -+// 2. Methods that can only be called when global lock is held. -+// A second type of method need always to be called inside a first type of method. -+type channelMap struct { -+ mu sync.RWMutex -+ topLevelChannels map[int64]struct{} -+ servers map[int64]*server -+ channels map[int64]*channel -+ subChannels map[int64]*subChannel -+ listenSockets map[int64]*listenSocket -+ normalSockets map[int64]*normalSocket -+} -+ -+func newChannelMap() *channelMap { -+ return &channelMap{ -+ topLevelChannels: make(map[int64]struct{}), -+ channels: make(map[int64]*channel), -+ listenSockets: make(map[int64]*listenSocket), -+ normalSockets: make(map[int64]*normalSocket), -+ servers: make(map[int64]*server), -+ subChannels: make(map[int64]*subChannel), -+ } -+} -+ -+func (c *channelMap) addServer(id int64, s *server) { -+ c.mu.Lock() -+ s.cm = c -+ c.servers[id] = s -+ c.mu.Unlock() -+} -+ -+func (c *channelMap) addChannel(id int64, cn *channel, isTopChannel bool, pid int64) { -+ c.mu.Lock() -+ cn.cm = c -+ cn.trace.cm = c -+ c.channels[id] = cn -+ if isTopChannel { -+ c.topLevelChannels[id] = struct{}{} -+ } else { -+ c.findEntry(pid).addChild(id, cn) -+ } -+ c.mu.Unlock() -+} -+ -+func (c *channelMap) addSubChannel(id int64, sc *subChannel, pid int64) { -+ c.mu.Lock() -+ sc.cm = c -+ sc.trace.cm = c -+ c.subChannels[id] = sc -+ c.findEntry(pid).addChild(id, sc) -+ c.mu.Unlock() -+} -+ -+func (c *channelMap) addListenSocket(id int64, ls *listenSocket, pid int64) { -+ c.mu.Lock() -+ ls.cm = c -+ c.listenSockets[id] = ls -+ c.findEntry(pid).addChild(id, ls) -+ c.mu.Unlock() -+} -+ -+func (c *channelMap) addNormalSocket(id int64, ns *normalSocket, pid int64) { -+ c.mu.Lock() -+ ns.cm = c -+ c.normalSockets[id] = ns -+ c.findEntry(pid).addChild(id, ns) -+ c.mu.Unlock() -+} -+ -+// removeEntry triggers the removal of an entry, which may not indeed delete the entry, if it has to -+// wait on the deletion of its children and until no other entity's channel trace references it. -+// It may lead to a chain of entry deletion. For example, deleting the last socket of a gracefully -+// shutting down server will lead to the server being also deleted. -+func (c *channelMap) removeEntry(id int64) { -+ c.mu.Lock() -+ c.findEntry(id).triggerDelete() -+ c.mu.Unlock() -+} -+ -+// c.mu must be held by the caller -+func (c *channelMap) decrTraceRefCount(id int64) { -+ e := c.findEntry(id) -+ if v, ok := e.(tracedChannel); ok { -+ v.decrTraceRefCount() -+ e.deleteSelfIfReady() -+ } -+} -+ -+// c.mu must be held by the caller. -+func (c *channelMap) findEntry(id int64) entry { -+ var v entry -+ var ok bool -+ if v, ok = c.channels[id]; ok { -+ return v -+ } -+ if v, ok = c.subChannels[id]; ok { -+ return v -+ } -+ if v, ok = c.servers[id]; ok { -+ return v -+ } -+ if v, ok = c.listenSockets[id]; ok { -+ return v -+ } -+ if v, ok = c.normalSockets[id]; ok { -+ return v -+ } -+ return &dummyEntry{idNotFound: id} -+} -+ -+// c.mu must be held by the caller -+// deleteEntry simply deletes an entry from the channelMap. Before calling this -+// method, caller must check this entry is ready to be deleted, i.e removeEntry() -+// has been called on it, and no children still exist. -+// Conditionals are ordered by the expected frequency of deletion of each entity -+// type, in order to optimize performance. -+func (c *channelMap) deleteEntry(id int64) { -+ var ok bool -+ if _, ok = c.normalSockets[id]; ok { -+ delete(c.normalSockets, id) -+ return -+ } -+ if _, ok = c.subChannels[id]; ok { -+ delete(c.subChannels, id) -+ return -+ } -+ if _, ok = c.channels[id]; ok { -+ delete(c.channels, id) -+ delete(c.topLevelChannels, id) -+ return -+ } -+ if _, ok = c.listenSockets[id]; ok { -+ delete(c.listenSockets, id) -+ return -+ } -+ if _, ok = c.servers[id]; ok { -+ delete(c.servers, id) -+ return -+ } -+} -+ -+func (c *channelMap) traceEvent(id int64, desc *TraceEventDesc) { -+ c.mu.Lock() -+ child := c.findEntry(id) -+ childTC, ok := child.(tracedChannel) -+ if !ok { -+ c.mu.Unlock() -+ return -+ } -+ childTC.getChannelTrace().append(&TraceEvent{Desc: desc.Desc, Severity: desc.Severity, Timestamp: time.Now()}) -+ if desc.Parent != nil { -+ parent := c.findEntry(child.getParentID()) -+ var chanType RefChannelType -+ switch child.(type) { -+ case *channel: -+ chanType = RefChannel -+ case *subChannel: -+ chanType = RefSubChannel -+ } -+ if parentTC, ok := parent.(tracedChannel); ok { -+ parentTC.getChannelTrace().append(&TraceEvent{ -+ Desc: desc.Parent.Desc, -+ Severity: desc.Parent.Severity, -+ Timestamp: time.Now(), -+ RefID: id, -+ RefName: childTC.getRefName(), -+ RefType: chanType, -+ }) -+ childTC.incrTraceRefCount() -+ } -+ } -+ c.mu.Unlock() -+} -+ -+type int64Slice []int64 -+ -+func (s int64Slice) Len() int { return len(s) } -+func (s int64Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -+func (s int64Slice) Less(i, j int) bool { return s[i] < s[j] } -+ -+func copyMap(m map[int64]string) map[int64]string { -+ n := make(map[int64]string) -+ for k, v := range m { -+ n[k] = v -+ } -+ return n -+} -+ -+func min(a, b int64) int64 { -+ if a < b { -+ return a -+ } -+ return b -+} -+ -+func (c *channelMap) GetTopChannels(id int64, maxResults int64) ([]*ChannelMetric, bool) { -+ if maxResults <= 0 { -+ maxResults = EntryPerPage -+ } -+ c.mu.RLock() -+ l := int64(len(c.topLevelChannels)) -+ ids := make([]int64, 0, l) -+ cns := make([]*channel, 0, min(l, maxResults)) -+ -+ for k := range c.topLevelChannels { -+ ids = append(ids, k) -+ } -+ sort.Sort(int64Slice(ids)) -+ idx := sort.Search(len(ids), func(i int) bool { return ids[i] >= id }) -+ count := int64(0) -+ var end bool -+ var t []*ChannelMetric -+ for i, v := range ids[idx:] { -+ if count == maxResults { -+ break -+ } -+ if cn, ok := c.channels[v]; ok { -+ cns = append(cns, cn) -+ t = append(t, &ChannelMetric{ -+ NestedChans: copyMap(cn.nestedChans), -+ SubChans: copyMap(cn.subChans), -+ }) -+ count++ -+ } -+ if i == len(ids[idx:])-1 { -+ end = true -+ break -+ } -+ } -+ c.mu.RUnlock() -+ if count == 0 { -+ end = true -+ } -+ -+ for i, cn := range cns { -+ t[i].ChannelData = cn.c.ChannelzMetric() -+ t[i].ID = cn.id -+ t[i].RefName = cn.refName -+ t[i].Trace = cn.trace.dumpData() -+ } -+ return t, end -+} -+ -+func (c *channelMap) GetServers(id, maxResults int64) ([]*ServerMetric, bool) { -+ if maxResults <= 0 { -+ maxResults = EntryPerPage -+ } -+ c.mu.RLock() -+ l := int64(len(c.servers)) -+ ids := make([]int64, 0, l) -+ ss := make([]*server, 0, min(l, maxResults)) -+ for k := range c.servers { -+ ids = append(ids, k) -+ } -+ sort.Sort(int64Slice(ids)) -+ idx := sort.Search(len(ids), func(i int) bool { return ids[i] >= id }) -+ count := int64(0) -+ var end bool -+ var s []*ServerMetric -+ for i, v := range ids[idx:] { -+ if count == maxResults { -+ break -+ } -+ if svr, ok := c.servers[v]; ok { -+ ss = append(ss, svr) -+ s = append(s, &ServerMetric{ -+ ListenSockets: copyMap(svr.listenSockets), -+ }) -+ count++ -+ } -+ if i == len(ids[idx:])-1 { -+ end = true -+ break -+ } -+ } -+ c.mu.RUnlock() -+ if count == 0 { -+ end = true -+ } -+ -+ for i, svr := range ss { -+ s[i].ServerData = svr.s.ChannelzMetric() -+ s[i].ID = svr.id -+ s[i].RefName = svr.refName -+ } -+ return s, end -+} -+ -+func (c *channelMap) GetServerSockets(id int64, startID int64, maxResults int64) ([]*SocketMetric, bool) { -+ if maxResults <= 0 { -+ maxResults = EntryPerPage -+ } -+ var svr *server -+ var ok bool -+ c.mu.RLock() -+ if svr, ok = c.servers[id]; !ok { -+ // server with id doesn't exist. -+ c.mu.RUnlock() -+ return nil, true -+ } -+ svrskts := svr.sockets -+ l := int64(len(svrskts)) -+ ids := make([]int64, 0, l) -+ sks := make([]*normalSocket, 0, min(l, maxResults)) -+ for k := range svrskts { -+ ids = append(ids, k) -+ } -+ sort.Sort(int64Slice(ids)) -+ idx := sort.Search(len(ids), func(i int) bool { return ids[i] >= startID }) -+ count := int64(0) -+ var end bool -+ for i, v := range ids[idx:] { -+ if count == maxResults { -+ break -+ } -+ if ns, ok := c.normalSockets[v]; ok { -+ sks = append(sks, ns) -+ count++ -+ } -+ if i == len(ids[idx:])-1 { -+ end = true -+ break -+ } -+ } -+ c.mu.RUnlock() -+ if count == 0 { -+ end = true -+ } -+ s := make([]*SocketMetric, 0, len(sks)) -+ for _, ns := range sks { -+ sm := &SocketMetric{} -+ sm.SocketData = ns.s.ChannelzMetric() -+ sm.ID = ns.id -+ sm.RefName = ns.refName -+ s = append(s, sm) -+ } -+ return s, end -+} -+ -+func (c *channelMap) GetChannel(id int64) *ChannelMetric { -+ cm := &ChannelMetric{} -+ var cn *channel -+ var ok bool -+ c.mu.RLock() -+ if cn, ok = c.channels[id]; !ok { -+ // channel with id doesn't exist. -+ c.mu.RUnlock() -+ return nil -+ } -+ cm.NestedChans = copyMap(cn.nestedChans) -+ cm.SubChans = copyMap(cn.subChans) -+ // cn.c can be set to &dummyChannel{} when deleteSelfFromMap is called. Save a copy of cn.c when -+ // holding the lock to prevent potential data race. -+ chanCopy := cn.c -+ c.mu.RUnlock() -+ cm.ChannelData = chanCopy.ChannelzMetric() -+ cm.ID = cn.id -+ cm.RefName = cn.refName -+ cm.Trace = cn.trace.dumpData() -+ return cm -+} -+ -+func (c *channelMap) GetSubChannel(id int64) *SubChannelMetric { -+ cm := &SubChannelMetric{} -+ var sc *subChannel -+ var ok bool -+ c.mu.RLock() -+ if sc, ok = c.subChannels[id]; !ok { -+ // subchannel with id doesn't exist. -+ c.mu.RUnlock() -+ return nil -+ } -+ cm.Sockets = copyMap(sc.sockets) -+ // sc.c can be set to &dummyChannel{} when deleteSelfFromMap is called. Save a copy of sc.c when -+ // holding the lock to prevent potential data race. -+ chanCopy := sc.c -+ c.mu.RUnlock() -+ cm.ChannelData = chanCopy.ChannelzMetric() -+ cm.ID = sc.id -+ cm.RefName = sc.refName -+ cm.Trace = sc.trace.dumpData() -+ return cm -+} -+ -+func (c *channelMap) GetSocket(id int64) *SocketMetric { -+ sm := &SocketMetric{} -+ c.mu.RLock() -+ if ls, ok := c.listenSockets[id]; ok { -+ c.mu.RUnlock() -+ sm.SocketData = ls.s.ChannelzMetric() -+ sm.ID = ls.id -+ sm.RefName = ls.refName -+ return sm -+ } -+ if ns, ok := c.normalSockets[id]; ok { -+ c.mu.RUnlock() -+ sm.SocketData = ns.s.ChannelzMetric() -+ sm.ID = ns.id -+ sm.RefName = ns.refName -+ return sm -+ } -+ c.mu.RUnlock() -+ return nil -+} -+ -+func (c *channelMap) GetServer(id int64) *ServerMetric { -+ sm := &ServerMetric{} -+ var svr *server -+ var ok bool -+ c.mu.RLock() -+ if svr, ok = c.servers[id]; !ok { -+ c.mu.RUnlock() -+ return nil -+ } -+ sm.ListenSockets = copyMap(svr.listenSockets) -+ c.mu.RUnlock() -+ sm.ID = svr.id -+ sm.RefName = svr.refName -+ sm.ServerData = svr.s.ChannelzMetric() -+ return sm -+} -+ -+type idGenerator struct { -+ id int64 -+} -+ -+func (i *idGenerator) reset() { -+ atomic.StoreInt64(&i.id, 0) -+} -+ -+func (i *idGenerator) genID() int64 { -+ return atomic.AddInt64(&i.id, 1) -+} -diff --git a/vendor/google.golang.org/grpc/internal/channelz/id.go b/vendor/google.golang.org/grpc/internal/channelz/id.go -new file mode 100755 -index 0000000..c9a27ac ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/channelz/id.go -@@ -0,0 +1,75 @@ -+/* -+ * -+ * Copyright 2022 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package channelz -+ -+import "fmt" -+ -+// Identifier is an opaque identifier which uniquely identifies an entity in the -+// channelz database. -+type Identifier struct { -+ typ RefChannelType -+ id int64 -+ str string -+ pid *Identifier -+} -+ -+// Type returns the entity type corresponding to id. -+func (id *Identifier) Type() RefChannelType { -+ return id.typ -+} -+ -+// Int returns the integer identifier corresponding to id. -+func (id *Identifier) Int() int64 { -+ return id.id -+} -+ -+// String returns a string representation of the entity corresponding to id. -+// -+// This includes some information about the parent as well. Examples: -+// Top-level channel: [Channel #channel-number] -+// Nested channel: [Channel #parent-channel-number Channel #channel-number] -+// Sub channel: [Channel #parent-channel SubChannel #subchannel-number] -+func (id *Identifier) String() string { -+ return id.str -+} -+ -+// Equal returns true if other is the same as id. -+func (id *Identifier) Equal(other *Identifier) bool { -+ if (id != nil) != (other != nil) { -+ return false -+ } -+ if id == nil && other == nil { -+ return true -+ } -+ return id.typ == other.typ && id.id == other.id && id.pid == other.pid -+} -+ -+// NewIdentifierForTesting returns a new opaque identifier to be used only for -+// testing purposes. -+func NewIdentifierForTesting(typ RefChannelType, id int64, pid *Identifier) *Identifier { -+ return newIdentifer(typ, id, pid) -+} -+ -+func newIdentifer(typ RefChannelType, id int64, pid *Identifier) *Identifier { -+ str := fmt.Sprintf("%s #%d", typ, id) -+ if pid != nil { -+ str = fmt.Sprintf("%s %s", pid, str) -+ } -+ return &Identifier{typ: typ, id: id, str: str, pid: pid} -+} -diff --git a/vendor/google.golang.org/grpc/internal/channelz/logging.go b/vendor/google.golang.org/grpc/internal/channelz/logging.go -new file mode 100755 -index 0000000..8e13a3d ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/channelz/logging.go -@@ -0,0 +1,79 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package channelz -+ -+import ( -+ "fmt" -+ -+ "google.golang.org/grpc/grpclog" -+) -+ -+var logger = grpclog.Component("channelz") -+ -+func withParens(id *Identifier) string { -+ return "[" + id.String() + "] " -+} -+ -+// Info logs and adds a trace event if channelz is on. -+func Info(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { -+ AddTraceEvent(l, id, 1, &TraceEventDesc{ -+ Desc: fmt.Sprint(args...), -+ Severity: CtInfo, -+ }) -+} -+ -+// Infof logs and adds a trace event if channelz is on. -+func Infof(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) { -+ AddTraceEvent(l, id, 1, &TraceEventDesc{ -+ Desc: fmt.Sprintf(format, args...), -+ Severity: CtInfo, -+ }) -+} -+ -+// Warning logs and adds a trace event if channelz is on. -+func Warning(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { -+ AddTraceEvent(l, id, 1, &TraceEventDesc{ -+ Desc: fmt.Sprint(args...), -+ Severity: CtWarning, -+ }) -+} -+ -+// Warningf logs and adds a trace event if channelz is on. -+func Warningf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) { -+ AddTraceEvent(l, id, 1, &TraceEventDesc{ -+ Desc: fmt.Sprintf(format, args...), -+ Severity: CtWarning, -+ }) -+} -+ -+// Error logs and adds a trace event if channelz is on. -+func Error(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { -+ AddTraceEvent(l, id, 1, &TraceEventDesc{ -+ Desc: fmt.Sprint(args...), -+ Severity: CtError, -+ }) -+} -+ -+// Errorf logs and adds a trace event if channelz is on. -+func Errorf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) { -+ AddTraceEvent(l, id, 1, &TraceEventDesc{ -+ Desc: fmt.Sprintf(format, args...), -+ Severity: CtError, -+ }) -+} -diff --git a/vendor/google.golang.org/grpc/internal/channelz/types.go b/vendor/google.golang.org/grpc/internal/channelz/types.go -new file mode 100755 -index 0000000..7b2f350 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/channelz/types.go -@@ -0,0 +1,722 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package channelz -+ -+import ( -+ "net" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "google.golang.org/grpc/connectivity" -+ "google.golang.org/grpc/credentials" -+) -+ -+// entry represents a node in the channelz database. -+type entry interface { -+ // addChild adds a child e, whose channelz id is id to child list -+ addChild(id int64, e entry) -+ // deleteChild deletes a child with channelz id to be id from child list -+ deleteChild(id int64) -+ // triggerDelete tries to delete self from channelz database. However, if child -+ // list is not empty, then deletion from the database is on hold until the last -+ // child is deleted from database. -+ triggerDelete() -+ // deleteSelfIfReady check whether triggerDelete() has been called before, and whether child -+ // list is now empty. If both conditions are met, then delete self from database. -+ deleteSelfIfReady() -+ // getParentID returns parent ID of the entry. 0 value parent ID means no parent. -+ getParentID() int64 -+} -+ -+// dummyEntry is a fake entry to handle entry not found case. -+type dummyEntry struct { -+ idNotFound int64 -+} -+ -+func (d *dummyEntry) addChild(id int64, e entry) { -+ // Note: It is possible for a normal program to reach here under race condition. -+ // For example, there could be a race between ClientConn.Close() info being propagated -+ // to addrConn and http2Client. ClientConn.Close() cancel the context and result -+ // in http2Client to error. The error info is then caught by transport monitor -+ // and before addrConn.tearDown() is called in side ClientConn.Close(). Therefore, -+ // the addrConn will create a new transport. And when registering the new transport in -+ // channelz, its parent addrConn could have already been torn down and deleted -+ // from channelz tracking, and thus reach the code here. -+ logger.Infof("attempt to add child of type %T with id %d to a parent (id=%d) that doesn't currently exist", e, id, d.idNotFound) -+} -+ -+func (d *dummyEntry) deleteChild(id int64) { -+ // It is possible for a normal program to reach here under race condition. -+ // Refer to the example described in addChild(). -+ logger.Infof("attempt to delete child with id %d from a parent (id=%d) that doesn't currently exist", id, d.idNotFound) -+} -+ -+func (d *dummyEntry) triggerDelete() { -+ logger.Warningf("attempt to delete an entry (id=%d) that doesn't currently exist", d.idNotFound) -+} -+ -+func (*dummyEntry) deleteSelfIfReady() { -+ // code should not reach here. deleteSelfIfReady is always called on an existing entry. -+} -+ -+func (*dummyEntry) getParentID() int64 { -+ return 0 -+} -+ -+// ChannelMetric defines the info channelz provides for a specific Channel, which -+// includes ChannelInternalMetric and channelz-specific data, such as channelz id, -+// child list, etc. -+type ChannelMetric struct { -+ // ID is the channelz id of this channel. -+ ID int64 -+ // RefName is the human readable reference string of this channel. -+ RefName string -+ // ChannelData contains channel internal metric reported by the channel through -+ // ChannelzMetric(). -+ ChannelData *ChannelInternalMetric -+ // NestedChans tracks the nested channel type children of this channel in the format of -+ // a map from nested channel channelz id to corresponding reference string. -+ NestedChans map[int64]string -+ // SubChans tracks the subchannel type children of this channel in the format of a -+ // map from subchannel channelz id to corresponding reference string. -+ SubChans map[int64]string -+ // Sockets tracks the socket type children of this channel in the format of a map -+ // from socket channelz id to corresponding reference string. -+ // Note current grpc implementation doesn't allow channel having sockets directly, -+ // therefore, this is field is unused. -+ Sockets map[int64]string -+ // Trace contains the most recent traced events. -+ Trace *ChannelTrace -+} -+ -+// SubChannelMetric defines the info channelz provides for a specific SubChannel, -+// which includes ChannelInternalMetric and channelz-specific data, such as -+// channelz id, child list, etc. -+type SubChannelMetric struct { -+ // ID is the channelz id of this subchannel. -+ ID int64 -+ // RefName is the human readable reference string of this subchannel. -+ RefName string -+ // ChannelData contains subchannel internal metric reported by the subchannel -+ // through ChannelzMetric(). -+ ChannelData *ChannelInternalMetric -+ // NestedChans tracks the nested channel type children of this subchannel in the format of -+ // a map from nested channel channelz id to corresponding reference string. -+ // Note current grpc implementation doesn't allow subchannel to have nested channels -+ // as children, therefore, this field is unused. -+ NestedChans map[int64]string -+ // SubChans tracks the subchannel type children of this subchannel in the format of a -+ // map from subchannel channelz id to corresponding reference string. -+ // Note current grpc implementation doesn't allow subchannel to have subchannels -+ // as children, therefore, this field is unused. -+ SubChans map[int64]string -+ // Sockets tracks the socket type children of this subchannel in the format of a map -+ // from socket channelz id to corresponding reference string. -+ Sockets map[int64]string -+ // Trace contains the most recent traced events. -+ Trace *ChannelTrace -+} -+ -+// ChannelInternalMetric defines the struct that the implementor of Channel interface -+// should return from ChannelzMetric(). -+type ChannelInternalMetric struct { -+ // current connectivity state of the channel. -+ State connectivity.State -+ // The target this channel originally tried to connect to. May be absent -+ Target string -+ // The number of calls started on the channel. -+ CallsStarted int64 -+ // The number of calls that have completed with an OK status. -+ CallsSucceeded int64 -+ // The number of calls that have a completed with a non-OK status. -+ CallsFailed int64 -+ // The last time a call was started on the channel. -+ LastCallStartedTimestamp time.Time -+} -+ -+// ChannelTrace stores traced events on a channel/subchannel and related info. -+type ChannelTrace struct { -+ // EventNum is the number of events that ever got traced (i.e. including those that have been deleted) -+ EventNum int64 -+ // CreationTime is the creation time of the trace. -+ CreationTime time.Time -+ // Events stores the most recent trace events (up to $maxTraceEntry, newer event will overwrite the -+ // oldest one) -+ Events []*TraceEvent -+} -+ -+// TraceEvent represent a single trace event -+type TraceEvent struct { -+ // Desc is a simple description of the trace event. -+ Desc string -+ // Severity states the severity of this trace event. -+ Severity Severity -+ // Timestamp is the event time. -+ Timestamp time.Time -+ // RefID is the id of the entity that gets referenced in the event. RefID is 0 if no other entity is -+ // involved in this event. -+ // e.g. SubChannel (id: 4[]) Created. --> RefID = 4, RefName = "" (inside []) -+ RefID int64 -+ // RefName is the reference name for the entity that gets referenced in the event. -+ RefName string -+ // RefType indicates the referenced entity type, i.e Channel or SubChannel. -+ RefType RefChannelType -+} -+ -+// Channel is the interface that should be satisfied in order to be tracked by -+// channelz as Channel or SubChannel. -+type Channel interface { -+ ChannelzMetric() *ChannelInternalMetric -+} -+ -+type dummyChannel struct{} -+ -+func (d *dummyChannel) ChannelzMetric() *ChannelInternalMetric { -+ return &ChannelInternalMetric{} -+} -+ -+type channel struct { -+ refName string -+ c Channel -+ closeCalled bool -+ nestedChans map[int64]string -+ subChans map[int64]string -+ id int64 -+ pid int64 -+ cm *channelMap -+ trace *channelTrace -+ // traceRefCount is the number of trace events that reference this channel. -+ // Non-zero traceRefCount means the trace of this channel cannot be deleted. -+ traceRefCount int32 -+} -+ -+func (c *channel) addChild(id int64, e entry) { -+ switch v := e.(type) { -+ case *subChannel: -+ c.subChans[id] = v.refName -+ case *channel: -+ c.nestedChans[id] = v.refName -+ default: -+ logger.Errorf("cannot add a child (id = %d) of type %T to a channel", id, e) -+ } -+} -+ -+func (c *channel) deleteChild(id int64) { -+ delete(c.subChans, id) -+ delete(c.nestedChans, id) -+ c.deleteSelfIfReady() -+} -+ -+func (c *channel) triggerDelete() { -+ c.closeCalled = true -+ c.deleteSelfIfReady() -+} -+ -+func (c *channel) getParentID() int64 { -+ return c.pid -+} -+ -+// deleteSelfFromTree tries to delete the channel from the channelz entry relation tree, which means -+// deleting the channel reference from its parent's child list. -+// -+// In order for a channel to be deleted from the tree, it must meet the criteria that, removal of the -+// corresponding grpc object has been invoked, and the channel does not have any children left. -+// -+// The returned boolean value indicates whether the channel has been successfully deleted from tree. -+func (c *channel) deleteSelfFromTree() (deleted bool) { -+ if !c.closeCalled || len(c.subChans)+len(c.nestedChans) != 0 { -+ return false -+ } -+ // not top channel -+ if c.pid != 0 { -+ c.cm.findEntry(c.pid).deleteChild(c.id) -+ } -+ return true -+} -+ -+// deleteSelfFromMap checks whether it is valid to delete the channel from the map, which means -+// deleting the channel from channelz's tracking entirely. Users can no longer use id to query the -+// channel, and its memory will be garbage collected. -+// -+// The trace reference count of the channel must be 0 in order to be deleted from the map. This is -+// specified in the channel tracing gRFC that as long as some other trace has reference to an entity, -+// the trace of the referenced entity must not be deleted. In order to release the resource allocated -+// by grpc, the reference to the grpc object is reset to a dummy object. -+// -+// deleteSelfFromMap must be called after deleteSelfFromTree returns true. -+// -+// It returns a bool to indicate whether the channel can be safely deleted from map. -+func (c *channel) deleteSelfFromMap() (delete bool) { -+ if c.getTraceRefCount() != 0 { -+ c.c = &dummyChannel{} -+ return false -+ } -+ return true -+} -+ -+// deleteSelfIfReady tries to delete the channel itself from the channelz database. -+// The delete process includes two steps: -+// 1. delete the channel from the entry relation tree, i.e. delete the channel reference from its -+// parent's child list. -+// 2. delete the channel from the map, i.e. delete the channel entirely from channelz. Lookup by id -+// will return entry not found error. -+func (c *channel) deleteSelfIfReady() { -+ if !c.deleteSelfFromTree() { -+ return -+ } -+ if !c.deleteSelfFromMap() { -+ return -+ } -+ c.cm.deleteEntry(c.id) -+ c.trace.clear() -+} -+ -+func (c *channel) getChannelTrace() *channelTrace { -+ return c.trace -+} -+ -+func (c *channel) incrTraceRefCount() { -+ atomic.AddInt32(&c.traceRefCount, 1) -+} -+ -+func (c *channel) decrTraceRefCount() { -+ atomic.AddInt32(&c.traceRefCount, -1) -+} -+ -+func (c *channel) getTraceRefCount() int { -+ i := atomic.LoadInt32(&c.traceRefCount) -+ return int(i) -+} -+ -+func (c *channel) getRefName() string { -+ return c.refName -+} -+ -+type subChannel struct { -+ refName string -+ c Channel -+ closeCalled bool -+ sockets map[int64]string -+ id int64 -+ pid int64 -+ cm *channelMap -+ trace *channelTrace -+ traceRefCount int32 -+} -+ -+func (sc *subChannel) addChild(id int64, e entry) { -+ if v, ok := e.(*normalSocket); ok { -+ sc.sockets[id] = v.refName -+ } else { -+ logger.Errorf("cannot add a child (id = %d) of type %T to a subChannel", id, e) -+ } -+} -+ -+func (sc *subChannel) deleteChild(id int64) { -+ delete(sc.sockets, id) -+ sc.deleteSelfIfReady() -+} -+ -+func (sc *subChannel) triggerDelete() { -+ sc.closeCalled = true -+ sc.deleteSelfIfReady() -+} -+ -+func (sc *subChannel) getParentID() int64 { -+ return sc.pid -+} -+ -+// deleteSelfFromTree tries to delete the subchannel from the channelz entry relation tree, which -+// means deleting the subchannel reference from its parent's child list. -+// -+// In order for a subchannel to be deleted from the tree, it must meet the criteria that, removal of -+// the corresponding grpc object has been invoked, and the subchannel does not have any children left. -+// -+// The returned boolean value indicates whether the channel has been successfully deleted from tree. -+func (sc *subChannel) deleteSelfFromTree() (deleted bool) { -+ if !sc.closeCalled || len(sc.sockets) != 0 { -+ return false -+ } -+ sc.cm.findEntry(sc.pid).deleteChild(sc.id) -+ return true -+} -+ -+// deleteSelfFromMap checks whether it is valid to delete the subchannel from the map, which means -+// deleting the subchannel from channelz's tracking entirely. Users can no longer use id to query -+// the subchannel, and its memory will be garbage collected. -+// -+// The trace reference count of the subchannel must be 0 in order to be deleted from the map. This is -+// specified in the channel tracing gRFC that as long as some other trace has reference to an entity, -+// the trace of the referenced entity must not be deleted. In order to release the resource allocated -+// by grpc, the reference to the grpc object is reset to a dummy object. -+// -+// deleteSelfFromMap must be called after deleteSelfFromTree returns true. -+// -+// It returns a bool to indicate whether the channel can be safely deleted from map. -+func (sc *subChannel) deleteSelfFromMap() (delete bool) { -+ if sc.getTraceRefCount() != 0 { -+ // free the grpc struct (i.e. addrConn) -+ sc.c = &dummyChannel{} -+ return false -+ } -+ return true -+} -+ -+// deleteSelfIfReady tries to delete the subchannel itself from the channelz database. -+// The delete process includes two steps: -+// 1. delete the subchannel from the entry relation tree, i.e. delete the subchannel reference from -+// its parent's child list. -+// 2. delete the subchannel from the map, i.e. delete the subchannel entirely from channelz. Lookup -+// by id will return entry not found error. -+func (sc *subChannel) deleteSelfIfReady() { -+ if !sc.deleteSelfFromTree() { -+ return -+ } -+ if !sc.deleteSelfFromMap() { -+ return -+ } -+ sc.cm.deleteEntry(sc.id) -+ sc.trace.clear() -+} -+ -+func (sc *subChannel) getChannelTrace() *channelTrace { -+ return sc.trace -+} -+ -+func (sc *subChannel) incrTraceRefCount() { -+ atomic.AddInt32(&sc.traceRefCount, 1) -+} -+ -+func (sc *subChannel) decrTraceRefCount() { -+ atomic.AddInt32(&sc.traceRefCount, -1) -+} -+ -+func (sc *subChannel) getTraceRefCount() int { -+ i := atomic.LoadInt32(&sc.traceRefCount) -+ return int(i) -+} -+ -+func (sc *subChannel) getRefName() string { -+ return sc.refName -+} -+ -+// SocketMetric defines the info channelz provides for a specific Socket, which -+// includes SocketInternalMetric and channelz-specific data, such as channelz id, etc. -+type SocketMetric struct { -+ // ID is the channelz id of this socket. -+ ID int64 -+ // RefName is the human readable reference string of this socket. -+ RefName string -+ // SocketData contains socket internal metric reported by the socket through -+ // ChannelzMetric(). -+ SocketData *SocketInternalMetric -+} -+ -+// SocketInternalMetric defines the struct that the implementor of Socket interface -+// should return from ChannelzMetric(). -+type SocketInternalMetric struct { -+ // The number of streams that have been started. -+ StreamsStarted int64 -+ // The number of streams that have ended successfully: -+ // On client side, receiving frame with eos bit set. -+ // On server side, sending frame with eos bit set. -+ StreamsSucceeded int64 -+ // The number of streams that have ended unsuccessfully: -+ // On client side, termination without receiving frame with eos bit set. -+ // On server side, termination without sending frame with eos bit set. -+ StreamsFailed int64 -+ // The number of messages successfully sent on this socket. -+ MessagesSent int64 -+ MessagesReceived int64 -+ // The number of keep alives sent. This is typically implemented with HTTP/2 -+ // ping messages. -+ KeepAlivesSent int64 -+ // The last time a stream was created by this endpoint. Usually unset for -+ // servers. -+ LastLocalStreamCreatedTimestamp time.Time -+ // The last time a stream was created by the remote endpoint. Usually unset -+ // for clients. -+ LastRemoteStreamCreatedTimestamp time.Time -+ // The last time a message was sent by this endpoint. -+ LastMessageSentTimestamp time.Time -+ // The last time a message was received by this endpoint. -+ LastMessageReceivedTimestamp time.Time -+ // The amount of window, granted to the local endpoint by the remote endpoint. -+ // This may be slightly out of date due to network latency. This does NOT -+ // include stream level or TCP level flow control info. -+ LocalFlowControlWindow int64 -+ // The amount of window, granted to the remote endpoint by the local endpoint. -+ // This may be slightly out of date due to network latency. This does NOT -+ // include stream level or TCP level flow control info. -+ RemoteFlowControlWindow int64 -+ // The locally bound address. -+ LocalAddr net.Addr -+ // The remote bound address. May be absent. -+ RemoteAddr net.Addr -+ // Optional, represents the name of the remote endpoint, if different than -+ // the original target name. -+ RemoteName string -+ SocketOptions *SocketOptionData -+ Security credentials.ChannelzSecurityValue -+} -+ -+// Socket is the interface that should be satisfied in order to be tracked by -+// channelz as Socket. -+type Socket interface { -+ ChannelzMetric() *SocketInternalMetric -+} -+ -+type listenSocket struct { -+ refName string -+ s Socket -+ id int64 -+ pid int64 -+ cm *channelMap -+} -+ -+func (ls *listenSocket) addChild(id int64, e entry) { -+ logger.Errorf("cannot add a child (id = %d) of type %T to a listen socket", id, e) -+} -+ -+func (ls *listenSocket) deleteChild(id int64) { -+ logger.Errorf("cannot delete a child (id = %d) from a listen socket", id) -+} -+ -+func (ls *listenSocket) triggerDelete() { -+ ls.cm.deleteEntry(ls.id) -+ ls.cm.findEntry(ls.pid).deleteChild(ls.id) -+} -+ -+func (ls *listenSocket) deleteSelfIfReady() { -+ logger.Errorf("cannot call deleteSelfIfReady on a listen socket") -+} -+ -+func (ls *listenSocket) getParentID() int64 { -+ return ls.pid -+} -+ -+type normalSocket struct { -+ refName string -+ s Socket -+ id int64 -+ pid int64 -+ cm *channelMap -+} -+ -+func (ns *normalSocket) addChild(id int64, e entry) { -+ logger.Errorf("cannot add a child (id = %d) of type %T to a normal socket", id, e) -+} -+ -+func (ns *normalSocket) deleteChild(id int64) { -+ logger.Errorf("cannot delete a child (id = %d) from a normal socket", id) -+} -+ -+func (ns *normalSocket) triggerDelete() { -+ ns.cm.deleteEntry(ns.id) -+ ns.cm.findEntry(ns.pid).deleteChild(ns.id) -+} -+ -+func (ns *normalSocket) deleteSelfIfReady() { -+ logger.Errorf("cannot call deleteSelfIfReady on a normal socket") -+} -+ -+func (ns *normalSocket) getParentID() int64 { -+ return ns.pid -+} -+ -+// ServerMetric defines the info channelz provides for a specific Server, which -+// includes ServerInternalMetric and channelz-specific data, such as channelz id, -+// child list, etc. -+type ServerMetric struct { -+ // ID is the channelz id of this server. -+ ID int64 -+ // RefName is the human readable reference string of this server. -+ RefName string -+ // ServerData contains server internal metric reported by the server through -+ // ChannelzMetric(). -+ ServerData *ServerInternalMetric -+ // ListenSockets tracks the listener socket type children of this server in the -+ // format of a map from socket channelz id to corresponding reference string. -+ ListenSockets map[int64]string -+} -+ -+// ServerInternalMetric defines the struct that the implementor of Server interface -+// should return from ChannelzMetric(). -+type ServerInternalMetric struct { -+ // The number of incoming calls started on the server. -+ CallsStarted int64 -+ // The number of incoming calls that have completed with an OK status. -+ CallsSucceeded int64 -+ // The number of incoming calls that have a completed with a non-OK status. -+ CallsFailed int64 -+ // The last time a call was started on the server. -+ LastCallStartedTimestamp time.Time -+} -+ -+// Server is the interface to be satisfied in order to be tracked by channelz as -+// Server. -+type Server interface { -+ ChannelzMetric() *ServerInternalMetric -+} -+ -+type server struct { -+ refName string -+ s Server -+ closeCalled bool -+ sockets map[int64]string -+ listenSockets map[int64]string -+ id int64 -+ cm *channelMap -+} -+ -+func (s *server) addChild(id int64, e entry) { -+ switch v := e.(type) { -+ case *normalSocket: -+ s.sockets[id] = v.refName -+ case *listenSocket: -+ s.listenSockets[id] = v.refName -+ default: -+ logger.Errorf("cannot add a child (id = %d) of type %T to a server", id, e) -+ } -+} -+ -+func (s *server) deleteChild(id int64) { -+ delete(s.sockets, id) -+ delete(s.listenSockets, id) -+ s.deleteSelfIfReady() -+} -+ -+func (s *server) triggerDelete() { -+ s.closeCalled = true -+ s.deleteSelfIfReady() -+} -+ -+func (s *server) deleteSelfIfReady() { -+ if !s.closeCalled || len(s.sockets)+len(s.listenSockets) != 0 { -+ return -+ } -+ s.cm.deleteEntry(s.id) -+} -+ -+func (s *server) getParentID() int64 { -+ return 0 -+} -+ -+type tracedChannel interface { -+ getChannelTrace() *channelTrace -+ incrTraceRefCount() -+ decrTraceRefCount() -+ getRefName() string -+} -+ -+type channelTrace struct { -+ cm *channelMap -+ createdTime time.Time -+ eventCount int64 -+ mu sync.Mutex -+ events []*TraceEvent -+} -+ -+func (c *channelTrace) append(e *TraceEvent) { -+ c.mu.Lock() -+ if len(c.events) == getMaxTraceEntry() { -+ del := c.events[0] -+ c.events = c.events[1:] -+ if del.RefID != 0 { -+ // start recursive cleanup in a goroutine to not block the call originated from grpc. -+ go func() { -+ // need to acquire c.cm.mu lock to call the unlocked attemptCleanup func. -+ c.cm.mu.Lock() -+ c.cm.decrTraceRefCount(del.RefID) -+ c.cm.mu.Unlock() -+ }() -+ } -+ } -+ e.Timestamp = time.Now() -+ c.events = append(c.events, e) -+ c.eventCount++ -+ c.mu.Unlock() -+} -+ -+func (c *channelTrace) clear() { -+ c.mu.Lock() -+ for _, e := range c.events { -+ if e.RefID != 0 { -+ // caller should have already held the c.cm.mu lock. -+ c.cm.decrTraceRefCount(e.RefID) -+ } -+ } -+ c.mu.Unlock() -+} -+ -+// Severity is the severity level of a trace event. -+// The canonical enumeration of all valid values is here: -+// https://github.com/grpc/grpc-proto/blob/9b13d199cc0d4703c7ea26c9c330ba695866eb23/grpc/channelz/v1/channelz.proto#L126. -+type Severity int -+ -+const ( -+ // CtUnknown indicates unknown severity of a trace event. -+ CtUnknown Severity = iota -+ // CtInfo indicates info level severity of a trace event. -+ CtInfo -+ // CtWarning indicates warning level severity of a trace event. -+ CtWarning -+ // CtError indicates error level severity of a trace event. -+ CtError -+) -+ -+// RefChannelType is the type of the entity being referenced in a trace event. -+type RefChannelType int -+ -+const ( -+ // RefUnknown indicates an unknown entity type, the zero value for this type. -+ RefUnknown RefChannelType = iota -+ // RefChannel indicates the referenced entity is a Channel. -+ RefChannel -+ // RefSubChannel indicates the referenced entity is a SubChannel. -+ RefSubChannel -+ // RefServer indicates the referenced entity is a Server. -+ RefServer -+ // RefListenSocket indicates the referenced entity is a ListenSocket. -+ RefListenSocket -+ // RefNormalSocket indicates the referenced entity is a NormalSocket. -+ RefNormalSocket -+) -+ -+var refChannelTypeToString = map[RefChannelType]string{ -+ RefUnknown: "Unknown", -+ RefChannel: "Channel", -+ RefSubChannel: "SubChannel", -+ RefServer: "Server", -+ RefListenSocket: "ListenSocket", -+ RefNormalSocket: "NormalSocket", -+} -+ -+func (r RefChannelType) String() string { -+ return refChannelTypeToString[r] -+} -+ -+func (c *channelTrace) dumpData() *ChannelTrace { -+ c.mu.Lock() -+ ct := &ChannelTrace{EventNum: c.eventCount, CreationTime: c.createdTime} -+ ct.Events = c.events[:len(c.events)] -+ c.mu.Unlock() -+ return ct -+} -diff --git a/vendor/google.golang.org/grpc/internal/channelz/types_linux.go b/vendor/google.golang.org/grpc/internal/channelz/types_linux.go -new file mode 100755 -index 0000000..1b1c4cc ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/channelz/types_linux.go -@@ -0,0 +1,51 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package channelz -+ -+import ( -+ "syscall" -+ -+ "golang.org/x/sys/unix" -+) -+ -+// SocketOptionData defines the struct to hold socket option data, and related -+// getter function to obtain info from fd. -+type SocketOptionData struct { -+ Linger *unix.Linger -+ RecvTimeout *unix.Timeval -+ SendTimeout *unix.Timeval -+ TCPInfo *unix.TCPInfo -+} -+ -+// Getsockopt defines the function to get socket options requested by channelz. -+// It is to be passed to syscall.RawConn.Control(). -+func (s *SocketOptionData) Getsockopt(fd uintptr) { -+ if v, err := unix.GetsockoptLinger(int(fd), syscall.SOL_SOCKET, syscall.SO_LINGER); err == nil { -+ s.Linger = v -+ } -+ if v, err := unix.GetsockoptTimeval(int(fd), syscall.SOL_SOCKET, syscall.SO_RCVTIMEO); err == nil { -+ s.RecvTimeout = v -+ } -+ if v, err := unix.GetsockoptTimeval(int(fd), syscall.SOL_SOCKET, syscall.SO_SNDTIMEO); err == nil { -+ s.SendTimeout = v -+ } -+ if v, err := unix.GetsockoptTCPInfo(int(fd), syscall.SOL_TCP, syscall.TCP_INFO); err == nil { -+ s.TCPInfo = v -+ } -+} -diff --git a/vendor/google.golang.org/grpc/internal/channelz/types_nonlinux.go b/vendor/google.golang.org/grpc/internal/channelz/types_nonlinux.go -new file mode 100755 -index 0000000..8b06eed ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/channelz/types_nonlinux.go -@@ -0,0 +1,43 @@ -+//go:build !linux -+// +build !linux -+ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package channelz -+ -+import ( -+ "sync" -+) -+ -+var once sync.Once -+ -+// SocketOptionData defines the struct to hold socket option data, and related -+// getter function to obtain info from fd. -+// Windows OS doesn't support Socket Option -+type SocketOptionData struct { -+} -+ -+// Getsockopt defines the function to get socket options requested by channelz. -+// It is to be passed to syscall.RawConn.Control(). -+// Windows OS doesn't support Socket Option -+func (s *SocketOptionData) Getsockopt(fd uintptr) { -+ once.Do(func() { -+ logger.Warning("Channelz: socket options are not supported on non-linux environments") -+ }) -+} -diff --git a/vendor/google.golang.org/grpc/internal/channelz/util_linux.go b/vendor/google.golang.org/grpc/internal/channelz/util_linux.go -new file mode 100755 -index 0000000..8d194e4 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/channelz/util_linux.go -@@ -0,0 +1,37 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package channelz -+ -+import ( -+ "syscall" -+) -+ -+// GetSocketOption gets the socket option info of the conn. -+func GetSocketOption(socket interface{}) *SocketOptionData { -+ c, ok := socket.(syscall.Conn) -+ if !ok { -+ return nil -+ } -+ data := &SocketOptionData{} -+ if rawConn, err := c.SyscallConn(); err == nil { -+ rawConn.Control(data.Getsockopt) -+ return data -+ } -+ return nil -+} -diff --git a/vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go b/vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go -new file mode 100755 -index 0000000..837ddc4 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go -@@ -0,0 +1,27 @@ -+//go:build !linux -+// +build !linux -+ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package channelz -+ -+// GetSocketOption gets the socket option info of the conn. -+func GetSocketOption(c interface{}) *SocketOptionData { -+ return nil -+} -diff --git a/vendor/google.golang.org/grpc/internal/credentials/credentials.go b/vendor/google.golang.org/grpc/internal/credentials/credentials.go -new file mode 100755 -index 0000000..32c9b59 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/credentials/credentials.go -@@ -0,0 +1,49 @@ -+/* -+ * Copyright 2021 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ */ -+ -+package credentials -+ -+import ( -+ "context" -+) -+ -+// requestInfoKey is a struct to be used as the key to store RequestInfo in a -+// context. -+type requestInfoKey struct{} -+ -+// NewRequestInfoContext creates a context with ri. -+func NewRequestInfoContext(ctx context.Context, ri interface{}) context.Context { -+ return context.WithValue(ctx, requestInfoKey{}, ri) -+} -+ -+// RequestInfoFromContext extracts the RequestInfo from ctx. -+func RequestInfoFromContext(ctx context.Context) interface{} { -+ return ctx.Value(requestInfoKey{}) -+} -+ -+// clientHandshakeInfoKey is a struct used as the key to store -+// ClientHandshakeInfo in a context. -+type clientHandshakeInfoKey struct{} -+ -+// ClientHandshakeInfoFromContext extracts the ClientHandshakeInfo from ctx. -+func ClientHandshakeInfoFromContext(ctx context.Context) interface{} { -+ return ctx.Value(clientHandshakeInfoKey{}) -+} -+ -+// NewClientHandshakeInfoContext creates a context with chi. -+func NewClientHandshakeInfoContext(ctx context.Context, chi interface{}) context.Context { -+ return context.WithValue(ctx, clientHandshakeInfoKey{}, chi) -+} -diff --git a/vendor/google.golang.org/grpc/internal/credentials/spiffe.go b/vendor/google.golang.org/grpc/internal/credentials/spiffe.go -new file mode 100755 -index 0000000..25ade62 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/credentials/spiffe.go -@@ -0,0 +1,75 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package credentials defines APIs for parsing SPIFFE ID. -+// -+// All APIs in this package are experimental. -+package credentials -+ -+import ( -+ "crypto/tls" -+ "crypto/x509" -+ "net/url" -+ -+ "google.golang.org/grpc/grpclog" -+) -+ -+var logger = grpclog.Component("credentials") -+ -+// SPIFFEIDFromState parses the SPIFFE ID from State. If the SPIFFE ID format -+// is invalid, return nil with warning. -+func SPIFFEIDFromState(state tls.ConnectionState) *url.URL { -+ if len(state.PeerCertificates) == 0 || len(state.PeerCertificates[0].URIs) == 0 { -+ return nil -+ } -+ return SPIFFEIDFromCert(state.PeerCertificates[0]) -+} -+ -+// SPIFFEIDFromCert parses the SPIFFE ID from x509.Certificate. If the SPIFFE -+// ID format is invalid, return nil with warning. -+func SPIFFEIDFromCert(cert *x509.Certificate) *url.URL { -+ if cert == nil || cert.URIs == nil { -+ return nil -+ } -+ var spiffeID *url.URL -+ for _, uri := range cert.URIs { -+ if uri == nil || uri.Scheme != "spiffe" || uri.Opaque != "" || (uri.User != nil && uri.User.Username() != "") { -+ continue -+ } -+ // From this point, we assume the uri is intended for a SPIFFE ID. -+ if len(uri.String()) > 2048 { -+ logger.Warning("invalid SPIFFE ID: total ID length larger than 2048 bytes") -+ return nil -+ } -+ if len(uri.Host) == 0 || len(uri.Path) == 0 { -+ logger.Warning("invalid SPIFFE ID: domain or workload ID is empty") -+ return nil -+ } -+ if len(uri.Host) > 255 { -+ logger.Warning("invalid SPIFFE ID: domain length larger than 255 characters") -+ return nil -+ } -+ // A valid SPIFFE certificate can only have exactly one URI SAN field. -+ if len(cert.URIs) > 1 { -+ logger.Warning("invalid SPIFFE ID: multiple URI SANs") -+ return nil -+ } -+ spiffeID = uri -+ } -+ return spiffeID -+} -diff --git a/vendor/google.golang.org/grpc/internal/credentials/syscallconn.go b/vendor/google.golang.org/grpc/internal/credentials/syscallconn.go -new file mode 100755 -index 0000000..2919632 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/credentials/syscallconn.go -@@ -0,0 +1,58 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package credentials -+ -+import ( -+ "net" -+ "syscall" -+) -+ -+type sysConn = syscall.Conn -+ -+// syscallConn keeps reference of rawConn to support syscall.Conn for channelz. -+// SyscallConn() (the method in interface syscall.Conn) is explicitly -+// implemented on this type, -+// -+// Interface syscall.Conn is implemented by most net.Conn implementations (e.g. -+// TCPConn, UnixConn), but is not part of net.Conn interface. So wrapper conns -+// that embed net.Conn don't implement syscall.Conn. (Side note: tls.Conn -+// doesn't embed net.Conn, so even if syscall.Conn is part of net.Conn, it won't -+// help here). -+type syscallConn struct { -+ net.Conn -+ // sysConn is a type alias of syscall.Conn. It's necessary because the name -+ // `Conn` collides with `net.Conn`. -+ sysConn -+} -+ -+// WrapSyscallConn tries to wrap rawConn and newConn into a net.Conn that -+// implements syscall.Conn. rawConn will be used to support syscall, and newConn -+// will be used for read/write. -+// -+// This function returns newConn if rawConn doesn't implement syscall.Conn. -+func WrapSyscallConn(rawConn, newConn net.Conn) net.Conn { -+ sysConn, ok := rawConn.(syscall.Conn) -+ if !ok { -+ return newConn -+ } -+ return &syscallConn{ -+ Conn: newConn, -+ sysConn: sysConn, -+ } -+} -diff --git a/vendor/google.golang.org/grpc/internal/credentials/util.go b/vendor/google.golang.org/grpc/internal/credentials/util.go -new file mode 100755 -index 0000000..f792fd2 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/credentials/util.go -@@ -0,0 +1,52 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package credentials -+ -+import ( -+ "crypto/tls" -+) -+ -+const alpnProtoStrH2 = "h2" -+ -+// AppendH2ToNextProtos appends h2 to next protos. -+func AppendH2ToNextProtos(ps []string) []string { -+ for _, p := range ps { -+ if p == alpnProtoStrH2 { -+ return ps -+ } -+ } -+ ret := make([]string, 0, len(ps)+1) -+ ret = append(ret, ps...) -+ return append(ret, alpnProtoStrH2) -+} -+ -+// CloneTLSConfig returns a shallow clone of the exported -+// fields of cfg, ignoring the unexported sync.Once, which -+// contains a mutex and must not be copied. -+// -+// If cfg is nil, a new zero tls.Config is returned. -+// -+// TODO: inline this function if possible. -+func CloneTLSConfig(cfg *tls.Config) *tls.Config { -+ if cfg == nil { -+ return &tls.Config{} -+ } -+ -+ return cfg.Clone() -+} -diff --git a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go -new file mode 100755 -index 0000000..77c2c0b ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go -@@ -0,0 +1,69 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package envconfig contains grpc settings configured by environment variables. -+package envconfig -+ -+import ( -+ "os" -+ "strconv" -+ "strings" -+) -+ -+var ( -+ // TXTErrIgnore is set if TXT errors should be ignored ("GRPC_GO_IGNORE_TXT_ERRORS" is not "false"). -+ TXTErrIgnore = boolFromEnv("GRPC_GO_IGNORE_TXT_ERRORS", true) -+ // AdvertiseCompressors is set if registered compressor should be advertised -+ // ("GRPC_GO_ADVERTISE_COMPRESSORS" is not "false"). -+ AdvertiseCompressors = boolFromEnv("GRPC_GO_ADVERTISE_COMPRESSORS", true) -+ // RingHashCap indicates the maximum ring size which defaults to 4096 -+ // entries but may be overridden by setting the environment variable -+ // "GRPC_RING_HASH_CAP". This does not override the default bounds -+ // checking which NACKs configs specifying ring sizes > 8*1024*1024 (~8M). -+ RingHashCap = uint64FromEnv("GRPC_RING_HASH_CAP", 4096, 1, 8*1024*1024) -+ // PickFirstLBConfig is set if we should support configuration of the -+ // pick_first LB policy, which can be enabled by setting the environment -+ // variable "GRPC_EXPERIMENTAL_PICKFIRST_LB_CONFIG" to "true". -+ PickFirstLBConfig = boolFromEnv("GRPC_EXPERIMENTAL_PICKFIRST_LB_CONFIG", false) -+ // ALTSMaxConcurrentHandshakes is the maximum number of concurrent ALTS -+ // handshakes that can be performed. -+ ALTSMaxConcurrentHandshakes = uint64FromEnv("GRPC_ALTS_MAX_CONCURRENT_HANDSHAKES", 100, 1, 100) -+) -+ -+func boolFromEnv(envVar string, def bool) bool { -+ if def { -+ // The default is true; return true unless the variable is "false". -+ return !strings.EqualFold(os.Getenv(envVar), "false") -+ } -+ // The default is false; return false unless the variable is "true". -+ return strings.EqualFold(os.Getenv(envVar), "true") -+} -+ -+func uint64FromEnv(envVar string, def, min, max uint64) uint64 { -+ v, err := strconv.ParseUint(os.Getenv(envVar), 10, 64) -+ if err != nil { -+ return def -+ } -+ if v < min { -+ return min -+ } -+ if v > max { -+ return max -+ } -+ return v -+} -diff --git a/vendor/google.golang.org/grpc/internal/envconfig/observability.go b/vendor/google.golang.org/grpc/internal/envconfig/observability.go -new file mode 100755 -index 0000000..dd314cf ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/envconfig/observability.go -@@ -0,0 +1,42 @@ -+/* -+ * -+ * Copyright 2022 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package envconfig -+ -+import "os" -+ -+const ( -+ envObservabilityConfig = "GRPC_GCP_OBSERVABILITY_CONFIG" -+ envObservabilityConfigFile = "GRPC_GCP_OBSERVABILITY_CONFIG_FILE" -+) -+ -+var ( -+ // ObservabilityConfig is the json configuration for the gcp/observability -+ // package specified directly in the envObservabilityConfig env var. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ ObservabilityConfig = os.Getenv(envObservabilityConfig) -+ // ObservabilityConfigFile is the json configuration for the -+ // gcp/observability specified in a file with the location specified in -+ // envObservabilityConfigFile env var. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ ObservabilityConfigFile = os.Getenv(envObservabilityConfigFile) -+) -diff --git a/vendor/google.golang.org/grpc/internal/envconfig/xds.go b/vendor/google.golang.org/grpc/internal/envconfig/xds.go -new file mode 100755 -index 0000000..02b4b6a ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/envconfig/xds.go -@@ -0,0 +1,95 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package envconfig -+ -+import ( -+ "os" -+) -+ -+const ( -+ // XDSBootstrapFileNameEnv is the env variable to set bootstrap file name. -+ // Do not use this and read from env directly. Its value is read and kept in -+ // variable XDSBootstrapFileName. -+ // -+ // When both bootstrap FileName and FileContent are set, FileName is used. -+ XDSBootstrapFileNameEnv = "GRPC_XDS_BOOTSTRAP" -+ // XDSBootstrapFileContentEnv is the env variable to set bootstrap file -+ // content. Do not use this and read from env directly. Its value is read -+ // and kept in variable XDSBootstrapFileContent. -+ // -+ // When both bootstrap FileName and FileContent are set, FileName is used. -+ XDSBootstrapFileContentEnv = "GRPC_XDS_BOOTSTRAP_CONFIG" -+) -+ -+var ( -+ // XDSBootstrapFileName holds the name of the file which contains xDS -+ // bootstrap configuration. Users can specify the location of the bootstrap -+ // file by setting the environment variable "GRPC_XDS_BOOTSTRAP". -+ // -+ // When both bootstrap FileName and FileContent are set, FileName is used. -+ XDSBootstrapFileName = os.Getenv(XDSBootstrapFileNameEnv) -+ // XDSBootstrapFileContent holds the content of the xDS bootstrap -+ // configuration. Users can specify the bootstrap config by setting the -+ // environment variable "GRPC_XDS_BOOTSTRAP_CONFIG". -+ // -+ // When both bootstrap FileName and FileContent are set, FileName is used. -+ XDSBootstrapFileContent = os.Getenv(XDSBootstrapFileContentEnv) -+ // XDSRingHash indicates whether ring hash support is enabled, which can be -+ // disabled by setting the environment variable -+ // "GRPC_XDS_EXPERIMENTAL_ENABLE_RING_HASH" to "false". -+ XDSRingHash = boolFromEnv("GRPC_XDS_EXPERIMENTAL_ENABLE_RING_HASH", true) -+ // XDSClientSideSecurity is used to control processing of security -+ // configuration on the client-side. -+ // -+ // Note that there is no env var protection for the server-side because we -+ // have a brand new API on the server-side and users explicitly need to use -+ // the new API to get security integration on the server. -+ XDSClientSideSecurity = boolFromEnv("GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT", true) -+ // XDSAggregateAndDNS indicates whether processing of aggregated cluster and -+ // DNS cluster is enabled, which can be disabled by setting the environment -+ // variable "GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER" -+ // to "false". -+ XDSAggregateAndDNS = boolFromEnv("GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER", true) -+ -+ // XDSRBAC indicates whether xDS configured RBAC HTTP Filter is enabled, -+ // which can be disabled by setting the environment variable -+ // "GRPC_XDS_EXPERIMENTAL_RBAC" to "false". -+ XDSRBAC = boolFromEnv("GRPC_XDS_EXPERIMENTAL_RBAC", true) -+ // XDSOutlierDetection indicates whether outlier detection support is -+ // enabled, which can be disabled by setting the environment variable -+ // "GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION" to "false". -+ XDSOutlierDetection = boolFromEnv("GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION", true) -+ // XDSFederation indicates whether federation support is enabled, which can -+ // be enabled by setting the environment variable -+ // "GRPC_EXPERIMENTAL_XDS_FEDERATION" to "true". -+ XDSFederation = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FEDERATION", true) -+ -+ // XDSRLS indicates whether processing of Cluster Specifier plugins and -+ // support for the RLS CLuster Specifier is enabled, which can be disabled by -+ // setting the environment variable "GRPC_EXPERIMENTAL_XDS_RLS_LB" to -+ // "false". -+ XDSRLS = boolFromEnv("GRPC_EXPERIMENTAL_XDS_RLS_LB", true) -+ -+ // C2PResolverTestOnlyTrafficDirectorURI is the TD URI for testing. -+ C2PResolverTestOnlyTrafficDirectorURI = os.Getenv("GRPC_TEST_ONLY_GOOGLE_C2P_RESOLVER_TRAFFIC_DIRECTOR_URI") -+ // XDSCustomLBPolicy indicates whether Custom LB Policies are enabled, which -+ // can be disabled by setting the environment variable -+ // "GRPC_EXPERIMENTAL_XDS_CUSTOM_LB_CONFIG" to "false". -+ XDSCustomLBPolicy = boolFromEnv("GRPC_EXPERIMENTAL_XDS_CUSTOM_LB_CONFIG", true) -+) -diff --git a/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go b/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go -new file mode 100755 -index 0000000..b68e26a ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go -@@ -0,0 +1,126 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package grpclog (internal) defines depth logging for grpc. -+package grpclog -+ -+import ( -+ "os" -+) -+ -+// Logger is the logger used for the non-depth log functions. -+var Logger LoggerV2 -+ -+// DepthLogger is the logger used for the depth log functions. -+var DepthLogger DepthLoggerV2 -+ -+// InfoDepth logs to the INFO log at the specified depth. -+func InfoDepth(depth int, args ...interface{}) { -+ if DepthLogger != nil { -+ DepthLogger.InfoDepth(depth, args...) -+ } else { -+ Logger.Infoln(args...) -+ } -+} -+ -+// WarningDepth logs to the WARNING log at the specified depth. -+func WarningDepth(depth int, args ...interface{}) { -+ if DepthLogger != nil { -+ DepthLogger.WarningDepth(depth, args...) -+ } else { -+ Logger.Warningln(args...) -+ } -+} -+ -+// ErrorDepth logs to the ERROR log at the specified depth. -+func ErrorDepth(depth int, args ...interface{}) { -+ if DepthLogger != nil { -+ DepthLogger.ErrorDepth(depth, args...) -+ } else { -+ Logger.Errorln(args...) -+ } -+} -+ -+// FatalDepth logs to the FATAL log at the specified depth. -+func FatalDepth(depth int, args ...interface{}) { -+ if DepthLogger != nil { -+ DepthLogger.FatalDepth(depth, args...) -+ } else { -+ Logger.Fatalln(args...) -+ } -+ os.Exit(1) -+} -+ -+// LoggerV2 does underlying logging work for grpclog. -+// This is a copy of the LoggerV2 defined in the external grpclog package. It -+// is defined here to avoid a circular dependency. -+type LoggerV2 interface { -+ // Info logs to INFO log. Arguments are handled in the manner of fmt.Print. -+ Info(args ...interface{}) -+ // Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println. -+ Infoln(args ...interface{}) -+ // Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf. -+ Infof(format string, args ...interface{}) -+ // Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print. -+ Warning(args ...interface{}) -+ // Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println. -+ Warningln(args ...interface{}) -+ // Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf. -+ Warningf(format string, args ...interface{}) -+ // Error logs to ERROR log. Arguments are handled in the manner of fmt.Print. -+ Error(args ...interface{}) -+ // Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println. -+ Errorln(args ...interface{}) -+ // Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. -+ Errorf(format string, args ...interface{}) -+ // Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print. -+ // gRPC ensures that all Fatal logs will exit with os.Exit(1). -+ // Implementations may also call os.Exit() with a non-zero exit code. -+ Fatal(args ...interface{}) -+ // Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println. -+ // gRPC ensures that all Fatal logs will exit with os.Exit(1). -+ // Implementations may also call os.Exit() with a non-zero exit code. -+ Fatalln(args ...interface{}) -+ // Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. -+ // gRPC ensures that all Fatal logs will exit with os.Exit(1). -+ // Implementations may also call os.Exit() with a non-zero exit code. -+ Fatalf(format string, args ...interface{}) -+ // V reports whether verbosity level l is at least the requested verbose level. -+ V(l int) bool -+} -+ -+// DepthLoggerV2 logs at a specified call frame. If a LoggerV2 also implements -+// DepthLoggerV2, the below functions will be called with the appropriate stack -+// depth set for trivial functions the logger may ignore. -+// This is a copy of the DepthLoggerV2 defined in the external grpclog package. -+// It is defined here to avoid a circular dependency. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type DepthLoggerV2 interface { -+ // InfoDepth logs to INFO log at the specified depth. Arguments are handled in the manner of fmt.Println. -+ InfoDepth(depth int, args ...interface{}) -+ // WarningDepth logs to WARNING log at the specified depth. Arguments are handled in the manner of fmt.Println. -+ WarningDepth(depth int, args ...interface{}) -+ // ErrorDepth logs to ERROR log at the specified depth. Arguments are handled in the manner of fmt.Println. -+ ErrorDepth(depth int, args ...interface{}) -+ // FatalDepth logs to FATAL log at the specified depth. Arguments are handled in the manner of fmt.Println. -+ FatalDepth(depth int, args ...interface{}) -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go b/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go -new file mode 100755 -index 0000000..02224b4 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go -@@ -0,0 +1,93 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpclog -+ -+import ( -+ "fmt" -+) -+ -+// PrefixLogger does logging with a prefix. -+// -+// Logging method on a nil logs without any prefix. -+type PrefixLogger struct { -+ logger DepthLoggerV2 -+ prefix string -+} -+ -+// Infof does info logging. -+func (pl *PrefixLogger) Infof(format string, args ...interface{}) { -+ if pl != nil { -+ // Handle nil, so the tests can pass in a nil logger. -+ format = pl.prefix + format -+ pl.logger.InfoDepth(1, fmt.Sprintf(format, args...)) -+ return -+ } -+ InfoDepth(1, fmt.Sprintf(format, args...)) -+} -+ -+// Warningf does warning logging. -+func (pl *PrefixLogger) Warningf(format string, args ...interface{}) { -+ if pl != nil { -+ format = pl.prefix + format -+ pl.logger.WarningDepth(1, fmt.Sprintf(format, args...)) -+ return -+ } -+ WarningDepth(1, fmt.Sprintf(format, args...)) -+} -+ -+// Errorf does error logging. -+func (pl *PrefixLogger) Errorf(format string, args ...interface{}) { -+ if pl != nil { -+ format = pl.prefix + format -+ pl.logger.ErrorDepth(1, fmt.Sprintf(format, args...)) -+ return -+ } -+ ErrorDepth(1, fmt.Sprintf(format, args...)) -+} -+ -+// Debugf does info logging at verbose level 2. -+func (pl *PrefixLogger) Debugf(format string, args ...interface{}) { -+ // TODO(6044): Refactor interfaces LoggerV2 and DepthLogger, and maybe -+ // rewrite PrefixLogger a little to ensure that we don't use the global -+ // `Logger` here, and instead use the `logger` field. -+ if !Logger.V(2) { -+ return -+ } -+ if pl != nil { -+ // Handle nil, so the tests can pass in a nil logger. -+ format = pl.prefix + format -+ pl.logger.InfoDepth(1, fmt.Sprintf(format, args...)) -+ return -+ } -+ InfoDepth(1, fmt.Sprintf(format, args...)) -+ -+} -+ -+// V reports whether verbosity level l is at least the requested verbose level. -+func (pl *PrefixLogger) V(l int) bool { -+ // TODO(6044): Refactor interfaces LoggerV2 and DepthLogger, and maybe -+ // rewrite PrefixLogger a little to ensure that we don't use the global -+ // `Logger` here, and instead use the `logger` field. -+ return Logger.V(l) -+} -+ -+// NewPrefixLogger creates a prefix logger with the given prefix. -+func NewPrefixLogger(logger DepthLoggerV2, prefix string) *PrefixLogger { -+ return &PrefixLogger{logger: logger, prefix: prefix} -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go b/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go -new file mode 100755 -index 0000000..aa97273 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go -@@ -0,0 +1,95 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package grpcrand implements math/rand functions in a concurrent-safe way -+// with a global random source, independent of math/rand's global source. -+package grpcrand -+ -+import ( -+ "math/rand" -+ "sync" -+ "time" -+) -+ -+var ( -+ r = rand.New(rand.NewSource(time.Now().UnixNano())) -+ mu sync.Mutex -+) -+ -+// Int implements rand.Int on the grpcrand global source. -+func Int() int { -+ mu.Lock() -+ defer mu.Unlock() -+ return r.Int() -+} -+ -+// Int63n implements rand.Int63n on the grpcrand global source. -+func Int63n(n int64) int64 { -+ mu.Lock() -+ defer mu.Unlock() -+ return r.Int63n(n) -+} -+ -+// Intn implements rand.Intn on the grpcrand global source. -+func Intn(n int) int { -+ mu.Lock() -+ defer mu.Unlock() -+ return r.Intn(n) -+} -+ -+// Int31n implements rand.Int31n on the grpcrand global source. -+func Int31n(n int32) int32 { -+ mu.Lock() -+ defer mu.Unlock() -+ return r.Int31n(n) -+} -+ -+// Float64 implements rand.Float64 on the grpcrand global source. -+func Float64() float64 { -+ mu.Lock() -+ defer mu.Unlock() -+ return r.Float64() -+} -+ -+// Uint64 implements rand.Uint64 on the grpcrand global source. -+func Uint64() uint64 { -+ mu.Lock() -+ defer mu.Unlock() -+ return r.Uint64() -+} -+ -+// Uint32 implements rand.Uint32 on the grpcrand global source. -+func Uint32() uint32 { -+ mu.Lock() -+ defer mu.Unlock() -+ return r.Uint32() -+} -+ -+// ExpFloat64 implements rand.ExpFloat64 on the grpcrand global source. -+func ExpFloat64() float64 { -+ mu.Lock() -+ defer mu.Unlock() -+ return r.ExpFloat64() -+} -+ -+// Shuffle implements rand.Shuffle on the grpcrand global source. -+var Shuffle = func(n int, f func(int, int)) { -+ mu.Lock() -+ defer mu.Unlock() -+ r.Shuffle(n, f) -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go -new file mode 100755 -index 0000000..37b8d41 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go -@@ -0,0 +1,119 @@ -+/* -+ * -+ * Copyright 2022 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpcsync -+ -+import ( -+ "context" -+ "sync" -+ -+ "google.golang.org/grpc/internal/buffer" -+) -+ -+// CallbackSerializer provides a mechanism to schedule callbacks in a -+// synchronized manner. It provides a FIFO guarantee on the order of execution -+// of scheduled callbacks. New callbacks can be scheduled by invoking the -+// Schedule() method. -+// -+// This type is safe for concurrent access. -+type CallbackSerializer struct { -+ // Done is closed once the serializer is shut down completely, i.e all -+ // scheduled callbacks are executed and the serializer has deallocated all -+ // its resources. -+ Done chan struct{} -+ -+ callbacks *buffer.Unbounded -+ closedMu sync.Mutex -+ closed bool -+} -+ -+// NewCallbackSerializer returns a new CallbackSerializer instance. The provided -+// context will be passed to the scheduled callbacks. Users should cancel the -+// provided context to shutdown the CallbackSerializer. It is guaranteed that no -+// callbacks will be added once this context is canceled, and any pending un-run -+// callbacks will be executed before the serializer is shut down. -+func NewCallbackSerializer(ctx context.Context) *CallbackSerializer { -+ t := &CallbackSerializer{ -+ Done: make(chan struct{}), -+ callbacks: buffer.NewUnbounded(), -+ } -+ go t.run(ctx) -+ return t -+} -+ -+// Schedule adds a callback to be scheduled after existing callbacks are run. -+// -+// Callbacks are expected to honor the context when performing any blocking -+// operations, and should return early when the context is canceled. -+// -+// Return value indicates if the callback was successfully added to the list of -+// callbacks to be executed by the serializer. It is not possible to add -+// callbacks once the context passed to NewCallbackSerializer is cancelled. -+func (t *CallbackSerializer) Schedule(f func(ctx context.Context)) bool { -+ t.closedMu.Lock() -+ defer t.closedMu.Unlock() -+ -+ if t.closed { -+ return false -+ } -+ t.callbacks.Put(f) -+ return true -+} -+ -+func (t *CallbackSerializer) run(ctx context.Context) { -+ var backlog []func(context.Context) -+ -+ defer close(t.Done) -+ for ctx.Err() == nil { -+ select { -+ case <-ctx.Done(): -+ // Do nothing here. Next iteration of the for loop will not happen, -+ // since ctx.Err() would be non-nil. -+ case callback, ok := <-t.callbacks.Get(): -+ if !ok { -+ return -+ } -+ t.callbacks.Load() -+ callback.(func(ctx context.Context))(ctx) -+ } -+ } -+ -+ // Fetch pending callbacks if any, and execute them before returning from -+ // this method and closing t.Done. -+ t.closedMu.Lock() -+ t.closed = true -+ backlog = t.fetchPendingCallbacks() -+ t.callbacks.Close() -+ t.closedMu.Unlock() -+ for _, b := range backlog { -+ b(ctx) -+ } -+} -+ -+func (t *CallbackSerializer) fetchPendingCallbacks() []func(context.Context) { -+ var backlog []func(context.Context) -+ for { -+ select { -+ case b := <-t.callbacks.Get(): -+ backlog = append(backlog, b.(func(context.Context))) -+ t.callbacks.Load() -+ default: -+ return backlog -+ } -+ } -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/event.go b/vendor/google.golang.org/grpc/internal/grpcsync/event.go -new file mode 100755 -index 0000000..fbe697c ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcsync/event.go -@@ -0,0 +1,61 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package grpcsync implements additional synchronization primitives built upon -+// the sync package. -+package grpcsync -+ -+import ( -+ "sync" -+ "sync/atomic" -+) -+ -+// Event represents a one-time event that may occur in the future. -+type Event struct { -+ fired int32 -+ c chan struct{} -+ o sync.Once -+} -+ -+// Fire causes e to complete. It is safe to call multiple times, and -+// concurrently. It returns true iff this call to Fire caused the signaling -+// channel returned by Done to close. -+func (e *Event) Fire() bool { -+ ret := false -+ e.o.Do(func() { -+ atomic.StoreInt32(&e.fired, 1) -+ close(e.c) -+ ret = true -+ }) -+ return ret -+} -+ -+// Done returns a channel that will be closed when Fire is called. -+func (e *Event) Done() <-chan struct{} { -+ return e.c -+} -+ -+// HasFired returns true if Fire has been called. -+func (e *Event) HasFired() bool { -+ return atomic.LoadInt32(&e.fired) == 1 -+} -+ -+// NewEvent returns a new, ready-to-use Event. -+func NewEvent() *Event { -+ return &Event{c: make(chan struct{})} -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go b/vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go -new file mode 100755 -index 0000000..6635f7b ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go -@@ -0,0 +1,32 @@ -+/* -+ * -+ * Copyright 2022 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpcsync -+ -+import ( -+ "sync" -+) -+ -+// OnceFunc returns a function wrapping f which ensures f is only executed -+// once even if the returned function is executed multiple times. -+func OnceFunc(f func()) func() { -+ var once sync.Once -+ return func() { -+ once.Do(f) -+ } -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go b/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go -new file mode 100755 -index 0000000..f58b5ff ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go -@@ -0,0 +1,136 @@ -+/* -+ * -+ * Copyright 2023 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpcsync -+ -+import ( -+ "context" -+ "sync" -+) -+ -+// Subscriber represents an entity that is subscribed to messages published on -+// a PubSub. It wraps the callback to be invoked by the PubSub when a new -+// message is published. -+type Subscriber interface { -+ // OnMessage is invoked when a new message is published. Implementations -+ // must not block in this method. -+ OnMessage(msg interface{}) -+} -+ -+// PubSub is a simple one-to-many publish-subscribe system that supports -+// messages of arbitrary type. It guarantees that messages are delivered in -+// the same order in which they were published. -+// -+// Publisher invokes the Publish() method to publish new messages, while -+// subscribers interested in receiving these messages register a callback -+// via the Subscribe() method. -+// -+// Once a PubSub is stopped, no more messages can be published, and -+// it is guaranteed that no more subscriber callback will be invoked. -+type PubSub struct { -+ cs *CallbackSerializer -+ cancel context.CancelFunc -+ -+ // Access to the below fields are guarded by this mutex. -+ mu sync.Mutex -+ msg interface{} -+ subscribers map[Subscriber]bool -+ stopped bool -+} -+ -+// NewPubSub returns a new PubSub instance. -+func NewPubSub() *PubSub { -+ ctx, cancel := context.WithCancel(context.Background()) -+ return &PubSub{ -+ cs: NewCallbackSerializer(ctx), -+ cancel: cancel, -+ subscribers: map[Subscriber]bool{}, -+ } -+} -+ -+// Subscribe registers the provided Subscriber to the PubSub. -+// -+// If the PubSub contains a previously published message, the Subscriber's -+// OnMessage() callback will be invoked asynchronously with the existing -+// message to begin with, and subsequently for every newly published message. -+// -+// The caller is responsible for invoking the returned cancel function to -+// unsubscribe itself from the PubSub. -+func (ps *PubSub) Subscribe(sub Subscriber) (cancel func()) { -+ ps.mu.Lock() -+ defer ps.mu.Unlock() -+ -+ if ps.stopped { -+ return func() {} -+ } -+ -+ ps.subscribers[sub] = true -+ -+ if ps.msg != nil { -+ msg := ps.msg -+ ps.cs.Schedule(func(context.Context) { -+ ps.mu.Lock() -+ defer ps.mu.Unlock() -+ if !ps.subscribers[sub] { -+ return -+ } -+ sub.OnMessage(msg) -+ }) -+ } -+ -+ return func() { -+ ps.mu.Lock() -+ defer ps.mu.Unlock() -+ delete(ps.subscribers, sub) -+ } -+} -+ -+// Publish publishes the provided message to the PubSub, and invokes -+// callbacks registered by subscribers asynchronously. -+func (ps *PubSub) Publish(msg interface{}) { -+ ps.mu.Lock() -+ defer ps.mu.Unlock() -+ -+ if ps.stopped { -+ return -+ } -+ -+ ps.msg = msg -+ for sub := range ps.subscribers { -+ s := sub -+ ps.cs.Schedule(func(context.Context) { -+ ps.mu.Lock() -+ defer ps.mu.Unlock() -+ if !ps.subscribers[s] { -+ return -+ } -+ s.OnMessage(msg) -+ }) -+ } -+} -+ -+// Stop shuts down the PubSub and releases any resources allocated by it. -+// It is guaranteed that no subscriber callbacks would be invoked once this -+// method returns. -+func (ps *PubSub) Stop() { -+ ps.mu.Lock() -+ defer ps.mu.Unlock() -+ ps.stopped = true -+ -+ ps.cancel() -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/compressor.go b/vendor/google.golang.org/grpc/internal/grpcutil/compressor.go -new file mode 100755 -index 0000000..9f40909 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcutil/compressor.go -@@ -0,0 +1,47 @@ -+/* -+ * -+ * Copyright 2022 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpcutil -+ -+import ( -+ "strings" -+ -+ "google.golang.org/grpc/internal/envconfig" -+) -+ -+// RegisteredCompressorNames holds names of the registered compressors. -+var RegisteredCompressorNames []string -+ -+// IsCompressorNameRegistered returns true when name is available in registry. -+func IsCompressorNameRegistered(name string) bool { -+ for _, compressor := range RegisteredCompressorNames { -+ if compressor == name { -+ return true -+ } -+ } -+ return false -+} -+ -+// RegisteredCompressors returns a string of registered compressor names -+// separated by comma. -+func RegisteredCompressors() string { -+ if !envconfig.AdvertiseCompressors { -+ return "" -+ } -+ return strings.Join(RegisteredCompressorNames, ",") -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go b/vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go -new file mode 100755 -index 0000000..b25b0ba ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go -@@ -0,0 +1,63 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpcutil -+ -+import ( -+ "strconv" -+ "time" -+) -+ -+const maxTimeoutValue int64 = 100000000 - 1 -+ -+// div does integer division and round-up the result. Note that this is -+// equivalent to (d+r-1)/r but has less chance to overflow. -+func div(d, r time.Duration) int64 { -+ if d%r > 0 { -+ return int64(d/r + 1) -+ } -+ return int64(d / r) -+} -+ -+// EncodeDuration encodes the duration to the format grpc-timeout header -+// accepts. -+// -+// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests -+func EncodeDuration(t time.Duration) string { -+ // TODO: This is simplistic and not bandwidth efficient. Improve it. -+ if t <= 0 { -+ return "0n" -+ } -+ if d := div(t, time.Nanosecond); d <= maxTimeoutValue { -+ return strconv.FormatInt(d, 10) + "n" -+ } -+ if d := div(t, time.Microsecond); d <= maxTimeoutValue { -+ return strconv.FormatInt(d, 10) + "u" -+ } -+ if d := div(t, time.Millisecond); d <= maxTimeoutValue { -+ return strconv.FormatInt(d, 10) + "m" -+ } -+ if d := div(t, time.Second); d <= maxTimeoutValue { -+ return strconv.FormatInt(d, 10) + "S" -+ } -+ if d := div(t, time.Minute); d <= maxTimeoutValue { -+ return strconv.FormatInt(d, 10) + "M" -+ } -+ // Note that maxTimeoutValue * time.Hour > MaxInt64. -+ return strconv.FormatInt(div(t, time.Hour), 10) + "H" -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/grpcutil.go b/vendor/google.golang.org/grpc/internal/grpcutil/grpcutil.go -new file mode 100755 -index 0000000..e2f948e ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcutil/grpcutil.go -@@ -0,0 +1,20 @@ -+/* -+ * -+ * Copyright 2021 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package grpcutil provides utility functions used across the gRPC codebase. -+package grpcutil -diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/metadata.go b/vendor/google.golang.org/grpc/internal/grpcutil/metadata.go -new file mode 100755 -index 0000000..6f22bd8 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcutil/metadata.go -@@ -0,0 +1,40 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpcutil -+ -+import ( -+ "context" -+ -+ "google.golang.org/grpc/metadata" -+) -+ -+type mdExtraKey struct{} -+ -+// WithExtraMetadata creates a new context with incoming md attached. -+func WithExtraMetadata(ctx context.Context, md metadata.MD) context.Context { -+ return context.WithValue(ctx, mdExtraKey{}, md) -+} -+ -+// ExtraMetadata returns the incoming metadata in ctx if it exists. The -+// returned MD should not be modified. Writing to it may cause races. -+// Modification should be made to copies of the returned MD. -+func ExtraMetadata(ctx context.Context) (md metadata.MD, ok bool) { -+ md, ok = ctx.Value(mdExtraKey{}).(metadata.MD) -+ return -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/method.go b/vendor/google.golang.org/grpc/internal/grpcutil/method.go -new file mode 100755 -index 0000000..ec62b47 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcutil/method.go -@@ -0,0 +1,88 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpcutil -+ -+import ( -+ "errors" -+ "strings" -+) -+ -+// ParseMethod splits service and method from the input. It expects format -+// "/service/method". -+func ParseMethod(methodName string) (service, method string, _ error) { -+ if !strings.HasPrefix(methodName, "/") { -+ return "", "", errors.New("invalid method name: should start with /") -+ } -+ methodName = methodName[1:] -+ -+ pos := strings.LastIndex(methodName, "/") -+ if pos < 0 { -+ return "", "", errors.New("invalid method name: suffix /method is missing") -+ } -+ return methodName[:pos], methodName[pos+1:], nil -+} -+ -+// baseContentType is the base content-type for gRPC. This is a valid -+// content-type on it's own, but can also include a content-subtype such as -+// "proto" as a suffix after "+" or ";". See -+// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests -+// for more details. -+const baseContentType = "application/grpc" -+ -+// ContentSubtype returns the content-subtype for the given content-type. The -+// given content-type must be a valid content-type that starts with -+// "application/grpc". A content-subtype will follow "application/grpc" after a -+// "+" or ";". See -+// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for -+// more details. -+// -+// If contentType is not a valid content-type for gRPC, the boolean -+// will be false, otherwise true. If content-type == "application/grpc", -+// "application/grpc+", or "application/grpc;", the boolean will be true, -+// but no content-subtype will be returned. -+// -+// contentType is assumed to be lowercase already. -+func ContentSubtype(contentType string) (string, bool) { -+ if contentType == baseContentType { -+ return "", true -+ } -+ if !strings.HasPrefix(contentType, baseContentType) { -+ return "", false -+ } -+ // guaranteed since != baseContentType and has baseContentType prefix -+ switch contentType[len(baseContentType)] { -+ case '+', ';': -+ // this will return true for "application/grpc+" or "application/grpc;" -+ // which the previous validContentType function tested to be valid, so we -+ // just say that no content-subtype is specified in this case -+ return contentType[len(baseContentType)+1:], true -+ default: -+ return "", false -+ } -+} -+ -+// ContentType builds full content type with the given sub-type. -+// -+// contentSubtype is assumed to be lowercase -+func ContentType(contentSubtype string) string { -+ if contentSubtype == "" { -+ return baseContentType -+ } -+ return baseContentType + "+" + contentSubtype -+} -diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/regex.go b/vendor/google.golang.org/grpc/internal/grpcutil/regex.go -new file mode 100755 -index 0000000..7a092b2 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/grpcutil/regex.go -@@ -0,0 +1,31 @@ -+/* -+ * -+ * Copyright 2021 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpcutil -+ -+import "regexp" -+ -+// FullMatchWithRegex returns whether the full text matches the regex provided. -+func FullMatchWithRegex(re *regexp.Regexp, text string) bool { -+ if len(text) == 0 { -+ return re.MatchString(text) -+ } -+ re.Longest() -+ rem := re.FindString(text) -+ return len(rem) == len(text) -+} -diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go -new file mode 100755 -index 0000000..42ff39c ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/internal.go -@@ -0,0 +1,194 @@ -+/* -+ * Copyright 2016 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package internal contains gRPC-internal code, to avoid polluting -+// the godoc of the top-level grpc package. It must not import any grpc -+// symbols to avoid circular dependencies. -+package internal -+ -+import ( -+ "context" -+ "time" -+ -+ "google.golang.org/grpc/connectivity" -+ "google.golang.org/grpc/serviceconfig" -+) -+ -+var ( -+ // WithHealthCheckFunc is set by dialoptions.go -+ WithHealthCheckFunc interface{} // func (HealthChecker) DialOption -+ // HealthCheckFunc is used to provide client-side LB channel health checking -+ HealthCheckFunc HealthChecker -+ // BalancerUnregister is exported by package balancer to unregister a balancer. -+ BalancerUnregister func(name string) -+ // KeepaliveMinPingTime is the minimum ping interval. This must be 10s by -+ // default, but tests may wish to set it lower for convenience. -+ KeepaliveMinPingTime = 10 * time.Second -+ // ParseServiceConfig parses a JSON representation of the service config. -+ ParseServiceConfig interface{} // func(string) *serviceconfig.ParseResult -+ // EqualServiceConfigForTesting is for testing service config generation and -+ // parsing. Both a and b should be returned by ParseServiceConfig. -+ // This function compares the config without rawJSON stripped, in case the -+ // there's difference in white space. -+ EqualServiceConfigForTesting func(a, b serviceconfig.Config) bool -+ // GetCertificateProviderBuilder returns the registered builder for the -+ // given name. This is set by package certprovider for use from xDS -+ // bootstrap code while parsing certificate provider configs in the -+ // bootstrap file. -+ GetCertificateProviderBuilder interface{} // func(string) certprovider.Builder -+ // GetXDSHandshakeInfoForTesting returns a pointer to the xds.HandshakeInfo -+ // stored in the passed in attributes. This is set by -+ // credentials/xds/xds.go. -+ GetXDSHandshakeInfoForTesting interface{} // func (*attributes.Attributes) *xds.HandshakeInfo -+ // GetServerCredentials returns the transport credentials configured on a -+ // gRPC server. An xDS-enabled server needs to know what type of credentials -+ // is configured on the underlying gRPC server. This is set by server.go. -+ GetServerCredentials interface{} // func (*grpc.Server) credentials.TransportCredentials -+ // CanonicalString returns the canonical string of the code defined here: -+ // https://github.com/grpc/grpc/blob/master/doc/statuscodes.md. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ CanonicalString interface{} // func (codes.Code) string -+ // DrainServerTransports initiates a graceful close of existing connections -+ // on a gRPC server accepted on the provided listener address. An -+ // xDS-enabled server invokes this method on a grpc.Server when a particular -+ // listener moves to "not-serving" mode. -+ DrainServerTransports interface{} // func(*grpc.Server, string) -+ // AddGlobalServerOptions adds an array of ServerOption that will be -+ // effective globally for newly created servers. The priority will be: 1. -+ // user-provided; 2. this method; 3. default values. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ AddGlobalServerOptions interface{} // func(opt ...ServerOption) -+ // ClearGlobalServerOptions clears the array of extra ServerOption. This -+ // method is useful in testing and benchmarking. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ ClearGlobalServerOptions func() -+ // AddGlobalDialOptions adds an array of DialOption that will be effective -+ // globally for newly created client channels. The priority will be: 1. -+ // user-provided; 2. this method; 3. default values. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ AddGlobalDialOptions interface{} // func(opt ...DialOption) -+ // DisableGlobalDialOptions returns a DialOption that prevents the -+ // ClientConn from applying the global DialOptions (set via -+ // AddGlobalDialOptions). -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ DisableGlobalDialOptions interface{} // func() grpc.DialOption -+ // ClearGlobalDialOptions clears the array of extra DialOption. This -+ // method is useful in testing and benchmarking. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ ClearGlobalDialOptions func() -+ // JoinDialOptions combines the dial options passed as arguments into a -+ // single dial option. -+ JoinDialOptions interface{} // func(...grpc.DialOption) grpc.DialOption -+ // JoinServerOptions combines the server options passed as arguments into a -+ // single server option. -+ JoinServerOptions interface{} // func(...grpc.ServerOption) grpc.ServerOption -+ -+ // WithBinaryLogger returns a DialOption that specifies the binary logger -+ // for a ClientConn. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ WithBinaryLogger interface{} // func(binarylog.Logger) grpc.DialOption -+ // BinaryLogger returns a ServerOption that can set the binary logger for a -+ // server. -+ // -+ // This is used in the 1.0 release of gcp/observability, and thus must not be -+ // deleted or changed. -+ BinaryLogger interface{} // func(binarylog.Logger) grpc.ServerOption -+ -+ // NewXDSResolverWithConfigForTesting creates a new xds resolver builder using -+ // the provided xds bootstrap config instead of the global configuration from -+ // the supported environment variables. The resolver.Builder is meant to be -+ // used in conjunction with the grpc.WithResolvers DialOption. -+ // -+ // Testing Only -+ // -+ // This function should ONLY be used for testing and may not work with some -+ // other features, including the CSDS service. -+ NewXDSResolverWithConfigForTesting interface{} // func([]byte) (resolver.Builder, error) -+ -+ // RegisterRLSClusterSpecifierPluginForTesting registers the RLS Cluster -+ // Specifier Plugin for testing purposes, regardless of the XDSRLS environment -+ // variable. -+ // -+ // TODO: Remove this function once the RLS env var is removed. -+ RegisterRLSClusterSpecifierPluginForTesting func() -+ -+ // UnregisterRLSClusterSpecifierPluginForTesting unregisters the RLS Cluster -+ // Specifier Plugin for testing purposes. This is needed because there is no way -+ // to unregister the RLS Cluster Specifier Plugin after registering it solely -+ // for testing purposes using RegisterRLSClusterSpecifierPluginForTesting(). -+ // -+ // TODO: Remove this function once the RLS env var is removed. -+ UnregisterRLSClusterSpecifierPluginForTesting func() -+ -+ // RegisterRBACHTTPFilterForTesting registers the RBAC HTTP Filter for testing -+ // purposes, regardless of the RBAC environment variable. -+ // -+ // TODO: Remove this function once the RBAC env var is removed. -+ RegisterRBACHTTPFilterForTesting func() -+ -+ // UnregisterRBACHTTPFilterForTesting unregisters the RBAC HTTP Filter for -+ // testing purposes. This is needed because there is no way to unregister the -+ // HTTP Filter after registering it solely for testing purposes using -+ // RegisterRBACHTTPFilterForTesting(). -+ // -+ // TODO: Remove this function once the RBAC env var is removed. -+ UnregisterRBACHTTPFilterForTesting func() -+ -+ // ORCAAllowAnyMinReportingInterval is for examples/orca use ONLY. -+ ORCAAllowAnyMinReportingInterval interface{} // func(so *orca.ServiceOptions) -+) -+ -+// HealthChecker defines the signature of the client-side LB channel health checking function. -+// -+// The implementation is expected to create a health checking RPC stream by -+// calling newStream(), watch for the health status of serviceName, and report -+// it's health back by calling setConnectivityState(). -+// -+// The health checking protocol is defined at: -+// https://github.com/grpc/grpc/blob/master/doc/health-checking.md -+type HealthChecker func(ctx context.Context, newStream func(string) (interface{}, error), setConnectivityState func(connectivity.State, error), serviceName string) error -+ -+const ( -+ // CredsBundleModeFallback switches GoogleDefaultCreds to fallback mode. -+ CredsBundleModeFallback = "fallback" -+ // CredsBundleModeBalancer switches GoogleDefaultCreds to grpclb balancer -+ // mode. -+ CredsBundleModeBalancer = "balancer" -+ // CredsBundleModeBackendFromBalancer switches GoogleDefaultCreds to mode -+ // that supports backend returned by grpclb balancer. -+ CredsBundleModeBackendFromBalancer = "backend-from-balancer" -+) -+ -+// RLSLoadBalancingPolicyName is the name of the RLS LB policy. -+// -+// It currently has an experimental suffix which would be removed once -+// end-to-end testing of the policy is completed. -+const RLSLoadBalancingPolicyName = "rls_experimental" -diff --git a/vendor/google.golang.org/grpc/internal/metadata/metadata.go b/vendor/google.golang.org/grpc/internal/metadata/metadata.go -new file mode 100755 -index 0000000..c82e608 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/metadata/metadata.go -@@ -0,0 +1,132 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package metadata contains functions to set and get metadata from addresses. -+// -+// This package is experimental. -+package metadata -+ -+import ( -+ "fmt" -+ "strings" -+ -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/resolver" -+) -+ -+type mdKeyType string -+ -+const mdKey = mdKeyType("grpc.internal.address.metadata") -+ -+type mdValue metadata.MD -+ -+func (m mdValue) Equal(o interface{}) bool { -+ om, ok := o.(mdValue) -+ if !ok { -+ return false -+ } -+ if len(m) != len(om) { -+ return false -+ } -+ for k, v := range m { -+ ov := om[k] -+ if len(ov) != len(v) { -+ return false -+ } -+ for i, ve := range v { -+ if ov[i] != ve { -+ return false -+ } -+ } -+ } -+ return true -+} -+ -+// Get returns the metadata of addr. -+func Get(addr resolver.Address) metadata.MD { -+ attrs := addr.Attributes -+ if attrs == nil { -+ return nil -+ } -+ md, _ := attrs.Value(mdKey).(mdValue) -+ return metadata.MD(md) -+} -+ -+// Set sets (overrides) the metadata in addr. -+// -+// When a SubConn is created with this address, the RPCs sent on it will all -+// have this metadata. -+func Set(addr resolver.Address, md metadata.MD) resolver.Address { -+ addr.Attributes = addr.Attributes.WithValue(mdKey, mdValue(md)) -+ return addr -+} -+ -+// Validate validates every pair in md with ValidatePair. -+func Validate(md metadata.MD) error { -+ for k, vals := range md { -+ if err := ValidatePair(k, vals...); err != nil { -+ return err -+ } -+ } -+ return nil -+} -+ -+// hasNotPrintable return true if msg contains any characters which are not in %x20-%x7E -+func hasNotPrintable(msg string) bool { -+ // for i that saving a conversion if not using for range -+ for i := 0; i < len(msg); i++ { -+ if msg[i] < 0x20 || msg[i] > 0x7E { -+ return true -+ } -+ } -+ return false -+} -+ -+// ValidatePair validate a key-value pair with the following rules (the pseudo-header will be skipped) : -+// -+// - key must contain one or more characters. -+// - the characters in the key must be contained in [0-9 a-z _ - .]. -+// - if the key ends with a "-bin" suffix, no validation of the corresponding value is performed. -+// - the characters in the every value must be printable (in [%x20-%x7E]). -+func ValidatePair(key string, vals ...string) error { -+ // key should not be empty -+ if key == "" { -+ return fmt.Errorf("there is an empty key in the header") -+ } -+ // pseudo-header will be ignored -+ if key[0] == ':' { -+ return nil -+ } -+ // check key, for i that saving a conversion if not using for range -+ for i := 0; i < len(key); i++ { -+ r := key[i] -+ if !(r >= 'a' && r <= 'z') && !(r >= '0' && r <= '9') && r != '.' && r != '-' && r != '_' { -+ return fmt.Errorf("header key %q contains illegal characters not in [0-9a-z-_.]", key) -+ } -+ } -+ if strings.HasSuffix(key, "-bin") { -+ return nil -+ } -+ // check value -+ for _, val := range vals { -+ if hasNotPrintable(val) { -+ return fmt.Errorf("header key %q contains value with non-printable ASCII characters", key) -+ } -+ } -+ return nil -+} -diff --git a/vendor/google.golang.org/grpc/internal/pretty/pretty.go b/vendor/google.golang.org/grpc/internal/pretty/pretty.go -new file mode 100755 -index 0000000..0177af4 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/pretty/pretty.go -@@ -0,0 +1,82 @@ -+/* -+ * -+ * Copyright 2021 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package pretty defines helper functions to pretty-print structs for logging. -+package pretty -+ -+import ( -+ "bytes" -+ "encoding/json" -+ "fmt" -+ -+ "github.com/golang/protobuf/jsonpb" -+ protov1 "github.com/golang/protobuf/proto" -+ "google.golang.org/protobuf/encoding/protojson" -+ protov2 "google.golang.org/protobuf/proto" -+) -+ -+const jsonIndent = " " -+ -+// ToJSON marshals the input into a json string. -+// -+// If marshal fails, it falls back to fmt.Sprintf("%+v"). -+func ToJSON(e interface{}) string { -+ switch ee := e.(type) { -+ case protov1.Message: -+ mm := jsonpb.Marshaler{Indent: jsonIndent} -+ ret, err := mm.MarshalToString(ee) -+ if err != nil { -+ // This may fail for proto.Anys, e.g. for xDS v2, LDS, the v2 -+ // messages are not imported, and this will fail because the message -+ // is not found. -+ return fmt.Sprintf("%+v", ee) -+ } -+ return ret -+ case protov2.Message: -+ mm := protojson.MarshalOptions{ -+ Multiline: true, -+ Indent: jsonIndent, -+ } -+ ret, err := mm.Marshal(ee) -+ if err != nil { -+ // This may fail for proto.Anys, e.g. for xDS v2, LDS, the v2 -+ // messages are not imported, and this will fail because the message -+ // is not found. -+ return fmt.Sprintf("%+v", ee) -+ } -+ return string(ret) -+ default: -+ ret, err := json.MarshalIndent(ee, "", jsonIndent) -+ if err != nil { -+ return fmt.Sprintf("%+v", ee) -+ } -+ return string(ret) -+ } -+} -+ -+// FormatJSON formats the input json bytes with indentation. -+// -+// If Indent fails, it returns the unchanged input as string. -+func FormatJSON(b []byte) string { -+ var out bytes.Buffer -+ err := json.Indent(&out, b, "", jsonIndent) -+ if err != nil { -+ return string(b) -+ } -+ return out.String() -+} -diff --git a/vendor/google.golang.org/grpc/internal/resolver/config_selector.go b/vendor/google.golang.org/grpc/internal/resolver/config_selector.go -new file mode 100755 -index 0000000..c7a18a9 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/resolver/config_selector.go -@@ -0,0 +1,167 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package resolver provides internal resolver-related functionality. -+package resolver -+ -+import ( -+ "context" -+ "sync" -+ -+ "google.golang.org/grpc/internal/serviceconfig" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/resolver" -+) -+ -+// ConfigSelector controls what configuration to use for every RPC. -+type ConfigSelector interface { -+ // Selects the configuration for the RPC, or terminates it using the error. -+ // This error will be converted by the gRPC library to a status error with -+ // code UNKNOWN if it is not returned as a status error. -+ SelectConfig(RPCInfo) (*RPCConfig, error) -+} -+ -+// RPCInfo contains RPC information needed by a ConfigSelector. -+type RPCInfo struct { -+ // Context is the user's context for the RPC and contains headers and -+ // application timeout. It is passed for interception purposes and for -+ // efficiency reasons. SelectConfig should not be blocking. -+ Context context.Context -+ Method string // i.e. "/Service/Method" -+} -+ -+// RPCConfig describes the configuration to use for each RPC. -+type RPCConfig struct { -+ // The context to use for the remainder of the RPC; can pass info to LB -+ // policy or affect timeout or metadata. -+ Context context.Context -+ MethodConfig serviceconfig.MethodConfig // configuration to use for this RPC -+ OnCommitted func() // Called when the RPC has been committed (retries no longer possible) -+ Interceptor ClientInterceptor -+} -+ -+// ClientStream is the same as grpc.ClientStream, but defined here for circular -+// dependency reasons. -+type ClientStream interface { -+ // Header returns the header metadata received from the server if there -+ // is any. It blocks if the metadata is not ready to read. -+ Header() (metadata.MD, error) -+ // Trailer returns the trailer metadata from the server, if there is any. -+ // It must only be called after stream.CloseAndRecv has returned, or -+ // stream.Recv has returned a non-nil error (including io.EOF). -+ Trailer() metadata.MD -+ // CloseSend closes the send direction of the stream. It closes the stream -+ // when non-nil error is met. It is also not safe to call CloseSend -+ // concurrently with SendMsg. -+ CloseSend() error -+ // Context returns the context for this stream. -+ // -+ // It should not be called until after Header or RecvMsg has returned. Once -+ // called, subsequent client-side retries are disabled. -+ Context() context.Context -+ // SendMsg is generally called by generated code. On error, SendMsg aborts -+ // the stream. If the error was generated by the client, the status is -+ // returned directly; otherwise, io.EOF is returned and the status of -+ // the stream may be discovered using RecvMsg. -+ // -+ // SendMsg blocks until: -+ // - There is sufficient flow control to schedule m with the transport, or -+ // - The stream is done, or -+ // - The stream breaks. -+ // -+ // SendMsg does not wait until the message is received by the server. An -+ // untimely stream closure may result in lost messages. To ensure delivery, -+ // users should ensure the RPC completed successfully using RecvMsg. -+ // -+ // It is safe to have a goroutine calling SendMsg and another goroutine -+ // calling RecvMsg on the same stream at the same time, but it is not safe -+ // to call SendMsg on the same stream in different goroutines. It is also -+ // not safe to call CloseSend concurrently with SendMsg. -+ SendMsg(m interface{}) error -+ // RecvMsg blocks until it receives a message into m or the stream is -+ // done. It returns io.EOF when the stream completes successfully. On -+ // any other error, the stream is aborted and the error contains the RPC -+ // status. -+ // -+ // It is safe to have a goroutine calling SendMsg and another goroutine -+ // calling RecvMsg on the same stream at the same time, but it is not -+ // safe to call RecvMsg on the same stream in different goroutines. -+ RecvMsg(m interface{}) error -+} -+ -+// ClientInterceptor is an interceptor for gRPC client streams. -+type ClientInterceptor interface { -+ // NewStream produces a ClientStream for an RPC which may optionally use -+ // the provided function to produce a stream for delegation. Note: -+ // RPCInfo.Context should not be used (will be nil). -+ // -+ // done is invoked when the RPC is finished using its connection, or could -+ // not be assigned a connection. RPC operations may still occur on -+ // ClientStream after done is called, since the interceptor is invoked by -+ // application-layer operations. done must never be nil when called. -+ NewStream(ctx context.Context, ri RPCInfo, done func(), newStream func(ctx context.Context, done func()) (ClientStream, error)) (ClientStream, error) -+} -+ -+// ServerInterceptor is an interceptor for incoming RPC's on gRPC server side. -+type ServerInterceptor interface { -+ // AllowRPC checks if an incoming RPC is allowed to proceed based on -+ // information about connection RPC was received on, and HTTP Headers. This -+ // information will be piped into context. -+ AllowRPC(ctx context.Context) error // TODO: Make this a real interceptor for filters such as rate limiting. -+} -+ -+type csKeyType string -+ -+const csKey = csKeyType("grpc.internal.resolver.configSelector") -+ -+// SetConfigSelector sets the config selector in state and returns the new -+// state. -+func SetConfigSelector(state resolver.State, cs ConfigSelector) resolver.State { -+ state.Attributes = state.Attributes.WithValue(csKey, cs) -+ return state -+} -+ -+// GetConfigSelector retrieves the config selector from state, if present, and -+// returns it or nil if absent. -+func GetConfigSelector(state resolver.State) ConfigSelector { -+ cs, _ := state.Attributes.Value(csKey).(ConfigSelector) -+ return cs -+} -+ -+// SafeConfigSelector allows for safe switching of ConfigSelector -+// implementations such that previous values are guaranteed to not be in use -+// when UpdateConfigSelector returns. -+type SafeConfigSelector struct { -+ mu sync.RWMutex -+ cs ConfigSelector -+} -+ -+// UpdateConfigSelector swaps to the provided ConfigSelector and blocks until -+// all uses of the previous ConfigSelector have completed. -+func (scs *SafeConfigSelector) UpdateConfigSelector(cs ConfigSelector) { -+ scs.mu.Lock() -+ defer scs.mu.Unlock() -+ scs.cs = cs -+} -+ -+// SelectConfig defers to the current ConfigSelector in scs. -+func (scs *SafeConfigSelector) SelectConfig(r RPCInfo) (*RPCConfig, error) { -+ scs.mu.RLock() -+ defer scs.mu.RUnlock() -+ return scs.cs.SelectConfig(r) -+} -diff --git a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go -new file mode 100755 -index 0000000..99e1e5b ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go -@@ -0,0 +1,470 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package dns implements a dns resolver to be installed as the default resolver -+// in grpc. -+package dns -+ -+import ( -+ "context" -+ "encoding/json" -+ "errors" -+ "fmt" -+ "net" -+ "os" -+ "strconv" -+ "strings" -+ "sync" -+ "time" -+ -+ grpclbstate "google.golang.org/grpc/balancer/grpclb/state" -+ "google.golang.org/grpc/grpclog" -+ "google.golang.org/grpc/internal/backoff" -+ "google.golang.org/grpc/internal/envconfig" -+ "google.golang.org/grpc/internal/grpcrand" -+ "google.golang.org/grpc/resolver" -+ "google.golang.org/grpc/serviceconfig" -+) -+ -+// EnableSRVLookups controls whether the DNS resolver attempts to fetch gRPCLB -+// addresses from SRV records. Must not be changed after init time. -+var EnableSRVLookups = false -+ -+var logger = grpclog.Component("dns") -+ -+// Globals to stub out in tests. TODO: Perhaps these two can be combined into a -+// single variable for testing the resolver? -+var ( -+ newTimer = time.NewTimer -+ newTimerDNSResRate = time.NewTimer -+) -+ -+func init() { -+ resolver.Register(NewBuilder()) -+} -+ -+const ( -+ defaultPort = "443" -+ defaultDNSSvrPort = "53" -+ golang = "GO" -+ // txtPrefix is the prefix string to be prepended to the host name for txt -+ // record lookup. -+ txtPrefix = "_grpc_config." -+ // In DNS, service config is encoded in a TXT record via the mechanism -+ // described in RFC-1464 using the attribute name grpc_config. -+ txtAttribute = "grpc_config=" -+) -+ -+var ( -+ errMissingAddr = errors.New("dns resolver: missing address") -+ -+ // Addresses ending with a colon that is supposed to be the separator -+ // between host and port is not allowed. E.g. "::" is a valid address as -+ // it is an IPv6 address (host only) and "[::]:" is invalid as it ends with -+ // a colon as the host and port separator -+ errEndsWithColon = errors.New("dns resolver: missing port after port-separator colon") -+) -+ -+var ( -+ defaultResolver netResolver = net.DefaultResolver -+ // To prevent excessive re-resolution, we enforce a rate limit on DNS -+ // resolution requests. -+ minDNSResRate = 30 * time.Second -+) -+ -+var addressDialer = func(address string) func(context.Context, string, string) (net.Conn, error) { -+ return func(ctx context.Context, network, _ string) (net.Conn, error) { -+ var dialer net.Dialer -+ return dialer.DialContext(ctx, network, address) -+ } -+} -+ -+var newNetResolver = func(authority string) (netResolver, error) { -+ host, port, err := parseTarget(authority, defaultDNSSvrPort) -+ if err != nil { -+ return nil, err -+ } -+ -+ authorityWithPort := net.JoinHostPort(host, port) -+ -+ return &net.Resolver{ -+ PreferGo: true, -+ Dial: addressDialer(authorityWithPort), -+ }, nil -+} -+ -+// NewBuilder creates a dnsBuilder which is used to factory DNS resolvers. -+func NewBuilder() resolver.Builder { -+ return &dnsBuilder{} -+} -+ -+type dnsBuilder struct{} -+ -+// Build creates and starts a DNS resolver that watches the name resolution of -+// the target. -+func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { -+ host, port, err := parseTarget(target.Endpoint(), defaultPort) -+ if err != nil { -+ return nil, err -+ } -+ -+ // IP address. -+ if ipAddr, ok := formatIP(host); ok { -+ addr := []resolver.Address{{Addr: ipAddr + ":" + port}} -+ cc.UpdateState(resolver.State{Addresses: addr}) -+ return deadResolver{}, nil -+ } -+ -+ // DNS address (non-IP). -+ ctx, cancel := context.WithCancel(context.Background()) -+ d := &dnsResolver{ -+ host: host, -+ port: port, -+ ctx: ctx, -+ cancel: cancel, -+ cc: cc, -+ rn: make(chan struct{}, 1), -+ disableServiceConfig: opts.DisableServiceConfig, -+ } -+ -+ if target.URL.Host == "" { -+ d.resolver = defaultResolver -+ } else { -+ d.resolver, err = newNetResolver(target.URL.Host) -+ if err != nil { -+ return nil, err -+ } -+ } -+ -+ d.wg.Add(1) -+ go d.watcher() -+ return d, nil -+} -+ -+// Scheme returns the naming scheme of this resolver builder, which is "dns". -+func (b *dnsBuilder) Scheme() string { -+ return "dns" -+} -+ -+type netResolver interface { -+ LookupHost(ctx context.Context, host string) (addrs []string, err error) -+ LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*net.SRV, err error) -+ LookupTXT(ctx context.Context, name string) (txts []string, err error) -+} -+ -+// deadResolver is a resolver that does nothing. -+type deadResolver struct{} -+ -+func (deadResolver) ResolveNow(resolver.ResolveNowOptions) {} -+ -+func (deadResolver) Close() {} -+ -+// dnsResolver watches for the name resolution update for a non-IP target. -+type dnsResolver struct { -+ host string -+ port string -+ resolver netResolver -+ ctx context.Context -+ cancel context.CancelFunc -+ cc resolver.ClientConn -+ // rn channel is used by ResolveNow() to force an immediate resolution of the -+ // target. -+ rn chan struct{} -+ // wg is used to enforce Close() to return after the watcher() goroutine has -+ // finished. Otherwise, data race will be possible. [Race Example] in -+ // dns_resolver_test we replace the real lookup functions with mocked ones to -+ // facilitate testing. If Close() doesn't wait for watcher() goroutine -+ // finishes, race detector sometimes will warns lookup (READ the lookup -+ // function pointers) inside watcher() goroutine has data race with -+ // replaceNetFunc (WRITE the lookup function pointers). -+ wg sync.WaitGroup -+ disableServiceConfig bool -+} -+ -+// ResolveNow invoke an immediate resolution of the target that this -+// dnsResolver watches. -+func (d *dnsResolver) ResolveNow(resolver.ResolveNowOptions) { -+ select { -+ case d.rn <- struct{}{}: -+ default: -+ } -+} -+ -+// Close closes the dnsResolver. -+func (d *dnsResolver) Close() { -+ d.cancel() -+ d.wg.Wait() -+} -+ -+func (d *dnsResolver) watcher() { -+ defer d.wg.Done() -+ backoffIndex := 1 -+ for { -+ state, err := d.lookup() -+ if err != nil { -+ // Report error to the underlying grpc.ClientConn. -+ d.cc.ReportError(err) -+ } else { -+ err = d.cc.UpdateState(*state) -+ } -+ -+ var timer *time.Timer -+ if err == nil { -+ // Success resolving, wait for the next ResolveNow. However, also wait 30 -+ // seconds at the very least to prevent constantly re-resolving. -+ backoffIndex = 1 -+ timer = newTimerDNSResRate(minDNSResRate) -+ select { -+ case <-d.ctx.Done(): -+ timer.Stop() -+ return -+ case <-d.rn: -+ } -+ } else { -+ // Poll on an error found in DNS Resolver or an error received from -+ // ClientConn. -+ timer = newTimer(backoff.DefaultExponential.Backoff(backoffIndex)) -+ backoffIndex++ -+ } -+ select { -+ case <-d.ctx.Done(): -+ timer.Stop() -+ return -+ case <-timer.C: -+ } -+ } -+} -+ -+func (d *dnsResolver) lookupSRV() ([]resolver.Address, error) { -+ if !EnableSRVLookups { -+ return nil, nil -+ } -+ var newAddrs []resolver.Address -+ _, srvs, err := d.resolver.LookupSRV(d.ctx, "grpclb", "tcp", d.host) -+ if err != nil { -+ err = handleDNSError(err, "SRV") // may become nil -+ return nil, err -+ } -+ for _, s := range srvs { -+ lbAddrs, err := d.resolver.LookupHost(d.ctx, s.Target) -+ if err != nil { -+ err = handleDNSError(err, "A") // may become nil -+ if err == nil { -+ // If there are other SRV records, look them up and ignore this -+ // one that does not exist. -+ continue -+ } -+ return nil, err -+ } -+ for _, a := range lbAddrs { -+ ip, ok := formatIP(a) -+ if !ok { -+ return nil, fmt.Errorf("dns: error parsing A record IP address %v", a) -+ } -+ addr := ip + ":" + strconv.Itoa(int(s.Port)) -+ newAddrs = append(newAddrs, resolver.Address{Addr: addr, ServerName: s.Target}) -+ } -+ } -+ return newAddrs, nil -+} -+ -+func handleDNSError(err error, lookupType string) error { -+ dnsErr, ok := err.(*net.DNSError) -+ if ok && !dnsErr.IsTimeout && !dnsErr.IsTemporary { -+ // Timeouts and temporary errors should be communicated to gRPC to -+ // attempt another DNS query (with backoff). Other errors should be -+ // suppressed (they may represent the absence of a TXT record). -+ return nil -+ } -+ if err != nil { -+ err = fmt.Errorf("dns: %v record lookup error: %v", lookupType, err) -+ logger.Info(err) -+ } -+ return err -+} -+ -+func (d *dnsResolver) lookupTXT() *serviceconfig.ParseResult { -+ ss, err := d.resolver.LookupTXT(d.ctx, txtPrefix+d.host) -+ if err != nil { -+ if envconfig.TXTErrIgnore { -+ return nil -+ } -+ if err = handleDNSError(err, "TXT"); err != nil { -+ return &serviceconfig.ParseResult{Err: err} -+ } -+ return nil -+ } -+ var res string -+ for _, s := range ss { -+ res += s -+ } -+ -+ // TXT record must have "grpc_config=" attribute in order to be used as -+ // service config. -+ if !strings.HasPrefix(res, txtAttribute) { -+ logger.Warningf("dns: TXT record %v missing %v attribute", res, txtAttribute) -+ // This is not an error; it is the equivalent of not having a service -+ // config. -+ return nil -+ } -+ sc := canaryingSC(strings.TrimPrefix(res, txtAttribute)) -+ return d.cc.ParseServiceConfig(sc) -+} -+ -+func (d *dnsResolver) lookupHost() ([]resolver.Address, error) { -+ addrs, err := d.resolver.LookupHost(d.ctx, d.host) -+ if err != nil { -+ err = handleDNSError(err, "A") -+ return nil, err -+ } -+ newAddrs := make([]resolver.Address, 0, len(addrs)) -+ for _, a := range addrs { -+ ip, ok := formatIP(a) -+ if !ok { -+ return nil, fmt.Errorf("dns: error parsing A record IP address %v", a) -+ } -+ addr := ip + ":" + d.port -+ newAddrs = append(newAddrs, resolver.Address{Addr: addr}) -+ } -+ return newAddrs, nil -+} -+ -+func (d *dnsResolver) lookup() (*resolver.State, error) { -+ srv, srvErr := d.lookupSRV() -+ addrs, hostErr := d.lookupHost() -+ if hostErr != nil && (srvErr != nil || len(srv) == 0) { -+ return nil, hostErr -+ } -+ -+ state := resolver.State{Addresses: addrs} -+ if len(srv) > 0 { -+ state = grpclbstate.Set(state, &grpclbstate.State{BalancerAddresses: srv}) -+ } -+ if !d.disableServiceConfig { -+ state.ServiceConfig = d.lookupTXT() -+ } -+ return &state, nil -+} -+ -+// formatIP returns ok = false if addr is not a valid textual representation of -+// an IP address. If addr is an IPv4 address, return the addr and ok = true. -+// If addr is an IPv6 address, return the addr enclosed in square brackets and -+// ok = true. -+func formatIP(addr string) (addrIP string, ok bool) { -+ ip := net.ParseIP(addr) -+ if ip == nil { -+ return "", false -+ } -+ if ip.To4() != nil { -+ return addr, true -+ } -+ return "[" + addr + "]", true -+} -+ -+// parseTarget takes the user input target string and default port, returns -+// formatted host and port info. If target doesn't specify a port, set the port -+// to be the defaultPort. If target is in IPv6 format and host-name is enclosed -+// in square brackets, brackets are stripped when setting the host. -+// examples: -+// target: "www.google.com" defaultPort: "443" returns host: "www.google.com", port: "443" -+// target: "ipv4-host:80" defaultPort: "443" returns host: "ipv4-host", port: "80" -+// target: "[ipv6-host]" defaultPort: "443" returns host: "ipv6-host", port: "443" -+// target: ":80" defaultPort: "443" returns host: "localhost", port: "80" -+func parseTarget(target, defaultPort string) (host, port string, err error) { -+ if target == "" { -+ return "", "", errMissingAddr -+ } -+ if ip := net.ParseIP(target); ip != nil { -+ // target is an IPv4 or IPv6(without brackets) address -+ return target, defaultPort, nil -+ } -+ if host, port, err = net.SplitHostPort(target); err == nil { -+ if port == "" { -+ // If the port field is empty (target ends with colon), e.g. "[::1]:", -+ // this is an error. -+ return "", "", errEndsWithColon -+ } -+ // target has port, i.e ipv4-host:port, [ipv6-host]:port, host-name:port -+ if host == "" { -+ // Keep consistent with net.Dial(): If the host is empty, as in ":80", -+ // the local system is assumed. -+ host = "localhost" -+ } -+ return host, port, nil -+ } -+ if host, port, err = net.SplitHostPort(target + ":" + defaultPort); err == nil { -+ // target doesn't have port -+ return host, port, nil -+ } -+ return "", "", fmt.Errorf("invalid target address %v, error info: %v", target, err) -+} -+ -+type rawChoice struct { -+ ClientLanguage *[]string `json:"clientLanguage,omitempty"` -+ Percentage *int `json:"percentage,omitempty"` -+ ClientHostName *[]string `json:"clientHostName,omitempty"` -+ ServiceConfig *json.RawMessage `json:"serviceConfig,omitempty"` -+} -+ -+func containsString(a *[]string, b string) bool { -+ if a == nil { -+ return true -+ } -+ for _, c := range *a { -+ if c == b { -+ return true -+ } -+ } -+ return false -+} -+ -+func chosenByPercentage(a *int) bool { -+ if a == nil { -+ return true -+ } -+ return grpcrand.Intn(100)+1 <= *a -+} -+ -+func canaryingSC(js string) string { -+ if js == "" { -+ return "" -+ } -+ var rcs []rawChoice -+ err := json.Unmarshal([]byte(js), &rcs) -+ if err != nil { -+ logger.Warningf("dns: error parsing service config json: %v", err) -+ return "" -+ } -+ cliHostname, err := os.Hostname() -+ if err != nil { -+ logger.Warningf("dns: error getting client hostname: %v", err) -+ return "" -+ } -+ var sc string -+ for _, c := range rcs { -+ if !containsString(c.ClientLanguage, golang) || -+ !chosenByPercentage(c.Percentage) || -+ !containsString(c.ClientHostName, cliHostname) || -+ c.ServiceConfig == nil { -+ continue -+ } -+ sc = string(*c.ServiceConfig) -+ break -+ } -+ return sc -+} -diff --git a/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go b/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go -new file mode 100755 -index 0000000..afac565 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go -@@ -0,0 +1,64 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package passthrough implements a pass-through resolver. It sends the target -+// name without scheme back to gRPC as resolved address. -+package passthrough -+ -+import ( -+ "errors" -+ -+ "google.golang.org/grpc/resolver" -+) -+ -+const scheme = "passthrough" -+ -+type passthroughBuilder struct{} -+ -+func (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { -+ if target.Endpoint() == "" && opts.Dialer == nil { -+ return nil, errors.New("passthrough: received empty target in Build()") -+ } -+ r := &passthroughResolver{ -+ target: target, -+ cc: cc, -+ } -+ r.start() -+ return r, nil -+} -+ -+func (*passthroughBuilder) Scheme() string { -+ return scheme -+} -+ -+type passthroughResolver struct { -+ target resolver.Target -+ cc resolver.ClientConn -+} -+ -+func (r *passthroughResolver) start() { -+ r.cc.UpdateState(resolver.State{Addresses: []resolver.Address{{Addr: r.target.Endpoint()}}}) -+} -+ -+func (*passthroughResolver) ResolveNow(o resolver.ResolveNowOptions) {} -+ -+func (*passthroughResolver) Close() {} -+ -+func init() { -+ resolver.Register(&passthroughBuilder{}) -+} -diff --git a/vendor/google.golang.org/grpc/internal/resolver/unix/unix.go b/vendor/google.golang.org/grpc/internal/resolver/unix/unix.go -new file mode 100755 -index 0000000..1609116 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/resolver/unix/unix.go -@@ -0,0 +1,74 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package unix implements a resolver for unix targets. -+package unix -+ -+import ( -+ "fmt" -+ -+ "google.golang.org/grpc/internal/transport/networktype" -+ "google.golang.org/grpc/resolver" -+) -+ -+const unixScheme = "unix" -+const unixAbstractScheme = "unix-abstract" -+ -+type builder struct { -+ scheme string -+} -+ -+func (b *builder) Build(target resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) (resolver.Resolver, error) { -+ if target.URL.Host != "" { -+ return nil, fmt.Errorf("invalid (non-empty) authority: %v", target.URL.Host) -+ } -+ -+ // gRPC was parsing the dial target manually before PR #4817, and we -+ // switched to using url.Parse() in that PR. To avoid breaking existing -+ // resolver implementations we ended up stripping the leading "/" from the -+ // endpoint. This obviously does not work for the "unix" scheme. Hence we -+ // end up using the parsed URL instead. -+ endpoint := target.URL.Path -+ if endpoint == "" { -+ endpoint = target.URL.Opaque -+ } -+ addr := resolver.Address{Addr: endpoint} -+ if b.scheme == unixAbstractScheme { -+ // We can not prepend \0 as c++ gRPC does, as in Golang '@' is used to signify we do -+ // not want trailing \0 in address. -+ addr.Addr = "@" + addr.Addr -+ } -+ cc.UpdateState(resolver.State{Addresses: []resolver.Address{networktype.Set(addr, "unix")}}) -+ return &nopResolver{}, nil -+} -+ -+func (b *builder) Scheme() string { -+ return b.scheme -+} -+ -+type nopResolver struct { -+} -+ -+func (*nopResolver) ResolveNow(resolver.ResolveNowOptions) {} -+ -+func (*nopResolver) Close() {} -+ -+func init() { -+ resolver.Register(&builder{scheme: unixScheme}) -+ resolver.Register(&builder{scheme: unixAbstractScheme}) -+} -diff --git a/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go b/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go -new file mode 100755 -index 0000000..11d82af ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go -@@ -0,0 +1,130 @@ -+/* -+ * -+ * Copyright 2023 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package serviceconfig -+ -+import ( -+ "encoding/json" -+ "fmt" -+ "math" -+ "strconv" -+ "strings" -+ "time" -+) -+ -+// Duration defines JSON marshal and unmarshal methods to conform to the -+// protobuf JSON spec defined [here]. -+// -+// [here]: https://protobuf.dev/reference/protobuf/google.protobuf/#duration -+type Duration time.Duration -+ -+func (d Duration) String() string { -+ return fmt.Sprint(time.Duration(d)) -+} -+ -+// MarshalJSON converts from d to a JSON string output. -+func (d Duration) MarshalJSON() ([]byte, error) { -+ ns := time.Duration(d).Nanoseconds() -+ sec := ns / int64(time.Second) -+ ns = ns % int64(time.Second) -+ -+ var sign string -+ if sec < 0 || ns < 0 { -+ sign, sec, ns = "-", -1*sec, -1*ns -+ } -+ -+ // Generated output always contains 0, 3, 6, or 9 fractional digits, -+ // depending on required precision. -+ str := fmt.Sprintf("%s%d.%09d", sign, sec, ns) -+ str = strings.TrimSuffix(str, "000") -+ str = strings.TrimSuffix(str, "000") -+ str = strings.TrimSuffix(str, ".000") -+ return []byte(fmt.Sprintf("\"%ss\"", str)), nil -+} -+ -+// UnmarshalJSON unmarshals b as a duration JSON string into d. -+func (d *Duration) UnmarshalJSON(b []byte) error { -+ var s string -+ if err := json.Unmarshal(b, &s); err != nil { -+ return err -+ } -+ if !strings.HasSuffix(s, "s") { -+ return fmt.Errorf("malformed duration %q: missing seconds unit", s) -+ } -+ neg := false -+ if s[0] == '-' { -+ neg = true -+ s = s[1:] -+ } -+ ss := strings.SplitN(s[:len(s)-1], ".", 3) -+ if len(ss) > 2 { -+ return fmt.Errorf("malformed duration %q: too many decimals", s) -+ } -+ // hasDigits is set if either the whole or fractional part of the number is -+ // present, since both are optional but one is required. -+ hasDigits := false -+ var sec, ns int64 -+ if len(ss[0]) > 0 { -+ var err error -+ if sec, err = strconv.ParseInt(ss[0], 10, 64); err != nil { -+ return fmt.Errorf("malformed duration %q: %v", s, err) -+ } -+ // Maximum seconds value per the durationpb spec. -+ const maxProtoSeconds = 315_576_000_000 -+ if sec > maxProtoSeconds { -+ return fmt.Errorf("out of range: %q", s) -+ } -+ hasDigits = true -+ } -+ if len(ss) == 2 && len(ss[1]) > 0 { -+ if len(ss[1]) > 9 { -+ return fmt.Errorf("malformed duration %q: too many digits after decimal", s) -+ } -+ var err error -+ if ns, err = strconv.ParseInt(ss[1], 10, 64); err != nil { -+ return fmt.Errorf("malformed duration %q: %v", s, err) -+ } -+ for i := 9; i > len(ss[1]); i-- { -+ ns *= 10 -+ } -+ hasDigits = true -+ } -+ if !hasDigits { -+ return fmt.Errorf("malformed duration %q: contains no numbers", s) -+ } -+ -+ if neg { -+ sec *= -1 -+ ns *= -1 -+ } -+ -+ // Maximum/minimum seconds/nanoseconds representable by Go's time.Duration. -+ const maxSeconds = math.MaxInt64 / int64(time.Second) -+ const maxNanosAtMaxSeconds = math.MaxInt64 % int64(time.Second) -+ const minSeconds = math.MinInt64 / int64(time.Second) -+ const minNanosAtMinSeconds = math.MinInt64 % int64(time.Second) -+ -+ if sec > maxSeconds || (sec == maxSeconds && ns >= maxNanosAtMaxSeconds) { -+ *d = Duration(math.MaxInt64) -+ } else if sec < minSeconds || (sec == minSeconds && ns <= minNanosAtMinSeconds) { -+ *d = Duration(math.MinInt64) -+ } else { -+ *d = Duration(sec*int64(time.Second) + ns) -+ } -+ return nil -+} -diff --git a/vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go b/vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go -new file mode 100755 -index 0000000..51e733e ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go -@@ -0,0 +1,180 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package serviceconfig contains utility functions to parse service config. -+package serviceconfig -+ -+import ( -+ "encoding/json" -+ "fmt" -+ "time" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/grpclog" -+ externalserviceconfig "google.golang.org/grpc/serviceconfig" -+) -+ -+var logger = grpclog.Component("core") -+ -+// BalancerConfig wraps the name and config associated with one load balancing -+// policy. It corresponds to a single entry of the loadBalancingConfig field -+// from ServiceConfig. -+// -+// It implements the json.Unmarshaler interface. -+// -+// https://github.com/grpc/grpc-proto/blob/54713b1e8bc6ed2d4f25fb4dff527842150b91b2/grpc/service_config/service_config.proto#L247 -+type BalancerConfig struct { -+ Name string -+ Config externalserviceconfig.LoadBalancingConfig -+} -+ -+type intermediateBalancerConfig []map[string]json.RawMessage -+ -+// MarshalJSON implements the json.Marshaler interface. -+// -+// It marshals the balancer and config into a length-1 slice -+// ([]map[string]config). -+func (bc *BalancerConfig) MarshalJSON() ([]byte, error) { -+ if bc.Config == nil { -+ // If config is nil, return empty config `{}`. -+ return []byte(fmt.Sprintf(`[{%q: %v}]`, bc.Name, "{}")), nil -+ } -+ c, err := json.Marshal(bc.Config) -+ if err != nil { -+ return nil, err -+ } -+ return []byte(fmt.Sprintf(`[{%q: %s}]`, bc.Name, c)), nil -+} -+ -+// UnmarshalJSON implements the json.Unmarshaler interface. -+// -+// ServiceConfig contains a list of loadBalancingConfigs, each with a name and -+// config. This method iterates through that list in order, and stops at the -+// first policy that is supported. -+// - If the config for the first supported policy is invalid, the whole service -+// config is invalid. -+// - If the list doesn't contain any supported policy, the whole service config -+// is invalid. -+func (bc *BalancerConfig) UnmarshalJSON(b []byte) error { -+ var ir intermediateBalancerConfig -+ err := json.Unmarshal(b, &ir) -+ if err != nil { -+ return err -+ } -+ -+ var names []string -+ for i, lbcfg := range ir { -+ if len(lbcfg) != 1 { -+ return fmt.Errorf("invalid loadBalancingConfig: entry %v does not contain exactly 1 policy/config pair: %q", i, lbcfg) -+ } -+ -+ var ( -+ name string -+ jsonCfg json.RawMessage -+ ) -+ // Get the key:value pair from the map. We have already made sure that -+ // the map contains a single entry. -+ for name, jsonCfg = range lbcfg { -+ } -+ -+ names = append(names, name) -+ builder := balancer.Get(name) -+ if builder == nil { -+ // If the balancer is not registered, move on to the next config. -+ // This is not an error. -+ continue -+ } -+ bc.Name = name -+ -+ parser, ok := builder.(balancer.ConfigParser) -+ if !ok { -+ if string(jsonCfg) != "{}" { -+ logger.Warningf("non-empty balancer configuration %q, but balancer does not implement ParseConfig", string(jsonCfg)) -+ } -+ // Stop at this, though the builder doesn't support parsing config. -+ return nil -+ } -+ -+ cfg, err := parser.ParseConfig(jsonCfg) -+ if err != nil { -+ return fmt.Errorf("error parsing loadBalancingConfig for policy %q: %v", name, err) -+ } -+ bc.Config = cfg -+ return nil -+ } -+ // This is reached when the for loop iterates over all entries, but didn't -+ // return. This means we had a loadBalancingConfig slice but did not -+ // encounter a registered policy. The config is considered invalid in this -+ // case. -+ return fmt.Errorf("invalid loadBalancingConfig: no supported policies found in %v", names) -+} -+ -+// MethodConfig defines the configuration recommended by the service providers for a -+// particular method. -+type MethodConfig struct { -+ // WaitForReady indicates whether RPCs sent to this method should wait until -+ // the connection is ready by default (!failfast). The value specified via the -+ // gRPC client API will override the value set here. -+ WaitForReady *bool -+ // Timeout is the default timeout for RPCs sent to this method. The actual -+ // deadline used will be the minimum of the value specified here and the value -+ // set by the application via the gRPC client API. If either one is not set, -+ // then the other will be used. If neither is set, then the RPC has no deadline. -+ Timeout *time.Duration -+ // MaxReqSize is the maximum allowed payload size for an individual request in a -+ // stream (client->server) in bytes. The size which is measured is the serialized -+ // payload after per-message compression (but before stream compression) in bytes. -+ // The actual value used is the minimum of the value specified here and the value set -+ // by the application via the gRPC client API. If either one is not set, then the other -+ // will be used. If neither is set, then the built-in default is used. -+ MaxReqSize *int -+ // MaxRespSize is the maximum allowed payload size for an individual response in a -+ // stream (server->client) in bytes. -+ MaxRespSize *int -+ // RetryPolicy configures retry options for the method. -+ RetryPolicy *RetryPolicy -+} -+ -+// RetryPolicy defines the go-native version of the retry policy defined by the -+// service config here: -+// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#integration-with-service-config -+type RetryPolicy struct { -+ // MaxAttempts is the maximum number of attempts, including the original RPC. -+ // -+ // This field is required and must be two or greater. -+ MaxAttempts int -+ -+ // Exponential backoff parameters. The initial retry attempt will occur at -+ // random(0, initialBackoff). In general, the nth attempt will occur at -+ // random(0, -+ // min(initialBackoff*backoffMultiplier**(n-1), maxBackoff)). -+ // -+ // These fields are required and must be greater than zero. -+ InitialBackoff time.Duration -+ MaxBackoff time.Duration -+ BackoffMultiplier float64 -+ -+ // The set of status codes which may be retried. -+ // -+ // Status codes are specified as strings, e.g., "UNAVAILABLE". -+ // -+ // This field is required and must be non-empty. -+ // Note: a set is used to store this for easy lookup. -+ RetryableStatusCodes map[codes.Code]bool -+} -diff --git a/vendor/google.golang.org/grpc/internal/status/status.go b/vendor/google.golang.org/grpc/internal/status/status.go -new file mode 100755 -index 0000000..b0ead4f ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/status/status.go -@@ -0,0 +1,176 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package status implements errors returned by gRPC. These errors are -+// serialized and transmitted on the wire between server and client, and allow -+// for additional data to be transmitted via the Details field in the status -+// proto. gRPC service handlers should return an error created by this -+// package, and gRPC clients should expect a corresponding error to be -+// returned from the RPC call. -+// -+// This package upholds the invariants that a non-nil error may not -+// contain an OK code, and an OK code must result in a nil error. -+package status -+ -+import ( -+ "errors" -+ "fmt" -+ -+ "github.com/golang/protobuf/proto" -+ "github.com/golang/protobuf/ptypes" -+ spb "google.golang.org/genproto/googleapis/rpc/status" -+ "google.golang.org/grpc/codes" -+) -+ -+// Status represents an RPC status code, message, and details. It is immutable -+// and should be created with New, Newf, or FromProto. -+type Status struct { -+ s *spb.Status -+} -+ -+// New returns a Status representing c and msg. -+func New(c codes.Code, msg string) *Status { -+ return &Status{s: &spb.Status{Code: int32(c), Message: msg}} -+} -+ -+// Newf returns New(c, fmt.Sprintf(format, a...)). -+func Newf(c codes.Code, format string, a ...interface{}) *Status { -+ return New(c, fmt.Sprintf(format, a...)) -+} -+ -+// FromProto returns a Status representing s. -+func FromProto(s *spb.Status) *Status { -+ return &Status{s: proto.Clone(s).(*spb.Status)} -+} -+ -+// Err returns an error representing c and msg. If c is OK, returns nil. -+func Err(c codes.Code, msg string) error { -+ return New(c, msg).Err() -+} -+ -+// Errorf returns Error(c, fmt.Sprintf(format, a...)). -+func Errorf(c codes.Code, format string, a ...interface{}) error { -+ return Err(c, fmt.Sprintf(format, a...)) -+} -+ -+// Code returns the status code contained in s. -+func (s *Status) Code() codes.Code { -+ if s == nil || s.s == nil { -+ return codes.OK -+ } -+ return codes.Code(s.s.Code) -+} -+ -+// Message returns the message contained in s. -+func (s *Status) Message() string { -+ if s == nil || s.s == nil { -+ return "" -+ } -+ return s.s.Message -+} -+ -+// Proto returns s's status as an spb.Status proto message. -+func (s *Status) Proto() *spb.Status { -+ if s == nil { -+ return nil -+ } -+ return proto.Clone(s.s).(*spb.Status) -+} -+ -+// Err returns an immutable error representing s; returns nil if s.Code() is OK. -+func (s *Status) Err() error { -+ if s.Code() == codes.OK { -+ return nil -+ } -+ return &Error{s: s} -+} -+ -+// WithDetails returns a new status with the provided details messages appended to the status. -+// If any errors are encountered, it returns nil and the first error encountered. -+func (s *Status) WithDetails(details ...proto.Message) (*Status, error) { -+ if s.Code() == codes.OK { -+ return nil, errors.New("no error details for status with code OK") -+ } -+ // s.Code() != OK implies that s.Proto() != nil. -+ p := s.Proto() -+ for _, detail := range details { -+ any, err := ptypes.MarshalAny(detail) -+ if err != nil { -+ return nil, err -+ } -+ p.Details = append(p.Details, any) -+ } -+ return &Status{s: p}, nil -+} -+ -+// Details returns a slice of details messages attached to the status. -+// If a detail cannot be decoded, the error is returned in place of the detail. -+func (s *Status) Details() []interface{} { -+ if s == nil || s.s == nil { -+ return nil -+ } -+ details := make([]interface{}, 0, len(s.s.Details)) -+ for _, any := range s.s.Details { -+ detail := &ptypes.DynamicAny{} -+ if err := ptypes.UnmarshalAny(any, detail); err != nil { -+ details = append(details, err) -+ continue -+ } -+ details = append(details, detail.Message) -+ } -+ return details -+} -+ -+func (s *Status) String() string { -+ return fmt.Sprintf("rpc error: code = %s desc = %s", s.Code(), s.Message()) -+} -+ -+// Error wraps a pointer of a status proto. It implements error and Status, -+// and a nil *Error should never be returned by this package. -+type Error struct { -+ s *Status -+} -+ -+func (e *Error) Error() string { -+ return e.s.String() -+} -+ -+// GRPCStatus returns the Status represented by se. -+func (e *Error) GRPCStatus() *Status { -+ return e.s -+} -+ -+// Is implements future error.Is functionality. -+// A Error is equivalent if the code and message are identical. -+func (e *Error) Is(target error) bool { -+ tse, ok := target.(*Error) -+ if !ok { -+ return false -+ } -+ return proto.Equal(e.s.s, tse.s.s) -+} -+ -+// IsRestrictedControlPlaneCode returns whether the status includes a code -+// restricted for control plane usage as defined by gRFC A54. -+func IsRestrictedControlPlaneCode(s *Status) bool { -+ switch s.Code() { -+ case codes.InvalidArgument, codes.NotFound, codes.AlreadyExists, codes.FailedPrecondition, codes.Aborted, codes.OutOfRange, codes.DataLoss: -+ return true -+ } -+ return false -+} -diff --git a/vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go b/vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go -new file mode 100755 -index 0000000..b3a7227 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go -@@ -0,0 +1,112 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package syscall provides functionalities that grpc uses to get low-level operating system -+// stats/info. -+package syscall -+ -+import ( -+ "fmt" -+ "net" -+ "syscall" -+ "time" -+ -+ "golang.org/x/sys/unix" -+ "google.golang.org/grpc/grpclog" -+) -+ -+var logger = grpclog.Component("core") -+ -+// GetCPUTime returns the how much CPU time has passed since the start of this process. -+func GetCPUTime() int64 { -+ var ts unix.Timespec -+ if err := unix.ClockGettime(unix.CLOCK_PROCESS_CPUTIME_ID, &ts); err != nil { -+ logger.Fatal(err) -+ } -+ return ts.Nano() -+} -+ -+// Rusage is an alias for syscall.Rusage under linux environment. -+type Rusage = syscall.Rusage -+ -+// GetRusage returns the resource usage of current process. -+func GetRusage() *Rusage { -+ rusage := new(Rusage) -+ syscall.Getrusage(syscall.RUSAGE_SELF, rusage) -+ return rusage -+} -+ -+// CPUTimeDiff returns the differences of user CPU time and system CPU time used -+// between two Rusage structs. -+func CPUTimeDiff(first *Rusage, latest *Rusage) (float64, float64) { -+ var ( -+ utimeDiffs = latest.Utime.Sec - first.Utime.Sec -+ utimeDiffus = latest.Utime.Usec - first.Utime.Usec -+ stimeDiffs = latest.Stime.Sec - first.Stime.Sec -+ stimeDiffus = latest.Stime.Usec - first.Stime.Usec -+ ) -+ -+ uTimeElapsed := float64(utimeDiffs) + float64(utimeDiffus)*1.0e-6 -+ sTimeElapsed := float64(stimeDiffs) + float64(stimeDiffus)*1.0e-6 -+ -+ return uTimeElapsed, sTimeElapsed -+} -+ -+// SetTCPUserTimeout sets the TCP user timeout on a connection's socket -+func SetTCPUserTimeout(conn net.Conn, timeout time.Duration) error { -+ tcpconn, ok := conn.(*net.TCPConn) -+ if !ok { -+ // not a TCP connection. exit early -+ return nil -+ } -+ rawConn, err := tcpconn.SyscallConn() -+ if err != nil { -+ return fmt.Errorf("error getting raw connection: %v", err) -+ } -+ err = rawConn.Control(func(fd uintptr) { -+ err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_USER_TIMEOUT, int(timeout/time.Millisecond)) -+ }) -+ if err != nil { -+ return fmt.Errorf("error setting option on socket: %v", err) -+ } -+ -+ return nil -+} -+ -+// GetTCPUserTimeout gets the TCP user timeout on a connection's socket -+func GetTCPUserTimeout(conn net.Conn) (opt int, err error) { -+ tcpconn, ok := conn.(*net.TCPConn) -+ if !ok { -+ err = fmt.Errorf("conn is not *net.TCPConn. got %T", conn) -+ return -+ } -+ rawConn, err := tcpconn.SyscallConn() -+ if err != nil { -+ err = fmt.Errorf("error getting raw connection: %v", err) -+ return -+ } -+ err = rawConn.Control(func(fd uintptr) { -+ opt, err = syscall.GetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_USER_TIMEOUT) -+ }) -+ if err != nil { -+ err = fmt.Errorf("error getting option on socket: %v", err) -+ return -+ } -+ -+ return -+} -diff --git a/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go b/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go -new file mode 100755 -index 0000000..999f52c ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go -@@ -0,0 +1,77 @@ -+//go:build !linux -+// +build !linux -+ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package syscall provides functionalities that grpc uses to get low-level -+// operating system stats/info. -+package syscall -+ -+import ( -+ "net" -+ "sync" -+ "time" -+ -+ "google.golang.org/grpc/grpclog" -+) -+ -+var once sync.Once -+var logger = grpclog.Component("core") -+ -+func log() { -+ once.Do(func() { -+ logger.Info("CPU time info is unavailable on non-linux environments.") -+ }) -+} -+ -+// GetCPUTime returns the how much CPU time has passed since the start of this -+// process. It always returns 0 under non-linux environments. -+func GetCPUTime() int64 { -+ log() -+ return 0 -+} -+ -+// Rusage is an empty struct under non-linux environments. -+type Rusage struct{} -+ -+// GetRusage is a no-op function under non-linux environments. -+func GetRusage() *Rusage { -+ log() -+ return nil -+} -+ -+// CPUTimeDiff returns the differences of user CPU time and system CPU time used -+// between two Rusage structs. It a no-op function for non-linux environments. -+func CPUTimeDiff(first *Rusage, latest *Rusage) (float64, float64) { -+ log() -+ return 0, 0 -+} -+ -+// SetTCPUserTimeout is a no-op function under non-linux environments. -+func SetTCPUserTimeout(conn net.Conn, timeout time.Duration) error { -+ log() -+ return nil -+} -+ -+// GetTCPUserTimeout is a no-op function under non-linux environments. -+// A negative return value indicates the operation is not supported -+func GetTCPUserTimeout(conn net.Conn) (int, error) { -+ log() -+ return -1, nil -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go b/vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go -new file mode 100755 -index 0000000..070680e ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go -@@ -0,0 +1,141 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "sync" -+ "time" -+) -+ -+const ( -+ // bdpLimit is the maximum value the flow control windows will be increased -+ // to. TCP typically limits this to 4MB, but some systems go up to 16MB. -+ // Since this is only a limit, it is safe to make it optimistic. -+ bdpLimit = (1 << 20) * 16 -+ // alpha is a constant factor used to keep a moving average -+ // of RTTs. -+ alpha = 0.9 -+ // If the current bdp sample is greater than or equal to -+ // our beta * our estimated bdp and the current bandwidth -+ // sample is the maximum bandwidth observed so far, we -+ // increase our bbp estimate by a factor of gamma. -+ beta = 0.66 -+ // To put our bdp to be smaller than or equal to twice the real BDP, -+ // we should multiply our current sample with 4/3, however to round things out -+ // we use 2 as the multiplication factor. -+ gamma = 2 -+) -+ -+// Adding arbitrary data to ping so that its ack can be identified. -+// Easter-egg: what does the ping message say? -+var bdpPing = &ping{data: [8]byte{2, 4, 16, 16, 9, 14, 7, 7}} -+ -+type bdpEstimator struct { -+ // sentAt is the time when the ping was sent. -+ sentAt time.Time -+ -+ mu sync.Mutex -+ // bdp is the current bdp estimate. -+ bdp uint32 -+ // sample is the number of bytes received in one measurement cycle. -+ sample uint32 -+ // bwMax is the maximum bandwidth noted so far (bytes/sec). -+ bwMax float64 -+ // bool to keep track of the beginning of a new measurement cycle. -+ isSent bool -+ // Callback to update the window sizes. -+ updateFlowControl func(n uint32) -+ // sampleCount is the number of samples taken so far. -+ sampleCount uint64 -+ // round trip time (seconds) -+ rtt float64 -+} -+ -+// timesnap registers the time bdp ping was sent out so that -+// network rtt can be calculated when its ack is received. -+// It is called (by controller) when the bdpPing is -+// being written on the wire. -+func (b *bdpEstimator) timesnap(d [8]byte) { -+ if bdpPing.data != d { -+ return -+ } -+ b.sentAt = time.Now() -+} -+ -+// add adds bytes to the current sample for calculating bdp. -+// It returns true only if a ping must be sent. This can be used -+// by the caller (handleData) to make decision about batching -+// a window update with it. -+func (b *bdpEstimator) add(n uint32) bool { -+ b.mu.Lock() -+ defer b.mu.Unlock() -+ if b.bdp == bdpLimit { -+ return false -+ } -+ if !b.isSent { -+ b.isSent = true -+ b.sample = n -+ b.sentAt = time.Time{} -+ b.sampleCount++ -+ return true -+ } -+ b.sample += n -+ return false -+} -+ -+// calculate is called when an ack for a bdp ping is received. -+// Here we calculate the current bdp and bandwidth sample and -+// decide if the flow control windows should go up. -+func (b *bdpEstimator) calculate(d [8]byte) { -+ // Check if the ping acked for was the bdp ping. -+ if bdpPing.data != d { -+ return -+ } -+ b.mu.Lock() -+ rttSample := time.Since(b.sentAt).Seconds() -+ if b.sampleCount < 10 { -+ // Bootstrap rtt with an average of first 10 rtt samples. -+ b.rtt += (rttSample - b.rtt) / float64(b.sampleCount) -+ } else { -+ // Heed to the recent past more. -+ b.rtt += (rttSample - b.rtt) * float64(alpha) -+ } -+ b.isSent = false -+ // The number of bytes accumulated so far in the sample is smaller -+ // than or equal to 1.5 times the real BDP on a saturated connection. -+ bwCurrent := float64(b.sample) / (b.rtt * float64(1.5)) -+ if bwCurrent > b.bwMax { -+ b.bwMax = bwCurrent -+ } -+ // If the current sample (which is smaller than or equal to the 1.5 times the real BDP) is -+ // greater than or equal to 2/3rd our perceived bdp AND this is the maximum bandwidth seen so far, we -+ // should update our perception of the network BDP. -+ if float64(b.sample) >= beta*float64(b.bdp) && bwCurrent == b.bwMax && b.bdp != bdpLimit { -+ sampleFloat := float64(b.sample) -+ b.bdp = uint32(gamma * sampleFloat) -+ if b.bdp > bdpLimit { -+ b.bdp = bdpLimit -+ } -+ bdp := b.bdp -+ b.mu.Unlock() -+ b.updateFlowControl(bdp) -+ return -+ } -+ b.mu.Unlock() -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go -new file mode 100755 -index 0000000..be5a9c8 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go -@@ -0,0 +1,1007 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "bytes" -+ "errors" -+ "fmt" -+ "net" -+ "runtime" -+ "strconv" -+ "sync" -+ "sync/atomic" -+ -+ "golang.org/x/net/http2" -+ "golang.org/x/net/http2/hpack" -+ "google.golang.org/grpc/internal/grpclog" -+ "google.golang.org/grpc/internal/grpcutil" -+ "google.golang.org/grpc/status" -+) -+ -+var updateHeaderTblSize = func(e *hpack.Encoder, v uint32) { -+ e.SetMaxDynamicTableSizeLimit(v) -+} -+ -+type itemNode struct { -+ it interface{} -+ next *itemNode -+} -+ -+type itemList struct { -+ head *itemNode -+ tail *itemNode -+} -+ -+func (il *itemList) enqueue(i interface{}) { -+ n := &itemNode{it: i} -+ if il.tail == nil { -+ il.head, il.tail = n, n -+ return -+ } -+ il.tail.next = n -+ il.tail = n -+} -+ -+// peek returns the first item in the list without removing it from the -+// list. -+func (il *itemList) peek() interface{} { -+ return il.head.it -+} -+ -+func (il *itemList) dequeue() interface{} { -+ if il.head == nil { -+ return nil -+ } -+ i := il.head.it -+ il.head = il.head.next -+ if il.head == nil { -+ il.tail = nil -+ } -+ return i -+} -+ -+func (il *itemList) dequeueAll() *itemNode { -+ h := il.head -+ il.head, il.tail = nil, nil -+ return h -+} -+ -+func (il *itemList) isEmpty() bool { -+ return il.head == nil -+} -+ -+// The following defines various control items which could flow through -+// the control buffer of transport. They represent different aspects of -+// control tasks, e.g., flow control, settings, streaming resetting, etc. -+ -+// maxQueuedTransportResponseFrames is the most queued "transport response" -+// frames we will buffer before preventing new reads from occurring on the -+// transport. These are control frames sent in response to client requests, -+// such as RST_STREAM due to bad headers or settings acks. -+const maxQueuedTransportResponseFrames = 50 -+ -+type cbItem interface { -+ isTransportResponseFrame() bool -+} -+ -+// registerStream is used to register an incoming stream with loopy writer. -+type registerStream struct { -+ streamID uint32 -+ wq *writeQuota -+} -+ -+func (*registerStream) isTransportResponseFrame() bool { return false } -+ -+// headerFrame is also used to register stream on the client-side. -+type headerFrame struct { -+ streamID uint32 -+ hf []hpack.HeaderField -+ endStream bool // Valid on server side. -+ initStream func(uint32) error // Used only on the client side. -+ onWrite func() -+ wq *writeQuota // write quota for the stream created. -+ cleanup *cleanupStream // Valid on the server side. -+ onOrphaned func(error) // Valid on client-side -+} -+ -+func (h *headerFrame) isTransportResponseFrame() bool { -+ return h.cleanup != nil && h.cleanup.rst // Results in a RST_STREAM -+} -+ -+type cleanupStream struct { -+ streamID uint32 -+ rst bool -+ rstCode http2.ErrCode -+ onWrite func() -+} -+ -+func (c *cleanupStream) isTransportResponseFrame() bool { return c.rst } // Results in a RST_STREAM -+ -+type earlyAbortStream struct { -+ httpStatus uint32 -+ streamID uint32 -+ contentSubtype string -+ status *status.Status -+ rst bool -+} -+ -+func (*earlyAbortStream) isTransportResponseFrame() bool { return false } -+ -+type dataFrame struct { -+ streamID uint32 -+ endStream bool -+ h []byte -+ d []byte -+ // onEachWrite is called every time -+ // a part of d is written out. -+ onEachWrite func() -+} -+ -+func (*dataFrame) isTransportResponseFrame() bool { return false } -+ -+type incomingWindowUpdate struct { -+ streamID uint32 -+ increment uint32 -+} -+ -+func (*incomingWindowUpdate) isTransportResponseFrame() bool { return false } -+ -+type outgoingWindowUpdate struct { -+ streamID uint32 -+ increment uint32 -+} -+ -+func (*outgoingWindowUpdate) isTransportResponseFrame() bool { -+ return false // window updates are throttled by thresholds -+} -+ -+type incomingSettings struct { -+ ss []http2.Setting -+} -+ -+func (*incomingSettings) isTransportResponseFrame() bool { return true } // Results in a settings ACK -+ -+type outgoingSettings struct { -+ ss []http2.Setting -+} -+ -+func (*outgoingSettings) isTransportResponseFrame() bool { return false } -+ -+type incomingGoAway struct { -+} -+ -+func (*incomingGoAway) isTransportResponseFrame() bool { return false } -+ -+type goAway struct { -+ code http2.ErrCode -+ debugData []byte -+ headsUp bool -+ closeConn error // if set, loopyWriter will exit, resulting in conn closure -+} -+ -+func (*goAway) isTransportResponseFrame() bool { return false } -+ -+type ping struct { -+ ack bool -+ data [8]byte -+} -+ -+func (*ping) isTransportResponseFrame() bool { return true } -+ -+type outFlowControlSizeRequest struct { -+ resp chan uint32 -+} -+ -+func (*outFlowControlSizeRequest) isTransportResponseFrame() bool { return false } -+ -+// closeConnection is an instruction to tell the loopy writer to flush the -+// framer and exit, which will cause the transport's connection to be closed -+// (by the client or server). The transport itself will close after the reader -+// encounters the EOF caused by the connection closure. -+type closeConnection struct{} -+ -+func (closeConnection) isTransportResponseFrame() bool { return false } -+ -+type outStreamState int -+ -+const ( -+ active outStreamState = iota -+ empty -+ waitingOnStreamQuota -+) -+ -+type outStream struct { -+ id uint32 -+ state outStreamState -+ itl *itemList -+ bytesOutStanding int -+ wq *writeQuota -+ -+ next *outStream -+ prev *outStream -+} -+ -+func (s *outStream) deleteSelf() { -+ if s.prev != nil { -+ s.prev.next = s.next -+ } -+ if s.next != nil { -+ s.next.prev = s.prev -+ } -+ s.next, s.prev = nil, nil -+} -+ -+type outStreamList struct { -+ // Following are sentinel objects that mark the -+ // beginning and end of the list. They do not -+ // contain any item lists. All valid objects are -+ // inserted in between them. -+ // This is needed so that an outStream object can -+ // deleteSelf() in O(1) time without knowing which -+ // list it belongs to. -+ head *outStream -+ tail *outStream -+} -+ -+func newOutStreamList() *outStreamList { -+ head, tail := new(outStream), new(outStream) -+ head.next = tail -+ tail.prev = head -+ return &outStreamList{ -+ head: head, -+ tail: tail, -+ } -+} -+ -+func (l *outStreamList) enqueue(s *outStream) { -+ e := l.tail.prev -+ e.next = s -+ s.prev = e -+ s.next = l.tail -+ l.tail.prev = s -+} -+ -+// remove from the beginning of the list. -+func (l *outStreamList) dequeue() *outStream { -+ b := l.head.next -+ if b == l.tail { -+ return nil -+ } -+ b.deleteSelf() -+ return b -+} -+ -+// controlBuffer is a way to pass information to loopy. -+// Information is passed as specific struct types called control frames. -+// A control frame not only represents data, messages or headers to be sent out -+// but can also be used to instruct loopy to update its internal state. -+// It shouldn't be confused with an HTTP2 frame, although some of the control frames -+// like dataFrame and headerFrame do go out on wire as HTTP2 frames. -+type controlBuffer struct { -+ ch chan struct{} -+ done <-chan struct{} -+ mu sync.Mutex -+ consumerWaiting bool -+ list *itemList -+ err error -+ -+ // transportResponseFrames counts the number of queued items that represent -+ // the response of an action initiated by the peer. trfChan is created -+ // when transportResponseFrames >= maxQueuedTransportResponseFrames and is -+ // closed and nilled when transportResponseFrames drops below the -+ // threshold. Both fields are protected by mu. -+ transportResponseFrames int -+ trfChan atomic.Value // chan struct{} -+} -+ -+func newControlBuffer(done <-chan struct{}) *controlBuffer { -+ return &controlBuffer{ -+ ch: make(chan struct{}, 1), -+ list: &itemList{}, -+ done: done, -+ } -+} -+ -+// throttle blocks if there are too many incomingSettings/cleanupStreams in the -+// controlbuf. -+func (c *controlBuffer) throttle() { -+ ch, _ := c.trfChan.Load().(chan struct{}) -+ if ch != nil { -+ select { -+ case <-ch: -+ case <-c.done: -+ } -+ } -+} -+ -+func (c *controlBuffer) put(it cbItem) error { -+ _, err := c.executeAndPut(nil, it) -+ return err -+} -+ -+func (c *controlBuffer) executeAndPut(f func(it interface{}) bool, it cbItem) (bool, error) { -+ var wakeUp bool -+ c.mu.Lock() -+ if c.err != nil { -+ c.mu.Unlock() -+ return false, c.err -+ } -+ if f != nil { -+ if !f(it) { // f wasn't successful -+ c.mu.Unlock() -+ return false, nil -+ } -+ } -+ if c.consumerWaiting { -+ wakeUp = true -+ c.consumerWaiting = false -+ } -+ c.list.enqueue(it) -+ if it.isTransportResponseFrame() { -+ c.transportResponseFrames++ -+ if c.transportResponseFrames == maxQueuedTransportResponseFrames { -+ // We are adding the frame that puts us over the threshold; create -+ // a throttling channel. -+ c.trfChan.Store(make(chan struct{})) -+ } -+ } -+ c.mu.Unlock() -+ if wakeUp { -+ select { -+ case c.ch <- struct{}{}: -+ default: -+ } -+ } -+ return true, nil -+} -+ -+// Note argument f should never be nil. -+func (c *controlBuffer) execute(f func(it interface{}) bool, it interface{}) (bool, error) { -+ c.mu.Lock() -+ if c.err != nil { -+ c.mu.Unlock() -+ return false, c.err -+ } -+ if !f(it) { // f wasn't successful -+ c.mu.Unlock() -+ return false, nil -+ } -+ c.mu.Unlock() -+ return true, nil -+} -+ -+func (c *controlBuffer) get(block bool) (interface{}, error) { -+ for { -+ c.mu.Lock() -+ if c.err != nil { -+ c.mu.Unlock() -+ return nil, c.err -+ } -+ if !c.list.isEmpty() { -+ h := c.list.dequeue().(cbItem) -+ if h.isTransportResponseFrame() { -+ if c.transportResponseFrames == maxQueuedTransportResponseFrames { -+ // We are removing the frame that put us over the -+ // threshold; close and clear the throttling channel. -+ ch := c.trfChan.Load().(chan struct{}) -+ close(ch) -+ c.trfChan.Store((chan struct{})(nil)) -+ } -+ c.transportResponseFrames-- -+ } -+ c.mu.Unlock() -+ return h, nil -+ } -+ if !block { -+ c.mu.Unlock() -+ return nil, nil -+ } -+ c.consumerWaiting = true -+ c.mu.Unlock() -+ select { -+ case <-c.ch: -+ case <-c.done: -+ return nil, errors.New("transport closed by client") -+ } -+ } -+} -+ -+func (c *controlBuffer) finish() { -+ c.mu.Lock() -+ if c.err != nil { -+ c.mu.Unlock() -+ return -+ } -+ c.err = ErrConnClosing -+ // There may be headers for streams in the control buffer. -+ // These streams need to be cleaned out since the transport -+ // is still not aware of these yet. -+ for head := c.list.dequeueAll(); head != nil; head = head.next { -+ hdr, ok := head.it.(*headerFrame) -+ if !ok { -+ continue -+ } -+ if hdr.onOrphaned != nil { // It will be nil on the server-side. -+ hdr.onOrphaned(ErrConnClosing) -+ } -+ } -+ // In case throttle() is currently in flight, it needs to be unblocked. -+ // Otherwise, the transport may not close, since the transport is closed by -+ // the reader encountering the connection error. -+ ch, _ := c.trfChan.Load().(chan struct{}) -+ if ch != nil { -+ close(ch) -+ } -+ c.trfChan.Store((chan struct{})(nil)) -+ c.mu.Unlock() -+} -+ -+type side int -+ -+const ( -+ clientSide side = iota -+ serverSide -+) -+ -+// Loopy receives frames from the control buffer. -+// Each frame is handled individually; most of the work done by loopy goes -+// into handling data frames. Loopy maintains a queue of active streams, and each -+// stream maintains a queue of data frames; as loopy receives data frames -+// it gets added to the queue of the relevant stream. -+// Loopy goes over this list of active streams by processing one node every iteration, -+// thereby closely resemebling to a round-robin scheduling over all streams. While -+// processing a stream, loopy writes out data bytes from this stream capped by the min -+// of http2MaxFrameLen, connection-level flow control and stream-level flow control. -+type loopyWriter struct { -+ side side -+ cbuf *controlBuffer -+ sendQuota uint32 -+ oiws uint32 // outbound initial window size. -+ // estdStreams is map of all established streams that are not cleaned-up yet. -+ // On client-side, this is all streams whose headers were sent out. -+ // On server-side, this is all streams whose headers were received. -+ estdStreams map[uint32]*outStream // Established streams. -+ // activeStreams is a linked-list of all streams that have data to send and some -+ // stream-level flow control quota. -+ // Each of these streams internally have a list of data items(and perhaps trailers -+ // on the server-side) to be sent out. -+ activeStreams *outStreamList -+ framer *framer -+ hBuf *bytes.Buffer // The buffer for HPACK encoding. -+ hEnc *hpack.Encoder // HPACK encoder. -+ bdpEst *bdpEstimator -+ draining bool -+ conn net.Conn -+ logger *grpclog.PrefixLogger -+ -+ // Side-specific handlers -+ ssGoAwayHandler func(*goAway) (bool, error) -+} -+ -+func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger) *loopyWriter { -+ var buf bytes.Buffer -+ l := &loopyWriter{ -+ side: s, -+ cbuf: cbuf, -+ sendQuota: defaultWindowSize, -+ oiws: defaultWindowSize, -+ estdStreams: make(map[uint32]*outStream), -+ activeStreams: newOutStreamList(), -+ framer: fr, -+ hBuf: &buf, -+ hEnc: hpack.NewEncoder(&buf), -+ bdpEst: bdpEst, -+ conn: conn, -+ logger: logger, -+ } -+ return l -+} -+ -+const minBatchSize = 1000 -+ -+// run should be run in a separate goroutine. -+// It reads control frames from controlBuf and processes them by: -+// 1. Updating loopy's internal state, or/and -+// 2. Writing out HTTP2 frames on the wire. -+// -+// Loopy keeps all active streams with data to send in a linked-list. -+// All streams in the activeStreams linked-list must have both: -+// 1. Data to send, and -+// 2. Stream level flow control quota available. -+// -+// In each iteration of run loop, other than processing the incoming control -+// frame, loopy calls processData, which processes one node from the -+// activeStreams linked-list. This results in writing of HTTP2 frames into an -+// underlying write buffer. When there's no more control frames to read from -+// controlBuf, loopy flushes the write buffer. As an optimization, to increase -+// the batch size for each flush, loopy yields the processor, once if the batch -+// size is too low to give stream goroutines a chance to fill it up. -+// -+// Upon exiting, if the error causing the exit is not an I/O error, run() -+// flushes and closes the underlying connection. Otherwise, the connection is -+// left open to allow the I/O error to be encountered by the reader instead. -+func (l *loopyWriter) run() (err error) { -+ defer func() { -+ if l.logger.V(logLevel) { -+ l.logger.Infof("loopyWriter exiting with error: %v", err) -+ } -+ if !isIOError(err) { -+ l.framer.writer.Flush() -+ l.conn.Close() -+ } -+ l.cbuf.finish() -+ }() -+ for { -+ it, err := l.cbuf.get(true) -+ if err != nil { -+ return err -+ } -+ if err = l.handle(it); err != nil { -+ return err -+ } -+ if _, err = l.processData(); err != nil { -+ return err -+ } -+ gosched := true -+ hasdata: -+ for { -+ it, err := l.cbuf.get(false) -+ if err != nil { -+ return err -+ } -+ if it != nil { -+ if err = l.handle(it); err != nil { -+ return err -+ } -+ if _, err = l.processData(); err != nil { -+ return err -+ } -+ continue hasdata -+ } -+ isEmpty, err := l.processData() -+ if err != nil { -+ return err -+ } -+ if !isEmpty { -+ continue hasdata -+ } -+ if gosched { -+ gosched = false -+ if l.framer.writer.offset < minBatchSize { -+ runtime.Gosched() -+ continue hasdata -+ } -+ } -+ l.framer.writer.Flush() -+ break hasdata -+ } -+ } -+} -+ -+func (l *loopyWriter) outgoingWindowUpdateHandler(w *outgoingWindowUpdate) error { -+ return l.framer.fr.WriteWindowUpdate(w.streamID, w.increment) -+} -+ -+func (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) { -+ // Otherwise update the quota. -+ if w.streamID == 0 { -+ l.sendQuota += w.increment -+ return -+ } -+ // Find the stream and update it. -+ if str, ok := l.estdStreams[w.streamID]; ok { -+ str.bytesOutStanding -= int(w.increment) -+ if strQuota := int(l.oiws) - str.bytesOutStanding; strQuota > 0 && str.state == waitingOnStreamQuota { -+ str.state = active -+ l.activeStreams.enqueue(str) -+ return -+ } -+ } -+} -+ -+func (l *loopyWriter) outgoingSettingsHandler(s *outgoingSettings) error { -+ return l.framer.fr.WriteSettings(s.ss...) -+} -+ -+func (l *loopyWriter) incomingSettingsHandler(s *incomingSettings) error { -+ l.applySettings(s.ss) -+ return l.framer.fr.WriteSettingsAck() -+} -+ -+func (l *loopyWriter) registerStreamHandler(h *registerStream) { -+ str := &outStream{ -+ id: h.streamID, -+ state: empty, -+ itl: &itemList{}, -+ wq: h.wq, -+ } -+ l.estdStreams[h.streamID] = str -+} -+ -+func (l *loopyWriter) headerHandler(h *headerFrame) error { -+ if l.side == serverSide { -+ str, ok := l.estdStreams[h.streamID] -+ if !ok { -+ if l.logger.V(logLevel) { -+ l.logger.Infof("Unrecognized streamID %d in loopyWriter", h.streamID) -+ } -+ return nil -+ } -+ // Case 1.A: Server is responding back with headers. -+ if !h.endStream { -+ return l.writeHeader(h.streamID, h.endStream, h.hf, h.onWrite) -+ } -+ // else: Case 1.B: Server wants to close stream. -+ -+ if str.state != empty { // either active or waiting on stream quota. -+ // add it str's list of items. -+ str.itl.enqueue(h) -+ return nil -+ } -+ if err := l.writeHeader(h.streamID, h.endStream, h.hf, h.onWrite); err != nil { -+ return err -+ } -+ return l.cleanupStreamHandler(h.cleanup) -+ } -+ // Case 2: Client wants to originate stream. -+ str := &outStream{ -+ id: h.streamID, -+ state: empty, -+ itl: &itemList{}, -+ wq: h.wq, -+ } -+ return l.originateStream(str, h) -+} -+ -+func (l *loopyWriter) originateStream(str *outStream, hdr *headerFrame) error { -+ // l.draining is set when handling GoAway. In which case, we want to avoid -+ // creating new streams. -+ if l.draining { -+ // TODO: provide a better error with the reason we are in draining. -+ hdr.onOrphaned(errStreamDrain) -+ return nil -+ } -+ if err := hdr.initStream(str.id); err != nil { -+ return err -+ } -+ if err := l.writeHeader(str.id, hdr.endStream, hdr.hf, hdr.onWrite); err != nil { -+ return err -+ } -+ l.estdStreams[str.id] = str -+ return nil -+} -+ -+func (l *loopyWriter) writeHeader(streamID uint32, endStream bool, hf []hpack.HeaderField, onWrite func()) error { -+ if onWrite != nil { -+ onWrite() -+ } -+ l.hBuf.Reset() -+ for _, f := range hf { -+ if err := l.hEnc.WriteField(f); err != nil { -+ if l.logger.V(logLevel) { -+ l.logger.Warningf("Encountered error while encoding headers: %v", err) -+ } -+ } -+ } -+ var ( -+ err error -+ endHeaders, first bool -+ ) -+ first = true -+ for !endHeaders { -+ size := l.hBuf.Len() -+ if size > http2MaxFrameLen { -+ size = http2MaxFrameLen -+ } else { -+ endHeaders = true -+ } -+ if first { -+ first = false -+ err = l.framer.fr.WriteHeaders(http2.HeadersFrameParam{ -+ StreamID: streamID, -+ BlockFragment: l.hBuf.Next(size), -+ EndStream: endStream, -+ EndHeaders: endHeaders, -+ }) -+ } else { -+ err = l.framer.fr.WriteContinuation( -+ streamID, -+ endHeaders, -+ l.hBuf.Next(size), -+ ) -+ } -+ if err != nil { -+ return err -+ } -+ } -+ return nil -+} -+ -+func (l *loopyWriter) preprocessData(df *dataFrame) { -+ str, ok := l.estdStreams[df.streamID] -+ if !ok { -+ return -+ } -+ // If we got data for a stream it means that -+ // stream was originated and the headers were sent out. -+ str.itl.enqueue(df) -+ if str.state == empty { -+ str.state = active -+ l.activeStreams.enqueue(str) -+ } -+} -+ -+func (l *loopyWriter) pingHandler(p *ping) error { -+ if !p.ack { -+ l.bdpEst.timesnap(p.data) -+ } -+ return l.framer.fr.WritePing(p.ack, p.data) -+ -+} -+ -+func (l *loopyWriter) outFlowControlSizeRequestHandler(o *outFlowControlSizeRequest) { -+ o.resp <- l.sendQuota -+} -+ -+func (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error { -+ c.onWrite() -+ if str, ok := l.estdStreams[c.streamID]; ok { -+ // On the server side it could be a trailers-only response or -+ // a RST_STREAM before stream initialization thus the stream might -+ // not be established yet. -+ delete(l.estdStreams, c.streamID) -+ str.deleteSelf() -+ } -+ if c.rst { // If RST_STREAM needs to be sent. -+ if err := l.framer.fr.WriteRSTStream(c.streamID, c.rstCode); err != nil { -+ return err -+ } -+ } -+ if l.draining && len(l.estdStreams) == 0 { -+ // Flush and close the connection; we are done with it. -+ return errors.New("finished processing active streams while in draining mode") -+ } -+ return nil -+} -+ -+func (l *loopyWriter) earlyAbortStreamHandler(eas *earlyAbortStream) error { -+ if l.side == clientSide { -+ return errors.New("earlyAbortStream not handled on client") -+ } -+ // In case the caller forgets to set the http status, default to 200. -+ if eas.httpStatus == 0 { -+ eas.httpStatus = 200 -+ } -+ headerFields := []hpack.HeaderField{ -+ {Name: ":status", Value: strconv.Itoa(int(eas.httpStatus))}, -+ {Name: "content-type", Value: grpcutil.ContentType(eas.contentSubtype)}, -+ {Name: "grpc-status", Value: strconv.Itoa(int(eas.status.Code()))}, -+ {Name: "grpc-message", Value: encodeGrpcMessage(eas.status.Message())}, -+ } -+ -+ if err := l.writeHeader(eas.streamID, true, headerFields, nil); err != nil { -+ return err -+ } -+ if eas.rst { -+ if err := l.framer.fr.WriteRSTStream(eas.streamID, http2.ErrCodeNo); err != nil { -+ return err -+ } -+ } -+ return nil -+} -+ -+func (l *loopyWriter) incomingGoAwayHandler(*incomingGoAway) error { -+ if l.side == clientSide { -+ l.draining = true -+ if len(l.estdStreams) == 0 { -+ // Flush and close the connection; we are done with it. -+ return errors.New("received GOAWAY with no active streams") -+ } -+ } -+ return nil -+} -+ -+func (l *loopyWriter) goAwayHandler(g *goAway) error { -+ // Handling of outgoing GoAway is very specific to side. -+ if l.ssGoAwayHandler != nil { -+ draining, err := l.ssGoAwayHandler(g) -+ if err != nil { -+ return err -+ } -+ l.draining = draining -+ } -+ return nil -+} -+ -+func (l *loopyWriter) handle(i interface{}) error { -+ switch i := i.(type) { -+ case *incomingWindowUpdate: -+ l.incomingWindowUpdateHandler(i) -+ case *outgoingWindowUpdate: -+ return l.outgoingWindowUpdateHandler(i) -+ case *incomingSettings: -+ return l.incomingSettingsHandler(i) -+ case *outgoingSettings: -+ return l.outgoingSettingsHandler(i) -+ case *headerFrame: -+ return l.headerHandler(i) -+ case *registerStream: -+ l.registerStreamHandler(i) -+ case *cleanupStream: -+ return l.cleanupStreamHandler(i) -+ case *earlyAbortStream: -+ return l.earlyAbortStreamHandler(i) -+ case *incomingGoAway: -+ return l.incomingGoAwayHandler(i) -+ case *dataFrame: -+ l.preprocessData(i) -+ case *ping: -+ return l.pingHandler(i) -+ case *goAway: -+ return l.goAwayHandler(i) -+ case *outFlowControlSizeRequest: -+ l.outFlowControlSizeRequestHandler(i) -+ case closeConnection: -+ // Just return a non-I/O error and run() will flush and close the -+ // connection. -+ return ErrConnClosing -+ default: -+ return fmt.Errorf("transport: unknown control message type %T", i) -+ } -+ return nil -+} -+ -+func (l *loopyWriter) applySettings(ss []http2.Setting) { -+ for _, s := range ss { -+ switch s.ID { -+ case http2.SettingInitialWindowSize: -+ o := l.oiws -+ l.oiws = s.Val -+ if o < l.oiws { -+ // If the new limit is greater make all depleted streams active. -+ for _, stream := range l.estdStreams { -+ if stream.state == waitingOnStreamQuota { -+ stream.state = active -+ l.activeStreams.enqueue(stream) -+ } -+ } -+ } -+ case http2.SettingHeaderTableSize: -+ updateHeaderTblSize(l.hEnc, s.Val) -+ } -+ } -+} -+ -+// processData removes the first stream from active streams, writes out at most 16KB -+// of its data and then puts it at the end of activeStreams if there's still more data -+// to be sent and stream has some stream-level flow control. -+func (l *loopyWriter) processData() (bool, error) { -+ if l.sendQuota == 0 { -+ return true, nil -+ } -+ str := l.activeStreams.dequeue() // Remove the first stream. -+ if str == nil { -+ return true, nil -+ } -+ dataItem := str.itl.peek().(*dataFrame) // Peek at the first data item this stream. -+ // A data item is represented by a dataFrame, since it later translates into -+ // multiple HTTP2 data frames. -+ // Every dataFrame has two buffers; h that keeps grpc-message header and d that is actual data. -+ // As an optimization to keep wire traffic low, data from d is copied to h to make as big as the -+ // maximum possible HTTP2 frame size. -+ -+ if len(dataItem.h) == 0 && len(dataItem.d) == 0 { // Empty data frame -+ // Client sends out empty data frame with endStream = true -+ if err := l.framer.fr.WriteData(dataItem.streamID, dataItem.endStream, nil); err != nil { -+ return false, err -+ } -+ str.itl.dequeue() // remove the empty data item from stream -+ if str.itl.isEmpty() { -+ str.state = empty -+ } else if trailer, ok := str.itl.peek().(*headerFrame); ok { // the next item is trailers. -+ if err := l.writeHeader(trailer.streamID, trailer.endStream, trailer.hf, trailer.onWrite); err != nil { -+ return false, err -+ } -+ if err := l.cleanupStreamHandler(trailer.cleanup); err != nil { -+ return false, err -+ } -+ } else { -+ l.activeStreams.enqueue(str) -+ } -+ return false, nil -+ } -+ var ( -+ buf []byte -+ ) -+ // Figure out the maximum size we can send -+ maxSize := http2MaxFrameLen -+ if strQuota := int(l.oiws) - str.bytesOutStanding; strQuota <= 0 { // stream-level flow control. -+ str.state = waitingOnStreamQuota -+ return false, nil -+ } else if maxSize > strQuota { -+ maxSize = strQuota -+ } -+ if maxSize > int(l.sendQuota) { // connection-level flow control. -+ maxSize = int(l.sendQuota) -+ } -+ // Compute how much of the header and data we can send within quota and max frame length -+ hSize := min(maxSize, len(dataItem.h)) -+ dSize := min(maxSize-hSize, len(dataItem.d)) -+ if hSize != 0 { -+ if dSize == 0 { -+ buf = dataItem.h -+ } else { -+ // We can add some data to grpc message header to distribute bytes more equally across frames. -+ // Copy on the stack to avoid generating garbage -+ var localBuf [http2MaxFrameLen]byte -+ copy(localBuf[:hSize], dataItem.h) -+ copy(localBuf[hSize:], dataItem.d[:dSize]) -+ buf = localBuf[:hSize+dSize] -+ } -+ } else { -+ buf = dataItem.d -+ } -+ -+ size := hSize + dSize -+ -+ // Now that outgoing flow controls are checked we can replenish str's write quota -+ str.wq.replenish(size) -+ var endStream bool -+ // If this is the last data message on this stream and all of it can be written in this iteration. -+ if dataItem.endStream && len(dataItem.h)+len(dataItem.d) <= size { -+ endStream = true -+ } -+ if dataItem.onEachWrite != nil { -+ dataItem.onEachWrite() -+ } -+ if err := l.framer.fr.WriteData(dataItem.streamID, endStream, buf[:size]); err != nil { -+ return false, err -+ } -+ str.bytesOutStanding += size -+ l.sendQuota -= uint32(size) -+ dataItem.h = dataItem.h[hSize:] -+ dataItem.d = dataItem.d[dSize:] -+ -+ if len(dataItem.h) == 0 && len(dataItem.d) == 0 { // All the data from that message was written out. -+ str.itl.dequeue() -+ } -+ if str.itl.isEmpty() { -+ str.state = empty -+ } else if trailer, ok := str.itl.peek().(*headerFrame); ok { // The next item is trailers. -+ if err := l.writeHeader(trailer.streamID, trailer.endStream, trailer.hf, trailer.onWrite); err != nil { -+ return false, err -+ } -+ if err := l.cleanupStreamHandler(trailer.cleanup); err != nil { -+ return false, err -+ } -+ } else if int(l.oiws)-str.bytesOutStanding <= 0 { // Ran out of stream quota. -+ str.state = waitingOnStreamQuota -+ } else { // Otherwise add it back to the list of active streams. -+ l.activeStreams.enqueue(str) -+ } -+ return false, nil -+} -+ -+func min(a, b int) int { -+ if a < b { -+ return a -+ } -+ return b -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/defaults.go b/vendor/google.golang.org/grpc/internal/transport/defaults.go -new file mode 100755 -index 0000000..bc8ee07 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/defaults.go -@@ -0,0 +1,55 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "math" -+ "time" -+) -+ -+const ( -+ // The default value of flow control window size in HTTP2 spec. -+ defaultWindowSize = 65535 -+ // The initial window size for flow control. -+ initialWindowSize = defaultWindowSize // for an RPC -+ infinity = time.Duration(math.MaxInt64) -+ defaultClientKeepaliveTime = infinity -+ defaultClientKeepaliveTimeout = 20 * time.Second -+ defaultMaxStreamsClient = 100 -+ defaultMaxConnectionIdle = infinity -+ defaultMaxConnectionAge = infinity -+ defaultMaxConnectionAgeGrace = infinity -+ defaultServerKeepaliveTime = 2 * time.Hour -+ defaultServerKeepaliveTimeout = 20 * time.Second -+ defaultKeepalivePolicyMinTime = 5 * time.Minute -+ // max window limit set by HTTP2 Specs. -+ maxWindowSize = math.MaxInt32 -+ // defaultWriteQuota is the default value for number of data -+ // bytes that each stream can schedule before some of it being -+ // flushed out. -+ defaultWriteQuota = 64 * 1024 -+ defaultClientMaxHeaderListSize = uint32(16 << 20) -+ defaultServerMaxHeaderListSize = uint32(16 << 20) -+) -+ -+// MaxStreamID is the upper bound for the stream ID before the current -+// transport gracefully closes and new transport is created for subsequent RPCs. -+// This is set to 75% of 2^31-1. Streams are identified with an unsigned 31-bit -+// integer. It's exported so that tests can override it. -+var MaxStreamID = uint32(math.MaxInt32 * 3 / 4) -diff --git a/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go b/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go -new file mode 100755 -index 0000000..97198c5 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go -@@ -0,0 +1,215 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "fmt" -+ "math" -+ "sync" -+ "sync/atomic" -+) -+ -+// writeQuota is a soft limit on the amount of data a stream can -+// schedule before some of it is written out. -+type writeQuota struct { -+ quota int32 -+ // get waits on read from when quota goes less than or equal to zero. -+ // replenish writes on it when quota goes positive again. -+ ch chan struct{} -+ // done is triggered in error case. -+ done <-chan struct{} -+ // replenish is called by loopyWriter to give quota back to. -+ // It is implemented as a field so that it can be updated -+ // by tests. -+ replenish func(n int) -+} -+ -+func newWriteQuota(sz int32, done <-chan struct{}) *writeQuota { -+ w := &writeQuota{ -+ quota: sz, -+ ch: make(chan struct{}, 1), -+ done: done, -+ } -+ w.replenish = w.realReplenish -+ return w -+} -+ -+func (w *writeQuota) get(sz int32) error { -+ for { -+ if atomic.LoadInt32(&w.quota) > 0 { -+ atomic.AddInt32(&w.quota, -sz) -+ return nil -+ } -+ select { -+ case <-w.ch: -+ continue -+ case <-w.done: -+ return errStreamDone -+ } -+ } -+} -+ -+func (w *writeQuota) realReplenish(n int) { -+ sz := int32(n) -+ a := atomic.AddInt32(&w.quota, sz) -+ b := a - sz -+ if b <= 0 && a > 0 { -+ select { -+ case w.ch <- struct{}{}: -+ default: -+ } -+ } -+} -+ -+type trInFlow struct { -+ limit uint32 -+ unacked uint32 -+ effectiveWindowSize uint32 -+} -+ -+func (f *trInFlow) newLimit(n uint32) uint32 { -+ d := n - f.limit -+ f.limit = n -+ f.updateEffectiveWindowSize() -+ return d -+} -+ -+func (f *trInFlow) onData(n uint32) uint32 { -+ f.unacked += n -+ if f.unacked >= f.limit/4 { -+ w := f.unacked -+ f.unacked = 0 -+ f.updateEffectiveWindowSize() -+ return w -+ } -+ f.updateEffectiveWindowSize() -+ return 0 -+} -+ -+func (f *trInFlow) reset() uint32 { -+ w := f.unacked -+ f.unacked = 0 -+ f.updateEffectiveWindowSize() -+ return w -+} -+ -+func (f *trInFlow) updateEffectiveWindowSize() { -+ atomic.StoreUint32(&f.effectiveWindowSize, f.limit-f.unacked) -+} -+ -+func (f *trInFlow) getSize() uint32 { -+ return atomic.LoadUint32(&f.effectiveWindowSize) -+} -+ -+// TODO(mmukhi): Simplify this code. -+// inFlow deals with inbound flow control -+type inFlow struct { -+ mu sync.Mutex -+ // The inbound flow control limit for pending data. -+ limit uint32 -+ // pendingData is the overall data which have been received but not been -+ // consumed by applications. -+ pendingData uint32 -+ // The amount of data the application has consumed but grpc has not sent -+ // window update for them. Used to reduce window update frequency. -+ pendingUpdate uint32 -+ // delta is the extra window update given by receiver when an application -+ // is reading data bigger in size than the inFlow limit. -+ delta uint32 -+} -+ -+// newLimit updates the inflow window to a new value n. -+// It assumes that n is always greater than the old limit. -+func (f *inFlow) newLimit(n uint32) { -+ f.mu.Lock() -+ f.limit = n -+ f.mu.Unlock() -+} -+ -+func (f *inFlow) maybeAdjust(n uint32) uint32 { -+ if n > uint32(math.MaxInt32) { -+ n = uint32(math.MaxInt32) -+ } -+ f.mu.Lock() -+ defer f.mu.Unlock() -+ // estSenderQuota is the receiver's view of the maximum number of bytes the sender -+ // can send without a window update. -+ estSenderQuota := int32(f.limit - (f.pendingData + f.pendingUpdate)) -+ // estUntransmittedData is the maximum number of bytes the sends might not have put -+ // on the wire yet. A value of 0 or less means that we have already received all or -+ // more bytes than the application is requesting to read. -+ estUntransmittedData := int32(n - f.pendingData) // Casting into int32 since it could be negative. -+ // This implies that unless we send a window update, the sender won't be able to send all the bytes -+ // for this message. Therefore we must send an update over the limit since there's an active read -+ // request from the application. -+ if estUntransmittedData > estSenderQuota { -+ // Sender's window shouldn't go more than 2^31 - 1 as specified in the HTTP spec. -+ if f.limit+n > maxWindowSize { -+ f.delta = maxWindowSize - f.limit -+ } else { -+ // Send a window update for the whole message and not just the difference between -+ // estUntransmittedData and estSenderQuota. This will be helpful in case the message -+ // is padded; We will fallback on the current available window(at least a 1/4th of the limit). -+ f.delta = n -+ } -+ return f.delta -+ } -+ return 0 -+} -+ -+// onData is invoked when some data frame is received. It updates pendingData. -+func (f *inFlow) onData(n uint32) error { -+ f.mu.Lock() -+ f.pendingData += n -+ if f.pendingData+f.pendingUpdate > f.limit+f.delta { -+ limit := f.limit -+ rcvd := f.pendingData + f.pendingUpdate -+ f.mu.Unlock() -+ return fmt.Errorf("received %d-bytes data exceeding the limit %d bytes", rcvd, limit) -+ } -+ f.mu.Unlock() -+ return nil -+} -+ -+// onRead is invoked when the application reads the data. It returns the window size -+// to be sent to the peer. -+func (f *inFlow) onRead(n uint32) uint32 { -+ f.mu.Lock() -+ if f.pendingData == 0 { -+ f.mu.Unlock() -+ return 0 -+ } -+ f.pendingData -= n -+ if n > f.delta { -+ n -= f.delta -+ f.delta = 0 -+ } else { -+ f.delta -= n -+ n = 0 -+ } -+ f.pendingUpdate += n -+ if f.pendingUpdate >= f.limit/4 { -+ wu := f.pendingUpdate -+ f.pendingUpdate = 0 -+ f.mu.Unlock() -+ return wu -+ } -+ f.mu.Unlock() -+ return 0 -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/handler_server.go b/vendor/google.golang.org/grpc/internal/transport/handler_server.go -new file mode 100755 -index 0000000..98f80e3 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/handler_server.go -@@ -0,0 +1,480 @@ -+/* -+ * -+ * Copyright 2016 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// This file is the implementation of a gRPC server using HTTP/2 which -+// uses the standard Go http2 Server implementation (via the -+// http.Handler interface), rather than speaking low-level HTTP/2 -+// frames itself. It is the implementation of *grpc.Server.ServeHTTP. -+ -+package transport -+ -+import ( -+ "bytes" -+ "context" -+ "errors" -+ "fmt" -+ "io" -+ "net" -+ "net/http" -+ "strings" -+ "sync" -+ "time" -+ -+ "github.com/golang/protobuf/proto" -+ "golang.org/x/net/http2" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/internal/grpclog" -+ "google.golang.org/grpc/internal/grpcutil" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/peer" -+ "google.golang.org/grpc/stats" -+ "google.golang.org/grpc/status" -+) -+ -+// NewServerHandlerTransport returns a ServerTransport handling gRPC from -+// inside an http.Handler, or writes an HTTP error to w and returns an error. -+// It requires that the http Server supports HTTP/2. -+func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats []stats.Handler) (ServerTransport, error) { -+ if r.ProtoMajor != 2 { -+ msg := "gRPC requires HTTP/2" -+ http.Error(w, msg, http.StatusBadRequest) -+ return nil, errors.New(msg) -+ } -+ if r.Method != "POST" { -+ msg := fmt.Sprintf("invalid gRPC request method %q", r.Method) -+ http.Error(w, msg, http.StatusBadRequest) -+ return nil, errors.New(msg) -+ } -+ contentType := r.Header.Get("Content-Type") -+ // TODO: do we assume contentType is lowercase? we did before -+ contentSubtype, validContentType := grpcutil.ContentSubtype(contentType) -+ if !validContentType { -+ msg := fmt.Sprintf("invalid gRPC request content-type %q", contentType) -+ http.Error(w, msg, http.StatusUnsupportedMediaType) -+ return nil, errors.New(msg) -+ } -+ if _, ok := w.(http.Flusher); !ok { -+ msg := "gRPC requires a ResponseWriter supporting http.Flusher" -+ http.Error(w, msg, http.StatusInternalServerError) -+ return nil, errors.New(msg) -+ } -+ -+ st := &serverHandlerTransport{ -+ rw: w, -+ req: r, -+ closedCh: make(chan struct{}), -+ writes: make(chan func()), -+ contentType: contentType, -+ contentSubtype: contentSubtype, -+ stats: stats, -+ } -+ st.logger = prefixLoggerForServerHandlerTransport(st) -+ -+ if v := r.Header.Get("grpc-timeout"); v != "" { -+ to, err := decodeTimeout(v) -+ if err != nil { -+ msg := fmt.Sprintf("malformed grpc-timeout: %v", err) -+ http.Error(w, msg, http.StatusBadRequest) -+ return nil, status.Error(codes.Internal, msg) -+ } -+ st.timeoutSet = true -+ st.timeout = to -+ } -+ -+ metakv := []string{"content-type", contentType} -+ if r.Host != "" { -+ metakv = append(metakv, ":authority", r.Host) -+ } -+ for k, vv := range r.Header { -+ k = strings.ToLower(k) -+ if isReservedHeader(k) && !isWhitelistedHeader(k) { -+ continue -+ } -+ for _, v := range vv { -+ v, err := decodeMetadataHeader(k, v) -+ if err != nil { -+ msg := fmt.Sprintf("malformed binary metadata %q in header %q: %v", v, k, err) -+ http.Error(w, msg, http.StatusBadRequest) -+ return nil, status.Error(codes.Internal, msg) -+ } -+ metakv = append(metakv, k, v) -+ } -+ } -+ st.headerMD = metadata.Pairs(metakv...) -+ -+ return st, nil -+} -+ -+// serverHandlerTransport is an implementation of ServerTransport -+// which replies to exactly one gRPC request (exactly one HTTP request), -+// using the net/http.Handler interface. This http.Handler is guaranteed -+// at this point to be speaking over HTTP/2, so it's able to speak valid -+// gRPC. -+type serverHandlerTransport struct { -+ rw http.ResponseWriter -+ req *http.Request -+ timeoutSet bool -+ timeout time.Duration -+ -+ headerMD metadata.MD -+ -+ closeOnce sync.Once -+ closedCh chan struct{} // closed on Close -+ -+ // writes is a channel of code to run serialized in the -+ // ServeHTTP (HandleStreams) goroutine. The channel is closed -+ // when WriteStatus is called. -+ writes chan func() -+ -+ // block concurrent WriteStatus calls -+ // e.g. grpc/(*serverStream).SendMsg/RecvMsg -+ writeStatusMu sync.Mutex -+ -+ // we just mirror the request content-type -+ contentType string -+ // we store both contentType and contentSubtype so we don't keep recreating them -+ // TODO make sure this is consistent across handler_server and http2_server -+ contentSubtype string -+ -+ stats []stats.Handler -+ logger *grpclog.PrefixLogger -+} -+ -+func (ht *serverHandlerTransport) Close(err error) { -+ ht.closeOnce.Do(func() { -+ if ht.logger.V(logLevel) { -+ ht.logger.Infof("Closing: %v", err) -+ } -+ close(ht.closedCh) -+ }) -+} -+ -+func (ht *serverHandlerTransport) RemoteAddr() net.Addr { return strAddr(ht.req.RemoteAddr) } -+ -+// strAddr is a net.Addr backed by either a TCP "ip:port" string, or -+// the empty string if unknown. -+type strAddr string -+ -+func (a strAddr) Network() string { -+ if a != "" { -+ // Per the documentation on net/http.Request.RemoteAddr, if this is -+ // set, it's set to the IP:port of the peer (hence, TCP): -+ // https://golang.org/pkg/net/http/#Request -+ // -+ // If we want to support Unix sockets later, we can -+ // add our own grpc-specific convention within the -+ // grpc codebase to set RemoteAddr to a different -+ // format, or probably better: we can attach it to the -+ // context and use that from serverHandlerTransport.RemoteAddr. -+ return "tcp" -+ } -+ return "" -+} -+ -+func (a strAddr) String() string { return string(a) } -+ -+// do runs fn in the ServeHTTP goroutine. -+func (ht *serverHandlerTransport) do(fn func()) error { -+ select { -+ case <-ht.closedCh: -+ return ErrConnClosing -+ case ht.writes <- fn: -+ return nil -+ } -+} -+ -+func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) error { -+ ht.writeStatusMu.Lock() -+ defer ht.writeStatusMu.Unlock() -+ -+ headersWritten := s.updateHeaderSent() -+ err := ht.do(func() { -+ if !headersWritten { -+ ht.writePendingHeaders(s) -+ } -+ -+ // And flush, in case no header or body has been sent yet. -+ // This forces a separation of headers and trailers if this is the -+ // first call (for example, in end2end tests's TestNoService). -+ ht.rw.(http.Flusher).Flush() -+ -+ h := ht.rw.Header() -+ h.Set("Grpc-Status", fmt.Sprintf("%d", st.Code())) -+ if m := st.Message(); m != "" { -+ h.Set("Grpc-Message", encodeGrpcMessage(m)) -+ } -+ -+ if p := st.Proto(); p != nil && len(p.Details) > 0 { -+ stBytes, err := proto.Marshal(p) -+ if err != nil { -+ // TODO: return error instead, when callers are able to handle it. -+ panic(err) -+ } -+ -+ h.Set("Grpc-Status-Details-Bin", encodeBinHeader(stBytes)) -+ } -+ -+ if md := s.Trailer(); len(md) > 0 { -+ for k, vv := range md { -+ // Clients don't tolerate reading restricted headers after some non restricted ones were sent. -+ if isReservedHeader(k) { -+ continue -+ } -+ for _, v := range vv { -+ // http2 ResponseWriter mechanism to send undeclared Trailers after -+ // the headers have possibly been written. -+ h.Add(http2.TrailerPrefix+k, encodeMetadataHeader(k, v)) -+ } -+ } -+ } -+ }) -+ -+ if err == nil { // transport has not been closed -+ // Note: The trailer fields are compressed with hpack after this call returns. -+ // No WireLength field is set here. -+ for _, sh := range ht.stats { -+ sh.HandleRPC(s.Context(), &stats.OutTrailer{ -+ Trailer: s.trailer.Copy(), -+ }) -+ } -+ } -+ ht.Close(errors.New("finished writing status")) -+ return err -+} -+ -+// writePendingHeaders sets common and custom headers on the first -+// write call (Write, WriteHeader, or WriteStatus) -+func (ht *serverHandlerTransport) writePendingHeaders(s *Stream) { -+ ht.writeCommonHeaders(s) -+ ht.writeCustomHeaders(s) -+} -+ -+// writeCommonHeaders sets common headers on the first write -+// call (Write, WriteHeader, or WriteStatus). -+func (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) { -+ h := ht.rw.Header() -+ h["Date"] = nil // suppress Date to make tests happy; TODO: restore -+ h.Set("Content-Type", ht.contentType) -+ -+ // Predeclare trailers we'll set later in WriteStatus (after the body). -+ // This is a SHOULD in the HTTP RFC, and the way you add (known) -+ // Trailers per the net/http.ResponseWriter contract. -+ // See https://golang.org/pkg/net/http/#ResponseWriter -+ // and https://golang.org/pkg/net/http/#example_ResponseWriter_trailers -+ h.Add("Trailer", "Grpc-Status") -+ h.Add("Trailer", "Grpc-Message") -+ h.Add("Trailer", "Grpc-Status-Details-Bin") -+ -+ if s.sendCompress != "" { -+ h.Set("Grpc-Encoding", s.sendCompress) -+ } -+} -+ -+// writeCustomHeaders sets custom headers set on the stream via SetHeader -+// on the first write call (Write, WriteHeader, or WriteStatus). -+func (ht *serverHandlerTransport) writeCustomHeaders(s *Stream) { -+ h := ht.rw.Header() -+ -+ s.hdrMu.Lock() -+ for k, vv := range s.header { -+ if isReservedHeader(k) { -+ continue -+ } -+ for _, v := range vv { -+ h.Add(k, encodeMetadataHeader(k, v)) -+ } -+ } -+ -+ s.hdrMu.Unlock() -+} -+ -+func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { -+ headersWritten := s.updateHeaderSent() -+ return ht.do(func() { -+ if !headersWritten { -+ ht.writePendingHeaders(s) -+ } -+ ht.rw.Write(hdr) -+ ht.rw.Write(data) -+ ht.rw.(http.Flusher).Flush() -+ }) -+} -+ -+func (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error { -+ if err := s.SetHeader(md); err != nil { -+ return err -+ } -+ -+ headersWritten := s.updateHeaderSent() -+ err := ht.do(func() { -+ if !headersWritten { -+ ht.writePendingHeaders(s) -+ } -+ -+ ht.rw.WriteHeader(200) -+ ht.rw.(http.Flusher).Flush() -+ }) -+ -+ if err == nil { -+ for _, sh := range ht.stats { -+ // Note: The header fields are compressed with hpack after this call returns. -+ // No WireLength field is set here. -+ sh.HandleRPC(s.Context(), &stats.OutHeader{ -+ Header: md.Copy(), -+ Compression: s.sendCompress, -+ }) -+ } -+ } -+ return err -+} -+ -+func (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream), traceCtx func(context.Context, string) context.Context) { -+ // With this transport type there will be exactly 1 stream: this HTTP request. -+ -+ ctx := ht.req.Context() -+ var cancel context.CancelFunc -+ if ht.timeoutSet { -+ ctx, cancel = context.WithTimeout(ctx, ht.timeout) -+ } else { -+ ctx, cancel = context.WithCancel(ctx) -+ } -+ -+ // requestOver is closed when the status has been written via WriteStatus. -+ requestOver := make(chan struct{}) -+ go func() { -+ select { -+ case <-requestOver: -+ case <-ht.closedCh: -+ case <-ht.req.Context().Done(): -+ } -+ cancel() -+ ht.Close(errors.New("request is done processing")) -+ }() -+ -+ req := ht.req -+ -+ s := &Stream{ -+ id: 0, // irrelevant -+ requestRead: func(int) {}, -+ cancel: cancel, -+ buf: newRecvBuffer(), -+ st: ht, -+ method: req.URL.Path, -+ recvCompress: req.Header.Get("grpc-encoding"), -+ contentSubtype: ht.contentSubtype, -+ } -+ pr := &peer.Peer{ -+ Addr: ht.RemoteAddr(), -+ } -+ if req.TLS != nil { -+ pr.AuthInfo = credentials.TLSInfo{State: *req.TLS, CommonAuthInfo: credentials.CommonAuthInfo{SecurityLevel: credentials.PrivacyAndIntegrity}} -+ } -+ ctx = metadata.NewIncomingContext(ctx, ht.headerMD) -+ s.ctx = peer.NewContext(ctx, pr) -+ for _, sh := range ht.stats { -+ s.ctx = sh.TagRPC(s.ctx, &stats.RPCTagInfo{FullMethodName: s.method}) -+ inHeader := &stats.InHeader{ -+ FullMethod: s.method, -+ RemoteAddr: ht.RemoteAddr(), -+ Compression: s.recvCompress, -+ } -+ sh.HandleRPC(s.ctx, inHeader) -+ } -+ s.trReader = &transportReader{ -+ reader: &recvBufferReader{ctx: s.ctx, ctxDone: s.ctx.Done(), recv: s.buf, freeBuffer: func(*bytes.Buffer) {}}, -+ windowHandler: func(int) {}, -+ } -+ -+ // readerDone is closed when the Body.Read-ing goroutine exits. -+ readerDone := make(chan struct{}) -+ go func() { -+ defer close(readerDone) -+ -+ // TODO: minimize garbage, optimize recvBuffer code/ownership -+ const readSize = 8196 -+ for buf := make([]byte, readSize); ; { -+ n, err := req.Body.Read(buf) -+ if n > 0 { -+ s.buf.put(recvMsg{buffer: bytes.NewBuffer(buf[:n:n])}) -+ buf = buf[n:] -+ } -+ if err != nil { -+ s.buf.put(recvMsg{err: mapRecvMsgError(err)}) -+ return -+ } -+ if len(buf) == 0 { -+ buf = make([]byte, readSize) -+ } -+ } -+ }() -+ -+ // startStream is provided by the *grpc.Server's serveStreams. -+ // It starts a goroutine serving s and exits immediately. -+ // The goroutine that is started is the one that then calls -+ // into ht, calling WriteHeader, Write, WriteStatus, Close, etc. -+ startStream(s) -+ -+ ht.runStream() -+ close(requestOver) -+ -+ // Wait for reading goroutine to finish. -+ req.Body.Close() -+ <-readerDone -+} -+ -+func (ht *serverHandlerTransport) runStream() { -+ for { -+ select { -+ case fn := <-ht.writes: -+ fn() -+ case <-ht.closedCh: -+ return -+ } -+ } -+} -+ -+func (ht *serverHandlerTransport) IncrMsgSent() {} -+ -+func (ht *serverHandlerTransport) IncrMsgRecv() {} -+ -+func (ht *serverHandlerTransport) Drain(debugData string) { -+ panic("Drain() is not implemented") -+} -+ -+// mapRecvMsgError returns the non-nil err into the appropriate -+// error value as expected by callers of *grpc.parser.recvMsg. -+// In particular, in can only be: -+// - io.EOF -+// - io.ErrUnexpectedEOF -+// - of type transport.ConnectionError -+// - an error from the status package -+func mapRecvMsgError(err error) error { -+ if err == io.EOF || err == io.ErrUnexpectedEOF { -+ return err -+ } -+ if se, ok := err.(http2.StreamError); ok { -+ if code, ok := http2ErrConvTab[se.Code]; ok { -+ return status.Error(code, se.Error()) -+ } -+ } -+ if strings.Contains(err.Error(), "body closed by handler") { -+ return status.Error(codes.Canceled, err.Error()) -+ } -+ return connectionErrorf(true, err, err.Error()) -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go -new file mode 100755 -index 0000000..326bf08 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/http2_client.go -@@ -0,0 +1,1798 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "context" -+ "fmt" -+ "io" -+ "math" -+ "net" -+ "net/http" -+ "path/filepath" -+ "strconv" -+ "strings" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "golang.org/x/net/http2" -+ "golang.org/x/net/http2/hpack" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/internal/channelz" -+ icredentials "google.golang.org/grpc/internal/credentials" -+ "google.golang.org/grpc/internal/grpclog" -+ "google.golang.org/grpc/internal/grpcsync" -+ "google.golang.org/grpc/internal/grpcutil" -+ imetadata "google.golang.org/grpc/internal/metadata" -+ istatus "google.golang.org/grpc/internal/status" -+ "google.golang.org/grpc/internal/syscall" -+ "google.golang.org/grpc/internal/transport/networktype" -+ "google.golang.org/grpc/keepalive" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/peer" -+ "google.golang.org/grpc/resolver" -+ "google.golang.org/grpc/stats" -+ "google.golang.org/grpc/status" -+) -+ -+// clientConnectionCounter counts the number of connections a client has -+// initiated (equal to the number of http2Clients created). Must be accessed -+// atomically. -+var clientConnectionCounter uint64 -+ -+// http2Client implements the ClientTransport interface with HTTP2. -+type http2Client struct { -+ lastRead int64 // Keep this field 64-bit aligned. Accessed atomically. -+ ctx context.Context -+ cancel context.CancelFunc -+ ctxDone <-chan struct{} // Cache the ctx.Done() chan. -+ userAgent string -+ // address contains the resolver returned address for this transport. -+ // If the `ServerName` field is set, it takes precedence over `CallHdr.Host` -+ // passed to `NewStream`, when determining the :authority header. -+ address resolver.Address -+ md metadata.MD -+ conn net.Conn // underlying communication channel -+ loopy *loopyWriter -+ remoteAddr net.Addr -+ localAddr net.Addr -+ authInfo credentials.AuthInfo // auth info about the connection -+ -+ readerDone chan struct{} // sync point to enable testing. -+ writerDone chan struct{} // sync point to enable testing. -+ // goAway is closed to notify the upper layer (i.e., addrConn.transportMonitor) -+ // that the server sent GoAway on this transport. -+ goAway chan struct{} -+ -+ framer *framer -+ // controlBuf delivers all the control related tasks (e.g., window -+ // updates, reset streams, and various settings) to the controller. -+ // Do not access controlBuf with mu held. -+ controlBuf *controlBuffer -+ fc *trInFlow -+ // The scheme used: https if TLS is on, http otherwise. -+ scheme string -+ -+ isSecure bool -+ -+ perRPCCreds []credentials.PerRPCCredentials -+ -+ kp keepalive.ClientParameters -+ keepaliveEnabled bool -+ -+ statsHandlers []stats.Handler -+ -+ initialWindowSize int32 -+ -+ // configured by peer through SETTINGS_MAX_HEADER_LIST_SIZE -+ maxSendHeaderListSize *uint32 -+ -+ bdpEst *bdpEstimator -+ -+ maxConcurrentStreams uint32 -+ streamQuota int64 -+ streamsQuotaAvailable chan struct{} -+ waitingStreams uint32 -+ nextID uint32 -+ registeredCompressors string -+ -+ // Do not access controlBuf with mu held. -+ mu sync.Mutex // guard the following variables -+ state transportState -+ activeStreams map[uint32]*Stream -+ // prevGoAway ID records the Last-Stream-ID in the previous GOAway frame. -+ prevGoAwayID uint32 -+ // goAwayReason records the http2.ErrCode and debug data received with the -+ // GoAway frame. -+ goAwayReason GoAwayReason -+ // goAwayDebugMessage contains a detailed human readable string about a -+ // GoAway frame, useful for error messages. -+ goAwayDebugMessage string -+ // A condition variable used to signal when the keepalive goroutine should -+ // go dormant. The condition for dormancy is based on the number of active -+ // streams and the `PermitWithoutStream` keepalive client parameter. And -+ // since the number of active streams is guarded by the above mutex, we use -+ // the same for this condition variable as well. -+ kpDormancyCond *sync.Cond -+ // A boolean to track whether the keepalive goroutine is dormant or not. -+ // This is checked before attempting to signal the above condition -+ // variable. -+ kpDormant bool -+ -+ // Fields below are for channelz metric collection. -+ channelzID *channelz.Identifier -+ czData *channelzData -+ -+ onClose func(GoAwayReason) -+ -+ bufferPool *bufferPool -+ -+ connectionID uint64 -+ logger *grpclog.PrefixLogger -+} -+ -+func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr resolver.Address, useProxy bool, grpcUA string) (net.Conn, error) { -+ address := addr.Addr -+ networkType, ok := networktype.Get(addr) -+ if fn != nil { -+ // Special handling for unix scheme with custom dialer. Back in the day, -+ // we did not have a unix resolver and therefore targets with a unix -+ // scheme would end up using the passthrough resolver. So, user's used a -+ // custom dialer in this case and expected the original dial target to -+ // be passed to the custom dialer. Now, we have a unix resolver. But if -+ // a custom dialer is specified, we want to retain the old behavior in -+ // terms of the address being passed to the custom dialer. -+ if networkType == "unix" && !strings.HasPrefix(address, "\x00") { -+ // Supported unix targets are either "unix://absolute-path" or -+ // "unix:relative-path". -+ if filepath.IsAbs(address) { -+ return fn(ctx, "unix://"+address) -+ } -+ return fn(ctx, "unix:"+address) -+ } -+ return fn(ctx, address) -+ } -+ if !ok { -+ networkType, address = parseDialTarget(address) -+ } -+ if networkType == "tcp" && useProxy { -+ return proxyDial(ctx, address, grpcUA) -+ } -+ return (&net.Dialer{}).DialContext(ctx, networkType, address) -+} -+ -+func isTemporary(err error) bool { -+ switch err := err.(type) { -+ case interface { -+ Temporary() bool -+ }: -+ return err.Temporary() -+ case interface { -+ Timeout() bool -+ }: -+ // Timeouts may be resolved upon retry, and are thus treated as -+ // temporary. -+ return err.Timeout() -+ } -+ return true -+} -+ -+// newHTTP2Client constructs a connected ClientTransport to addr based on HTTP2 -+// and starts to receive messages on it. Non-nil error returns if construction -+// fails. -+func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts ConnectOptions, onClose func(GoAwayReason)) (_ *http2Client, err error) { -+ scheme := "http" -+ ctx, cancel := context.WithCancel(ctx) -+ defer func() { -+ if err != nil { -+ cancel() -+ } -+ }() -+ -+ // gRPC, resolver, balancer etc. can specify arbitrary data in the -+ // Attributes field of resolver.Address, which is shoved into connectCtx -+ // and passed to the dialer and credential handshaker. This makes it possible for -+ // address specific arbitrary data to reach custom dialers and credential handshakers. -+ connectCtx = icredentials.NewClientHandshakeInfoContext(connectCtx, credentials.ClientHandshakeInfo{Attributes: addr.Attributes}) -+ -+ conn, err := dial(connectCtx, opts.Dialer, addr, opts.UseProxy, opts.UserAgent) -+ if err != nil { -+ if opts.FailOnNonTempDialError { -+ return nil, connectionErrorf(isTemporary(err), err, "transport: error while dialing: %v", err) -+ } -+ return nil, connectionErrorf(true, err, "transport: Error while dialing: %v", err) -+ } -+ -+ // Any further errors will close the underlying connection -+ defer func(conn net.Conn) { -+ if err != nil { -+ conn.Close() -+ } -+ }(conn) -+ -+ // The following defer and goroutine monitor the connectCtx for cancelation -+ // and deadline. On context expiration, the connection is hard closed and -+ // this function will naturally fail as a result. Otherwise, the defer -+ // waits for the goroutine to exit to prevent the context from being -+ // monitored (and to prevent the connection from ever being closed) after -+ // returning from this function. -+ ctxMonitorDone := grpcsync.NewEvent() -+ newClientCtx, newClientDone := context.WithCancel(connectCtx) -+ defer func() { -+ newClientDone() // Awaken the goroutine below if connectCtx hasn't expired. -+ <-ctxMonitorDone.Done() // Wait for the goroutine below to exit. -+ }() -+ go func(conn net.Conn) { -+ defer ctxMonitorDone.Fire() // Signal this goroutine has exited. -+ <-newClientCtx.Done() // Block until connectCtx expires or the defer above executes. -+ if err := connectCtx.Err(); err != nil { -+ // connectCtx expired before exiting the function. Hard close the connection. -+ if logger.V(logLevel) { -+ logger.Infof("Aborting due to connect deadline expiring: %v", err) -+ } -+ conn.Close() -+ } -+ }(conn) -+ -+ kp := opts.KeepaliveParams -+ // Validate keepalive parameters. -+ if kp.Time == 0 { -+ kp.Time = defaultClientKeepaliveTime -+ } -+ if kp.Timeout == 0 { -+ kp.Timeout = defaultClientKeepaliveTimeout -+ } -+ keepaliveEnabled := false -+ if kp.Time != infinity { -+ if err = syscall.SetTCPUserTimeout(conn, kp.Timeout); err != nil { -+ return nil, connectionErrorf(false, err, "transport: failed to set TCP_USER_TIMEOUT: %v", err) -+ } -+ keepaliveEnabled = true -+ } -+ var ( -+ isSecure bool -+ authInfo credentials.AuthInfo -+ ) -+ transportCreds := opts.TransportCredentials -+ perRPCCreds := opts.PerRPCCredentials -+ -+ if b := opts.CredsBundle; b != nil { -+ if t := b.TransportCredentials(); t != nil { -+ transportCreds = t -+ } -+ if t := b.PerRPCCredentials(); t != nil { -+ perRPCCreds = append(perRPCCreds, t) -+ } -+ } -+ if transportCreds != nil { -+ conn, authInfo, err = transportCreds.ClientHandshake(connectCtx, addr.ServerName, conn) -+ if err != nil { -+ return nil, connectionErrorf(isTemporary(err), err, "transport: authentication handshake failed: %v", err) -+ } -+ for _, cd := range perRPCCreds { -+ if cd.RequireTransportSecurity() { -+ if ci, ok := authInfo.(interface { -+ GetCommonAuthInfo() credentials.CommonAuthInfo -+ }); ok { -+ secLevel := ci.GetCommonAuthInfo().SecurityLevel -+ if secLevel != credentials.InvalidSecurityLevel && secLevel < credentials.PrivacyAndIntegrity { -+ return nil, connectionErrorf(true, nil, "transport: cannot send secure credentials on an insecure connection") -+ } -+ } -+ } -+ } -+ isSecure = true -+ if transportCreds.Info().SecurityProtocol == "tls" { -+ scheme = "https" -+ } -+ } -+ dynamicWindow := true -+ icwz := int32(initialWindowSize) -+ if opts.InitialConnWindowSize >= defaultWindowSize { -+ icwz = opts.InitialConnWindowSize -+ dynamicWindow = false -+ } -+ writeBufSize := opts.WriteBufferSize -+ readBufSize := opts.ReadBufferSize -+ maxHeaderListSize := defaultClientMaxHeaderListSize -+ if opts.MaxHeaderListSize != nil { -+ maxHeaderListSize = *opts.MaxHeaderListSize -+ } -+ t := &http2Client{ -+ ctx: ctx, -+ ctxDone: ctx.Done(), // Cache Done chan. -+ cancel: cancel, -+ userAgent: opts.UserAgent, -+ registeredCompressors: grpcutil.RegisteredCompressors(), -+ address: addr, -+ conn: conn, -+ remoteAddr: conn.RemoteAddr(), -+ localAddr: conn.LocalAddr(), -+ authInfo: authInfo, -+ readerDone: make(chan struct{}), -+ writerDone: make(chan struct{}), -+ goAway: make(chan struct{}), -+ framer: newFramer(conn, writeBufSize, readBufSize, maxHeaderListSize), -+ fc: &trInFlow{limit: uint32(icwz)}, -+ scheme: scheme, -+ activeStreams: make(map[uint32]*Stream), -+ isSecure: isSecure, -+ perRPCCreds: perRPCCreds, -+ kp: kp, -+ statsHandlers: opts.StatsHandlers, -+ initialWindowSize: initialWindowSize, -+ nextID: 1, -+ maxConcurrentStreams: defaultMaxStreamsClient, -+ streamQuota: defaultMaxStreamsClient, -+ streamsQuotaAvailable: make(chan struct{}, 1), -+ czData: new(channelzData), -+ keepaliveEnabled: keepaliveEnabled, -+ bufferPool: newBufferPool(), -+ onClose: onClose, -+ } -+ t.logger = prefixLoggerForClientTransport(t) -+ // Add peer information to the http2client context. -+ t.ctx = peer.NewContext(t.ctx, t.getPeer()) -+ -+ if md, ok := addr.Metadata.(*metadata.MD); ok { -+ t.md = *md -+ } else if md := imetadata.Get(addr); md != nil { -+ t.md = md -+ } -+ t.controlBuf = newControlBuffer(t.ctxDone) -+ if opts.InitialWindowSize >= defaultWindowSize { -+ t.initialWindowSize = opts.InitialWindowSize -+ dynamicWindow = false -+ } -+ if dynamicWindow { -+ t.bdpEst = &bdpEstimator{ -+ bdp: initialWindowSize, -+ updateFlowControl: t.updateFlowControl, -+ } -+ } -+ for _, sh := range t.statsHandlers { -+ t.ctx = sh.TagConn(t.ctx, &stats.ConnTagInfo{ -+ RemoteAddr: t.remoteAddr, -+ LocalAddr: t.localAddr, -+ }) -+ connBegin := &stats.ConnBegin{ -+ Client: true, -+ } -+ sh.HandleConn(t.ctx, connBegin) -+ } -+ t.channelzID, err = channelz.RegisterNormalSocket(t, opts.ChannelzParentID, fmt.Sprintf("%s -> %s", t.localAddr, t.remoteAddr)) -+ if err != nil { -+ return nil, err -+ } -+ if t.keepaliveEnabled { -+ t.kpDormancyCond = sync.NewCond(&t.mu) -+ go t.keepalive() -+ } -+ -+ // Start the reader goroutine for incoming messages. Each transport has a -+ // dedicated goroutine which reads HTTP2 frames from the network. Then it -+ // dispatches the frame to the corresponding stream entity. When the -+ // server preface is received, readerErrCh is closed. If an error occurs -+ // first, an error is pushed to the channel. This must be checked before -+ // returning from this function. -+ readerErrCh := make(chan error, 1) -+ go t.reader(readerErrCh) -+ defer func() { -+ if err == nil { -+ err = <-readerErrCh -+ } -+ if err != nil { -+ t.Close(err) -+ } -+ }() -+ -+ // Send connection preface to server. -+ n, err := t.conn.Write(clientPreface) -+ if err != nil { -+ err = connectionErrorf(true, err, "transport: failed to write client preface: %v", err) -+ return nil, err -+ } -+ if n != len(clientPreface) { -+ err = connectionErrorf(true, nil, "transport: preface mismatch, wrote %d bytes; want %d", n, len(clientPreface)) -+ return nil, err -+ } -+ var ss []http2.Setting -+ -+ if t.initialWindowSize != defaultWindowSize { -+ ss = append(ss, http2.Setting{ -+ ID: http2.SettingInitialWindowSize, -+ Val: uint32(t.initialWindowSize), -+ }) -+ } -+ if opts.MaxHeaderListSize != nil { -+ ss = append(ss, http2.Setting{ -+ ID: http2.SettingMaxHeaderListSize, -+ Val: *opts.MaxHeaderListSize, -+ }) -+ } -+ err = t.framer.fr.WriteSettings(ss...) -+ if err != nil { -+ err = connectionErrorf(true, err, "transport: failed to write initial settings frame: %v", err) -+ return nil, err -+ } -+ // Adjust the connection flow control window if needed. -+ if delta := uint32(icwz - defaultWindowSize); delta > 0 { -+ if err := t.framer.fr.WriteWindowUpdate(0, delta); err != nil { -+ err = connectionErrorf(true, err, "transport: failed to write window update: %v", err) -+ return nil, err -+ } -+ } -+ -+ t.connectionID = atomic.AddUint64(&clientConnectionCounter, 1) -+ -+ if err := t.framer.writer.Flush(); err != nil { -+ return nil, err -+ } -+ go func() { -+ t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger) -+ t.loopy.run() -+ close(t.writerDone) -+ }() -+ return t, nil -+} -+ -+func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *Stream { -+ // TODO(zhaoq): Handle uint32 overflow of Stream.id. -+ s := &Stream{ -+ ct: t, -+ done: make(chan struct{}), -+ method: callHdr.Method, -+ sendCompress: callHdr.SendCompress, -+ buf: newRecvBuffer(), -+ headerChan: make(chan struct{}), -+ contentSubtype: callHdr.ContentSubtype, -+ doneFunc: callHdr.DoneFunc, -+ } -+ s.wq = newWriteQuota(defaultWriteQuota, s.done) -+ s.requestRead = func(n int) { -+ t.adjustWindow(s, uint32(n)) -+ } -+ // The client side stream context should have exactly the same life cycle with the user provided context. -+ // That means, s.ctx should be read-only. And s.ctx is done iff ctx is done. -+ // So we use the original context here instead of creating a copy. -+ s.ctx = ctx -+ s.trReader = &transportReader{ -+ reader: &recvBufferReader{ -+ ctx: s.ctx, -+ ctxDone: s.ctx.Done(), -+ recv: s.buf, -+ closeStream: func(err error) { -+ t.CloseStream(s, err) -+ }, -+ freeBuffer: t.bufferPool.put, -+ }, -+ windowHandler: func(n int) { -+ t.updateWindow(s, uint32(n)) -+ }, -+ } -+ return s -+} -+ -+func (t *http2Client) getPeer() *peer.Peer { -+ return &peer.Peer{ -+ Addr: t.remoteAddr, -+ AuthInfo: t.authInfo, // Can be nil -+ } -+} -+ -+func (t *http2Client) createHeaderFields(ctx context.Context, callHdr *CallHdr) ([]hpack.HeaderField, error) { -+ aud := t.createAudience(callHdr) -+ ri := credentials.RequestInfo{ -+ Method: callHdr.Method, -+ AuthInfo: t.authInfo, -+ } -+ ctxWithRequestInfo := icredentials.NewRequestInfoContext(ctx, ri) -+ authData, err := t.getTrAuthData(ctxWithRequestInfo, aud) -+ if err != nil { -+ return nil, err -+ } -+ callAuthData, err := t.getCallAuthData(ctxWithRequestInfo, aud, callHdr) -+ if err != nil { -+ return nil, err -+ } -+ // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields -+ // first and create a slice of that exact size. -+ // Make the slice of certain predictable size to reduce allocations made by append. -+ hfLen := 7 // :method, :scheme, :path, :authority, content-type, user-agent, te -+ hfLen += len(authData) + len(callAuthData) -+ headerFields := make([]hpack.HeaderField, 0, hfLen) -+ headerFields = append(headerFields, hpack.HeaderField{Name: ":method", Value: "POST"}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: ":scheme", Value: t.scheme}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: ":path", Value: callHdr.Method}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: ":authority", Value: callHdr.Host}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: grpcutil.ContentType(callHdr.ContentSubtype)}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: "user-agent", Value: t.userAgent}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: "te", Value: "trailers"}) -+ if callHdr.PreviousAttempts > 0 { -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-previous-rpc-attempts", Value: strconv.Itoa(callHdr.PreviousAttempts)}) -+ } -+ -+ registeredCompressors := t.registeredCompressors -+ if callHdr.SendCompress != "" { -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-encoding", Value: callHdr.SendCompress}) -+ // Include the outgoing compressor name when compressor is not registered -+ // via encoding.RegisterCompressor. This is possible when client uses -+ // WithCompressor dial option. -+ if !grpcutil.IsCompressorNameRegistered(callHdr.SendCompress) { -+ if registeredCompressors != "" { -+ registeredCompressors += "," -+ } -+ registeredCompressors += callHdr.SendCompress -+ } -+ } -+ -+ if registeredCompressors != "" { -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-accept-encoding", Value: registeredCompressors}) -+ } -+ if dl, ok := ctx.Deadline(); ok { -+ // Send out timeout regardless its value. The server can detect timeout context by itself. -+ // TODO(mmukhi): Perhaps this field should be updated when actually writing out to the wire. -+ timeout := time.Until(dl) -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-timeout", Value: grpcutil.EncodeDuration(timeout)}) -+ } -+ for k, v := range authData { -+ headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) -+ } -+ for k, v := range callAuthData { -+ headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) -+ } -+ if b := stats.OutgoingTags(ctx); b != nil { -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-tags-bin", Value: encodeBinHeader(b)}) -+ } -+ if b := stats.OutgoingTrace(ctx); b != nil { -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-trace-bin", Value: encodeBinHeader(b)}) -+ } -+ -+ if md, added, ok := metadata.FromOutgoingContextRaw(ctx); ok { -+ var k string -+ for k, vv := range md { -+ // HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set. -+ if isReservedHeader(k) { -+ continue -+ } -+ for _, v := range vv { -+ headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) -+ } -+ } -+ for _, vv := range added { -+ for i, v := range vv { -+ if i%2 == 0 { -+ k = strings.ToLower(v) -+ continue -+ } -+ // HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set. -+ if isReservedHeader(k) { -+ continue -+ } -+ headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) -+ } -+ } -+ } -+ for k, vv := range t.md { -+ if isReservedHeader(k) { -+ continue -+ } -+ for _, v := range vv { -+ headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) -+ } -+ } -+ return headerFields, nil -+} -+ -+func (t *http2Client) createAudience(callHdr *CallHdr) string { -+ // Create an audience string only if needed. -+ if len(t.perRPCCreds) == 0 && callHdr.Creds == nil { -+ return "" -+ } -+ // Construct URI required to get auth request metadata. -+ // Omit port if it is the default one. -+ host := strings.TrimSuffix(callHdr.Host, ":443") -+ pos := strings.LastIndex(callHdr.Method, "/") -+ if pos == -1 { -+ pos = len(callHdr.Method) -+ } -+ return "https://" + host + callHdr.Method[:pos] -+} -+ -+func (t *http2Client) getTrAuthData(ctx context.Context, audience string) (map[string]string, error) { -+ if len(t.perRPCCreds) == 0 { -+ return nil, nil -+ } -+ authData := map[string]string{} -+ for _, c := range t.perRPCCreds { -+ data, err := c.GetRequestMetadata(ctx, audience) -+ if err != nil { -+ if st, ok := status.FromError(err); ok { -+ // Restrict the code to the list allowed by gRFC A54. -+ if istatus.IsRestrictedControlPlaneCode(st) { -+ err = status.Errorf(codes.Internal, "transport: received per-RPC creds error with illegal status: %v", err) -+ } -+ return nil, err -+ } -+ -+ return nil, status.Errorf(codes.Unauthenticated, "transport: per-RPC creds failed due to error: %v", err) -+ } -+ for k, v := range data { -+ // Capital header names are illegal in HTTP/2. -+ k = strings.ToLower(k) -+ authData[k] = v -+ } -+ } -+ return authData, nil -+} -+ -+func (t *http2Client) getCallAuthData(ctx context.Context, audience string, callHdr *CallHdr) (map[string]string, error) { -+ var callAuthData map[string]string -+ // Check if credentials.PerRPCCredentials were provided via call options. -+ // Note: if these credentials are provided both via dial options and call -+ // options, then both sets of credentials will be applied. -+ if callCreds := callHdr.Creds; callCreds != nil { -+ if callCreds.RequireTransportSecurity() { -+ ri, _ := credentials.RequestInfoFromContext(ctx) -+ if !t.isSecure || credentials.CheckSecurityLevel(ri.AuthInfo, credentials.PrivacyAndIntegrity) != nil { -+ return nil, status.Error(codes.Unauthenticated, "transport: cannot send secure credentials on an insecure connection") -+ } -+ } -+ data, err := callCreds.GetRequestMetadata(ctx, audience) -+ if err != nil { -+ if st, ok := status.FromError(err); ok { -+ // Restrict the code to the list allowed by gRFC A54. -+ if istatus.IsRestrictedControlPlaneCode(st) { -+ err = status.Errorf(codes.Internal, "transport: received per-RPC creds error with illegal status: %v", err) -+ } -+ return nil, err -+ } -+ return nil, status.Errorf(codes.Internal, "transport: per-RPC creds failed due to error: %v", err) -+ } -+ callAuthData = make(map[string]string, len(data)) -+ for k, v := range data { -+ // Capital header names are illegal in HTTP/2 -+ k = strings.ToLower(k) -+ callAuthData[k] = v -+ } -+ } -+ return callAuthData, nil -+} -+ -+// NewStreamError wraps an error and reports additional information. Typically -+// NewStream errors result in transparent retry, as they mean nothing went onto -+// the wire. However, there are two notable exceptions: -+// -+// 1. If the stream headers violate the max header list size allowed by the -+// server. It's possible this could succeed on another transport, even if -+// it's unlikely, but do not transparently retry. -+// 2. If the credentials errored when requesting their headers. In this case, -+// it's possible a retry can fix the problem, but indefinitely transparently -+// retrying is not appropriate as it is likely the credentials, if they can -+// eventually succeed, would need I/O to do so. -+type NewStreamError struct { -+ Err error -+ -+ AllowTransparentRetry bool -+} -+ -+func (e NewStreamError) Error() string { -+ return e.Err.Error() -+} -+ -+// NewStream creates a stream and registers it into the transport as "active" -+// streams. All non-nil errors returned will be *NewStreamError. -+func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, error) { -+ ctx = peer.NewContext(ctx, t.getPeer()) -+ -+ // ServerName field of the resolver returned address takes precedence over -+ // Host field of CallHdr to determine the :authority header. This is because, -+ // the ServerName field takes precedence for server authentication during -+ // TLS handshake, and the :authority header should match the value used -+ // for server authentication. -+ if t.address.ServerName != "" { -+ newCallHdr := *callHdr -+ newCallHdr.Host = t.address.ServerName -+ callHdr = &newCallHdr -+ } -+ -+ headerFields, err := t.createHeaderFields(ctx, callHdr) -+ if err != nil { -+ return nil, &NewStreamError{Err: err, AllowTransparentRetry: false} -+ } -+ s := t.newStream(ctx, callHdr) -+ cleanup := func(err error) { -+ if s.swapState(streamDone) == streamDone { -+ // If it was already done, return. -+ return -+ } -+ // The stream was unprocessed by the server. -+ atomic.StoreUint32(&s.unprocessed, 1) -+ s.write(recvMsg{err: err}) -+ close(s.done) -+ // If headerChan isn't closed, then close it. -+ if atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) { -+ close(s.headerChan) -+ } -+ } -+ hdr := &headerFrame{ -+ hf: headerFields, -+ endStream: false, -+ initStream: func(id uint32) error { -+ t.mu.Lock() -+ // TODO: handle transport closure in loopy instead and remove this -+ // initStream is never called when transport is draining. -+ if t.state == closing { -+ t.mu.Unlock() -+ cleanup(ErrConnClosing) -+ return ErrConnClosing -+ } -+ if channelz.IsOn() { -+ atomic.AddInt64(&t.czData.streamsStarted, 1) -+ atomic.StoreInt64(&t.czData.lastStreamCreatedTime, time.Now().UnixNano()) -+ } -+ // If the keepalive goroutine has gone dormant, wake it up. -+ if t.kpDormant { -+ t.kpDormancyCond.Signal() -+ } -+ t.mu.Unlock() -+ return nil -+ }, -+ onOrphaned: cleanup, -+ wq: s.wq, -+ } -+ firstTry := true -+ var ch chan struct{} -+ transportDrainRequired := false -+ checkForStreamQuota := func(it interface{}) bool { -+ if t.streamQuota <= 0 { // Can go negative if server decreases it. -+ if firstTry { -+ t.waitingStreams++ -+ } -+ ch = t.streamsQuotaAvailable -+ return false -+ } -+ if !firstTry { -+ t.waitingStreams-- -+ } -+ t.streamQuota-- -+ h := it.(*headerFrame) -+ h.streamID = t.nextID -+ t.nextID += 2 -+ -+ // Drain client transport if nextID > MaxStreamID which signals gRPC that -+ // the connection is closed and a new one must be created for subsequent RPCs. -+ transportDrainRequired = t.nextID > MaxStreamID -+ -+ s.id = h.streamID -+ s.fc = &inFlow{limit: uint32(t.initialWindowSize)} -+ t.mu.Lock() -+ if t.state == draining || t.activeStreams == nil { // Can be niled from Close(). -+ t.mu.Unlock() -+ return false // Don't create a stream if the transport is already closed. -+ } -+ t.activeStreams[s.id] = s -+ t.mu.Unlock() -+ if t.streamQuota > 0 && t.waitingStreams > 0 { -+ select { -+ case t.streamsQuotaAvailable <- struct{}{}: -+ default: -+ } -+ } -+ return true -+ } -+ var hdrListSizeErr error -+ checkForHeaderListSize := func(it interface{}) bool { -+ if t.maxSendHeaderListSize == nil { -+ return true -+ } -+ hdrFrame := it.(*headerFrame) -+ var sz int64 -+ for _, f := range hdrFrame.hf { -+ if sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) { -+ hdrListSizeErr = status.Errorf(codes.Internal, "header list size to send violates the maximum size (%d bytes) set by server", *t.maxSendHeaderListSize) -+ return false -+ } -+ } -+ return true -+ } -+ for { -+ success, err := t.controlBuf.executeAndPut(func(it interface{}) bool { -+ return checkForHeaderListSize(it) && checkForStreamQuota(it) -+ }, hdr) -+ if err != nil { -+ // Connection closed. -+ return nil, &NewStreamError{Err: err, AllowTransparentRetry: true} -+ } -+ if success { -+ break -+ } -+ if hdrListSizeErr != nil { -+ return nil, &NewStreamError{Err: hdrListSizeErr} -+ } -+ firstTry = false -+ select { -+ case <-ch: -+ case <-ctx.Done(): -+ return nil, &NewStreamError{Err: ContextErr(ctx.Err())} -+ case <-t.goAway: -+ return nil, &NewStreamError{Err: errStreamDrain, AllowTransparentRetry: true} -+ case <-t.ctx.Done(): -+ return nil, &NewStreamError{Err: ErrConnClosing, AllowTransparentRetry: true} -+ } -+ } -+ if len(t.statsHandlers) != 0 { -+ header, ok := metadata.FromOutgoingContext(ctx) -+ if ok { -+ header.Set("user-agent", t.userAgent) -+ } else { -+ header = metadata.Pairs("user-agent", t.userAgent) -+ } -+ for _, sh := range t.statsHandlers { -+ // Note: The header fields are compressed with hpack after this call returns. -+ // No WireLength field is set here. -+ // Note: Creating a new stats object to prevent pollution. -+ outHeader := &stats.OutHeader{ -+ Client: true, -+ FullMethod: callHdr.Method, -+ RemoteAddr: t.remoteAddr, -+ LocalAddr: t.localAddr, -+ Compression: callHdr.SendCompress, -+ Header: header, -+ } -+ sh.HandleRPC(s.ctx, outHeader) -+ } -+ } -+ if transportDrainRequired { -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Draining transport: t.nextID > MaxStreamID") -+ } -+ t.GracefulClose() -+ } -+ return s, nil -+} -+ -+// CloseStream clears the footprint of a stream when the stream is not needed any more. -+// This must not be executed in reader's goroutine. -+func (t *http2Client) CloseStream(s *Stream, err error) { -+ var ( -+ rst bool -+ rstCode http2.ErrCode -+ ) -+ if err != nil { -+ rst = true -+ rstCode = http2.ErrCodeCancel -+ } -+ t.closeStream(s, err, rst, rstCode, status.Convert(err), nil, false) -+} -+ -+func (t *http2Client) closeStream(s *Stream, err error, rst bool, rstCode http2.ErrCode, st *status.Status, mdata map[string][]string, eosReceived bool) { -+ // Set stream status to done. -+ if s.swapState(streamDone) == streamDone { -+ // If it was already done, return. If multiple closeStream calls -+ // happen simultaneously, wait for the first to finish. -+ <-s.done -+ return -+ } -+ // status and trailers can be updated here without any synchronization because the stream goroutine will -+ // only read it after it sees an io.EOF error from read or write and we'll write those errors -+ // only after updating this. -+ s.status = st -+ if len(mdata) > 0 { -+ s.trailer = mdata -+ } -+ if err != nil { -+ // This will unblock reads eventually. -+ s.write(recvMsg{err: err}) -+ } -+ // If headerChan isn't closed, then close it. -+ if atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) { -+ s.noHeaders = true -+ close(s.headerChan) -+ } -+ cleanup := &cleanupStream{ -+ streamID: s.id, -+ onWrite: func() { -+ t.mu.Lock() -+ if t.activeStreams != nil { -+ delete(t.activeStreams, s.id) -+ } -+ t.mu.Unlock() -+ if channelz.IsOn() { -+ if eosReceived { -+ atomic.AddInt64(&t.czData.streamsSucceeded, 1) -+ } else { -+ atomic.AddInt64(&t.czData.streamsFailed, 1) -+ } -+ } -+ }, -+ rst: rst, -+ rstCode: rstCode, -+ } -+ addBackStreamQuota := func(interface{}) bool { -+ t.streamQuota++ -+ if t.streamQuota > 0 && t.waitingStreams > 0 { -+ select { -+ case t.streamsQuotaAvailable <- struct{}{}: -+ default: -+ } -+ } -+ return true -+ } -+ t.controlBuf.executeAndPut(addBackStreamQuota, cleanup) -+ // This will unblock write. -+ close(s.done) -+ if s.doneFunc != nil { -+ s.doneFunc() -+ } -+} -+ -+// Close kicks off the shutdown process of the transport. This should be called -+// only once on a transport. Once it is called, the transport should not be -+// accessed any more. -+func (t *http2Client) Close(err error) { -+ t.mu.Lock() -+ // Make sure we only close once. -+ if t.state == closing { -+ t.mu.Unlock() -+ return -+ } -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Closing: %v", err) -+ } -+ // Call t.onClose ASAP to prevent the client from attempting to create new -+ // streams. -+ if t.state != draining { -+ t.onClose(GoAwayInvalid) -+ } -+ t.state = closing -+ streams := t.activeStreams -+ t.activeStreams = nil -+ if t.kpDormant { -+ // If the keepalive goroutine is blocked on this condition variable, we -+ // should unblock it so that the goroutine eventually exits. -+ t.kpDormancyCond.Signal() -+ } -+ t.mu.Unlock() -+ t.controlBuf.finish() -+ t.cancel() -+ t.conn.Close() -+ channelz.RemoveEntry(t.channelzID) -+ // Append info about previous goaways if there were any, since this may be important -+ // for understanding the root cause for this connection to be closed. -+ _, goAwayDebugMessage := t.GetGoAwayReason() -+ -+ var st *status.Status -+ if len(goAwayDebugMessage) > 0 { -+ st = status.Newf(codes.Unavailable, "closing transport due to: %v, received prior goaway: %v", err, goAwayDebugMessage) -+ err = st.Err() -+ } else { -+ st = status.New(codes.Unavailable, err.Error()) -+ } -+ -+ // Notify all active streams. -+ for _, s := range streams { -+ t.closeStream(s, err, false, http2.ErrCodeNo, st, nil, false) -+ } -+ for _, sh := range t.statsHandlers { -+ connEnd := &stats.ConnEnd{ -+ Client: true, -+ } -+ sh.HandleConn(t.ctx, connEnd) -+ } -+} -+ -+// GracefulClose sets the state to draining, which prevents new streams from -+// being created and causes the transport to be closed when the last active -+// stream is closed. If there are no active streams, the transport is closed -+// immediately. This does nothing if the transport is already draining or -+// closing. -+func (t *http2Client) GracefulClose() { -+ t.mu.Lock() -+ // Make sure we move to draining only from active. -+ if t.state == draining || t.state == closing { -+ t.mu.Unlock() -+ return -+ } -+ if t.logger.V(logLevel) { -+ t.logger.Infof("GracefulClose called") -+ } -+ t.onClose(GoAwayInvalid) -+ t.state = draining -+ active := len(t.activeStreams) -+ t.mu.Unlock() -+ if active == 0 { -+ t.Close(connectionErrorf(true, nil, "no active streams left to process while draining")) -+ return -+ } -+ t.controlBuf.put(&incomingGoAway{}) -+} -+ -+// Write formats the data into HTTP2 data frame(s) and sends it out. The caller -+// should proceed only if Write returns nil. -+func (t *http2Client) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { -+ if opts.Last { -+ // If it's the last message, update stream state. -+ if !s.compareAndSwapState(streamActive, streamWriteDone) { -+ return errStreamDone -+ } -+ } else if s.getState() != streamActive { -+ return errStreamDone -+ } -+ df := &dataFrame{ -+ streamID: s.id, -+ endStream: opts.Last, -+ h: hdr, -+ d: data, -+ } -+ if hdr != nil || data != nil { // If it's not an empty data frame, check quota. -+ if err := s.wq.get(int32(len(hdr) + len(data))); err != nil { -+ return err -+ } -+ } -+ return t.controlBuf.put(df) -+} -+ -+func (t *http2Client) getStream(f http2.Frame) *Stream { -+ t.mu.Lock() -+ s := t.activeStreams[f.Header().StreamID] -+ t.mu.Unlock() -+ return s -+} -+ -+// adjustWindow sends out extra window update over the initial window size -+// of stream if the application is requesting data larger in size than -+// the window. -+func (t *http2Client) adjustWindow(s *Stream, n uint32) { -+ if w := s.fc.maybeAdjust(n); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w}) -+ } -+} -+ -+// updateWindow adjusts the inbound quota for the stream. -+// Window updates will be sent out when the cumulative quota -+// exceeds the corresponding threshold. -+func (t *http2Client) updateWindow(s *Stream, n uint32) { -+ if w := s.fc.onRead(n); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w}) -+ } -+} -+ -+// updateFlowControl updates the incoming flow control windows -+// for the transport and the stream based on the current bdp -+// estimation. -+func (t *http2Client) updateFlowControl(n uint32) { -+ updateIWS := func(interface{}) bool { -+ t.initialWindowSize = int32(n) -+ t.mu.Lock() -+ for _, s := range t.activeStreams { -+ s.fc.newLimit(n) -+ } -+ t.mu.Unlock() -+ return true -+ } -+ t.controlBuf.executeAndPut(updateIWS, &outgoingWindowUpdate{streamID: 0, increment: t.fc.newLimit(n)}) -+ t.controlBuf.put(&outgoingSettings{ -+ ss: []http2.Setting{ -+ { -+ ID: http2.SettingInitialWindowSize, -+ Val: n, -+ }, -+ }, -+ }) -+} -+ -+func (t *http2Client) handleData(f *http2.DataFrame) { -+ size := f.Header().Length -+ var sendBDPPing bool -+ if t.bdpEst != nil { -+ sendBDPPing = t.bdpEst.add(size) -+ } -+ // Decouple connection's flow control from application's read. -+ // An update on connection's flow control should not depend on -+ // whether user application has read the data or not. Such a -+ // restriction is already imposed on the stream's flow control, -+ // and therefore the sender will be blocked anyways. -+ // Decoupling the connection flow control will prevent other -+ // active(fast) streams from starving in presence of slow or -+ // inactive streams. -+ // -+ if w := t.fc.onData(size); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{ -+ streamID: 0, -+ increment: w, -+ }) -+ } -+ if sendBDPPing { -+ // Avoid excessive ping detection (e.g. in an L7 proxy) -+ // by sending a window update prior to the BDP ping. -+ -+ if w := t.fc.reset(); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{ -+ streamID: 0, -+ increment: w, -+ }) -+ } -+ -+ t.controlBuf.put(bdpPing) -+ } -+ // Select the right stream to dispatch. -+ s := t.getStream(f) -+ if s == nil { -+ return -+ } -+ if size > 0 { -+ if err := s.fc.onData(size); err != nil { -+ t.closeStream(s, io.EOF, true, http2.ErrCodeFlowControl, status.New(codes.Internal, err.Error()), nil, false) -+ return -+ } -+ if f.Header().Flags.Has(http2.FlagDataPadded) { -+ if w := s.fc.onRead(size - uint32(len(f.Data()))); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{s.id, w}) -+ } -+ } -+ // TODO(bradfitz, zhaoq): A copy is required here because there is no -+ // guarantee f.Data() is consumed before the arrival of next frame. -+ // Can this copy be eliminated? -+ if len(f.Data()) > 0 { -+ buffer := t.bufferPool.get() -+ buffer.Reset() -+ buffer.Write(f.Data()) -+ s.write(recvMsg{buffer: buffer}) -+ } -+ } -+ // The server has closed the stream without sending trailers. Record that -+ // the read direction is closed, and set the status appropriately. -+ if f.StreamEnded() { -+ t.closeStream(s, io.EOF, false, http2.ErrCodeNo, status.New(codes.Internal, "server closed the stream without sending trailers"), nil, true) -+ } -+} -+ -+func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) { -+ s := t.getStream(f) -+ if s == nil { -+ return -+ } -+ if f.ErrCode == http2.ErrCodeRefusedStream { -+ // The stream was unprocessed by the server. -+ atomic.StoreUint32(&s.unprocessed, 1) -+ } -+ statusCode, ok := http2ErrConvTab[f.ErrCode] -+ if !ok { -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Received a RST_STREAM frame with code %q, but found no mapped gRPC status", f.ErrCode) -+ } -+ statusCode = codes.Unknown -+ } -+ if statusCode == codes.Canceled { -+ if d, ok := s.ctx.Deadline(); ok && !d.After(time.Now()) { -+ // Our deadline was already exceeded, and that was likely the cause -+ // of this cancelation. Alter the status code accordingly. -+ statusCode = codes.DeadlineExceeded -+ } -+ } -+ t.closeStream(s, io.EOF, false, http2.ErrCodeNo, status.Newf(statusCode, "stream terminated by RST_STREAM with error code: %v", f.ErrCode), nil, false) -+} -+ -+func (t *http2Client) handleSettings(f *http2.SettingsFrame, isFirst bool) { -+ if f.IsAck() { -+ return -+ } -+ var maxStreams *uint32 -+ var ss []http2.Setting -+ var updateFuncs []func() -+ f.ForeachSetting(func(s http2.Setting) error { -+ switch s.ID { -+ case http2.SettingMaxConcurrentStreams: -+ maxStreams = new(uint32) -+ *maxStreams = s.Val -+ case http2.SettingMaxHeaderListSize: -+ updateFuncs = append(updateFuncs, func() { -+ t.maxSendHeaderListSize = new(uint32) -+ *t.maxSendHeaderListSize = s.Val -+ }) -+ default: -+ ss = append(ss, s) -+ } -+ return nil -+ }) -+ if isFirst && maxStreams == nil { -+ maxStreams = new(uint32) -+ *maxStreams = math.MaxUint32 -+ } -+ sf := &incomingSettings{ -+ ss: ss, -+ } -+ if maxStreams != nil { -+ updateStreamQuota := func() { -+ delta := int64(*maxStreams) - int64(t.maxConcurrentStreams) -+ t.maxConcurrentStreams = *maxStreams -+ t.streamQuota += delta -+ if delta > 0 && t.waitingStreams > 0 { -+ close(t.streamsQuotaAvailable) // wake all of them up. -+ t.streamsQuotaAvailable = make(chan struct{}, 1) -+ } -+ } -+ updateFuncs = append(updateFuncs, updateStreamQuota) -+ } -+ t.controlBuf.executeAndPut(func(interface{}) bool { -+ for _, f := range updateFuncs { -+ f() -+ } -+ return true -+ }, sf) -+} -+ -+func (t *http2Client) handlePing(f *http2.PingFrame) { -+ if f.IsAck() { -+ // Maybe it's a BDP ping. -+ if t.bdpEst != nil { -+ t.bdpEst.calculate(f.Data) -+ } -+ return -+ } -+ pingAck := &ping{ack: true} -+ copy(pingAck.data[:], f.Data[:]) -+ t.controlBuf.put(pingAck) -+} -+ -+func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { -+ t.mu.Lock() -+ if t.state == closing { -+ t.mu.Unlock() -+ return -+ } -+ if f.ErrCode == http2.ErrCodeEnhanceYourCalm && string(f.DebugData()) == "too_many_pings" { -+ // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug -+ // data equal to ASCII "too_many_pings", it should log the occurrence at a log level that is -+ // enabled by default and double the configure KEEPALIVE_TIME used for new connections -+ // on that channel. -+ logger.Errorf("Client received GoAway with error code ENHANCE_YOUR_CALM and debug data equal to ASCII \"too_many_pings\".") -+ } -+ id := f.LastStreamID -+ if id > 0 && id%2 == 0 { -+ t.mu.Unlock() -+ t.Close(connectionErrorf(true, nil, "received goaway with non-zero even-numbered numbered stream id: %v", id)) -+ return -+ } -+ // A client can receive multiple GoAways from the server (see -+ // https://github.com/grpc/grpc-go/issues/1387). The idea is that the first -+ // GoAway will be sent with an ID of MaxInt32 and the second GoAway will be -+ // sent after an RTT delay with the ID of the last stream the server will -+ // process. -+ // -+ // Therefore, when we get the first GoAway we don't necessarily close any -+ // streams. While in case of second GoAway we close all streams created after -+ // the GoAwayId. This way streams that were in-flight while the GoAway from -+ // server was being sent don't get killed. -+ select { -+ case <-t.goAway: // t.goAway has been closed (i.e.,multiple GoAways). -+ // If there are multiple GoAways the first one should always have an ID greater than the following ones. -+ if id > t.prevGoAwayID { -+ t.mu.Unlock() -+ t.Close(connectionErrorf(true, nil, "received goaway with stream id: %v, which exceeds stream id of previous goaway: %v", id, t.prevGoAwayID)) -+ return -+ } -+ default: -+ t.setGoAwayReason(f) -+ close(t.goAway) -+ defer t.controlBuf.put(&incomingGoAway{}) // Defer as t.mu is currently held. -+ // Notify the clientconn about the GOAWAY before we set the state to -+ // draining, to allow the client to stop attempting to create streams -+ // before disallowing new streams on this connection. -+ if t.state != draining { -+ t.onClose(t.goAwayReason) -+ t.state = draining -+ } -+ } -+ // All streams with IDs greater than the GoAwayId -+ // and smaller than the previous GoAway ID should be killed. -+ upperLimit := t.prevGoAwayID -+ if upperLimit == 0 { // This is the first GoAway Frame. -+ upperLimit = math.MaxUint32 // Kill all streams after the GoAway ID. -+ } -+ -+ t.prevGoAwayID = id -+ if len(t.activeStreams) == 0 { -+ t.mu.Unlock() -+ t.Close(connectionErrorf(true, nil, "received goaway and there are no active streams")) -+ return -+ } -+ -+ streamsToClose := make([]*Stream, 0) -+ for streamID, stream := range t.activeStreams { -+ if streamID > id && streamID <= upperLimit { -+ // The stream was unprocessed by the server. -+ if streamID > id && streamID <= upperLimit { -+ atomic.StoreUint32(&stream.unprocessed, 1) -+ streamsToClose = append(streamsToClose, stream) -+ } -+ } -+ } -+ t.mu.Unlock() -+ // Called outside t.mu because closeStream can take controlBuf's mu, which -+ // could induce deadlock and is not allowed. -+ for _, stream := range streamsToClose { -+ t.closeStream(stream, errStreamDrain, false, http2.ErrCodeNo, statusGoAway, nil, false) -+ } -+} -+ -+// setGoAwayReason sets the value of t.goAwayReason based -+// on the GoAway frame received. -+// It expects a lock on transport's mutex to be held by -+// the caller. -+func (t *http2Client) setGoAwayReason(f *http2.GoAwayFrame) { -+ t.goAwayReason = GoAwayNoReason -+ switch f.ErrCode { -+ case http2.ErrCodeEnhanceYourCalm: -+ if string(f.DebugData()) == "too_many_pings" { -+ t.goAwayReason = GoAwayTooManyPings -+ } -+ } -+ if len(f.DebugData()) == 0 { -+ t.goAwayDebugMessage = fmt.Sprintf("code: %s", f.ErrCode) -+ } else { -+ t.goAwayDebugMessage = fmt.Sprintf("code: %s, debug data: %q", f.ErrCode, string(f.DebugData())) -+ } -+} -+ -+func (t *http2Client) GetGoAwayReason() (GoAwayReason, string) { -+ t.mu.Lock() -+ defer t.mu.Unlock() -+ return t.goAwayReason, t.goAwayDebugMessage -+} -+ -+func (t *http2Client) handleWindowUpdate(f *http2.WindowUpdateFrame) { -+ t.controlBuf.put(&incomingWindowUpdate{ -+ streamID: f.Header().StreamID, -+ increment: f.Increment, -+ }) -+} -+ -+// operateHeaders takes action on the decoded headers. -+func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { -+ s := t.getStream(frame) -+ if s == nil { -+ return -+ } -+ endStream := frame.StreamEnded() -+ atomic.StoreUint32(&s.bytesReceived, 1) -+ initialHeader := atomic.LoadUint32(&s.headerChanClosed) == 0 -+ -+ if !initialHeader && !endStream { -+ // As specified by gRPC over HTTP2, a HEADERS frame (and associated CONTINUATION frames) can only appear at the start or end of a stream. Therefore, second HEADERS frame must have EOS bit set. -+ st := status.New(codes.Internal, "a HEADERS frame cannot appear in the middle of a stream") -+ t.closeStream(s, st.Err(), true, http2.ErrCodeProtocol, st, nil, false) -+ return -+ } -+ -+ // frame.Truncated is set to true when framer detects that the current header -+ // list size hits MaxHeaderListSize limit. -+ if frame.Truncated { -+ se := status.New(codes.Internal, "peer header list size exceeded limit") -+ t.closeStream(s, se.Err(), true, http2.ErrCodeFrameSize, se, nil, endStream) -+ return -+ } -+ -+ var ( -+ // If a gRPC Response-Headers has already been received, then it means -+ // that the peer is speaking gRPC and we are in gRPC mode. -+ isGRPC = !initialHeader -+ mdata = make(map[string][]string) -+ contentTypeErr = "malformed header: missing HTTP content-type" -+ grpcMessage string -+ statusGen *status.Status -+ recvCompress string -+ httpStatusCode *int -+ httpStatusErr string -+ rawStatusCode = codes.Unknown -+ // headerError is set if an error is encountered while parsing the headers -+ headerError string -+ ) -+ -+ if initialHeader { -+ httpStatusErr = "malformed header: missing HTTP status" -+ } -+ -+ for _, hf := range frame.Fields { -+ switch hf.Name { -+ case "content-type": -+ if _, validContentType := grpcutil.ContentSubtype(hf.Value); !validContentType { -+ contentTypeErr = fmt.Sprintf("transport: received unexpected content-type %q", hf.Value) -+ break -+ } -+ contentTypeErr = "" -+ mdata[hf.Name] = append(mdata[hf.Name], hf.Value) -+ isGRPC = true -+ case "grpc-encoding": -+ recvCompress = hf.Value -+ case "grpc-status": -+ code, err := strconv.ParseInt(hf.Value, 10, 32) -+ if err != nil { -+ se := status.New(codes.Internal, fmt.Sprintf("transport: malformed grpc-status: %v", err)) -+ t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream) -+ return -+ } -+ rawStatusCode = codes.Code(uint32(code)) -+ case "grpc-message": -+ grpcMessage = decodeGrpcMessage(hf.Value) -+ case "grpc-status-details-bin": -+ var err error -+ statusGen, err = decodeGRPCStatusDetails(hf.Value) -+ if err != nil { -+ headerError = fmt.Sprintf("transport: malformed grpc-status-details-bin: %v", err) -+ } -+ case ":status": -+ if hf.Value == "200" { -+ httpStatusErr = "" -+ statusCode := 200 -+ httpStatusCode = &statusCode -+ break -+ } -+ -+ c, err := strconv.ParseInt(hf.Value, 10, 32) -+ if err != nil { -+ se := status.New(codes.Internal, fmt.Sprintf("transport: malformed http-status: %v", err)) -+ t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream) -+ return -+ } -+ statusCode := int(c) -+ httpStatusCode = &statusCode -+ -+ httpStatusErr = fmt.Sprintf( -+ "unexpected HTTP status code received from server: %d (%s)", -+ statusCode, -+ http.StatusText(statusCode), -+ ) -+ default: -+ if isReservedHeader(hf.Name) && !isWhitelistedHeader(hf.Name) { -+ break -+ } -+ v, err := decodeMetadataHeader(hf.Name, hf.Value) -+ if err != nil { -+ headerError = fmt.Sprintf("transport: malformed %s: %v", hf.Name, err) -+ logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err) -+ break -+ } -+ mdata[hf.Name] = append(mdata[hf.Name], v) -+ } -+ } -+ -+ if !isGRPC || httpStatusErr != "" { -+ var code = codes.Internal // when header does not include HTTP status, return INTERNAL -+ -+ if httpStatusCode != nil { -+ var ok bool -+ code, ok = HTTPStatusConvTab[*httpStatusCode] -+ if !ok { -+ code = codes.Unknown -+ } -+ } -+ var errs []string -+ if httpStatusErr != "" { -+ errs = append(errs, httpStatusErr) -+ } -+ if contentTypeErr != "" { -+ errs = append(errs, contentTypeErr) -+ } -+ // Verify the HTTP response is a 200. -+ se := status.New(code, strings.Join(errs, "; ")) -+ t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream) -+ return -+ } -+ -+ if headerError != "" { -+ se := status.New(codes.Internal, headerError) -+ t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream) -+ return -+ } -+ -+ isHeader := false -+ -+ // If headerChan hasn't been closed yet -+ if atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) { -+ s.headerValid = true -+ if !endStream { -+ // HEADERS frame block carries a Response-Headers. -+ isHeader = true -+ // These values can be set without any synchronization because -+ // stream goroutine will read it only after seeing a closed -+ // headerChan which we'll close after setting this. -+ s.recvCompress = recvCompress -+ if len(mdata) > 0 { -+ s.header = mdata -+ } -+ } else { -+ // HEADERS frame block carries a Trailers-Only. -+ s.noHeaders = true -+ } -+ close(s.headerChan) -+ } -+ -+ for _, sh := range t.statsHandlers { -+ if isHeader { -+ inHeader := &stats.InHeader{ -+ Client: true, -+ WireLength: int(frame.Header().Length), -+ Header: metadata.MD(mdata).Copy(), -+ Compression: s.recvCompress, -+ } -+ sh.HandleRPC(s.ctx, inHeader) -+ } else { -+ inTrailer := &stats.InTrailer{ -+ Client: true, -+ WireLength: int(frame.Header().Length), -+ Trailer: metadata.MD(mdata).Copy(), -+ } -+ sh.HandleRPC(s.ctx, inTrailer) -+ } -+ } -+ -+ if !endStream { -+ return -+ } -+ -+ if statusGen == nil { -+ statusGen = status.New(rawStatusCode, grpcMessage) -+ } -+ -+ // if client received END_STREAM from server while stream was still active, send RST_STREAM -+ rst := s.getState() == streamActive -+ t.closeStream(s, io.EOF, rst, http2.ErrCodeNo, statusGen, mdata, true) -+} -+ -+// readServerPreface reads and handles the initial settings frame from the -+// server. -+func (t *http2Client) readServerPreface() error { -+ frame, err := t.framer.fr.ReadFrame() -+ if err != nil { -+ return connectionErrorf(true, err, "error reading server preface: %v", err) -+ } -+ sf, ok := frame.(*http2.SettingsFrame) -+ if !ok { -+ return connectionErrorf(true, nil, "initial http2 frame from server is not a settings frame: %T", frame) -+ } -+ t.handleSettings(sf, true) -+ return nil -+} -+ -+// reader verifies the server preface and reads all subsequent data from -+// network connection. If the server preface is not read successfully, an -+// error is pushed to errCh; otherwise errCh is closed with no error. -+func (t *http2Client) reader(errCh chan<- error) { -+ defer close(t.readerDone) -+ -+ if err := t.readServerPreface(); err != nil { -+ errCh <- err -+ return -+ } -+ close(errCh) -+ if t.keepaliveEnabled { -+ atomic.StoreInt64(&t.lastRead, time.Now().UnixNano()) -+ } -+ -+ // loop to keep reading incoming messages on this transport. -+ for { -+ t.controlBuf.throttle() -+ frame, err := t.framer.fr.ReadFrame() -+ if t.keepaliveEnabled { -+ atomic.StoreInt64(&t.lastRead, time.Now().UnixNano()) -+ } -+ if err != nil { -+ // Abort an active stream if the http2.Framer returns a -+ // http2.StreamError. This can happen only if the server's response -+ // is malformed http2. -+ if se, ok := err.(http2.StreamError); ok { -+ t.mu.Lock() -+ s := t.activeStreams[se.StreamID] -+ t.mu.Unlock() -+ if s != nil { -+ // use error detail to provide better err message -+ code := http2ErrConvTab[se.Code] -+ errorDetail := t.framer.fr.ErrorDetail() -+ var msg string -+ if errorDetail != nil { -+ msg = errorDetail.Error() -+ } else { -+ msg = "received invalid frame" -+ } -+ t.closeStream(s, status.Error(code, msg), true, http2.ErrCodeProtocol, status.New(code, msg), nil, false) -+ } -+ continue -+ } else { -+ // Transport error. -+ t.Close(connectionErrorf(true, err, "error reading from server: %v", err)) -+ return -+ } -+ } -+ switch frame := frame.(type) { -+ case *http2.MetaHeadersFrame: -+ t.operateHeaders(frame) -+ case *http2.DataFrame: -+ t.handleData(frame) -+ case *http2.RSTStreamFrame: -+ t.handleRSTStream(frame) -+ case *http2.SettingsFrame: -+ t.handleSettings(frame, false) -+ case *http2.PingFrame: -+ t.handlePing(frame) -+ case *http2.GoAwayFrame: -+ t.handleGoAway(frame) -+ case *http2.WindowUpdateFrame: -+ t.handleWindowUpdate(frame) -+ default: -+ if logger.V(logLevel) { -+ logger.Errorf("transport: http2Client.reader got unhandled frame type %v.", frame) -+ } -+ } -+ } -+} -+ -+func minTime(a, b time.Duration) time.Duration { -+ if a < b { -+ return a -+ } -+ return b -+} -+ -+// keepalive running in a separate goroutine makes sure the connection is alive by sending pings. -+func (t *http2Client) keepalive() { -+ p := &ping{data: [8]byte{}} -+ // True iff a ping has been sent, and no data has been received since then. -+ outstandingPing := false -+ // Amount of time remaining before which we should receive an ACK for the -+ // last sent ping. -+ timeoutLeft := time.Duration(0) -+ // Records the last value of t.lastRead before we go block on the timer. -+ // This is required to check for read activity since then. -+ prevNano := time.Now().UnixNano() -+ timer := time.NewTimer(t.kp.Time) -+ for { -+ select { -+ case <-timer.C: -+ lastRead := atomic.LoadInt64(&t.lastRead) -+ if lastRead > prevNano { -+ // There has been read activity since the last time we were here. -+ outstandingPing = false -+ // Next timer should fire at kp.Time seconds from lastRead time. -+ timer.Reset(time.Duration(lastRead) + t.kp.Time - time.Duration(time.Now().UnixNano())) -+ prevNano = lastRead -+ continue -+ } -+ if outstandingPing && timeoutLeft <= 0 { -+ t.Close(connectionErrorf(true, nil, "keepalive ping failed to receive ACK within timeout")) -+ return -+ } -+ t.mu.Lock() -+ if t.state == closing { -+ // If the transport is closing, we should exit from the -+ // keepalive goroutine here. If not, we could have a race -+ // between the call to Signal() from Close() and the call to -+ // Wait() here, whereby the keepalive goroutine ends up -+ // blocking on the condition variable which will never be -+ // signalled again. -+ t.mu.Unlock() -+ return -+ } -+ if len(t.activeStreams) < 1 && !t.kp.PermitWithoutStream { -+ // If a ping was sent out previously (because there were active -+ // streams at that point) which wasn't acked and its timeout -+ // hadn't fired, but we got here and are about to go dormant, -+ // we should make sure that we unconditionally send a ping once -+ // we awaken. -+ outstandingPing = false -+ t.kpDormant = true -+ t.kpDormancyCond.Wait() -+ } -+ t.kpDormant = false -+ t.mu.Unlock() -+ -+ // We get here either because we were dormant and a new stream was -+ // created which unblocked the Wait() call, or because the -+ // keepalive timer expired. In both cases, we need to send a ping. -+ if !outstandingPing { -+ if channelz.IsOn() { -+ atomic.AddInt64(&t.czData.kpCount, 1) -+ } -+ t.controlBuf.put(p) -+ timeoutLeft = t.kp.Timeout -+ outstandingPing = true -+ } -+ // The amount of time to sleep here is the minimum of kp.Time and -+ // timeoutLeft. This will ensure that we wait only for kp.Time -+ // before sending out the next ping (for cases where the ping is -+ // acked). -+ sleepDuration := minTime(t.kp.Time, timeoutLeft) -+ timeoutLeft -= sleepDuration -+ timer.Reset(sleepDuration) -+ case <-t.ctx.Done(): -+ if !timer.Stop() { -+ <-timer.C -+ } -+ return -+ } -+ } -+} -+ -+func (t *http2Client) Error() <-chan struct{} { -+ return t.ctx.Done() -+} -+ -+func (t *http2Client) GoAway() <-chan struct{} { -+ return t.goAway -+} -+ -+func (t *http2Client) ChannelzMetric() *channelz.SocketInternalMetric { -+ s := channelz.SocketInternalMetric{ -+ StreamsStarted: atomic.LoadInt64(&t.czData.streamsStarted), -+ StreamsSucceeded: atomic.LoadInt64(&t.czData.streamsSucceeded), -+ StreamsFailed: atomic.LoadInt64(&t.czData.streamsFailed), -+ MessagesSent: atomic.LoadInt64(&t.czData.msgSent), -+ MessagesReceived: atomic.LoadInt64(&t.czData.msgRecv), -+ KeepAlivesSent: atomic.LoadInt64(&t.czData.kpCount), -+ LastLocalStreamCreatedTimestamp: time.Unix(0, atomic.LoadInt64(&t.czData.lastStreamCreatedTime)), -+ LastMessageSentTimestamp: time.Unix(0, atomic.LoadInt64(&t.czData.lastMsgSentTime)), -+ LastMessageReceivedTimestamp: time.Unix(0, atomic.LoadInt64(&t.czData.lastMsgRecvTime)), -+ LocalFlowControlWindow: int64(t.fc.getSize()), -+ SocketOptions: channelz.GetSocketOption(t.conn), -+ LocalAddr: t.localAddr, -+ RemoteAddr: t.remoteAddr, -+ // RemoteName : -+ } -+ if au, ok := t.authInfo.(credentials.ChannelzSecurityInfo); ok { -+ s.Security = au.GetSecurityValue() -+ } -+ s.RemoteFlowControlWindow = t.getOutFlowWindow() -+ return &s -+} -+ -+func (t *http2Client) RemoteAddr() net.Addr { return t.remoteAddr } -+ -+func (t *http2Client) IncrMsgSent() { -+ atomic.AddInt64(&t.czData.msgSent, 1) -+ atomic.StoreInt64(&t.czData.lastMsgSentTime, time.Now().UnixNano()) -+} -+ -+func (t *http2Client) IncrMsgRecv() { -+ atomic.AddInt64(&t.czData.msgRecv, 1) -+ atomic.StoreInt64(&t.czData.lastMsgRecvTime, time.Now().UnixNano()) -+} -+ -+func (t *http2Client) getOutFlowWindow() int64 { -+ resp := make(chan uint32, 1) -+ timer := time.NewTimer(time.Second) -+ defer timer.Stop() -+ t.controlBuf.put(&outFlowControlSizeRequest{resp}) -+ select { -+ case sz := <-resp: -+ return int64(sz) -+ case <-t.ctxDone: -+ return -1 -+ case <-timer.C: -+ return -2 -+ } -+} -+ -+func (t *http2Client) stateForTesting() transportState { -+ t.mu.Lock() -+ defer t.mu.Unlock() -+ return t.state -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go -new file mode 100755 -index 0000000..0bc7a7d ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go -@@ -0,0 +1,1464 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "bytes" -+ "context" -+ "errors" -+ "fmt" -+ "io" -+ "math" -+ "net" -+ "net/http" -+ "strconv" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "github.com/golang/protobuf/proto" -+ "golang.org/x/net/http2" -+ "golang.org/x/net/http2/hpack" -+ "google.golang.org/grpc/internal/grpclog" -+ "google.golang.org/grpc/internal/grpcutil" -+ "google.golang.org/grpc/internal/pretty" -+ "google.golang.org/grpc/internal/syscall" -+ -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/internal/channelz" -+ "google.golang.org/grpc/internal/grpcrand" -+ "google.golang.org/grpc/internal/grpcsync" -+ "google.golang.org/grpc/keepalive" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/peer" -+ "google.golang.org/grpc/stats" -+ "google.golang.org/grpc/status" -+ "google.golang.org/grpc/tap" -+) -+ -+var ( -+ // ErrIllegalHeaderWrite indicates that setting header is illegal because of -+ // the stream's state. -+ ErrIllegalHeaderWrite = status.Error(codes.Internal, "transport: SendHeader called multiple times") -+ // ErrHeaderListSizeLimitViolation indicates that the header list size is larger -+ // than the limit set by peer. -+ ErrHeaderListSizeLimitViolation = status.Error(codes.Internal, "transport: trying to send header list size larger than the limit set by peer") -+) -+ -+// serverConnectionCounter counts the number of connections a server has seen -+// (equal to the number of http2Servers created). Must be accessed atomically. -+var serverConnectionCounter uint64 -+ -+// http2Server implements the ServerTransport interface with HTTP2. -+type http2Server struct { -+ lastRead int64 // Keep this field 64-bit aligned. Accessed atomically. -+ ctx context.Context -+ done chan struct{} -+ conn net.Conn -+ loopy *loopyWriter -+ readerDone chan struct{} // sync point to enable testing. -+ writerDone chan struct{} // sync point to enable testing. -+ remoteAddr net.Addr -+ localAddr net.Addr -+ authInfo credentials.AuthInfo // auth info about the connection -+ inTapHandle tap.ServerInHandle -+ framer *framer -+ // The max number of concurrent streams. -+ maxStreams uint32 -+ // controlBuf delivers all the control related tasks (e.g., window -+ // updates, reset streams, and various settings) to the controller. -+ controlBuf *controlBuffer -+ fc *trInFlow -+ stats []stats.Handler -+ // Keepalive and max-age parameters for the server. -+ kp keepalive.ServerParameters -+ // Keepalive enforcement policy. -+ kep keepalive.EnforcementPolicy -+ // The time instance last ping was received. -+ lastPingAt time.Time -+ // Number of times the client has violated keepalive ping policy so far. -+ pingStrikes uint8 -+ // Flag to signify that number of ping strikes should be reset to 0. -+ // This is set whenever data or header frames are sent. -+ // 1 means yes. -+ resetPingStrikes uint32 // Accessed atomically. -+ initialWindowSize int32 -+ bdpEst *bdpEstimator -+ maxSendHeaderListSize *uint32 -+ -+ mu sync.Mutex // guard the following -+ -+ // drainEvent is initialized when Drain() is called the first time. After -+ // which the server writes out the first GoAway(with ID 2^31-1) frame. Then -+ // an independent goroutine will be launched to later send the second -+ // GoAway. During this time we don't want to write another first GoAway(with -+ // ID 2^31 -1) frame. Thus call to Drain() will be a no-op if drainEvent is -+ // already initialized since draining is already underway. -+ drainEvent *grpcsync.Event -+ state transportState -+ activeStreams map[uint32]*Stream -+ // idle is the time instant when the connection went idle. -+ // This is either the beginning of the connection or when the number of -+ // RPCs go down to 0. -+ // When the connection is busy, this value is set to 0. -+ idle time.Time -+ -+ // Fields below are for channelz metric collection. -+ channelzID *channelz.Identifier -+ czData *channelzData -+ bufferPool *bufferPool -+ -+ connectionID uint64 -+ -+ // maxStreamMu guards the maximum stream ID -+ // This lock may not be taken if mu is already held. -+ maxStreamMu sync.Mutex -+ maxStreamID uint32 // max stream ID ever seen -+ -+ logger *grpclog.PrefixLogger -+} -+ -+// NewServerTransport creates a http2 transport with conn and configuration -+// options from config. -+// -+// It returns a non-nil transport and a nil error on success. On failure, it -+// returns a nil transport and a non-nil error. For a special case where the -+// underlying conn gets closed before the client preface could be read, it -+// returns a nil transport and a nil error. -+func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, err error) { -+ var authInfo credentials.AuthInfo -+ rawConn := conn -+ if config.Credentials != nil { -+ var err error -+ conn, authInfo, err = config.Credentials.ServerHandshake(rawConn) -+ if err != nil { -+ // ErrConnDispatched means that the connection was dispatched away -+ // from gRPC; those connections should be left open. io.EOF means -+ // the connection was closed before handshaking completed, which can -+ // happen naturally from probers. Return these errors directly. -+ if err == credentials.ErrConnDispatched || err == io.EOF { -+ return nil, err -+ } -+ return nil, connectionErrorf(false, err, "ServerHandshake(%q) failed: %v", rawConn.RemoteAddr(), err) -+ } -+ } -+ writeBufSize := config.WriteBufferSize -+ readBufSize := config.ReadBufferSize -+ maxHeaderListSize := defaultServerMaxHeaderListSize -+ if config.MaxHeaderListSize != nil { -+ maxHeaderListSize = *config.MaxHeaderListSize -+ } -+ framer := newFramer(conn, writeBufSize, readBufSize, maxHeaderListSize) -+ // Send initial settings as connection preface to client. -+ isettings := []http2.Setting{{ -+ ID: http2.SettingMaxFrameSize, -+ Val: http2MaxFrameLen, -+ }} -+ if config.MaxStreams != math.MaxUint32 { -+ isettings = append(isettings, http2.Setting{ -+ ID: http2.SettingMaxConcurrentStreams, -+ Val: config.MaxStreams, -+ }) -+ } -+ dynamicWindow := true -+ iwz := int32(initialWindowSize) -+ if config.InitialWindowSize >= defaultWindowSize { -+ iwz = config.InitialWindowSize -+ dynamicWindow = false -+ } -+ icwz := int32(initialWindowSize) -+ if config.InitialConnWindowSize >= defaultWindowSize { -+ icwz = config.InitialConnWindowSize -+ dynamicWindow = false -+ } -+ if iwz != defaultWindowSize { -+ isettings = append(isettings, http2.Setting{ -+ ID: http2.SettingInitialWindowSize, -+ Val: uint32(iwz)}) -+ } -+ if config.MaxHeaderListSize != nil { -+ isettings = append(isettings, http2.Setting{ -+ ID: http2.SettingMaxHeaderListSize, -+ Val: *config.MaxHeaderListSize, -+ }) -+ } -+ if config.HeaderTableSize != nil { -+ isettings = append(isettings, http2.Setting{ -+ ID: http2.SettingHeaderTableSize, -+ Val: *config.HeaderTableSize, -+ }) -+ } -+ if err := framer.fr.WriteSettings(isettings...); err != nil { -+ return nil, connectionErrorf(false, err, "transport: %v", err) -+ } -+ // Adjust the connection flow control window if needed. -+ if delta := uint32(icwz - defaultWindowSize); delta > 0 { -+ if err := framer.fr.WriteWindowUpdate(0, delta); err != nil { -+ return nil, connectionErrorf(false, err, "transport: %v", err) -+ } -+ } -+ kp := config.KeepaliveParams -+ if kp.MaxConnectionIdle == 0 { -+ kp.MaxConnectionIdle = defaultMaxConnectionIdle -+ } -+ if kp.MaxConnectionAge == 0 { -+ kp.MaxConnectionAge = defaultMaxConnectionAge -+ } -+ // Add a jitter to MaxConnectionAge. -+ kp.MaxConnectionAge += getJitter(kp.MaxConnectionAge) -+ if kp.MaxConnectionAgeGrace == 0 { -+ kp.MaxConnectionAgeGrace = defaultMaxConnectionAgeGrace -+ } -+ if kp.Time == 0 { -+ kp.Time = defaultServerKeepaliveTime -+ } -+ if kp.Timeout == 0 { -+ kp.Timeout = defaultServerKeepaliveTimeout -+ } -+ if kp.Time != infinity { -+ if err = syscall.SetTCPUserTimeout(rawConn, kp.Timeout); err != nil { -+ return nil, connectionErrorf(false, err, "transport: failed to set TCP_USER_TIMEOUT: %v", err) -+ } -+ } -+ kep := config.KeepalivePolicy -+ if kep.MinTime == 0 { -+ kep.MinTime = defaultKeepalivePolicyMinTime -+ } -+ -+ done := make(chan struct{}) -+ t := &http2Server{ -+ ctx: setConnection(context.Background(), rawConn), -+ done: done, -+ conn: conn, -+ remoteAddr: conn.RemoteAddr(), -+ localAddr: conn.LocalAddr(), -+ authInfo: authInfo, -+ framer: framer, -+ readerDone: make(chan struct{}), -+ writerDone: make(chan struct{}), -+ maxStreams: config.MaxStreams, -+ inTapHandle: config.InTapHandle, -+ fc: &trInFlow{limit: uint32(icwz)}, -+ state: reachable, -+ activeStreams: make(map[uint32]*Stream), -+ stats: config.StatsHandlers, -+ kp: kp, -+ idle: time.Now(), -+ kep: kep, -+ initialWindowSize: iwz, -+ czData: new(channelzData), -+ bufferPool: newBufferPool(), -+ } -+ t.logger = prefixLoggerForServerTransport(t) -+ // Add peer information to the http2server context. -+ t.ctx = peer.NewContext(t.ctx, t.getPeer()) -+ -+ t.controlBuf = newControlBuffer(t.done) -+ if dynamicWindow { -+ t.bdpEst = &bdpEstimator{ -+ bdp: initialWindowSize, -+ updateFlowControl: t.updateFlowControl, -+ } -+ } -+ for _, sh := range t.stats { -+ t.ctx = sh.TagConn(t.ctx, &stats.ConnTagInfo{ -+ RemoteAddr: t.remoteAddr, -+ LocalAddr: t.localAddr, -+ }) -+ connBegin := &stats.ConnBegin{} -+ sh.HandleConn(t.ctx, connBegin) -+ } -+ t.channelzID, err = channelz.RegisterNormalSocket(t, config.ChannelzParentID, fmt.Sprintf("%s -> %s", t.remoteAddr, t.localAddr)) -+ if err != nil { -+ return nil, err -+ } -+ -+ t.connectionID = atomic.AddUint64(&serverConnectionCounter, 1) -+ t.framer.writer.Flush() -+ -+ defer func() { -+ if err != nil { -+ t.Close(err) -+ } -+ }() -+ -+ // Check the validity of client preface. -+ preface := make([]byte, len(clientPreface)) -+ if _, err := io.ReadFull(t.conn, preface); err != nil { -+ // In deployments where a gRPC server runs behind a cloud load balancer -+ // which performs regular TCP level health checks, the connection is -+ // closed immediately by the latter. Returning io.EOF here allows the -+ // grpc server implementation to recognize this scenario and suppress -+ // logging to reduce spam. -+ if err == io.EOF { -+ return nil, io.EOF -+ } -+ return nil, connectionErrorf(false, err, "transport: http2Server.HandleStreams failed to receive the preface from client: %v", err) -+ } -+ if !bytes.Equal(preface, clientPreface) { -+ return nil, connectionErrorf(false, nil, "transport: http2Server.HandleStreams received bogus greeting from client: %q", preface) -+ } -+ -+ frame, err := t.framer.fr.ReadFrame() -+ if err == io.EOF || err == io.ErrUnexpectedEOF { -+ return nil, err -+ } -+ if err != nil { -+ return nil, connectionErrorf(false, err, "transport: http2Server.HandleStreams failed to read initial settings frame: %v", err) -+ } -+ atomic.StoreInt64(&t.lastRead, time.Now().UnixNano()) -+ sf, ok := frame.(*http2.SettingsFrame) -+ if !ok { -+ return nil, connectionErrorf(false, nil, "transport: http2Server.HandleStreams saw invalid preface type %T from client", frame) -+ } -+ t.handleSettings(sf) -+ -+ go func() { -+ t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger) -+ t.loopy.ssGoAwayHandler = t.outgoingGoAwayHandler -+ t.loopy.run() -+ close(t.writerDone) -+ }() -+ go t.keepalive() -+ return t, nil -+} -+ -+// operateHeaders takes action on the decoded headers. Returns an error if fatal -+// error encountered and transport needs to close, otherwise returns nil. -+func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func(*Stream), traceCtx func(context.Context, string) context.Context) error { -+ // Acquire max stream ID lock for entire duration -+ t.maxStreamMu.Lock() -+ defer t.maxStreamMu.Unlock() -+ -+ streamID := frame.Header().StreamID -+ -+ // frame.Truncated is set to true when framer detects that the current header -+ // list size hits MaxHeaderListSize limit. -+ if frame.Truncated { -+ t.controlBuf.put(&cleanupStream{ -+ streamID: streamID, -+ rst: true, -+ rstCode: http2.ErrCodeFrameSize, -+ onWrite: func() {}, -+ }) -+ return nil -+ } -+ -+ if streamID%2 != 1 || streamID <= t.maxStreamID { -+ // illegal gRPC stream id. -+ return fmt.Errorf("received an illegal stream id: %v. headers frame: %+v", streamID, frame) -+ } -+ t.maxStreamID = streamID -+ -+ buf := newRecvBuffer() -+ s := &Stream{ -+ id: streamID, -+ st: t, -+ buf: buf, -+ fc: &inFlow{limit: uint32(t.initialWindowSize)}, -+ } -+ var ( -+ // if false, content-type was missing or invalid -+ isGRPC = false -+ contentType = "" -+ mdata = make(metadata.MD, len(frame.Fields)) -+ httpMethod string -+ // these are set if an error is encountered while parsing the headers -+ protocolError bool -+ headerError *status.Status -+ -+ timeoutSet bool -+ timeout time.Duration -+ ) -+ -+ for _, hf := range frame.Fields { -+ switch hf.Name { -+ case "content-type": -+ contentSubtype, validContentType := grpcutil.ContentSubtype(hf.Value) -+ if !validContentType { -+ contentType = hf.Value -+ break -+ } -+ mdata[hf.Name] = append(mdata[hf.Name], hf.Value) -+ s.contentSubtype = contentSubtype -+ isGRPC = true -+ -+ case "grpc-accept-encoding": -+ mdata[hf.Name] = append(mdata[hf.Name], hf.Value) -+ if hf.Value == "" { -+ continue -+ } -+ compressors := hf.Value -+ if s.clientAdvertisedCompressors != "" { -+ compressors = s.clientAdvertisedCompressors + "," + compressors -+ } -+ s.clientAdvertisedCompressors = compressors -+ case "grpc-encoding": -+ s.recvCompress = hf.Value -+ case ":method": -+ httpMethod = hf.Value -+ case ":path": -+ s.method = hf.Value -+ case "grpc-timeout": -+ timeoutSet = true -+ var err error -+ if timeout, err = decodeTimeout(hf.Value); err != nil { -+ headerError = status.Newf(codes.Internal, "malformed grpc-timeout: %v", err) -+ } -+ // "Transports must consider requests containing the Connection header -+ // as malformed." - A41 -+ case "connection": -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Received a HEADERS frame with a :connection header which makes the request malformed, as per the HTTP/2 spec") -+ } -+ protocolError = true -+ default: -+ if isReservedHeader(hf.Name) && !isWhitelistedHeader(hf.Name) { -+ break -+ } -+ v, err := decodeMetadataHeader(hf.Name, hf.Value) -+ if err != nil { -+ headerError = status.Newf(codes.Internal, "malformed binary metadata %q in header %q: %v", hf.Value, hf.Name, err) -+ t.logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err) -+ break -+ } -+ mdata[hf.Name] = append(mdata[hf.Name], v) -+ } -+ } -+ -+ // "If multiple Host headers or multiple :authority headers are present, the -+ // request must be rejected with an HTTP status code 400 as required by Host -+ // validation in RFC 7230 §5.4, gRPC status code INTERNAL, or RST_STREAM -+ // with HTTP/2 error code PROTOCOL_ERROR." - A41. Since this is a HTTP/2 -+ // error, this takes precedence over a client not speaking gRPC. -+ if len(mdata[":authority"]) > 1 || len(mdata["host"]) > 1 { -+ errMsg := fmt.Sprintf("num values of :authority: %v, num values of host: %v, both must only have 1 value as per HTTP/2 spec", len(mdata[":authority"]), len(mdata["host"])) -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Aborting the stream early: %v", errMsg) -+ } -+ t.controlBuf.put(&earlyAbortStream{ -+ httpStatus: http.StatusBadRequest, -+ streamID: streamID, -+ contentSubtype: s.contentSubtype, -+ status: status.New(codes.Internal, errMsg), -+ rst: !frame.StreamEnded(), -+ }) -+ return nil -+ } -+ -+ if protocolError { -+ t.controlBuf.put(&cleanupStream{ -+ streamID: streamID, -+ rst: true, -+ rstCode: http2.ErrCodeProtocol, -+ onWrite: func() {}, -+ }) -+ return nil -+ } -+ if !isGRPC { -+ t.controlBuf.put(&earlyAbortStream{ -+ httpStatus: http.StatusUnsupportedMediaType, -+ streamID: streamID, -+ contentSubtype: s.contentSubtype, -+ status: status.Newf(codes.InvalidArgument, "invalid gRPC request content-type %q", contentType), -+ rst: !frame.StreamEnded(), -+ }) -+ return nil -+ } -+ if headerError != nil { -+ t.controlBuf.put(&earlyAbortStream{ -+ httpStatus: http.StatusBadRequest, -+ streamID: streamID, -+ contentSubtype: s.contentSubtype, -+ status: headerError, -+ rst: !frame.StreamEnded(), -+ }) -+ return nil -+ } -+ -+ // "If :authority is missing, Host must be renamed to :authority." - A41 -+ if len(mdata[":authority"]) == 0 { -+ // No-op if host isn't present, no eventual :authority header is a valid -+ // RPC. -+ if host, ok := mdata["host"]; ok { -+ mdata[":authority"] = host -+ delete(mdata, "host") -+ } -+ } else { -+ // "If :authority is present, Host must be discarded" - A41 -+ delete(mdata, "host") -+ } -+ -+ if frame.StreamEnded() { -+ // s is just created by the caller. No lock needed. -+ s.state = streamReadDone -+ } -+ if timeoutSet { -+ s.ctx, s.cancel = context.WithTimeout(t.ctx, timeout) -+ } else { -+ s.ctx, s.cancel = context.WithCancel(t.ctx) -+ } -+ -+ // Attach the received metadata to the context. -+ if len(mdata) > 0 { -+ s.ctx = metadata.NewIncomingContext(s.ctx, mdata) -+ if statsTags := mdata["grpc-tags-bin"]; len(statsTags) > 0 { -+ s.ctx = stats.SetIncomingTags(s.ctx, []byte(statsTags[len(statsTags)-1])) -+ } -+ if statsTrace := mdata["grpc-trace-bin"]; len(statsTrace) > 0 { -+ s.ctx = stats.SetIncomingTrace(s.ctx, []byte(statsTrace[len(statsTrace)-1])) -+ } -+ } -+ t.mu.Lock() -+ if t.state != reachable { -+ t.mu.Unlock() -+ s.cancel() -+ return nil -+ } -+ if uint32(len(t.activeStreams)) >= t.maxStreams { -+ t.mu.Unlock() -+ t.controlBuf.put(&cleanupStream{ -+ streamID: streamID, -+ rst: true, -+ rstCode: http2.ErrCodeRefusedStream, -+ onWrite: func() {}, -+ }) -+ s.cancel() -+ return nil -+ } -+ if httpMethod != http.MethodPost { -+ t.mu.Unlock() -+ errMsg := fmt.Sprintf("Received a HEADERS frame with :method %q which should be POST", httpMethod) -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Aborting the stream early: %v", errMsg) -+ } -+ t.controlBuf.put(&earlyAbortStream{ -+ httpStatus: 405, -+ streamID: streamID, -+ contentSubtype: s.contentSubtype, -+ status: status.New(codes.Internal, errMsg), -+ rst: !frame.StreamEnded(), -+ }) -+ s.cancel() -+ return nil -+ } -+ if t.inTapHandle != nil { -+ var err error -+ if s.ctx, err = t.inTapHandle(s.ctx, &tap.Info{FullMethodName: s.method}); err != nil { -+ t.mu.Unlock() -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Aborting the stream early due to InTapHandle failure: %v", err) -+ } -+ stat, ok := status.FromError(err) -+ if !ok { -+ stat = status.New(codes.PermissionDenied, err.Error()) -+ } -+ t.controlBuf.put(&earlyAbortStream{ -+ httpStatus: 200, -+ streamID: s.id, -+ contentSubtype: s.contentSubtype, -+ status: stat, -+ rst: !frame.StreamEnded(), -+ }) -+ return nil -+ } -+ } -+ t.activeStreams[streamID] = s -+ if len(t.activeStreams) == 1 { -+ t.idle = time.Time{} -+ } -+ t.mu.Unlock() -+ if channelz.IsOn() { -+ atomic.AddInt64(&t.czData.streamsStarted, 1) -+ atomic.StoreInt64(&t.czData.lastStreamCreatedTime, time.Now().UnixNano()) -+ } -+ s.requestRead = func(n int) { -+ t.adjustWindow(s, uint32(n)) -+ } -+ s.ctx = traceCtx(s.ctx, s.method) -+ for _, sh := range t.stats { -+ s.ctx = sh.TagRPC(s.ctx, &stats.RPCTagInfo{FullMethodName: s.method}) -+ inHeader := &stats.InHeader{ -+ FullMethod: s.method, -+ RemoteAddr: t.remoteAddr, -+ LocalAddr: t.localAddr, -+ Compression: s.recvCompress, -+ WireLength: int(frame.Header().Length), -+ Header: mdata.Copy(), -+ } -+ sh.HandleRPC(s.ctx, inHeader) -+ } -+ s.ctxDone = s.ctx.Done() -+ s.wq = newWriteQuota(defaultWriteQuota, s.ctxDone) -+ s.trReader = &transportReader{ -+ reader: &recvBufferReader{ -+ ctx: s.ctx, -+ ctxDone: s.ctxDone, -+ recv: s.buf, -+ freeBuffer: t.bufferPool.put, -+ }, -+ windowHandler: func(n int) { -+ t.updateWindow(s, uint32(n)) -+ }, -+ } -+ // Register the stream with loopy. -+ t.controlBuf.put(®isterStream{ -+ streamID: s.id, -+ wq: s.wq, -+ }) -+ handle(s) -+ return nil -+} -+ -+// HandleStreams receives incoming streams using the given handler. This is -+// typically run in a separate goroutine. -+// traceCtx attaches trace to ctx and returns the new context. -+func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context.Context, string) context.Context) { -+ defer close(t.readerDone) -+ for { -+ t.controlBuf.throttle() -+ frame, err := t.framer.fr.ReadFrame() -+ atomic.StoreInt64(&t.lastRead, time.Now().UnixNano()) -+ if err != nil { -+ if se, ok := err.(http2.StreamError); ok { -+ if t.logger.V(logLevel) { -+ t.logger.Warningf("Encountered http2.StreamError: %v", se) -+ } -+ t.mu.Lock() -+ s := t.activeStreams[se.StreamID] -+ t.mu.Unlock() -+ if s != nil { -+ t.closeStream(s, true, se.Code, false) -+ } else { -+ t.controlBuf.put(&cleanupStream{ -+ streamID: se.StreamID, -+ rst: true, -+ rstCode: se.Code, -+ onWrite: func() {}, -+ }) -+ } -+ continue -+ } -+ if err == io.EOF || err == io.ErrUnexpectedEOF { -+ t.Close(err) -+ return -+ } -+ t.Close(err) -+ return -+ } -+ switch frame := frame.(type) { -+ case *http2.MetaHeadersFrame: -+ if err := t.operateHeaders(frame, handle, traceCtx); err != nil { -+ t.Close(err) -+ break -+ } -+ case *http2.DataFrame: -+ t.handleData(frame) -+ case *http2.RSTStreamFrame: -+ t.handleRSTStream(frame) -+ case *http2.SettingsFrame: -+ t.handleSettings(frame) -+ case *http2.PingFrame: -+ t.handlePing(frame) -+ case *http2.WindowUpdateFrame: -+ t.handleWindowUpdate(frame) -+ case *http2.GoAwayFrame: -+ // TODO: Handle GoAway from the client appropriately. -+ default: -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Received unsupported frame type %T", frame) -+ } -+ } -+ } -+} -+ -+func (t *http2Server) getStream(f http2.Frame) (*Stream, bool) { -+ t.mu.Lock() -+ defer t.mu.Unlock() -+ if t.activeStreams == nil { -+ // The transport is closing. -+ return nil, false -+ } -+ s, ok := t.activeStreams[f.Header().StreamID] -+ if !ok { -+ // The stream is already done. -+ return nil, false -+ } -+ return s, true -+} -+ -+// adjustWindow sends out extra window update over the initial window size -+// of stream if the application is requesting data larger in size than -+// the window. -+func (t *http2Server) adjustWindow(s *Stream, n uint32) { -+ if w := s.fc.maybeAdjust(n); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w}) -+ } -+ -+} -+ -+// updateWindow adjusts the inbound quota for the stream and the transport. -+// Window updates will deliver to the controller for sending when -+// the cumulative quota exceeds the corresponding threshold. -+func (t *http2Server) updateWindow(s *Stream, n uint32) { -+ if w := s.fc.onRead(n); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, -+ increment: w, -+ }) -+ } -+} -+ -+// updateFlowControl updates the incoming flow control windows -+// for the transport and the stream based on the current bdp -+// estimation. -+func (t *http2Server) updateFlowControl(n uint32) { -+ t.mu.Lock() -+ for _, s := range t.activeStreams { -+ s.fc.newLimit(n) -+ } -+ t.initialWindowSize = int32(n) -+ t.mu.Unlock() -+ t.controlBuf.put(&outgoingWindowUpdate{ -+ streamID: 0, -+ increment: t.fc.newLimit(n), -+ }) -+ t.controlBuf.put(&outgoingSettings{ -+ ss: []http2.Setting{ -+ { -+ ID: http2.SettingInitialWindowSize, -+ Val: n, -+ }, -+ }, -+ }) -+ -+} -+ -+func (t *http2Server) handleData(f *http2.DataFrame) { -+ size := f.Header().Length -+ var sendBDPPing bool -+ if t.bdpEst != nil { -+ sendBDPPing = t.bdpEst.add(size) -+ } -+ // Decouple connection's flow control from application's read. -+ // An update on connection's flow control should not depend on -+ // whether user application has read the data or not. Such a -+ // restriction is already imposed on the stream's flow control, -+ // and therefore the sender will be blocked anyways. -+ // Decoupling the connection flow control will prevent other -+ // active(fast) streams from starving in presence of slow or -+ // inactive streams. -+ if w := t.fc.onData(size); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{ -+ streamID: 0, -+ increment: w, -+ }) -+ } -+ if sendBDPPing { -+ // Avoid excessive ping detection (e.g. in an L7 proxy) -+ // by sending a window update prior to the BDP ping. -+ if w := t.fc.reset(); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{ -+ streamID: 0, -+ increment: w, -+ }) -+ } -+ t.controlBuf.put(bdpPing) -+ } -+ // Select the right stream to dispatch. -+ s, ok := t.getStream(f) -+ if !ok { -+ return -+ } -+ if s.getState() == streamReadDone { -+ t.closeStream(s, true, http2.ErrCodeStreamClosed, false) -+ return -+ } -+ if size > 0 { -+ if err := s.fc.onData(size); err != nil { -+ t.closeStream(s, true, http2.ErrCodeFlowControl, false) -+ return -+ } -+ if f.Header().Flags.Has(http2.FlagDataPadded) { -+ if w := s.fc.onRead(size - uint32(len(f.Data()))); w > 0 { -+ t.controlBuf.put(&outgoingWindowUpdate{s.id, w}) -+ } -+ } -+ // TODO(bradfitz, zhaoq): A copy is required here because there is no -+ // guarantee f.Data() is consumed before the arrival of next frame. -+ // Can this copy be eliminated? -+ if len(f.Data()) > 0 { -+ buffer := t.bufferPool.get() -+ buffer.Reset() -+ buffer.Write(f.Data()) -+ s.write(recvMsg{buffer: buffer}) -+ } -+ } -+ if f.StreamEnded() { -+ // Received the end of stream from the client. -+ s.compareAndSwapState(streamActive, streamReadDone) -+ s.write(recvMsg{err: io.EOF}) -+ } -+} -+ -+func (t *http2Server) handleRSTStream(f *http2.RSTStreamFrame) { -+ // If the stream is not deleted from the transport's active streams map, then do a regular close stream. -+ if s, ok := t.getStream(f); ok { -+ t.closeStream(s, false, 0, false) -+ return -+ } -+ // If the stream is already deleted from the active streams map, then put a cleanupStream item into controlbuf to delete the stream from loopy writer's established streams map. -+ t.controlBuf.put(&cleanupStream{ -+ streamID: f.Header().StreamID, -+ rst: false, -+ rstCode: 0, -+ onWrite: func() {}, -+ }) -+} -+ -+func (t *http2Server) handleSettings(f *http2.SettingsFrame) { -+ if f.IsAck() { -+ return -+ } -+ var ss []http2.Setting -+ var updateFuncs []func() -+ f.ForeachSetting(func(s http2.Setting) error { -+ switch s.ID { -+ case http2.SettingMaxHeaderListSize: -+ updateFuncs = append(updateFuncs, func() { -+ t.maxSendHeaderListSize = new(uint32) -+ *t.maxSendHeaderListSize = s.Val -+ }) -+ default: -+ ss = append(ss, s) -+ } -+ return nil -+ }) -+ t.controlBuf.executeAndPut(func(interface{}) bool { -+ for _, f := range updateFuncs { -+ f() -+ } -+ return true -+ }, &incomingSettings{ -+ ss: ss, -+ }) -+} -+ -+const ( -+ maxPingStrikes = 2 -+ defaultPingTimeout = 2 * time.Hour -+) -+ -+func (t *http2Server) handlePing(f *http2.PingFrame) { -+ if f.IsAck() { -+ if f.Data == goAwayPing.data && t.drainEvent != nil { -+ t.drainEvent.Fire() -+ return -+ } -+ // Maybe it's a BDP ping. -+ if t.bdpEst != nil { -+ t.bdpEst.calculate(f.Data) -+ } -+ return -+ } -+ pingAck := &ping{ack: true} -+ copy(pingAck.data[:], f.Data[:]) -+ t.controlBuf.put(pingAck) -+ -+ now := time.Now() -+ defer func() { -+ t.lastPingAt = now -+ }() -+ // A reset ping strikes means that we don't need to check for policy -+ // violation for this ping and the pingStrikes counter should be set -+ // to 0. -+ if atomic.CompareAndSwapUint32(&t.resetPingStrikes, 1, 0) { -+ t.pingStrikes = 0 -+ return -+ } -+ t.mu.Lock() -+ ns := len(t.activeStreams) -+ t.mu.Unlock() -+ if ns < 1 && !t.kep.PermitWithoutStream { -+ // Keepalive shouldn't be active thus, this new ping should -+ // have come after at least defaultPingTimeout. -+ if t.lastPingAt.Add(defaultPingTimeout).After(now) { -+ t.pingStrikes++ -+ } -+ } else { -+ // Check if keepalive policy is respected. -+ if t.lastPingAt.Add(t.kep.MinTime).After(now) { -+ t.pingStrikes++ -+ } -+ } -+ -+ if t.pingStrikes > maxPingStrikes { -+ // Send goaway and close the connection. -+ t.controlBuf.put(&goAway{code: http2.ErrCodeEnhanceYourCalm, debugData: []byte("too_many_pings"), closeConn: errors.New("got too many pings from the client")}) -+ } -+} -+ -+func (t *http2Server) handleWindowUpdate(f *http2.WindowUpdateFrame) { -+ t.controlBuf.put(&incomingWindowUpdate{ -+ streamID: f.Header().StreamID, -+ increment: f.Increment, -+ }) -+} -+ -+func appendHeaderFieldsFromMD(headerFields []hpack.HeaderField, md metadata.MD) []hpack.HeaderField { -+ for k, vv := range md { -+ if isReservedHeader(k) { -+ // Clients don't tolerate reading restricted headers after some non restricted ones were sent. -+ continue -+ } -+ for _, v := range vv { -+ headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) -+ } -+ } -+ return headerFields -+} -+ -+func (t *http2Server) checkForHeaderListSize(it interface{}) bool { -+ if t.maxSendHeaderListSize == nil { -+ return true -+ } -+ hdrFrame := it.(*headerFrame) -+ var sz int64 -+ for _, f := range hdrFrame.hf { -+ if sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) { -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Header list size to send violates the maximum size (%d bytes) set by client", *t.maxSendHeaderListSize) -+ } -+ return false -+ } -+ } -+ return true -+} -+ -+func (t *http2Server) streamContextErr(s *Stream) error { -+ select { -+ case <-t.done: -+ return ErrConnClosing -+ default: -+ } -+ return ContextErr(s.ctx.Err()) -+} -+ -+// WriteHeader sends the header metadata md back to the client. -+func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { -+ s.hdrMu.Lock() -+ defer s.hdrMu.Unlock() -+ if s.getState() == streamDone { -+ return t.streamContextErr(s) -+ } -+ -+ if s.updateHeaderSent() { -+ return ErrIllegalHeaderWrite -+ } -+ -+ if md.Len() > 0 { -+ if s.header.Len() > 0 { -+ s.header = metadata.Join(s.header, md) -+ } else { -+ s.header = md -+ } -+ } -+ if err := t.writeHeaderLocked(s); err != nil { -+ return status.Convert(err).Err() -+ } -+ return nil -+} -+ -+func (t *http2Server) setResetPingStrikes() { -+ atomic.StoreUint32(&t.resetPingStrikes, 1) -+} -+ -+func (t *http2Server) writeHeaderLocked(s *Stream) error { -+ // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields -+ // first and create a slice of that exact size. -+ headerFields := make([]hpack.HeaderField, 0, 2) // at least :status, content-type will be there if none else. -+ headerFields = append(headerFields, hpack.HeaderField{Name: ":status", Value: "200"}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: grpcutil.ContentType(s.contentSubtype)}) -+ if s.sendCompress != "" { -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-encoding", Value: s.sendCompress}) -+ } -+ headerFields = appendHeaderFieldsFromMD(headerFields, s.header) -+ success, err := t.controlBuf.executeAndPut(t.checkForHeaderListSize, &headerFrame{ -+ streamID: s.id, -+ hf: headerFields, -+ endStream: false, -+ onWrite: t.setResetPingStrikes, -+ }) -+ if !success { -+ if err != nil { -+ return err -+ } -+ t.closeStream(s, true, http2.ErrCodeInternal, false) -+ return ErrHeaderListSizeLimitViolation -+ } -+ for _, sh := range t.stats { -+ // Note: Headers are compressed with hpack after this call returns. -+ // No WireLength field is set here. -+ outHeader := &stats.OutHeader{ -+ Header: s.header.Copy(), -+ Compression: s.sendCompress, -+ } -+ sh.HandleRPC(s.Context(), outHeader) -+ } -+ return nil -+} -+ -+// WriteStatus sends stream status to the client and terminates the stream. -+// There is no further I/O operations being able to perform on this stream. -+// TODO(zhaoq): Now it indicates the end of entire stream. Revisit if early -+// OK is adopted. -+func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { -+ s.hdrMu.Lock() -+ defer s.hdrMu.Unlock() -+ -+ if s.getState() == streamDone { -+ return nil -+ } -+ -+ // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields -+ // first and create a slice of that exact size. -+ headerFields := make([]hpack.HeaderField, 0, 2) // grpc-status and grpc-message will be there if none else. -+ if !s.updateHeaderSent() { // No headers have been sent. -+ if len(s.header) > 0 { // Send a separate header frame. -+ if err := t.writeHeaderLocked(s); err != nil { -+ return err -+ } -+ } else { // Send a trailer only response. -+ headerFields = append(headerFields, hpack.HeaderField{Name: ":status", Value: "200"}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: grpcutil.ContentType(s.contentSubtype)}) -+ } -+ } -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status", Value: strconv.Itoa(int(st.Code()))}) -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(st.Message())}) -+ -+ if p := st.Proto(); p != nil && len(p.Details) > 0 { -+ stBytes, err := proto.Marshal(p) -+ if err != nil { -+ // TODO: return error instead, when callers are able to handle it. -+ t.logger.Errorf("Failed to marshal rpc status: %s, error: %v", pretty.ToJSON(p), err) -+ } else { -+ headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status-details-bin", Value: encodeBinHeader(stBytes)}) -+ } -+ } -+ -+ // Attach the trailer metadata. -+ headerFields = appendHeaderFieldsFromMD(headerFields, s.trailer) -+ trailingHeader := &headerFrame{ -+ streamID: s.id, -+ hf: headerFields, -+ endStream: true, -+ onWrite: t.setResetPingStrikes, -+ } -+ -+ success, err := t.controlBuf.execute(t.checkForHeaderListSize, trailingHeader) -+ if !success { -+ if err != nil { -+ return err -+ } -+ t.closeStream(s, true, http2.ErrCodeInternal, false) -+ return ErrHeaderListSizeLimitViolation -+ } -+ // Send a RST_STREAM after the trailers if the client has not already half-closed. -+ rst := s.getState() == streamActive -+ t.finishStream(s, rst, http2.ErrCodeNo, trailingHeader, true) -+ for _, sh := range t.stats { -+ // Note: The trailer fields are compressed with hpack after this call returns. -+ // No WireLength field is set here. -+ sh.HandleRPC(s.Context(), &stats.OutTrailer{ -+ Trailer: s.trailer.Copy(), -+ }) -+ } -+ return nil -+} -+ -+// Write converts the data into HTTP2 data frame and sends it out. Non-nil error -+// is returns if it fails (e.g., framing error, transport error). -+func (t *http2Server) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { -+ if !s.isHeaderSent() { // Headers haven't been written yet. -+ if err := t.WriteHeader(s, nil); err != nil { -+ return err -+ } -+ } else { -+ // Writing headers checks for this condition. -+ if s.getState() == streamDone { -+ return t.streamContextErr(s) -+ } -+ } -+ df := &dataFrame{ -+ streamID: s.id, -+ h: hdr, -+ d: data, -+ onEachWrite: t.setResetPingStrikes, -+ } -+ if err := s.wq.get(int32(len(hdr) + len(data))); err != nil { -+ return t.streamContextErr(s) -+ } -+ return t.controlBuf.put(df) -+} -+ -+// keepalive running in a separate goroutine does the following: -+// 1. Gracefully closes an idle connection after a duration of keepalive.MaxConnectionIdle. -+// 2. Gracefully closes any connection after a duration of keepalive.MaxConnectionAge. -+// 3. Forcibly closes a connection after an additive period of keepalive.MaxConnectionAgeGrace over keepalive.MaxConnectionAge. -+// 4. Makes sure a connection is alive by sending pings with a frequency of keepalive.Time and closes a non-responsive connection -+// after an additional duration of keepalive.Timeout. -+func (t *http2Server) keepalive() { -+ p := &ping{} -+ // True iff a ping has been sent, and no data has been received since then. -+ outstandingPing := false -+ // Amount of time remaining before which we should receive an ACK for the -+ // last sent ping. -+ kpTimeoutLeft := time.Duration(0) -+ // Records the last value of t.lastRead before we go block on the timer. -+ // This is required to check for read activity since then. -+ prevNano := time.Now().UnixNano() -+ // Initialize the different timers to their default values. -+ idleTimer := time.NewTimer(t.kp.MaxConnectionIdle) -+ ageTimer := time.NewTimer(t.kp.MaxConnectionAge) -+ kpTimer := time.NewTimer(t.kp.Time) -+ defer func() { -+ // We need to drain the underlying channel in these timers after a call -+ // to Stop(), only if we are interested in resetting them. Clearly we -+ // are not interested in resetting them here. -+ idleTimer.Stop() -+ ageTimer.Stop() -+ kpTimer.Stop() -+ }() -+ -+ for { -+ select { -+ case <-idleTimer.C: -+ t.mu.Lock() -+ idle := t.idle -+ if idle.IsZero() { // The connection is non-idle. -+ t.mu.Unlock() -+ idleTimer.Reset(t.kp.MaxConnectionIdle) -+ continue -+ } -+ val := t.kp.MaxConnectionIdle - time.Since(idle) -+ t.mu.Unlock() -+ if val <= 0 { -+ // The connection has been idle for a duration of keepalive.MaxConnectionIdle or more. -+ // Gracefully close the connection. -+ t.Drain("max_idle") -+ return -+ } -+ idleTimer.Reset(val) -+ case <-ageTimer.C: -+ t.Drain("max_age") -+ ageTimer.Reset(t.kp.MaxConnectionAgeGrace) -+ select { -+ case <-ageTimer.C: -+ // Close the connection after grace period. -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Closing server transport due to maximum connection age") -+ } -+ t.controlBuf.put(closeConnection{}) -+ case <-t.done: -+ } -+ return -+ case <-kpTimer.C: -+ lastRead := atomic.LoadInt64(&t.lastRead) -+ if lastRead > prevNano { -+ // There has been read activity since the last time we were -+ // here. Setup the timer to fire at kp.Time seconds from -+ // lastRead time and continue. -+ outstandingPing = false -+ kpTimer.Reset(time.Duration(lastRead) + t.kp.Time - time.Duration(time.Now().UnixNano())) -+ prevNano = lastRead -+ continue -+ } -+ if outstandingPing && kpTimeoutLeft <= 0 { -+ t.Close(fmt.Errorf("keepalive ping not acked within timeout %s", t.kp.Time)) -+ return -+ } -+ if !outstandingPing { -+ if channelz.IsOn() { -+ atomic.AddInt64(&t.czData.kpCount, 1) -+ } -+ t.controlBuf.put(p) -+ kpTimeoutLeft = t.kp.Timeout -+ outstandingPing = true -+ } -+ // The amount of time to sleep here is the minimum of kp.Time and -+ // timeoutLeft. This will ensure that we wait only for kp.Time -+ // before sending out the next ping (for cases where the ping is -+ // acked). -+ sleepDuration := minTime(t.kp.Time, kpTimeoutLeft) -+ kpTimeoutLeft -= sleepDuration -+ kpTimer.Reset(sleepDuration) -+ case <-t.done: -+ return -+ } -+ } -+} -+ -+// Close starts shutting down the http2Server transport. -+// TODO(zhaoq): Now the destruction is not blocked on any pending streams. This -+// could cause some resource issue. Revisit this later. -+func (t *http2Server) Close(err error) { -+ t.mu.Lock() -+ if t.state == closing { -+ t.mu.Unlock() -+ return -+ } -+ if t.logger.V(logLevel) { -+ t.logger.Infof("Closing: %v", err) -+ } -+ t.state = closing -+ streams := t.activeStreams -+ t.activeStreams = nil -+ t.mu.Unlock() -+ t.controlBuf.finish() -+ close(t.done) -+ if err := t.conn.Close(); err != nil && t.logger.V(logLevel) { -+ t.logger.Infof("Error closing underlying net.Conn during Close: %v", err) -+ } -+ channelz.RemoveEntry(t.channelzID) -+ // Cancel all active streams. -+ for _, s := range streams { -+ s.cancel() -+ } -+ for _, sh := range t.stats { -+ connEnd := &stats.ConnEnd{} -+ sh.HandleConn(t.ctx, connEnd) -+ } -+} -+ -+// deleteStream deletes the stream s from transport's active streams. -+func (t *http2Server) deleteStream(s *Stream, eosReceived bool) { -+ -+ t.mu.Lock() -+ if _, ok := t.activeStreams[s.id]; ok { -+ delete(t.activeStreams, s.id) -+ if len(t.activeStreams) == 0 { -+ t.idle = time.Now() -+ } -+ } -+ t.mu.Unlock() -+ -+ if channelz.IsOn() { -+ if eosReceived { -+ atomic.AddInt64(&t.czData.streamsSucceeded, 1) -+ } else { -+ atomic.AddInt64(&t.czData.streamsFailed, 1) -+ } -+ } -+} -+ -+// finishStream closes the stream and puts the trailing headerFrame into controlbuf. -+func (t *http2Server) finishStream(s *Stream, rst bool, rstCode http2.ErrCode, hdr *headerFrame, eosReceived bool) { -+ // In case stream sending and receiving are invoked in separate -+ // goroutines (e.g., bi-directional streaming), cancel needs to be -+ // called to interrupt the potential blocking on other goroutines. -+ s.cancel() -+ -+ oldState := s.swapState(streamDone) -+ if oldState == streamDone { -+ // If the stream was already done, return. -+ return -+ } -+ -+ hdr.cleanup = &cleanupStream{ -+ streamID: s.id, -+ rst: rst, -+ rstCode: rstCode, -+ onWrite: func() { -+ t.deleteStream(s, eosReceived) -+ }, -+ } -+ t.controlBuf.put(hdr) -+} -+ -+// closeStream clears the footprint of a stream when the stream is not needed any more. -+func (t *http2Server) closeStream(s *Stream, rst bool, rstCode http2.ErrCode, eosReceived bool) { -+ // In case stream sending and receiving are invoked in separate -+ // goroutines (e.g., bi-directional streaming), cancel needs to be -+ // called to interrupt the potential blocking on other goroutines. -+ s.cancel() -+ -+ s.swapState(streamDone) -+ t.deleteStream(s, eosReceived) -+ -+ t.controlBuf.put(&cleanupStream{ -+ streamID: s.id, -+ rst: rst, -+ rstCode: rstCode, -+ onWrite: func() {}, -+ }) -+} -+ -+func (t *http2Server) RemoteAddr() net.Addr { -+ return t.remoteAddr -+} -+ -+func (t *http2Server) Drain(debugData string) { -+ t.mu.Lock() -+ defer t.mu.Unlock() -+ if t.drainEvent != nil { -+ return -+ } -+ t.drainEvent = grpcsync.NewEvent() -+ t.controlBuf.put(&goAway{code: http2.ErrCodeNo, debugData: []byte(debugData), headsUp: true}) -+} -+ -+var goAwayPing = &ping{data: [8]byte{1, 6, 1, 8, 0, 3, 3, 9}} -+ -+// Handles outgoing GoAway and returns true if loopy needs to put itself -+// in draining mode. -+func (t *http2Server) outgoingGoAwayHandler(g *goAway) (bool, error) { -+ t.maxStreamMu.Lock() -+ t.mu.Lock() -+ if t.state == closing { // TODO(mmukhi): This seems unnecessary. -+ t.mu.Unlock() -+ t.maxStreamMu.Unlock() -+ // The transport is closing. -+ return false, ErrConnClosing -+ } -+ if !g.headsUp { -+ // Stop accepting more streams now. -+ t.state = draining -+ sid := t.maxStreamID -+ retErr := g.closeConn -+ if len(t.activeStreams) == 0 { -+ retErr = errors.New("second GOAWAY written and no active streams left to process") -+ } -+ t.mu.Unlock() -+ t.maxStreamMu.Unlock() -+ if err := t.framer.fr.WriteGoAway(sid, g.code, g.debugData); err != nil { -+ return false, err -+ } -+ if retErr != nil { -+ return false, retErr -+ } -+ return true, nil -+ } -+ t.mu.Unlock() -+ t.maxStreamMu.Unlock() -+ // For a graceful close, send out a GoAway with stream ID of MaxUInt32, -+ // Follow that with a ping and wait for the ack to come back or a timer -+ // to expire. During this time accept new streams since they might have -+ // originated before the GoAway reaches the client. -+ // After getting the ack or timer expiration send out another GoAway this -+ // time with an ID of the max stream server intends to process. -+ if err := t.framer.fr.WriteGoAway(math.MaxUint32, http2.ErrCodeNo, g.debugData); err != nil { -+ return false, err -+ } -+ if err := t.framer.fr.WritePing(false, goAwayPing.data); err != nil { -+ return false, err -+ } -+ go func() { -+ timer := time.NewTimer(time.Minute) -+ defer timer.Stop() -+ select { -+ case <-t.drainEvent.Done(): -+ case <-timer.C: -+ case <-t.done: -+ return -+ } -+ t.controlBuf.put(&goAway{code: g.code, debugData: g.debugData}) -+ }() -+ return false, nil -+} -+ -+func (t *http2Server) ChannelzMetric() *channelz.SocketInternalMetric { -+ s := channelz.SocketInternalMetric{ -+ StreamsStarted: atomic.LoadInt64(&t.czData.streamsStarted), -+ StreamsSucceeded: atomic.LoadInt64(&t.czData.streamsSucceeded), -+ StreamsFailed: atomic.LoadInt64(&t.czData.streamsFailed), -+ MessagesSent: atomic.LoadInt64(&t.czData.msgSent), -+ MessagesReceived: atomic.LoadInt64(&t.czData.msgRecv), -+ KeepAlivesSent: atomic.LoadInt64(&t.czData.kpCount), -+ LastRemoteStreamCreatedTimestamp: time.Unix(0, atomic.LoadInt64(&t.czData.lastStreamCreatedTime)), -+ LastMessageSentTimestamp: time.Unix(0, atomic.LoadInt64(&t.czData.lastMsgSentTime)), -+ LastMessageReceivedTimestamp: time.Unix(0, atomic.LoadInt64(&t.czData.lastMsgRecvTime)), -+ LocalFlowControlWindow: int64(t.fc.getSize()), -+ SocketOptions: channelz.GetSocketOption(t.conn), -+ LocalAddr: t.localAddr, -+ RemoteAddr: t.remoteAddr, -+ // RemoteName : -+ } -+ if au, ok := t.authInfo.(credentials.ChannelzSecurityInfo); ok { -+ s.Security = au.GetSecurityValue() -+ } -+ s.RemoteFlowControlWindow = t.getOutFlowWindow() -+ return &s -+} -+ -+func (t *http2Server) IncrMsgSent() { -+ atomic.AddInt64(&t.czData.msgSent, 1) -+ atomic.StoreInt64(&t.czData.lastMsgSentTime, time.Now().UnixNano()) -+} -+ -+func (t *http2Server) IncrMsgRecv() { -+ atomic.AddInt64(&t.czData.msgRecv, 1) -+ atomic.StoreInt64(&t.czData.lastMsgRecvTime, time.Now().UnixNano()) -+} -+ -+func (t *http2Server) getOutFlowWindow() int64 { -+ resp := make(chan uint32, 1) -+ timer := time.NewTimer(time.Second) -+ defer timer.Stop() -+ t.controlBuf.put(&outFlowControlSizeRequest{resp}) -+ select { -+ case sz := <-resp: -+ return int64(sz) -+ case <-t.done: -+ return -1 -+ case <-timer.C: -+ return -2 -+ } -+} -+ -+func (t *http2Server) getPeer() *peer.Peer { -+ return &peer.Peer{ -+ Addr: t.remoteAddr, -+ AuthInfo: t.authInfo, // Can be nil -+ } -+} -+ -+func getJitter(v time.Duration) time.Duration { -+ if v == infinity { -+ return 0 -+ } -+ // Generate a jitter between +/- 10% of the value. -+ r := int64(v / 10) -+ j := grpcrand.Int63n(2*r) - r -+ return time.Duration(j) -+} -+ -+type connectionKey struct{} -+ -+// GetConnection gets the connection from the context. -+func GetConnection(ctx context.Context) net.Conn { -+ conn, _ := ctx.Value(connectionKey{}).(net.Conn) -+ return conn -+} -+ -+// SetConnection adds the connection to the context to be able to get -+// information about the destination ip and port for an incoming RPC. This also -+// allows any unary or streaming interceptors to see the connection. -+func setConnection(ctx context.Context, conn net.Conn) context.Context { -+ return context.WithValue(ctx, connectionKey{}, conn) -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/http_util.go b/vendor/google.golang.org/grpc/internal/transport/http_util.go -new file mode 100755 -index 0000000..19cbb18 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/http_util.go -@@ -0,0 +1,432 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "bufio" -+ "encoding/base64" -+ "errors" -+ "fmt" -+ "io" -+ "math" -+ "net" -+ "net/http" -+ "net/url" -+ "strconv" -+ "strings" -+ "time" -+ "unicode/utf8" -+ -+ "github.com/golang/protobuf/proto" -+ "golang.org/x/net/http2" -+ "golang.org/x/net/http2/hpack" -+ spb "google.golang.org/genproto/googleapis/rpc/status" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/status" -+) -+ -+const ( -+ // http2MaxFrameLen specifies the max length of a HTTP2 frame. -+ http2MaxFrameLen = 16384 // 16KB frame -+ // https://httpwg.org/specs/rfc7540.html#SettingValues -+ http2InitHeaderTableSize = 4096 -+) -+ -+var ( -+ clientPreface = []byte(http2.ClientPreface) -+ http2ErrConvTab = map[http2.ErrCode]codes.Code{ -+ http2.ErrCodeNo: codes.Internal, -+ http2.ErrCodeProtocol: codes.Internal, -+ http2.ErrCodeInternal: codes.Internal, -+ http2.ErrCodeFlowControl: codes.ResourceExhausted, -+ http2.ErrCodeSettingsTimeout: codes.Internal, -+ http2.ErrCodeStreamClosed: codes.Internal, -+ http2.ErrCodeFrameSize: codes.Internal, -+ http2.ErrCodeRefusedStream: codes.Unavailable, -+ http2.ErrCodeCancel: codes.Canceled, -+ http2.ErrCodeCompression: codes.Internal, -+ http2.ErrCodeConnect: codes.Internal, -+ http2.ErrCodeEnhanceYourCalm: codes.ResourceExhausted, -+ http2.ErrCodeInadequateSecurity: codes.PermissionDenied, -+ http2.ErrCodeHTTP11Required: codes.Internal, -+ } -+ // HTTPStatusConvTab is the HTTP status code to gRPC error code conversion table. -+ HTTPStatusConvTab = map[int]codes.Code{ -+ // 400 Bad Request - INTERNAL. -+ http.StatusBadRequest: codes.Internal, -+ // 401 Unauthorized - UNAUTHENTICATED. -+ http.StatusUnauthorized: codes.Unauthenticated, -+ // 403 Forbidden - PERMISSION_DENIED. -+ http.StatusForbidden: codes.PermissionDenied, -+ // 404 Not Found - UNIMPLEMENTED. -+ http.StatusNotFound: codes.Unimplemented, -+ // 429 Too Many Requests - UNAVAILABLE. -+ http.StatusTooManyRequests: codes.Unavailable, -+ // 502 Bad Gateway - UNAVAILABLE. -+ http.StatusBadGateway: codes.Unavailable, -+ // 503 Service Unavailable - UNAVAILABLE. -+ http.StatusServiceUnavailable: codes.Unavailable, -+ // 504 Gateway timeout - UNAVAILABLE. -+ http.StatusGatewayTimeout: codes.Unavailable, -+ } -+) -+ -+// isReservedHeader checks whether hdr belongs to HTTP2 headers -+// reserved by gRPC protocol. Any other headers are classified as the -+// user-specified metadata. -+func isReservedHeader(hdr string) bool { -+ if hdr != "" && hdr[0] == ':' { -+ return true -+ } -+ switch hdr { -+ case "content-type", -+ "user-agent", -+ "grpc-message-type", -+ "grpc-encoding", -+ "grpc-message", -+ "grpc-status", -+ "grpc-timeout", -+ "grpc-status-details-bin", -+ // Intentionally exclude grpc-previous-rpc-attempts and -+ // grpc-retry-pushback-ms, which are "reserved", but their API -+ // intentionally works via metadata. -+ "te": -+ return true -+ default: -+ return false -+ } -+} -+ -+// isWhitelistedHeader checks whether hdr should be propagated into metadata -+// visible to users, even though it is classified as "reserved", above. -+func isWhitelistedHeader(hdr string) bool { -+ switch hdr { -+ case ":authority", "user-agent": -+ return true -+ default: -+ return false -+ } -+} -+ -+const binHdrSuffix = "-bin" -+ -+func encodeBinHeader(v []byte) string { -+ return base64.RawStdEncoding.EncodeToString(v) -+} -+ -+func decodeBinHeader(v string) ([]byte, error) { -+ if len(v)%4 == 0 { -+ // Input was padded, or padding was not necessary. -+ return base64.StdEncoding.DecodeString(v) -+ } -+ return base64.RawStdEncoding.DecodeString(v) -+} -+ -+func encodeMetadataHeader(k, v string) string { -+ if strings.HasSuffix(k, binHdrSuffix) { -+ return encodeBinHeader(([]byte)(v)) -+ } -+ return v -+} -+ -+func decodeMetadataHeader(k, v string) (string, error) { -+ if strings.HasSuffix(k, binHdrSuffix) { -+ b, err := decodeBinHeader(v) -+ return string(b), err -+ } -+ return v, nil -+} -+ -+func decodeGRPCStatusDetails(rawDetails string) (*status.Status, error) { -+ v, err := decodeBinHeader(rawDetails) -+ if err != nil { -+ return nil, err -+ } -+ st := &spb.Status{} -+ if err = proto.Unmarshal(v, st); err != nil { -+ return nil, err -+ } -+ return status.FromProto(st), nil -+} -+ -+type timeoutUnit uint8 -+ -+const ( -+ hour timeoutUnit = 'H' -+ minute timeoutUnit = 'M' -+ second timeoutUnit = 'S' -+ millisecond timeoutUnit = 'm' -+ microsecond timeoutUnit = 'u' -+ nanosecond timeoutUnit = 'n' -+) -+ -+func timeoutUnitToDuration(u timeoutUnit) (d time.Duration, ok bool) { -+ switch u { -+ case hour: -+ return time.Hour, true -+ case minute: -+ return time.Minute, true -+ case second: -+ return time.Second, true -+ case millisecond: -+ return time.Millisecond, true -+ case microsecond: -+ return time.Microsecond, true -+ case nanosecond: -+ return time.Nanosecond, true -+ default: -+ } -+ return -+} -+ -+func decodeTimeout(s string) (time.Duration, error) { -+ size := len(s) -+ if size < 2 { -+ return 0, fmt.Errorf("transport: timeout string is too short: %q", s) -+ } -+ if size > 9 { -+ // Spec allows for 8 digits plus the unit. -+ return 0, fmt.Errorf("transport: timeout string is too long: %q", s) -+ } -+ unit := timeoutUnit(s[size-1]) -+ d, ok := timeoutUnitToDuration(unit) -+ if !ok { -+ return 0, fmt.Errorf("transport: timeout unit is not recognized: %q", s) -+ } -+ t, err := strconv.ParseInt(s[:size-1], 10, 64) -+ if err != nil { -+ return 0, err -+ } -+ const maxHours = math.MaxInt64 / int64(time.Hour) -+ if d == time.Hour && t > maxHours { -+ // This timeout would overflow math.MaxInt64; clamp it. -+ return time.Duration(math.MaxInt64), nil -+ } -+ return d * time.Duration(t), nil -+} -+ -+const ( -+ spaceByte = ' ' -+ tildeByte = '~' -+ percentByte = '%' -+) -+ -+// encodeGrpcMessage is used to encode status code in header field -+// "grpc-message". It does percent encoding and also replaces invalid utf-8 -+// characters with Unicode replacement character. -+// -+// It checks to see if each individual byte in msg is an allowable byte, and -+// then either percent encoding or passing it through. When percent encoding, -+// the byte is converted into hexadecimal notation with a '%' prepended. -+func encodeGrpcMessage(msg string) string { -+ if msg == "" { -+ return "" -+ } -+ lenMsg := len(msg) -+ for i := 0; i < lenMsg; i++ { -+ c := msg[i] -+ if !(c >= spaceByte && c <= tildeByte && c != percentByte) { -+ return encodeGrpcMessageUnchecked(msg) -+ } -+ } -+ return msg -+} -+ -+func encodeGrpcMessageUnchecked(msg string) string { -+ var sb strings.Builder -+ for len(msg) > 0 { -+ r, size := utf8.DecodeRuneInString(msg) -+ for _, b := range []byte(string(r)) { -+ if size > 1 { -+ // If size > 1, r is not ascii. Always do percent encoding. -+ fmt.Fprintf(&sb, "%%%02X", b) -+ continue -+ } -+ -+ // The for loop is necessary even if size == 1. r could be -+ // utf8.RuneError. -+ // -+ // fmt.Sprintf("%%%02X", utf8.RuneError) gives "%FFFD". -+ if b >= spaceByte && b <= tildeByte && b != percentByte { -+ sb.WriteByte(b) -+ } else { -+ fmt.Fprintf(&sb, "%%%02X", b) -+ } -+ } -+ msg = msg[size:] -+ } -+ return sb.String() -+} -+ -+// decodeGrpcMessage decodes the msg encoded by encodeGrpcMessage. -+func decodeGrpcMessage(msg string) string { -+ if msg == "" { -+ return "" -+ } -+ lenMsg := len(msg) -+ for i := 0; i < lenMsg; i++ { -+ if msg[i] == percentByte && i+2 < lenMsg { -+ return decodeGrpcMessageUnchecked(msg) -+ } -+ } -+ return msg -+} -+ -+func decodeGrpcMessageUnchecked(msg string) string { -+ var sb strings.Builder -+ lenMsg := len(msg) -+ for i := 0; i < lenMsg; i++ { -+ c := msg[i] -+ if c == percentByte && i+2 < lenMsg { -+ parsed, err := strconv.ParseUint(msg[i+1:i+3], 16, 8) -+ if err != nil { -+ sb.WriteByte(c) -+ } else { -+ sb.WriteByte(byte(parsed)) -+ i += 2 -+ } -+ } else { -+ sb.WriteByte(c) -+ } -+ } -+ return sb.String() -+} -+ -+type bufWriter struct { -+ buf []byte -+ offset int -+ batchSize int -+ conn net.Conn -+ err error -+} -+ -+func newBufWriter(conn net.Conn, batchSize int) *bufWriter { -+ return &bufWriter{ -+ buf: make([]byte, batchSize*2), -+ batchSize: batchSize, -+ conn: conn, -+ } -+} -+ -+func (w *bufWriter) Write(b []byte) (n int, err error) { -+ if w.err != nil { -+ return 0, w.err -+ } -+ if w.batchSize == 0 { // Buffer has been disabled. -+ n, err = w.conn.Write(b) -+ return n, toIOError(err) -+ } -+ for len(b) > 0 { -+ nn := copy(w.buf[w.offset:], b) -+ b = b[nn:] -+ w.offset += nn -+ n += nn -+ if w.offset >= w.batchSize { -+ err = w.Flush() -+ } -+ } -+ return n, err -+} -+ -+func (w *bufWriter) Flush() error { -+ if w.err != nil { -+ return w.err -+ } -+ if w.offset == 0 { -+ return nil -+ } -+ _, w.err = w.conn.Write(w.buf[:w.offset]) -+ w.err = toIOError(w.err) -+ w.offset = 0 -+ return w.err -+} -+ -+type ioError struct { -+ error -+} -+ -+func (i ioError) Unwrap() error { -+ return i.error -+} -+ -+func isIOError(err error) bool { -+ return errors.As(err, &ioError{}) -+} -+ -+func toIOError(err error) error { -+ if err == nil { -+ return nil -+ } -+ return ioError{error: err} -+} -+ -+type framer struct { -+ writer *bufWriter -+ fr *http2.Framer -+} -+ -+func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, maxHeaderListSize uint32) *framer { -+ if writeBufferSize < 0 { -+ writeBufferSize = 0 -+ } -+ var r io.Reader = conn -+ if readBufferSize > 0 { -+ r = bufio.NewReaderSize(r, readBufferSize) -+ } -+ w := newBufWriter(conn, writeBufferSize) -+ f := &framer{ -+ writer: w, -+ fr: http2.NewFramer(w, r), -+ } -+ f.fr.SetMaxReadFrameSize(http2MaxFrameLen) -+ // Opt-in to Frame reuse API on framer to reduce garbage. -+ // Frames aren't safe to read from after a subsequent call to ReadFrame. -+ f.fr.SetReuseFrames() -+ f.fr.MaxHeaderListSize = maxHeaderListSize -+ f.fr.ReadMetaHeaders = hpack.NewDecoder(http2InitHeaderTableSize, nil) -+ return f -+} -+ -+// parseDialTarget returns the network and address to pass to dialer. -+func parseDialTarget(target string) (string, string) { -+ net := "tcp" -+ m1 := strings.Index(target, ":") -+ m2 := strings.Index(target, ":/") -+ // handle unix:addr which will fail with url.Parse -+ if m1 >= 0 && m2 < 0 { -+ if n := target[0:m1]; n == "unix" { -+ return n, target[m1+1:] -+ } -+ } -+ if m2 >= 0 { -+ t, err := url.Parse(target) -+ if err != nil { -+ return net, target -+ } -+ scheme := t.Scheme -+ addr := t.Path -+ if scheme == "unix" { -+ if addr == "" { -+ addr = t.Host -+ } -+ return scheme, addr -+ } -+ } -+ return net, target -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/logging.go b/vendor/google.golang.org/grpc/internal/transport/logging.go -new file mode 100755 -index 0000000..42ed2b0 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/logging.go -@@ -0,0 +1,40 @@ -+/* -+ * -+ * Copyright 2023 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "fmt" -+ -+ "google.golang.org/grpc/grpclog" -+ internalgrpclog "google.golang.org/grpc/internal/grpclog" -+) -+ -+var logger = grpclog.Component("transport") -+ -+func prefixLoggerForServerTransport(p *http2Server) *internalgrpclog.PrefixLogger { -+ return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[server-transport %p] ", p)) -+} -+ -+func prefixLoggerForServerHandlerTransport(p *serverHandlerTransport) *internalgrpclog.PrefixLogger { -+ return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[server-handler-transport %p] ", p)) -+} -+ -+func prefixLoggerForClientTransport(p *http2Client) *internalgrpclog.PrefixLogger { -+ return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[client-transport %p] ", p)) -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go b/vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go -new file mode 100755 -index 0000000..c11b527 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go -@@ -0,0 +1,46 @@ -+/* -+ * -+ * Copyright 2020 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package networktype declares the network type to be used in the default -+// dialer. Attribute of a resolver.Address. -+package networktype -+ -+import ( -+ "google.golang.org/grpc/resolver" -+) -+ -+// keyType is the key to use for storing State in Attributes. -+type keyType string -+ -+const key = keyType("grpc.internal.transport.networktype") -+ -+// Set returns a copy of the provided address with attributes containing networkType. -+func Set(address resolver.Address, networkType string) resolver.Address { -+ address.Attributes = address.Attributes.WithValue(key, networkType) -+ return address -+} -+ -+// Get returns the network type in the resolver.Address and true, or "", false -+// if not present. -+func Get(address resolver.Address) (string, bool) { -+ v := address.Attributes.Value(key) -+ if v == nil { -+ return "", false -+ } -+ return v.(string), true -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/proxy.go b/vendor/google.golang.org/grpc/internal/transport/proxy.go -new file mode 100755 -index 0000000..4159619 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/proxy.go -@@ -0,0 +1,142 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package transport -+ -+import ( -+ "bufio" -+ "context" -+ "encoding/base64" -+ "fmt" -+ "io" -+ "net" -+ "net/http" -+ "net/http/httputil" -+ "net/url" -+) -+ -+const proxyAuthHeaderKey = "Proxy-Authorization" -+ -+var ( -+ // The following variable will be overwritten in the tests. -+ httpProxyFromEnvironment = http.ProxyFromEnvironment -+) -+ -+func mapAddress(address string) (*url.URL, error) { -+ req := &http.Request{ -+ URL: &url.URL{ -+ Scheme: "https", -+ Host: address, -+ }, -+ } -+ url, err := httpProxyFromEnvironment(req) -+ if err != nil { -+ return nil, err -+ } -+ return url, nil -+} -+ -+// To read a response from a net.Conn, http.ReadResponse() takes a bufio.Reader. -+// It's possible that this reader reads more than what's need for the response and stores -+// those bytes in the buffer. -+// bufConn wraps the original net.Conn and the bufio.Reader to make sure we don't lose the -+// bytes in the buffer. -+type bufConn struct { -+ net.Conn -+ r io.Reader -+} -+ -+func (c *bufConn) Read(b []byte) (int, error) { -+ return c.r.Read(b) -+} -+ -+func basicAuth(username, password string) string { -+ auth := username + ":" + password -+ return base64.StdEncoding.EncodeToString([]byte(auth)) -+} -+ -+func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr string, proxyURL *url.URL, grpcUA string) (_ net.Conn, err error) { -+ defer func() { -+ if err != nil { -+ conn.Close() -+ } -+ }() -+ -+ req := &http.Request{ -+ Method: http.MethodConnect, -+ URL: &url.URL{Host: backendAddr}, -+ Header: map[string][]string{"User-Agent": {grpcUA}}, -+ } -+ if t := proxyURL.User; t != nil { -+ u := t.Username() -+ p, _ := t.Password() -+ req.Header.Add(proxyAuthHeaderKey, "Basic "+basicAuth(u, p)) -+ } -+ -+ if err := sendHTTPRequest(ctx, req, conn); err != nil { -+ return nil, fmt.Errorf("failed to write the HTTP request: %v", err) -+ } -+ -+ r := bufio.NewReader(conn) -+ resp, err := http.ReadResponse(r, req) -+ if err != nil { -+ return nil, fmt.Errorf("reading server HTTP response: %v", err) -+ } -+ defer resp.Body.Close() -+ if resp.StatusCode != http.StatusOK { -+ dump, err := httputil.DumpResponse(resp, true) -+ if err != nil { -+ return nil, fmt.Errorf("failed to do connect handshake, status code: %s", resp.Status) -+ } -+ return nil, fmt.Errorf("failed to do connect handshake, response: %q", dump) -+ } -+ -+ return &bufConn{Conn: conn, r: r}, nil -+} -+ -+// proxyDial dials, connecting to a proxy first if necessary. Checks if a proxy -+// is necessary, dials, does the HTTP CONNECT handshake, and returns the -+// connection. -+func proxyDial(ctx context.Context, addr string, grpcUA string) (conn net.Conn, err error) { -+ newAddr := addr -+ proxyURL, err := mapAddress(addr) -+ if err != nil { -+ return nil, err -+ } -+ if proxyURL != nil { -+ newAddr = proxyURL.Host -+ } -+ -+ conn, err = (&net.Dialer{}).DialContext(ctx, "tcp", newAddr) -+ if err != nil { -+ return -+ } -+ if proxyURL != nil { -+ // proxy is disabled if proxyURL is nil. -+ conn, err = doHTTPConnectHandshake(ctx, conn, addr, proxyURL, grpcUA) -+ } -+ return -+} -+ -+func sendHTTPRequest(ctx context.Context, req *http.Request, conn net.Conn) error { -+ req = req.WithContext(ctx) -+ if err := req.Write(conn); err != nil { -+ return fmt.Errorf("failed to write the HTTP request: %v", err) -+ } -+ return nil -+} -diff --git a/vendor/google.golang.org/grpc/internal/transport/transport.go b/vendor/google.golang.org/grpc/internal/transport/transport.go -new file mode 100755 -index 0000000..aa1c896 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/transport/transport.go -@@ -0,0 +1,842 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package transport defines and implements message oriented communication -+// channel to complete various transactions (e.g., an RPC). It is meant for -+// grpc-internal usage and is not intended to be imported directly by users. -+package transport -+ -+import ( -+ "bytes" -+ "context" -+ "errors" -+ "fmt" -+ "io" -+ "net" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/internal/channelz" -+ "google.golang.org/grpc/keepalive" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/resolver" -+ "google.golang.org/grpc/stats" -+ "google.golang.org/grpc/status" -+ "google.golang.org/grpc/tap" -+) -+ -+// ErrNoHeaders is used as a signal that a trailers only response was received, -+// and is not a real error. -+var ErrNoHeaders = errors.New("stream has no headers") -+ -+const logLevel = 2 -+ -+type bufferPool struct { -+ pool sync.Pool -+} -+ -+func newBufferPool() *bufferPool { -+ return &bufferPool{ -+ pool: sync.Pool{ -+ New: func() interface{} { -+ return new(bytes.Buffer) -+ }, -+ }, -+ } -+} -+ -+func (p *bufferPool) get() *bytes.Buffer { -+ return p.pool.Get().(*bytes.Buffer) -+} -+ -+func (p *bufferPool) put(b *bytes.Buffer) { -+ p.pool.Put(b) -+} -+ -+// recvMsg represents the received msg from the transport. All transport -+// protocol specific info has been removed. -+type recvMsg struct { -+ buffer *bytes.Buffer -+ // nil: received some data -+ // io.EOF: stream is completed. data is nil. -+ // other non-nil error: transport failure. data is nil. -+ err error -+} -+ -+// recvBuffer is an unbounded channel of recvMsg structs. -+// -+// Note: recvBuffer differs from buffer.Unbounded only in the fact that it -+// holds a channel of recvMsg structs instead of objects implementing "item" -+// interface. recvBuffer is written to much more often and using strict recvMsg -+// structs helps avoid allocation in "recvBuffer.put" -+type recvBuffer struct { -+ c chan recvMsg -+ mu sync.Mutex -+ backlog []recvMsg -+ err error -+} -+ -+func newRecvBuffer() *recvBuffer { -+ b := &recvBuffer{ -+ c: make(chan recvMsg, 1), -+ } -+ return b -+} -+ -+func (b *recvBuffer) put(r recvMsg) { -+ b.mu.Lock() -+ if b.err != nil { -+ b.mu.Unlock() -+ // An error had occurred earlier, don't accept more -+ // data or errors. -+ return -+ } -+ b.err = r.err -+ if len(b.backlog) == 0 { -+ select { -+ case b.c <- r: -+ b.mu.Unlock() -+ return -+ default: -+ } -+ } -+ b.backlog = append(b.backlog, r) -+ b.mu.Unlock() -+} -+ -+func (b *recvBuffer) load() { -+ b.mu.Lock() -+ if len(b.backlog) > 0 { -+ select { -+ case b.c <- b.backlog[0]: -+ b.backlog[0] = recvMsg{} -+ b.backlog = b.backlog[1:] -+ default: -+ } -+ } -+ b.mu.Unlock() -+} -+ -+// get returns the channel that receives a recvMsg in the buffer. -+// -+// Upon receipt of a recvMsg, the caller should call load to send another -+// recvMsg onto the channel if there is any. -+func (b *recvBuffer) get() <-chan recvMsg { -+ return b.c -+} -+ -+// recvBufferReader implements io.Reader interface to read the data from -+// recvBuffer. -+type recvBufferReader struct { -+ closeStream func(error) // Closes the client transport stream with the given error and nil trailer metadata. -+ ctx context.Context -+ ctxDone <-chan struct{} // cache of ctx.Done() (for performance). -+ recv *recvBuffer -+ last *bytes.Buffer // Stores the remaining data in the previous calls. -+ err error -+ freeBuffer func(*bytes.Buffer) -+} -+ -+// Read reads the next len(p) bytes from last. If last is drained, it tries to -+// read additional data from recv. It blocks if there no additional data available -+// in recv. If Read returns any non-nil error, it will continue to return that error. -+func (r *recvBufferReader) Read(p []byte) (n int, err error) { -+ if r.err != nil { -+ return 0, r.err -+ } -+ if r.last != nil { -+ // Read remaining data left in last call. -+ copied, _ := r.last.Read(p) -+ if r.last.Len() == 0 { -+ r.freeBuffer(r.last) -+ r.last = nil -+ } -+ return copied, nil -+ } -+ if r.closeStream != nil { -+ n, r.err = r.readClient(p) -+ } else { -+ n, r.err = r.read(p) -+ } -+ return n, r.err -+} -+ -+func (r *recvBufferReader) read(p []byte) (n int, err error) { -+ select { -+ case <-r.ctxDone: -+ return 0, ContextErr(r.ctx.Err()) -+ case m := <-r.recv.get(): -+ return r.readAdditional(m, p) -+ } -+} -+ -+func (r *recvBufferReader) readClient(p []byte) (n int, err error) { -+ // If the context is canceled, then closes the stream with nil metadata. -+ // closeStream writes its error parameter to r.recv as a recvMsg. -+ // r.readAdditional acts on that message and returns the necessary error. -+ select { -+ case <-r.ctxDone: -+ // Note that this adds the ctx error to the end of recv buffer, and -+ // reads from the head. This will delay the error until recv buffer is -+ // empty, thus will delay ctx cancellation in Recv(). -+ // -+ // It's done this way to fix a race between ctx cancel and trailer. The -+ // race was, stream.Recv() may return ctx error if ctxDone wins the -+ // race, but stream.Trailer() may return a non-nil md because the stream -+ // was not marked as done when trailer is received. This closeStream -+ // call will mark stream as done, thus fix the race. -+ // -+ // TODO: delaying ctx error seems like a unnecessary side effect. What -+ // we really want is to mark the stream as done, and return ctx error -+ // faster. -+ r.closeStream(ContextErr(r.ctx.Err())) -+ m := <-r.recv.get() -+ return r.readAdditional(m, p) -+ case m := <-r.recv.get(): -+ return r.readAdditional(m, p) -+ } -+} -+ -+func (r *recvBufferReader) readAdditional(m recvMsg, p []byte) (n int, err error) { -+ r.recv.load() -+ if m.err != nil { -+ return 0, m.err -+ } -+ copied, _ := m.buffer.Read(p) -+ if m.buffer.Len() == 0 { -+ r.freeBuffer(m.buffer) -+ r.last = nil -+ } else { -+ r.last = m.buffer -+ } -+ return copied, nil -+} -+ -+type streamState uint32 -+ -+const ( -+ streamActive streamState = iota -+ streamWriteDone // EndStream sent -+ streamReadDone // EndStream received -+ streamDone // the entire stream is finished. -+) -+ -+// Stream represents an RPC in the transport layer. -+type Stream struct { -+ id uint32 -+ st ServerTransport // nil for client side Stream -+ ct *http2Client // nil for server side Stream -+ ctx context.Context // the associated context of the stream -+ cancel context.CancelFunc // always nil for client side Stream -+ done chan struct{} // closed at the end of stream to unblock writers. On the client side. -+ doneFunc func() // invoked at the end of stream on client side. -+ ctxDone <-chan struct{} // same as done chan but for server side. Cache of ctx.Done() (for performance) -+ method string // the associated RPC method of the stream -+ recvCompress string -+ sendCompress string -+ buf *recvBuffer -+ trReader io.Reader -+ fc *inFlow -+ wq *writeQuota -+ -+ // Holds compressor names passed in grpc-accept-encoding metadata from the -+ // client. This is empty for the client side stream. -+ clientAdvertisedCompressors string -+ // Callback to state application's intentions to read data. This -+ // is used to adjust flow control, if needed. -+ requestRead func(int) -+ -+ headerChan chan struct{} // closed to indicate the end of header metadata. -+ headerChanClosed uint32 // set when headerChan is closed. Used to avoid closing headerChan multiple times. -+ // headerValid indicates whether a valid header was received. Only -+ // meaningful after headerChan is closed (always call waitOnHeader() before -+ // reading its value). Not valid on server side. -+ headerValid bool -+ -+ // hdrMu protects header and trailer metadata on the server-side. -+ hdrMu sync.Mutex -+ // On client side, header keeps the received header metadata. -+ // -+ // On server side, header keeps the header set by SetHeader(). The complete -+ // header will merged into this after t.WriteHeader() is called. -+ header metadata.MD -+ trailer metadata.MD // the key-value map of trailer metadata. -+ -+ noHeaders bool // set if the client never received headers (set only after the stream is done). -+ -+ // On the server-side, headerSent is atomically set to 1 when the headers are sent out. -+ headerSent uint32 -+ -+ state streamState -+ -+ // On client-side it is the status error received from the server. -+ // On server-side it is unused. -+ status *status.Status -+ -+ bytesReceived uint32 // indicates whether any bytes have been received on this stream -+ unprocessed uint32 // set if the server sends a refused stream or GOAWAY including this stream -+ -+ // contentSubtype is the content-subtype for requests. -+ // this must be lowercase or the behavior is undefined. -+ contentSubtype string -+} -+ -+// isHeaderSent is only valid on the server-side. -+func (s *Stream) isHeaderSent() bool { -+ return atomic.LoadUint32(&s.headerSent) == 1 -+} -+ -+// updateHeaderSent updates headerSent and returns true -+// if it was alreay set. It is valid only on server-side. -+func (s *Stream) updateHeaderSent() bool { -+ return atomic.SwapUint32(&s.headerSent, 1) == 1 -+} -+ -+func (s *Stream) swapState(st streamState) streamState { -+ return streamState(atomic.SwapUint32((*uint32)(&s.state), uint32(st))) -+} -+ -+func (s *Stream) compareAndSwapState(oldState, newState streamState) bool { -+ return atomic.CompareAndSwapUint32((*uint32)(&s.state), uint32(oldState), uint32(newState)) -+} -+ -+func (s *Stream) getState() streamState { -+ return streamState(atomic.LoadUint32((*uint32)(&s.state))) -+} -+ -+func (s *Stream) waitOnHeader() { -+ if s.headerChan == nil { -+ // On the server headerChan is always nil since a stream originates -+ // only after having received headers. -+ return -+ } -+ select { -+ case <-s.ctx.Done(): -+ // Close the stream to prevent headers/trailers from changing after -+ // this function returns. -+ s.ct.CloseStream(s, ContextErr(s.ctx.Err())) -+ // headerChan could possibly not be closed yet if closeStream raced -+ // with operateHeaders; wait until it is closed explicitly here. -+ <-s.headerChan -+ case <-s.headerChan: -+ } -+} -+ -+// RecvCompress returns the compression algorithm applied to the inbound -+// message. It is empty string if there is no compression applied. -+func (s *Stream) RecvCompress() string { -+ s.waitOnHeader() -+ return s.recvCompress -+} -+ -+// SetSendCompress sets the compression algorithm to the stream. -+func (s *Stream) SetSendCompress(name string) error { -+ if s.isHeaderSent() || s.getState() == streamDone { -+ return errors.New("transport: set send compressor called after headers sent or stream done") -+ } -+ -+ s.sendCompress = name -+ return nil -+} -+ -+// SendCompress returns the send compressor name. -+func (s *Stream) SendCompress() string { -+ return s.sendCompress -+} -+ -+// ClientAdvertisedCompressors returns the compressor names advertised by the -+// client via grpc-accept-encoding header. -+func (s *Stream) ClientAdvertisedCompressors() string { -+ return s.clientAdvertisedCompressors -+} -+ -+// Done returns a channel which is closed when it receives the final status -+// from the server. -+func (s *Stream) Done() <-chan struct{} { -+ return s.done -+} -+ -+// Header returns the header metadata of the stream. -+// -+// On client side, it acquires the key-value pairs of header metadata once it is -+// available. It blocks until i) the metadata is ready or ii) there is no header -+// metadata or iii) the stream is canceled/expired. -+// -+// On server side, it returns the out header after t.WriteHeader is called. It -+// does not block and must not be called until after WriteHeader. -+func (s *Stream) Header() (metadata.MD, error) { -+ if s.headerChan == nil { -+ // On server side, return the header in stream. It will be the out -+ // header after t.WriteHeader is called. -+ return s.header.Copy(), nil -+ } -+ s.waitOnHeader() -+ -+ if !s.headerValid { -+ return nil, s.status.Err() -+ } -+ -+ if s.noHeaders { -+ return nil, ErrNoHeaders -+ } -+ -+ return s.header.Copy(), nil -+} -+ -+// TrailersOnly blocks until a header or trailers-only frame is received and -+// then returns true if the stream was trailers-only. If the stream ends -+// before headers are received, returns true, nil. Client-side only. -+func (s *Stream) TrailersOnly() bool { -+ s.waitOnHeader() -+ return s.noHeaders -+} -+ -+// Trailer returns the cached trailer metedata. Note that if it is not called -+// after the entire stream is done, it could return an empty MD. Client -+// side only. -+// It can be safely read only after stream has ended that is either read -+// or write have returned io.EOF. -+func (s *Stream) Trailer() metadata.MD { -+ c := s.trailer.Copy() -+ return c -+} -+ -+// ContentSubtype returns the content-subtype for a request. For example, a -+// content-subtype of "proto" will result in a content-type of -+// "application/grpc+proto". This will always be lowercase. See -+// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for -+// more details. -+func (s *Stream) ContentSubtype() string { -+ return s.contentSubtype -+} -+ -+// Context returns the context of the stream. -+func (s *Stream) Context() context.Context { -+ return s.ctx -+} -+ -+// Method returns the method for the stream. -+func (s *Stream) Method() string { -+ return s.method -+} -+ -+// Status returns the status received from the server. -+// Status can be read safely only after the stream has ended, -+// that is, after Done() is closed. -+func (s *Stream) Status() *status.Status { -+ return s.status -+} -+ -+// SetHeader sets the header metadata. This can be called multiple times. -+// Server side only. -+// This should not be called in parallel to other data writes. -+func (s *Stream) SetHeader(md metadata.MD) error { -+ if md.Len() == 0 { -+ return nil -+ } -+ if s.isHeaderSent() || s.getState() == streamDone { -+ return ErrIllegalHeaderWrite -+ } -+ s.hdrMu.Lock() -+ s.header = metadata.Join(s.header, md) -+ s.hdrMu.Unlock() -+ return nil -+} -+ -+// SendHeader sends the given header metadata. The given metadata is -+// combined with any metadata set by previous calls to SetHeader and -+// then written to the transport stream. -+func (s *Stream) SendHeader(md metadata.MD) error { -+ return s.st.WriteHeader(s, md) -+} -+ -+// SetTrailer sets the trailer metadata which will be sent with the RPC status -+// by the server. This can be called multiple times. Server side only. -+// This should not be called parallel to other data writes. -+func (s *Stream) SetTrailer(md metadata.MD) error { -+ if md.Len() == 0 { -+ return nil -+ } -+ if s.getState() == streamDone { -+ return ErrIllegalHeaderWrite -+ } -+ s.hdrMu.Lock() -+ s.trailer = metadata.Join(s.trailer, md) -+ s.hdrMu.Unlock() -+ return nil -+} -+ -+func (s *Stream) write(m recvMsg) { -+ s.buf.put(m) -+} -+ -+// Read reads all p bytes from the wire for this stream. -+func (s *Stream) Read(p []byte) (n int, err error) { -+ // Don't request a read if there was an error earlier -+ if er := s.trReader.(*transportReader).er; er != nil { -+ return 0, er -+ } -+ s.requestRead(len(p)) -+ return io.ReadFull(s.trReader, p) -+} -+ -+// tranportReader reads all the data available for this Stream from the transport and -+// passes them into the decoder, which converts them into a gRPC message stream. -+// The error is io.EOF when the stream is done or another non-nil error if -+// the stream broke. -+type transportReader struct { -+ reader io.Reader -+ // The handler to control the window update procedure for both this -+ // particular stream and the associated transport. -+ windowHandler func(int) -+ er error -+} -+ -+func (t *transportReader) Read(p []byte) (n int, err error) { -+ n, err = t.reader.Read(p) -+ if err != nil { -+ t.er = err -+ return -+ } -+ t.windowHandler(n) -+ return -+} -+ -+// BytesReceived indicates whether any bytes have been received on this stream. -+func (s *Stream) BytesReceived() bool { -+ return atomic.LoadUint32(&s.bytesReceived) == 1 -+} -+ -+// Unprocessed indicates whether the server did not process this stream -- -+// i.e. it sent a refused stream or GOAWAY including this stream ID. -+func (s *Stream) Unprocessed() bool { -+ return atomic.LoadUint32(&s.unprocessed) == 1 -+} -+ -+// GoString is implemented by Stream so context.String() won't -+// race when printing %#v. -+func (s *Stream) GoString() string { -+ return fmt.Sprintf("", s, s.method) -+} -+ -+// state of transport -+type transportState int -+ -+const ( -+ reachable transportState = iota -+ closing -+ draining -+) -+ -+// ServerConfig consists of all the configurations to establish a server transport. -+type ServerConfig struct { -+ MaxStreams uint32 -+ ConnectionTimeout time.Duration -+ Credentials credentials.TransportCredentials -+ InTapHandle tap.ServerInHandle -+ StatsHandlers []stats.Handler -+ KeepaliveParams keepalive.ServerParameters -+ KeepalivePolicy keepalive.EnforcementPolicy -+ InitialWindowSize int32 -+ InitialConnWindowSize int32 -+ WriteBufferSize int -+ ReadBufferSize int -+ ChannelzParentID *channelz.Identifier -+ MaxHeaderListSize *uint32 -+ HeaderTableSize *uint32 -+} -+ -+// ConnectOptions covers all relevant options for communicating with the server. -+type ConnectOptions struct { -+ // UserAgent is the application user agent. -+ UserAgent string -+ // Dialer specifies how to dial a network address. -+ Dialer func(context.Context, string) (net.Conn, error) -+ // FailOnNonTempDialError specifies if gRPC fails on non-temporary dial errors. -+ FailOnNonTempDialError bool -+ // PerRPCCredentials stores the PerRPCCredentials required to issue RPCs. -+ PerRPCCredentials []credentials.PerRPCCredentials -+ // TransportCredentials stores the Authenticator required to setup a client -+ // connection. Only one of TransportCredentials and CredsBundle is non-nil. -+ TransportCredentials credentials.TransportCredentials -+ // CredsBundle is the credentials bundle to be used. Only one of -+ // TransportCredentials and CredsBundle is non-nil. -+ CredsBundle credentials.Bundle -+ // KeepaliveParams stores the keepalive parameters. -+ KeepaliveParams keepalive.ClientParameters -+ // StatsHandlers stores the handler for stats. -+ StatsHandlers []stats.Handler -+ // InitialWindowSize sets the initial window size for a stream. -+ InitialWindowSize int32 -+ // InitialConnWindowSize sets the initial window size for a connection. -+ InitialConnWindowSize int32 -+ // WriteBufferSize sets the size of write buffer which in turn determines how much data can be batched before it's written on the wire. -+ WriteBufferSize int -+ // ReadBufferSize sets the size of read buffer, which in turn determines how much data can be read at most for one read syscall. -+ ReadBufferSize int -+ // ChannelzParentID sets the addrConn id which initiate the creation of this client transport. -+ ChannelzParentID *channelz.Identifier -+ // MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received. -+ MaxHeaderListSize *uint32 -+ // UseProxy specifies if a proxy should be used. -+ UseProxy bool -+} -+ -+// NewClientTransport establishes the transport with the required ConnectOptions -+// and returns it to the caller. -+func NewClientTransport(connectCtx, ctx context.Context, addr resolver.Address, opts ConnectOptions, onClose func(GoAwayReason)) (ClientTransport, error) { -+ return newHTTP2Client(connectCtx, ctx, addr, opts, onClose) -+} -+ -+// Options provides additional hints and information for message -+// transmission. -+type Options struct { -+ // Last indicates whether this write is the last piece for -+ // this stream. -+ Last bool -+} -+ -+// CallHdr carries the information of a particular RPC. -+type CallHdr struct { -+ // Host specifies the peer's host. -+ Host string -+ -+ // Method specifies the operation to perform. -+ Method string -+ -+ // SendCompress specifies the compression algorithm applied on -+ // outbound message. -+ SendCompress string -+ -+ // Creds specifies credentials.PerRPCCredentials for a call. -+ Creds credentials.PerRPCCredentials -+ -+ // ContentSubtype specifies the content-subtype for a request. For example, a -+ // content-subtype of "proto" will result in a content-type of -+ // "application/grpc+proto". The value of ContentSubtype must be all -+ // lowercase, otherwise the behavior is undefined. See -+ // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests -+ // for more details. -+ ContentSubtype string -+ -+ PreviousAttempts int // value of grpc-previous-rpc-attempts header to set -+ -+ DoneFunc func() // called when the stream is finished -+} -+ -+// ClientTransport is the common interface for all gRPC client-side transport -+// implementations. -+type ClientTransport interface { -+ // Close tears down this transport. Once it returns, the transport -+ // should not be accessed any more. The caller must make sure this -+ // is called only once. -+ Close(err error) -+ -+ // GracefulClose starts to tear down the transport: the transport will stop -+ // accepting new RPCs and NewStream will return error. Once all streams are -+ // finished, the transport will close. -+ // -+ // It does not block. -+ GracefulClose() -+ -+ // Write sends the data for the given stream. A nil stream indicates -+ // the write is to be performed on the transport as a whole. -+ Write(s *Stream, hdr []byte, data []byte, opts *Options) error -+ -+ // NewStream creates a Stream for an RPC. -+ NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, error) -+ -+ // CloseStream clears the footprint of a stream when the stream is -+ // not needed any more. The err indicates the error incurred when -+ // CloseStream is called. Must be called when a stream is finished -+ // unless the associated transport is closing. -+ CloseStream(stream *Stream, err error) -+ -+ // Error returns a channel that is closed when some I/O error -+ // happens. Typically the caller should have a goroutine to monitor -+ // this in order to take action (e.g., close the current transport -+ // and create a new one) in error case. It should not return nil -+ // once the transport is initiated. -+ Error() <-chan struct{} -+ -+ // GoAway returns a channel that is closed when ClientTransport -+ // receives the draining signal from the server (e.g., GOAWAY frame in -+ // HTTP/2). -+ GoAway() <-chan struct{} -+ -+ // GetGoAwayReason returns the reason why GoAway frame was received, along -+ // with a human readable string with debug info. -+ GetGoAwayReason() (GoAwayReason, string) -+ -+ // RemoteAddr returns the remote network address. -+ RemoteAddr() net.Addr -+ -+ // IncrMsgSent increments the number of message sent through this transport. -+ IncrMsgSent() -+ -+ // IncrMsgRecv increments the number of message received through this transport. -+ IncrMsgRecv() -+} -+ -+// ServerTransport is the common interface for all gRPC server-side transport -+// implementations. -+// -+// Methods may be called concurrently from multiple goroutines, but -+// Write methods for a given Stream will be called serially. -+type ServerTransport interface { -+ // HandleStreams receives incoming streams using the given handler. -+ HandleStreams(func(*Stream), func(context.Context, string) context.Context) -+ -+ // WriteHeader sends the header metadata for the given stream. -+ // WriteHeader may not be called on all streams. -+ WriteHeader(s *Stream, md metadata.MD) error -+ -+ // Write sends the data for the given stream. -+ // Write may not be called on all streams. -+ Write(s *Stream, hdr []byte, data []byte, opts *Options) error -+ -+ // WriteStatus sends the status of a stream to the client. WriteStatus is -+ // the final call made on a stream and always occurs. -+ WriteStatus(s *Stream, st *status.Status) error -+ -+ // Close tears down the transport. Once it is called, the transport -+ // should not be accessed any more. All the pending streams and their -+ // handlers will be terminated asynchronously. -+ Close(err error) -+ -+ // RemoteAddr returns the remote network address. -+ RemoteAddr() net.Addr -+ -+ // Drain notifies the client this ServerTransport stops accepting new RPCs. -+ Drain(debugData string) -+ -+ // IncrMsgSent increments the number of message sent through this transport. -+ IncrMsgSent() -+ -+ // IncrMsgRecv increments the number of message received through this transport. -+ IncrMsgRecv() -+} -+ -+// connectionErrorf creates an ConnectionError with the specified error description. -+func connectionErrorf(temp bool, e error, format string, a ...interface{}) ConnectionError { -+ return ConnectionError{ -+ Desc: fmt.Sprintf(format, a...), -+ temp: temp, -+ err: e, -+ } -+} -+ -+// ConnectionError is an error that results in the termination of the -+// entire connection and the retry of all the active streams. -+type ConnectionError struct { -+ Desc string -+ temp bool -+ err error -+} -+ -+func (e ConnectionError) Error() string { -+ return fmt.Sprintf("connection error: desc = %q", e.Desc) -+} -+ -+// Temporary indicates if this connection error is temporary or fatal. -+func (e ConnectionError) Temporary() bool { -+ return e.temp -+} -+ -+// Origin returns the original error of this connection error. -+func (e ConnectionError) Origin() error { -+ // Never return nil error here. -+ // If the original error is nil, return itself. -+ if e.err == nil { -+ return e -+ } -+ return e.err -+} -+ -+// Unwrap returns the original error of this connection error or nil when the -+// origin is nil. -+func (e ConnectionError) Unwrap() error { -+ return e.err -+} -+ -+var ( -+ // ErrConnClosing indicates that the transport is closing. -+ ErrConnClosing = connectionErrorf(true, nil, "transport is closing") -+ // errStreamDrain indicates that the stream is rejected because the -+ // connection is draining. This could be caused by goaway or balancer -+ // removing the address. -+ errStreamDrain = status.Error(codes.Unavailable, "the connection is draining") -+ // errStreamDone is returned from write at the client side to indiacte application -+ // layer of an error. -+ errStreamDone = errors.New("the stream is done") -+ // StatusGoAway indicates that the server sent a GOAWAY that included this -+ // stream's ID in unprocessed RPCs. -+ statusGoAway = status.New(codes.Unavailable, "the stream is rejected because server is draining the connection") -+) -+ -+// GoAwayReason contains the reason for the GoAway frame received. -+type GoAwayReason uint8 -+ -+const ( -+ // GoAwayInvalid indicates that no GoAway frame is received. -+ GoAwayInvalid GoAwayReason = 0 -+ // GoAwayNoReason is the default value when GoAway frame is received. -+ GoAwayNoReason GoAwayReason = 1 -+ // GoAwayTooManyPings indicates that a GoAway frame with -+ // ErrCodeEnhanceYourCalm was received and that the debug data said -+ // "too_many_pings". -+ GoAwayTooManyPings GoAwayReason = 2 -+) -+ -+// channelzData is used to store channelz related data for http2Client and http2Server. -+// These fields cannot be embedded in the original structs (e.g. http2Client), since to do atomic -+// operation on int64 variable on 32-bit machine, user is responsible to enforce memory alignment. -+// Here, by grouping those int64 fields inside a struct, we are enforcing the alignment. -+type channelzData struct { -+ kpCount int64 -+ // The number of streams that have started, including already finished ones. -+ streamsStarted int64 -+ // Client side: The number of streams that have ended successfully by receiving -+ // EoS bit set frame from server. -+ // Server side: The number of streams that have ended successfully by sending -+ // frame with EoS bit set. -+ streamsSucceeded int64 -+ streamsFailed int64 -+ // lastStreamCreatedTime stores the timestamp that the last stream gets created. It is of int64 type -+ // instead of time.Time since it's more costly to atomically update time.Time variable than int64 -+ // variable. The same goes for lastMsgSentTime and lastMsgRecvTime. -+ lastStreamCreatedTime int64 -+ msgSent int64 -+ msgRecv int64 -+ lastMsgSentTime int64 -+ lastMsgRecvTime int64 -+} -+ -+// ContextErr converts the error from context package into a status error. -+func ContextErr(err error) error { -+ switch err { -+ case context.DeadlineExceeded: -+ return status.Error(codes.DeadlineExceeded, err.Error()) -+ case context.Canceled: -+ return status.Error(codes.Canceled, err.Error()) -+ } -+ return status.Errorf(codes.Internal, "Unexpected error from context packet: %v", err) -+} -diff --git a/vendor/google.golang.org/grpc/internal/xds_handshake_cluster.go b/vendor/google.golang.org/grpc/internal/xds_handshake_cluster.go -new file mode 100755 -index 0000000..e8b4927 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/internal/xds_handshake_cluster.go -@@ -0,0 +1,40 @@ -+/* -+ * Copyright 2021 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ */ -+ -+package internal -+ -+import ( -+ "google.golang.org/grpc/attributes" -+ "google.golang.org/grpc/resolver" -+) -+ -+// handshakeClusterNameKey is the type used as the key to store cluster name in -+// the Attributes field of resolver.Address. -+type handshakeClusterNameKey struct{} -+ -+// SetXDSHandshakeClusterName returns a copy of addr in which the Attributes field -+// is updated with the cluster name. -+func SetXDSHandshakeClusterName(addr resolver.Address, clusterName string) resolver.Address { -+ addr.Attributes = addr.Attributes.WithValue(handshakeClusterNameKey{}, clusterName) -+ return addr -+} -+ -+// GetXDSHandshakeClusterName returns cluster name stored in attr. -+func GetXDSHandshakeClusterName(attr *attributes.Attributes) (string, bool) { -+ v := attr.Value(handshakeClusterNameKey{}) -+ name, ok := v.(string) -+ return name, ok -+} -diff --git a/vendor/google.golang.org/grpc/keepalive/keepalive.go b/vendor/google.golang.org/grpc/keepalive/keepalive.go -new file mode 100755 -index 0000000..34d31b5 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/keepalive/keepalive.go -@@ -0,0 +1,85 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package keepalive defines configurable parameters for point-to-point -+// healthcheck. -+package keepalive -+ -+import ( -+ "time" -+) -+ -+// ClientParameters is used to set keepalive parameters on the client-side. -+// These configure how the client will actively probe to notice when a -+// connection is broken and send pings so intermediaries will be aware of the -+// liveness of the connection. Make sure these parameters are set in -+// coordination with the keepalive policy on the server, as incompatible -+// settings can result in closing of connection. -+type ClientParameters struct { -+ // After a duration of this time if the client doesn't see any activity it -+ // pings the server to see if the transport is still alive. -+ // If set below 10s, a minimum value of 10s will be used instead. -+ Time time.Duration // The current default value is infinity. -+ // After having pinged for keepalive check, the client waits for a duration -+ // of Timeout and if no activity is seen even after that the connection is -+ // closed. -+ Timeout time.Duration // The current default value is 20 seconds. -+ // If true, client sends keepalive pings even with no active RPCs. If false, -+ // when there are no active RPCs, Time and Timeout will be ignored and no -+ // keepalive pings will be sent. -+ PermitWithoutStream bool // false by default. -+} -+ -+// ServerParameters is used to set keepalive and max-age parameters on the -+// server-side. -+type ServerParameters struct { -+ // MaxConnectionIdle is a duration for the amount of time after which an -+ // idle connection would be closed by sending a GoAway. Idleness duration is -+ // defined since the most recent time the number of outstanding RPCs became -+ // zero or the connection establishment. -+ MaxConnectionIdle time.Duration // The current default value is infinity. -+ // MaxConnectionAge is a duration for the maximum amount of time a -+ // connection may exist before it will be closed by sending a GoAway. A -+ // random jitter of +/-10% will be added to MaxConnectionAge to spread out -+ // connection storms. -+ MaxConnectionAge time.Duration // The current default value is infinity. -+ // MaxConnectionAgeGrace is an additive period after MaxConnectionAge after -+ // which the connection will be forcibly closed. -+ MaxConnectionAgeGrace time.Duration // The current default value is infinity. -+ // After a duration of this time if the server doesn't see any activity it -+ // pings the client to see if the transport is still alive. -+ // If set below 1s, a minimum value of 1s will be used instead. -+ Time time.Duration // The current default value is 2 hours. -+ // After having pinged for keepalive check, the server waits for a duration -+ // of Timeout and if no activity is seen even after that the connection is -+ // closed. -+ Timeout time.Duration // The current default value is 20 seconds. -+} -+ -+// EnforcementPolicy is used to set keepalive enforcement policy on the -+// server-side. Server will close connection with a client that violates this -+// policy. -+type EnforcementPolicy struct { -+ // MinTime is the minimum amount of time a client should wait before sending -+ // a keepalive ping. -+ MinTime time.Duration // The current default value is 5 minutes. -+ // If true, server allows keepalive pings even when there are no active -+ // streams(RPCs). If false, and client sends ping when there are no active -+ // streams, server will send GOAWAY and close the connection. -+ PermitWithoutStream bool // false by default. -+} -diff --git a/vendor/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go -new file mode 100755 -index 0000000..a2cdcaf ---- /dev/null -+++ b/vendor/google.golang.org/grpc/metadata/metadata.go -@@ -0,0 +1,295 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package metadata define the structure of the metadata supported by gRPC library. -+// Please refer to https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md -+// for more information about custom-metadata. -+package metadata // import "google.golang.org/grpc/metadata" -+ -+import ( -+ "context" -+ "fmt" -+ "strings" -+) -+ -+// DecodeKeyValue returns k, v, nil. -+// -+// Deprecated: use k and v directly instead. -+func DecodeKeyValue(k, v string) (string, string, error) { -+ return k, v, nil -+} -+ -+// MD is a mapping from metadata keys to values. Users should use the following -+// two convenience functions New and Pairs to generate MD. -+type MD map[string][]string -+ -+// New creates an MD from a given key-value map. -+// -+// Only the following ASCII characters are allowed in keys: -+// - digits: 0-9 -+// - uppercase letters: A-Z (normalized to lower) -+// - lowercase letters: a-z -+// - special characters: -_. -+// -+// Uppercase letters are automatically converted to lowercase. -+// -+// Keys beginning with "grpc-" are reserved for grpc-internal use only and may -+// result in errors if set in metadata. -+func New(m map[string]string) MD { -+ md := make(MD, len(m)) -+ for k, val := range m { -+ key := strings.ToLower(k) -+ md[key] = append(md[key], val) -+ } -+ return md -+} -+ -+// Pairs returns an MD formed by the mapping of key, value ... -+// Pairs panics if len(kv) is odd. -+// -+// Only the following ASCII characters are allowed in keys: -+// - digits: 0-9 -+// - uppercase letters: A-Z (normalized to lower) -+// - lowercase letters: a-z -+// - special characters: -_. -+// -+// Uppercase letters are automatically converted to lowercase. -+// -+// Keys beginning with "grpc-" are reserved for grpc-internal use only and may -+// result in errors if set in metadata. -+func Pairs(kv ...string) MD { -+ if len(kv)%2 == 1 { -+ panic(fmt.Sprintf("metadata: Pairs got the odd number of input pairs for metadata: %d", len(kv))) -+ } -+ md := make(MD, len(kv)/2) -+ for i := 0; i < len(kv); i += 2 { -+ key := strings.ToLower(kv[i]) -+ md[key] = append(md[key], kv[i+1]) -+ } -+ return md -+} -+ -+// Len returns the number of items in md. -+func (md MD) Len() int { -+ return len(md) -+} -+ -+// Copy returns a copy of md. -+func (md MD) Copy() MD { -+ out := make(MD, len(md)) -+ for k, v := range md { -+ out[k] = copyOf(v) -+ } -+ return out -+} -+ -+// Get obtains the values for a given key. -+// -+// k is converted to lowercase before searching in md. -+func (md MD) Get(k string) []string { -+ k = strings.ToLower(k) -+ return md[k] -+} -+ -+// Set sets the value of a given key with a slice of values. -+// -+// k is converted to lowercase before storing in md. -+func (md MD) Set(k string, vals ...string) { -+ if len(vals) == 0 { -+ return -+ } -+ k = strings.ToLower(k) -+ md[k] = vals -+} -+ -+// Append adds the values to key k, not overwriting what was already stored at -+// that key. -+// -+// k is converted to lowercase before storing in md. -+func (md MD) Append(k string, vals ...string) { -+ if len(vals) == 0 { -+ return -+ } -+ k = strings.ToLower(k) -+ md[k] = append(md[k], vals...) -+} -+ -+// Delete removes the values for a given key k which is converted to lowercase -+// before removing it from md. -+func (md MD) Delete(k string) { -+ k = strings.ToLower(k) -+ delete(md, k) -+} -+ -+// Join joins any number of mds into a single MD. -+// -+// The order of values for each key is determined by the order in which the mds -+// containing those values are presented to Join. -+func Join(mds ...MD) MD { -+ out := MD{} -+ for _, md := range mds { -+ for k, v := range md { -+ out[k] = append(out[k], v...) -+ } -+ } -+ return out -+} -+ -+type mdIncomingKey struct{} -+type mdOutgoingKey struct{} -+ -+// NewIncomingContext creates a new context with incoming md attached. -+func NewIncomingContext(ctx context.Context, md MD) context.Context { -+ return context.WithValue(ctx, mdIncomingKey{}, md) -+} -+ -+// NewOutgoingContext creates a new context with outgoing md attached. If used -+// in conjunction with AppendToOutgoingContext, NewOutgoingContext will -+// overwrite any previously-appended metadata. -+func NewOutgoingContext(ctx context.Context, md MD) context.Context { -+ return context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md}) -+} -+ -+// AppendToOutgoingContext returns a new context with the provided kv merged -+// with any existing metadata in the context. Please refer to the documentation -+// of Pairs for a description of kv. -+func AppendToOutgoingContext(ctx context.Context, kv ...string) context.Context { -+ if len(kv)%2 == 1 { -+ panic(fmt.Sprintf("metadata: AppendToOutgoingContext got an odd number of input pairs for metadata: %d", len(kv))) -+ } -+ md, _ := ctx.Value(mdOutgoingKey{}).(rawMD) -+ added := make([][]string, len(md.added)+1) -+ copy(added, md.added) -+ kvCopy := make([]string, 0, len(kv)) -+ for i := 0; i < len(kv); i += 2 { -+ kvCopy = append(kvCopy, strings.ToLower(kv[i]), kv[i+1]) -+ } -+ added[len(added)-1] = kvCopy -+ return context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md.md, added: added}) -+} -+ -+// FromIncomingContext returns the incoming metadata in ctx if it exists. -+// -+// All keys in the returned MD are lowercase. -+func FromIncomingContext(ctx context.Context) (MD, bool) { -+ md, ok := ctx.Value(mdIncomingKey{}).(MD) -+ if !ok { -+ return nil, false -+ } -+ out := make(MD, len(md)) -+ for k, v := range md { -+ // We need to manually convert all keys to lower case, because MD is a -+ // map, and there's no guarantee that the MD attached to the context is -+ // created using our helper functions. -+ key := strings.ToLower(k) -+ out[key] = copyOf(v) -+ } -+ return out, true -+} -+ -+// ValueFromIncomingContext returns the metadata value corresponding to the metadata -+// key from the incoming metadata if it exists. Key must be lower-case. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func ValueFromIncomingContext(ctx context.Context, key string) []string { -+ md, ok := ctx.Value(mdIncomingKey{}).(MD) -+ if !ok { -+ return nil -+ } -+ -+ if v, ok := md[key]; ok { -+ return copyOf(v) -+ } -+ for k, v := range md { -+ // We need to manually convert all keys to lower case, because MD is a -+ // map, and there's no guarantee that the MD attached to the context is -+ // created using our helper functions. -+ if strings.ToLower(k) == key { -+ return copyOf(v) -+ } -+ } -+ return nil -+} -+ -+// the returned slice must not be modified in place -+func copyOf(v []string) []string { -+ vals := make([]string, len(v)) -+ copy(vals, v) -+ return vals -+} -+ -+// FromOutgoingContextRaw returns the un-merged, intermediary contents of rawMD. -+// -+// Remember to perform strings.ToLower on the keys, for both the returned MD (MD -+// is a map, there's no guarantee it's created using our helper functions) and -+// the extra kv pairs (AppendToOutgoingContext doesn't turn them into -+// lowercase). -+// -+// This is intended for gRPC-internal use ONLY. Users should use -+// FromOutgoingContext instead. -+func FromOutgoingContextRaw(ctx context.Context) (MD, [][]string, bool) { -+ raw, ok := ctx.Value(mdOutgoingKey{}).(rawMD) -+ if !ok { -+ return nil, nil, false -+ } -+ -+ return raw.md, raw.added, true -+} -+ -+// FromOutgoingContext returns the outgoing metadata in ctx if it exists. -+// -+// All keys in the returned MD are lowercase. -+func FromOutgoingContext(ctx context.Context) (MD, bool) { -+ raw, ok := ctx.Value(mdOutgoingKey{}).(rawMD) -+ if !ok { -+ return nil, false -+ } -+ -+ mdSize := len(raw.md) -+ for i := range raw.added { -+ mdSize += len(raw.added[i]) / 2 -+ } -+ -+ out := make(MD, mdSize) -+ for k, v := range raw.md { -+ // We need to manually convert all keys to lower case, because MD is a -+ // map, and there's no guarantee that the MD attached to the context is -+ // created using our helper functions. -+ key := strings.ToLower(k) -+ out[key] = copyOf(v) -+ } -+ for _, added := range raw.added { -+ if len(added)%2 == 1 { -+ panic(fmt.Sprintf("metadata: FromOutgoingContext got an odd number of input pairs for metadata: %d", len(added))) -+ } -+ -+ for i := 0; i < len(added); i += 2 { -+ key := strings.ToLower(added[i]) -+ out[key] = append(out[key], added[i+1]) -+ } -+ } -+ return out, ok -+} -+ -+type rawMD struct { -+ md MD -+ added [][]string -+} -diff --git a/vendor/google.golang.org/grpc/peer/peer.go b/vendor/google.golang.org/grpc/peer/peer.go -new file mode 100755 -index 0000000..e01d219 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/peer/peer.go -@@ -0,0 +1,51 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package peer defines various peer information associated with RPCs and -+// corresponding utils. -+package peer -+ -+import ( -+ "context" -+ "net" -+ -+ "google.golang.org/grpc/credentials" -+) -+ -+// Peer contains the information of the peer for an RPC, such as the address -+// and authentication information. -+type Peer struct { -+ // Addr is the peer address. -+ Addr net.Addr -+ // AuthInfo is the authentication information of the transport. -+ // It is nil if there is no transport security being used. -+ AuthInfo credentials.AuthInfo -+} -+ -+type peerKey struct{} -+ -+// NewContext creates a new context with peer information attached. -+func NewContext(ctx context.Context, p *Peer) context.Context { -+ return context.WithValue(ctx, peerKey{}, p) -+} -+ -+// FromContext returns the peer information in ctx if it exists. -+func FromContext(ctx context.Context) (p *Peer, ok bool) { -+ p, ok = ctx.Value(peerKey{}).(*Peer) -+ return -+} -diff --git a/vendor/google.golang.org/grpc/picker_wrapper.go b/vendor/google.golang.org/grpc/picker_wrapper.go -new file mode 100755 -index 0000000..02f9759 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/picker_wrapper.go -@@ -0,0 +1,216 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+ "io" -+ "sync" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/internal/channelz" -+ istatus "google.golang.org/grpc/internal/status" -+ "google.golang.org/grpc/internal/transport" -+ "google.golang.org/grpc/status" -+) -+ -+// pickerWrapper is a wrapper of balancer.Picker. It blocks on certain pick -+// actions and unblock when there's a picker update. -+type pickerWrapper struct { -+ mu sync.Mutex -+ done bool -+ idle bool -+ blockingCh chan struct{} -+ picker balancer.Picker -+} -+ -+func newPickerWrapper() *pickerWrapper { -+ return &pickerWrapper{blockingCh: make(chan struct{})} -+} -+ -+// updatePicker is called by UpdateBalancerState. It unblocks all blocked pick. -+func (pw *pickerWrapper) updatePicker(p balancer.Picker) { -+ pw.mu.Lock() -+ if pw.done || pw.idle { -+ // There is a small window where a picker update from the LB policy can -+ // race with the channel going to idle mode. If the picker is idle here, -+ // it is because the channel asked it to do so, and therefore it is sage -+ // to ignore the update from the LB policy. -+ pw.mu.Unlock() -+ return -+ } -+ pw.picker = p -+ // pw.blockingCh should never be nil. -+ close(pw.blockingCh) -+ pw.blockingCh = make(chan struct{}) -+ pw.mu.Unlock() -+} -+ -+// doneChannelzWrapper performs the following: -+// - increments the calls started channelz counter -+// - wraps the done function in the passed in result to increment the calls -+// failed or calls succeeded channelz counter before invoking the actual -+// done function. -+func doneChannelzWrapper(acbw *acBalancerWrapper, result *balancer.PickResult) { -+ ac := acbw.ac -+ ac.incrCallsStarted() -+ done := result.Done -+ result.Done = func(b balancer.DoneInfo) { -+ if b.Err != nil && b.Err != io.EOF { -+ ac.incrCallsFailed() -+ } else { -+ ac.incrCallsSucceeded() -+ } -+ if done != nil { -+ done(b) -+ } -+ } -+} -+ -+// pick returns the transport that will be used for the RPC. -+// It may block in the following cases: -+// - there's no picker -+// - the current picker returns ErrNoSubConnAvailable -+// - the current picker returns other errors and failfast is false. -+// - the subConn returned by the current picker is not READY -+// When one of these situations happens, pick blocks until the picker gets updated. -+func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.PickInfo) (transport.ClientTransport, balancer.PickResult, error) { -+ var ch chan struct{} -+ -+ var lastPickErr error -+ for { -+ pw.mu.Lock() -+ if pw.done { -+ pw.mu.Unlock() -+ return nil, balancer.PickResult{}, ErrClientConnClosing -+ } -+ -+ if pw.picker == nil { -+ ch = pw.blockingCh -+ } -+ if ch == pw.blockingCh { -+ // This could happen when either: -+ // - pw.picker is nil (the previous if condition), or -+ // - has called pick on the current picker. -+ pw.mu.Unlock() -+ select { -+ case <-ctx.Done(): -+ var errStr string -+ if lastPickErr != nil { -+ errStr = "latest balancer error: " + lastPickErr.Error() -+ } else { -+ errStr = ctx.Err().Error() -+ } -+ switch ctx.Err() { -+ case context.DeadlineExceeded: -+ return nil, balancer.PickResult{}, status.Error(codes.DeadlineExceeded, errStr) -+ case context.Canceled: -+ return nil, balancer.PickResult{}, status.Error(codes.Canceled, errStr) -+ } -+ case <-ch: -+ } -+ continue -+ } -+ -+ ch = pw.blockingCh -+ p := pw.picker -+ pw.mu.Unlock() -+ -+ pickResult, err := p.Pick(info) -+ if err != nil { -+ if err == balancer.ErrNoSubConnAvailable { -+ continue -+ } -+ if st, ok := status.FromError(err); ok { -+ // Status error: end the RPC unconditionally with this status. -+ // First restrict the code to the list allowed by gRFC A54. -+ if istatus.IsRestrictedControlPlaneCode(st) { -+ err = status.Errorf(codes.Internal, "received picker error with illegal status: %v", err) -+ } -+ return nil, balancer.PickResult{}, dropError{error: err} -+ } -+ // For all other errors, wait for ready RPCs should block and other -+ // RPCs should fail with unavailable. -+ if !failfast { -+ lastPickErr = err -+ continue -+ } -+ return nil, balancer.PickResult{}, status.Error(codes.Unavailable, err.Error()) -+ } -+ -+ acbw, ok := pickResult.SubConn.(*acBalancerWrapper) -+ if !ok { -+ logger.Errorf("subconn returned from pick is type %T, not *acBalancerWrapper", pickResult.SubConn) -+ continue -+ } -+ if t := acbw.ac.getReadyTransport(); t != nil { -+ if channelz.IsOn() { -+ doneChannelzWrapper(acbw, &pickResult) -+ return t, pickResult, nil -+ } -+ return t, pickResult, nil -+ } -+ if pickResult.Done != nil { -+ // Calling done with nil error, no bytes sent and no bytes received. -+ // DoneInfo with default value works. -+ pickResult.Done(balancer.DoneInfo{}) -+ } -+ logger.Infof("blockingPicker: the picked transport is not ready, loop back to repick") -+ // If ok == false, ac.state is not READY. -+ // A valid picker always returns READY subConn. This means the state of ac -+ // just changed, and picker will be updated shortly. -+ // continue back to the beginning of the for loop to repick. -+ } -+} -+ -+func (pw *pickerWrapper) close() { -+ pw.mu.Lock() -+ defer pw.mu.Unlock() -+ if pw.done { -+ return -+ } -+ pw.done = true -+ close(pw.blockingCh) -+} -+ -+func (pw *pickerWrapper) enterIdleMode() { -+ pw.mu.Lock() -+ defer pw.mu.Unlock() -+ if pw.done { -+ return -+ } -+ pw.idle = true -+} -+ -+func (pw *pickerWrapper) exitIdleMode() { -+ pw.mu.Lock() -+ defer pw.mu.Unlock() -+ if pw.done { -+ return -+ } -+ pw.blockingCh = make(chan struct{}) -+ pw.idle = false -+} -+ -+// dropError is a wrapper error that indicates the LB policy wishes to drop the -+// RPC and not retry it. -+type dropError struct { -+ error -+} -diff --git a/vendor/google.golang.org/grpc/pickfirst.go b/vendor/google.golang.org/grpc/pickfirst.go -new file mode 100755 -index 0000000..abe266b ---- /dev/null -+++ b/vendor/google.golang.org/grpc/pickfirst.go -@@ -0,0 +1,227 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "encoding/json" -+ "errors" -+ "fmt" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/connectivity" -+ "google.golang.org/grpc/internal/envconfig" -+ "google.golang.org/grpc/internal/grpcrand" -+ "google.golang.org/grpc/serviceconfig" -+) -+ -+// PickFirstBalancerName is the name of the pick_first balancer. -+const PickFirstBalancerName = "pick_first" -+ -+func newPickfirstBuilder() balancer.Builder { -+ return &pickfirstBuilder{} -+} -+ -+type pickfirstBuilder struct{} -+ -+func (*pickfirstBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { -+ return &pickfirstBalancer{cc: cc} -+} -+ -+func (*pickfirstBuilder) Name() string { -+ return PickFirstBalancerName -+} -+ -+type pfConfig struct { -+ serviceconfig.LoadBalancingConfig `json:"-"` -+ -+ // If set to true, instructs the LB policy to shuffle the order of the list -+ // of addresses received from the name resolver before attempting to -+ // connect to them. -+ ShuffleAddressList bool `json:"shuffleAddressList"` -+} -+ -+func (*pickfirstBuilder) ParseConfig(js json.RawMessage) (serviceconfig.LoadBalancingConfig, error) { -+ cfg := &pfConfig{} -+ if err := json.Unmarshal(js, cfg); err != nil { -+ return nil, fmt.Errorf("pickfirst: unable to unmarshal LB policy config: %s, error: %v", string(js), err) -+ } -+ return cfg, nil -+} -+ -+type pickfirstBalancer struct { -+ state connectivity.State -+ cc balancer.ClientConn -+ subConn balancer.SubConn -+ cfg *pfConfig -+} -+ -+func (b *pickfirstBalancer) ResolverError(err error) { -+ if logger.V(2) { -+ logger.Infof("pickfirstBalancer: ResolverError called with error: %v", err) -+ } -+ if b.subConn == nil { -+ b.state = connectivity.TransientFailure -+ } -+ -+ if b.state != connectivity.TransientFailure { -+ // The picker will not change since the balancer does not currently -+ // report an error. -+ return -+ } -+ b.cc.UpdateState(balancer.State{ -+ ConnectivityState: connectivity.TransientFailure, -+ Picker: &picker{err: fmt.Errorf("name resolver error: %v", err)}, -+ }) -+} -+ -+func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error { -+ addrs := state.ResolverState.Addresses -+ if len(addrs) == 0 { -+ // The resolver reported an empty address list. Treat it like an error by -+ // calling b.ResolverError. -+ if b.subConn != nil { -+ // Remove the old subConn. All addresses were removed, so it is no longer -+ // valid. -+ b.cc.RemoveSubConn(b.subConn) -+ b.subConn = nil -+ } -+ b.ResolverError(errors.New("produced zero addresses")) -+ return balancer.ErrBadResolverState -+ } -+ -+ if state.BalancerConfig != nil { -+ cfg, ok := state.BalancerConfig.(*pfConfig) -+ if !ok { -+ return fmt.Errorf("pickfirstBalancer: received nil or illegal BalancerConfig (type %T): %v", state.BalancerConfig, state.BalancerConfig) -+ } -+ b.cfg = cfg -+ } -+ -+ if envconfig.PickFirstLBConfig && b.cfg != nil && b.cfg.ShuffleAddressList { -+ grpcrand.Shuffle(len(addrs), func(i, j int) { addrs[i], addrs[j] = addrs[j], addrs[i] }) -+ } -+ if b.subConn != nil { -+ b.cc.UpdateAddresses(b.subConn, addrs) -+ return nil -+ } -+ -+ subConn, err := b.cc.NewSubConn(addrs, balancer.NewSubConnOptions{}) -+ if err != nil { -+ if logger.V(2) { -+ logger.Errorf("pickfirstBalancer: failed to NewSubConn: %v", err) -+ } -+ b.state = connectivity.TransientFailure -+ b.cc.UpdateState(balancer.State{ -+ ConnectivityState: connectivity.TransientFailure, -+ Picker: &picker{err: fmt.Errorf("error creating connection: %v", err)}, -+ }) -+ return balancer.ErrBadResolverState -+ } -+ b.subConn = subConn -+ b.state = connectivity.Idle -+ b.cc.UpdateState(balancer.State{ -+ ConnectivityState: connectivity.Connecting, -+ Picker: &picker{err: balancer.ErrNoSubConnAvailable}, -+ }) -+ b.subConn.Connect() -+ return nil -+} -+ -+func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) { -+ if logger.V(2) { -+ logger.Infof("pickfirstBalancer: UpdateSubConnState: %p, %v", subConn, state) -+ } -+ if b.subConn != subConn { -+ if logger.V(2) { -+ logger.Infof("pickfirstBalancer: ignored state change because subConn is not recognized") -+ } -+ return -+ } -+ if state.ConnectivityState == connectivity.Shutdown { -+ b.subConn = nil -+ return -+ } -+ -+ switch state.ConnectivityState { -+ case connectivity.Ready: -+ b.cc.UpdateState(balancer.State{ -+ ConnectivityState: state.ConnectivityState, -+ Picker: &picker{result: balancer.PickResult{SubConn: subConn}}, -+ }) -+ case connectivity.Connecting: -+ if b.state == connectivity.TransientFailure { -+ // We stay in TransientFailure until we are Ready. See A62. -+ return -+ } -+ b.cc.UpdateState(balancer.State{ -+ ConnectivityState: state.ConnectivityState, -+ Picker: &picker{err: balancer.ErrNoSubConnAvailable}, -+ }) -+ case connectivity.Idle: -+ if b.state == connectivity.TransientFailure { -+ // We stay in TransientFailure until we are Ready. Also kick the -+ // subConn out of Idle into Connecting. See A62. -+ b.subConn.Connect() -+ return -+ } -+ b.cc.UpdateState(balancer.State{ -+ ConnectivityState: state.ConnectivityState, -+ Picker: &idlePicker{subConn: subConn}, -+ }) -+ case connectivity.TransientFailure: -+ b.cc.UpdateState(balancer.State{ -+ ConnectivityState: state.ConnectivityState, -+ Picker: &picker{err: state.ConnectionError}, -+ }) -+ } -+ b.state = state.ConnectivityState -+} -+ -+func (b *pickfirstBalancer) Close() { -+} -+ -+func (b *pickfirstBalancer) ExitIdle() { -+ if b.subConn != nil && b.state == connectivity.Idle { -+ b.subConn.Connect() -+ } -+} -+ -+type picker struct { -+ result balancer.PickResult -+ err error -+} -+ -+func (p *picker) Pick(balancer.PickInfo) (balancer.PickResult, error) { -+ return p.result, p.err -+} -+ -+// idlePicker is used when the SubConn is IDLE and kicks the SubConn into -+// CONNECTING when Pick is called. -+type idlePicker struct { -+ subConn balancer.SubConn -+} -+ -+func (i *idlePicker) Pick(balancer.PickInfo) (balancer.PickResult, error) { -+ i.subConn.Connect() -+ return balancer.PickResult{}, balancer.ErrNoSubConnAvailable -+} -+ -+func init() { -+ balancer.Register(newPickfirstBuilder()) -+} -diff --git a/vendor/google.golang.org/grpc/preloader.go b/vendor/google.golang.org/grpc/preloader.go -new file mode 100755 -index 0000000..cd45547 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/preloader.go -@@ -0,0 +1,67 @@ -+/* -+ * -+ * Copyright 2019 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/status" -+) -+ -+// PreparedMsg is responsible for creating a Marshalled and Compressed object. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type PreparedMsg struct { -+ // Struct for preparing msg before sending them -+ encodedData []byte -+ hdr []byte -+ payload []byte -+} -+ -+// Encode marshalls and compresses the message using the codec and compressor for the stream. -+func (p *PreparedMsg) Encode(s Stream, msg interface{}) error { -+ ctx := s.Context() -+ rpcInfo, ok := rpcInfoFromContext(ctx) -+ if !ok { -+ return status.Errorf(codes.Internal, "grpc: unable to get rpcInfo") -+ } -+ -+ // check if the context has the relevant information to prepareMsg -+ if rpcInfo.preloaderInfo == nil { -+ return status.Errorf(codes.Internal, "grpc: rpcInfo.preloaderInfo is nil") -+ } -+ if rpcInfo.preloaderInfo.codec == nil { -+ return status.Errorf(codes.Internal, "grpc: rpcInfo.preloaderInfo.codec is nil") -+ } -+ -+ // prepare the msg -+ data, err := encode(rpcInfo.preloaderInfo.codec, msg) -+ if err != nil { -+ return err -+ } -+ p.encodedData = data -+ compData, err := compress(data, rpcInfo.preloaderInfo.cp, rpcInfo.preloaderInfo.comp) -+ if err != nil { -+ return err -+ } -+ p.hdr, p.payload = msgHeader(data, compData) -+ return nil -+} -diff --git a/vendor/google.golang.org/grpc/regenerate.sh b/vendor/google.golang.org/grpc/regenerate.sh -new file mode 100755 -index 0000000..a6f26c8 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/regenerate.sh -@@ -0,0 +1,123 @@ -+#!/bin/bash -+# Copyright 2020 gRPC authors. -+# -+# Licensed under the Apache License, Version 2.0 (the "License"); -+# you may not use this file except in compliance with the License. -+# You may obtain a copy of the License at -+# -+# 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. -+ -+set -eu -o pipefail -+ -+WORKDIR=$(mktemp -d) -+ -+function finish { -+ rm -rf "$WORKDIR" -+} -+trap finish EXIT -+ -+export GOBIN=${WORKDIR}/bin -+export PATH=${GOBIN}:${PATH} -+mkdir -p ${GOBIN} -+ -+echo "remove existing generated files" -+# grpc_testing_not_regenerate/*.pb.go is not re-generated, -+# see grpc_testing_not_regenerate/README.md for details. -+rm -f $(find . -name '*.pb.go' | grep -v 'grpc_testing_not_regenerate') -+ -+echo "go install google.golang.org/protobuf/cmd/protoc-gen-go" -+(cd test/tools && go install google.golang.org/protobuf/cmd/protoc-gen-go) -+ -+echo "go install cmd/protoc-gen-go-grpc" -+(cd cmd/protoc-gen-go-grpc && go install .) -+ -+echo "git clone https://github.com/grpc/grpc-proto" -+git clone --quiet https://github.com/grpc/grpc-proto ${WORKDIR}/grpc-proto -+ -+echo "git clone https://github.com/protocolbuffers/protobuf" -+git clone --quiet https://github.com/protocolbuffers/protobuf ${WORKDIR}/protobuf -+ -+# Pull in code.proto as a proto dependency -+mkdir -p ${WORKDIR}/googleapis/google/rpc -+echo "curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/rpc/code.proto" -+curl --silent https://raw.githubusercontent.com/googleapis/googleapis/master/google/rpc/code.proto > ${WORKDIR}/googleapis/google/rpc/code.proto -+ -+mkdir -p ${WORKDIR}/out -+ -+# Generates sources without the embed requirement -+LEGACY_SOURCES=( -+ ${WORKDIR}/grpc-proto/grpc/binlog/v1/binarylog.proto -+ ${WORKDIR}/grpc-proto/grpc/channelz/v1/channelz.proto -+ ${WORKDIR}/grpc-proto/grpc/health/v1/health.proto -+ ${WORKDIR}/grpc-proto/grpc/lb/v1/load_balancer.proto -+ profiling/proto/service.proto -+ ${WORKDIR}/grpc-proto/grpc/reflection/v1alpha/reflection.proto -+ ${WORKDIR}/grpc-proto/grpc/reflection/v1/reflection.proto -+) -+ -+# Generates only the new gRPC Service symbols -+SOURCES=( -+ $(git ls-files --exclude-standard --cached --others "*.proto" | grep -v '^\(profiling/proto/service.proto\|reflection/grpc_reflection_v1alpha/reflection.proto\)$') -+ ${WORKDIR}/grpc-proto/grpc/gcp/altscontext.proto -+ ${WORKDIR}/grpc-proto/grpc/gcp/handshaker.proto -+ ${WORKDIR}/grpc-proto/grpc/gcp/transport_security_common.proto -+ ${WORKDIR}/grpc-proto/grpc/lookup/v1/rls.proto -+ ${WORKDIR}/grpc-proto/grpc/lookup/v1/rls_config.proto -+ ${WORKDIR}/grpc-proto/grpc/testing/*.proto -+ ${WORKDIR}/grpc-proto/grpc/core/*.proto -+) -+ -+# These options of the form 'Mfoo.proto=bar' instruct the codegen to use an -+# import path of 'bar' in the generated code when 'foo.proto' is imported in -+# one of the sources. -+# -+# Note that the protos listed here are all for testing purposes. All protos to -+# be used externally should have a go_package option (and they don't need to be -+# listed here). -+OPTS=Mgrpc/core/stats.proto=google.golang.org/grpc/interop/grpc_testing/core,\ -+Mgrpc/testing/benchmark_service.proto=google.golang.org/grpc/interop/grpc_testing,\ -+Mgrpc/testing/stats.proto=google.golang.org/grpc/interop/grpc_testing,\ -+Mgrpc/testing/report_qps_scenario_service.proto=google.golang.org/grpc/interop/grpc_testing,\ -+Mgrpc/testing/messages.proto=google.golang.org/grpc/interop/grpc_testing,\ -+Mgrpc/testing/worker_service.proto=google.golang.org/grpc/interop/grpc_testing,\ -+Mgrpc/testing/control.proto=google.golang.org/grpc/interop/grpc_testing,\ -+Mgrpc/testing/test.proto=google.golang.org/grpc/interop/grpc_testing,\ -+Mgrpc/testing/payloads.proto=google.golang.org/grpc/interop/grpc_testing,\ -+Mgrpc/testing/empty.proto=google.golang.org/grpc/interop/grpc_testing -+ -+for src in ${SOURCES[@]}; do -+ echo "protoc ${src}" -+ protoc --go_out=${OPTS}:${WORKDIR}/out --go-grpc_out=${OPTS}:${WORKDIR}/out \ -+ -I"." \ -+ -I${WORKDIR}/grpc-proto \ -+ -I${WORKDIR}/googleapis \ -+ -I${WORKDIR}/protobuf/src \ -+ ${src} -+done -+ -+for src in ${LEGACY_SOURCES[@]}; do -+ echo "protoc ${src}" -+ protoc --go_out=${OPTS}:${WORKDIR}/out --go-grpc_out=${OPTS},require_unimplemented_servers=false:${WORKDIR}/out \ -+ -I"." \ -+ -I${WORKDIR}/grpc-proto \ -+ -I${WORKDIR}/googleapis \ -+ -I${WORKDIR}/protobuf/src \ -+ ${src} -+done -+ -+# The go_package option in grpc/lookup/v1/rls.proto doesn't match the -+# current location. Move it into the right place. -+mkdir -p ${WORKDIR}/out/google.golang.org/grpc/internal/proto/grpc_lookup_v1 -+mv ${WORKDIR}/out/google.golang.org/grpc/lookup/grpc_lookup_v1/* ${WORKDIR}/out/google.golang.org/grpc/internal/proto/grpc_lookup_v1 -+ -+# grpc_testing_not_regenerate/*.pb.go are not re-generated, -+# see grpc_testing_not_regenerate/README.md for details. -+rm ${WORKDIR}/out/google.golang.org/grpc/reflection/grpc_testing_not_regenerate/*.pb.go -+ -+cp -R ${WORKDIR}/out/google.golang.org/grpc/* . -diff --git a/vendor/google.golang.org/grpc/resolver/map.go b/vendor/google.golang.org/grpc/resolver/map.go -new file mode 100755 -index 0000000..efcb7f3 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/resolver/map.go -@@ -0,0 +1,138 @@ -+/* -+ * -+ * Copyright 2021 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package resolver -+ -+type addressMapEntry struct { -+ addr Address -+ value interface{} -+} -+ -+// AddressMap is a map of addresses to arbitrary values taking into account -+// Attributes. BalancerAttributes are ignored, as are Metadata and Type. -+// Multiple accesses may not be performed concurrently. Must be created via -+// NewAddressMap; do not construct directly. -+type AddressMap struct { -+ // The underlying map is keyed by an Address with fields that we don't care -+ // about being set to their zero values. The only fields that we care about -+ // are `Addr`, `ServerName` and `Attributes`. Since we need to be able to -+ // distinguish between addresses with same `Addr` and `ServerName`, but -+ // different `Attributes`, we cannot store the `Attributes` in the map key. -+ // -+ // The comparison operation for structs work as follows: -+ // Struct values are comparable if all their fields are comparable. Two -+ // struct values are equal if their corresponding non-blank fields are equal. -+ // -+ // The value type of the map contains a slice of addresses which match the key -+ // in their `Addr` and `ServerName` fields and contain the corresponding value -+ // associated with them. -+ m map[Address]addressMapEntryList -+} -+ -+func toMapKey(addr *Address) Address { -+ return Address{Addr: addr.Addr, ServerName: addr.ServerName} -+} -+ -+type addressMapEntryList []*addressMapEntry -+ -+// NewAddressMap creates a new AddressMap. -+func NewAddressMap() *AddressMap { -+ return &AddressMap{m: make(map[Address]addressMapEntryList)} -+} -+ -+// find returns the index of addr in the addressMapEntry slice, or -1 if not -+// present. -+func (l addressMapEntryList) find(addr Address) int { -+ for i, entry := range l { -+ // Attributes are the only thing to match on here, since `Addr` and -+ // `ServerName` are already equal. -+ if entry.addr.Attributes.Equal(addr.Attributes) { -+ return i -+ } -+ } -+ return -1 -+} -+ -+// Get returns the value for the address in the map, if present. -+func (a *AddressMap) Get(addr Address) (value interface{}, ok bool) { -+ addrKey := toMapKey(&addr) -+ entryList := a.m[addrKey] -+ if entry := entryList.find(addr); entry != -1 { -+ return entryList[entry].value, true -+ } -+ return nil, false -+} -+ -+// Set updates or adds the value to the address in the map. -+func (a *AddressMap) Set(addr Address, value interface{}) { -+ addrKey := toMapKey(&addr) -+ entryList := a.m[addrKey] -+ if entry := entryList.find(addr); entry != -1 { -+ entryList[entry].value = value -+ return -+ } -+ a.m[addrKey] = append(entryList, &addressMapEntry{addr: addr, value: value}) -+} -+ -+// Delete removes addr from the map. -+func (a *AddressMap) Delete(addr Address) { -+ addrKey := toMapKey(&addr) -+ entryList := a.m[addrKey] -+ entry := entryList.find(addr) -+ if entry == -1 { -+ return -+ } -+ if len(entryList) == 1 { -+ entryList = nil -+ } else { -+ copy(entryList[entry:], entryList[entry+1:]) -+ entryList = entryList[:len(entryList)-1] -+ } -+ a.m[addrKey] = entryList -+} -+ -+// Len returns the number of entries in the map. -+func (a *AddressMap) Len() int { -+ ret := 0 -+ for _, entryList := range a.m { -+ ret += len(entryList) -+ } -+ return ret -+} -+ -+// Keys returns a slice of all current map keys. -+func (a *AddressMap) Keys() []Address { -+ ret := make([]Address, 0, a.Len()) -+ for _, entryList := range a.m { -+ for _, entry := range entryList { -+ ret = append(ret, entry.addr) -+ } -+ } -+ return ret -+} -+ -+// Values returns a slice of all current map values. -+func (a *AddressMap) Values() []interface{} { -+ ret := make([]interface{}, 0, a.Len()) -+ for _, entryList := range a.m { -+ for _, entry := range entryList { -+ ret = append(ret, entry.value) -+ } -+ } -+ return ret -+} -diff --git a/vendor/google.golang.org/grpc/resolver/resolver.go b/vendor/google.golang.org/grpc/resolver/resolver.go -new file mode 100755 -index 0000000..d8db6f5 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/resolver/resolver.go -@@ -0,0 +1,330 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package resolver defines APIs for name resolution in gRPC. -+// All APIs in this package are experimental. -+package resolver -+ -+import ( -+ "context" -+ "fmt" -+ "net" -+ "net/url" -+ "strings" -+ -+ "google.golang.org/grpc/attributes" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/serviceconfig" -+) -+ -+var ( -+ // m is a map from scheme to resolver builder. -+ m = make(map[string]Builder) -+ // defaultScheme is the default scheme to use. -+ defaultScheme = "passthrough" -+) -+ -+// TODO(bar) install dns resolver in init(){}. -+ -+// Register registers the resolver builder to the resolver map. b.Scheme will -+// be used as the scheme registered with this builder. The registry is case -+// sensitive, and schemes should not contain any uppercase characters. -+// -+// NOTE: this function must only be called during initialization time (i.e. in -+// an init() function), and is not thread-safe. If multiple Resolvers are -+// registered with the same name, the one registered last will take effect. -+func Register(b Builder) { -+ m[b.Scheme()] = b -+} -+ -+// Get returns the resolver builder registered with the given scheme. -+// -+// If no builder is register with the scheme, nil will be returned. -+func Get(scheme string) Builder { -+ if b, ok := m[scheme]; ok { -+ return b -+ } -+ return nil -+} -+ -+// SetDefaultScheme sets the default scheme that will be used. The default -+// default scheme is "passthrough". -+// -+// NOTE: this function must only be called during initialization time (i.e. in -+// an init() function), and is not thread-safe. The scheme set last overrides -+// previously set values. -+func SetDefaultScheme(scheme string) { -+ defaultScheme = scheme -+} -+ -+// GetDefaultScheme gets the default scheme that will be used. -+func GetDefaultScheme() string { -+ return defaultScheme -+} -+ -+// AddressType indicates the address type returned by name resolution. -+// -+// Deprecated: use Attributes in Address instead. -+type AddressType uint8 -+ -+const ( -+ // Backend indicates the address is for a backend server. -+ // -+ // Deprecated: use Attributes in Address instead. -+ Backend AddressType = iota -+ // GRPCLB indicates the address is for a grpclb load balancer. -+ // -+ // Deprecated: to select the GRPCLB load balancing policy, use a service -+ // config with a corresponding loadBalancingConfig. To supply balancer -+ // addresses to the GRPCLB load balancing policy, set State.Attributes -+ // using balancer/grpclb/state.Set. -+ GRPCLB -+) -+ -+// Address represents a server the client connects to. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type Address struct { -+ // Addr is the server address on which a connection will be established. -+ Addr string -+ -+ // ServerName is the name of this address. -+ // If non-empty, the ServerName is used as the transport certification authority for -+ // the address, instead of the hostname from the Dial target string. In most cases, -+ // this should not be set. -+ // -+ // If Type is GRPCLB, ServerName should be the name of the remote load -+ // balancer, not the name of the backend. -+ // -+ // WARNING: ServerName must only be populated with trusted values. It -+ // is insecure to populate it with data from untrusted inputs since untrusted -+ // values could be used to bypass the authority checks performed by TLS. -+ ServerName string -+ -+ // Attributes contains arbitrary data about this address intended for -+ // consumption by the SubConn. -+ Attributes *attributes.Attributes -+ -+ // BalancerAttributes contains arbitrary data about this address intended -+ // for consumption by the LB policy. These attributes do not affect SubConn -+ // creation, connection establishment, handshaking, etc. -+ BalancerAttributes *attributes.Attributes -+ -+ // Type is the type of this address. -+ // -+ // Deprecated: use Attributes instead. -+ Type AddressType -+ -+ // Metadata is the information associated with Addr, which may be used -+ // to make load balancing decision. -+ // -+ // Deprecated: use Attributes instead. -+ Metadata interface{} -+} -+ -+// Equal returns whether a and o are identical. Metadata is compared directly, -+// not with any recursive introspection. -+// -+// This method compares all fields of the address. When used to tell apart -+// addresses during subchannel creation or connection establishment, it might be -+// more appropriate for the caller to implement custom equality logic. -+func (a Address) Equal(o Address) bool { -+ return a.Addr == o.Addr && a.ServerName == o.ServerName && -+ a.Attributes.Equal(o.Attributes) && -+ a.BalancerAttributes.Equal(o.BalancerAttributes) && -+ a.Type == o.Type && a.Metadata == o.Metadata -+} -+ -+// String returns JSON formatted string representation of the address. -+func (a Address) String() string { -+ var sb strings.Builder -+ sb.WriteString(fmt.Sprintf("{Addr: %q, ", a.Addr)) -+ sb.WriteString(fmt.Sprintf("ServerName: %q, ", a.ServerName)) -+ if a.Attributes != nil { -+ sb.WriteString(fmt.Sprintf("Attributes: %v, ", a.Attributes.String())) -+ } -+ if a.BalancerAttributes != nil { -+ sb.WriteString(fmt.Sprintf("BalancerAttributes: %v", a.BalancerAttributes.String())) -+ } -+ sb.WriteString("}") -+ return sb.String() -+} -+ -+// BuildOptions includes additional information for the builder to create -+// the resolver. -+type BuildOptions struct { -+ // DisableServiceConfig indicates whether a resolver implementation should -+ // fetch service config data. -+ DisableServiceConfig bool -+ // DialCreds is the transport credentials used by the ClientConn for -+ // communicating with the target gRPC service (set via -+ // WithTransportCredentials). In cases where a name resolution service -+ // requires the same credentials, the resolver may use this field. In most -+ // cases though, it is not appropriate, and this field may be ignored. -+ DialCreds credentials.TransportCredentials -+ // CredsBundle is the credentials bundle used by the ClientConn for -+ // communicating with the target gRPC service (set via -+ // WithCredentialsBundle). In cases where a name resolution service -+ // requires the same credentials, the resolver may use this field. In most -+ // cases though, it is not appropriate, and this field may be ignored. -+ CredsBundle credentials.Bundle -+ // Dialer is the custom dialer used by the ClientConn for dialling the -+ // target gRPC service (set via WithDialer). In cases where a name -+ // resolution service requires the same dialer, the resolver may use this -+ // field. In most cases though, it is not appropriate, and this field may -+ // be ignored. -+ Dialer func(context.Context, string) (net.Conn, error) -+} -+ -+// State contains the current Resolver state relevant to the ClientConn. -+type State struct { -+ // Addresses is the latest set of resolved addresses for the target. -+ Addresses []Address -+ -+ // ServiceConfig contains the result from parsing the latest service -+ // config. If it is nil, it indicates no service config is present or the -+ // resolver does not provide service configs. -+ ServiceConfig *serviceconfig.ParseResult -+ -+ // Attributes contains arbitrary data about the resolver intended for -+ // consumption by the load balancing policy. -+ Attributes *attributes.Attributes -+} -+ -+// ClientConn contains the callbacks for resolver to notify any updates -+// to the gRPC ClientConn. -+// -+// This interface is to be implemented by gRPC. Users should not need a -+// brand new implementation of this interface. For the situations like -+// testing, the new implementation should embed this interface. This allows -+// gRPC to add new methods to this interface. -+type ClientConn interface { -+ // UpdateState updates the state of the ClientConn appropriately. -+ // -+ // If an error is returned, the resolver should try to resolve the -+ // target again. The resolver should use a backoff timer to prevent -+ // overloading the server with requests. If a resolver is certain that -+ // reresolving will not change the result, e.g. because it is -+ // a watch-based resolver, returned errors can be ignored. -+ // -+ // If the resolved State is the same as the last reported one, calling -+ // UpdateState can be omitted. -+ UpdateState(State) error -+ // ReportError notifies the ClientConn that the Resolver encountered an -+ // error. The ClientConn will notify the load balancer and begin calling -+ // ResolveNow on the Resolver with exponential backoff. -+ ReportError(error) -+ // NewAddress is called by resolver to notify ClientConn a new list -+ // of resolved addresses. -+ // The address list should be the complete list of resolved addresses. -+ // -+ // Deprecated: Use UpdateState instead. -+ NewAddress(addresses []Address) -+ // NewServiceConfig is called by resolver to notify ClientConn a new -+ // service config. The service config should be provided as a json string. -+ // -+ // Deprecated: Use UpdateState instead. -+ NewServiceConfig(serviceConfig string) -+ // ParseServiceConfig parses the provided service config and returns an -+ // object that provides the parsed config. -+ ParseServiceConfig(serviceConfigJSON string) *serviceconfig.ParseResult -+} -+ -+// Target represents a target for gRPC, as specified in: -+// https://github.com/grpc/grpc/blob/master/doc/naming.md. -+// It is parsed from the target string that gets passed into Dial or DialContext -+// by the user. And gRPC passes it to the resolver and the balancer. -+// -+// If the target follows the naming spec, and the parsed scheme is registered -+// with gRPC, we will parse the target string according to the spec. If the -+// target does not contain a scheme or if the parsed scheme is not registered -+// (i.e. no corresponding resolver available to resolve the endpoint), we will -+// apply the default scheme, and will attempt to reparse it. -+// -+// Examples: -+// -+// - "dns://some_authority/foo.bar" -+// Target{Scheme: "dns", Authority: "some_authority", Endpoint: "foo.bar"} -+// - "foo.bar" -+// Target{Scheme: resolver.GetDefaultScheme(), Endpoint: "foo.bar"} -+// - "unknown_scheme://authority/endpoint" -+// Target{Scheme: resolver.GetDefaultScheme(), Endpoint: "unknown_scheme://authority/endpoint"} -+type Target struct { -+ // URL contains the parsed dial target with an optional default scheme added -+ // to it if the original dial target contained no scheme or contained an -+ // unregistered scheme. Any query params specified in the original dial -+ // target can be accessed from here. -+ URL url.URL -+} -+ -+// Endpoint retrieves endpoint without leading "/" from either `URL.Path` -+// or `URL.Opaque`. The latter is used when the former is empty. -+func (t Target) Endpoint() string { -+ endpoint := t.URL.Path -+ if endpoint == "" { -+ endpoint = t.URL.Opaque -+ } -+ // For targets of the form "[scheme]://[authority]/endpoint, the endpoint -+ // value returned from url.Parse() contains a leading "/". Although this is -+ // in accordance with RFC 3986, we do not want to break existing resolver -+ // implementations which expect the endpoint without the leading "/". So, we -+ // end up stripping the leading "/" here. But this will result in an -+ // incorrect parsing for something like "unix:///path/to/socket". Since we -+ // own the "unix" resolver, we can workaround in the unix resolver by using -+ // the `URL` field. -+ return strings.TrimPrefix(endpoint, "/") -+} -+ -+// Builder creates a resolver that will be used to watch name resolution updates. -+type Builder interface { -+ // Build creates a new resolver for the given target. -+ // -+ // gRPC dial calls Build synchronously, and fails if the returned error is -+ // not nil. -+ Build(target Target, cc ClientConn, opts BuildOptions) (Resolver, error) -+ // Scheme returns the scheme supported by this resolver. Scheme is defined -+ // at https://github.com/grpc/grpc/blob/master/doc/naming.md. The returned -+ // string should not contain uppercase characters, as they will not match -+ // the parsed target's scheme as defined in RFC 3986. -+ Scheme() string -+} -+ -+// ResolveNowOptions includes additional information for ResolveNow. -+type ResolveNowOptions struct{} -+ -+// Resolver watches for the updates on the specified target. -+// Updates include address updates and service config updates. -+type Resolver interface { -+ // ResolveNow will be called by gRPC to try to resolve the target name -+ // again. It's just a hint, resolver can ignore this if it's not necessary. -+ // -+ // It could be called multiple times concurrently. -+ ResolveNow(ResolveNowOptions) -+ // Close closes the resolver. -+ Close() -+} -+ -+// UnregisterForTesting removes the resolver builder with the given scheme from the -+// resolver map. -+// This function is for testing only. -+func UnregisterForTesting(scheme string) { -+ delete(m, scheme) -+} -diff --git a/vendor/google.golang.org/grpc/resolver_conn_wrapper.go b/vendor/google.golang.org/grpc/resolver_conn_wrapper.go -new file mode 100755 -index 0000000..b408b36 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/resolver_conn_wrapper.go -@@ -0,0 +1,239 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+ "strings" -+ "sync" -+ -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/internal/channelz" -+ "google.golang.org/grpc/internal/grpcsync" -+ "google.golang.org/grpc/internal/pretty" -+ "google.golang.org/grpc/resolver" -+ "google.golang.org/grpc/serviceconfig" -+) -+ -+// resolverStateUpdater wraps the single method used by ccResolverWrapper to -+// report a state update from the actual resolver implementation. -+type resolverStateUpdater interface { -+ updateResolverState(s resolver.State, err error) error -+} -+ -+// ccResolverWrapper is a wrapper on top of cc for resolvers. -+// It implements resolver.ClientConn interface. -+type ccResolverWrapper struct { -+ // The following fields are initialized when the wrapper is created and are -+ // read-only afterwards, and therefore can be accessed without a mutex. -+ cc resolverStateUpdater -+ channelzID *channelz.Identifier -+ ignoreServiceConfig bool -+ opts ccResolverWrapperOpts -+ serializer *grpcsync.CallbackSerializer // To serialize all incoming calls. -+ serializerCancel context.CancelFunc // To close the serializer, accessed only from close(). -+ -+ // All incoming (resolver --> gRPC) calls are guaranteed to execute in a -+ // mutually exclusive manner as they are scheduled on the serializer. -+ // Fields accessed *only* in these serializer callbacks, can therefore be -+ // accessed without a mutex. -+ curState resolver.State -+ -+ // mu guards access to the below fields. -+ mu sync.Mutex -+ closed bool -+ resolver resolver.Resolver // Accessed only from outgoing calls. -+} -+ -+// ccResolverWrapperOpts wraps the arguments to be passed when creating a new -+// ccResolverWrapper. -+type ccResolverWrapperOpts struct { -+ target resolver.Target // User specified dial target to resolve. -+ builder resolver.Builder // Resolver builder to use. -+ bOpts resolver.BuildOptions // Resolver build options to use. -+ channelzID *channelz.Identifier // Channelz identifier for the channel. -+} -+ -+// newCCResolverWrapper uses the resolver.Builder to build a Resolver and -+// returns a ccResolverWrapper object which wraps the newly built resolver. -+func newCCResolverWrapper(cc resolverStateUpdater, opts ccResolverWrapperOpts) (*ccResolverWrapper, error) { -+ ctx, cancel := context.WithCancel(context.Background()) -+ ccr := &ccResolverWrapper{ -+ cc: cc, -+ channelzID: opts.channelzID, -+ ignoreServiceConfig: opts.bOpts.DisableServiceConfig, -+ opts: opts, -+ serializer: grpcsync.NewCallbackSerializer(ctx), -+ serializerCancel: cancel, -+ } -+ -+ // Cannot hold the lock at build time because the resolver can send an -+ // update or error inline and these incoming calls grab the lock to schedule -+ // a callback in the serializer. -+ r, err := opts.builder.Build(opts.target, ccr, opts.bOpts) -+ if err != nil { -+ cancel() -+ return nil, err -+ } -+ -+ // Any error reported by the resolver at build time that leads to a -+ // re-resolution request from the balancer is dropped by grpc until we -+ // return from this function. So, we don't have to handle pending resolveNow -+ // requests here. -+ ccr.mu.Lock() -+ ccr.resolver = r -+ ccr.mu.Unlock() -+ -+ return ccr, nil -+} -+ -+func (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOptions) { -+ ccr.mu.Lock() -+ defer ccr.mu.Unlock() -+ -+ // ccr.resolver field is set only after the call to Build() returns. But in -+ // the process of building, the resolver may send an error update which when -+ // propagated to the balancer may result in a re-resolution request. -+ if ccr.closed || ccr.resolver == nil { -+ return -+ } -+ ccr.resolver.ResolveNow(o) -+} -+ -+func (ccr *ccResolverWrapper) close() { -+ ccr.mu.Lock() -+ if ccr.closed { -+ ccr.mu.Unlock() -+ return -+ } -+ -+ channelz.Info(logger, ccr.channelzID, "Closing the name resolver") -+ -+ // Close the serializer to ensure that no more calls from the resolver are -+ // handled, before actually closing the resolver. -+ ccr.serializerCancel() -+ ccr.closed = true -+ r := ccr.resolver -+ ccr.mu.Unlock() -+ -+ // Give enqueued callbacks a chance to finish. -+ <-ccr.serializer.Done -+ -+ // Spawn a goroutine to close the resolver (since it may block trying to -+ // cleanup all allocated resources) and return early. -+ go r.Close() -+} -+ -+// serializerScheduleLocked is a convenience method to schedule a function to be -+// run on the serializer while holding ccr.mu. -+func (ccr *ccResolverWrapper) serializerScheduleLocked(f func(context.Context)) { -+ ccr.mu.Lock() -+ ccr.serializer.Schedule(f) -+ ccr.mu.Unlock() -+} -+ -+// UpdateState is called by resolver implementations to report new state to gRPC -+// which includes addresses and service config. -+func (ccr *ccResolverWrapper) UpdateState(s resolver.State) error { -+ errCh := make(chan error, 1) -+ ok := ccr.serializer.Schedule(func(context.Context) { -+ ccr.addChannelzTraceEvent(s) -+ ccr.curState = s -+ if err := ccr.cc.updateResolverState(ccr.curState, nil); err == balancer.ErrBadResolverState { -+ errCh <- balancer.ErrBadResolverState -+ return -+ } -+ errCh <- nil -+ }) -+ if !ok { -+ // The only time when Schedule() fail to add the callback to the -+ // serializer is when the serializer is closed, and this happens only -+ // when the resolver wrapper is closed. -+ return nil -+ } -+ return <-errCh -+} -+ -+// ReportError is called by resolver implementations to report errors -+// encountered during name resolution to gRPC. -+func (ccr *ccResolverWrapper) ReportError(err error) { -+ ccr.serializerScheduleLocked(func(_ context.Context) { -+ channelz.Warningf(logger, ccr.channelzID, "ccResolverWrapper: reporting error to cc: %v", err) -+ ccr.cc.updateResolverState(resolver.State{}, err) -+ }) -+} -+ -+// NewAddress is called by the resolver implementation to send addresses to -+// gRPC. -+func (ccr *ccResolverWrapper) NewAddress(addrs []resolver.Address) { -+ ccr.serializerScheduleLocked(func(_ context.Context) { -+ ccr.addChannelzTraceEvent(resolver.State{Addresses: addrs, ServiceConfig: ccr.curState.ServiceConfig}) -+ ccr.curState.Addresses = addrs -+ ccr.cc.updateResolverState(ccr.curState, nil) -+ }) -+} -+ -+// NewServiceConfig is called by the resolver implementation to send service -+// configs to gRPC. -+func (ccr *ccResolverWrapper) NewServiceConfig(sc string) { -+ ccr.serializerScheduleLocked(func(_ context.Context) { -+ channelz.Infof(logger, ccr.channelzID, "ccResolverWrapper: got new service config: %s", sc) -+ if ccr.ignoreServiceConfig { -+ channelz.Info(logger, ccr.channelzID, "Service config lookups disabled; ignoring config") -+ return -+ } -+ scpr := parseServiceConfig(sc) -+ if scpr.Err != nil { -+ channelz.Warningf(logger, ccr.channelzID, "ccResolverWrapper: error parsing service config: %v", scpr.Err) -+ return -+ } -+ ccr.addChannelzTraceEvent(resolver.State{Addresses: ccr.curState.Addresses, ServiceConfig: scpr}) -+ ccr.curState.ServiceConfig = scpr -+ ccr.cc.updateResolverState(ccr.curState, nil) -+ }) -+} -+ -+// ParseServiceConfig is called by resolver implementations to parse a JSON -+// representation of the service config. -+func (ccr *ccResolverWrapper) ParseServiceConfig(scJSON string) *serviceconfig.ParseResult { -+ return parseServiceConfig(scJSON) -+} -+ -+// addChannelzTraceEvent adds a channelz trace event containing the new -+// state received from resolver implementations. -+func (ccr *ccResolverWrapper) addChannelzTraceEvent(s resolver.State) { -+ var updates []string -+ var oldSC, newSC *ServiceConfig -+ var oldOK, newOK bool -+ if ccr.curState.ServiceConfig != nil { -+ oldSC, oldOK = ccr.curState.ServiceConfig.Config.(*ServiceConfig) -+ } -+ if s.ServiceConfig != nil { -+ newSC, newOK = s.ServiceConfig.Config.(*ServiceConfig) -+ } -+ if oldOK != newOK || (oldOK && newOK && oldSC.rawJSONString != newSC.rawJSONString) { -+ updates = append(updates, "service config updated") -+ } -+ if len(ccr.curState.Addresses) > 0 && len(s.Addresses) == 0 { -+ updates = append(updates, "resolver returned an empty address list") -+ } else if len(ccr.curState.Addresses) == 0 && len(s.Addresses) > 0 { -+ updates = append(updates, "resolver returned new addresses") -+ } -+ channelz.Infof(logger, ccr.channelzID, "Resolver state updated: %s (%v)", pretty.ToJSON(s), strings.Join(updates, "; ")) -+} -diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go -new file mode 100755 -index 0000000..a844d28 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/rpc_util.go -@@ -0,0 +1,956 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "bytes" -+ "compress/gzip" -+ "context" -+ "encoding/binary" -+ "fmt" -+ "io" -+ "math" -+ "strings" -+ "sync" -+ "time" -+ -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/encoding" -+ "google.golang.org/grpc/encoding/proto" -+ "google.golang.org/grpc/internal/transport" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/peer" -+ "google.golang.org/grpc/stats" -+ "google.golang.org/grpc/status" -+) -+ -+// Compressor defines the interface gRPC uses to compress a message. -+// -+// Deprecated: use package encoding. -+type Compressor interface { -+ // Do compresses p into w. -+ Do(w io.Writer, p []byte) error -+ // Type returns the compression algorithm the Compressor uses. -+ Type() string -+} -+ -+type gzipCompressor struct { -+ pool sync.Pool -+} -+ -+// NewGZIPCompressor creates a Compressor based on GZIP. -+// -+// Deprecated: use package encoding/gzip. -+func NewGZIPCompressor() Compressor { -+ c, _ := NewGZIPCompressorWithLevel(gzip.DefaultCompression) -+ return c -+} -+ -+// NewGZIPCompressorWithLevel is like NewGZIPCompressor but specifies the gzip compression level instead -+// of assuming DefaultCompression. -+// -+// The error returned will be nil if the level is valid. -+// -+// Deprecated: use package encoding/gzip. -+func NewGZIPCompressorWithLevel(level int) (Compressor, error) { -+ if level < gzip.DefaultCompression || level > gzip.BestCompression { -+ return nil, fmt.Errorf("grpc: invalid compression level: %d", level) -+ } -+ return &gzipCompressor{ -+ pool: sync.Pool{ -+ New: func() interface{} { -+ w, err := gzip.NewWriterLevel(io.Discard, level) -+ if err != nil { -+ panic(err) -+ } -+ return w -+ }, -+ }, -+ }, nil -+} -+ -+func (c *gzipCompressor) Do(w io.Writer, p []byte) error { -+ z := c.pool.Get().(*gzip.Writer) -+ defer c.pool.Put(z) -+ z.Reset(w) -+ if _, err := z.Write(p); err != nil { -+ return err -+ } -+ return z.Close() -+} -+ -+func (c *gzipCompressor) Type() string { -+ return "gzip" -+} -+ -+// Decompressor defines the interface gRPC uses to decompress a message. -+// -+// Deprecated: use package encoding. -+type Decompressor interface { -+ // Do reads the data from r and uncompress them. -+ Do(r io.Reader) ([]byte, error) -+ // Type returns the compression algorithm the Decompressor uses. -+ Type() string -+} -+ -+type gzipDecompressor struct { -+ pool sync.Pool -+} -+ -+// NewGZIPDecompressor creates a Decompressor based on GZIP. -+// -+// Deprecated: use package encoding/gzip. -+func NewGZIPDecompressor() Decompressor { -+ return &gzipDecompressor{} -+} -+ -+func (d *gzipDecompressor) Do(r io.Reader) ([]byte, error) { -+ var z *gzip.Reader -+ switch maybeZ := d.pool.Get().(type) { -+ case nil: -+ newZ, err := gzip.NewReader(r) -+ if err != nil { -+ return nil, err -+ } -+ z = newZ -+ case *gzip.Reader: -+ z = maybeZ -+ if err := z.Reset(r); err != nil { -+ d.pool.Put(z) -+ return nil, err -+ } -+ } -+ -+ defer func() { -+ z.Close() -+ d.pool.Put(z) -+ }() -+ return io.ReadAll(z) -+} -+ -+func (d *gzipDecompressor) Type() string { -+ return "gzip" -+} -+ -+// callInfo contains all related configuration and information about an RPC. -+type callInfo struct { -+ compressorType string -+ failFast bool -+ maxReceiveMessageSize *int -+ maxSendMessageSize *int -+ creds credentials.PerRPCCredentials -+ contentSubtype string -+ codec baseCodec -+ maxRetryRPCBufferSize int -+ onFinish []func(err error) -+} -+ -+func defaultCallInfo() *callInfo { -+ return &callInfo{ -+ failFast: true, -+ maxRetryRPCBufferSize: 256 * 1024, // 256KB -+ } -+} -+ -+// CallOption configures a Call before it starts or extracts information from -+// a Call after it completes. -+type CallOption interface { -+ // before is called before the call is sent to any server. If before -+ // returns a non-nil error, the RPC fails with that error. -+ before(*callInfo) error -+ -+ // after is called after the call has completed. after cannot return an -+ // error, so any failures should be reported via output parameters. -+ after(*callInfo, *csAttempt) -+} -+ -+// EmptyCallOption does not alter the Call configuration. -+// It can be embedded in another structure to carry satellite data for use -+// by interceptors. -+type EmptyCallOption struct{} -+ -+func (EmptyCallOption) before(*callInfo) error { return nil } -+func (EmptyCallOption) after(*callInfo, *csAttempt) {} -+ -+// Header returns a CallOptions that retrieves the header metadata -+// for a unary RPC. -+func Header(md *metadata.MD) CallOption { -+ return HeaderCallOption{HeaderAddr: md} -+} -+ -+// HeaderCallOption is a CallOption for collecting response header metadata. -+// The metadata field will be populated *after* the RPC completes. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type HeaderCallOption struct { -+ HeaderAddr *metadata.MD -+} -+ -+func (o HeaderCallOption) before(c *callInfo) error { return nil } -+func (o HeaderCallOption) after(c *callInfo, attempt *csAttempt) { -+ *o.HeaderAddr, _ = attempt.s.Header() -+} -+ -+// Trailer returns a CallOptions that retrieves the trailer metadata -+// for a unary RPC. -+func Trailer(md *metadata.MD) CallOption { -+ return TrailerCallOption{TrailerAddr: md} -+} -+ -+// TrailerCallOption is a CallOption for collecting response trailer metadata. -+// The metadata field will be populated *after* the RPC completes. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type TrailerCallOption struct { -+ TrailerAddr *metadata.MD -+} -+ -+func (o TrailerCallOption) before(c *callInfo) error { return nil } -+func (o TrailerCallOption) after(c *callInfo, attempt *csAttempt) { -+ *o.TrailerAddr = attempt.s.Trailer() -+} -+ -+// Peer returns a CallOption that retrieves peer information for a unary RPC. -+// The peer field will be populated *after* the RPC completes. -+func Peer(p *peer.Peer) CallOption { -+ return PeerCallOption{PeerAddr: p} -+} -+ -+// PeerCallOption is a CallOption for collecting the identity of the remote -+// peer. The peer field will be populated *after* the RPC completes. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type PeerCallOption struct { -+ PeerAddr *peer.Peer -+} -+ -+func (o PeerCallOption) before(c *callInfo) error { return nil } -+func (o PeerCallOption) after(c *callInfo, attempt *csAttempt) { -+ if x, ok := peer.FromContext(attempt.s.Context()); ok { -+ *o.PeerAddr = *x -+ } -+} -+ -+// WaitForReady configures the action to take when an RPC is attempted on broken -+// connections or unreachable servers. If waitForReady is false and the -+// connection is in the TRANSIENT_FAILURE state, the RPC will fail -+// immediately. Otherwise, the RPC client will block the call until a -+// connection is available (or the call is canceled or times out) and will -+// retry the call if it fails due to a transient error. gRPC will not retry if -+// data was written to the wire unless the server indicates it did not process -+// the data. Please refer to -+// https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md. -+// -+// By default, RPCs don't "wait for ready". -+func WaitForReady(waitForReady bool) CallOption { -+ return FailFastCallOption{FailFast: !waitForReady} -+} -+ -+// FailFast is the opposite of WaitForReady. -+// -+// Deprecated: use WaitForReady. -+func FailFast(failFast bool) CallOption { -+ return FailFastCallOption{FailFast: failFast} -+} -+ -+// FailFastCallOption is a CallOption for indicating whether an RPC should fail -+// fast or not. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type FailFastCallOption struct { -+ FailFast bool -+} -+ -+func (o FailFastCallOption) before(c *callInfo) error { -+ c.failFast = o.FailFast -+ return nil -+} -+func (o FailFastCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// OnFinish returns a CallOption that configures a callback to be called when -+// the call completes. The error passed to the callback is the status of the -+// RPC, and may be nil. The onFinish callback provided will only be called once -+// by gRPC. This is mainly used to be used by streaming interceptors, to be -+// notified when the RPC completes along with information about the status of -+// the RPC. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func OnFinish(onFinish func(err error)) CallOption { -+ return OnFinishCallOption{ -+ OnFinish: onFinish, -+ } -+} -+ -+// OnFinishCallOption is CallOption that indicates a callback to be called when -+// the call completes. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type OnFinishCallOption struct { -+ OnFinish func(error) -+} -+ -+func (o OnFinishCallOption) before(c *callInfo) error { -+ c.onFinish = append(c.onFinish, o.OnFinish) -+ return nil -+} -+ -+func (o OnFinishCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// MaxCallRecvMsgSize returns a CallOption which sets the maximum message size -+// in bytes the client can receive. If this is not set, gRPC uses the default -+// 4MB. -+func MaxCallRecvMsgSize(bytes int) CallOption { -+ return MaxRecvMsgSizeCallOption{MaxRecvMsgSize: bytes} -+} -+ -+// MaxRecvMsgSizeCallOption is a CallOption that indicates the maximum message -+// size in bytes the client can receive. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type MaxRecvMsgSizeCallOption struct { -+ MaxRecvMsgSize int -+} -+ -+func (o MaxRecvMsgSizeCallOption) before(c *callInfo) error { -+ c.maxReceiveMessageSize = &o.MaxRecvMsgSize -+ return nil -+} -+func (o MaxRecvMsgSizeCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// MaxCallSendMsgSize returns a CallOption which sets the maximum message size -+// in bytes the client can send. If this is not set, gRPC uses the default -+// `math.MaxInt32`. -+func MaxCallSendMsgSize(bytes int) CallOption { -+ return MaxSendMsgSizeCallOption{MaxSendMsgSize: bytes} -+} -+ -+// MaxSendMsgSizeCallOption is a CallOption that indicates the maximum message -+// size in bytes the client can send. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type MaxSendMsgSizeCallOption struct { -+ MaxSendMsgSize int -+} -+ -+func (o MaxSendMsgSizeCallOption) before(c *callInfo) error { -+ c.maxSendMessageSize = &o.MaxSendMsgSize -+ return nil -+} -+func (o MaxSendMsgSizeCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// PerRPCCredentials returns a CallOption that sets credentials.PerRPCCredentials -+// for a call. -+func PerRPCCredentials(creds credentials.PerRPCCredentials) CallOption { -+ return PerRPCCredsCallOption{Creds: creds} -+} -+ -+// PerRPCCredsCallOption is a CallOption that indicates the per-RPC -+// credentials to use for the call. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type PerRPCCredsCallOption struct { -+ Creds credentials.PerRPCCredentials -+} -+ -+func (o PerRPCCredsCallOption) before(c *callInfo) error { -+ c.creds = o.Creds -+ return nil -+} -+func (o PerRPCCredsCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// UseCompressor returns a CallOption which sets the compressor used when -+// sending the request. If WithCompressor is also set, UseCompressor has -+// higher priority. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func UseCompressor(name string) CallOption { -+ return CompressorCallOption{CompressorType: name} -+} -+ -+// CompressorCallOption is a CallOption that indicates the compressor to use. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type CompressorCallOption struct { -+ CompressorType string -+} -+ -+func (o CompressorCallOption) before(c *callInfo) error { -+ c.compressorType = o.CompressorType -+ return nil -+} -+func (o CompressorCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// CallContentSubtype returns a CallOption that will set the content-subtype -+// for a call. For example, if content-subtype is "json", the Content-Type over -+// the wire will be "application/grpc+json". The content-subtype is converted -+// to lowercase before being included in Content-Type. See Content-Type on -+// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for -+// more details. -+// -+// If ForceCodec is not also used, the content-subtype will be used to look up -+// the Codec to use in the registry controlled by RegisterCodec. See the -+// documentation on RegisterCodec for details on registration. The lookup of -+// content-subtype is case-insensitive. If no such Codec is found, the call -+// will result in an error with code codes.Internal. -+// -+// If ForceCodec is also used, that Codec will be used for all request and -+// response messages, with the content-subtype set to the given contentSubtype -+// here for requests. -+func CallContentSubtype(contentSubtype string) CallOption { -+ return ContentSubtypeCallOption{ContentSubtype: strings.ToLower(contentSubtype)} -+} -+ -+// ContentSubtypeCallOption is a CallOption that indicates the content-subtype -+// used for marshaling messages. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type ContentSubtypeCallOption struct { -+ ContentSubtype string -+} -+ -+func (o ContentSubtypeCallOption) before(c *callInfo) error { -+ c.contentSubtype = o.ContentSubtype -+ return nil -+} -+func (o ContentSubtypeCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// ForceCodec returns a CallOption that will set codec to be used for all -+// request and response messages for a call. The result of calling Name() will -+// be used as the content-subtype after converting to lowercase, unless -+// CallContentSubtype is also used. -+// -+// See Content-Type on -+// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for -+// more details. Also see the documentation on RegisterCodec and -+// CallContentSubtype for more details on the interaction between Codec and -+// content-subtype. -+// -+// This function is provided for advanced users; prefer to use only -+// CallContentSubtype to select a registered codec instead. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func ForceCodec(codec encoding.Codec) CallOption { -+ return ForceCodecCallOption{Codec: codec} -+} -+ -+// ForceCodecCallOption is a CallOption that indicates the codec used for -+// marshaling messages. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type ForceCodecCallOption struct { -+ Codec encoding.Codec -+} -+ -+func (o ForceCodecCallOption) before(c *callInfo) error { -+ c.codec = o.Codec -+ return nil -+} -+func (o ForceCodecCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// CallCustomCodec behaves like ForceCodec, but accepts a grpc.Codec instead of -+// an encoding.Codec. -+// -+// Deprecated: use ForceCodec instead. -+func CallCustomCodec(codec Codec) CallOption { -+ return CustomCodecCallOption{Codec: codec} -+} -+ -+// CustomCodecCallOption is a CallOption that indicates the codec used for -+// marshaling messages. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type CustomCodecCallOption struct { -+ Codec Codec -+} -+ -+func (o CustomCodecCallOption) before(c *callInfo) error { -+ c.codec = o.Codec -+ return nil -+} -+func (o CustomCodecCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// MaxRetryRPCBufferSize returns a CallOption that limits the amount of memory -+// used for buffering this RPC's requests for retry purposes. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func MaxRetryRPCBufferSize(bytes int) CallOption { -+ return MaxRetryRPCBufferSizeCallOption{bytes} -+} -+ -+// MaxRetryRPCBufferSizeCallOption is a CallOption indicating the amount of -+// memory to be used for caching this RPC for retry purposes. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type MaxRetryRPCBufferSizeCallOption struct { -+ MaxRetryRPCBufferSize int -+} -+ -+func (o MaxRetryRPCBufferSizeCallOption) before(c *callInfo) error { -+ c.maxRetryRPCBufferSize = o.MaxRetryRPCBufferSize -+ return nil -+} -+func (o MaxRetryRPCBufferSizeCallOption) after(c *callInfo, attempt *csAttempt) {} -+ -+// The format of the payload: compressed or not? -+type payloadFormat uint8 -+ -+const ( -+ compressionNone payloadFormat = 0 // no compression -+ compressionMade payloadFormat = 1 // compressed -+) -+ -+// parser reads complete gRPC messages from the underlying reader. -+type parser struct { -+ // r is the underlying reader. -+ // See the comment on recvMsg for the permissible -+ // error types. -+ r io.Reader -+ -+ // The header of a gRPC message. Find more detail at -+ // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md -+ header [5]byte -+ -+ // recvBufferPool is the pool of shared receive buffers. -+ recvBufferPool SharedBufferPool -+} -+ -+// recvMsg reads a complete gRPC message from the stream. -+// -+// It returns the message and its payload (compression/encoding) -+// format. The caller owns the returned msg memory. -+// -+// If there is an error, possible values are: -+// - io.EOF, when no messages remain -+// - io.ErrUnexpectedEOF -+// - of type transport.ConnectionError -+// - an error from the status package -+// -+// No other error values or types must be returned, which also means -+// that the underlying io.Reader must not return an incompatible -+// error. -+func (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byte, err error) { -+ if _, err := p.r.Read(p.header[:]); err != nil { -+ return 0, nil, err -+ } -+ -+ pf = payloadFormat(p.header[0]) -+ length := binary.BigEndian.Uint32(p.header[1:]) -+ -+ if length == 0 { -+ return pf, nil, nil -+ } -+ if int64(length) > int64(maxInt) { -+ return 0, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max length allowed on current machine (%d vs. %d)", length, maxInt) -+ } -+ if int(length) > maxReceiveMessageSize { -+ return 0, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", length, maxReceiveMessageSize) -+ } -+ msg = p.recvBufferPool.Get(int(length)) -+ if _, err := p.r.Read(msg); err != nil { -+ if err == io.EOF { -+ err = io.ErrUnexpectedEOF -+ } -+ return 0, nil, err -+ } -+ return pf, msg, nil -+} -+ -+// encode serializes msg and returns a buffer containing the message, or an -+// error if it is too large to be transmitted by grpc. If msg is nil, it -+// generates an empty message. -+func encode(c baseCodec, msg interface{}) ([]byte, error) { -+ if msg == nil { // NOTE: typed nils will not be caught by this check -+ return nil, nil -+ } -+ b, err := c.Marshal(msg) -+ if err != nil { -+ return nil, status.Errorf(codes.Internal, "grpc: error while marshaling: %v", err.Error()) -+ } -+ if uint(len(b)) > math.MaxUint32 { -+ return nil, status.Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", len(b)) -+ } -+ return b, nil -+} -+ -+// compress returns the input bytes compressed by compressor or cp. If both -+// compressors are nil, returns nil. -+// -+// TODO(dfawley): eliminate cp parameter by wrapping Compressor in an encoding.Compressor. -+func compress(in []byte, cp Compressor, compressor encoding.Compressor) ([]byte, error) { -+ if compressor == nil && cp == nil { -+ return nil, nil -+ } -+ wrapErr := func(err error) error { -+ return status.Errorf(codes.Internal, "grpc: error while compressing: %v", err.Error()) -+ } -+ cbuf := &bytes.Buffer{} -+ if compressor != nil { -+ z, err := compressor.Compress(cbuf) -+ if err != nil { -+ return nil, wrapErr(err) -+ } -+ if _, err := z.Write(in); err != nil { -+ return nil, wrapErr(err) -+ } -+ if err := z.Close(); err != nil { -+ return nil, wrapErr(err) -+ } -+ } else { -+ if err := cp.Do(cbuf, in); err != nil { -+ return nil, wrapErr(err) -+ } -+ } -+ return cbuf.Bytes(), nil -+} -+ -+const ( -+ payloadLen = 1 -+ sizeLen = 4 -+ headerLen = payloadLen + sizeLen -+) -+ -+// msgHeader returns a 5-byte header for the message being transmitted and the -+// payload, which is compData if non-nil or data otherwise. -+func msgHeader(data, compData []byte) (hdr []byte, payload []byte) { -+ hdr = make([]byte, headerLen) -+ if compData != nil { -+ hdr[0] = byte(compressionMade) -+ data = compData -+ } else { -+ hdr[0] = byte(compressionNone) -+ } -+ -+ // Write length of payload into buf -+ binary.BigEndian.PutUint32(hdr[payloadLen:], uint32(len(data))) -+ return hdr, data -+} -+ -+func outPayload(client bool, msg interface{}, data, payload []byte, t time.Time) *stats.OutPayload { -+ return &stats.OutPayload{ -+ Client: client, -+ Payload: msg, -+ Data: data, -+ Length: len(data), -+ WireLength: len(payload) + headerLen, -+ CompressedLength: len(payload), -+ SentTime: t, -+ } -+} -+ -+func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool) *status.Status { -+ switch pf { -+ case compressionNone: -+ case compressionMade: -+ if recvCompress == "" || recvCompress == encoding.Identity { -+ return status.New(codes.Internal, "grpc: compressed flag set with identity or empty encoding") -+ } -+ if !haveCompressor { -+ return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) -+ } -+ default: -+ return status.Newf(codes.Internal, "grpc: received unexpected payload format %d", pf) -+ } -+ return nil -+} -+ -+type payloadInfo struct { -+ compressedLength int // The compressed length got from wire. -+ uncompressedBytes []byte -+} -+ -+func recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) ([]byte, error) { -+ pf, buf, err := p.recvMsg(maxReceiveMessageSize) -+ if err != nil { -+ return nil, err -+ } -+ if payInfo != nil { -+ payInfo.compressedLength = len(buf) -+ } -+ -+ if st := checkRecvPayload(pf, s.RecvCompress(), compressor != nil || dc != nil); st != nil { -+ return nil, st.Err() -+ } -+ -+ var size int -+ if pf == compressionMade { -+ // To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor, -+ // use this decompressor as the default. -+ if dc != nil { -+ buf, err = dc.Do(bytes.NewReader(buf)) -+ size = len(buf) -+ } else { -+ buf, size, err = decompress(compressor, buf, maxReceiveMessageSize) -+ } -+ if err != nil { -+ return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err) -+ } -+ if size > maxReceiveMessageSize { -+ // TODO: Revisit the error code. Currently keep it consistent with java -+ // implementation. -+ return nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max (%d vs. %d)", size, maxReceiveMessageSize) -+ } -+ } -+ return buf, nil -+} -+ -+// Using compressor, decompress d, returning data and size. -+// Optionally, if data will be over maxReceiveMessageSize, just return the size. -+func decompress(compressor encoding.Compressor, d []byte, maxReceiveMessageSize int) ([]byte, int, error) { -+ dcReader, err := compressor.Decompress(bytes.NewReader(d)) -+ if err != nil { -+ return nil, 0, err -+ } -+ if sizer, ok := compressor.(interface { -+ DecompressedSize(compressedBytes []byte) int -+ }); ok { -+ if size := sizer.DecompressedSize(d); size >= 0 { -+ if size > maxReceiveMessageSize { -+ return nil, size, nil -+ } -+ // size is used as an estimate to size the buffer, but we -+ // will read more data if available. -+ // +MinRead so ReadFrom will not reallocate if size is correct. -+ buf := bytes.NewBuffer(make([]byte, 0, size+bytes.MinRead)) -+ bytesRead, err := buf.ReadFrom(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1)) -+ return buf.Bytes(), int(bytesRead), err -+ } -+ } -+ // Read from LimitReader with limit max+1. So if the underlying -+ // reader is over limit, the result will be bigger than max. -+ d, err = io.ReadAll(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1)) -+ return d, len(d), err -+} -+ -+// For the two compressor parameters, both should not be set, but if they are, -+// dc takes precedence over compressor. -+// TODO(dfawley): wrap the old compressor/decompressor using the new API? -+func recv(p *parser, c baseCodec, s *transport.Stream, dc Decompressor, m interface{}, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) error { -+ buf, err := recvAndDecompress(p, s, dc, maxReceiveMessageSize, payInfo, compressor) -+ if err != nil { -+ return err -+ } -+ if err := c.Unmarshal(buf, m); err != nil { -+ return status.Errorf(codes.Internal, "grpc: failed to unmarshal the received message: %v", err) -+ } -+ if payInfo != nil { -+ payInfo.uncompressedBytes = buf -+ } else { -+ p.recvBufferPool.Put(&buf) -+ } -+ return nil -+} -+ -+// Information about RPC -+type rpcInfo struct { -+ failfast bool -+ preloaderInfo *compressorInfo -+} -+ -+// Information about Preloader -+// Responsible for storing codec, and compressors -+// If stream (s) has context s.Context which stores rpcInfo that has non nil -+// pointers to codec, and compressors, then we can use preparedMsg for Async message prep -+// and reuse marshalled bytes -+type compressorInfo struct { -+ codec baseCodec -+ cp Compressor -+ comp encoding.Compressor -+} -+ -+type rpcInfoContextKey struct{} -+ -+func newContextWithRPCInfo(ctx context.Context, failfast bool, codec baseCodec, cp Compressor, comp encoding.Compressor) context.Context { -+ return context.WithValue(ctx, rpcInfoContextKey{}, &rpcInfo{ -+ failfast: failfast, -+ preloaderInfo: &compressorInfo{ -+ codec: codec, -+ cp: cp, -+ comp: comp, -+ }, -+ }) -+} -+ -+func rpcInfoFromContext(ctx context.Context) (s *rpcInfo, ok bool) { -+ s, ok = ctx.Value(rpcInfoContextKey{}).(*rpcInfo) -+ return -+} -+ -+// Code returns the error code for err if it was produced by the rpc system. -+// Otherwise, it returns codes.Unknown. -+// -+// Deprecated: use status.Code instead. -+func Code(err error) codes.Code { -+ return status.Code(err) -+} -+ -+// ErrorDesc returns the error description of err if it was produced by the rpc system. -+// Otherwise, it returns err.Error() or empty string when err is nil. -+// -+// Deprecated: use status.Convert and Message method instead. -+func ErrorDesc(err error) string { -+ return status.Convert(err).Message() -+} -+ -+// Errorf returns an error containing an error code and a description; -+// Errorf returns nil if c is OK. -+// -+// Deprecated: use status.Errorf instead. -+func Errorf(c codes.Code, format string, a ...interface{}) error { -+ return status.Errorf(c, format, a...) -+} -+ -+// toRPCErr converts an error into an error from the status package. -+func toRPCErr(err error) error { -+ switch err { -+ case nil, io.EOF: -+ return err -+ case context.DeadlineExceeded: -+ return status.Error(codes.DeadlineExceeded, err.Error()) -+ case context.Canceled: -+ return status.Error(codes.Canceled, err.Error()) -+ case io.ErrUnexpectedEOF: -+ return status.Error(codes.Internal, err.Error()) -+ } -+ -+ switch e := err.(type) { -+ case transport.ConnectionError: -+ return status.Error(codes.Unavailable, e.Desc) -+ case *transport.NewStreamError: -+ return toRPCErr(e.Err) -+ } -+ -+ if _, ok := status.FromError(err); ok { -+ return err -+ } -+ -+ return status.Error(codes.Unknown, err.Error()) -+} -+ -+// setCallInfoCodec should only be called after CallOptions have been applied. -+func setCallInfoCodec(c *callInfo) error { -+ if c.codec != nil { -+ // codec was already set by a CallOption; use it, but set the content -+ // subtype if it is not set. -+ if c.contentSubtype == "" { -+ // c.codec is a baseCodec to hide the difference between grpc.Codec and -+ // encoding.Codec (Name vs. String method name). We only support -+ // setting content subtype from encoding.Codec to avoid a behavior -+ // change with the deprecated version. -+ if ec, ok := c.codec.(encoding.Codec); ok { -+ c.contentSubtype = strings.ToLower(ec.Name()) -+ } -+ } -+ return nil -+ } -+ -+ if c.contentSubtype == "" { -+ // No codec specified in CallOptions; use proto by default. -+ c.codec = encoding.GetCodec(proto.Name) -+ return nil -+ } -+ -+ // c.contentSubtype is already lowercased in CallContentSubtype -+ c.codec = encoding.GetCodec(c.contentSubtype) -+ if c.codec == nil { -+ return status.Errorf(codes.Internal, "no codec registered for content-subtype %s", c.contentSubtype) -+ } -+ return nil -+} -+ -+// channelzData is used to store channelz related data for ClientConn, addrConn and Server. -+// These fields cannot be embedded in the original structs (e.g. ClientConn), since to do atomic -+// operation on int64 variable on 32-bit machine, user is responsible to enforce memory alignment. -+// Here, by grouping those int64 fields inside a struct, we are enforcing the alignment. -+type channelzData struct { -+ callsStarted int64 -+ callsFailed int64 -+ callsSucceeded int64 -+ // lastCallStartedTime stores the timestamp that last call starts. It is of int64 type instead of -+ // time.Time since it's more costly to atomically update time.Time variable than int64 variable. -+ lastCallStartedTime int64 -+} -+ -+// The SupportPackageIsVersion variables are referenced from generated protocol -+// buffer files to ensure compatibility with the gRPC version used. The latest -+// support package version is 7. -+// -+// Older versions are kept for compatibility. -+// -+// These constants should not be referenced from any other code. -+const ( -+ SupportPackageIsVersion3 = true -+ SupportPackageIsVersion4 = true -+ SupportPackageIsVersion5 = true -+ SupportPackageIsVersion6 = true -+ SupportPackageIsVersion7 = true -+) -+ -+const grpcUA = "grpc-go/" + Version -diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go -new file mode 100755 -index 0000000..b44c7e8 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/server.go -@@ -0,0 +1,2104 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ "io" -+ "math" -+ "net" -+ "net/http" -+ "reflect" -+ "runtime" -+ "strings" -+ "sync" -+ "sync/atomic" -+ "time" -+ -+ "golang.org/x/net/trace" -+ -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/credentials" -+ "google.golang.org/grpc/encoding" -+ "google.golang.org/grpc/encoding/proto" -+ "google.golang.org/grpc/grpclog" -+ "google.golang.org/grpc/internal" -+ "google.golang.org/grpc/internal/binarylog" -+ "google.golang.org/grpc/internal/channelz" -+ "google.golang.org/grpc/internal/grpcsync" -+ "google.golang.org/grpc/internal/grpcutil" -+ "google.golang.org/grpc/internal/transport" -+ "google.golang.org/grpc/keepalive" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/peer" -+ "google.golang.org/grpc/stats" -+ "google.golang.org/grpc/status" -+ "google.golang.org/grpc/tap" -+) -+ -+const ( -+ defaultServerMaxReceiveMessageSize = 1024 * 1024 * 4 -+ defaultServerMaxSendMessageSize = math.MaxInt32 -+ -+ // Server transports are tracked in a map which is keyed on listener -+ // address. For regular gRPC traffic, connections are accepted in Serve() -+ // through a call to Accept(), and we use the actual listener address as key -+ // when we add it to the map. But for connections received through -+ // ServeHTTP(), we do not have a listener and hence use this dummy value. -+ listenerAddressForServeHTTP = "listenerAddressForServeHTTP" -+) -+ -+func init() { -+ internal.GetServerCredentials = func(srv *Server) credentials.TransportCredentials { -+ return srv.opts.creds -+ } -+ internal.DrainServerTransports = func(srv *Server, addr string) { -+ srv.drainServerTransports(addr) -+ } -+ internal.AddGlobalServerOptions = func(opt ...ServerOption) { -+ globalServerOptions = append(globalServerOptions, opt...) -+ } -+ internal.ClearGlobalServerOptions = func() { -+ globalServerOptions = nil -+ } -+ internal.BinaryLogger = binaryLogger -+ internal.JoinServerOptions = newJoinServerOption -+} -+ -+var statusOK = status.New(codes.OK, "") -+var logger = grpclog.Component("core") -+ -+type methodHandler func(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor UnaryServerInterceptor) (interface{}, error) -+ -+// MethodDesc represents an RPC service's method specification. -+type MethodDesc struct { -+ MethodName string -+ Handler methodHandler -+} -+ -+// ServiceDesc represents an RPC service's specification. -+type ServiceDesc struct { -+ ServiceName string -+ // The pointer to the service interface. Used to check whether the user -+ // provided implementation satisfies the interface requirements. -+ HandlerType interface{} -+ Methods []MethodDesc -+ Streams []StreamDesc -+ Metadata interface{} -+} -+ -+// serviceInfo wraps information about a service. It is very similar to -+// ServiceDesc and is constructed from it for internal purposes. -+type serviceInfo struct { -+ // Contains the implementation for the methods in this service. -+ serviceImpl interface{} -+ methods map[string]*MethodDesc -+ streams map[string]*StreamDesc -+ mdata interface{} -+} -+ -+// Server is a gRPC server to serve RPC requests. -+type Server struct { -+ opts serverOptions -+ -+ mu sync.Mutex // guards following -+ lis map[net.Listener]bool -+ // conns contains all active server transports. It is a map keyed on a -+ // listener address with the value being the set of active transports -+ // belonging to that listener. -+ conns map[string]map[transport.ServerTransport]bool -+ serve bool -+ drain bool -+ cv *sync.Cond // signaled when connections close for GracefulStop -+ services map[string]*serviceInfo // service name -> service info -+ events trace.EventLog -+ -+ quit *grpcsync.Event -+ done *grpcsync.Event -+ channelzRemoveOnce sync.Once -+ serveWG sync.WaitGroup // counts active Serve goroutines for GracefulStop -+ -+ channelzID *channelz.Identifier -+ czData *channelzData -+ -+ serverWorkerChannel chan func() -+} -+ -+type serverOptions struct { -+ creds credentials.TransportCredentials -+ codec baseCodec -+ cp Compressor -+ dc Decompressor -+ unaryInt UnaryServerInterceptor -+ streamInt StreamServerInterceptor -+ chainUnaryInts []UnaryServerInterceptor -+ chainStreamInts []StreamServerInterceptor -+ binaryLogger binarylog.Logger -+ inTapHandle tap.ServerInHandle -+ statsHandlers []stats.Handler -+ maxConcurrentStreams uint32 -+ maxReceiveMessageSize int -+ maxSendMessageSize int -+ unknownStreamDesc *StreamDesc -+ keepaliveParams keepalive.ServerParameters -+ keepalivePolicy keepalive.EnforcementPolicy -+ initialWindowSize int32 -+ initialConnWindowSize int32 -+ writeBufferSize int -+ readBufferSize int -+ connectionTimeout time.Duration -+ maxHeaderListSize *uint32 -+ headerTableSize *uint32 -+ numServerWorkers uint32 -+ recvBufferPool SharedBufferPool -+} -+ -+var defaultServerOptions = serverOptions{ -+ maxConcurrentStreams: math.MaxUint32, -+ maxReceiveMessageSize: defaultServerMaxReceiveMessageSize, -+ maxSendMessageSize: defaultServerMaxSendMessageSize, -+ connectionTimeout: 120 * time.Second, -+ writeBufferSize: defaultWriteBufSize, -+ readBufferSize: defaultReadBufSize, -+ recvBufferPool: nopBufferPool{}, -+} -+var globalServerOptions []ServerOption -+ -+// A ServerOption sets options such as credentials, codec and keepalive parameters, etc. -+type ServerOption interface { -+ apply(*serverOptions) -+} -+ -+// EmptyServerOption does not alter the server configuration. It can be embedded -+// in another structure to build custom server options. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type EmptyServerOption struct{} -+ -+func (EmptyServerOption) apply(*serverOptions) {} -+ -+// funcServerOption wraps a function that modifies serverOptions into an -+// implementation of the ServerOption interface. -+type funcServerOption struct { -+ f func(*serverOptions) -+} -+ -+func (fdo *funcServerOption) apply(do *serverOptions) { -+ fdo.f(do) -+} -+ -+func newFuncServerOption(f func(*serverOptions)) *funcServerOption { -+ return &funcServerOption{ -+ f: f, -+ } -+} -+ -+// joinServerOption provides a way to combine arbitrary number of server -+// options into one. -+type joinServerOption struct { -+ opts []ServerOption -+} -+ -+func (mdo *joinServerOption) apply(do *serverOptions) { -+ for _, opt := range mdo.opts { -+ opt.apply(do) -+ } -+} -+ -+func newJoinServerOption(opts ...ServerOption) ServerOption { -+ return &joinServerOption{opts: opts} -+} -+ -+// WriteBufferSize determines how much data can be batched before doing a write -+// on the wire. The corresponding memory allocation for this buffer will be -+// twice the size to keep syscalls low. The default value for this buffer is -+// 32KB. Zero or negative values will disable the write buffer such that each -+// write will be on underlying connection. -+// Note: A Send call may not directly translate to a write. -+func WriteBufferSize(s int) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.writeBufferSize = s -+ }) -+} -+ -+// ReadBufferSize lets you set the size of read buffer, this determines how much -+// data can be read at most for one read syscall. The default value for this -+// buffer is 32KB. Zero or negative values will disable read buffer for a -+// connection so data framer can access the underlying conn directly. -+func ReadBufferSize(s int) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.readBufferSize = s -+ }) -+} -+ -+// InitialWindowSize returns a ServerOption that sets window size for stream. -+// The lower bound for window size is 64K and any value smaller than that will be ignored. -+func InitialWindowSize(s int32) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.initialWindowSize = s -+ }) -+} -+ -+// InitialConnWindowSize returns a ServerOption that sets window size for a connection. -+// The lower bound for window size is 64K and any value smaller than that will be ignored. -+func InitialConnWindowSize(s int32) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.initialConnWindowSize = s -+ }) -+} -+ -+// KeepaliveParams returns a ServerOption that sets keepalive and max-age parameters for the server. -+func KeepaliveParams(kp keepalive.ServerParameters) ServerOption { -+ if kp.Time > 0 && kp.Time < time.Second { -+ logger.Warning("Adjusting keepalive ping interval to minimum period of 1s") -+ kp.Time = time.Second -+ } -+ -+ return newFuncServerOption(func(o *serverOptions) { -+ o.keepaliveParams = kp -+ }) -+} -+ -+// KeepaliveEnforcementPolicy returns a ServerOption that sets keepalive enforcement policy for the server. -+func KeepaliveEnforcementPolicy(kep keepalive.EnforcementPolicy) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.keepalivePolicy = kep -+ }) -+} -+ -+// CustomCodec returns a ServerOption that sets a codec for message marshaling and unmarshaling. -+// -+// This will override any lookups by content-subtype for Codecs registered with RegisterCodec. -+// -+// Deprecated: register codecs using encoding.RegisterCodec. The server will -+// automatically use registered codecs based on the incoming requests' headers. -+// See also -+// https://github.com/grpc/grpc-go/blob/master/Documentation/encoding.md#using-a-codec. -+// Will be supported throughout 1.x. -+func CustomCodec(codec Codec) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.codec = codec -+ }) -+} -+ -+// ForceServerCodec returns a ServerOption that sets a codec for message -+// marshaling and unmarshaling. -+// -+// This will override any lookups by content-subtype for Codecs registered -+// with RegisterCodec. -+// -+// See Content-Type on -+// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for -+// more details. Also see the documentation on RegisterCodec and -+// CallContentSubtype for more details on the interaction between encoding.Codec -+// and content-subtype. -+// -+// This function is provided for advanced users; prefer to register codecs -+// using encoding.RegisterCodec. -+// The server will automatically use registered codecs based on the incoming -+// requests' headers. See also -+// https://github.com/grpc/grpc-go/blob/master/Documentation/encoding.md#using-a-codec. -+// Will be supported throughout 1.x. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func ForceServerCodec(codec encoding.Codec) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.codec = codec -+ }) -+} -+ -+// RPCCompressor returns a ServerOption that sets a compressor for outbound -+// messages. For backward compatibility, all outbound messages will be sent -+// using this compressor, regardless of incoming message compression. By -+// default, server messages will be sent using the same compressor with which -+// request messages were sent. -+// -+// Deprecated: use encoding.RegisterCompressor instead. Will be supported -+// throughout 1.x. -+func RPCCompressor(cp Compressor) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.cp = cp -+ }) -+} -+ -+// RPCDecompressor returns a ServerOption that sets a decompressor for inbound -+// messages. It has higher priority than decompressors registered via -+// encoding.RegisterCompressor. -+// -+// Deprecated: use encoding.RegisterCompressor instead. Will be supported -+// throughout 1.x. -+func RPCDecompressor(dc Decompressor) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.dc = dc -+ }) -+} -+ -+// MaxMsgSize returns a ServerOption to set the max message size in bytes the server can receive. -+// If this is not set, gRPC uses the default limit. -+// -+// Deprecated: use MaxRecvMsgSize instead. Will be supported throughout 1.x. -+func MaxMsgSize(m int) ServerOption { -+ return MaxRecvMsgSize(m) -+} -+ -+// MaxRecvMsgSize returns a ServerOption to set the max message size in bytes the server can receive. -+// If this is not set, gRPC uses the default 4MB. -+func MaxRecvMsgSize(m int) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.maxReceiveMessageSize = m -+ }) -+} -+ -+// MaxSendMsgSize returns a ServerOption to set the max message size in bytes the server can send. -+// If this is not set, gRPC uses the default `math.MaxInt32`. -+func MaxSendMsgSize(m int) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.maxSendMessageSize = m -+ }) -+} -+ -+// MaxConcurrentStreams returns a ServerOption that will apply a limit on the number -+// of concurrent streams to each ServerTransport. -+func MaxConcurrentStreams(n uint32) ServerOption { -+ if n == 0 { -+ n = math.MaxUint32 -+ } -+ return newFuncServerOption(func(o *serverOptions) { -+ o.maxConcurrentStreams = n -+ }) -+} -+ -+// Creds returns a ServerOption that sets credentials for server connections. -+func Creds(c credentials.TransportCredentials) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.creds = c -+ }) -+} -+ -+// UnaryInterceptor returns a ServerOption that sets the UnaryServerInterceptor for the -+// server. Only one unary interceptor can be installed. The construction of multiple -+// interceptors (e.g., chaining) can be implemented at the caller. -+func UnaryInterceptor(i UnaryServerInterceptor) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ if o.unaryInt != nil { -+ panic("The unary server interceptor was already set and may not be reset.") -+ } -+ o.unaryInt = i -+ }) -+} -+ -+// ChainUnaryInterceptor returns a ServerOption that specifies the chained interceptor -+// for unary RPCs. The first interceptor will be the outer most, -+// while the last interceptor will be the inner most wrapper around the real call. -+// All unary interceptors added by this method will be chained. -+func ChainUnaryInterceptor(interceptors ...UnaryServerInterceptor) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.chainUnaryInts = append(o.chainUnaryInts, interceptors...) -+ }) -+} -+ -+// StreamInterceptor returns a ServerOption that sets the StreamServerInterceptor for the -+// server. Only one stream interceptor can be installed. -+func StreamInterceptor(i StreamServerInterceptor) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ if o.streamInt != nil { -+ panic("The stream server interceptor was already set and may not be reset.") -+ } -+ o.streamInt = i -+ }) -+} -+ -+// ChainStreamInterceptor returns a ServerOption that specifies the chained interceptor -+// for streaming RPCs. The first interceptor will be the outer most, -+// while the last interceptor will be the inner most wrapper around the real call. -+// All stream interceptors added by this method will be chained. -+func ChainStreamInterceptor(interceptors ...StreamServerInterceptor) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.chainStreamInts = append(o.chainStreamInts, interceptors...) -+ }) -+} -+ -+// InTapHandle returns a ServerOption that sets the tap handle for all the server -+// transport to be created. Only one can be installed. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func InTapHandle(h tap.ServerInHandle) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ if o.inTapHandle != nil { -+ panic("The tap handle was already set and may not be reset.") -+ } -+ o.inTapHandle = h -+ }) -+} -+ -+// StatsHandler returns a ServerOption that sets the stats handler for the server. -+func StatsHandler(h stats.Handler) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ if h == nil { -+ logger.Error("ignoring nil parameter in grpc.StatsHandler ServerOption") -+ // Do not allow a nil stats handler, which would otherwise cause -+ // panics. -+ return -+ } -+ o.statsHandlers = append(o.statsHandlers, h) -+ }) -+} -+ -+// binaryLogger returns a ServerOption that can set the binary logger for the -+// server. -+func binaryLogger(bl binarylog.Logger) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.binaryLogger = bl -+ }) -+} -+ -+// UnknownServiceHandler returns a ServerOption that allows for adding a custom -+// unknown service handler. The provided method is a bidi-streaming RPC service -+// handler that will be invoked instead of returning the "unimplemented" gRPC -+// error whenever a request is received for an unregistered service or method. -+// The handling function and stream interceptor (if set) have full access to -+// the ServerStream, including its Context. -+func UnknownServiceHandler(streamHandler StreamHandler) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.unknownStreamDesc = &StreamDesc{ -+ StreamName: "unknown_service_handler", -+ Handler: streamHandler, -+ // We need to assume that the users of the streamHandler will want to use both. -+ ClientStreams: true, -+ ServerStreams: true, -+ } -+ }) -+} -+ -+// ConnectionTimeout returns a ServerOption that sets the timeout for -+// connection establishment (up to and including HTTP/2 handshaking) for all -+// new connections. If this is not set, the default is 120 seconds. A zero or -+// negative value will result in an immediate timeout. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func ConnectionTimeout(d time.Duration) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.connectionTimeout = d -+ }) -+} -+ -+// MaxHeaderListSize returns a ServerOption that sets the max (uncompressed) size -+// of header list that the server is prepared to accept. -+func MaxHeaderListSize(s uint32) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.maxHeaderListSize = &s -+ }) -+} -+ -+// HeaderTableSize returns a ServerOption that sets the size of dynamic -+// header table for stream. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func HeaderTableSize(s uint32) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.headerTableSize = &s -+ }) -+} -+ -+// NumStreamWorkers returns a ServerOption that sets the number of worker -+// goroutines that should be used to process incoming streams. Setting this to -+// zero (default) will disable workers and spawn a new goroutine for each -+// stream. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func NumStreamWorkers(numServerWorkers uint32) ServerOption { -+ // TODO: If/when this API gets stabilized (i.e. stream workers become the -+ // only way streams are processed), change the behavior of the zero value to -+ // a sane default. Preliminary experiments suggest that a value equal to the -+ // number of CPUs available is most performant; requires thorough testing. -+ return newFuncServerOption(func(o *serverOptions) { -+ o.numServerWorkers = numServerWorkers -+ }) -+} -+ -+// RecvBufferPool returns a ServerOption that configures the server -+// to use the provided shared buffer pool for parsing incoming messages. Depending -+// on the application's workload, this could result in reduced memory allocation. -+// -+// If you are unsure about how to implement a memory pool but want to utilize one, -+// begin with grpc.NewSharedBufferPool. -+// -+// Note: The shared buffer pool feature will not be active if any of the following -+// options are used: StatsHandler, EnableTracing, or binary logging. In such -+// cases, the shared buffer pool will be ignored. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func RecvBufferPool(bufferPool SharedBufferPool) ServerOption { -+ return newFuncServerOption(func(o *serverOptions) { -+ o.recvBufferPool = bufferPool -+ }) -+} -+ -+// serverWorkerResetThreshold defines how often the stack must be reset. Every -+// N requests, by spawning a new goroutine in its place, a worker can reset its -+// stack so that large stacks don't live in memory forever. 2^16 should allow -+// each goroutine stack to live for at least a few seconds in a typical -+// workload (assuming a QPS of a few thousand requests/sec). -+const serverWorkerResetThreshold = 1 << 16 -+ -+// serverWorkers blocks on a *transport.Stream channel forever and waits for -+// data to be fed by serveStreams. This allows multiple requests to be -+// processed by the same goroutine, removing the need for expensive stack -+// re-allocations (see the runtime.morestack problem [1]). -+// -+// [1] https://github.com/golang/go/issues/18138 -+func (s *Server) serverWorker() { -+ for completed := 0; completed < serverWorkerResetThreshold; completed++ { -+ f, ok := <-s.serverWorkerChannel -+ if !ok { -+ return -+ } -+ f() -+ } -+ go s.serverWorker() -+} -+ -+// initServerWorkers creates worker goroutines and a channel to process incoming -+// connections to reduce the time spent overall on runtime.morestack. -+func (s *Server) initServerWorkers() { -+ s.serverWorkerChannel = make(chan func()) -+ for i := uint32(0); i < s.opts.numServerWorkers; i++ { -+ go s.serverWorker() -+ } -+} -+ -+func (s *Server) stopServerWorkers() { -+ close(s.serverWorkerChannel) -+} -+ -+// NewServer creates a gRPC server which has no service registered and has not -+// started to accept requests yet. -+func NewServer(opt ...ServerOption) *Server { -+ opts := defaultServerOptions -+ for _, o := range globalServerOptions { -+ o.apply(&opts) -+ } -+ for _, o := range opt { -+ o.apply(&opts) -+ } -+ s := &Server{ -+ lis: make(map[net.Listener]bool), -+ opts: opts, -+ conns: make(map[string]map[transport.ServerTransport]bool), -+ services: make(map[string]*serviceInfo), -+ quit: grpcsync.NewEvent(), -+ done: grpcsync.NewEvent(), -+ czData: new(channelzData), -+ } -+ chainUnaryServerInterceptors(s) -+ chainStreamServerInterceptors(s) -+ s.cv = sync.NewCond(&s.mu) -+ if EnableTracing { -+ _, file, line, _ := runtime.Caller(1) -+ s.events = trace.NewEventLog("grpc.Server", fmt.Sprintf("%s:%d", file, line)) -+ } -+ -+ if s.opts.numServerWorkers > 0 { -+ s.initServerWorkers() -+ } -+ -+ s.channelzID = channelz.RegisterServer(&channelzServer{s}, "") -+ channelz.Info(logger, s.channelzID, "Server created") -+ return s -+} -+ -+// printf records an event in s's event log, unless s has been stopped. -+// REQUIRES s.mu is held. -+func (s *Server) printf(format string, a ...interface{}) { -+ if s.events != nil { -+ s.events.Printf(format, a...) -+ } -+} -+ -+// errorf records an error in s's event log, unless s has been stopped. -+// REQUIRES s.mu is held. -+func (s *Server) errorf(format string, a ...interface{}) { -+ if s.events != nil { -+ s.events.Errorf(format, a...) -+ } -+} -+ -+// ServiceRegistrar wraps a single method that supports service registration. It -+// enables users to pass concrete types other than grpc.Server to the service -+// registration methods exported by the IDL generated code. -+type ServiceRegistrar interface { -+ // RegisterService registers a service and its implementation to the -+ // concrete type implementing this interface. It may not be called -+ // once the server has started serving. -+ // desc describes the service and its methods and handlers. impl is the -+ // service implementation which is passed to the method handlers. -+ RegisterService(desc *ServiceDesc, impl interface{}) -+} -+ -+// RegisterService registers a service and its implementation to the gRPC -+// server. It is called from the IDL generated code. This must be called before -+// invoking Serve. If ss is non-nil (for legacy code), its type is checked to -+// ensure it implements sd.HandlerType. -+func (s *Server) RegisterService(sd *ServiceDesc, ss interface{}) { -+ if ss != nil { -+ ht := reflect.TypeOf(sd.HandlerType).Elem() -+ st := reflect.TypeOf(ss) -+ if !st.Implements(ht) { -+ logger.Fatalf("grpc: Server.RegisterService found the handler of type %v that does not satisfy %v", st, ht) -+ } -+ } -+ s.register(sd, ss) -+} -+ -+func (s *Server) register(sd *ServiceDesc, ss interface{}) { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ s.printf("RegisterService(%q)", sd.ServiceName) -+ if s.serve { -+ logger.Fatalf("grpc: Server.RegisterService after Server.Serve for %q", sd.ServiceName) -+ } -+ if _, ok := s.services[sd.ServiceName]; ok { -+ logger.Fatalf("grpc: Server.RegisterService found duplicate service registration for %q", sd.ServiceName) -+ } -+ info := &serviceInfo{ -+ serviceImpl: ss, -+ methods: make(map[string]*MethodDesc), -+ streams: make(map[string]*StreamDesc), -+ mdata: sd.Metadata, -+ } -+ for i := range sd.Methods { -+ d := &sd.Methods[i] -+ info.methods[d.MethodName] = d -+ } -+ for i := range sd.Streams { -+ d := &sd.Streams[i] -+ info.streams[d.StreamName] = d -+ } -+ s.services[sd.ServiceName] = info -+} -+ -+// MethodInfo contains the information of an RPC including its method name and type. -+type MethodInfo struct { -+ // Name is the method name only, without the service name or package name. -+ Name string -+ // IsClientStream indicates whether the RPC is a client streaming RPC. -+ IsClientStream bool -+ // IsServerStream indicates whether the RPC is a server streaming RPC. -+ IsServerStream bool -+} -+ -+// ServiceInfo contains unary RPC method info, streaming RPC method info and metadata for a service. -+type ServiceInfo struct { -+ Methods []MethodInfo -+ // Metadata is the metadata specified in ServiceDesc when registering service. -+ Metadata interface{} -+} -+ -+// GetServiceInfo returns a map from service names to ServiceInfo. -+// Service names include the package names, in the form of .. -+func (s *Server) GetServiceInfo() map[string]ServiceInfo { -+ ret := make(map[string]ServiceInfo) -+ for n, srv := range s.services { -+ methods := make([]MethodInfo, 0, len(srv.methods)+len(srv.streams)) -+ for m := range srv.methods { -+ methods = append(methods, MethodInfo{ -+ Name: m, -+ IsClientStream: false, -+ IsServerStream: false, -+ }) -+ } -+ for m, d := range srv.streams { -+ methods = append(methods, MethodInfo{ -+ Name: m, -+ IsClientStream: d.ClientStreams, -+ IsServerStream: d.ServerStreams, -+ }) -+ } -+ -+ ret[n] = ServiceInfo{ -+ Methods: methods, -+ Metadata: srv.mdata, -+ } -+ } -+ return ret -+} -+ -+// ErrServerStopped indicates that the operation is now illegal because of -+// the server being stopped. -+var ErrServerStopped = errors.New("grpc: the server has been stopped") -+ -+type listenSocket struct { -+ net.Listener -+ channelzID *channelz.Identifier -+} -+ -+func (l *listenSocket) ChannelzMetric() *channelz.SocketInternalMetric { -+ return &channelz.SocketInternalMetric{ -+ SocketOptions: channelz.GetSocketOption(l.Listener), -+ LocalAddr: l.Listener.Addr(), -+ } -+} -+ -+func (l *listenSocket) Close() error { -+ err := l.Listener.Close() -+ channelz.RemoveEntry(l.channelzID) -+ channelz.Info(logger, l.channelzID, "ListenSocket deleted") -+ return err -+} -+ -+// Serve accepts incoming connections on the listener lis, creating a new -+// ServerTransport and service goroutine for each. The service goroutines -+// read gRPC requests and then call the registered handlers to reply to them. -+// Serve returns when lis.Accept fails with fatal errors. lis will be closed when -+// this method returns. -+// Serve will return a non-nil error unless Stop or GracefulStop is called. -+func (s *Server) Serve(lis net.Listener) error { -+ s.mu.Lock() -+ s.printf("serving") -+ s.serve = true -+ if s.lis == nil { -+ // Serve called after Stop or GracefulStop. -+ s.mu.Unlock() -+ lis.Close() -+ return ErrServerStopped -+ } -+ -+ s.serveWG.Add(1) -+ defer func() { -+ s.serveWG.Done() -+ if s.quit.HasFired() { -+ // Stop or GracefulStop called; block until done and return nil. -+ <-s.done.Done() -+ } -+ }() -+ -+ ls := &listenSocket{Listener: lis} -+ s.lis[ls] = true -+ -+ defer func() { -+ s.mu.Lock() -+ if s.lis != nil && s.lis[ls] { -+ ls.Close() -+ delete(s.lis, ls) -+ } -+ s.mu.Unlock() -+ }() -+ -+ var err error -+ ls.channelzID, err = channelz.RegisterListenSocket(ls, s.channelzID, lis.Addr().String()) -+ if err != nil { -+ s.mu.Unlock() -+ return err -+ } -+ s.mu.Unlock() -+ channelz.Info(logger, ls.channelzID, "ListenSocket created") -+ -+ var tempDelay time.Duration // how long to sleep on accept failure -+ for { -+ rawConn, err := lis.Accept() -+ if err != nil { -+ if ne, ok := err.(interface { -+ Temporary() bool -+ }); ok && ne.Temporary() { -+ if tempDelay == 0 { -+ tempDelay = 5 * time.Millisecond -+ } else { -+ tempDelay *= 2 -+ } -+ if max := 1 * time.Second; tempDelay > max { -+ tempDelay = max -+ } -+ s.mu.Lock() -+ s.printf("Accept error: %v; retrying in %v", err, tempDelay) -+ s.mu.Unlock() -+ timer := time.NewTimer(tempDelay) -+ select { -+ case <-timer.C: -+ case <-s.quit.Done(): -+ timer.Stop() -+ return nil -+ } -+ continue -+ } -+ s.mu.Lock() -+ s.printf("done serving; Accept = %v", err) -+ s.mu.Unlock() -+ -+ if s.quit.HasFired() { -+ return nil -+ } -+ return err -+ } -+ tempDelay = 0 -+ // Start a new goroutine to deal with rawConn so we don't stall this Accept -+ // loop goroutine. -+ // -+ // Make sure we account for the goroutine so GracefulStop doesn't nil out -+ // s.conns before this conn can be added. -+ s.serveWG.Add(1) -+ go func() { -+ s.handleRawConn(lis.Addr().String(), rawConn) -+ s.serveWG.Done() -+ }() -+ } -+} -+ -+// handleRawConn forks a goroutine to handle a just-accepted connection that -+// has not had any I/O performed on it yet. -+func (s *Server) handleRawConn(lisAddr string, rawConn net.Conn) { -+ if s.quit.HasFired() { -+ rawConn.Close() -+ return -+ } -+ rawConn.SetDeadline(time.Now().Add(s.opts.connectionTimeout)) -+ -+ // Finish handshaking (HTTP2) -+ st := s.newHTTP2Transport(rawConn) -+ rawConn.SetDeadline(time.Time{}) -+ if st == nil { -+ return -+ } -+ -+ if !s.addConn(lisAddr, st) { -+ return -+ } -+ go func() { -+ s.serveStreams(st) -+ s.removeConn(lisAddr, st) -+ }() -+} -+ -+func (s *Server) drainServerTransports(addr string) { -+ s.mu.Lock() -+ conns := s.conns[addr] -+ for st := range conns { -+ st.Drain("") -+ } -+ s.mu.Unlock() -+} -+ -+// newHTTP2Transport sets up a http/2 transport (using the -+// gRPC http2 server transport in transport/http2_server.go). -+func (s *Server) newHTTP2Transport(c net.Conn) transport.ServerTransport { -+ config := &transport.ServerConfig{ -+ MaxStreams: s.opts.maxConcurrentStreams, -+ ConnectionTimeout: s.opts.connectionTimeout, -+ Credentials: s.opts.creds, -+ InTapHandle: s.opts.inTapHandle, -+ StatsHandlers: s.opts.statsHandlers, -+ KeepaliveParams: s.opts.keepaliveParams, -+ KeepalivePolicy: s.opts.keepalivePolicy, -+ InitialWindowSize: s.opts.initialWindowSize, -+ InitialConnWindowSize: s.opts.initialConnWindowSize, -+ WriteBufferSize: s.opts.writeBufferSize, -+ ReadBufferSize: s.opts.readBufferSize, -+ ChannelzParentID: s.channelzID, -+ MaxHeaderListSize: s.opts.maxHeaderListSize, -+ HeaderTableSize: s.opts.headerTableSize, -+ } -+ st, err := transport.NewServerTransport(c, config) -+ if err != nil { -+ s.mu.Lock() -+ s.errorf("NewServerTransport(%q) failed: %v", c.RemoteAddr(), err) -+ s.mu.Unlock() -+ // ErrConnDispatched means that the connection was dispatched away from -+ // gRPC; those connections should be left open. -+ if err != credentials.ErrConnDispatched { -+ // Don't log on ErrConnDispatched and io.EOF to prevent log spam. -+ if err != io.EOF { -+ channelz.Info(logger, s.channelzID, "grpc: Server.Serve failed to create ServerTransport: ", err) -+ } -+ c.Close() -+ } -+ return nil -+ } -+ -+ return st -+} -+ -+func (s *Server) serveStreams(st transport.ServerTransport) { -+ defer st.Close(errors.New("finished serving streams for the server transport")) -+ var wg sync.WaitGroup -+ -+ streamQuota := newHandlerQuota(s.opts.maxConcurrentStreams) -+ st.HandleStreams(func(stream *transport.Stream) { -+ wg.Add(1) -+ -+ streamQuota.acquire() -+ f := func() { -+ defer streamQuota.release() -+ defer wg.Done() -+ s.handleStream(st, stream, s.traceInfo(st, stream)) -+ } -+ -+ if s.opts.numServerWorkers > 0 { -+ select { -+ case s.serverWorkerChannel <- f: -+ return -+ default: -+ // If all stream workers are busy, fallback to the default code path. -+ } -+ } -+ go f() -+ }, func(ctx context.Context, method string) context.Context { -+ if !EnableTracing { -+ return ctx -+ } -+ tr := trace.New("grpc.Recv."+methodFamily(method), method) -+ return trace.NewContext(ctx, tr) -+ }) -+ wg.Wait() -+} -+ -+var _ http.Handler = (*Server)(nil) -+ -+// ServeHTTP implements the Go standard library's http.Handler -+// interface by responding to the gRPC request r, by looking up -+// the requested gRPC method in the gRPC server s. -+// -+// The provided HTTP request must have arrived on an HTTP/2 -+// connection. When using the Go standard library's server, -+// practically this means that the Request must also have arrived -+// over TLS. -+// -+// To share one port (such as 443 for https) between gRPC and an -+// existing http.Handler, use a root http.Handler such as: -+// -+// if r.ProtoMajor == 2 && strings.HasPrefix( -+// r.Header.Get("Content-Type"), "application/grpc") { -+// grpcServer.ServeHTTP(w, r) -+// } else { -+// yourMux.ServeHTTP(w, r) -+// } -+// -+// Note that ServeHTTP uses Go's HTTP/2 server implementation which is totally -+// separate from grpc-go's HTTP/2 server. Performance and features may vary -+// between the two paths. ServeHTTP does not support some gRPC features -+// available through grpc-go's HTTP/2 server. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { -+ st, err := transport.NewServerHandlerTransport(w, r, s.opts.statsHandlers) -+ if err != nil { -+ // Errors returned from transport.NewServerHandlerTransport have -+ // already been written to w. -+ return -+ } -+ if !s.addConn(listenerAddressForServeHTTP, st) { -+ return -+ } -+ defer s.removeConn(listenerAddressForServeHTTP, st) -+ s.serveStreams(st) -+} -+ -+// traceInfo returns a traceInfo and associates it with stream, if tracing is enabled. -+// If tracing is not enabled, it returns nil. -+func (s *Server) traceInfo(st transport.ServerTransport, stream *transport.Stream) (trInfo *traceInfo) { -+ if !EnableTracing { -+ return nil -+ } -+ tr, ok := trace.FromContext(stream.Context()) -+ if !ok { -+ return nil -+ } -+ -+ trInfo = &traceInfo{ -+ tr: tr, -+ firstLine: firstLine{ -+ client: false, -+ remoteAddr: st.RemoteAddr(), -+ }, -+ } -+ if dl, ok := stream.Context().Deadline(); ok { -+ trInfo.firstLine.deadline = time.Until(dl) -+ } -+ return trInfo -+} -+ -+func (s *Server) addConn(addr string, st transport.ServerTransport) bool { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ if s.conns == nil { -+ st.Close(errors.New("Server.addConn called when server has already been stopped")) -+ return false -+ } -+ if s.drain { -+ // Transport added after we drained our existing conns: drain it -+ // immediately. -+ st.Drain("") -+ } -+ -+ if s.conns[addr] == nil { -+ // Create a map entry if this is the first connection on this listener. -+ s.conns[addr] = make(map[transport.ServerTransport]bool) -+ } -+ s.conns[addr][st] = true -+ return true -+} -+ -+func (s *Server) removeConn(addr string, st transport.ServerTransport) { -+ s.mu.Lock() -+ defer s.mu.Unlock() -+ -+ conns := s.conns[addr] -+ if conns != nil { -+ delete(conns, st) -+ if len(conns) == 0 { -+ // If the last connection for this address is being removed, also -+ // remove the map entry corresponding to the address. This is used -+ // in GracefulStop() when waiting for all connections to be closed. -+ delete(s.conns, addr) -+ } -+ s.cv.Broadcast() -+ } -+} -+ -+func (s *Server) channelzMetric() *channelz.ServerInternalMetric { -+ return &channelz.ServerInternalMetric{ -+ CallsStarted: atomic.LoadInt64(&s.czData.callsStarted), -+ CallsSucceeded: atomic.LoadInt64(&s.czData.callsSucceeded), -+ CallsFailed: atomic.LoadInt64(&s.czData.callsFailed), -+ LastCallStartedTimestamp: time.Unix(0, atomic.LoadInt64(&s.czData.lastCallStartedTime)), -+ } -+} -+ -+func (s *Server) incrCallsStarted() { -+ atomic.AddInt64(&s.czData.callsStarted, 1) -+ atomic.StoreInt64(&s.czData.lastCallStartedTime, time.Now().UnixNano()) -+} -+ -+func (s *Server) incrCallsSucceeded() { -+ atomic.AddInt64(&s.czData.callsSucceeded, 1) -+} -+ -+func (s *Server) incrCallsFailed() { -+ atomic.AddInt64(&s.czData.callsFailed, 1) -+} -+ -+func (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Stream, msg interface{}, cp Compressor, opts *transport.Options, comp encoding.Compressor) error { -+ data, err := encode(s.getCodec(stream.ContentSubtype()), msg) -+ if err != nil { -+ channelz.Error(logger, s.channelzID, "grpc: server failed to encode response: ", err) -+ return err -+ } -+ compData, err := compress(data, cp, comp) -+ if err != nil { -+ channelz.Error(logger, s.channelzID, "grpc: server failed to compress response: ", err) -+ return err -+ } -+ hdr, payload := msgHeader(data, compData) -+ // TODO(dfawley): should we be checking len(data) instead? -+ if len(payload) > s.opts.maxSendMessageSize { -+ return status.Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", len(payload), s.opts.maxSendMessageSize) -+ } -+ err = t.Write(stream, hdr, payload, opts) -+ if err == nil { -+ for _, sh := range s.opts.statsHandlers { -+ sh.HandleRPC(stream.Context(), outPayload(false, msg, data, payload, time.Now())) -+ } -+ } -+ return err -+} -+ -+// chainUnaryServerInterceptors chains all unary server interceptors into one. -+func chainUnaryServerInterceptors(s *Server) { -+ // Prepend opts.unaryInt to the chaining interceptors if it exists, since unaryInt will -+ // be executed before any other chained interceptors. -+ interceptors := s.opts.chainUnaryInts -+ if s.opts.unaryInt != nil { -+ interceptors = append([]UnaryServerInterceptor{s.opts.unaryInt}, s.opts.chainUnaryInts...) -+ } -+ -+ var chainedInt UnaryServerInterceptor -+ if len(interceptors) == 0 { -+ chainedInt = nil -+ } else if len(interceptors) == 1 { -+ chainedInt = interceptors[0] -+ } else { -+ chainedInt = chainUnaryInterceptors(interceptors) -+ } -+ -+ s.opts.unaryInt = chainedInt -+} -+ -+func chainUnaryInterceptors(interceptors []UnaryServerInterceptor) UnaryServerInterceptor { -+ return func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (interface{}, error) { -+ return interceptors[0](ctx, req, info, getChainUnaryHandler(interceptors, 0, info, handler)) -+ } -+} -+ -+func getChainUnaryHandler(interceptors []UnaryServerInterceptor, curr int, info *UnaryServerInfo, finalHandler UnaryHandler) UnaryHandler { -+ if curr == len(interceptors)-1 { -+ return finalHandler -+ } -+ return func(ctx context.Context, req interface{}) (interface{}, error) { -+ return interceptors[curr+1](ctx, req, info, getChainUnaryHandler(interceptors, curr+1, info, finalHandler)) -+ } -+} -+ -+func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport.Stream, info *serviceInfo, md *MethodDesc, trInfo *traceInfo) (err error) { -+ shs := s.opts.statsHandlers -+ if len(shs) != 0 || trInfo != nil || channelz.IsOn() { -+ if channelz.IsOn() { -+ s.incrCallsStarted() -+ } -+ var statsBegin *stats.Begin -+ for _, sh := range shs { -+ beginTime := time.Now() -+ statsBegin = &stats.Begin{ -+ BeginTime: beginTime, -+ IsClientStream: false, -+ IsServerStream: false, -+ } -+ sh.HandleRPC(stream.Context(), statsBegin) -+ } -+ if trInfo != nil { -+ trInfo.tr.LazyLog(&trInfo.firstLine, false) -+ } -+ // The deferred error handling for tracing, stats handler and channelz are -+ // combined into one function to reduce stack usage -- a defer takes ~56-64 -+ // bytes on the stack, so overflowing the stack will require a stack -+ // re-allocation, which is expensive. -+ // -+ // To maintain behavior similar to separate deferred statements, statements -+ // should be executed in the reverse order. That is, tracing first, stats -+ // handler second, and channelz last. Note that panics *within* defers will -+ // lead to different behavior, but that's an acceptable compromise; that -+ // would be undefined behavior territory anyway. -+ defer func() { -+ if trInfo != nil { -+ if err != nil && err != io.EOF { -+ trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) -+ trInfo.tr.SetError() -+ } -+ trInfo.tr.Finish() -+ } -+ -+ for _, sh := range shs { -+ end := &stats.End{ -+ BeginTime: statsBegin.BeginTime, -+ EndTime: time.Now(), -+ } -+ if err != nil && err != io.EOF { -+ end.Error = toRPCErr(err) -+ } -+ sh.HandleRPC(stream.Context(), end) -+ } -+ -+ if channelz.IsOn() { -+ if err != nil && err != io.EOF { -+ s.incrCallsFailed() -+ } else { -+ s.incrCallsSucceeded() -+ } -+ } -+ }() -+ } -+ var binlogs []binarylog.MethodLogger -+ if ml := binarylog.GetMethodLogger(stream.Method()); ml != nil { -+ binlogs = append(binlogs, ml) -+ } -+ if s.opts.binaryLogger != nil { -+ if ml := s.opts.binaryLogger.GetMethodLogger(stream.Method()); ml != nil { -+ binlogs = append(binlogs, ml) -+ } -+ } -+ if len(binlogs) != 0 { -+ ctx := stream.Context() -+ md, _ := metadata.FromIncomingContext(ctx) -+ logEntry := &binarylog.ClientHeader{ -+ Header: md, -+ MethodName: stream.Method(), -+ PeerAddr: nil, -+ } -+ if deadline, ok := ctx.Deadline(); ok { -+ logEntry.Timeout = time.Until(deadline) -+ if logEntry.Timeout < 0 { -+ logEntry.Timeout = 0 -+ } -+ } -+ if a := md[":authority"]; len(a) > 0 { -+ logEntry.Authority = a[0] -+ } -+ if peer, ok := peer.FromContext(ctx); ok { -+ logEntry.PeerAddr = peer.Addr -+ } -+ for _, binlog := range binlogs { -+ binlog.Log(ctx, logEntry) -+ } -+ } -+ -+ // comp and cp are used for compression. decomp and dc are used for -+ // decompression. If comp and decomp are both set, they are the same; -+ // however they are kept separate to ensure that at most one of the -+ // compressor/decompressor variable pairs are set for use later. -+ var comp, decomp encoding.Compressor -+ var cp Compressor -+ var dc Decompressor -+ var sendCompressorName string -+ -+ // If dc is set and matches the stream's compression, use it. Otherwise, try -+ // to find a matching registered compressor for decomp. -+ if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc { -+ dc = s.opts.dc -+ } else if rc != "" && rc != encoding.Identity { -+ decomp = encoding.GetCompressor(rc) -+ if decomp == nil { -+ st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc) -+ t.WriteStatus(stream, st) -+ return st.Err() -+ } -+ } -+ -+ // If cp is set, use it. Otherwise, attempt to compress the response using -+ // the incoming message compression method. -+ // -+ // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. -+ if s.opts.cp != nil { -+ cp = s.opts.cp -+ sendCompressorName = cp.Type() -+ } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { -+ // Legacy compressor not specified; attempt to respond with same encoding. -+ comp = encoding.GetCompressor(rc) -+ if comp != nil { -+ sendCompressorName = comp.Name() -+ } -+ } -+ -+ if sendCompressorName != "" { -+ if err := stream.SetSendCompress(sendCompressorName); err != nil { -+ return status.Errorf(codes.Internal, "grpc: failed to set send compressor: %v", err) -+ } -+ } -+ -+ var payInfo *payloadInfo -+ if len(shs) != 0 || len(binlogs) != 0 { -+ payInfo = &payloadInfo{} -+ } -+ d, err := recvAndDecompress(&parser{r: stream, recvBufferPool: s.opts.recvBufferPool}, stream, dc, s.opts.maxReceiveMessageSize, payInfo, decomp) -+ if err != nil { -+ if e := t.WriteStatus(stream, status.Convert(err)); e != nil { -+ channelz.Warningf(logger, s.channelzID, "grpc: Server.processUnaryRPC failed to write status: %v", e) -+ } -+ return err -+ } -+ if channelz.IsOn() { -+ t.IncrMsgRecv() -+ } -+ df := func(v interface{}) error { -+ if err := s.getCodec(stream.ContentSubtype()).Unmarshal(d, v); err != nil { -+ return status.Errorf(codes.Internal, "grpc: error unmarshalling request: %v", err) -+ } -+ for _, sh := range shs { -+ sh.HandleRPC(stream.Context(), &stats.InPayload{ -+ RecvTime: time.Now(), -+ Payload: v, -+ Length: len(d), -+ WireLength: payInfo.compressedLength + headerLen, -+ CompressedLength: payInfo.compressedLength, -+ Data: d, -+ }) -+ } -+ if len(binlogs) != 0 { -+ cm := &binarylog.ClientMessage{ -+ Message: d, -+ } -+ for _, binlog := range binlogs { -+ binlog.Log(stream.Context(), cm) -+ } -+ } -+ if trInfo != nil { -+ trInfo.tr.LazyLog(&payload{sent: false, msg: v}, true) -+ } -+ return nil -+ } -+ ctx := NewContextWithServerTransportStream(stream.Context(), stream) -+ reply, appErr := md.Handler(info.serviceImpl, ctx, df, s.opts.unaryInt) -+ if appErr != nil { -+ appStatus, ok := status.FromError(appErr) -+ if !ok { -+ // Convert non-status application error to a status error with code -+ // Unknown, but handle context errors specifically. -+ appStatus = status.FromContextError(appErr) -+ appErr = appStatus.Err() -+ } -+ if trInfo != nil { -+ trInfo.tr.LazyLog(stringer(appStatus.Message()), true) -+ trInfo.tr.SetError() -+ } -+ if e := t.WriteStatus(stream, appStatus); e != nil { -+ channelz.Warningf(logger, s.channelzID, "grpc: Server.processUnaryRPC failed to write status: %v", e) -+ } -+ if len(binlogs) != 0 { -+ if h, _ := stream.Header(); h.Len() > 0 { -+ // Only log serverHeader if there was header. Otherwise it can -+ // be trailer only. -+ sh := &binarylog.ServerHeader{ -+ Header: h, -+ } -+ for _, binlog := range binlogs { -+ binlog.Log(stream.Context(), sh) -+ } -+ } -+ st := &binarylog.ServerTrailer{ -+ Trailer: stream.Trailer(), -+ Err: appErr, -+ } -+ for _, binlog := range binlogs { -+ binlog.Log(stream.Context(), st) -+ } -+ } -+ return appErr -+ } -+ if trInfo != nil { -+ trInfo.tr.LazyLog(stringer("OK"), false) -+ } -+ opts := &transport.Options{Last: true} -+ -+ // Server handler could have set new compressor by calling SetSendCompressor. -+ // In case it is set, we need to use it for compressing outbound message. -+ if stream.SendCompress() != sendCompressorName { -+ comp = encoding.GetCompressor(stream.SendCompress()) -+ } -+ if err := s.sendResponse(t, stream, reply, cp, opts, comp); err != nil { -+ if err == io.EOF { -+ // The entire stream is done (for unary RPC only). -+ return err -+ } -+ if sts, ok := status.FromError(err); ok { -+ if e := t.WriteStatus(stream, sts); e != nil { -+ channelz.Warningf(logger, s.channelzID, "grpc: Server.processUnaryRPC failed to write status: %v", e) -+ } -+ } else { -+ switch st := err.(type) { -+ case transport.ConnectionError: -+ // Nothing to do here. -+ default: -+ panic(fmt.Sprintf("grpc: Unexpected error (%T) from sendResponse: %v", st, st)) -+ } -+ } -+ if len(binlogs) != 0 { -+ h, _ := stream.Header() -+ sh := &binarylog.ServerHeader{ -+ Header: h, -+ } -+ st := &binarylog.ServerTrailer{ -+ Trailer: stream.Trailer(), -+ Err: appErr, -+ } -+ for _, binlog := range binlogs { -+ binlog.Log(stream.Context(), sh) -+ binlog.Log(stream.Context(), st) -+ } -+ } -+ return err -+ } -+ if len(binlogs) != 0 { -+ h, _ := stream.Header() -+ sh := &binarylog.ServerHeader{ -+ Header: h, -+ } -+ sm := &binarylog.ServerMessage{ -+ Message: reply, -+ } -+ for _, binlog := range binlogs { -+ binlog.Log(stream.Context(), sh) -+ binlog.Log(stream.Context(), sm) -+ } -+ } -+ if channelz.IsOn() { -+ t.IncrMsgSent() -+ } -+ if trInfo != nil { -+ trInfo.tr.LazyLog(&payload{sent: true, msg: reply}, true) -+ } -+ // TODO: Should we be logging if writing status failed here, like above? -+ // Should the logging be in WriteStatus? Should we ignore the WriteStatus -+ // error or allow the stats handler to see it? -+ if len(binlogs) != 0 { -+ st := &binarylog.ServerTrailer{ -+ Trailer: stream.Trailer(), -+ Err: appErr, -+ } -+ for _, binlog := range binlogs { -+ binlog.Log(stream.Context(), st) -+ } -+ } -+ return t.WriteStatus(stream, statusOK) -+} -+ -+// chainStreamServerInterceptors chains all stream server interceptors into one. -+func chainStreamServerInterceptors(s *Server) { -+ // Prepend opts.streamInt to the chaining interceptors if it exists, since streamInt will -+ // be executed before any other chained interceptors. -+ interceptors := s.opts.chainStreamInts -+ if s.opts.streamInt != nil { -+ interceptors = append([]StreamServerInterceptor{s.opts.streamInt}, s.opts.chainStreamInts...) -+ } -+ -+ var chainedInt StreamServerInterceptor -+ if len(interceptors) == 0 { -+ chainedInt = nil -+ } else if len(interceptors) == 1 { -+ chainedInt = interceptors[0] -+ } else { -+ chainedInt = chainStreamInterceptors(interceptors) -+ } -+ -+ s.opts.streamInt = chainedInt -+} -+ -+func chainStreamInterceptors(interceptors []StreamServerInterceptor) StreamServerInterceptor { -+ return func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error { -+ return interceptors[0](srv, ss, info, getChainStreamHandler(interceptors, 0, info, handler)) -+ } -+} -+ -+func getChainStreamHandler(interceptors []StreamServerInterceptor, curr int, info *StreamServerInfo, finalHandler StreamHandler) StreamHandler { -+ if curr == len(interceptors)-1 { -+ return finalHandler -+ } -+ return func(srv interface{}, stream ServerStream) error { -+ return interceptors[curr+1](srv, stream, info, getChainStreamHandler(interceptors, curr+1, info, finalHandler)) -+ } -+} -+ -+func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transport.Stream, info *serviceInfo, sd *StreamDesc, trInfo *traceInfo) (err error) { -+ if channelz.IsOn() { -+ s.incrCallsStarted() -+ } -+ shs := s.opts.statsHandlers -+ var statsBegin *stats.Begin -+ if len(shs) != 0 { -+ beginTime := time.Now() -+ statsBegin = &stats.Begin{ -+ BeginTime: beginTime, -+ IsClientStream: sd.ClientStreams, -+ IsServerStream: sd.ServerStreams, -+ } -+ for _, sh := range shs { -+ sh.HandleRPC(stream.Context(), statsBegin) -+ } -+ } -+ ctx := NewContextWithServerTransportStream(stream.Context(), stream) -+ ss := &serverStream{ -+ ctx: ctx, -+ t: t, -+ s: stream, -+ p: &parser{r: stream, recvBufferPool: s.opts.recvBufferPool}, -+ codec: s.getCodec(stream.ContentSubtype()), -+ maxReceiveMessageSize: s.opts.maxReceiveMessageSize, -+ maxSendMessageSize: s.opts.maxSendMessageSize, -+ trInfo: trInfo, -+ statsHandler: shs, -+ } -+ -+ if len(shs) != 0 || trInfo != nil || channelz.IsOn() { -+ // See comment in processUnaryRPC on defers. -+ defer func() { -+ if trInfo != nil { -+ ss.mu.Lock() -+ if err != nil && err != io.EOF { -+ ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) -+ ss.trInfo.tr.SetError() -+ } -+ ss.trInfo.tr.Finish() -+ ss.trInfo.tr = nil -+ ss.mu.Unlock() -+ } -+ -+ if len(shs) != 0 { -+ end := &stats.End{ -+ BeginTime: statsBegin.BeginTime, -+ EndTime: time.Now(), -+ } -+ if err != nil && err != io.EOF { -+ end.Error = toRPCErr(err) -+ } -+ for _, sh := range shs { -+ sh.HandleRPC(stream.Context(), end) -+ } -+ } -+ -+ if channelz.IsOn() { -+ if err != nil && err != io.EOF { -+ s.incrCallsFailed() -+ } else { -+ s.incrCallsSucceeded() -+ } -+ } -+ }() -+ } -+ -+ if ml := binarylog.GetMethodLogger(stream.Method()); ml != nil { -+ ss.binlogs = append(ss.binlogs, ml) -+ } -+ if s.opts.binaryLogger != nil { -+ if ml := s.opts.binaryLogger.GetMethodLogger(stream.Method()); ml != nil { -+ ss.binlogs = append(ss.binlogs, ml) -+ } -+ } -+ if len(ss.binlogs) != 0 { -+ md, _ := metadata.FromIncomingContext(ctx) -+ logEntry := &binarylog.ClientHeader{ -+ Header: md, -+ MethodName: stream.Method(), -+ PeerAddr: nil, -+ } -+ if deadline, ok := ctx.Deadline(); ok { -+ logEntry.Timeout = time.Until(deadline) -+ if logEntry.Timeout < 0 { -+ logEntry.Timeout = 0 -+ } -+ } -+ if a := md[":authority"]; len(a) > 0 { -+ logEntry.Authority = a[0] -+ } -+ if peer, ok := peer.FromContext(ss.Context()); ok { -+ logEntry.PeerAddr = peer.Addr -+ } -+ for _, binlog := range ss.binlogs { -+ binlog.Log(stream.Context(), logEntry) -+ } -+ } -+ -+ // If dc is set and matches the stream's compression, use it. Otherwise, try -+ // to find a matching registered compressor for decomp. -+ if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc { -+ ss.dc = s.opts.dc -+ } else if rc != "" && rc != encoding.Identity { -+ ss.decomp = encoding.GetCompressor(rc) -+ if ss.decomp == nil { -+ st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc) -+ t.WriteStatus(ss.s, st) -+ return st.Err() -+ } -+ } -+ -+ // If cp is set, use it. Otherwise, attempt to compress the response using -+ // the incoming message compression method. -+ // -+ // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. -+ if s.opts.cp != nil { -+ ss.cp = s.opts.cp -+ ss.sendCompressorName = s.opts.cp.Type() -+ } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { -+ // Legacy compressor not specified; attempt to respond with same encoding. -+ ss.comp = encoding.GetCompressor(rc) -+ if ss.comp != nil { -+ ss.sendCompressorName = rc -+ } -+ } -+ -+ if ss.sendCompressorName != "" { -+ if err := stream.SetSendCompress(ss.sendCompressorName); err != nil { -+ return status.Errorf(codes.Internal, "grpc: failed to set send compressor: %v", err) -+ } -+ } -+ -+ ss.ctx = newContextWithRPCInfo(ss.ctx, false, ss.codec, ss.cp, ss.comp) -+ -+ if trInfo != nil { -+ trInfo.tr.LazyLog(&trInfo.firstLine, false) -+ } -+ var appErr error -+ var server interface{} -+ if info != nil { -+ server = info.serviceImpl -+ } -+ if s.opts.streamInt == nil { -+ appErr = sd.Handler(server, ss) -+ } else { -+ info := &StreamServerInfo{ -+ FullMethod: stream.Method(), -+ IsClientStream: sd.ClientStreams, -+ IsServerStream: sd.ServerStreams, -+ } -+ appErr = s.opts.streamInt(server, ss, info, sd.Handler) -+ } -+ if appErr != nil { -+ appStatus, ok := status.FromError(appErr) -+ if !ok { -+ // Convert non-status application error to a status error with code -+ // Unknown, but handle context errors specifically. -+ appStatus = status.FromContextError(appErr) -+ appErr = appStatus.Err() -+ } -+ if trInfo != nil { -+ ss.mu.Lock() -+ ss.trInfo.tr.LazyLog(stringer(appStatus.Message()), true) -+ ss.trInfo.tr.SetError() -+ ss.mu.Unlock() -+ } -+ if len(ss.binlogs) != 0 { -+ st := &binarylog.ServerTrailer{ -+ Trailer: ss.s.Trailer(), -+ Err: appErr, -+ } -+ for _, binlog := range ss.binlogs { -+ binlog.Log(stream.Context(), st) -+ } -+ } -+ t.WriteStatus(ss.s, appStatus) -+ // TODO: Should we log an error from WriteStatus here and below? -+ return appErr -+ } -+ if trInfo != nil { -+ ss.mu.Lock() -+ ss.trInfo.tr.LazyLog(stringer("OK"), false) -+ ss.mu.Unlock() -+ } -+ if len(ss.binlogs) != 0 { -+ st := &binarylog.ServerTrailer{ -+ Trailer: ss.s.Trailer(), -+ Err: appErr, -+ } -+ for _, binlog := range ss.binlogs { -+ binlog.Log(stream.Context(), st) -+ } -+ } -+ return t.WriteStatus(ss.s, statusOK) -+} -+ -+func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Stream, trInfo *traceInfo) { -+ sm := stream.Method() -+ if sm != "" && sm[0] == '/' { -+ sm = sm[1:] -+ } -+ pos := strings.LastIndex(sm, "/") -+ if pos == -1 { -+ if trInfo != nil { -+ trInfo.tr.LazyLog(&fmtStringer{"Malformed method name %q", []interface{}{sm}}, true) -+ trInfo.tr.SetError() -+ } -+ errDesc := fmt.Sprintf("malformed method name: %q", stream.Method()) -+ if err := t.WriteStatus(stream, status.New(codes.Unimplemented, errDesc)); err != nil { -+ if trInfo != nil { -+ trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) -+ trInfo.tr.SetError() -+ } -+ channelz.Warningf(logger, s.channelzID, "grpc: Server.handleStream failed to write status: %v", err) -+ } -+ if trInfo != nil { -+ trInfo.tr.Finish() -+ } -+ return -+ } -+ service := sm[:pos] -+ method := sm[pos+1:] -+ -+ srv, knownService := s.services[service] -+ if knownService { -+ if md, ok := srv.methods[method]; ok { -+ s.processUnaryRPC(t, stream, srv, md, trInfo) -+ return -+ } -+ if sd, ok := srv.streams[method]; ok { -+ s.processStreamingRPC(t, stream, srv, sd, trInfo) -+ return -+ } -+ } -+ // Unknown service, or known server unknown method. -+ if unknownDesc := s.opts.unknownStreamDesc; unknownDesc != nil { -+ s.processStreamingRPC(t, stream, nil, unknownDesc, trInfo) -+ return -+ } -+ var errDesc string -+ if !knownService { -+ errDesc = fmt.Sprintf("unknown service %v", service) -+ } else { -+ errDesc = fmt.Sprintf("unknown method %v for service %v", method, service) -+ } -+ if trInfo != nil { -+ trInfo.tr.LazyPrintf("%s", errDesc) -+ trInfo.tr.SetError() -+ } -+ if err := t.WriteStatus(stream, status.New(codes.Unimplemented, errDesc)); err != nil { -+ if trInfo != nil { -+ trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) -+ trInfo.tr.SetError() -+ } -+ channelz.Warningf(logger, s.channelzID, "grpc: Server.handleStream failed to write status: %v", err) -+ } -+ if trInfo != nil { -+ trInfo.tr.Finish() -+ } -+} -+ -+// The key to save ServerTransportStream in the context. -+type streamKey struct{} -+ -+// NewContextWithServerTransportStream creates a new context from ctx and -+// attaches stream to it. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func NewContextWithServerTransportStream(ctx context.Context, stream ServerTransportStream) context.Context { -+ return context.WithValue(ctx, streamKey{}, stream) -+} -+ -+// ServerTransportStream is a minimal interface that a transport stream must -+// implement. This can be used to mock an actual transport stream for tests of -+// handler code that use, for example, grpc.SetHeader (which requires some -+// stream to be in context). -+// -+// See also NewContextWithServerTransportStream. -+// -+// # Experimental -+// -+// Notice: This type is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type ServerTransportStream interface { -+ Method() string -+ SetHeader(md metadata.MD) error -+ SendHeader(md metadata.MD) error -+ SetTrailer(md metadata.MD) error -+} -+ -+// ServerTransportStreamFromContext returns the ServerTransportStream saved in -+// ctx. Returns nil if the given context has no stream associated with it -+// (which implies it is not an RPC invocation context). -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func ServerTransportStreamFromContext(ctx context.Context) ServerTransportStream { -+ s, _ := ctx.Value(streamKey{}).(ServerTransportStream) -+ return s -+} -+ -+// Stop stops the gRPC server. It immediately closes all open -+// connections and listeners. -+// It cancels all active RPCs on the server side and the corresponding -+// pending RPCs on the client side will get notified by connection -+// errors. -+func (s *Server) Stop() { -+ s.quit.Fire() -+ -+ defer func() { -+ s.serveWG.Wait() -+ s.done.Fire() -+ }() -+ -+ s.channelzRemoveOnce.Do(func() { channelz.RemoveEntry(s.channelzID) }) -+ -+ s.mu.Lock() -+ listeners := s.lis -+ s.lis = nil -+ conns := s.conns -+ s.conns = nil -+ // interrupt GracefulStop if Stop and GracefulStop are called concurrently. -+ s.cv.Broadcast() -+ s.mu.Unlock() -+ -+ for lis := range listeners { -+ lis.Close() -+ } -+ for _, cs := range conns { -+ for st := range cs { -+ st.Close(errors.New("Server.Stop called")) -+ } -+ } -+ if s.opts.numServerWorkers > 0 { -+ s.stopServerWorkers() -+ } -+ -+ s.mu.Lock() -+ if s.events != nil { -+ s.events.Finish() -+ s.events = nil -+ } -+ s.mu.Unlock() -+} -+ -+// GracefulStop stops the gRPC server gracefully. It stops the server from -+// accepting new connections and RPCs and blocks until all the pending RPCs are -+// finished. -+func (s *Server) GracefulStop() { -+ s.quit.Fire() -+ defer s.done.Fire() -+ -+ s.channelzRemoveOnce.Do(func() { channelz.RemoveEntry(s.channelzID) }) -+ s.mu.Lock() -+ if s.conns == nil { -+ s.mu.Unlock() -+ return -+ } -+ -+ for lis := range s.lis { -+ lis.Close() -+ } -+ s.lis = nil -+ if !s.drain { -+ for _, conns := range s.conns { -+ for st := range conns { -+ st.Drain("graceful_stop") -+ } -+ } -+ s.drain = true -+ } -+ -+ // Wait for serving threads to be ready to exit. Only then can we be sure no -+ // new conns will be created. -+ s.mu.Unlock() -+ s.serveWG.Wait() -+ s.mu.Lock() -+ -+ for len(s.conns) != 0 { -+ s.cv.Wait() -+ } -+ s.conns = nil -+ if s.events != nil { -+ s.events.Finish() -+ s.events = nil -+ } -+ s.mu.Unlock() -+} -+ -+// contentSubtype must be lowercase -+// cannot return nil -+func (s *Server) getCodec(contentSubtype string) baseCodec { -+ if s.opts.codec != nil { -+ return s.opts.codec -+ } -+ if contentSubtype == "" { -+ return encoding.GetCodec(proto.Name) -+ } -+ codec := encoding.GetCodec(contentSubtype) -+ if codec == nil { -+ return encoding.GetCodec(proto.Name) -+ } -+ return codec -+} -+ -+// SetHeader sets the header metadata to be sent from the server to the client. -+// The context provided must be the context passed to the server's handler. -+// -+// Streaming RPCs should prefer the SetHeader method of the ServerStream. -+// -+// When called multiple times, all the provided metadata will be merged. All -+// the metadata will be sent out when one of the following happens: -+// -+// - grpc.SendHeader is called, or for streaming handlers, stream.SendHeader. -+// - The first response message is sent. For unary handlers, this occurs when -+// the handler returns; for streaming handlers, this can happen when stream's -+// SendMsg method is called. -+// - An RPC status is sent out (error or success). This occurs when the handler -+// returns. -+// -+// SetHeader will fail if called after any of the events above. -+// -+// The error returned is compatible with the status package. However, the -+// status code will often not match the RPC status as seen by the client -+// application, and therefore, should not be relied upon for this purpose. -+func SetHeader(ctx context.Context, md metadata.MD) error { -+ if md.Len() == 0 { -+ return nil -+ } -+ stream := ServerTransportStreamFromContext(ctx) -+ if stream == nil { -+ return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) -+ } -+ return stream.SetHeader(md) -+} -+ -+// SendHeader sends header metadata. It may be called at most once, and may not -+// be called after any event that causes headers to be sent (see SetHeader for -+// a complete list). The provided md and headers set by SetHeader() will be -+// sent. -+// -+// The error returned is compatible with the status package. However, the -+// status code will often not match the RPC status as seen by the client -+// application, and therefore, should not be relied upon for this purpose. -+func SendHeader(ctx context.Context, md metadata.MD) error { -+ stream := ServerTransportStreamFromContext(ctx) -+ if stream == nil { -+ return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) -+ } -+ if err := stream.SendHeader(md); err != nil { -+ return toRPCErr(err) -+ } -+ return nil -+} -+ -+// SetSendCompressor sets a compressor for outbound messages from the server. -+// It must not be called after any event that causes headers to be sent -+// (see ServerStream.SetHeader for the complete list). Provided compressor is -+// used when below conditions are met: -+// -+// - compressor is registered via encoding.RegisterCompressor -+// - compressor name must exist in the client advertised compressor names -+// sent in grpc-accept-encoding header. Use ClientSupportedCompressors to -+// get client supported compressor names. -+// -+// The context provided must be the context passed to the server's handler. -+// It must be noted that compressor name encoding.Identity disables the -+// outbound compression. -+// By default, server messages will be sent using the same compressor with -+// which request messages were sent. -+// -+// It is not safe to call SetSendCompressor concurrently with SendHeader and -+// SendMsg. -+// -+// # Experimental -+// -+// Notice: This function is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func SetSendCompressor(ctx context.Context, name string) error { -+ stream, ok := ServerTransportStreamFromContext(ctx).(*transport.Stream) -+ if !ok || stream == nil { -+ return fmt.Errorf("failed to fetch the stream from the given context") -+ } -+ -+ if err := validateSendCompressor(name, stream.ClientAdvertisedCompressors()); err != nil { -+ return fmt.Errorf("unable to set send compressor: %w", err) -+ } -+ -+ return stream.SetSendCompress(name) -+} -+ -+// ClientSupportedCompressors returns compressor names advertised by the client -+// via grpc-accept-encoding header. -+// -+// The context provided must be the context passed to the server's handler. -+// -+// # Experimental -+// -+// Notice: This function is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func ClientSupportedCompressors(ctx context.Context) ([]string, error) { -+ stream, ok := ServerTransportStreamFromContext(ctx).(*transport.Stream) -+ if !ok || stream == nil { -+ return nil, fmt.Errorf("failed to fetch the stream from the given context %v", ctx) -+ } -+ -+ return strings.Split(stream.ClientAdvertisedCompressors(), ","), nil -+} -+ -+// SetTrailer sets the trailer metadata that will be sent when an RPC returns. -+// When called more than once, all the provided metadata will be merged. -+// -+// The error returned is compatible with the status package. However, the -+// status code will often not match the RPC status as seen by the client -+// application, and therefore, should not be relied upon for this purpose. -+func SetTrailer(ctx context.Context, md metadata.MD) error { -+ if md.Len() == 0 { -+ return nil -+ } -+ stream := ServerTransportStreamFromContext(ctx) -+ if stream == nil { -+ return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) -+ } -+ return stream.SetTrailer(md) -+} -+ -+// Method returns the method string for the server context. The returned -+// string is in the format of "/service/method". -+func Method(ctx context.Context) (string, bool) { -+ s := ServerTransportStreamFromContext(ctx) -+ if s == nil { -+ return "", false -+ } -+ return s.Method(), true -+} -+ -+type channelzServer struct { -+ s *Server -+} -+ -+func (c *channelzServer) ChannelzMetric() *channelz.ServerInternalMetric { -+ return c.s.channelzMetric() -+} -+ -+// validateSendCompressor returns an error when given compressor name cannot be -+// handled by the server or the client based on the advertised compressors. -+func validateSendCompressor(name, clientCompressors string) error { -+ if name == encoding.Identity { -+ return nil -+ } -+ -+ if !grpcutil.IsCompressorNameRegistered(name) { -+ return fmt.Errorf("compressor not registered %q", name) -+ } -+ -+ for _, c := range strings.Split(clientCompressors, ",") { -+ if c == name { -+ return nil // found match -+ } -+ } -+ return fmt.Errorf("client does not support compressor %q", name) -+} -+ -+// atomicSemaphore implements a blocking, counting semaphore. acquire should be -+// called synchronously; release may be called asynchronously. -+type atomicSemaphore struct { -+ n int64 // accessed atomically -+ wait chan struct{} -+} -+ -+func (q *atomicSemaphore) acquire() { -+ if atomic.AddInt64(&q.n, -1) < 0 { -+ // We ran out of quota. Block until a release happens. -+ <-q.wait -+ } -+} -+ -+func (q *atomicSemaphore) release() { -+ // N.B. the "<= 0" check below should allow for this to work with multiple -+ // concurrent calls to acquire, but also note that with synchronous calls to -+ // acquire, as our system does, n will never be less than -1. There are -+ // fairness issues (queuing) to consider if this was to be generalized. -+ if atomic.AddInt64(&q.n, -1) <= 0 { -+ // An acquire was waiting on us. Unblock it. -+ q.wait <- struct{}{} -+ } -+} -+ -+func newHandlerQuota(n uint32) *atomicSemaphore { -+ return &atomicSemaphore{n: int64(n), wait: make(chan struct{}, 1)} -+} -diff --git a/vendor/google.golang.org/grpc/service_config.go b/vendor/google.golang.org/grpc/service_config.go -new file mode 100755 -index 0000000..0df11fc ---- /dev/null -+++ b/vendor/google.golang.org/grpc/service_config.go -@@ -0,0 +1,347 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "encoding/json" -+ "errors" -+ "fmt" -+ "reflect" -+ "time" -+ -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/internal" -+ internalserviceconfig "google.golang.org/grpc/internal/serviceconfig" -+ "google.golang.org/grpc/serviceconfig" -+) -+ -+const maxInt = int(^uint(0) >> 1) -+ -+// MethodConfig defines the configuration recommended by the service providers for a -+// particular method. -+// -+// Deprecated: Users should not use this struct. Service config should be received -+// through name resolver, as specified here -+// https://github.com/grpc/grpc/blob/master/doc/service_config.md -+type MethodConfig = internalserviceconfig.MethodConfig -+ -+type lbConfig struct { -+ name string -+ cfg serviceconfig.LoadBalancingConfig -+} -+ -+// ServiceConfig is provided by the service provider and contains parameters for how -+// clients that connect to the service should behave. -+// -+// Deprecated: Users should not use this struct. Service config should be received -+// through name resolver, as specified here -+// https://github.com/grpc/grpc/blob/master/doc/service_config.md -+type ServiceConfig struct { -+ serviceconfig.Config -+ -+ // LB is the load balancer the service providers recommends. This is -+ // deprecated; lbConfigs is preferred. If lbConfig and LB are both present, -+ // lbConfig will be used. -+ LB *string -+ -+ // lbConfig is the service config's load balancing configuration. If -+ // lbConfig and LB are both present, lbConfig will be used. -+ lbConfig *lbConfig -+ -+ // Methods contains a map for the methods in this service. If there is an -+ // exact match for a method (i.e. /service/method) in the map, use the -+ // corresponding MethodConfig. If there's no exact match, look for the -+ // default config for the service (/service/) and use the corresponding -+ // MethodConfig if it exists. Otherwise, the method has no MethodConfig to -+ // use. -+ Methods map[string]MethodConfig -+ -+ // If a retryThrottlingPolicy is provided, gRPC will automatically throttle -+ // retry attempts and hedged RPCs when the client’s ratio of failures to -+ // successes exceeds a threshold. -+ // -+ // For each server name, the gRPC client will maintain a token_count which is -+ // initially set to maxTokens, and can take values between 0 and maxTokens. -+ // -+ // Every outgoing RPC (regardless of service or method invoked) will change -+ // token_count as follows: -+ // -+ // - Every failed RPC will decrement the token_count by 1. -+ // - Every successful RPC will increment the token_count by tokenRatio. -+ // -+ // If token_count is less than or equal to maxTokens / 2, then RPCs will not -+ // be retried and hedged RPCs will not be sent. -+ retryThrottling *retryThrottlingPolicy -+ // healthCheckConfig must be set as one of the requirement to enable LB channel -+ // health check. -+ healthCheckConfig *healthCheckConfig -+ // rawJSONString stores service config json string that get parsed into -+ // this service config struct. -+ rawJSONString string -+} -+ -+// healthCheckConfig defines the go-native version of the LB channel health check config. -+type healthCheckConfig struct { -+ // serviceName is the service name to use in the health-checking request. -+ ServiceName string -+} -+ -+type jsonRetryPolicy struct { -+ MaxAttempts int -+ InitialBackoff internalserviceconfig.Duration -+ MaxBackoff internalserviceconfig.Duration -+ BackoffMultiplier float64 -+ RetryableStatusCodes []codes.Code -+} -+ -+// retryThrottlingPolicy defines the go-native version of the retry throttling -+// policy defined by the service config here: -+// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#integration-with-service-config -+type retryThrottlingPolicy struct { -+ // The number of tokens starts at maxTokens. The token_count will always be -+ // between 0 and maxTokens. -+ // -+ // This field is required and must be greater than zero. -+ MaxTokens float64 -+ // The amount of tokens to add on each successful RPC. Typically this will -+ // be some number between 0 and 1, e.g., 0.1. -+ // -+ // This field is required and must be greater than zero. Up to 3 decimal -+ // places are supported. -+ TokenRatio float64 -+} -+ -+type jsonName struct { -+ Service string -+ Method string -+} -+ -+var ( -+ errDuplicatedName = errors.New("duplicated name") -+ errEmptyServiceNonEmptyMethod = errors.New("cannot combine empty 'service' and non-empty 'method'") -+) -+ -+func (j jsonName) generatePath() (string, error) { -+ if j.Service == "" { -+ if j.Method != "" { -+ return "", errEmptyServiceNonEmptyMethod -+ } -+ return "", nil -+ } -+ res := "/" + j.Service + "/" -+ if j.Method != "" { -+ res += j.Method -+ } -+ return res, nil -+} -+ -+// TODO(lyuxuan): delete this struct after cleaning up old service config implementation. -+type jsonMC struct { -+ Name *[]jsonName -+ WaitForReady *bool -+ Timeout *internalserviceconfig.Duration -+ MaxRequestMessageBytes *int64 -+ MaxResponseMessageBytes *int64 -+ RetryPolicy *jsonRetryPolicy -+} -+ -+// TODO(lyuxuan): delete this struct after cleaning up old service config implementation. -+type jsonSC struct { -+ LoadBalancingPolicy *string -+ LoadBalancingConfig *internalserviceconfig.BalancerConfig -+ MethodConfig *[]jsonMC -+ RetryThrottling *retryThrottlingPolicy -+ HealthCheckConfig *healthCheckConfig -+} -+ -+func init() { -+ internal.ParseServiceConfig = parseServiceConfig -+} -+func parseServiceConfig(js string) *serviceconfig.ParseResult { -+ if len(js) == 0 { -+ return &serviceconfig.ParseResult{Err: fmt.Errorf("no JSON service config provided")} -+ } -+ var rsc jsonSC -+ err := json.Unmarshal([]byte(js), &rsc) -+ if err != nil { -+ logger.Warningf("grpc: unmarshaling service config %s: %v", js, err) -+ return &serviceconfig.ParseResult{Err: err} -+ } -+ sc := ServiceConfig{ -+ LB: rsc.LoadBalancingPolicy, -+ Methods: make(map[string]MethodConfig), -+ retryThrottling: rsc.RetryThrottling, -+ healthCheckConfig: rsc.HealthCheckConfig, -+ rawJSONString: js, -+ } -+ if c := rsc.LoadBalancingConfig; c != nil { -+ sc.lbConfig = &lbConfig{ -+ name: c.Name, -+ cfg: c.Config, -+ } -+ } -+ -+ if rsc.MethodConfig == nil { -+ return &serviceconfig.ParseResult{Config: &sc} -+ } -+ -+ paths := map[string]struct{}{} -+ for _, m := range *rsc.MethodConfig { -+ if m.Name == nil { -+ continue -+ } -+ -+ mc := MethodConfig{ -+ WaitForReady: m.WaitForReady, -+ Timeout: (*time.Duration)(m.Timeout), -+ } -+ if mc.RetryPolicy, err = convertRetryPolicy(m.RetryPolicy); err != nil { -+ logger.Warningf("grpc: unmarshaling service config %s: %v", js, err) -+ return &serviceconfig.ParseResult{Err: err} -+ } -+ if m.MaxRequestMessageBytes != nil { -+ if *m.MaxRequestMessageBytes > int64(maxInt) { -+ mc.MaxReqSize = newInt(maxInt) -+ } else { -+ mc.MaxReqSize = newInt(int(*m.MaxRequestMessageBytes)) -+ } -+ } -+ if m.MaxResponseMessageBytes != nil { -+ if *m.MaxResponseMessageBytes > int64(maxInt) { -+ mc.MaxRespSize = newInt(maxInt) -+ } else { -+ mc.MaxRespSize = newInt(int(*m.MaxResponseMessageBytes)) -+ } -+ } -+ for i, n := range *m.Name { -+ path, err := n.generatePath() -+ if err != nil { -+ logger.Warningf("grpc: error unmarshaling service config %s due to methodConfig[%d]: %v", js, i, err) -+ return &serviceconfig.ParseResult{Err: err} -+ } -+ -+ if _, ok := paths[path]; ok { -+ err = errDuplicatedName -+ logger.Warningf("grpc: error unmarshaling service config %s due to methodConfig[%d]: %v", js, i, err) -+ return &serviceconfig.ParseResult{Err: err} -+ } -+ paths[path] = struct{}{} -+ sc.Methods[path] = mc -+ } -+ } -+ -+ if sc.retryThrottling != nil { -+ if mt := sc.retryThrottling.MaxTokens; mt <= 0 || mt > 1000 { -+ return &serviceconfig.ParseResult{Err: fmt.Errorf("invalid retry throttling config: maxTokens (%v) out of range (0, 1000]", mt)} -+ } -+ if tr := sc.retryThrottling.TokenRatio; tr <= 0 { -+ return &serviceconfig.ParseResult{Err: fmt.Errorf("invalid retry throttling config: tokenRatio (%v) may not be negative", tr)} -+ } -+ } -+ return &serviceconfig.ParseResult{Config: &sc} -+} -+ -+func convertRetryPolicy(jrp *jsonRetryPolicy) (p *internalserviceconfig.RetryPolicy, err error) { -+ if jrp == nil { -+ return nil, nil -+ } -+ -+ if jrp.MaxAttempts <= 1 || -+ jrp.InitialBackoff <= 0 || -+ jrp.MaxBackoff <= 0 || -+ jrp.BackoffMultiplier <= 0 || -+ len(jrp.RetryableStatusCodes) == 0 { -+ logger.Warningf("grpc: ignoring retry policy %v due to illegal configuration", jrp) -+ return nil, nil -+ } -+ -+ rp := &internalserviceconfig.RetryPolicy{ -+ MaxAttempts: jrp.MaxAttempts, -+ InitialBackoff: time.Duration(jrp.InitialBackoff), -+ MaxBackoff: time.Duration(jrp.MaxBackoff), -+ BackoffMultiplier: jrp.BackoffMultiplier, -+ RetryableStatusCodes: make(map[codes.Code]bool), -+ } -+ if rp.MaxAttempts > 5 { -+ // TODO(retry): Make the max maxAttempts configurable. -+ rp.MaxAttempts = 5 -+ } -+ for _, code := range jrp.RetryableStatusCodes { -+ rp.RetryableStatusCodes[code] = true -+ } -+ return rp, nil -+} -+ -+func min(a, b *int) *int { -+ if *a < *b { -+ return a -+ } -+ return b -+} -+ -+func getMaxSize(mcMax, doptMax *int, defaultVal int) *int { -+ if mcMax == nil && doptMax == nil { -+ return &defaultVal -+ } -+ if mcMax != nil && doptMax != nil { -+ return min(mcMax, doptMax) -+ } -+ if mcMax != nil { -+ return mcMax -+ } -+ return doptMax -+} -+ -+func newInt(b int) *int { -+ return &b -+} -+ -+func init() { -+ internal.EqualServiceConfigForTesting = equalServiceConfig -+} -+ -+// equalServiceConfig compares two configs. The rawJSONString field is ignored, -+// because they may diff in white spaces. -+// -+// If any of them is NOT *ServiceConfig, return false. -+func equalServiceConfig(a, b serviceconfig.Config) bool { -+ if a == nil && b == nil { -+ return true -+ } -+ aa, ok := a.(*ServiceConfig) -+ if !ok { -+ return false -+ } -+ bb, ok := b.(*ServiceConfig) -+ if !ok { -+ return false -+ } -+ aaRaw := aa.rawJSONString -+ aa.rawJSONString = "" -+ bbRaw := bb.rawJSONString -+ bb.rawJSONString = "" -+ defer func() { -+ aa.rawJSONString = aaRaw -+ bb.rawJSONString = bbRaw -+ }() -+ // Using reflect.DeepEqual instead of cmp.Equal because many balancer -+ // configs are unexported, and cmp.Equal cannot compare unexported fields -+ // from unexported structs. -+ return reflect.DeepEqual(aa, bb) -+} -diff --git a/vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go b/vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go -new file mode 100755 -index 0000000..35e7a20 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go -@@ -0,0 +1,44 @@ -+/* -+ * -+ * Copyright 2019 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package serviceconfig defines types and methods for operating on gRPC -+// service configs. -+// -+// # Experimental -+// -+// Notice: This package is EXPERIMENTAL and may be changed or removed in a -+// later release. -+package serviceconfig -+ -+// Config represents an opaque data structure holding a service config. -+type Config interface { -+ isServiceConfig() -+} -+ -+// LoadBalancingConfig represents an opaque data structure holding a load -+// balancing config. -+type LoadBalancingConfig interface { -+ isLoadBalancingConfig() -+} -+ -+// ParseResult contains a service config or an error. Exactly one must be -+// non-nil. -+type ParseResult struct { -+ Config Config -+ Err error -+} -diff --git a/vendor/google.golang.org/grpc/shared_buffer_pool.go b/vendor/google.golang.org/grpc/shared_buffer_pool.go -new file mode 100755 -index 0000000..c3a5a9a ---- /dev/null -+++ b/vendor/google.golang.org/grpc/shared_buffer_pool.go -@@ -0,0 +1,154 @@ -+/* -+ * -+ * Copyright 2023 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import "sync" -+ -+// SharedBufferPool is a pool of buffers that can be shared, resulting in -+// decreased memory allocation. Currently, in gRPC-go, it is only utilized -+// for parsing incoming messages. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+type SharedBufferPool interface { -+ // Get returns a buffer with specified length from the pool. -+ // -+ // The returned byte slice may be not zero initialized. -+ Get(length int) []byte -+ -+ // Put returns a buffer to the pool. -+ Put(*[]byte) -+} -+ -+// NewSharedBufferPool creates a simple SharedBufferPool with buckets -+// of different sizes to optimize memory usage. This prevents the pool from -+// wasting large amounts of memory, even when handling messages of varying sizes. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+func NewSharedBufferPool() SharedBufferPool { -+ return &simpleSharedBufferPool{ -+ pools: [poolArraySize]simpleSharedBufferChildPool{ -+ newBytesPool(level0PoolMaxSize), -+ newBytesPool(level1PoolMaxSize), -+ newBytesPool(level2PoolMaxSize), -+ newBytesPool(level3PoolMaxSize), -+ newBytesPool(level4PoolMaxSize), -+ newBytesPool(0), -+ }, -+ } -+} -+ -+// simpleSharedBufferPool is a simple implementation of SharedBufferPool. -+type simpleSharedBufferPool struct { -+ pools [poolArraySize]simpleSharedBufferChildPool -+} -+ -+func (p *simpleSharedBufferPool) Get(size int) []byte { -+ return p.pools[p.poolIdx(size)].Get(size) -+} -+ -+func (p *simpleSharedBufferPool) Put(bs *[]byte) { -+ p.pools[p.poolIdx(cap(*bs))].Put(bs) -+} -+ -+func (p *simpleSharedBufferPool) poolIdx(size int) int { -+ switch { -+ case size <= level0PoolMaxSize: -+ return level0PoolIdx -+ case size <= level1PoolMaxSize: -+ return level1PoolIdx -+ case size <= level2PoolMaxSize: -+ return level2PoolIdx -+ case size <= level3PoolMaxSize: -+ return level3PoolIdx -+ case size <= level4PoolMaxSize: -+ return level4PoolIdx -+ default: -+ return levelMaxPoolIdx -+ } -+} -+ -+const ( -+ level0PoolMaxSize = 16 // 16 B -+ level1PoolMaxSize = level0PoolMaxSize * 16 // 256 B -+ level2PoolMaxSize = level1PoolMaxSize * 16 // 4 KB -+ level3PoolMaxSize = level2PoolMaxSize * 16 // 64 KB -+ level4PoolMaxSize = level3PoolMaxSize * 16 // 1 MB -+) -+ -+const ( -+ level0PoolIdx = iota -+ level1PoolIdx -+ level2PoolIdx -+ level3PoolIdx -+ level4PoolIdx -+ levelMaxPoolIdx -+ poolArraySize -+) -+ -+type simpleSharedBufferChildPool interface { -+ Get(size int) []byte -+ Put(interface{}) -+} -+ -+type bufferPool struct { -+ sync.Pool -+ -+ defaultSize int -+} -+ -+func (p *bufferPool) Get(size int) []byte { -+ bs := p.Pool.Get().(*[]byte) -+ -+ if cap(*bs) < size { -+ p.Pool.Put(bs) -+ -+ return make([]byte, size) -+ } -+ -+ return (*bs)[:size] -+} -+ -+func newBytesPool(size int) simpleSharedBufferChildPool { -+ return &bufferPool{ -+ Pool: sync.Pool{ -+ New: func() interface{} { -+ bs := make([]byte, size) -+ return &bs -+ }, -+ }, -+ defaultSize: size, -+ } -+} -+ -+// nopBufferPool is a buffer pool just makes new buffer without pooling. -+type nopBufferPool struct { -+} -+ -+func (nopBufferPool) Get(length int) []byte { -+ return make([]byte, length) -+} -+ -+func (nopBufferPool) Put(*[]byte) { -+} -diff --git a/vendor/google.golang.org/grpc/stats/handlers.go b/vendor/google.golang.org/grpc/stats/handlers.go -new file mode 100755 -index 0000000..dc03731 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/stats/handlers.go -@@ -0,0 +1,63 @@ -+/* -+ * -+ * Copyright 2016 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package stats -+ -+import ( -+ "context" -+ "net" -+) -+ -+// ConnTagInfo defines the relevant information needed by connection context tagger. -+type ConnTagInfo struct { -+ // RemoteAddr is the remote address of the corresponding connection. -+ RemoteAddr net.Addr -+ // LocalAddr is the local address of the corresponding connection. -+ LocalAddr net.Addr -+} -+ -+// RPCTagInfo defines the relevant information needed by RPC context tagger. -+type RPCTagInfo struct { -+ // FullMethodName is the RPC method in the format of /package.service/method. -+ FullMethodName string -+ // FailFast indicates if this RPC is failfast. -+ // This field is only valid on client side, it's always false on server side. -+ FailFast bool -+} -+ -+// Handler defines the interface for the related stats handling (e.g., RPCs, connections). -+type Handler interface { -+ // TagRPC can attach some information to the given context. -+ // The context used for the rest lifetime of the RPC will be derived from -+ // the returned context. -+ TagRPC(context.Context, *RPCTagInfo) context.Context -+ // HandleRPC processes the RPC stats. -+ HandleRPC(context.Context, RPCStats) -+ -+ // TagConn can attach some information to the given context. -+ // The returned context will be used for stats handling. -+ // For conn stats handling, the context used in HandleConn for this -+ // connection will be derived from the context returned. -+ // For RPC stats handling, -+ // - On server side, the context used in HandleRPC for all RPCs on this -+ // connection will be derived from the context returned. -+ // - On client side, the context is not derived from the context returned. -+ TagConn(context.Context, *ConnTagInfo) context.Context -+ // HandleConn processes the Conn stats. -+ HandleConn(context.Context, ConnStats) -+} -diff --git a/vendor/google.golang.org/grpc/stats/stats.go b/vendor/google.golang.org/grpc/stats/stats.go -new file mode 100755 -index 0000000..7a552a9 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/stats/stats.go -@@ -0,0 +1,333 @@ -+/* -+ * -+ * Copyright 2016 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package stats is for collecting and reporting various network and RPC stats. -+// This package is for monitoring purpose only. All fields are read-only. -+// All APIs are experimental. -+package stats // import "google.golang.org/grpc/stats" -+ -+import ( -+ "context" -+ "net" -+ "time" -+ -+ "google.golang.org/grpc/metadata" -+) -+ -+// RPCStats contains stats information about RPCs. -+type RPCStats interface { -+ isRPCStats() -+ // IsClient returns true if this RPCStats is from client side. -+ IsClient() bool -+} -+ -+// Begin contains stats when an RPC attempt begins. -+// FailFast is only valid if this Begin is from client side. -+type Begin struct { -+ // Client is true if this Begin is from client side. -+ Client bool -+ // BeginTime is the time when the RPC attempt begins. -+ BeginTime time.Time -+ // FailFast indicates if this RPC is failfast. -+ FailFast bool -+ // IsClientStream indicates whether the RPC is a client streaming RPC. -+ IsClientStream bool -+ // IsServerStream indicates whether the RPC is a server streaming RPC. -+ IsServerStream bool -+ // IsTransparentRetryAttempt indicates whether this attempt was initiated -+ // due to transparently retrying a previous attempt. -+ IsTransparentRetryAttempt bool -+} -+ -+// IsClient indicates if the stats information is from client side. -+func (s *Begin) IsClient() bool { return s.Client } -+ -+func (s *Begin) isRPCStats() {} -+ -+// InPayload contains the information for an incoming payload. -+type InPayload struct { -+ // Client is true if this InPayload is from client side. -+ Client bool -+ // Payload is the payload with original type. -+ Payload interface{} -+ // Data is the serialized message payload. -+ Data []byte -+ -+ // Length is the size of the uncompressed payload data. Does not include any -+ // framing (gRPC or HTTP/2). -+ Length int -+ // CompressedLength is the size of the compressed payload data. Does not -+ // include any framing (gRPC or HTTP/2). Same as Length if compression not -+ // enabled. -+ CompressedLength int -+ // WireLength is the size of the compressed payload data plus gRPC framing. -+ // Does not include HTTP/2 framing. -+ WireLength int -+ -+ // RecvTime is the time when the payload is received. -+ RecvTime time.Time -+} -+ -+// IsClient indicates if the stats information is from client side. -+func (s *InPayload) IsClient() bool { return s.Client } -+ -+func (s *InPayload) isRPCStats() {} -+ -+// InHeader contains stats when a header is received. -+type InHeader struct { -+ // Client is true if this InHeader is from client side. -+ Client bool -+ // WireLength is the wire length of header. -+ WireLength int -+ // Compression is the compression algorithm used for the RPC. -+ Compression string -+ // Header contains the header metadata received. -+ Header metadata.MD -+ -+ // The following fields are valid only if Client is false. -+ // FullMethod is the full RPC method string, i.e., /package.service/method. -+ FullMethod string -+ // RemoteAddr is the remote address of the corresponding connection. -+ RemoteAddr net.Addr -+ // LocalAddr is the local address of the corresponding connection. -+ LocalAddr net.Addr -+} -+ -+// IsClient indicates if the stats information is from client side. -+func (s *InHeader) IsClient() bool { return s.Client } -+ -+func (s *InHeader) isRPCStats() {} -+ -+// InTrailer contains stats when a trailer is received. -+type InTrailer struct { -+ // Client is true if this InTrailer is from client side. -+ Client bool -+ // WireLength is the wire length of trailer. -+ WireLength int -+ // Trailer contains the trailer metadata received from the server. This -+ // field is only valid if this InTrailer is from the client side. -+ Trailer metadata.MD -+} -+ -+// IsClient indicates if the stats information is from client side. -+func (s *InTrailer) IsClient() bool { return s.Client } -+ -+func (s *InTrailer) isRPCStats() {} -+ -+// OutPayload contains the information for an outgoing payload. -+type OutPayload struct { -+ // Client is true if this OutPayload is from client side. -+ Client bool -+ // Payload is the payload with original type. -+ Payload interface{} -+ // Data is the serialized message payload. -+ Data []byte -+ // Length is the size of the uncompressed payload data. Does not include any -+ // framing (gRPC or HTTP/2). -+ Length int -+ // CompressedLength is the size of the compressed payload data. Does not -+ // include any framing (gRPC or HTTP/2). Same as Length if compression not -+ // enabled. -+ CompressedLength int -+ // WireLength is the size of the compressed payload data plus gRPC framing. -+ // Does not include HTTP/2 framing. -+ WireLength int -+ // SentTime is the time when the payload is sent. -+ SentTime time.Time -+} -+ -+// IsClient indicates if this stats information is from client side. -+func (s *OutPayload) IsClient() bool { return s.Client } -+ -+func (s *OutPayload) isRPCStats() {} -+ -+// OutHeader contains stats when a header is sent. -+type OutHeader struct { -+ // Client is true if this OutHeader is from client side. -+ Client bool -+ // Compression is the compression algorithm used for the RPC. -+ Compression string -+ // Header contains the header metadata sent. -+ Header metadata.MD -+ -+ // The following fields are valid only if Client is true. -+ // FullMethod is the full RPC method string, i.e., /package.service/method. -+ FullMethod string -+ // RemoteAddr is the remote address of the corresponding connection. -+ RemoteAddr net.Addr -+ // LocalAddr is the local address of the corresponding connection. -+ LocalAddr net.Addr -+} -+ -+// IsClient indicates if this stats information is from client side. -+func (s *OutHeader) IsClient() bool { return s.Client } -+ -+func (s *OutHeader) isRPCStats() {} -+ -+// OutTrailer contains stats when a trailer is sent. -+type OutTrailer struct { -+ // Client is true if this OutTrailer is from client side. -+ Client bool -+ // WireLength is the wire length of trailer. -+ // -+ // Deprecated: This field is never set. The length is not known when this message is -+ // emitted because the trailer fields are compressed with hpack after that. -+ WireLength int -+ // Trailer contains the trailer metadata sent to the client. This -+ // field is only valid if this OutTrailer is from the server side. -+ Trailer metadata.MD -+} -+ -+// IsClient indicates if this stats information is from client side. -+func (s *OutTrailer) IsClient() bool { return s.Client } -+ -+func (s *OutTrailer) isRPCStats() {} -+ -+// End contains stats when an RPC ends. -+type End struct { -+ // Client is true if this End is from client side. -+ Client bool -+ // BeginTime is the time when the RPC began. -+ BeginTime time.Time -+ // EndTime is the time when the RPC ends. -+ EndTime time.Time -+ // Trailer contains the trailer metadata received from the server. This -+ // field is only valid if this End is from the client side. -+ // Deprecated: use Trailer in InTrailer instead. -+ Trailer metadata.MD -+ // Error is the error the RPC ended with. It is an error generated from -+ // status.Status and can be converted back to status.Status using -+ // status.FromError if non-nil. -+ Error error -+} -+ -+// IsClient indicates if this is from client side. -+func (s *End) IsClient() bool { return s.Client } -+ -+func (s *End) isRPCStats() {} -+ -+// ConnStats contains stats information about connections. -+type ConnStats interface { -+ isConnStats() -+ // IsClient returns true if this ConnStats is from client side. -+ IsClient() bool -+} -+ -+// ConnBegin contains the stats of a connection when it is established. -+type ConnBegin struct { -+ // Client is true if this ConnBegin is from client side. -+ Client bool -+} -+ -+// IsClient indicates if this is from client side. -+func (s *ConnBegin) IsClient() bool { return s.Client } -+ -+func (s *ConnBegin) isConnStats() {} -+ -+// ConnEnd contains the stats of a connection when it ends. -+type ConnEnd struct { -+ // Client is true if this ConnEnd is from client side. -+ Client bool -+} -+ -+// IsClient indicates if this is from client side. -+func (s *ConnEnd) IsClient() bool { return s.Client } -+ -+func (s *ConnEnd) isConnStats() {} -+ -+type incomingTagsKey struct{} -+type outgoingTagsKey struct{} -+ -+// SetTags attaches stats tagging data to the context, which will be sent in -+// the outgoing RPC with the header grpc-tags-bin. Subsequent calls to -+// SetTags will overwrite the values from earlier calls. -+// -+// NOTE: this is provided only for backward compatibility with existing clients -+// and will likely be removed in an upcoming release. New uses should transmit -+// this type of data using metadata with a different, non-reserved (i.e. does -+// not begin with "grpc-") header name. -+func SetTags(ctx context.Context, b []byte) context.Context { -+ return context.WithValue(ctx, outgoingTagsKey{}, b) -+} -+ -+// Tags returns the tags from the context for the inbound RPC. -+// -+// NOTE: this is provided only for backward compatibility with existing clients -+// and will likely be removed in an upcoming release. New uses should transmit -+// this type of data using metadata with a different, non-reserved (i.e. does -+// not begin with "grpc-") header name. -+func Tags(ctx context.Context) []byte { -+ b, _ := ctx.Value(incomingTagsKey{}).([]byte) -+ return b -+} -+ -+// SetIncomingTags attaches stats tagging data to the context, to be read by -+// the application (not sent in outgoing RPCs). -+// -+// This is intended for gRPC-internal use ONLY. -+func SetIncomingTags(ctx context.Context, b []byte) context.Context { -+ return context.WithValue(ctx, incomingTagsKey{}, b) -+} -+ -+// OutgoingTags returns the tags from the context for the outbound RPC. -+// -+// This is intended for gRPC-internal use ONLY. -+func OutgoingTags(ctx context.Context) []byte { -+ b, _ := ctx.Value(outgoingTagsKey{}).([]byte) -+ return b -+} -+ -+type incomingTraceKey struct{} -+type outgoingTraceKey struct{} -+ -+// SetTrace attaches stats tagging data to the context, which will be sent in -+// the outgoing RPC with the header grpc-trace-bin. Subsequent calls to -+// SetTrace will overwrite the values from earlier calls. -+// -+// NOTE: this is provided only for backward compatibility with existing clients -+// and will likely be removed in an upcoming release. New uses should transmit -+// this type of data using metadata with a different, non-reserved (i.e. does -+// not begin with "grpc-") header name. -+func SetTrace(ctx context.Context, b []byte) context.Context { -+ return context.WithValue(ctx, outgoingTraceKey{}, b) -+} -+ -+// Trace returns the trace from the context for the inbound RPC. -+// -+// NOTE: this is provided only for backward compatibility with existing clients -+// and will likely be removed in an upcoming release. New uses should transmit -+// this type of data using metadata with a different, non-reserved (i.e. does -+// not begin with "grpc-") header name. -+func Trace(ctx context.Context) []byte { -+ b, _ := ctx.Value(incomingTraceKey{}).([]byte) -+ return b -+} -+ -+// SetIncomingTrace attaches stats tagging data to the context, to be read by -+// the application (not sent in outgoing RPCs). It is intended for -+// gRPC-internal use. -+func SetIncomingTrace(ctx context.Context, b []byte) context.Context { -+ return context.WithValue(ctx, incomingTraceKey{}, b) -+} -+ -+// OutgoingTrace returns the trace from the context for the outbound RPC. It is -+// intended for gRPC-internal use. -+func OutgoingTrace(ctx context.Context) []byte { -+ b, _ := ctx.Value(outgoingTraceKey{}).([]byte) -+ return b -+} -diff --git a/vendor/google.golang.org/grpc/status/status.go b/vendor/google.golang.org/grpc/status/status.go -new file mode 100755 -index 0000000..bcf2e4d ---- /dev/null -+++ b/vendor/google.golang.org/grpc/status/status.go -@@ -0,0 +1,160 @@ -+/* -+ * -+ * Copyright 2017 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package status implements errors returned by gRPC. These errors are -+// serialized and transmitted on the wire between server and client, and allow -+// for additional data to be transmitted via the Details field in the status -+// proto. gRPC service handlers should return an error created by this -+// package, and gRPC clients should expect a corresponding error to be -+// returned from the RPC call. -+// -+// This package upholds the invariants that a non-nil error may not -+// contain an OK code, and an OK code must result in a nil error. -+package status -+ -+import ( -+ "context" -+ "errors" -+ "fmt" -+ -+ spb "google.golang.org/genproto/googleapis/rpc/status" -+ -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/internal/status" -+) -+ -+// Status references google.golang.org/grpc/internal/status. It represents an -+// RPC status code, message, and details. It is immutable and should be -+// created with New, Newf, or FromProto. -+// https://godoc.org/google.golang.org/grpc/internal/status -+type Status = status.Status -+ -+// New returns a Status representing c and msg. -+func New(c codes.Code, msg string) *Status { -+ return status.New(c, msg) -+} -+ -+// Newf returns New(c, fmt.Sprintf(format, a...)). -+func Newf(c codes.Code, format string, a ...interface{}) *Status { -+ return New(c, fmt.Sprintf(format, a...)) -+} -+ -+// Error returns an error representing c and msg. If c is OK, returns nil. -+func Error(c codes.Code, msg string) error { -+ return New(c, msg).Err() -+} -+ -+// Errorf returns Error(c, fmt.Sprintf(format, a...)). -+func Errorf(c codes.Code, format string, a ...interface{}) error { -+ return Error(c, fmt.Sprintf(format, a...)) -+} -+ -+// ErrorProto returns an error representing s. If s.Code is OK, returns nil. -+func ErrorProto(s *spb.Status) error { -+ return FromProto(s).Err() -+} -+ -+// FromProto returns a Status representing s. -+func FromProto(s *spb.Status) *Status { -+ return status.FromProto(s) -+} -+ -+// FromError returns a Status representation of err. -+// -+// - If err was produced by this package or implements the method `GRPCStatus() -+// *Status` and `GRPCStatus()` does not return nil, or if err wraps a type -+// satisfying this, the Status from `GRPCStatus()` is returned. For wrapped -+// errors, the message returned contains the entire err.Error() text and not -+// just the wrapped status. In that case, ok is true. -+// -+// - If err is nil, a Status is returned with codes.OK and no message, and ok -+// is true. -+// -+// - If err implements the method `GRPCStatus() *Status` and `GRPCStatus()` -+// returns nil (which maps to Codes.OK), or if err wraps a type -+// satisfying this, a Status is returned with codes.Unknown and err's -+// Error() message, and ok is false. -+// -+// - Otherwise, err is an error not compatible with this package. In this -+// case, a Status is returned with codes.Unknown and err's Error() message, -+// and ok is false. -+func FromError(err error) (s *Status, ok bool) { -+ if err == nil { -+ return nil, true -+ } -+ type grpcstatus interface{ GRPCStatus() *Status } -+ if gs, ok := err.(grpcstatus); ok { -+ if gs.GRPCStatus() == nil { -+ // Error has status nil, which maps to codes.OK. There -+ // is no sensible behavior for this, so we turn it into -+ // an error with codes.Unknown and discard the existing -+ // status. -+ return New(codes.Unknown, err.Error()), false -+ } -+ return gs.GRPCStatus(), true -+ } -+ var gs grpcstatus -+ if errors.As(err, &gs) { -+ if gs.GRPCStatus() == nil { -+ // Error wraps an error that has status nil, which maps -+ // to codes.OK. There is no sensible behavior for this, -+ // so we turn it into an error with codes.Unknown and -+ // discard the existing status. -+ return New(codes.Unknown, err.Error()), false -+ } -+ p := gs.GRPCStatus().Proto() -+ p.Message = err.Error() -+ return status.FromProto(p), true -+ } -+ return New(codes.Unknown, err.Error()), false -+} -+ -+// Convert is a convenience function which removes the need to handle the -+// boolean return value from FromError. -+func Convert(err error) *Status { -+ s, _ := FromError(err) -+ return s -+} -+ -+// Code returns the Code of the error if it is a Status error or if it wraps a -+// Status error. If that is not the case, it returns codes.OK if err is nil, or -+// codes.Unknown otherwise. -+func Code(err error) codes.Code { -+ // Don't use FromError to avoid allocation of OK status. -+ if err == nil { -+ return codes.OK -+ } -+ -+ return Convert(err).Code() -+} -+ -+// FromContextError converts a context error or wrapped context error into a -+// Status. It returns a Status with codes.OK if err is nil, or a Status with -+// codes.Unknown if err is non-nil and not a context error. -+func FromContextError(err error) *Status { -+ if err == nil { -+ return nil -+ } -+ if errors.Is(err, context.DeadlineExceeded) { -+ return New(codes.DeadlineExceeded, err.Error()) -+ } -+ if errors.Is(err, context.Canceled) { -+ return New(codes.Canceled, err.Error()) -+ } -+ return New(codes.Unknown, err.Error()) -+} -diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go -new file mode 100755 -index 0000000..de32a75 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/stream.go -@@ -0,0 +1,1776 @@ -+/* -+ * -+ * Copyright 2014 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "context" -+ "errors" -+ "io" -+ "math" -+ "strconv" -+ "sync" -+ "time" -+ -+ "golang.org/x/net/trace" -+ "google.golang.org/grpc/balancer" -+ "google.golang.org/grpc/codes" -+ "google.golang.org/grpc/encoding" -+ "google.golang.org/grpc/internal/balancerload" -+ "google.golang.org/grpc/internal/binarylog" -+ "google.golang.org/grpc/internal/channelz" -+ "google.golang.org/grpc/internal/grpcrand" -+ "google.golang.org/grpc/internal/grpcutil" -+ imetadata "google.golang.org/grpc/internal/metadata" -+ iresolver "google.golang.org/grpc/internal/resolver" -+ "google.golang.org/grpc/internal/serviceconfig" -+ istatus "google.golang.org/grpc/internal/status" -+ "google.golang.org/grpc/internal/transport" -+ "google.golang.org/grpc/metadata" -+ "google.golang.org/grpc/peer" -+ "google.golang.org/grpc/stats" -+ "google.golang.org/grpc/status" -+) -+ -+// StreamHandler defines the handler called by gRPC server to complete the -+// execution of a streaming RPC. -+// -+// If a StreamHandler returns an error, it should either be produced by the -+// status package, or be one of the context errors. Otherwise, gRPC will use -+// codes.Unknown as the status code and err.Error() as the status message of the -+// RPC. -+type StreamHandler func(srv interface{}, stream ServerStream) error -+ -+// StreamDesc represents a streaming RPC service's method specification. Used -+// on the server when registering services and on the client when initiating -+// new streams. -+type StreamDesc struct { -+ // StreamName and Handler are only used when registering handlers on a -+ // server. -+ StreamName string // the name of the method excluding the service -+ Handler StreamHandler // the handler called for the method -+ -+ // ServerStreams and ClientStreams are used for registering handlers on a -+ // server as well as defining RPC behavior when passed to NewClientStream -+ // and ClientConn.NewStream. At least one must be true. -+ ServerStreams bool // indicates the server can perform streaming sends -+ ClientStreams bool // indicates the client can perform streaming sends -+} -+ -+// Stream defines the common interface a client or server stream has to satisfy. -+// -+// Deprecated: See ClientStream and ServerStream documentation instead. -+type Stream interface { -+ // Deprecated: See ClientStream and ServerStream documentation instead. -+ Context() context.Context -+ // Deprecated: See ClientStream and ServerStream documentation instead. -+ SendMsg(m interface{}) error -+ // Deprecated: See ClientStream and ServerStream documentation instead. -+ RecvMsg(m interface{}) error -+} -+ -+// ClientStream defines the client-side behavior of a streaming RPC. -+// -+// All errors returned from ClientStream methods are compatible with the -+// status package. -+type ClientStream interface { -+ // Header returns the header metadata received from the server if there -+ // is any. It blocks if the metadata is not ready to read. -+ Header() (metadata.MD, error) -+ // Trailer returns the trailer metadata from the server, if there is any. -+ // It must only be called after stream.CloseAndRecv has returned, or -+ // stream.Recv has returned a non-nil error (including io.EOF). -+ Trailer() metadata.MD -+ // CloseSend closes the send direction of the stream. It closes the stream -+ // when non-nil error is met. It is also not safe to call CloseSend -+ // concurrently with SendMsg. -+ CloseSend() error -+ // Context returns the context for this stream. -+ // -+ // It should not be called until after Header or RecvMsg has returned. Once -+ // called, subsequent client-side retries are disabled. -+ Context() context.Context -+ // SendMsg is generally called by generated code. On error, SendMsg aborts -+ // the stream. If the error was generated by the client, the status is -+ // returned directly; otherwise, io.EOF is returned and the status of -+ // the stream may be discovered using RecvMsg. -+ // -+ // SendMsg blocks until: -+ // - There is sufficient flow control to schedule m with the transport, or -+ // - The stream is done, or -+ // - The stream breaks. -+ // -+ // SendMsg does not wait until the message is received by the server. An -+ // untimely stream closure may result in lost messages. To ensure delivery, -+ // users should ensure the RPC completed successfully using RecvMsg. -+ // -+ // It is safe to have a goroutine calling SendMsg and another goroutine -+ // calling RecvMsg on the same stream at the same time, but it is not safe -+ // to call SendMsg on the same stream in different goroutines. It is also -+ // not safe to call CloseSend concurrently with SendMsg. -+ // -+ // It is not safe to modify the message after calling SendMsg. Tracing -+ // libraries and stats handlers may use the message lazily. -+ SendMsg(m interface{}) error -+ // RecvMsg blocks until it receives a message into m or the stream is -+ // done. It returns io.EOF when the stream completes successfully. On -+ // any other error, the stream is aborted and the error contains the RPC -+ // status. -+ // -+ // It is safe to have a goroutine calling SendMsg and another goroutine -+ // calling RecvMsg on the same stream at the same time, but it is not -+ // safe to call RecvMsg on the same stream in different goroutines. -+ RecvMsg(m interface{}) error -+} -+ -+// NewStream creates a new Stream for the client side. This is typically -+// called by generated code. ctx is used for the lifetime of the stream. -+// -+// To ensure resources are not leaked due to the stream returned, one of the following -+// actions must be performed: -+// -+// 1. Call Close on the ClientConn. -+// 2. Cancel the context provided. -+// 3. Call RecvMsg until a non-nil error is returned. A protobuf-generated -+// client-streaming RPC, for instance, might use the helper function -+// CloseAndRecv (note that CloseSend does not Recv, therefore is not -+// guaranteed to release all resources). -+// 4. Receive a non-nil, non-io.EOF error from Header or SendMsg. -+// -+// If none of the above happen, a goroutine and a context will be leaked, and grpc -+// will not call the optionally-configured stats handler with a stats.End message. -+func (cc *ClientConn) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) { -+ if err := cc.idlenessMgr.onCallBegin(); err != nil { -+ return nil, err -+ } -+ defer cc.idlenessMgr.onCallEnd() -+ -+ // allow interceptor to see all applicable call options, which means those -+ // configured as defaults from dial option as well as per-call options -+ opts = combine(cc.dopts.callOptions, opts) -+ -+ if cc.dopts.streamInt != nil { -+ return cc.dopts.streamInt(ctx, desc, cc, method, newClientStream, opts...) -+ } -+ return newClientStream(ctx, desc, cc, method, opts...) -+} -+ -+// NewClientStream is a wrapper for ClientConn.NewStream. -+func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) { -+ return cc.NewStream(ctx, desc, method, opts...) -+} -+ -+func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { -+ if md, added, ok := metadata.FromOutgoingContextRaw(ctx); ok { -+ // validate md -+ if err := imetadata.Validate(md); err != nil { -+ return nil, status.Error(codes.Internal, err.Error()) -+ } -+ // validate added -+ for _, kvs := range added { -+ for i := 0; i < len(kvs); i += 2 { -+ if err := imetadata.ValidatePair(kvs[i], kvs[i+1]); err != nil { -+ return nil, status.Error(codes.Internal, err.Error()) -+ } -+ } -+ } -+ } -+ if channelz.IsOn() { -+ cc.incrCallsStarted() -+ defer func() { -+ if err != nil { -+ cc.incrCallsFailed() -+ } -+ }() -+ } -+ // Provide an opportunity for the first RPC to see the first service config -+ // provided by the resolver. -+ if err := cc.waitForResolvedAddrs(ctx); err != nil { -+ return nil, err -+ } -+ -+ var mc serviceconfig.MethodConfig -+ var onCommit func() -+ var newStream = func(ctx context.Context, done func()) (iresolver.ClientStream, error) { -+ return newClientStreamWithParams(ctx, desc, cc, method, mc, onCommit, done, opts...) -+ } -+ -+ rpcInfo := iresolver.RPCInfo{Context: ctx, Method: method} -+ rpcConfig, err := cc.safeConfigSelector.SelectConfig(rpcInfo) -+ if err != nil { -+ if st, ok := status.FromError(err); ok { -+ // Restrict the code to the list allowed by gRFC A54. -+ if istatus.IsRestrictedControlPlaneCode(st) { -+ err = status.Errorf(codes.Internal, "config selector returned illegal status: %v", err) -+ } -+ return nil, err -+ } -+ return nil, toRPCErr(err) -+ } -+ -+ if rpcConfig != nil { -+ if rpcConfig.Context != nil { -+ ctx = rpcConfig.Context -+ } -+ mc = rpcConfig.MethodConfig -+ onCommit = rpcConfig.OnCommitted -+ if rpcConfig.Interceptor != nil { -+ rpcInfo.Context = nil -+ ns := newStream -+ newStream = func(ctx context.Context, done func()) (iresolver.ClientStream, error) { -+ cs, err := rpcConfig.Interceptor.NewStream(ctx, rpcInfo, done, ns) -+ if err != nil { -+ return nil, toRPCErr(err) -+ } -+ return cs, nil -+ } -+ } -+ } -+ -+ return newStream(ctx, func() {}) -+} -+ -+func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc serviceconfig.MethodConfig, onCommit, doneFunc func(), opts ...CallOption) (_ iresolver.ClientStream, err error) { -+ c := defaultCallInfo() -+ if mc.WaitForReady != nil { -+ c.failFast = !*mc.WaitForReady -+ } -+ -+ // Possible context leak: -+ // The cancel function for the child context we create will only be called -+ // when RecvMsg returns a non-nil error, if the ClientConn is closed, or if -+ // an error is generated by SendMsg. -+ // https://github.com/grpc/grpc-go/issues/1818. -+ var cancel context.CancelFunc -+ if mc.Timeout != nil && *mc.Timeout >= 0 { -+ ctx, cancel = context.WithTimeout(ctx, *mc.Timeout) -+ } else { -+ ctx, cancel = context.WithCancel(ctx) -+ } -+ defer func() { -+ if err != nil { -+ cancel() -+ } -+ }() -+ -+ for _, o := range opts { -+ if err := o.before(c); err != nil { -+ return nil, toRPCErr(err) -+ } -+ } -+ c.maxSendMessageSize = getMaxSize(mc.MaxReqSize, c.maxSendMessageSize, defaultClientMaxSendMessageSize) -+ c.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize) -+ if err := setCallInfoCodec(c); err != nil { -+ return nil, err -+ } -+ -+ callHdr := &transport.CallHdr{ -+ Host: cc.authority, -+ Method: method, -+ ContentSubtype: c.contentSubtype, -+ DoneFunc: doneFunc, -+ } -+ -+ // Set our outgoing compression according to the UseCompressor CallOption, if -+ // set. In that case, also find the compressor from the encoding package. -+ // Otherwise, use the compressor configured by the WithCompressor DialOption, -+ // if set. -+ var cp Compressor -+ var comp encoding.Compressor -+ if ct := c.compressorType; ct != "" { -+ callHdr.SendCompress = ct -+ if ct != encoding.Identity { -+ comp = encoding.GetCompressor(ct) -+ if comp == nil { -+ return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct) -+ } -+ } -+ } else if cc.dopts.cp != nil { -+ callHdr.SendCompress = cc.dopts.cp.Type() -+ cp = cc.dopts.cp -+ } -+ if c.creds != nil { -+ callHdr.Creds = c.creds -+ } -+ -+ cs := &clientStream{ -+ callHdr: callHdr, -+ ctx: ctx, -+ methodConfig: &mc, -+ opts: opts, -+ callInfo: c, -+ cc: cc, -+ desc: desc, -+ codec: c.codec, -+ cp: cp, -+ comp: comp, -+ cancel: cancel, -+ firstAttempt: true, -+ onCommit: onCommit, -+ } -+ if !cc.dopts.disableRetry { -+ cs.retryThrottler = cc.retryThrottler.Load().(*retryThrottler) -+ } -+ if ml := binarylog.GetMethodLogger(method); ml != nil { -+ cs.binlogs = append(cs.binlogs, ml) -+ } -+ if cc.dopts.binaryLogger != nil { -+ if ml := cc.dopts.binaryLogger.GetMethodLogger(method); ml != nil { -+ cs.binlogs = append(cs.binlogs, ml) -+ } -+ } -+ -+ // Pick the transport to use and create a new stream on the transport. -+ // Assign cs.attempt upon success. -+ op := func(a *csAttempt) error { -+ if err := a.getTransport(); err != nil { -+ return err -+ } -+ if err := a.newStream(); err != nil { -+ return err -+ } -+ // Because this operation is always called either here (while creating -+ // the clientStream) or by the retry code while locked when replaying -+ // the operation, it is safe to access cs.attempt directly. -+ cs.attempt = a -+ return nil -+ } -+ if err := cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op) }); err != nil { -+ return nil, err -+ } -+ -+ if len(cs.binlogs) != 0 { -+ md, _ := metadata.FromOutgoingContext(ctx) -+ logEntry := &binarylog.ClientHeader{ -+ OnClientSide: true, -+ Header: md, -+ MethodName: method, -+ Authority: cs.cc.authority, -+ } -+ if deadline, ok := ctx.Deadline(); ok { -+ logEntry.Timeout = time.Until(deadline) -+ if logEntry.Timeout < 0 { -+ logEntry.Timeout = 0 -+ } -+ } -+ for _, binlog := range cs.binlogs { -+ binlog.Log(cs.ctx, logEntry) -+ } -+ } -+ -+ if desc != unaryStreamDesc { -+ // Listen on cc and stream contexts to cleanup when the user closes the -+ // ClientConn or cancels the stream context. In all other cases, an error -+ // should already be injected into the recv buffer by the transport, which -+ // the client will eventually receive, and then we will cancel the stream's -+ // context in clientStream.finish. -+ go func() { -+ select { -+ case <-cc.ctx.Done(): -+ cs.finish(ErrClientConnClosing) -+ case <-ctx.Done(): -+ cs.finish(toRPCErr(ctx.Err())) -+ } -+ }() -+ } -+ return cs, nil -+} -+ -+// newAttemptLocked creates a new csAttempt without a transport or stream. -+func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error) { -+ if err := cs.ctx.Err(); err != nil { -+ return nil, toRPCErr(err) -+ } -+ if err := cs.cc.ctx.Err(); err != nil { -+ return nil, ErrClientConnClosing -+ } -+ -+ ctx := newContextWithRPCInfo(cs.ctx, cs.callInfo.failFast, cs.callInfo.codec, cs.cp, cs.comp) -+ method := cs.callHdr.Method -+ var beginTime time.Time -+ shs := cs.cc.dopts.copts.StatsHandlers -+ for _, sh := range shs { -+ ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: cs.callInfo.failFast}) -+ beginTime = time.Now() -+ begin := &stats.Begin{ -+ Client: true, -+ BeginTime: beginTime, -+ FailFast: cs.callInfo.failFast, -+ IsClientStream: cs.desc.ClientStreams, -+ IsServerStream: cs.desc.ServerStreams, -+ IsTransparentRetryAttempt: isTransparent, -+ } -+ sh.HandleRPC(ctx, begin) -+ } -+ -+ var trInfo *traceInfo -+ if EnableTracing { -+ trInfo = &traceInfo{ -+ tr: trace.New("grpc.Sent."+methodFamily(method), method), -+ firstLine: firstLine{ -+ client: true, -+ }, -+ } -+ if deadline, ok := ctx.Deadline(); ok { -+ trInfo.firstLine.deadline = time.Until(deadline) -+ } -+ trInfo.tr.LazyLog(&trInfo.firstLine, false) -+ ctx = trace.NewContext(ctx, trInfo.tr) -+ } -+ -+ if cs.cc.parsedTarget.URL.Scheme == "xds" { -+ // Add extra metadata (metadata that will be added by transport) to context -+ // so the balancer can see them. -+ ctx = grpcutil.WithExtraMetadata(ctx, metadata.Pairs( -+ "content-type", grpcutil.ContentType(cs.callHdr.ContentSubtype), -+ )) -+ } -+ -+ return &csAttempt{ -+ ctx: ctx, -+ beginTime: beginTime, -+ cs: cs, -+ dc: cs.cc.dopts.dc, -+ statsHandlers: shs, -+ trInfo: trInfo, -+ }, nil -+} -+ -+func (a *csAttempt) getTransport() error { -+ cs := a.cs -+ -+ var err error -+ a.t, a.pickResult, err = cs.cc.getTransport(a.ctx, cs.callInfo.failFast, cs.callHdr.Method) -+ if err != nil { -+ if de, ok := err.(dropError); ok { -+ err = de.error -+ a.drop = true -+ } -+ return err -+ } -+ if a.trInfo != nil { -+ a.trInfo.firstLine.SetRemoteAddr(a.t.RemoteAddr()) -+ } -+ return nil -+} -+ -+func (a *csAttempt) newStream() error { -+ cs := a.cs -+ cs.callHdr.PreviousAttempts = cs.numRetries -+ -+ // Merge metadata stored in PickResult, if any, with existing call metadata. -+ // It is safe to overwrite the csAttempt's context here, since all state -+ // maintained in it are local to the attempt. When the attempt has to be -+ // retried, a new instance of csAttempt will be created. -+ if a.pickResult.Metadata != nil { -+ // We currently do not have a function it the metadata package which -+ // merges given metadata with existing metadata in a context. Existing -+ // function `AppendToOutgoingContext()` takes a variadic argument of key -+ // value pairs. -+ // -+ // TODO: Make it possible to retrieve key value pairs from metadata.MD -+ // in a form passable to AppendToOutgoingContext(), or create a version -+ // of AppendToOutgoingContext() that accepts a metadata.MD. -+ md, _ := metadata.FromOutgoingContext(a.ctx) -+ md = metadata.Join(md, a.pickResult.Metadata) -+ a.ctx = metadata.NewOutgoingContext(a.ctx, md) -+ } -+ -+ s, err := a.t.NewStream(a.ctx, cs.callHdr) -+ if err != nil { -+ nse, ok := err.(*transport.NewStreamError) -+ if !ok { -+ // Unexpected. -+ return err -+ } -+ -+ if nse.AllowTransparentRetry { -+ a.allowTransparentRetry = true -+ } -+ -+ // Unwrap and convert error. -+ return toRPCErr(nse.Err) -+ } -+ a.s = s -+ a.p = &parser{r: s, recvBufferPool: a.cs.cc.dopts.recvBufferPool} -+ return nil -+} -+ -+// clientStream implements a client side Stream. -+type clientStream struct { -+ callHdr *transport.CallHdr -+ opts []CallOption -+ callInfo *callInfo -+ cc *ClientConn -+ desc *StreamDesc -+ -+ codec baseCodec -+ cp Compressor -+ comp encoding.Compressor -+ -+ cancel context.CancelFunc // cancels all attempts -+ -+ sentLast bool // sent an end stream -+ -+ methodConfig *MethodConfig -+ -+ ctx context.Context // the application's context, wrapped by stats/tracing -+ -+ retryThrottler *retryThrottler // The throttler active when the RPC began. -+ -+ binlogs []binarylog.MethodLogger -+ // serverHeaderBinlogged is a boolean for whether server header has been -+ // logged. Server header will be logged when the first time one of those -+ // happens: stream.Header(), stream.Recv(). -+ // -+ // It's only read and used by Recv() and Header(), so it doesn't need to be -+ // synchronized. -+ serverHeaderBinlogged bool -+ -+ mu sync.Mutex -+ firstAttempt bool // if true, transparent retry is valid -+ numRetries int // exclusive of transparent retry attempt(s) -+ numRetriesSincePushback int // retries since pushback; to reset backoff -+ finished bool // TODO: replace with atomic cmpxchg or sync.Once? -+ // attempt is the active client stream attempt. -+ // The only place where it is written is the newAttemptLocked method and this method never writes nil. -+ // So, attempt can be nil only inside newClientStream function when clientStream is first created. -+ // One of the first things done after clientStream's creation, is to call newAttemptLocked which either -+ // assigns a non nil value to the attempt or returns an error. If an error is returned from newAttemptLocked, -+ // then newClientStream calls finish on the clientStream and returns. So, finish method is the only -+ // place where we need to check if the attempt is nil. -+ attempt *csAttempt -+ // TODO(hedging): hedging will have multiple attempts simultaneously. -+ committed bool // active attempt committed for retry? -+ onCommit func() -+ buffer []func(a *csAttempt) error // operations to replay on retry -+ bufferSize int // current size of buffer -+} -+ -+// csAttempt implements a single transport stream attempt within a -+// clientStream. -+type csAttempt struct { -+ ctx context.Context -+ cs *clientStream -+ t transport.ClientTransport -+ s *transport.Stream -+ p *parser -+ pickResult balancer.PickResult -+ -+ finished bool -+ dc Decompressor -+ decomp encoding.Compressor -+ decompSet bool -+ -+ mu sync.Mutex // guards trInfo.tr -+ // trInfo may be nil (if EnableTracing is false). -+ // trInfo.tr is set when created (if EnableTracing is true), -+ // and cleared when the finish method is called. -+ trInfo *traceInfo -+ -+ statsHandlers []stats.Handler -+ beginTime time.Time -+ -+ // set for newStream errors that may be transparently retried -+ allowTransparentRetry bool -+ // set for pick errors that are returned as a status -+ drop bool -+} -+ -+func (cs *clientStream) commitAttemptLocked() { -+ if !cs.committed && cs.onCommit != nil { -+ cs.onCommit() -+ } -+ cs.committed = true -+ cs.buffer = nil -+} -+ -+func (cs *clientStream) commitAttempt() { -+ cs.mu.Lock() -+ cs.commitAttemptLocked() -+ cs.mu.Unlock() -+} -+ -+// shouldRetry returns nil if the RPC should be retried; otherwise it returns -+// the error that should be returned by the operation. If the RPC should be -+// retried, the bool indicates whether it is being retried transparently. -+func (a *csAttempt) shouldRetry(err error) (bool, error) { -+ cs := a.cs -+ -+ if cs.finished || cs.committed || a.drop { -+ // RPC is finished or committed or was dropped by the picker; cannot retry. -+ return false, err -+ } -+ if a.s == nil && a.allowTransparentRetry { -+ return true, nil -+ } -+ // Wait for the trailers. -+ unprocessed := false -+ if a.s != nil { -+ <-a.s.Done() -+ unprocessed = a.s.Unprocessed() -+ } -+ if cs.firstAttempt && unprocessed { -+ // First attempt, stream unprocessed: transparently retry. -+ return true, nil -+ } -+ if cs.cc.dopts.disableRetry { -+ return false, err -+ } -+ -+ pushback := 0 -+ hasPushback := false -+ if a.s != nil { -+ if !a.s.TrailersOnly() { -+ return false, err -+ } -+ -+ // TODO(retry): Move down if the spec changes to not check server pushback -+ // before considering this a failure for throttling. -+ sps := a.s.Trailer()["grpc-retry-pushback-ms"] -+ if len(sps) == 1 { -+ var e error -+ if pushback, e = strconv.Atoi(sps[0]); e != nil || pushback < 0 { -+ channelz.Infof(logger, cs.cc.channelzID, "Server retry pushback specified to abort (%q).", sps[0]) -+ cs.retryThrottler.throttle() // This counts as a failure for throttling. -+ return false, err -+ } -+ hasPushback = true -+ } else if len(sps) > 1 { -+ channelz.Warningf(logger, cs.cc.channelzID, "Server retry pushback specified multiple values (%q); not retrying.", sps) -+ cs.retryThrottler.throttle() // This counts as a failure for throttling. -+ return false, err -+ } -+ } -+ -+ var code codes.Code -+ if a.s != nil { -+ code = a.s.Status().Code() -+ } else { -+ code = status.Code(err) -+ } -+ -+ rp := cs.methodConfig.RetryPolicy -+ if rp == nil || !rp.RetryableStatusCodes[code] { -+ return false, err -+ } -+ -+ // Note: the ordering here is important; we count this as a failure -+ // only if the code matched a retryable code. -+ if cs.retryThrottler.throttle() { -+ return false, err -+ } -+ if cs.numRetries+1 >= rp.MaxAttempts { -+ return false, err -+ } -+ -+ var dur time.Duration -+ if hasPushback { -+ dur = time.Millisecond * time.Duration(pushback) -+ cs.numRetriesSincePushback = 0 -+ } else { -+ fact := math.Pow(rp.BackoffMultiplier, float64(cs.numRetriesSincePushback)) -+ cur := float64(rp.InitialBackoff) * fact -+ if max := float64(rp.MaxBackoff); cur > max { -+ cur = max -+ } -+ dur = time.Duration(grpcrand.Int63n(int64(cur))) -+ cs.numRetriesSincePushback++ -+ } -+ -+ // TODO(dfawley): we could eagerly fail here if dur puts us past the -+ // deadline, but unsure if it is worth doing. -+ t := time.NewTimer(dur) -+ select { -+ case <-t.C: -+ cs.numRetries++ -+ return false, nil -+ case <-cs.ctx.Done(): -+ t.Stop() -+ return false, status.FromContextError(cs.ctx.Err()).Err() -+ } -+} -+ -+// Returns nil if a retry was performed and succeeded; error otherwise. -+func (cs *clientStream) retryLocked(attempt *csAttempt, lastErr error) error { -+ for { -+ attempt.finish(toRPCErr(lastErr)) -+ isTransparent, err := attempt.shouldRetry(lastErr) -+ if err != nil { -+ cs.commitAttemptLocked() -+ return err -+ } -+ cs.firstAttempt = false -+ attempt, err = cs.newAttemptLocked(isTransparent) -+ if err != nil { -+ // Only returns error if the clientconn is closed or the context of -+ // the stream is canceled. -+ return err -+ } -+ // Note that the first op in the replay buffer always sets cs.attempt -+ // if it is able to pick a transport and create a stream. -+ if lastErr = cs.replayBufferLocked(attempt); lastErr == nil { -+ return nil -+ } -+ } -+} -+ -+func (cs *clientStream) Context() context.Context { -+ cs.commitAttempt() -+ // No need to lock before using attempt, since we know it is committed and -+ // cannot change. -+ if cs.attempt.s != nil { -+ return cs.attempt.s.Context() -+ } -+ return cs.ctx -+} -+ -+func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func()) error { -+ cs.mu.Lock() -+ for { -+ if cs.committed { -+ cs.mu.Unlock() -+ // toRPCErr is used in case the error from the attempt comes from -+ // NewClientStream, which intentionally doesn't return a status -+ // error to allow for further inspection; all other errors should -+ // already be status errors. -+ return toRPCErr(op(cs.attempt)) -+ } -+ if len(cs.buffer) == 0 { -+ // For the first op, which controls creation of the stream and -+ // assigns cs.attempt, we need to create a new attempt inline -+ // before executing the first op. On subsequent ops, the attempt -+ // is created immediately before replaying the ops. -+ var err error -+ if cs.attempt, err = cs.newAttemptLocked(false /* isTransparent */); err != nil { -+ cs.mu.Unlock() -+ cs.finish(err) -+ return err -+ } -+ } -+ a := cs.attempt -+ cs.mu.Unlock() -+ err := op(a) -+ cs.mu.Lock() -+ if a != cs.attempt { -+ // We started another attempt already. -+ continue -+ } -+ if err == io.EOF { -+ <-a.s.Done() -+ } -+ if err == nil || (err == io.EOF && a.s.Status().Code() == codes.OK) { -+ onSuccess() -+ cs.mu.Unlock() -+ return err -+ } -+ if err := cs.retryLocked(a, err); err != nil { -+ cs.mu.Unlock() -+ return err -+ } -+ } -+} -+ -+func (cs *clientStream) Header() (metadata.MD, error) { -+ var m metadata.MD -+ noHeader := false -+ err := cs.withRetry(func(a *csAttempt) error { -+ var err error -+ m, err = a.s.Header() -+ if err == transport.ErrNoHeaders { -+ noHeader = true -+ return nil -+ } -+ return toRPCErr(err) -+ }, cs.commitAttemptLocked) -+ -+ if err != nil { -+ cs.finish(err) -+ return nil, err -+ } -+ -+ if len(cs.binlogs) != 0 && !cs.serverHeaderBinlogged && !noHeader { -+ // Only log if binary log is on and header has not been logged, and -+ // there is actually headers to log. -+ logEntry := &binarylog.ServerHeader{ -+ OnClientSide: true, -+ Header: m, -+ PeerAddr: nil, -+ } -+ if peer, ok := peer.FromContext(cs.Context()); ok { -+ logEntry.PeerAddr = peer.Addr -+ } -+ cs.serverHeaderBinlogged = true -+ for _, binlog := range cs.binlogs { -+ binlog.Log(cs.ctx, logEntry) -+ } -+ } -+ return m, nil -+} -+ -+func (cs *clientStream) Trailer() metadata.MD { -+ // On RPC failure, we never need to retry, because usage requires that -+ // RecvMsg() returned a non-nil error before calling this function is valid. -+ // We would have retried earlier if necessary. -+ // -+ // Commit the attempt anyway, just in case users are not following those -+ // directions -- it will prevent races and should not meaningfully impact -+ // performance. -+ cs.commitAttempt() -+ if cs.attempt.s == nil { -+ return nil -+ } -+ return cs.attempt.s.Trailer() -+} -+ -+func (cs *clientStream) replayBufferLocked(attempt *csAttempt) error { -+ for _, f := range cs.buffer { -+ if err := f(attempt); err != nil { -+ return err -+ } -+ } -+ return nil -+} -+ -+func (cs *clientStream) bufferForRetryLocked(sz int, op func(a *csAttempt) error) { -+ // Note: we still will buffer if retry is disabled (for transparent retries). -+ if cs.committed { -+ return -+ } -+ cs.bufferSize += sz -+ if cs.bufferSize > cs.callInfo.maxRetryRPCBufferSize { -+ cs.commitAttemptLocked() -+ return -+ } -+ cs.buffer = append(cs.buffer, op) -+} -+ -+func (cs *clientStream) SendMsg(m interface{}) (err error) { -+ defer func() { -+ if err != nil && err != io.EOF { -+ // Call finish on the client stream for errors generated by this SendMsg -+ // call, as these indicate problems created by this client. (Transport -+ // errors are converted to an io.EOF error in csAttempt.sendMsg; the real -+ // error will be returned from RecvMsg eventually in that case, or be -+ // retried.) -+ cs.finish(err) -+ } -+ }() -+ if cs.sentLast { -+ return status.Errorf(codes.Internal, "SendMsg called after CloseSend") -+ } -+ if !cs.desc.ClientStreams { -+ cs.sentLast = true -+ } -+ -+ // load hdr, payload, data -+ hdr, payload, data, err := prepareMsg(m, cs.codec, cs.cp, cs.comp) -+ if err != nil { -+ return err -+ } -+ -+ // TODO(dfawley): should we be checking len(data) instead? -+ if len(payload) > *cs.callInfo.maxSendMessageSize { -+ return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(payload), *cs.callInfo.maxSendMessageSize) -+ } -+ op := func(a *csAttempt) error { -+ return a.sendMsg(m, hdr, payload, data) -+ } -+ err = cs.withRetry(op, func() { cs.bufferForRetryLocked(len(hdr)+len(payload), op) }) -+ if len(cs.binlogs) != 0 && err == nil { -+ cm := &binarylog.ClientMessage{ -+ OnClientSide: true, -+ Message: data, -+ } -+ for _, binlog := range cs.binlogs { -+ binlog.Log(cs.ctx, cm) -+ } -+ } -+ return err -+} -+ -+func (cs *clientStream) RecvMsg(m interface{}) error { -+ if len(cs.binlogs) != 0 && !cs.serverHeaderBinlogged { -+ // Call Header() to binary log header if it's not already logged. -+ cs.Header() -+ } -+ var recvInfo *payloadInfo -+ if len(cs.binlogs) != 0 { -+ recvInfo = &payloadInfo{} -+ } -+ err := cs.withRetry(func(a *csAttempt) error { -+ return a.recvMsg(m, recvInfo) -+ }, cs.commitAttemptLocked) -+ if len(cs.binlogs) != 0 && err == nil { -+ sm := &binarylog.ServerMessage{ -+ OnClientSide: true, -+ Message: recvInfo.uncompressedBytes, -+ } -+ for _, binlog := range cs.binlogs { -+ binlog.Log(cs.ctx, sm) -+ } -+ } -+ if err != nil || !cs.desc.ServerStreams { -+ // err != nil or non-server-streaming indicates end of stream. -+ cs.finish(err) -+ -+ if len(cs.binlogs) != 0 { -+ // finish will not log Trailer. Log Trailer here. -+ logEntry := &binarylog.ServerTrailer{ -+ OnClientSide: true, -+ Trailer: cs.Trailer(), -+ Err: err, -+ } -+ if logEntry.Err == io.EOF { -+ logEntry.Err = nil -+ } -+ if peer, ok := peer.FromContext(cs.Context()); ok { -+ logEntry.PeerAddr = peer.Addr -+ } -+ for _, binlog := range cs.binlogs { -+ binlog.Log(cs.ctx, logEntry) -+ } -+ } -+ } -+ return err -+} -+ -+func (cs *clientStream) CloseSend() error { -+ if cs.sentLast { -+ // TODO: return an error and finish the stream instead, due to API misuse? -+ return nil -+ } -+ cs.sentLast = true -+ op := func(a *csAttempt) error { -+ a.t.Write(a.s, nil, nil, &transport.Options{Last: true}) -+ // Always return nil; io.EOF is the only error that might make sense -+ // instead, but there is no need to signal the client to call RecvMsg -+ // as the only use left for the stream after CloseSend is to call -+ // RecvMsg. This also matches historical behavior. -+ return nil -+ } -+ cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op) }) -+ if len(cs.binlogs) != 0 { -+ chc := &binarylog.ClientHalfClose{ -+ OnClientSide: true, -+ } -+ for _, binlog := range cs.binlogs { -+ binlog.Log(cs.ctx, chc) -+ } -+ } -+ // We never returned an error here for reasons. -+ return nil -+} -+ -+func (cs *clientStream) finish(err error) { -+ if err == io.EOF { -+ // Ending a stream with EOF indicates a success. -+ err = nil -+ } -+ cs.mu.Lock() -+ if cs.finished { -+ cs.mu.Unlock() -+ return -+ } -+ cs.finished = true -+ for _, onFinish := range cs.callInfo.onFinish { -+ onFinish(err) -+ } -+ cs.commitAttemptLocked() -+ if cs.attempt != nil { -+ cs.attempt.finish(err) -+ // after functions all rely upon having a stream. -+ if cs.attempt.s != nil { -+ for _, o := range cs.opts { -+ o.after(cs.callInfo, cs.attempt) -+ } -+ } -+ } -+ cs.mu.Unlock() -+ // For binary logging. only log cancel in finish (could be caused by RPC ctx -+ // canceled or ClientConn closed). Trailer will be logged in RecvMsg. -+ // -+ // Only one of cancel or trailer needs to be logged. In the cases where -+ // users don't call RecvMsg, users must have already canceled the RPC. -+ if len(cs.binlogs) != 0 && status.Code(err) == codes.Canceled { -+ c := &binarylog.Cancel{ -+ OnClientSide: true, -+ } -+ for _, binlog := range cs.binlogs { -+ binlog.Log(cs.ctx, c) -+ } -+ } -+ if err == nil { -+ cs.retryThrottler.successfulRPC() -+ } -+ if channelz.IsOn() { -+ if err != nil { -+ cs.cc.incrCallsFailed() -+ } else { -+ cs.cc.incrCallsSucceeded() -+ } -+ } -+ cs.cancel() -+} -+ -+func (a *csAttempt) sendMsg(m interface{}, hdr, payld, data []byte) error { -+ cs := a.cs -+ if a.trInfo != nil { -+ a.mu.Lock() -+ if a.trInfo.tr != nil { -+ a.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) -+ } -+ a.mu.Unlock() -+ } -+ if err := a.t.Write(a.s, hdr, payld, &transport.Options{Last: !cs.desc.ClientStreams}); err != nil { -+ if !cs.desc.ClientStreams { -+ // For non-client-streaming RPCs, we return nil instead of EOF on error -+ // because the generated code requires it. finish is not called; RecvMsg() -+ // will call it with the stream's status independently. -+ return nil -+ } -+ return io.EOF -+ } -+ for _, sh := range a.statsHandlers { -+ sh.HandleRPC(a.ctx, outPayload(true, m, data, payld, time.Now())) -+ } -+ if channelz.IsOn() { -+ a.t.IncrMsgSent() -+ } -+ return nil -+} -+ -+func (a *csAttempt) recvMsg(m interface{}, payInfo *payloadInfo) (err error) { -+ cs := a.cs -+ if len(a.statsHandlers) != 0 && payInfo == nil { -+ payInfo = &payloadInfo{} -+ } -+ -+ if !a.decompSet { -+ // Block until we receive headers containing received message encoding. -+ if ct := a.s.RecvCompress(); ct != "" && ct != encoding.Identity { -+ if a.dc == nil || a.dc.Type() != ct { -+ // No configured decompressor, or it does not match the incoming -+ // message encoding; attempt to find a registered compressor that does. -+ a.dc = nil -+ a.decomp = encoding.GetCompressor(ct) -+ } -+ } else { -+ // No compression is used; disable our decompressor. -+ a.dc = nil -+ } -+ // Only initialize this state once per stream. -+ a.decompSet = true -+ } -+ err = recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decomp) -+ if err != nil { -+ if err == io.EOF { -+ if statusErr := a.s.Status().Err(); statusErr != nil { -+ return statusErr -+ } -+ return io.EOF // indicates successful end of stream. -+ } -+ -+ return toRPCErr(err) -+ } -+ if a.trInfo != nil { -+ a.mu.Lock() -+ if a.trInfo.tr != nil { -+ a.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) -+ } -+ a.mu.Unlock() -+ } -+ for _, sh := range a.statsHandlers { -+ sh.HandleRPC(a.ctx, &stats.InPayload{ -+ Client: true, -+ RecvTime: time.Now(), -+ Payload: m, -+ // TODO truncate large payload. -+ Data: payInfo.uncompressedBytes, -+ WireLength: payInfo.compressedLength + headerLen, -+ CompressedLength: payInfo.compressedLength, -+ Length: len(payInfo.uncompressedBytes), -+ }) -+ } -+ if channelz.IsOn() { -+ a.t.IncrMsgRecv() -+ } -+ if cs.desc.ServerStreams { -+ // Subsequent messages should be received by subsequent RecvMsg calls. -+ return nil -+ } -+ // Special handling for non-server-stream rpcs. -+ // This recv expects EOF or errors, so we don't collect inPayload. -+ err = recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decomp) -+ if err == nil { -+ return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) -+ } -+ if err == io.EOF { -+ return a.s.Status().Err() // non-server streaming Recv returns nil on success -+ } -+ return toRPCErr(err) -+} -+ -+func (a *csAttempt) finish(err error) { -+ a.mu.Lock() -+ if a.finished { -+ a.mu.Unlock() -+ return -+ } -+ a.finished = true -+ if err == io.EOF { -+ // Ending a stream with EOF indicates a success. -+ err = nil -+ } -+ var tr metadata.MD -+ if a.s != nil { -+ a.t.CloseStream(a.s, err) -+ tr = a.s.Trailer() -+ } -+ -+ if a.pickResult.Done != nil { -+ br := false -+ if a.s != nil { -+ br = a.s.BytesReceived() -+ } -+ a.pickResult.Done(balancer.DoneInfo{ -+ Err: err, -+ Trailer: tr, -+ BytesSent: a.s != nil, -+ BytesReceived: br, -+ ServerLoad: balancerload.Parse(tr), -+ }) -+ } -+ for _, sh := range a.statsHandlers { -+ end := &stats.End{ -+ Client: true, -+ BeginTime: a.beginTime, -+ EndTime: time.Now(), -+ Trailer: tr, -+ Error: err, -+ } -+ sh.HandleRPC(a.ctx, end) -+ } -+ if a.trInfo != nil && a.trInfo.tr != nil { -+ if err == nil { -+ a.trInfo.tr.LazyPrintf("RPC: [OK]") -+ } else { -+ a.trInfo.tr.LazyPrintf("RPC: [%v]", err) -+ a.trInfo.tr.SetError() -+ } -+ a.trInfo.tr.Finish() -+ a.trInfo.tr = nil -+ } -+ a.mu.Unlock() -+} -+ -+// newClientStream creates a ClientStream with the specified transport, on the -+// given addrConn. -+// -+// It's expected that the given transport is either the same one in addrConn, or -+// is already closed. To avoid race, transport is specified separately, instead -+// of using ac.transpot. -+// -+// Main difference between this and ClientConn.NewStream: -+// - no retry -+// - no service config (or wait for service config) -+// - no tracing or stats -+func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method string, t transport.ClientTransport, ac *addrConn, opts ...CallOption) (_ ClientStream, err error) { -+ if t == nil { -+ // TODO: return RPC error here? -+ return nil, errors.New("transport provided is nil") -+ } -+ // defaultCallInfo contains unnecessary info(i.e. failfast, maxRetryRPCBufferSize), so we just initialize an empty struct. -+ c := &callInfo{} -+ -+ // Possible context leak: -+ // The cancel function for the child context we create will only be called -+ // when RecvMsg returns a non-nil error, if the ClientConn is closed, or if -+ // an error is generated by SendMsg. -+ // https://github.com/grpc/grpc-go/issues/1818. -+ ctx, cancel := context.WithCancel(ctx) -+ defer func() { -+ if err != nil { -+ cancel() -+ } -+ }() -+ -+ for _, o := range opts { -+ if err := o.before(c); err != nil { -+ return nil, toRPCErr(err) -+ } -+ } -+ c.maxReceiveMessageSize = getMaxSize(nil, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize) -+ c.maxSendMessageSize = getMaxSize(nil, c.maxSendMessageSize, defaultServerMaxSendMessageSize) -+ if err := setCallInfoCodec(c); err != nil { -+ return nil, err -+ } -+ -+ callHdr := &transport.CallHdr{ -+ Host: ac.cc.authority, -+ Method: method, -+ ContentSubtype: c.contentSubtype, -+ } -+ -+ // Set our outgoing compression according to the UseCompressor CallOption, if -+ // set. In that case, also find the compressor from the encoding package. -+ // Otherwise, use the compressor configured by the WithCompressor DialOption, -+ // if set. -+ var cp Compressor -+ var comp encoding.Compressor -+ if ct := c.compressorType; ct != "" { -+ callHdr.SendCompress = ct -+ if ct != encoding.Identity { -+ comp = encoding.GetCompressor(ct) -+ if comp == nil { -+ return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct) -+ } -+ } -+ } else if ac.cc.dopts.cp != nil { -+ callHdr.SendCompress = ac.cc.dopts.cp.Type() -+ cp = ac.cc.dopts.cp -+ } -+ if c.creds != nil { -+ callHdr.Creds = c.creds -+ } -+ -+ // Use a special addrConnStream to avoid retry. -+ as := &addrConnStream{ -+ callHdr: callHdr, -+ ac: ac, -+ ctx: ctx, -+ cancel: cancel, -+ opts: opts, -+ callInfo: c, -+ desc: desc, -+ codec: c.codec, -+ cp: cp, -+ comp: comp, -+ t: t, -+ } -+ -+ s, err := as.t.NewStream(as.ctx, as.callHdr) -+ if err != nil { -+ err = toRPCErr(err) -+ return nil, err -+ } -+ as.s = s -+ as.p = &parser{r: s, recvBufferPool: ac.dopts.recvBufferPool} -+ ac.incrCallsStarted() -+ if desc != unaryStreamDesc { -+ // Listen on stream context to cleanup when the stream context is -+ // canceled. Also listen for the addrConn's context in case the -+ // addrConn is closed or reconnects to a different address. In all -+ // other cases, an error should already be injected into the recv -+ // buffer by the transport, which the client will eventually receive, -+ // and then we will cancel the stream's context in -+ // addrConnStream.finish. -+ go func() { -+ ac.mu.Lock() -+ acCtx := ac.ctx -+ ac.mu.Unlock() -+ select { -+ case <-acCtx.Done(): -+ as.finish(status.Error(codes.Canceled, "grpc: the SubConn is closing")) -+ case <-ctx.Done(): -+ as.finish(toRPCErr(ctx.Err())) -+ } -+ }() -+ } -+ return as, nil -+} -+ -+type addrConnStream struct { -+ s *transport.Stream -+ ac *addrConn -+ callHdr *transport.CallHdr -+ cancel context.CancelFunc -+ opts []CallOption -+ callInfo *callInfo -+ t transport.ClientTransport -+ ctx context.Context -+ sentLast bool -+ desc *StreamDesc -+ codec baseCodec -+ cp Compressor -+ comp encoding.Compressor -+ decompSet bool -+ dc Decompressor -+ decomp encoding.Compressor -+ p *parser -+ mu sync.Mutex -+ finished bool -+} -+ -+func (as *addrConnStream) Header() (metadata.MD, error) { -+ m, err := as.s.Header() -+ if err != nil { -+ as.finish(toRPCErr(err)) -+ } -+ return m, err -+} -+ -+func (as *addrConnStream) Trailer() metadata.MD { -+ return as.s.Trailer() -+} -+ -+func (as *addrConnStream) CloseSend() error { -+ if as.sentLast { -+ // TODO: return an error and finish the stream instead, due to API misuse? -+ return nil -+ } -+ as.sentLast = true -+ -+ as.t.Write(as.s, nil, nil, &transport.Options{Last: true}) -+ // Always return nil; io.EOF is the only error that might make sense -+ // instead, but there is no need to signal the client to call RecvMsg -+ // as the only use left for the stream after CloseSend is to call -+ // RecvMsg. This also matches historical behavior. -+ return nil -+} -+ -+func (as *addrConnStream) Context() context.Context { -+ return as.s.Context() -+} -+ -+func (as *addrConnStream) SendMsg(m interface{}) (err error) { -+ defer func() { -+ if err != nil && err != io.EOF { -+ // Call finish on the client stream for errors generated by this SendMsg -+ // call, as these indicate problems created by this client. (Transport -+ // errors are converted to an io.EOF error in csAttempt.sendMsg; the real -+ // error will be returned from RecvMsg eventually in that case, or be -+ // retried.) -+ as.finish(err) -+ } -+ }() -+ if as.sentLast { -+ return status.Errorf(codes.Internal, "SendMsg called after CloseSend") -+ } -+ if !as.desc.ClientStreams { -+ as.sentLast = true -+ } -+ -+ // load hdr, payload, data -+ hdr, payld, _, err := prepareMsg(m, as.codec, as.cp, as.comp) -+ if err != nil { -+ return err -+ } -+ -+ // TODO(dfawley): should we be checking len(data) instead? -+ if len(payld) > *as.callInfo.maxSendMessageSize { -+ return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(payld), *as.callInfo.maxSendMessageSize) -+ } -+ -+ if err := as.t.Write(as.s, hdr, payld, &transport.Options{Last: !as.desc.ClientStreams}); err != nil { -+ if !as.desc.ClientStreams { -+ // For non-client-streaming RPCs, we return nil instead of EOF on error -+ // because the generated code requires it. finish is not called; RecvMsg() -+ // will call it with the stream's status independently. -+ return nil -+ } -+ return io.EOF -+ } -+ -+ if channelz.IsOn() { -+ as.t.IncrMsgSent() -+ } -+ return nil -+} -+ -+func (as *addrConnStream) RecvMsg(m interface{}) (err error) { -+ defer func() { -+ if err != nil || !as.desc.ServerStreams { -+ // err != nil or non-server-streaming indicates end of stream. -+ as.finish(err) -+ } -+ }() -+ -+ if !as.decompSet { -+ // Block until we receive headers containing received message encoding. -+ if ct := as.s.RecvCompress(); ct != "" && ct != encoding.Identity { -+ if as.dc == nil || as.dc.Type() != ct { -+ // No configured decompressor, or it does not match the incoming -+ // message encoding; attempt to find a registered compressor that does. -+ as.dc = nil -+ as.decomp = encoding.GetCompressor(ct) -+ } -+ } else { -+ // No compression is used; disable our decompressor. -+ as.dc = nil -+ } -+ // Only initialize this state once per stream. -+ as.decompSet = true -+ } -+ err = recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp) -+ if err != nil { -+ if err == io.EOF { -+ if statusErr := as.s.Status().Err(); statusErr != nil { -+ return statusErr -+ } -+ return io.EOF // indicates successful end of stream. -+ } -+ return toRPCErr(err) -+ } -+ -+ if channelz.IsOn() { -+ as.t.IncrMsgRecv() -+ } -+ if as.desc.ServerStreams { -+ // Subsequent messages should be received by subsequent RecvMsg calls. -+ return nil -+ } -+ -+ // Special handling for non-server-stream rpcs. -+ // This recv expects EOF or errors, so we don't collect inPayload. -+ err = recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp) -+ if err == nil { -+ return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) -+ } -+ if err == io.EOF { -+ return as.s.Status().Err() // non-server streaming Recv returns nil on success -+ } -+ return toRPCErr(err) -+} -+ -+func (as *addrConnStream) finish(err error) { -+ as.mu.Lock() -+ if as.finished { -+ as.mu.Unlock() -+ return -+ } -+ as.finished = true -+ if err == io.EOF { -+ // Ending a stream with EOF indicates a success. -+ err = nil -+ } -+ if as.s != nil { -+ as.t.CloseStream(as.s, err) -+ } -+ -+ if err != nil { -+ as.ac.incrCallsFailed() -+ } else { -+ as.ac.incrCallsSucceeded() -+ } -+ as.cancel() -+ as.mu.Unlock() -+} -+ -+// ServerStream defines the server-side behavior of a streaming RPC. -+// -+// Errors returned from ServerStream methods are compatible with the status -+// package. However, the status code will often not match the RPC status as -+// seen by the client application, and therefore, should not be relied upon for -+// this purpose. -+type ServerStream interface { -+ // SetHeader sets the header metadata. It may be called multiple times. -+ // When call multiple times, all the provided metadata will be merged. -+ // All the metadata will be sent out when one of the following happens: -+ // - ServerStream.SendHeader() is called; -+ // - The first response is sent out; -+ // - An RPC status is sent out (error or success). -+ SetHeader(metadata.MD) error -+ // SendHeader sends the header metadata. -+ // The provided md and headers set by SetHeader() will be sent. -+ // It fails if called multiple times. -+ SendHeader(metadata.MD) error -+ // SetTrailer sets the trailer metadata which will be sent with the RPC status. -+ // When called more than once, all the provided metadata will be merged. -+ SetTrailer(metadata.MD) -+ // Context returns the context for this stream. -+ Context() context.Context -+ // SendMsg sends a message. On error, SendMsg aborts the stream and the -+ // error is returned directly. -+ // -+ // SendMsg blocks until: -+ // - There is sufficient flow control to schedule m with the transport, or -+ // - The stream is done, or -+ // - The stream breaks. -+ // -+ // SendMsg does not wait until the message is received by the client. An -+ // untimely stream closure may result in lost messages. -+ // -+ // It is safe to have a goroutine calling SendMsg and another goroutine -+ // calling RecvMsg on the same stream at the same time, but it is not safe -+ // to call SendMsg on the same stream in different goroutines. -+ // -+ // It is not safe to modify the message after calling SendMsg. Tracing -+ // libraries and stats handlers may use the message lazily. -+ SendMsg(m interface{}) error -+ // RecvMsg blocks until it receives a message into m or the stream is -+ // done. It returns io.EOF when the client has performed a CloseSend. On -+ // any non-EOF error, the stream is aborted and the error contains the -+ // RPC status. -+ // -+ // It is safe to have a goroutine calling SendMsg and another goroutine -+ // calling RecvMsg on the same stream at the same time, but it is not -+ // safe to call RecvMsg on the same stream in different goroutines. -+ RecvMsg(m interface{}) error -+} -+ -+// serverStream implements a server side Stream. -+type serverStream struct { -+ ctx context.Context -+ t transport.ServerTransport -+ s *transport.Stream -+ p *parser -+ codec baseCodec -+ -+ cp Compressor -+ dc Decompressor -+ comp encoding.Compressor -+ decomp encoding.Compressor -+ -+ sendCompressorName string -+ -+ maxReceiveMessageSize int -+ maxSendMessageSize int -+ trInfo *traceInfo -+ -+ statsHandler []stats.Handler -+ -+ binlogs []binarylog.MethodLogger -+ // serverHeaderBinlogged indicates whether server header has been logged. It -+ // will happen when one of the following two happens: stream.SendHeader(), -+ // stream.Send(). -+ // -+ // It's only checked in send and sendHeader, doesn't need to be -+ // synchronized. -+ serverHeaderBinlogged bool -+ -+ mu sync.Mutex // protects trInfo.tr after the service handler runs. -+} -+ -+func (ss *serverStream) Context() context.Context { -+ return ss.ctx -+} -+ -+func (ss *serverStream) SetHeader(md metadata.MD) error { -+ if md.Len() == 0 { -+ return nil -+ } -+ err := imetadata.Validate(md) -+ if err != nil { -+ return status.Error(codes.Internal, err.Error()) -+ } -+ return ss.s.SetHeader(md) -+} -+ -+func (ss *serverStream) SendHeader(md metadata.MD) error { -+ err := imetadata.Validate(md) -+ if err != nil { -+ return status.Error(codes.Internal, err.Error()) -+ } -+ -+ err = ss.t.WriteHeader(ss.s, md) -+ if len(ss.binlogs) != 0 && !ss.serverHeaderBinlogged { -+ h, _ := ss.s.Header() -+ sh := &binarylog.ServerHeader{ -+ Header: h, -+ } -+ ss.serverHeaderBinlogged = true -+ for _, binlog := range ss.binlogs { -+ binlog.Log(ss.ctx, sh) -+ } -+ } -+ return err -+} -+ -+func (ss *serverStream) SetTrailer(md metadata.MD) { -+ if md.Len() == 0 { -+ return -+ } -+ if err := imetadata.Validate(md); err != nil { -+ logger.Errorf("stream: failed to validate md when setting trailer, err: %v", err) -+ } -+ ss.s.SetTrailer(md) -+} -+ -+func (ss *serverStream) SendMsg(m interface{}) (err error) { -+ defer func() { -+ if ss.trInfo != nil { -+ ss.mu.Lock() -+ if ss.trInfo.tr != nil { -+ if err == nil { -+ ss.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) -+ } else { -+ ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) -+ ss.trInfo.tr.SetError() -+ } -+ } -+ ss.mu.Unlock() -+ } -+ if err != nil && err != io.EOF { -+ st, _ := status.FromError(toRPCErr(err)) -+ ss.t.WriteStatus(ss.s, st) -+ // Non-user specified status was sent out. This should be an error -+ // case (as a server side Cancel maybe). -+ // -+ // This is not handled specifically now. User will return a final -+ // status from the service handler, we will log that error instead. -+ // This behavior is similar to an interceptor. -+ } -+ if channelz.IsOn() && err == nil { -+ ss.t.IncrMsgSent() -+ } -+ }() -+ -+ // Server handler could have set new compressor by calling SetSendCompressor. -+ // In case it is set, we need to use it for compressing outbound message. -+ if sendCompressorsName := ss.s.SendCompress(); sendCompressorsName != ss.sendCompressorName { -+ ss.comp = encoding.GetCompressor(sendCompressorsName) -+ ss.sendCompressorName = sendCompressorsName -+ } -+ -+ // load hdr, payload, data -+ hdr, payload, data, err := prepareMsg(m, ss.codec, ss.cp, ss.comp) -+ if err != nil { -+ return err -+ } -+ -+ // TODO(dfawley): should we be checking len(data) instead? -+ if len(payload) > ss.maxSendMessageSize { -+ return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(payload), ss.maxSendMessageSize) -+ } -+ if err := ss.t.Write(ss.s, hdr, payload, &transport.Options{Last: false}); err != nil { -+ return toRPCErr(err) -+ } -+ if len(ss.binlogs) != 0 { -+ if !ss.serverHeaderBinlogged { -+ h, _ := ss.s.Header() -+ sh := &binarylog.ServerHeader{ -+ Header: h, -+ } -+ ss.serverHeaderBinlogged = true -+ for _, binlog := range ss.binlogs { -+ binlog.Log(ss.ctx, sh) -+ } -+ } -+ sm := &binarylog.ServerMessage{ -+ Message: data, -+ } -+ for _, binlog := range ss.binlogs { -+ binlog.Log(ss.ctx, sm) -+ } -+ } -+ if len(ss.statsHandler) != 0 { -+ for _, sh := range ss.statsHandler { -+ sh.HandleRPC(ss.s.Context(), outPayload(false, m, data, payload, time.Now())) -+ } -+ } -+ return nil -+} -+ -+func (ss *serverStream) RecvMsg(m interface{}) (err error) { -+ defer func() { -+ if ss.trInfo != nil { -+ ss.mu.Lock() -+ if ss.trInfo.tr != nil { -+ if err == nil { -+ ss.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) -+ } else if err != io.EOF { -+ ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) -+ ss.trInfo.tr.SetError() -+ } -+ } -+ ss.mu.Unlock() -+ } -+ if err != nil && err != io.EOF { -+ st, _ := status.FromError(toRPCErr(err)) -+ ss.t.WriteStatus(ss.s, st) -+ // Non-user specified status was sent out. This should be an error -+ // case (as a server side Cancel maybe). -+ // -+ // This is not handled specifically now. User will return a final -+ // status from the service handler, we will log that error instead. -+ // This behavior is similar to an interceptor. -+ } -+ if channelz.IsOn() && err == nil { -+ ss.t.IncrMsgRecv() -+ } -+ }() -+ var payInfo *payloadInfo -+ if len(ss.statsHandler) != 0 || len(ss.binlogs) != 0 { -+ payInfo = &payloadInfo{} -+ } -+ if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, payInfo, ss.decomp); err != nil { -+ if err == io.EOF { -+ if len(ss.binlogs) != 0 { -+ chc := &binarylog.ClientHalfClose{} -+ for _, binlog := range ss.binlogs { -+ binlog.Log(ss.ctx, chc) -+ } -+ } -+ return err -+ } -+ if err == io.ErrUnexpectedEOF { -+ err = status.Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) -+ } -+ return toRPCErr(err) -+ } -+ if len(ss.statsHandler) != 0 { -+ for _, sh := range ss.statsHandler { -+ sh.HandleRPC(ss.s.Context(), &stats.InPayload{ -+ RecvTime: time.Now(), -+ Payload: m, -+ // TODO truncate large payload. -+ Data: payInfo.uncompressedBytes, -+ Length: len(payInfo.uncompressedBytes), -+ WireLength: payInfo.compressedLength + headerLen, -+ CompressedLength: payInfo.compressedLength, -+ }) -+ } -+ } -+ if len(ss.binlogs) != 0 { -+ cm := &binarylog.ClientMessage{ -+ Message: payInfo.uncompressedBytes, -+ } -+ for _, binlog := range ss.binlogs { -+ binlog.Log(ss.ctx, cm) -+ } -+ } -+ return nil -+} -+ -+// MethodFromServerStream returns the method string for the input stream. -+// The returned string is in the format of "/service/method". -+func MethodFromServerStream(stream ServerStream) (string, bool) { -+ return Method(stream.Context()) -+} -+ -+// prepareMsg returns the hdr, payload and data -+// using the compressors passed or using the -+// passed preparedmsg -+func prepareMsg(m interface{}, codec baseCodec, cp Compressor, comp encoding.Compressor) (hdr, payload, data []byte, err error) { -+ if preparedMsg, ok := m.(*PreparedMsg); ok { -+ return preparedMsg.hdr, preparedMsg.payload, preparedMsg.encodedData, nil -+ } -+ // The input interface is not a prepared msg. -+ // Marshal and Compress the data at this point -+ data, err = encode(codec, m) -+ if err != nil { -+ return nil, nil, nil, err -+ } -+ compData, err := compress(data, cp, comp) -+ if err != nil { -+ return nil, nil, nil, err -+ } -+ hdr, payload = msgHeader(data, compData) -+ return hdr, payload, data, nil -+} -diff --git a/vendor/google.golang.org/grpc/tap/tap.go b/vendor/google.golang.org/grpc/tap/tap.go -new file mode 100755 -index 0000000..bfa5dfa ---- /dev/null -+++ b/vendor/google.golang.org/grpc/tap/tap.go -@@ -0,0 +1,56 @@ -+/* -+ * -+ * Copyright 2016 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+// Package tap defines the function handles which are executed on the transport -+// layer of gRPC-Go and related information. -+// -+// # Experimental -+// -+// Notice: This API is EXPERIMENTAL and may be changed or removed in a -+// later release. -+package tap -+ -+import ( -+ "context" -+) -+ -+// Info defines the relevant information needed by the handles. -+type Info struct { -+ // FullMethodName is the string of grpc method (in the format of -+ // /package.service/method). -+ FullMethodName string -+ // TODO: More to be added. -+} -+ -+// ServerInHandle defines the function which runs before a new stream is -+// created on the server side. If it returns a non-nil error, the stream will -+// not be created and an error will be returned to the client. If the error -+// returned is a status error, that status code and message will be used, -+// otherwise PermissionDenied will be the code and err.Error() will be the -+// message. -+// -+// It's intended to be used in situations where you don't want to waste the -+// resources to accept the new stream (e.g. rate-limiting). For other general -+// usages, please use interceptors. -+// -+// Note that it is executed in the per-connection I/O goroutine(s) instead of -+// per-RPC goroutine. Therefore, users should NOT have any -+// blocking/time-consuming work in this handle. Otherwise all the RPCs would -+// slow down. Also, for the same reason, this handle won't be called -+// concurrently by gRPC. -+type ServerInHandle func(ctx context.Context, info *Info) (context.Context, error) -diff --git a/vendor/google.golang.org/grpc/trace.go b/vendor/google.golang.org/grpc/trace.go -new file mode 100755 -index 0000000..07a2d26 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/trace.go -@@ -0,0 +1,123 @@ -+/* -+ * -+ * Copyright 2015 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+import ( -+ "bytes" -+ "fmt" -+ "io" -+ "net" -+ "strings" -+ "sync" -+ "time" -+ -+ "golang.org/x/net/trace" -+) -+ -+// EnableTracing controls whether to trace RPCs using the golang.org/x/net/trace package. -+// This should only be set before any RPCs are sent or received by this program. -+var EnableTracing bool -+ -+// methodFamily returns the trace family for the given method. -+// It turns "/pkg.Service/GetFoo" into "pkg.Service". -+func methodFamily(m string) string { -+ m = strings.TrimPrefix(m, "/") // remove leading slash -+ if i := strings.Index(m, "/"); i >= 0 { -+ m = m[:i] // remove everything from second slash -+ } -+ return m -+} -+ -+// traceInfo contains tracing information for an RPC. -+type traceInfo struct { -+ tr trace.Trace -+ firstLine firstLine -+} -+ -+// firstLine is the first line of an RPC trace. -+// It may be mutated after construction; remoteAddr specifically may change -+// during client-side use. -+type firstLine struct { -+ mu sync.Mutex -+ client bool // whether this is a client (outgoing) RPC -+ remoteAddr net.Addr -+ deadline time.Duration // may be zero -+} -+ -+func (f *firstLine) SetRemoteAddr(addr net.Addr) { -+ f.mu.Lock() -+ f.remoteAddr = addr -+ f.mu.Unlock() -+} -+ -+func (f *firstLine) String() string { -+ f.mu.Lock() -+ defer f.mu.Unlock() -+ -+ var line bytes.Buffer -+ io.WriteString(&line, "RPC: ") -+ if f.client { -+ io.WriteString(&line, "to") -+ } else { -+ io.WriteString(&line, "from") -+ } -+ fmt.Fprintf(&line, " %v deadline:", f.remoteAddr) -+ if f.deadline != 0 { -+ fmt.Fprint(&line, f.deadline) -+ } else { -+ io.WriteString(&line, "none") -+ } -+ return line.String() -+} -+ -+const truncateSize = 100 -+ -+func truncate(x string, l int) string { -+ if l > len(x) { -+ return x -+ } -+ return x[:l] -+} -+ -+// payload represents an RPC request or response payload. -+type payload struct { -+ sent bool // whether this is an outgoing payload -+ msg interface{} // e.g. a proto.Message -+ // TODO(dsymonds): add stringifying info to codec, and limit how much we hold here? -+} -+ -+func (p payload) String() string { -+ if p.sent { -+ return truncate(fmt.Sprintf("sent: %v", p.msg), truncateSize) -+ } -+ return truncate(fmt.Sprintf("recv: %v", p.msg), truncateSize) -+} -+ -+type fmtStringer struct { -+ format string -+ a []interface{} -+} -+ -+func (f *fmtStringer) String() string { -+ return fmt.Sprintf(f.format, f.a...) -+} -+ -+type stringer string -+ -+func (s stringer) String() string { return string(s) } -diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go -new file mode 100755 -index 0000000..12a5a9d ---- /dev/null -+++ b/vendor/google.golang.org/grpc/version.go -@@ -0,0 +1,22 @@ -+/* -+ * -+ * Copyright 2018 gRPC authors. -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * 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. -+ * -+ */ -+ -+package grpc -+ -+// Version is the current grpc version. -+const Version = "1.57.1" -diff --git a/vendor/google.golang.org/grpc/vet.sh b/vendor/google.golang.org/grpc/vet.sh -new file mode 100755 -index 0000000..a8e4732 ---- /dev/null -+++ b/vendor/google.golang.org/grpc/vet.sh -@@ -0,0 +1,208 @@ -+#!/bin/bash -+ -+set -ex # Exit on error; debugging enabled. -+set -o pipefail # Fail a pipe if any sub-command fails. -+ -+# not makes sure the command passed to it does not exit with a return code of 0. -+not() { -+ # This is required instead of the earlier (! $COMMAND) because subshells and -+ # pipefail don't work the same on Darwin as in Linux. -+ ! "$@" -+} -+ -+die() { -+ echo "$@" >&2 -+ exit 1 -+} -+ -+fail_on_output() { -+ tee /dev/stderr | not read -+} -+ -+# Check to make sure it's safe to modify the user's git repo. -+git status --porcelain | fail_on_output -+ -+# Undo any edits made by this script. -+cleanup() { -+ git reset --hard HEAD -+} -+trap cleanup EXIT -+ -+PATH="${HOME}/go/bin:${GOROOT}/bin:${PATH}" -+go version -+ -+if [[ "$1" = "-install" ]]; then -+ # Install the pinned versions as defined in module tools. -+ pushd ./test/tools -+ go install \ -+ golang.org/x/lint/golint \ -+ golang.org/x/tools/cmd/goimports \ -+ honnef.co/go/tools/cmd/staticcheck \ -+ github.com/client9/misspell/cmd/misspell -+ popd -+ if [[ -z "${VET_SKIP_PROTO}" ]]; then -+ if [[ "${GITHUB_ACTIONS}" = "true" ]]; then -+ PROTOBUF_VERSION=22.0 # a.k.a v4.22.0 in pb.go files. -+ PROTOC_FILENAME=protoc-${PROTOBUF_VERSION}-linux-x86_64.zip -+ pushd /home/runner/go -+ wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOC_FILENAME} -+ unzip ${PROTOC_FILENAME} -+ bin/protoc --version -+ popd -+ elif not which protoc > /dev/null; then -+ die "Please install protoc into your path" -+ fi -+ fi -+ exit 0 -+elif [[ "$#" -ne 0 ]]; then -+ die "Unknown argument(s): $*" -+fi -+ -+# - Check that generated proto files are up to date. -+if [[ -z "${VET_SKIP_PROTO}" ]]; then -+ make proto && git status --porcelain 2>&1 | fail_on_output || \ -+ (git status; git --no-pager diff; exit 1) -+fi -+ -+if [[ -n "${VET_ONLY_PROTO}" ]]; then -+ exit 0 -+fi -+ -+# - Ensure all source files contain a copyright message. -+# (Done in two parts because Darwin "git grep" has broken support for compound -+# exclusion matches.) -+(grep -L "DO NOT EDIT" $(git grep -L "\(Copyright [0-9]\{4,\} gRPC authors\)" -- '*.go') || true) | fail_on_output -+ -+# - Make sure all tests in grpc and grpc/test use leakcheck via Teardown. -+not grep 'func Test[^(]' *_test.go -+not grep 'func Test[^(]' test/*.go -+ -+# - Do not import x/net/context. -+not git grep -l 'x/net/context' -- "*.go" -+ -+# - Do not import math/rand for real library code. Use internal/grpcrand for -+# thread safety. -+git grep -l '"math/rand"' -- "*.go" 2>&1 | not grep -v '^examples\|^stress\|grpcrand\|^benchmark\|wrr_test' -+ -+# - Do not call grpclog directly. Use grpclog.Component instead. -+git grep -l -e 'grpclog.I' --or -e 'grpclog.W' --or -e 'grpclog.E' --or -e 'grpclog.F' --or -e 'grpclog.V' -- "*.go" | not grep -v '^grpclog/component.go\|^internal/grpctest/tlogger_test.go' -+ -+# - Ensure all ptypes proto packages are renamed when importing. -+not git grep "\(import \|^\s*\)\"github.com/golang/protobuf/ptypes/" -- "*.go" -+ -+# - Ensure all xds proto imports are renamed to *pb or *grpc. -+git grep '"github.com/envoyproxy/go-control-plane/envoy' -- '*.go' ':(exclude)*.pb.go' | not grep -v 'pb "\|grpc "' -+ -+misspell -error . -+ -+# - gofmt, goimports, golint (with exceptions for generated code), go vet, -+# go mod tidy. -+# Perform these checks on each module inside gRPC. -+for MOD_FILE in $(find . -name 'go.mod'); do -+ MOD_DIR=$(dirname ${MOD_FILE}) -+ pushd ${MOD_DIR} -+ go vet -all ./... | fail_on_output -+ gofmt -s -d -l . 2>&1 | fail_on_output -+ goimports -l . 2>&1 | not grep -vE "\.pb\.go" -+ golint ./... 2>&1 | not grep -vE "/grpc_testing_not_regenerate/.*\.pb\.go:" -+ -+ go mod tidy -compat=1.17 -+ git status --porcelain 2>&1 | fail_on_output || \ -+ (git status; git --no-pager diff; exit 1) -+ popd -+done -+ -+# - Collection of static analysis checks -+# -+# TODO(dfawley): don't use deprecated functions in examples or first-party -+# plugins. -+# TODO(dfawley): enable ST1019 (duplicate imports) but allow for protobufs. -+SC_OUT="$(mktemp)" -+staticcheck -go 1.19 -checks 'inherit,-ST1015,-ST1019,-SA1019' ./... > "${SC_OUT}" || true -+# Error if anything other than deprecation warnings are printed. -+not grep -v "is deprecated:.*SA1019" "${SC_OUT}" -+# Only ignore the following deprecated types/fields/functions. -+not grep -Fv '.CredsBundle -+.HeaderMap -+.Metadata is deprecated: use Attributes -+.NewAddress -+.NewServiceConfig -+.Type is deprecated: use Attributes -+BuildVersion is deprecated -+balancer.ErrTransientFailure -+balancer.Picker -+extDesc.Filename is deprecated -+github.com/golang/protobuf/jsonpb is deprecated -+grpc.CallCustomCodec -+grpc.Code -+grpc.Compressor -+grpc.CustomCodec -+grpc.Decompressor -+grpc.MaxMsgSize -+grpc.MethodConfig -+grpc.NewGZIPCompressor -+grpc.NewGZIPDecompressor -+grpc.RPCCompressor -+grpc.RPCDecompressor -+grpc.ServiceConfig -+grpc.WithCompressor -+grpc.WithDecompressor -+grpc.WithDialer -+grpc.WithMaxMsgSize -+grpc.WithServiceConfig -+grpc.WithTimeout -+http.CloseNotifier -+info.SecurityVersion -+proto is deprecated -+proto.InternalMessageInfo is deprecated -+proto.EnumName is deprecated -+proto.ErrInternalBadWireType is deprecated -+proto.FileDescriptor is deprecated -+proto.Marshaler is deprecated -+proto.MessageType is deprecated -+proto.RegisterEnum is deprecated -+proto.RegisterFile is deprecated -+proto.RegisterType is deprecated -+proto.RegisterExtension is deprecated -+proto.RegisteredExtension is deprecated -+proto.RegisteredExtensions is deprecated -+proto.RegisterMapType is deprecated -+proto.Unmarshaler is deprecated -+resolver.Backend -+resolver.GRPCLB -+Target is deprecated: Use the Target field in the BuildOptions instead. -+xxx_messageInfo_ -+' "${SC_OUT}" -+ -+# - special golint on package comments. -+lint_package_comment_per_package() { -+ # Number of files in this go package. -+ fileCount=$(go list -f '{{len .GoFiles}}' $1) -+ if [ ${fileCount} -eq 0 ]; then -+ return 0 -+ fi -+ # Number of package errors generated by golint. -+ lintPackageCommentErrorsCount=$(golint --min_confidence 0 $1 | grep -c "should have a package comment") -+ # golint complains about every file that's missing the package comment. If the -+ # number of files for this package is greater than the number of errors, there's -+ # at least one file with package comment, good. Otherwise, fail. -+ if [ ${fileCount} -le ${lintPackageCommentErrorsCount} ]; then -+ echo "Package $1 (with ${fileCount} files) is missing package comment" -+ return 1 -+ fi -+} -+lint_package_comment() { -+ set +ex -+ -+ count=0 -+ for i in $(go list ./...); do -+ lint_package_comment_per_package "$i" -+ ((count += $?)) -+ done -+ -+ set -ex -+ return $count -+} -+lint_package_comment -+ -+echo SUCCESS -diff --git a/vendor/google.golang.org/protobuf/LICENSE b/vendor/google.golang.org/protobuf/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/PATENTS b/vendor/google.golang.org/protobuf/PATENTS -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go -new file mode 100755 -index 0000000..5f28148 ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go -@@ -0,0 +1,665 @@ -+// Copyright 2019 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package protojson -+ -+import ( -+ "encoding/base64" -+ "fmt" -+ "math" -+ "strconv" -+ "strings" -+ -+ "google.golang.org/protobuf/internal/encoding/json" -+ "google.golang.org/protobuf/internal/encoding/messageset" -+ "google.golang.org/protobuf/internal/errors" -+ "google.golang.org/protobuf/internal/flags" -+ "google.golang.org/protobuf/internal/genid" -+ "google.golang.org/protobuf/internal/pragma" -+ "google.golang.org/protobuf/internal/set" -+ "google.golang.org/protobuf/proto" -+ "google.golang.org/protobuf/reflect/protoreflect" -+ "google.golang.org/protobuf/reflect/protoregistry" -+) -+ -+// Unmarshal reads the given []byte into the given proto.Message. -+// The provided message must be mutable (e.g., a non-nil pointer to a message). -+func Unmarshal(b []byte, m proto.Message) error { -+ return UnmarshalOptions{}.Unmarshal(b, m) -+} -+ -+// UnmarshalOptions is a configurable JSON format parser. -+type UnmarshalOptions struct { -+ pragma.NoUnkeyedLiterals -+ -+ // If AllowPartial is set, input for messages that will result in missing -+ // required fields will not return an error. -+ AllowPartial bool -+ -+ // If DiscardUnknown is set, unknown fields are ignored. -+ DiscardUnknown bool -+ -+ // Resolver is used for looking up types when unmarshaling -+ // google.protobuf.Any messages or extension fields. -+ // If nil, this defaults to using protoregistry.GlobalTypes. -+ Resolver interface { -+ protoregistry.MessageTypeResolver -+ protoregistry.ExtensionTypeResolver -+ } -+} -+ -+// Unmarshal reads the given []byte and populates the given proto.Message -+// using options in the UnmarshalOptions object. -+// It will clear the message first before setting the fields. -+// If it returns an error, the given message may be partially set. -+// The provided message must be mutable (e.g., a non-nil pointer to a message). -+func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error { -+ return o.unmarshal(b, m) -+} -+ -+// unmarshal is a centralized function that all unmarshal operations go through. -+// For profiling purposes, avoid changing the name of this function or -+// introducing other code paths for unmarshal that do not go through this. -+func (o UnmarshalOptions) unmarshal(b []byte, m proto.Message) error { -+ proto.Reset(m) -+ -+ if o.Resolver == nil { -+ o.Resolver = protoregistry.GlobalTypes -+ } -+ -+ dec := decoder{json.NewDecoder(b), o} -+ if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil { -+ return err -+ } -+ -+ // Check for EOF. -+ tok, err := dec.Read() -+ if err != nil { -+ return err -+ } -+ if tok.Kind() != json.EOF { -+ return dec.unexpectedTokenError(tok) -+ } -+ -+ if o.AllowPartial { -+ return nil -+ } -+ return proto.CheckInitialized(m) -+} -+ -+type decoder struct { -+ *json.Decoder -+ opts UnmarshalOptions -+} -+ -+// newError returns an error object with position info. -+func (d decoder) newError(pos int, f string, x ...interface{}) error { -+ line, column := d.Position(pos) -+ head := fmt.Sprintf("(line %d:%d): ", line, column) -+ return errors.New(head+f, x...) -+} -+ -+// unexpectedTokenError returns a syntax error for the given unexpected token. -+func (d decoder) unexpectedTokenError(tok json.Token) error { -+ return d.syntaxError(tok.Pos(), "unexpected token %s", tok.RawString()) -+} -+ -+// syntaxError returns a syntax error for given position. -+func (d decoder) syntaxError(pos int, f string, x ...interface{}) error { -+ line, column := d.Position(pos) -+ head := fmt.Sprintf("syntax error (line %d:%d): ", line, column) -+ return errors.New(head+f, x...) -+} -+ -+// unmarshalMessage unmarshals a message into the given protoreflect.Message. -+func (d decoder) unmarshalMessage(m protoreflect.Message, skipTypeURL bool) error { -+ if unmarshal := wellKnownTypeUnmarshaler(m.Descriptor().FullName()); unmarshal != nil { -+ return unmarshal(d, m) -+ } -+ -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ if tok.Kind() != json.ObjectOpen { -+ return d.unexpectedTokenError(tok) -+ } -+ -+ messageDesc := m.Descriptor() -+ if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) { -+ return errors.New("no support for proto1 MessageSets") -+ } -+ -+ var seenNums set.Ints -+ var seenOneofs set.Ints -+ fieldDescs := messageDesc.Fields() -+ for { -+ // Read field name. -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ switch tok.Kind() { -+ default: -+ return d.unexpectedTokenError(tok) -+ case json.ObjectClose: -+ return nil -+ case json.Name: -+ // Continue below. -+ } -+ -+ name := tok.Name() -+ // Unmarshaling a non-custom embedded message in Any will contain the -+ // JSON field "@type" which should be skipped because it is not a field -+ // of the embedded message, but simply an artifact of the Any format. -+ if skipTypeURL && name == "@type" { -+ d.Read() -+ continue -+ } -+ -+ // Get the FieldDescriptor. -+ var fd protoreflect.FieldDescriptor -+ if strings.HasPrefix(name, "[") && strings.HasSuffix(name, "]") { -+ // Only extension names are in [name] format. -+ extName := protoreflect.FullName(name[1 : len(name)-1]) -+ extType, err := d.opts.Resolver.FindExtensionByName(extName) -+ if err != nil && err != protoregistry.NotFound { -+ return d.newError(tok.Pos(), "unable to resolve %s: %v", tok.RawString(), err) -+ } -+ if extType != nil { -+ fd = extType.TypeDescriptor() -+ if !messageDesc.ExtensionRanges().Has(fd.Number()) || fd.ContainingMessage().FullName() != messageDesc.FullName() { -+ return d.newError(tok.Pos(), "message %v cannot be extended by %v", messageDesc.FullName(), fd.FullName()) -+ } -+ } -+ } else { -+ // The name can either be the JSON name or the proto field name. -+ fd = fieldDescs.ByJSONName(name) -+ if fd == nil { -+ fd = fieldDescs.ByTextName(name) -+ } -+ } -+ if flags.ProtoLegacy { -+ if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() { -+ fd = nil // reset since the weak reference is not linked in -+ } -+ } -+ -+ if fd == nil { -+ // Field is unknown. -+ if d.opts.DiscardUnknown { -+ if err := d.skipJSONValue(); err != nil { -+ return err -+ } -+ continue -+ } -+ return d.newError(tok.Pos(), "unknown field %v", tok.RawString()) -+ } -+ -+ // Do not allow duplicate fields. -+ num := uint64(fd.Number()) -+ if seenNums.Has(num) { -+ return d.newError(tok.Pos(), "duplicate field %v", tok.RawString()) -+ } -+ seenNums.Set(num) -+ -+ // No need to set values for JSON null unless the field type is -+ // google.protobuf.Value or google.protobuf.NullValue. -+ if tok, _ := d.Peek(); tok.Kind() == json.Null && !isKnownValue(fd) && !isNullValue(fd) { -+ d.Read() -+ continue -+ } -+ -+ switch { -+ case fd.IsList(): -+ list := m.Mutable(fd).List() -+ if err := d.unmarshalList(list, fd); err != nil { -+ return err -+ } -+ case fd.IsMap(): -+ mmap := m.Mutable(fd).Map() -+ if err := d.unmarshalMap(mmap, fd); err != nil { -+ return err -+ } -+ default: -+ // If field is a oneof, check if it has already been set. -+ if od := fd.ContainingOneof(); od != nil { -+ idx := uint64(od.Index()) -+ if seenOneofs.Has(idx) { -+ return d.newError(tok.Pos(), "error parsing %s, oneof %v is already set", tok.RawString(), od.FullName()) -+ } -+ seenOneofs.Set(idx) -+ } -+ -+ // Required or optional fields. -+ if err := d.unmarshalSingular(m, fd); err != nil { -+ return err -+ } -+ } -+ } -+} -+ -+func isKnownValue(fd protoreflect.FieldDescriptor) bool { -+ md := fd.Message() -+ return md != nil && md.FullName() == genid.Value_message_fullname -+} -+ -+func isNullValue(fd protoreflect.FieldDescriptor) bool { -+ ed := fd.Enum() -+ return ed != nil && ed.FullName() == genid.NullValue_enum_fullname -+} -+ -+// unmarshalSingular unmarshals to the non-repeated field specified -+// by the given FieldDescriptor. -+func (d decoder) unmarshalSingular(m protoreflect.Message, fd protoreflect.FieldDescriptor) error { -+ var val protoreflect.Value -+ var err error -+ switch fd.Kind() { -+ case protoreflect.MessageKind, protoreflect.GroupKind: -+ val = m.NewField(fd) -+ err = d.unmarshalMessage(val.Message(), false) -+ default: -+ val, err = d.unmarshalScalar(fd) -+ } -+ -+ if err != nil { -+ return err -+ } -+ m.Set(fd, val) -+ return nil -+} -+ -+// unmarshalScalar unmarshals to a scalar/enum protoreflect.Value specified by -+// the given FieldDescriptor. -+func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.Value, error) { -+ const b32 int = 32 -+ const b64 int = 64 -+ -+ tok, err := d.Read() -+ if err != nil { -+ return protoreflect.Value{}, err -+ } -+ -+ kind := fd.Kind() -+ switch kind { -+ case protoreflect.BoolKind: -+ if tok.Kind() == json.Bool { -+ return protoreflect.ValueOfBool(tok.Bool()), nil -+ } -+ -+ case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: -+ if v, ok := unmarshalInt(tok, b32); ok { -+ return v, nil -+ } -+ -+ case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: -+ if v, ok := unmarshalInt(tok, b64); ok { -+ return v, nil -+ } -+ -+ case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: -+ if v, ok := unmarshalUint(tok, b32); ok { -+ return v, nil -+ } -+ -+ case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: -+ if v, ok := unmarshalUint(tok, b64); ok { -+ return v, nil -+ } -+ -+ case protoreflect.FloatKind: -+ if v, ok := unmarshalFloat(tok, b32); ok { -+ return v, nil -+ } -+ -+ case protoreflect.DoubleKind: -+ if v, ok := unmarshalFloat(tok, b64); ok { -+ return v, nil -+ } -+ -+ case protoreflect.StringKind: -+ if tok.Kind() == json.String { -+ return protoreflect.ValueOfString(tok.ParsedString()), nil -+ } -+ -+ case protoreflect.BytesKind: -+ if v, ok := unmarshalBytes(tok); ok { -+ return v, nil -+ } -+ -+ case protoreflect.EnumKind: -+ if v, ok := unmarshalEnum(tok, fd); ok { -+ return v, nil -+ } -+ -+ default: -+ panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind)) -+ } -+ -+ return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString()) -+} -+ -+func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) { -+ switch tok.Kind() { -+ case json.Number: -+ return getInt(tok, bitSize) -+ -+ case json.String: -+ // Decode number from string. -+ s := strings.TrimSpace(tok.ParsedString()) -+ if len(s) != len(tok.ParsedString()) { -+ return protoreflect.Value{}, false -+ } -+ dec := json.NewDecoder([]byte(s)) -+ tok, err := dec.Read() -+ if err != nil { -+ return protoreflect.Value{}, false -+ } -+ return getInt(tok, bitSize) -+ } -+ return protoreflect.Value{}, false -+} -+ -+func getInt(tok json.Token, bitSize int) (protoreflect.Value, bool) { -+ n, ok := tok.Int(bitSize) -+ if !ok { -+ return protoreflect.Value{}, false -+ } -+ if bitSize == 32 { -+ return protoreflect.ValueOfInt32(int32(n)), true -+ } -+ return protoreflect.ValueOfInt64(n), true -+} -+ -+func unmarshalUint(tok json.Token, bitSize int) (protoreflect.Value, bool) { -+ switch tok.Kind() { -+ case json.Number: -+ return getUint(tok, bitSize) -+ -+ case json.String: -+ // Decode number from string. -+ s := strings.TrimSpace(tok.ParsedString()) -+ if len(s) != len(tok.ParsedString()) { -+ return protoreflect.Value{}, false -+ } -+ dec := json.NewDecoder([]byte(s)) -+ tok, err := dec.Read() -+ if err != nil { -+ return protoreflect.Value{}, false -+ } -+ return getUint(tok, bitSize) -+ } -+ return protoreflect.Value{}, false -+} -+ -+func getUint(tok json.Token, bitSize int) (protoreflect.Value, bool) { -+ n, ok := tok.Uint(bitSize) -+ if !ok { -+ return protoreflect.Value{}, false -+ } -+ if bitSize == 32 { -+ return protoreflect.ValueOfUint32(uint32(n)), true -+ } -+ return protoreflect.ValueOfUint64(n), true -+} -+ -+func unmarshalFloat(tok json.Token, bitSize int) (protoreflect.Value, bool) { -+ switch tok.Kind() { -+ case json.Number: -+ return getFloat(tok, bitSize) -+ -+ case json.String: -+ s := tok.ParsedString() -+ switch s { -+ case "NaN": -+ if bitSize == 32 { -+ return protoreflect.ValueOfFloat32(float32(math.NaN())), true -+ } -+ return protoreflect.ValueOfFloat64(math.NaN()), true -+ case "Infinity": -+ if bitSize == 32 { -+ return protoreflect.ValueOfFloat32(float32(math.Inf(+1))), true -+ } -+ return protoreflect.ValueOfFloat64(math.Inf(+1)), true -+ case "-Infinity": -+ if bitSize == 32 { -+ return protoreflect.ValueOfFloat32(float32(math.Inf(-1))), true -+ } -+ return protoreflect.ValueOfFloat64(math.Inf(-1)), true -+ } -+ -+ // Decode number from string. -+ if len(s) != len(strings.TrimSpace(s)) { -+ return protoreflect.Value{}, false -+ } -+ dec := json.NewDecoder([]byte(s)) -+ tok, err := dec.Read() -+ if err != nil { -+ return protoreflect.Value{}, false -+ } -+ return getFloat(tok, bitSize) -+ } -+ return protoreflect.Value{}, false -+} -+ -+func getFloat(tok json.Token, bitSize int) (protoreflect.Value, bool) { -+ n, ok := tok.Float(bitSize) -+ if !ok { -+ return protoreflect.Value{}, false -+ } -+ if bitSize == 32 { -+ return protoreflect.ValueOfFloat32(float32(n)), true -+ } -+ return protoreflect.ValueOfFloat64(n), true -+} -+ -+func unmarshalBytes(tok json.Token) (protoreflect.Value, bool) { -+ if tok.Kind() != json.String { -+ return protoreflect.Value{}, false -+ } -+ -+ s := tok.ParsedString() -+ enc := base64.StdEncoding -+ if strings.ContainsAny(s, "-_") { -+ enc = base64.URLEncoding -+ } -+ if len(s)%4 != 0 { -+ enc = enc.WithPadding(base64.NoPadding) -+ } -+ b, err := enc.DecodeString(s) -+ if err != nil { -+ return protoreflect.Value{}, false -+ } -+ return protoreflect.ValueOfBytes(b), true -+} -+ -+func unmarshalEnum(tok json.Token, fd protoreflect.FieldDescriptor) (protoreflect.Value, bool) { -+ switch tok.Kind() { -+ case json.String: -+ // Lookup EnumNumber based on name. -+ s := tok.ParsedString() -+ if enumVal := fd.Enum().Values().ByName(protoreflect.Name(s)); enumVal != nil { -+ return protoreflect.ValueOfEnum(enumVal.Number()), true -+ } -+ -+ case json.Number: -+ if n, ok := tok.Int(32); ok { -+ return protoreflect.ValueOfEnum(protoreflect.EnumNumber(n)), true -+ } -+ -+ case json.Null: -+ // This is only valid for google.protobuf.NullValue. -+ if isNullValue(fd) { -+ return protoreflect.ValueOfEnum(0), true -+ } -+ } -+ -+ return protoreflect.Value{}, false -+} -+ -+func (d decoder) unmarshalList(list protoreflect.List, fd protoreflect.FieldDescriptor) error { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ if tok.Kind() != json.ArrayOpen { -+ return d.unexpectedTokenError(tok) -+ } -+ -+ switch fd.Kind() { -+ case protoreflect.MessageKind, protoreflect.GroupKind: -+ for { -+ tok, err := d.Peek() -+ if err != nil { -+ return err -+ } -+ -+ if tok.Kind() == json.ArrayClose { -+ d.Read() -+ return nil -+ } -+ -+ val := list.NewElement() -+ if err := d.unmarshalMessage(val.Message(), false); err != nil { -+ return err -+ } -+ list.Append(val) -+ } -+ default: -+ for { -+ tok, err := d.Peek() -+ if err != nil { -+ return err -+ } -+ -+ if tok.Kind() == json.ArrayClose { -+ d.Read() -+ return nil -+ } -+ -+ val, err := d.unmarshalScalar(fd) -+ if err != nil { -+ return err -+ } -+ list.Append(val) -+ } -+ } -+ -+ return nil -+} -+ -+func (d decoder) unmarshalMap(mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ if tok.Kind() != json.ObjectOpen { -+ return d.unexpectedTokenError(tok) -+ } -+ -+ // Determine ahead whether map entry is a scalar type or a message type in -+ // order to call the appropriate unmarshalMapValue func inside the for loop -+ // below. -+ var unmarshalMapValue func() (protoreflect.Value, error) -+ switch fd.MapValue().Kind() { -+ case protoreflect.MessageKind, protoreflect.GroupKind: -+ unmarshalMapValue = func() (protoreflect.Value, error) { -+ val := mmap.NewValue() -+ if err := d.unmarshalMessage(val.Message(), false); err != nil { -+ return protoreflect.Value{}, err -+ } -+ return val, nil -+ } -+ default: -+ unmarshalMapValue = func() (protoreflect.Value, error) { -+ return d.unmarshalScalar(fd.MapValue()) -+ } -+ } -+ -+Loop: -+ for { -+ // Read field name. -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ switch tok.Kind() { -+ default: -+ return d.unexpectedTokenError(tok) -+ case json.ObjectClose: -+ break Loop -+ case json.Name: -+ // Continue. -+ } -+ -+ // Unmarshal field name. -+ pkey, err := d.unmarshalMapKey(tok, fd.MapKey()) -+ if err != nil { -+ return err -+ } -+ -+ // Check for duplicate field name. -+ if mmap.Has(pkey) { -+ return d.newError(tok.Pos(), "duplicate map key %v", tok.RawString()) -+ } -+ -+ // Read and unmarshal field value. -+ pval, err := unmarshalMapValue() -+ if err != nil { -+ return err -+ } -+ -+ mmap.Set(pkey, pval) -+ } -+ -+ return nil -+} -+ -+// unmarshalMapKey converts given token of Name kind into a protoreflect.MapKey. -+// A map key type is any integral or string type. -+func (d decoder) unmarshalMapKey(tok json.Token, fd protoreflect.FieldDescriptor) (protoreflect.MapKey, error) { -+ const b32 = 32 -+ const b64 = 64 -+ const base10 = 10 -+ -+ name := tok.Name() -+ kind := fd.Kind() -+ switch kind { -+ case protoreflect.StringKind: -+ return protoreflect.ValueOfString(name).MapKey(), nil -+ -+ case protoreflect.BoolKind: -+ switch name { -+ case "true": -+ return protoreflect.ValueOfBool(true).MapKey(), nil -+ case "false": -+ return protoreflect.ValueOfBool(false).MapKey(), nil -+ } -+ -+ case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: -+ if n, err := strconv.ParseInt(name, base10, b32); err == nil { -+ return protoreflect.ValueOfInt32(int32(n)).MapKey(), nil -+ } -+ -+ case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: -+ if n, err := strconv.ParseInt(name, base10, b64); err == nil { -+ return protoreflect.ValueOfInt64(int64(n)).MapKey(), nil -+ } -+ -+ case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: -+ if n, err := strconv.ParseUint(name, base10, b32); err == nil { -+ return protoreflect.ValueOfUint32(uint32(n)).MapKey(), nil -+ } -+ -+ case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: -+ if n, err := strconv.ParseUint(name, base10, b64); err == nil { -+ return protoreflect.ValueOfUint64(uint64(n)).MapKey(), nil -+ } -+ -+ default: -+ panic(fmt.Sprintf("invalid kind for map key: %v", kind)) -+ } -+ -+ return protoreflect.MapKey{}, d.newError(tok.Pos(), "invalid value for %v key: %s", kind, tok.RawString()) -+} -diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/doc.go b/vendor/google.golang.org/protobuf/encoding/protojson/doc.go -new file mode 100755 -index 0000000..21d5d2c ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/encoding/protojson/doc.go -@@ -0,0 +1,11 @@ -+// Copyright 2019 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+// Package protojson marshals and unmarshals protocol buffer messages as JSON -+// format. It follows the guide at -+// https://protobuf.dev/programming-guides/proto3#json. -+// -+// This package produces a different output than the standard "encoding/json" -+// package, which does not operate correctly on protocol buffer messages. -+package protojson -diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go -new file mode 100755 -index 0000000..66b9587 ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go -@@ -0,0 +1,349 @@ -+// Copyright 2019 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package protojson -+ -+import ( -+ "encoding/base64" -+ "fmt" -+ -+ "google.golang.org/protobuf/internal/encoding/json" -+ "google.golang.org/protobuf/internal/encoding/messageset" -+ "google.golang.org/protobuf/internal/errors" -+ "google.golang.org/protobuf/internal/filedesc" -+ "google.golang.org/protobuf/internal/flags" -+ "google.golang.org/protobuf/internal/genid" -+ "google.golang.org/protobuf/internal/order" -+ "google.golang.org/protobuf/internal/pragma" -+ "google.golang.org/protobuf/proto" -+ "google.golang.org/protobuf/reflect/protoreflect" -+ "google.golang.org/protobuf/reflect/protoregistry" -+) -+ -+const defaultIndent = " " -+ -+// Format formats the message as a multiline string. -+// This function is only intended for human consumption and ignores errors. -+// Do not depend on the output being stable. It may change over time across -+// different versions of the program. -+func Format(m proto.Message) string { -+ return MarshalOptions{Multiline: true}.Format(m) -+} -+ -+// Marshal writes the given proto.Message in JSON format using default options. -+// Do not depend on the output being stable. It may change over time across -+// different versions of the program. -+func Marshal(m proto.Message) ([]byte, error) { -+ return MarshalOptions{}.Marshal(m) -+} -+ -+// MarshalOptions is a configurable JSON format marshaler. -+type MarshalOptions struct { -+ pragma.NoUnkeyedLiterals -+ -+ // Multiline specifies whether the marshaler should format the output in -+ // indented-form with every textual element on a new line. -+ // If Indent is an empty string, then an arbitrary indent is chosen. -+ Multiline bool -+ -+ // Indent specifies the set of indentation characters to use in a multiline -+ // formatted output such that every entry is preceded by Indent and -+ // terminated by a newline. If non-empty, then Multiline is treated as true. -+ // Indent can only be composed of space or tab characters. -+ Indent string -+ -+ // AllowPartial allows messages that have missing required fields to marshal -+ // without returning an error. If AllowPartial is false (the default), -+ // Marshal will return error if there are any missing required fields. -+ AllowPartial bool -+ -+ // UseProtoNames uses proto field name instead of lowerCamelCase name in JSON -+ // field names. -+ UseProtoNames bool -+ -+ // UseEnumNumbers emits enum values as numbers. -+ UseEnumNumbers bool -+ -+ // EmitUnpopulated specifies whether to emit unpopulated fields. It does not -+ // emit unpopulated oneof fields or unpopulated extension fields. -+ // The JSON value emitted for unpopulated fields are as follows: -+ // ╔═══════╤════════════════════════════╗ -+ // ║ JSON │ Protobuf field ║ -+ // ╠═══════╪════════════════════════════╣ -+ // ║ false │ proto3 boolean fields ║ -+ // ║ 0 │ proto3 numeric fields ║ -+ // ║ "" │ proto3 string/bytes fields ║ -+ // ║ null │ proto2 scalar fields ║ -+ // ║ null │ message fields ║ -+ // ║ [] │ list fields ║ -+ // ║ {} │ map fields ║ -+ // ╚═══════╧════════════════════════════╝ -+ EmitUnpopulated bool -+ -+ // Resolver is used for looking up types when expanding google.protobuf.Any -+ // messages. If nil, this defaults to using protoregistry.GlobalTypes. -+ Resolver interface { -+ protoregistry.ExtensionTypeResolver -+ protoregistry.MessageTypeResolver -+ } -+} -+ -+// Format formats the message as a string. -+// This method is only intended for human consumption and ignores errors. -+// Do not depend on the output being stable. It may change over time across -+// different versions of the program. -+func (o MarshalOptions) Format(m proto.Message) string { -+ if m == nil || !m.ProtoReflect().IsValid() { -+ return "" // invalid syntax, but okay since this is for debugging -+ } -+ o.AllowPartial = true -+ b, _ := o.Marshal(m) -+ return string(b) -+} -+ -+// Marshal marshals the given proto.Message in the JSON format using options in -+// MarshalOptions. Do not depend on the output being stable. It may change over -+// time across different versions of the program. -+func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { -+ return o.marshal(nil, m) -+} -+ -+// MarshalAppend appends the JSON format encoding of m to b, -+// returning the result. -+func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) { -+ return o.marshal(b, m) -+} -+ -+// marshal is a centralized function that all marshal operations go through. -+// For profiling purposes, avoid changing the name of this function or -+// introducing other code paths for marshal that do not go through this. -+func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) { -+ if o.Multiline && o.Indent == "" { -+ o.Indent = defaultIndent -+ } -+ if o.Resolver == nil { -+ o.Resolver = protoregistry.GlobalTypes -+ } -+ -+ internalEnc, err := json.NewEncoder(b, o.Indent) -+ if err != nil { -+ return nil, err -+ } -+ -+ // Treat nil message interface as an empty message, -+ // in which case the output in an empty JSON object. -+ if m == nil { -+ return append(b, '{', '}'), nil -+ } -+ -+ enc := encoder{internalEnc, o} -+ if err := enc.marshalMessage(m.ProtoReflect(), ""); err != nil { -+ return nil, err -+ } -+ if o.AllowPartial { -+ return enc.Bytes(), nil -+ } -+ return enc.Bytes(), proto.CheckInitialized(m) -+} -+ -+type encoder struct { -+ *json.Encoder -+ opts MarshalOptions -+} -+ -+// typeFieldDesc is a synthetic field descriptor used for the "@type" field. -+var typeFieldDesc = func() protoreflect.FieldDescriptor { -+ var fd filedesc.Field -+ fd.L0.FullName = "@type" -+ fd.L0.Index = -1 -+ fd.L1.Cardinality = protoreflect.Optional -+ fd.L1.Kind = protoreflect.StringKind -+ return &fd -+}() -+ -+// typeURLFieldRanger wraps a protoreflect.Message and modifies its Range method -+// to additionally iterate over a synthetic field for the type URL. -+type typeURLFieldRanger struct { -+ order.FieldRanger -+ typeURL string -+} -+ -+func (m typeURLFieldRanger) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { -+ if !f(typeFieldDesc, protoreflect.ValueOfString(m.typeURL)) { -+ return -+ } -+ m.FieldRanger.Range(f) -+} -+ -+// unpopulatedFieldRanger wraps a protoreflect.Message and modifies its Range -+// method to additionally iterate over unpopulated fields. -+type unpopulatedFieldRanger struct{ protoreflect.Message } -+ -+func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { -+ fds := m.Descriptor().Fields() -+ for i := 0; i < fds.Len(); i++ { -+ fd := fds.Get(i) -+ if m.Has(fd) || fd.ContainingOneof() != nil { -+ continue // ignore populated fields and fields within a oneofs -+ } -+ -+ v := m.Get(fd) -+ isProto2Scalar := fd.Syntax() == protoreflect.Proto2 && fd.Default().IsValid() -+ isSingularMessage := fd.Cardinality() != protoreflect.Repeated && fd.Message() != nil -+ if isProto2Scalar || isSingularMessage { -+ v = protoreflect.Value{} // use invalid value to emit null -+ } -+ if !f(fd, v) { -+ return -+ } -+ } -+ m.Message.Range(f) -+} -+ -+// marshalMessage marshals the fields in the given protoreflect.Message. -+// If the typeURL is non-empty, then a synthetic "@type" field is injected -+// containing the URL as the value. -+func (e encoder) marshalMessage(m protoreflect.Message, typeURL string) error { -+ if !flags.ProtoLegacy && messageset.IsMessageSet(m.Descriptor()) { -+ return errors.New("no support for proto1 MessageSets") -+ } -+ -+ if marshal := wellKnownTypeMarshaler(m.Descriptor().FullName()); marshal != nil { -+ return marshal(e, m) -+ } -+ -+ e.StartObject() -+ defer e.EndObject() -+ -+ var fields order.FieldRanger = m -+ if e.opts.EmitUnpopulated { -+ fields = unpopulatedFieldRanger{m} -+ } -+ if typeURL != "" { -+ fields = typeURLFieldRanger{fields, typeURL} -+ } -+ -+ var err error -+ order.RangeFields(fields, order.IndexNameFieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { -+ name := fd.JSONName() -+ if e.opts.UseProtoNames { -+ name = fd.TextName() -+ } -+ -+ if err = e.WriteName(name); err != nil { -+ return false -+ } -+ if err = e.marshalValue(v, fd); err != nil { -+ return false -+ } -+ return true -+ }) -+ return err -+} -+ -+// marshalValue marshals the given protoreflect.Value. -+func (e encoder) marshalValue(val protoreflect.Value, fd protoreflect.FieldDescriptor) error { -+ switch { -+ case fd.IsList(): -+ return e.marshalList(val.List(), fd) -+ case fd.IsMap(): -+ return e.marshalMap(val.Map(), fd) -+ default: -+ return e.marshalSingular(val, fd) -+ } -+} -+ -+// marshalSingular marshals the given non-repeated field value. This includes -+// all scalar types, enums, messages, and groups. -+func (e encoder) marshalSingular(val protoreflect.Value, fd protoreflect.FieldDescriptor) error { -+ if !val.IsValid() { -+ e.WriteNull() -+ return nil -+ } -+ -+ switch kind := fd.Kind(); kind { -+ case protoreflect.BoolKind: -+ e.WriteBool(val.Bool()) -+ -+ case protoreflect.StringKind: -+ if e.WriteString(val.String()) != nil { -+ return errors.InvalidUTF8(string(fd.FullName())) -+ } -+ -+ case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: -+ e.WriteInt(val.Int()) -+ -+ case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: -+ e.WriteUint(val.Uint()) -+ -+ case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Uint64Kind, -+ protoreflect.Sfixed64Kind, protoreflect.Fixed64Kind: -+ // 64-bit integers are written out as JSON string. -+ e.WriteString(val.String()) -+ -+ case protoreflect.FloatKind: -+ // Encoder.WriteFloat handles the special numbers NaN and infinites. -+ e.WriteFloat(val.Float(), 32) -+ -+ case protoreflect.DoubleKind: -+ // Encoder.WriteFloat handles the special numbers NaN and infinites. -+ e.WriteFloat(val.Float(), 64) -+ -+ case protoreflect.BytesKind: -+ e.WriteString(base64.StdEncoding.EncodeToString(val.Bytes())) -+ -+ case protoreflect.EnumKind: -+ if fd.Enum().FullName() == genid.NullValue_enum_fullname { -+ e.WriteNull() -+ } else { -+ desc := fd.Enum().Values().ByNumber(val.Enum()) -+ if e.opts.UseEnumNumbers || desc == nil { -+ e.WriteInt(int64(val.Enum())) -+ } else { -+ e.WriteString(string(desc.Name())) -+ } -+ } -+ -+ case protoreflect.MessageKind, protoreflect.GroupKind: -+ if err := e.marshalMessage(val.Message(), ""); err != nil { -+ return err -+ } -+ -+ default: -+ panic(fmt.Sprintf("%v has unknown kind: %v", fd.FullName(), kind)) -+ } -+ return nil -+} -+ -+// marshalList marshals the given protoreflect.List. -+func (e encoder) marshalList(list protoreflect.List, fd protoreflect.FieldDescriptor) error { -+ e.StartArray() -+ defer e.EndArray() -+ -+ for i := 0; i < list.Len(); i++ { -+ item := list.Get(i) -+ if err := e.marshalSingular(item, fd); err != nil { -+ return err -+ } -+ } -+ return nil -+} -+ -+// marshalMap marshals given protoreflect.Map. -+func (e encoder) marshalMap(mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error { -+ e.StartObject() -+ defer e.EndObject() -+ -+ var err error -+ order.RangeEntries(mmap, order.GenericKeyOrder, func(k protoreflect.MapKey, v protoreflect.Value) bool { -+ if err = e.WriteName(k.String()); err != nil { -+ return false -+ } -+ if err = e.marshalSingular(v, fd.MapValue()); err != nil { -+ return false -+ } -+ return true -+ }) -+ return err -+} -diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go -new file mode 100755 -index 0000000..6c37d41 ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go -@@ -0,0 +1,895 @@ -+// Copyright 2019 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package protojson -+ -+import ( -+ "bytes" -+ "fmt" -+ "math" -+ "strconv" -+ "strings" -+ "time" -+ -+ "google.golang.org/protobuf/internal/encoding/json" -+ "google.golang.org/protobuf/internal/errors" -+ "google.golang.org/protobuf/internal/genid" -+ "google.golang.org/protobuf/internal/strs" -+ "google.golang.org/protobuf/proto" -+ "google.golang.org/protobuf/reflect/protoreflect" -+) -+ -+type marshalFunc func(encoder, protoreflect.Message) error -+ -+// wellKnownTypeMarshaler returns a marshal function if the message type -+// has specialized serialization behavior. It returns nil otherwise. -+func wellKnownTypeMarshaler(name protoreflect.FullName) marshalFunc { -+ if name.Parent() == genid.GoogleProtobuf_package { -+ switch name.Name() { -+ case genid.Any_message_name: -+ return encoder.marshalAny -+ case genid.Timestamp_message_name: -+ return encoder.marshalTimestamp -+ case genid.Duration_message_name: -+ return encoder.marshalDuration -+ case genid.BoolValue_message_name, -+ genid.Int32Value_message_name, -+ genid.Int64Value_message_name, -+ genid.UInt32Value_message_name, -+ genid.UInt64Value_message_name, -+ genid.FloatValue_message_name, -+ genid.DoubleValue_message_name, -+ genid.StringValue_message_name, -+ genid.BytesValue_message_name: -+ return encoder.marshalWrapperType -+ case genid.Struct_message_name: -+ return encoder.marshalStruct -+ case genid.ListValue_message_name: -+ return encoder.marshalListValue -+ case genid.Value_message_name: -+ return encoder.marshalKnownValue -+ case genid.FieldMask_message_name: -+ return encoder.marshalFieldMask -+ case genid.Empty_message_name: -+ return encoder.marshalEmpty -+ } -+ } -+ return nil -+} -+ -+type unmarshalFunc func(decoder, protoreflect.Message) error -+ -+// wellKnownTypeUnmarshaler returns a unmarshal function if the message type -+// has specialized serialization behavior. It returns nil otherwise. -+func wellKnownTypeUnmarshaler(name protoreflect.FullName) unmarshalFunc { -+ if name.Parent() == genid.GoogleProtobuf_package { -+ switch name.Name() { -+ case genid.Any_message_name: -+ return decoder.unmarshalAny -+ case genid.Timestamp_message_name: -+ return decoder.unmarshalTimestamp -+ case genid.Duration_message_name: -+ return decoder.unmarshalDuration -+ case genid.BoolValue_message_name, -+ genid.Int32Value_message_name, -+ genid.Int64Value_message_name, -+ genid.UInt32Value_message_name, -+ genid.UInt64Value_message_name, -+ genid.FloatValue_message_name, -+ genid.DoubleValue_message_name, -+ genid.StringValue_message_name, -+ genid.BytesValue_message_name: -+ return decoder.unmarshalWrapperType -+ case genid.Struct_message_name: -+ return decoder.unmarshalStruct -+ case genid.ListValue_message_name: -+ return decoder.unmarshalListValue -+ case genid.Value_message_name: -+ return decoder.unmarshalKnownValue -+ case genid.FieldMask_message_name: -+ return decoder.unmarshalFieldMask -+ case genid.Empty_message_name: -+ return decoder.unmarshalEmpty -+ } -+ } -+ return nil -+} -+ -+// The JSON representation of an Any message uses the regular representation of -+// the deserialized, embedded message, with an additional field `@type` which -+// contains the type URL. If the embedded message type is well-known and has a -+// custom JSON representation, that representation will be embedded adding a -+// field `value` which holds the custom JSON in addition to the `@type` field. -+ -+func (e encoder) marshalAny(m protoreflect.Message) error { -+ fds := m.Descriptor().Fields() -+ fdType := fds.ByNumber(genid.Any_TypeUrl_field_number) -+ fdValue := fds.ByNumber(genid.Any_Value_field_number) -+ -+ if !m.Has(fdType) { -+ if !m.Has(fdValue) { -+ // If message is empty, marshal out empty JSON object. -+ e.StartObject() -+ e.EndObject() -+ return nil -+ } else { -+ // Return error if type_url field is not set, but value is set. -+ return errors.New("%s: %v is not set", genid.Any_message_fullname, genid.Any_TypeUrl_field_name) -+ } -+ } -+ -+ typeVal := m.Get(fdType) -+ valueVal := m.Get(fdValue) -+ -+ // Resolve the type in order to unmarshal value field. -+ typeURL := typeVal.String() -+ emt, err := e.opts.Resolver.FindMessageByURL(typeURL) -+ if err != nil { -+ return errors.New("%s: unable to resolve %q: %v", genid.Any_message_fullname, typeURL, err) -+ } -+ -+ em := emt.New() -+ err = proto.UnmarshalOptions{ -+ AllowPartial: true, // never check required fields inside an Any -+ Resolver: e.opts.Resolver, -+ }.Unmarshal(valueVal.Bytes(), em.Interface()) -+ if err != nil { -+ return errors.New("%s: unable to unmarshal %q: %v", genid.Any_message_fullname, typeURL, err) -+ } -+ -+ // If type of value has custom JSON encoding, marshal out a field "value" -+ // with corresponding custom JSON encoding of the embedded message as a -+ // field. -+ if marshal := wellKnownTypeMarshaler(emt.Descriptor().FullName()); marshal != nil { -+ e.StartObject() -+ defer e.EndObject() -+ -+ // Marshal out @type field. -+ e.WriteName("@type") -+ if err := e.WriteString(typeURL); err != nil { -+ return err -+ } -+ -+ e.WriteName("value") -+ return marshal(e, em) -+ } -+ -+ // Else, marshal out the embedded message's fields in this Any object. -+ if err := e.marshalMessage(em, typeURL); err != nil { -+ return err -+ } -+ -+ return nil -+} -+ -+func (d decoder) unmarshalAny(m protoreflect.Message) error { -+ // Peek to check for json.ObjectOpen to avoid advancing a read. -+ start, err := d.Peek() -+ if err != nil { -+ return err -+ } -+ if start.Kind() != json.ObjectOpen { -+ return d.unexpectedTokenError(start) -+ } -+ -+ // Use another decoder to parse the unread bytes for @type field. This -+ // avoids advancing a read from current decoder because the current JSON -+ // object may contain the fields of the embedded type. -+ dec := decoder{d.Clone(), UnmarshalOptions{}} -+ tok, err := findTypeURL(dec) -+ switch err { -+ case errEmptyObject: -+ // An empty JSON object translates to an empty Any message. -+ d.Read() // Read json.ObjectOpen. -+ d.Read() // Read json.ObjectClose. -+ return nil -+ -+ case errMissingType: -+ if d.opts.DiscardUnknown { -+ // Treat all fields as unknowns, similar to an empty object. -+ return d.skipJSONValue() -+ } -+ // Use start.Pos() for line position. -+ return d.newError(start.Pos(), err.Error()) -+ -+ default: -+ if err != nil { -+ return err -+ } -+ } -+ -+ typeURL := tok.ParsedString() -+ emt, err := d.opts.Resolver.FindMessageByURL(typeURL) -+ if err != nil { -+ return d.newError(tok.Pos(), "unable to resolve %v: %q", tok.RawString(), err) -+ } -+ -+ // Create new message for the embedded message type and unmarshal into it. -+ em := emt.New() -+ if unmarshal := wellKnownTypeUnmarshaler(emt.Descriptor().FullName()); unmarshal != nil { -+ // If embedded message is a custom type, -+ // unmarshal the JSON "value" field into it. -+ if err := d.unmarshalAnyValue(unmarshal, em); err != nil { -+ return err -+ } -+ } else { -+ // Else unmarshal the current JSON object into it. -+ if err := d.unmarshalMessage(em, true); err != nil { -+ return err -+ } -+ } -+ // Serialize the embedded message and assign the resulting bytes to the -+ // proto value field. -+ b, err := proto.MarshalOptions{ -+ AllowPartial: true, // No need to check required fields inside an Any. -+ Deterministic: true, -+ }.Marshal(em.Interface()) -+ if err != nil { -+ return d.newError(start.Pos(), "error in marshaling Any.value field: %v", err) -+ } -+ -+ fds := m.Descriptor().Fields() -+ fdType := fds.ByNumber(genid.Any_TypeUrl_field_number) -+ fdValue := fds.ByNumber(genid.Any_Value_field_number) -+ -+ m.Set(fdType, protoreflect.ValueOfString(typeURL)) -+ m.Set(fdValue, protoreflect.ValueOfBytes(b)) -+ return nil -+} -+ -+var errEmptyObject = fmt.Errorf(`empty object`) -+var errMissingType = fmt.Errorf(`missing "@type" field`) -+ -+// findTypeURL returns the token for the "@type" field value from the given -+// JSON bytes. It is expected that the given bytes start with json.ObjectOpen. -+// It returns errEmptyObject if the JSON object is empty or errMissingType if -+// @type field does not exist. It returns other error if the @type field is not -+// valid or other decoding issues. -+func findTypeURL(d decoder) (json.Token, error) { -+ var typeURL string -+ var typeTok json.Token -+ numFields := 0 -+ // Skip start object. -+ d.Read() -+ -+Loop: -+ for { -+ tok, err := d.Read() -+ if err != nil { -+ return json.Token{}, err -+ } -+ -+ switch tok.Kind() { -+ case json.ObjectClose: -+ if typeURL == "" { -+ // Did not find @type field. -+ if numFields > 0 { -+ return json.Token{}, errMissingType -+ } -+ return json.Token{}, errEmptyObject -+ } -+ break Loop -+ -+ case json.Name: -+ numFields++ -+ if tok.Name() != "@type" { -+ // Skip value. -+ if err := d.skipJSONValue(); err != nil { -+ return json.Token{}, err -+ } -+ continue -+ } -+ -+ // Return error if this was previously set already. -+ if typeURL != "" { -+ return json.Token{}, d.newError(tok.Pos(), `duplicate "@type" field`) -+ } -+ // Read field value. -+ tok, err := d.Read() -+ if err != nil { -+ return json.Token{}, err -+ } -+ if tok.Kind() != json.String { -+ return json.Token{}, d.newError(tok.Pos(), `@type field value is not a string: %v`, tok.RawString()) -+ } -+ typeURL = tok.ParsedString() -+ if typeURL == "" { -+ return json.Token{}, d.newError(tok.Pos(), `@type field contains empty value`) -+ } -+ typeTok = tok -+ } -+ } -+ -+ return typeTok, nil -+} -+ -+// skipJSONValue parses a JSON value (null, boolean, string, number, object and -+// array) in order to advance the read to the next JSON value. It relies on -+// the decoder returning an error if the types are not in valid sequence. -+func (d decoder) skipJSONValue() error { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ // Only need to continue reading for objects and arrays. -+ switch tok.Kind() { -+ case json.ObjectOpen: -+ for { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ switch tok.Kind() { -+ case json.ObjectClose: -+ return nil -+ case json.Name: -+ // Skip object field value. -+ if err := d.skipJSONValue(); err != nil { -+ return err -+ } -+ } -+ } -+ -+ case json.ArrayOpen: -+ for { -+ tok, err := d.Peek() -+ if err != nil { -+ return err -+ } -+ switch tok.Kind() { -+ case json.ArrayClose: -+ d.Read() -+ return nil -+ default: -+ // Skip array item. -+ if err := d.skipJSONValue(); err != nil { -+ return err -+ } -+ } -+ } -+ } -+ return nil -+} -+ -+// unmarshalAnyValue unmarshals the given custom-type message from the JSON -+// object's "value" field. -+func (d decoder) unmarshalAnyValue(unmarshal unmarshalFunc, m protoreflect.Message) error { -+ // Skip ObjectOpen, and start reading the fields. -+ d.Read() -+ -+ var found bool // Used for detecting duplicate "value". -+ for { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ switch tok.Kind() { -+ case json.ObjectClose: -+ if !found { -+ return d.newError(tok.Pos(), `missing "value" field`) -+ } -+ return nil -+ -+ case json.Name: -+ switch tok.Name() { -+ case "@type": -+ // Skip the value as this was previously parsed already. -+ d.Read() -+ -+ case "value": -+ if found { -+ return d.newError(tok.Pos(), `duplicate "value" field`) -+ } -+ // Unmarshal the field value into the given message. -+ if err := unmarshal(d, m); err != nil { -+ return err -+ } -+ found = true -+ -+ default: -+ if d.opts.DiscardUnknown { -+ if err := d.skipJSONValue(); err != nil { -+ return err -+ } -+ continue -+ } -+ return d.newError(tok.Pos(), "unknown field %v", tok.RawString()) -+ } -+ } -+ } -+} -+ -+// Wrapper types are encoded as JSON primitives like string, number or boolean. -+ -+func (e encoder) marshalWrapperType(m protoreflect.Message) error { -+ fd := m.Descriptor().Fields().ByNumber(genid.WrapperValue_Value_field_number) -+ val := m.Get(fd) -+ return e.marshalSingular(val, fd) -+} -+ -+func (d decoder) unmarshalWrapperType(m protoreflect.Message) error { -+ fd := m.Descriptor().Fields().ByNumber(genid.WrapperValue_Value_field_number) -+ val, err := d.unmarshalScalar(fd) -+ if err != nil { -+ return err -+ } -+ m.Set(fd, val) -+ return nil -+} -+ -+// The JSON representation for Empty is an empty JSON object. -+ -+func (e encoder) marshalEmpty(protoreflect.Message) error { -+ e.StartObject() -+ e.EndObject() -+ return nil -+} -+ -+func (d decoder) unmarshalEmpty(protoreflect.Message) error { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ if tok.Kind() != json.ObjectOpen { -+ return d.unexpectedTokenError(tok) -+ } -+ -+ for { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ switch tok.Kind() { -+ case json.ObjectClose: -+ return nil -+ -+ case json.Name: -+ if d.opts.DiscardUnknown { -+ if err := d.skipJSONValue(); err != nil { -+ return err -+ } -+ continue -+ } -+ return d.newError(tok.Pos(), "unknown field %v", tok.RawString()) -+ -+ default: -+ return d.unexpectedTokenError(tok) -+ } -+ } -+} -+ -+// The JSON representation for Struct is a JSON object that contains the encoded -+// Struct.fields map and follows the serialization rules for a map. -+ -+func (e encoder) marshalStruct(m protoreflect.Message) error { -+ fd := m.Descriptor().Fields().ByNumber(genid.Struct_Fields_field_number) -+ return e.marshalMap(m.Get(fd).Map(), fd) -+} -+ -+func (d decoder) unmarshalStruct(m protoreflect.Message) error { -+ fd := m.Descriptor().Fields().ByNumber(genid.Struct_Fields_field_number) -+ return d.unmarshalMap(m.Mutable(fd).Map(), fd) -+} -+ -+// The JSON representation for ListValue is JSON array that contains the encoded -+// ListValue.values repeated field and follows the serialization rules for a -+// repeated field. -+ -+func (e encoder) marshalListValue(m protoreflect.Message) error { -+ fd := m.Descriptor().Fields().ByNumber(genid.ListValue_Values_field_number) -+ return e.marshalList(m.Get(fd).List(), fd) -+} -+ -+func (d decoder) unmarshalListValue(m protoreflect.Message) error { -+ fd := m.Descriptor().Fields().ByNumber(genid.ListValue_Values_field_number) -+ return d.unmarshalList(m.Mutable(fd).List(), fd) -+} -+ -+// The JSON representation for a Value is dependent on the oneof field that is -+// set. Each of the field in the oneof has its own custom serialization rule. A -+// Value message needs to be a oneof field set, else it is an error. -+ -+func (e encoder) marshalKnownValue(m protoreflect.Message) error { -+ od := m.Descriptor().Oneofs().ByName(genid.Value_Kind_oneof_name) -+ fd := m.WhichOneof(od) -+ if fd == nil { -+ return errors.New("%s: none of the oneof fields is set", genid.Value_message_fullname) -+ } -+ if fd.Number() == genid.Value_NumberValue_field_number { -+ if v := m.Get(fd).Float(); math.IsNaN(v) || math.IsInf(v, 0) { -+ return errors.New("%s: invalid %v value", genid.Value_NumberValue_field_fullname, v) -+ } -+ } -+ return e.marshalSingular(m.Get(fd), fd) -+} -+ -+func (d decoder) unmarshalKnownValue(m protoreflect.Message) error { -+ tok, err := d.Peek() -+ if err != nil { -+ return err -+ } -+ -+ var fd protoreflect.FieldDescriptor -+ var val protoreflect.Value -+ switch tok.Kind() { -+ case json.Null: -+ d.Read() -+ fd = m.Descriptor().Fields().ByNumber(genid.Value_NullValue_field_number) -+ val = protoreflect.ValueOfEnum(0) -+ -+ case json.Bool: -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ fd = m.Descriptor().Fields().ByNumber(genid.Value_BoolValue_field_number) -+ val = protoreflect.ValueOfBool(tok.Bool()) -+ -+ case json.Number: -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ fd = m.Descriptor().Fields().ByNumber(genid.Value_NumberValue_field_number) -+ var ok bool -+ val, ok = unmarshalFloat(tok, 64) -+ if !ok { -+ return d.newError(tok.Pos(), "invalid %v: %v", genid.Value_message_fullname, tok.RawString()) -+ } -+ -+ case json.String: -+ // A JSON string may have been encoded from the number_value field, -+ // e.g. "NaN", "Infinity", etc. Parsing a proto double type also allows -+ // for it to be in JSON string form. Given this custom encoding spec, -+ // however, there is no way to identify that and hence a JSON string is -+ // always assigned to the string_value field, which means that certain -+ // encoding cannot be parsed back to the same field. -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ fd = m.Descriptor().Fields().ByNumber(genid.Value_StringValue_field_number) -+ val = protoreflect.ValueOfString(tok.ParsedString()) -+ -+ case json.ObjectOpen: -+ fd = m.Descriptor().Fields().ByNumber(genid.Value_StructValue_field_number) -+ val = m.NewField(fd) -+ if err := d.unmarshalStruct(val.Message()); err != nil { -+ return err -+ } -+ -+ case json.ArrayOpen: -+ fd = m.Descriptor().Fields().ByNumber(genid.Value_ListValue_field_number) -+ val = m.NewField(fd) -+ if err := d.unmarshalListValue(val.Message()); err != nil { -+ return err -+ } -+ -+ default: -+ return d.newError(tok.Pos(), "invalid %v: %v", genid.Value_message_fullname, tok.RawString()) -+ } -+ -+ m.Set(fd, val) -+ return nil -+} -+ -+// The JSON representation for a Duration is a JSON string that ends in the -+// suffix "s" (indicating seconds) and is preceded by the number of seconds, -+// with nanoseconds expressed as fractional seconds. -+// -+// Durations less than one second are represented with a 0 seconds field and a -+// positive or negative nanos field. For durations of one second or more, a -+// non-zero value for the nanos field must be of the same sign as the seconds -+// field. -+// -+// Duration.seconds must be from -315,576,000,000 to +315,576,000,000 inclusive. -+// Duration.nanos must be from -999,999,999 to +999,999,999 inclusive. -+ -+const ( -+ secondsInNanos = 999999999 -+ maxSecondsInDuration = 315576000000 -+) -+ -+func (e encoder) marshalDuration(m protoreflect.Message) error { -+ fds := m.Descriptor().Fields() -+ fdSeconds := fds.ByNumber(genid.Duration_Seconds_field_number) -+ fdNanos := fds.ByNumber(genid.Duration_Nanos_field_number) -+ -+ secsVal := m.Get(fdSeconds) -+ nanosVal := m.Get(fdNanos) -+ secs := secsVal.Int() -+ nanos := nanosVal.Int() -+ if secs < -maxSecondsInDuration || secs > maxSecondsInDuration { -+ return errors.New("%s: seconds out of range %v", genid.Duration_message_fullname, secs) -+ } -+ if nanos < -secondsInNanos || nanos > secondsInNanos { -+ return errors.New("%s: nanos out of range %v", genid.Duration_message_fullname, nanos) -+ } -+ if (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0) { -+ return errors.New("%s: signs of seconds and nanos do not match", genid.Duration_message_fullname) -+ } -+ // Generated output always contains 0, 3, 6, or 9 fractional digits, -+ // depending on required precision, followed by the suffix "s". -+ var sign string -+ if secs < 0 || nanos < 0 { -+ sign, secs, nanos = "-", -1*secs, -1*nanos -+ } -+ x := fmt.Sprintf("%s%d.%09d", sign, secs, nanos) -+ x = strings.TrimSuffix(x, "000") -+ x = strings.TrimSuffix(x, "000") -+ x = strings.TrimSuffix(x, ".000") -+ e.WriteString(x + "s") -+ return nil -+} -+ -+func (d decoder) unmarshalDuration(m protoreflect.Message) error { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ if tok.Kind() != json.String { -+ return d.unexpectedTokenError(tok) -+ } -+ -+ secs, nanos, ok := parseDuration(tok.ParsedString()) -+ if !ok { -+ return d.newError(tok.Pos(), "invalid %v value %v", genid.Duration_message_fullname, tok.RawString()) -+ } -+ // Validate seconds. No need to validate nanos because parseDuration would -+ // have covered that already. -+ if secs < -maxSecondsInDuration || secs > maxSecondsInDuration { -+ return d.newError(tok.Pos(), "%v value out of range: %v", genid.Duration_message_fullname, tok.RawString()) -+ } -+ -+ fds := m.Descriptor().Fields() -+ fdSeconds := fds.ByNumber(genid.Duration_Seconds_field_number) -+ fdNanos := fds.ByNumber(genid.Duration_Nanos_field_number) -+ -+ m.Set(fdSeconds, protoreflect.ValueOfInt64(secs)) -+ m.Set(fdNanos, protoreflect.ValueOfInt32(nanos)) -+ return nil -+} -+ -+// parseDuration parses the given input string for seconds and nanoseconds value -+// for the Duration JSON format. The format is a decimal number with a suffix -+// 's'. It can have optional plus/minus sign. There needs to be at least an -+// integer or fractional part. Fractional part is limited to 9 digits only for -+// nanoseconds precision, regardless of whether there are trailing zero digits. -+// Example values are 1s, 0.1s, 1.s, .1s, +1s, -1s, -.1s. -+func parseDuration(input string) (int64, int32, bool) { -+ b := []byte(input) -+ size := len(b) -+ if size < 2 { -+ return 0, 0, false -+ } -+ if b[size-1] != 's' { -+ return 0, 0, false -+ } -+ b = b[:size-1] -+ -+ // Read optional plus/minus symbol. -+ var neg bool -+ switch b[0] { -+ case '-': -+ neg = true -+ b = b[1:] -+ case '+': -+ b = b[1:] -+ } -+ if len(b) == 0 { -+ return 0, 0, false -+ } -+ -+ // Read the integer part. -+ var intp []byte -+ switch { -+ case b[0] == '0': -+ b = b[1:] -+ -+ case '1' <= b[0] && b[0] <= '9': -+ intp = b[0:] -+ b = b[1:] -+ n := 1 -+ for len(b) > 0 && '0' <= b[0] && b[0] <= '9' { -+ n++ -+ b = b[1:] -+ } -+ intp = intp[:n] -+ -+ case b[0] == '.': -+ // Continue below. -+ -+ default: -+ return 0, 0, false -+ } -+ -+ hasFrac := false -+ var frac [9]byte -+ if len(b) > 0 { -+ if b[0] != '.' { -+ return 0, 0, false -+ } -+ // Read the fractional part. -+ b = b[1:] -+ n := 0 -+ for len(b) > 0 && n < 9 && '0' <= b[0] && b[0] <= '9' { -+ frac[n] = b[0] -+ n++ -+ b = b[1:] -+ } -+ // It is not valid if there are more bytes left. -+ if len(b) > 0 { -+ return 0, 0, false -+ } -+ // Pad fractional part with 0s. -+ for i := n; i < 9; i++ { -+ frac[i] = '0' -+ } -+ hasFrac = true -+ } -+ -+ var secs int64 -+ if len(intp) > 0 { -+ var err error -+ secs, err = strconv.ParseInt(string(intp), 10, 64) -+ if err != nil { -+ return 0, 0, false -+ } -+ } -+ -+ var nanos int64 -+ if hasFrac { -+ nanob := bytes.TrimLeft(frac[:], "0") -+ if len(nanob) > 0 { -+ var err error -+ nanos, err = strconv.ParseInt(string(nanob), 10, 32) -+ if err != nil { -+ return 0, 0, false -+ } -+ } -+ } -+ -+ if neg { -+ if secs > 0 { -+ secs = -secs -+ } -+ if nanos > 0 { -+ nanos = -nanos -+ } -+ } -+ return secs, int32(nanos), true -+} -+ -+// The JSON representation for a Timestamp is a JSON string in the RFC 3339 -+// format, i.e. "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where -+// {year} is always expressed using four digits while {month}, {day}, {hour}, -+// {min}, and {sec} are zero-padded to two digits each. The fractional seconds, -+// which can go up to 9 digits, up to 1 nanosecond resolution, is optional. The -+// "Z" suffix indicates the timezone ("UTC"); the timezone is required. Encoding -+// should always use UTC (as indicated by "Z") and a decoder should be able to -+// accept both UTC and other timezones (as indicated by an offset). -+// -+// Timestamp.seconds must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z -+// inclusive. -+// Timestamp.nanos must be from 0 to 999,999,999 inclusive. -+ -+const ( -+ maxTimestampSeconds = 253402300799 -+ minTimestampSeconds = -62135596800 -+) -+ -+func (e encoder) marshalTimestamp(m protoreflect.Message) error { -+ fds := m.Descriptor().Fields() -+ fdSeconds := fds.ByNumber(genid.Timestamp_Seconds_field_number) -+ fdNanos := fds.ByNumber(genid.Timestamp_Nanos_field_number) -+ -+ secsVal := m.Get(fdSeconds) -+ nanosVal := m.Get(fdNanos) -+ secs := secsVal.Int() -+ nanos := nanosVal.Int() -+ if secs < minTimestampSeconds || secs > maxTimestampSeconds { -+ return errors.New("%s: seconds out of range %v", genid.Timestamp_message_fullname, secs) -+ } -+ if nanos < 0 || nanos > secondsInNanos { -+ return errors.New("%s: nanos out of range %v", genid.Timestamp_message_fullname, nanos) -+ } -+ // Uses RFC 3339, where generated output will be Z-normalized and uses 0, 3, -+ // 6 or 9 fractional digits. -+ t := time.Unix(secs, nanos).UTC() -+ x := t.Format("2006-01-02T15:04:05.000000000") -+ x = strings.TrimSuffix(x, "000") -+ x = strings.TrimSuffix(x, "000") -+ x = strings.TrimSuffix(x, ".000") -+ e.WriteString(x + "Z") -+ return nil -+} -+ -+func (d decoder) unmarshalTimestamp(m protoreflect.Message) error { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ if tok.Kind() != json.String { -+ return d.unexpectedTokenError(tok) -+ } -+ -+ s := tok.ParsedString() -+ t, err := time.Parse(time.RFC3339Nano, s) -+ if err != nil { -+ return d.newError(tok.Pos(), "invalid %v value %v", genid.Timestamp_message_fullname, tok.RawString()) -+ } -+ // Validate seconds. -+ secs := t.Unix() -+ if secs < minTimestampSeconds || secs > maxTimestampSeconds { -+ return d.newError(tok.Pos(), "%v value out of range: %v", genid.Timestamp_message_fullname, tok.RawString()) -+ } -+ // Validate subseconds. -+ i := strings.LastIndexByte(s, '.') // start of subsecond field -+ j := strings.LastIndexAny(s, "Z-+") // start of timezone field -+ if i >= 0 && j >= i && j-i > len(".999999999") { -+ return d.newError(tok.Pos(), "invalid %v value %v", genid.Timestamp_message_fullname, tok.RawString()) -+ } -+ -+ fds := m.Descriptor().Fields() -+ fdSeconds := fds.ByNumber(genid.Timestamp_Seconds_field_number) -+ fdNanos := fds.ByNumber(genid.Timestamp_Nanos_field_number) -+ -+ m.Set(fdSeconds, protoreflect.ValueOfInt64(secs)) -+ m.Set(fdNanos, protoreflect.ValueOfInt32(int32(t.Nanosecond()))) -+ return nil -+} -+ -+// The JSON representation for a FieldMask is a JSON string where paths are -+// separated by a comma. Fields name in each path are converted to/from -+// lower-camel naming conventions. Encoding should fail if the path name would -+// end up differently after a round-trip. -+ -+func (e encoder) marshalFieldMask(m protoreflect.Message) error { -+ fd := m.Descriptor().Fields().ByNumber(genid.FieldMask_Paths_field_number) -+ list := m.Get(fd).List() -+ paths := make([]string, 0, list.Len()) -+ -+ for i := 0; i < list.Len(); i++ { -+ s := list.Get(i).String() -+ if !protoreflect.FullName(s).IsValid() { -+ return errors.New("%s contains invalid path: %q", genid.FieldMask_Paths_field_fullname, s) -+ } -+ // Return error if conversion to camelCase is not reversible. -+ cc := strs.JSONCamelCase(s) -+ if s != strs.JSONSnakeCase(cc) { -+ return errors.New("%s contains irreversible value %q", genid.FieldMask_Paths_field_fullname, s) -+ } -+ paths = append(paths, cc) -+ } -+ -+ e.WriteString(strings.Join(paths, ",")) -+ return nil -+} -+ -+func (d decoder) unmarshalFieldMask(m protoreflect.Message) error { -+ tok, err := d.Read() -+ if err != nil { -+ return err -+ } -+ if tok.Kind() != json.String { -+ return d.unexpectedTokenError(tok) -+ } -+ str := strings.TrimSpace(tok.ParsedString()) -+ if str == "" { -+ return nil -+ } -+ paths := strings.Split(str, ",") -+ -+ fd := m.Descriptor().Fields().ByNumber(genid.FieldMask_Paths_field_number) -+ list := m.Mutable(fd).List() -+ -+ for _, s0 := range paths { -+ s := strs.JSONSnakeCase(s0) -+ if strings.Contains(s0, "_") || !protoreflect.FullName(s).IsValid() { -+ return d.newError(tok.Pos(), "%v contains invalid path: %q", genid.FieldMask_Paths_field_fullname, s0) -+ } -+ list.Append(protoreflect.ValueOfString(s)) -+ } -+ return nil -+} -diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/decode.go b/vendor/google.golang.org/protobuf/encoding/prototext/decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/doc.go b/vendor/google.golang.org/protobuf/encoding/prototext/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/encode.go b/vendor/google.golang.org/protobuf/encoding/prototext/encode.go -old mode 100644 -new mode 100755 -index ebf6c65..722a7b4 ---- a/vendor/google.golang.org/protobuf/encoding/prototext/encode.go -+++ b/vendor/google.golang.org/protobuf/encoding/prototext/encode.go -@@ -101,13 +101,19 @@ func (o MarshalOptions) Format(m proto.Message) string { - // MarshalOptions object. Do not depend on the output being stable. It may - // change over time across different versions of the program. - func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { -- return o.marshal(m) -+ return o.marshal(nil, m) -+} -+ -+// MarshalAppend appends the textproto format encoding of m to b, -+// returning the result. -+func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) { -+ return o.marshal(b, m) - } - - // marshal is a centralized function that all marshal operations go through. - // For profiling purposes, avoid changing the name of this function or - // introducing other code paths for marshal that do not go through this. --func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { -+func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) { - var delims = [2]byte{'{', '}'} - - if o.Multiline && o.Indent == "" { -@@ -117,7 +123,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { - o.Resolver = protoregistry.GlobalTypes - } - -- internalEnc, err := text.NewEncoder(o.Indent, delims, o.EmitASCII) -+ internalEnc, err := text.NewEncoder(b, o.Indent, delims, o.EmitASCII) - if err != nil { - return nil, err - } -@@ -125,7 +131,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { - // Treat nil message interface as an empty message, - // in which case there is nothing to output. - if m == nil { -- return []byte{}, nil -+ return b, nil - } - - enc := encoder{internalEnc, o} -diff --git a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go -old mode 100644 -new mode 100755 -index ce57f57..f4b4686 ---- a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go -+++ b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go -@@ -3,7 +3,7 @@ - // license that can be found in the LICENSE file. - - // Package protowire parses and formats the raw wire encoding. --// See https://developers.google.com/protocol-buffers/docs/encoding. -+// See https://protobuf.dev/programming-guides/encoding. - // - // For marshaling and unmarshaling entire protobuf messages, - // use the "google.golang.org/protobuf/proto" package instead. -@@ -29,12 +29,8 @@ const ( - ) - - // IsValid reports whether the field number is semantically valid. --// --// Note that while numbers within the reserved range are semantically invalid, --// they are syntactically valid in the wire format. --// Implementations may treat records with reserved field numbers as unknown. - func (n Number) IsValid() bool { -- return MinValidNumber <= n && n < FirstReservedNumber || LastReservedNumber < n && n <= MaxValidNumber -+ return MinValidNumber <= n && n <= MaxValidNumber - } - - // Type represents the wire type. -diff --git a/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go b/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/descopts/options.go b/vendor/google.golang.org/protobuf/internal/descopts/options.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/detrand/rand.go b/vendor/google.golang.org/protobuf/internal/detrand/rand.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go b/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go -new file mode 100755 -index 0000000..d043a6e ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go -@@ -0,0 +1,340 @@ -+// Copyright 2018 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package json -+ -+import ( -+ "bytes" -+ "fmt" -+ "io" -+ "regexp" -+ "unicode/utf8" -+ -+ "google.golang.org/protobuf/internal/errors" -+) -+ -+// call specifies which Decoder method was invoked. -+type call uint8 -+ -+const ( -+ readCall call = iota -+ peekCall -+) -+ -+const unexpectedFmt = "unexpected token %s" -+ -+// ErrUnexpectedEOF means that EOF was encountered in the middle of the input. -+var ErrUnexpectedEOF = errors.New("%v", io.ErrUnexpectedEOF) -+ -+// Decoder is a token-based JSON decoder. -+type Decoder struct { -+ // lastCall is last method called, either readCall or peekCall. -+ // Initial value is readCall. -+ lastCall call -+ -+ // lastToken contains the last read token. -+ lastToken Token -+ -+ // lastErr contains the last read error. -+ lastErr error -+ -+ // openStack is a stack containing ObjectOpen and ArrayOpen values. The -+ // top of stack represents the object or the array the current value is -+ // directly located in. -+ openStack []Kind -+ -+ // orig is used in reporting line and column. -+ orig []byte -+ // in contains the unconsumed input. -+ in []byte -+} -+ -+// NewDecoder returns a Decoder to read the given []byte. -+func NewDecoder(b []byte) *Decoder { -+ return &Decoder{orig: b, in: b} -+} -+ -+// Peek looks ahead and returns the next token kind without advancing a read. -+func (d *Decoder) Peek() (Token, error) { -+ defer func() { d.lastCall = peekCall }() -+ if d.lastCall == readCall { -+ d.lastToken, d.lastErr = d.Read() -+ } -+ return d.lastToken, d.lastErr -+} -+ -+// Read returns the next JSON token. -+// It will return an error if there is no valid token. -+func (d *Decoder) Read() (Token, error) { -+ const scalar = Null | Bool | Number | String -+ -+ defer func() { d.lastCall = readCall }() -+ if d.lastCall == peekCall { -+ return d.lastToken, d.lastErr -+ } -+ -+ tok, err := d.parseNext() -+ if err != nil { -+ return Token{}, err -+ } -+ -+ switch tok.kind { -+ case EOF: -+ if len(d.openStack) != 0 || -+ d.lastToken.kind&scalar|ObjectClose|ArrayClose == 0 { -+ return Token{}, ErrUnexpectedEOF -+ } -+ -+ case Null: -+ if !d.isValueNext() { -+ return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) -+ } -+ -+ case Bool, Number: -+ if !d.isValueNext() { -+ return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) -+ } -+ -+ case String: -+ if d.isValueNext() { -+ break -+ } -+ // This string token should only be for a field name. -+ if d.lastToken.kind&(ObjectOpen|comma) == 0 { -+ return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) -+ } -+ if len(d.in) == 0 { -+ return Token{}, ErrUnexpectedEOF -+ } -+ if c := d.in[0]; c != ':' { -+ return Token{}, d.newSyntaxError(d.currPos(), `unexpected character %s, missing ":" after field name`, string(c)) -+ } -+ tok.kind = Name -+ d.consume(1) -+ -+ case ObjectOpen, ArrayOpen: -+ if !d.isValueNext() { -+ return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) -+ } -+ d.openStack = append(d.openStack, tok.kind) -+ -+ case ObjectClose: -+ if len(d.openStack) == 0 || -+ d.lastToken.kind == comma || -+ d.openStack[len(d.openStack)-1] != ObjectOpen { -+ return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) -+ } -+ d.openStack = d.openStack[:len(d.openStack)-1] -+ -+ case ArrayClose: -+ if len(d.openStack) == 0 || -+ d.lastToken.kind == comma || -+ d.openStack[len(d.openStack)-1] != ArrayOpen { -+ return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) -+ } -+ d.openStack = d.openStack[:len(d.openStack)-1] -+ -+ case comma: -+ if len(d.openStack) == 0 || -+ d.lastToken.kind&(scalar|ObjectClose|ArrayClose) == 0 { -+ return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) -+ } -+ } -+ -+ // Update d.lastToken only after validating token to be in the right sequence. -+ d.lastToken = tok -+ -+ if d.lastToken.kind == comma { -+ return d.Read() -+ } -+ return tok, nil -+} -+ -+// Any sequence that looks like a non-delimiter (for error reporting). -+var errRegexp = regexp.MustCompile(`^([-+._a-zA-Z0-9]{1,32}|.)`) -+ -+// parseNext parses for the next JSON token. It returns a Token object for -+// different types, except for Name. It does not handle whether the next token -+// is in a valid sequence or not. -+func (d *Decoder) parseNext() (Token, error) { -+ // Trim leading spaces. -+ d.consume(0) -+ -+ in := d.in -+ if len(in) == 0 { -+ return d.consumeToken(EOF, 0), nil -+ } -+ -+ switch in[0] { -+ case 'n': -+ if n := matchWithDelim("null", in); n != 0 { -+ return d.consumeToken(Null, n), nil -+ } -+ -+ case 't': -+ if n := matchWithDelim("true", in); n != 0 { -+ return d.consumeBoolToken(true, n), nil -+ } -+ -+ case 'f': -+ if n := matchWithDelim("false", in); n != 0 { -+ return d.consumeBoolToken(false, n), nil -+ } -+ -+ case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': -+ if n, ok := parseNumber(in); ok { -+ return d.consumeToken(Number, n), nil -+ } -+ -+ case '"': -+ s, n, err := d.parseString(in) -+ if err != nil { -+ return Token{}, err -+ } -+ return d.consumeStringToken(s, n), nil -+ -+ case '{': -+ return d.consumeToken(ObjectOpen, 1), nil -+ -+ case '}': -+ return d.consumeToken(ObjectClose, 1), nil -+ -+ case '[': -+ return d.consumeToken(ArrayOpen, 1), nil -+ -+ case ']': -+ return d.consumeToken(ArrayClose, 1), nil -+ -+ case ',': -+ return d.consumeToken(comma, 1), nil -+ } -+ return Token{}, d.newSyntaxError(d.currPos(), "invalid value %s", errRegexp.Find(in)) -+} -+ -+// newSyntaxError returns an error with line and column information useful for -+// syntax errors. -+func (d *Decoder) newSyntaxError(pos int, f string, x ...interface{}) error { -+ e := errors.New(f, x...) -+ line, column := d.Position(pos) -+ return errors.New("syntax error (line %d:%d): %v", line, column, e) -+} -+ -+// Position returns line and column number of given index of the original input. -+// It will panic if index is out of range. -+func (d *Decoder) Position(idx int) (line int, column int) { -+ b := d.orig[:idx] -+ line = bytes.Count(b, []byte("\n")) + 1 -+ if i := bytes.LastIndexByte(b, '\n'); i >= 0 { -+ b = b[i+1:] -+ } -+ column = utf8.RuneCount(b) + 1 // ignore multi-rune characters -+ return line, column -+} -+ -+// currPos returns the current index position of d.in from d.orig. -+func (d *Decoder) currPos() int { -+ return len(d.orig) - len(d.in) -+} -+ -+// matchWithDelim matches s with the input b and verifies that the match -+// terminates with a delimiter of some form (e.g., r"[^-+_.a-zA-Z0-9]"). -+// As a special case, EOF is considered a delimiter. It returns the length of s -+// if there is a match, else 0. -+func matchWithDelim(s string, b []byte) int { -+ if !bytes.HasPrefix(b, []byte(s)) { -+ return 0 -+ } -+ -+ n := len(s) -+ if n < len(b) && isNotDelim(b[n]) { -+ return 0 -+ } -+ return n -+} -+ -+// isNotDelim returns true if given byte is a not delimiter character. -+func isNotDelim(c byte) bool { -+ return (c == '-' || c == '+' || c == '.' || c == '_' || -+ ('a' <= c && c <= 'z') || -+ ('A' <= c && c <= 'Z') || -+ ('0' <= c && c <= '9')) -+} -+ -+// consume consumes n bytes of input and any subsequent whitespace. -+func (d *Decoder) consume(n int) { -+ d.in = d.in[n:] -+ for len(d.in) > 0 { -+ switch d.in[0] { -+ case ' ', '\n', '\r', '\t': -+ d.in = d.in[1:] -+ default: -+ return -+ } -+ } -+} -+ -+// isValueNext returns true if next type should be a JSON value: Null, -+// Number, String or Bool. -+func (d *Decoder) isValueNext() bool { -+ if len(d.openStack) == 0 { -+ return d.lastToken.kind == 0 -+ } -+ -+ start := d.openStack[len(d.openStack)-1] -+ switch start { -+ case ObjectOpen: -+ return d.lastToken.kind&Name != 0 -+ case ArrayOpen: -+ return d.lastToken.kind&(ArrayOpen|comma) != 0 -+ } -+ panic(fmt.Sprintf( -+ "unreachable logic in Decoder.isValueNext, lastToken.kind: %v, openStack: %v", -+ d.lastToken.kind, start)) -+} -+ -+// consumeToken constructs a Token for given Kind with raw value derived from -+// current d.in and given size, and consumes the given size-length of it. -+func (d *Decoder) consumeToken(kind Kind, size int) Token { -+ tok := Token{ -+ kind: kind, -+ raw: d.in[:size], -+ pos: len(d.orig) - len(d.in), -+ } -+ d.consume(size) -+ return tok -+} -+ -+// consumeBoolToken constructs a Token for a Bool kind with raw value derived from -+// current d.in and given size. -+func (d *Decoder) consumeBoolToken(b bool, size int) Token { -+ tok := Token{ -+ kind: Bool, -+ raw: d.in[:size], -+ pos: len(d.orig) - len(d.in), -+ boo: b, -+ } -+ d.consume(size) -+ return tok -+} -+ -+// consumeStringToken constructs a Token for a String kind with raw value derived -+// from current d.in and given size. -+func (d *Decoder) consumeStringToken(s string, size int) Token { -+ tok := Token{ -+ kind: String, -+ raw: d.in[:size], -+ pos: len(d.orig) - len(d.in), -+ str: s, -+ } -+ d.consume(size) -+ return tok -+} -+ -+// Clone returns a copy of the Decoder for use in reading ahead the next JSON -+// object, array or other values without affecting current Decoder. -+func (d *Decoder) Clone() *Decoder { -+ ret := *d -+ ret.openStack = append([]Kind(nil), ret.openStack...) -+ return &ret -+} -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go -new file mode 100755 -index 0000000..2999d71 ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go -@@ -0,0 +1,254 @@ -+// Copyright 2018 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package json -+ -+import ( -+ "bytes" -+ "strconv" -+) -+ -+// parseNumber reads the given []byte for a valid JSON number. If it is valid, -+// it returns the number of bytes. Parsing logic follows the definition in -+// https://tools.ietf.org/html/rfc7159#section-6, and is based off -+// encoding/json.isValidNumber function. -+func parseNumber(input []byte) (int, bool) { -+ var n int -+ -+ s := input -+ if len(s) == 0 { -+ return 0, false -+ } -+ -+ // Optional - -+ if s[0] == '-' { -+ s = s[1:] -+ n++ -+ if len(s) == 0 { -+ return 0, false -+ } -+ } -+ -+ // Digits -+ switch { -+ case s[0] == '0': -+ s = s[1:] -+ n++ -+ -+ case '1' <= s[0] && s[0] <= '9': -+ s = s[1:] -+ n++ -+ for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { -+ s = s[1:] -+ n++ -+ } -+ -+ default: -+ return 0, false -+ } -+ -+ // . followed by 1 or more digits. -+ if len(s) >= 2 && s[0] == '.' && '0' <= s[1] && s[1] <= '9' { -+ s = s[2:] -+ n += 2 -+ for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { -+ s = s[1:] -+ n++ -+ } -+ } -+ -+ // e or E followed by an optional - or + and -+ // 1 or more digits. -+ if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') { -+ s = s[1:] -+ n++ -+ if s[0] == '+' || s[0] == '-' { -+ s = s[1:] -+ n++ -+ if len(s) == 0 { -+ return 0, false -+ } -+ } -+ for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { -+ s = s[1:] -+ n++ -+ } -+ } -+ -+ // Check that next byte is a delimiter or it is at the end. -+ if n < len(input) && isNotDelim(input[n]) { -+ return 0, false -+ } -+ -+ return n, true -+} -+ -+// numberParts is the result of parsing out a valid JSON number. It contains -+// the parts of a number. The parts are used for integer conversion. -+type numberParts struct { -+ neg bool -+ intp []byte -+ frac []byte -+ exp []byte -+} -+ -+// parseNumber constructs numberParts from given []byte. The logic here is -+// similar to consumeNumber above with the difference of having to construct -+// numberParts. The slice fields in numberParts are subslices of the input. -+func parseNumberParts(input []byte) (numberParts, bool) { -+ var neg bool -+ var intp []byte -+ var frac []byte -+ var exp []byte -+ -+ s := input -+ if len(s) == 0 { -+ return numberParts{}, false -+ } -+ -+ // Optional - -+ if s[0] == '-' { -+ neg = true -+ s = s[1:] -+ if len(s) == 0 { -+ return numberParts{}, false -+ } -+ } -+ -+ // Digits -+ switch { -+ case s[0] == '0': -+ // Skip first 0 and no need to store. -+ s = s[1:] -+ -+ case '1' <= s[0] && s[0] <= '9': -+ intp = s -+ n := 1 -+ s = s[1:] -+ for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { -+ s = s[1:] -+ n++ -+ } -+ intp = intp[:n] -+ -+ default: -+ return numberParts{}, false -+ } -+ -+ // . followed by 1 or more digits. -+ if len(s) >= 2 && s[0] == '.' && '0' <= s[1] && s[1] <= '9' { -+ frac = s[1:] -+ n := 1 -+ s = s[2:] -+ for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { -+ s = s[1:] -+ n++ -+ } -+ frac = frac[:n] -+ } -+ -+ // e or E followed by an optional - or + and -+ // 1 or more digits. -+ if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') { -+ s = s[1:] -+ exp = s -+ n := 0 -+ if s[0] == '+' || s[0] == '-' { -+ s = s[1:] -+ n++ -+ if len(s) == 0 { -+ return numberParts{}, false -+ } -+ } -+ for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { -+ s = s[1:] -+ n++ -+ } -+ exp = exp[:n] -+ } -+ -+ return numberParts{ -+ neg: neg, -+ intp: intp, -+ frac: bytes.TrimRight(frac, "0"), // Remove unnecessary 0s to the right. -+ exp: exp, -+ }, true -+} -+ -+// normalizeToIntString returns an integer string in normal form without the -+// E-notation for given numberParts. It will return false if it is not an -+// integer or if the exponent exceeds than max/min int value. -+func normalizeToIntString(n numberParts) (string, bool) { -+ intpSize := len(n.intp) -+ fracSize := len(n.frac) -+ -+ if intpSize == 0 && fracSize == 0 { -+ return "0", true -+ } -+ -+ var exp int -+ if len(n.exp) > 0 { -+ i, err := strconv.ParseInt(string(n.exp), 10, 32) -+ if err != nil { -+ return "", false -+ } -+ exp = int(i) -+ } -+ -+ var num []byte -+ if exp >= 0 { -+ // For positive E, shift fraction digits into integer part and also pad -+ // with zeroes as needed. -+ -+ // If there are more digits in fraction than the E value, then the -+ // number is not an integer. -+ if fracSize > exp { -+ return "", false -+ } -+ -+ // Make sure resulting digits are within max value limit to avoid -+ // unnecessarily constructing a large byte slice that may simply fail -+ // later on. -+ const maxDigits = 20 // Max uint64 value has 20 decimal digits. -+ if intpSize+exp > maxDigits { -+ return "", false -+ } -+ -+ // Set cap to make a copy of integer part when appended. -+ num = n.intp[:len(n.intp):len(n.intp)] -+ num = append(num, n.frac...) -+ for i := 0; i < exp-fracSize; i++ { -+ num = append(num, '0') -+ } -+ } else { -+ // For negative E, shift digits in integer part out. -+ -+ // If there are fractions, then the number is not an integer. -+ if fracSize > 0 { -+ return "", false -+ } -+ -+ // index is where the decimal point will be after adjusting for negative -+ // exponent. -+ index := intpSize + exp -+ if index < 0 { -+ return "", false -+ } -+ -+ num = n.intp -+ // If any of the digits being shifted to the right of the decimal point -+ // is non-zero, then the number is not an integer. -+ for i := index; i < intpSize; i++ { -+ if num[i] != '0' { -+ return "", false -+ } -+ } -+ num = num[:index] -+ } -+ -+ if n.neg { -+ return "-" + string(num), true -+ } -+ return string(num), true -+} -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go -new file mode 100755 -index 0000000..f7fea7d ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go -@@ -0,0 +1,91 @@ -+// Copyright 2018 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package json -+ -+import ( -+ "strconv" -+ "unicode" -+ "unicode/utf16" -+ "unicode/utf8" -+ -+ "google.golang.org/protobuf/internal/strs" -+) -+ -+func (d *Decoder) parseString(in []byte) (string, int, error) { -+ in0 := in -+ if len(in) == 0 { -+ return "", 0, ErrUnexpectedEOF -+ } -+ if in[0] != '"' { -+ return "", 0, d.newSyntaxError(d.currPos(), "invalid character %q at start of string", in[0]) -+ } -+ in = in[1:] -+ i := indexNeedEscapeInBytes(in) -+ in, out := in[i:], in[:i:i] // set cap to prevent mutations -+ for len(in) > 0 { -+ switch r, n := utf8.DecodeRune(in); { -+ case r == utf8.RuneError && n == 1: -+ return "", 0, d.newSyntaxError(d.currPos(), "invalid UTF-8 in string") -+ case r < ' ': -+ return "", 0, d.newSyntaxError(d.currPos(), "invalid character %q in string", r) -+ case r == '"': -+ in = in[1:] -+ n := len(in0) - len(in) -+ return string(out), n, nil -+ case r == '\\': -+ if len(in) < 2 { -+ return "", 0, ErrUnexpectedEOF -+ } -+ switch r := in[1]; r { -+ case '"', '\\', '/': -+ in, out = in[2:], append(out, r) -+ case 'b': -+ in, out = in[2:], append(out, '\b') -+ case 'f': -+ in, out = in[2:], append(out, '\f') -+ case 'n': -+ in, out = in[2:], append(out, '\n') -+ case 'r': -+ in, out = in[2:], append(out, '\r') -+ case 't': -+ in, out = in[2:], append(out, '\t') -+ case 'u': -+ if len(in) < 6 { -+ return "", 0, ErrUnexpectedEOF -+ } -+ v, err := strconv.ParseUint(string(in[2:6]), 16, 16) -+ if err != nil { -+ return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:6]) -+ } -+ in = in[6:] -+ -+ r := rune(v) -+ if utf16.IsSurrogate(r) { -+ if len(in) < 6 { -+ return "", 0, ErrUnexpectedEOF -+ } -+ v, err := strconv.ParseUint(string(in[2:6]), 16, 16) -+ r = utf16.DecodeRune(r, rune(v)) -+ if in[0] != '\\' || in[1] != 'u' || -+ r == unicode.ReplacementChar || err != nil { -+ return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:6]) -+ } -+ in = in[6:] -+ } -+ out = append(out, string(r)...) -+ default: -+ return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:2]) -+ } -+ default: -+ i := indexNeedEscapeInBytes(in[n:]) -+ in, out = in[n+i:], append(out, in[:n+i]...) -+ } -+ } -+ return "", 0, ErrUnexpectedEOF -+} -+ -+// indexNeedEscapeInBytes returns the index of the character that needs -+// escaping. If no characters need escaping, this returns the input length. -+func indexNeedEscapeInBytes(b []byte) int { return indexNeedEscapeInString(strs.UnsafeString(b)) } -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go -new file mode 100755 -index 0000000..50578d6 ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go -@@ -0,0 +1,192 @@ -+// Copyright 2019 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package json -+ -+import ( -+ "bytes" -+ "fmt" -+ "strconv" -+) -+ -+// Kind represents a token kind expressible in the JSON format. -+type Kind uint16 -+ -+const ( -+ Invalid Kind = (1 << iota) / 2 -+ EOF -+ Null -+ Bool -+ Number -+ String -+ Name -+ ObjectOpen -+ ObjectClose -+ ArrayOpen -+ ArrayClose -+ -+ // comma is only for parsing in between tokens and -+ // does not need to be exported. -+ comma -+) -+ -+func (k Kind) String() string { -+ switch k { -+ case EOF: -+ return "eof" -+ case Null: -+ return "null" -+ case Bool: -+ return "bool" -+ case Number: -+ return "number" -+ case String: -+ return "string" -+ case ObjectOpen: -+ return "{" -+ case ObjectClose: -+ return "}" -+ case Name: -+ return "name" -+ case ArrayOpen: -+ return "[" -+ case ArrayClose: -+ return "]" -+ case comma: -+ return "," -+ } -+ return "" -+} -+ -+// Token provides a parsed token kind and value. -+// -+// Values are provided by the difference accessor methods. The accessor methods -+// Name, Bool, and ParsedString will panic if called on the wrong kind. There -+// are different accessor methods for the Number kind for converting to the -+// appropriate Go numeric type and those methods have the ok return value. -+type Token struct { -+ // Token kind. -+ kind Kind -+ // pos provides the position of the token in the original input. -+ pos int -+ // raw bytes of the serialized token. -+ // This is a subslice into the original input. -+ raw []byte -+ // boo is parsed boolean value. -+ boo bool -+ // str is parsed string value. -+ str string -+} -+ -+// Kind returns the token kind. -+func (t Token) Kind() Kind { -+ return t.kind -+} -+ -+// RawString returns the read value in string. -+func (t Token) RawString() string { -+ return string(t.raw) -+} -+ -+// Pos returns the token position from the input. -+func (t Token) Pos() int { -+ return t.pos -+} -+ -+// Name returns the object name if token is Name, else it panics. -+func (t Token) Name() string { -+ if t.kind == Name { -+ return t.str -+ } -+ panic(fmt.Sprintf("Token is not a Name: %v", t.RawString())) -+} -+ -+// Bool returns the bool value if token kind is Bool, else it panics. -+func (t Token) Bool() bool { -+ if t.kind == Bool { -+ return t.boo -+ } -+ panic(fmt.Sprintf("Token is not a Bool: %v", t.RawString())) -+} -+ -+// ParsedString returns the string value for a JSON string token or the read -+// value in string if token is not a string. -+func (t Token) ParsedString() string { -+ if t.kind == String { -+ return t.str -+ } -+ panic(fmt.Sprintf("Token is not a String: %v", t.RawString())) -+} -+ -+// Float returns the floating-point number if token kind is Number. -+// -+// The floating-point precision is specified by the bitSize parameter: 32 for -+// float32 or 64 for float64. If bitSize=32, the result still has type float64, -+// but it will be convertible to float32 without changing its value. It will -+// return false if the number exceeds the floating point limits for given -+// bitSize. -+func (t Token) Float(bitSize int) (float64, bool) { -+ if t.kind != Number { -+ return 0, false -+ } -+ f, err := strconv.ParseFloat(t.RawString(), bitSize) -+ if err != nil { -+ return 0, false -+ } -+ return f, true -+} -+ -+// Int returns the signed integer number if token is Number. -+// -+// The given bitSize specifies the integer type that the result must fit into. -+// It returns false if the number is not an integer value or if the result -+// exceeds the limits for given bitSize. -+func (t Token) Int(bitSize int) (int64, bool) { -+ s, ok := t.getIntStr() -+ if !ok { -+ return 0, false -+ } -+ n, err := strconv.ParseInt(s, 10, bitSize) -+ if err != nil { -+ return 0, false -+ } -+ return n, true -+} -+ -+// Uint returns the signed integer number if token is Number. -+// -+// The given bitSize specifies the unsigned integer type that the result must -+// fit into. It returns false if the number is not an unsigned integer value -+// or if the result exceeds the limits for given bitSize. -+func (t Token) Uint(bitSize int) (uint64, bool) { -+ s, ok := t.getIntStr() -+ if !ok { -+ return 0, false -+ } -+ n, err := strconv.ParseUint(s, 10, bitSize) -+ if err != nil { -+ return 0, false -+ } -+ return n, true -+} -+ -+func (t Token) getIntStr() (string, bool) { -+ if t.kind != Number { -+ return "", false -+ } -+ parts, ok := parseNumberParts(t.raw) -+ if !ok { -+ return "", false -+ } -+ return normalizeToIntString(parts) -+} -+ -+// TokenEquals returns true if given Tokens are equal, else false. -+func TokenEquals(x, y Token) bool { -+ return x.kind == y.kind && -+ x.pos == y.pos && -+ bytes.Equal(x.raw, y.raw) && -+ x.boo == y.boo && -+ x.str == y.str -+} -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go b/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go -new file mode 100755 -index 0000000..934f2dc ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go -@@ -0,0 +1,278 @@ -+// Copyright 2018 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package json -+ -+import ( -+ "math" -+ "math/bits" -+ "strconv" -+ "strings" -+ "unicode/utf8" -+ -+ "google.golang.org/protobuf/internal/detrand" -+ "google.golang.org/protobuf/internal/errors" -+) -+ -+// kind represents an encoding type. -+type kind uint8 -+ -+const ( -+ _ kind = (1 << iota) / 2 -+ name -+ scalar -+ objectOpen -+ objectClose -+ arrayOpen -+ arrayClose -+) -+ -+// Encoder provides methods to write out JSON constructs and values. The user is -+// responsible for producing valid sequences of JSON constructs and values. -+type Encoder struct { -+ indent string -+ lastKind kind -+ indents []byte -+ out []byte -+} -+ -+// NewEncoder returns an Encoder. -+// -+// If indent is a non-empty string, it causes every entry for an Array or Object -+// to be preceded by the indent and trailed by a newline. -+func NewEncoder(buf []byte, indent string) (*Encoder, error) { -+ e := &Encoder{ -+ out: buf, -+ } -+ if len(indent) > 0 { -+ if strings.Trim(indent, " \t") != "" { -+ return nil, errors.New("indent may only be composed of space or tab characters") -+ } -+ e.indent = indent -+ } -+ return e, nil -+} -+ -+// Bytes returns the content of the written bytes. -+func (e *Encoder) Bytes() []byte { -+ return e.out -+} -+ -+// WriteNull writes out the null value. -+func (e *Encoder) WriteNull() { -+ e.prepareNext(scalar) -+ e.out = append(e.out, "null"...) -+} -+ -+// WriteBool writes out the given boolean value. -+func (e *Encoder) WriteBool(b bool) { -+ e.prepareNext(scalar) -+ if b { -+ e.out = append(e.out, "true"...) -+ } else { -+ e.out = append(e.out, "false"...) -+ } -+} -+ -+// WriteString writes out the given string in JSON string value. Returns error -+// if input string contains invalid UTF-8. -+func (e *Encoder) WriteString(s string) error { -+ e.prepareNext(scalar) -+ var err error -+ if e.out, err = appendString(e.out, s); err != nil { -+ return err -+ } -+ return nil -+} -+ -+// Sentinel error used for indicating invalid UTF-8. -+var errInvalidUTF8 = errors.New("invalid UTF-8") -+ -+func appendString(out []byte, in string) ([]byte, error) { -+ out = append(out, '"') -+ i := indexNeedEscapeInString(in) -+ in, out = in[i:], append(out, in[:i]...) -+ for len(in) > 0 { -+ switch r, n := utf8.DecodeRuneInString(in); { -+ case r == utf8.RuneError && n == 1: -+ return out, errInvalidUTF8 -+ case r < ' ' || r == '"' || r == '\\': -+ out = append(out, '\\') -+ switch r { -+ case '"', '\\': -+ out = append(out, byte(r)) -+ case '\b': -+ out = append(out, 'b') -+ case '\f': -+ out = append(out, 'f') -+ case '\n': -+ out = append(out, 'n') -+ case '\r': -+ out = append(out, 'r') -+ case '\t': -+ out = append(out, 't') -+ default: -+ out = append(out, 'u') -+ out = append(out, "0000"[1+(bits.Len32(uint32(r))-1)/4:]...) -+ out = strconv.AppendUint(out, uint64(r), 16) -+ } -+ in = in[n:] -+ default: -+ i := indexNeedEscapeInString(in[n:]) -+ in, out = in[n+i:], append(out, in[:n+i]...) -+ } -+ } -+ out = append(out, '"') -+ return out, nil -+} -+ -+// indexNeedEscapeInString returns the index of the character that needs -+// escaping. If no characters need escaping, this returns the input length. -+func indexNeedEscapeInString(s string) int { -+ for i, r := range s { -+ if r < ' ' || r == '\\' || r == '"' || r == utf8.RuneError { -+ return i -+ } -+ } -+ return len(s) -+} -+ -+// WriteFloat writes out the given float and bitSize in JSON number value. -+func (e *Encoder) WriteFloat(n float64, bitSize int) { -+ e.prepareNext(scalar) -+ e.out = appendFloat(e.out, n, bitSize) -+} -+ -+// appendFloat formats given float in bitSize, and appends to the given []byte. -+func appendFloat(out []byte, n float64, bitSize int) []byte { -+ switch { -+ case math.IsNaN(n): -+ return append(out, `"NaN"`...) -+ case math.IsInf(n, +1): -+ return append(out, `"Infinity"`...) -+ case math.IsInf(n, -1): -+ return append(out, `"-Infinity"`...) -+ } -+ -+ // JSON number formatting logic based on encoding/json. -+ // See floatEncoder.encode for reference. -+ fmt := byte('f') -+ if abs := math.Abs(n); abs != 0 { -+ if bitSize == 64 && (abs < 1e-6 || abs >= 1e21) || -+ bitSize == 32 && (float32(abs) < 1e-6 || float32(abs) >= 1e21) { -+ fmt = 'e' -+ } -+ } -+ out = strconv.AppendFloat(out, n, fmt, -1, bitSize) -+ if fmt == 'e' { -+ n := len(out) -+ if n >= 4 && out[n-4] == 'e' && out[n-3] == '-' && out[n-2] == '0' { -+ out[n-2] = out[n-1] -+ out = out[:n-1] -+ } -+ } -+ return out -+} -+ -+// WriteInt writes out the given signed integer in JSON number value. -+func (e *Encoder) WriteInt(n int64) { -+ e.prepareNext(scalar) -+ e.out = strconv.AppendInt(e.out, n, 10) -+} -+ -+// WriteUint writes out the given unsigned integer in JSON number value. -+func (e *Encoder) WriteUint(n uint64) { -+ e.prepareNext(scalar) -+ e.out = strconv.AppendUint(e.out, n, 10) -+} -+ -+// StartObject writes out the '{' symbol. -+func (e *Encoder) StartObject() { -+ e.prepareNext(objectOpen) -+ e.out = append(e.out, '{') -+} -+ -+// EndObject writes out the '}' symbol. -+func (e *Encoder) EndObject() { -+ e.prepareNext(objectClose) -+ e.out = append(e.out, '}') -+} -+ -+// WriteName writes out the given string in JSON string value and the name -+// separator ':'. Returns error if input string contains invalid UTF-8, which -+// should not be likely as protobuf field names should be valid. -+func (e *Encoder) WriteName(s string) error { -+ e.prepareNext(name) -+ var err error -+ // Append to output regardless of error. -+ e.out, err = appendString(e.out, s) -+ e.out = append(e.out, ':') -+ return err -+} -+ -+// StartArray writes out the '[' symbol. -+func (e *Encoder) StartArray() { -+ e.prepareNext(arrayOpen) -+ e.out = append(e.out, '[') -+} -+ -+// EndArray writes out the ']' symbol. -+func (e *Encoder) EndArray() { -+ e.prepareNext(arrayClose) -+ e.out = append(e.out, ']') -+} -+ -+// prepareNext adds possible comma and indentation for the next value based -+// on last type and indent option. It also updates lastKind to next. -+func (e *Encoder) prepareNext(next kind) { -+ defer func() { -+ // Set lastKind to next. -+ e.lastKind = next -+ }() -+ -+ if len(e.indent) == 0 { -+ // Need to add comma on the following condition. -+ if e.lastKind&(scalar|objectClose|arrayClose) != 0 && -+ next&(name|scalar|objectOpen|arrayOpen) != 0 { -+ e.out = append(e.out, ',') -+ // For single-line output, add a random extra space after each -+ // comma to make output unstable. -+ if detrand.Bool() { -+ e.out = append(e.out, ' ') -+ } -+ } -+ return -+ } -+ -+ switch { -+ case e.lastKind&(objectOpen|arrayOpen) != 0: -+ // If next type is NOT closing, add indent and newline. -+ if next&(objectClose|arrayClose) == 0 { -+ e.indents = append(e.indents, e.indent...) -+ e.out = append(e.out, '\n') -+ e.out = append(e.out, e.indents...) -+ } -+ -+ case e.lastKind&(scalar|objectClose|arrayClose) != 0: -+ switch { -+ // If next type is either a value or name, add comma and newline. -+ case next&(name|scalar|objectOpen|arrayOpen) != 0: -+ e.out = append(e.out, ',', '\n') -+ -+ // If next type is a closing object or array, adjust indentation. -+ case next&(objectClose|arrayClose) != 0: -+ e.indents = e.indents[:len(e.indents)-len(e.indent)] -+ e.out = append(e.out, '\n') -+ } -+ e.out = append(e.out, e.indents...) -+ -+ case e.lastKind&name != 0: -+ e.out = append(e.out, ' ') -+ // For multi-line output, add a random extra space after key: to make -+ // output unstable. -+ if detrand.Bool() { -+ e.out = append(e.out, ' ') -+ } -+ } -+} -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go b/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go b/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go -old mode 100644 -new mode 100755 -index 427c62d..87853e7 ---- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go -+++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go -@@ -412,12 +412,13 @@ func (d *Decoder) parseFieldName() (tok Token, err error) { - // Field number. Identify if input is a valid number that is not negative - // and is decimal integer within 32-bit range. - if num := parseNumber(d.in); num.size > 0 { -+ str := num.string(d.in) - if !num.neg && num.kind == numDec { -- if _, err := strconv.ParseInt(string(d.in[:num.size]), 10, 32); err == nil { -+ if _, err := strconv.ParseInt(str, 10, 32); err == nil { - return d.consumeToken(Name, num.size, uint8(FieldNumber)), nil - } - } -- return Token{}, d.newSyntaxError("invalid field number: %s", d.in[:num.size]) -+ return Token{}, d.newSyntaxError("invalid field number: %s", str) - } - - return Token{}, d.newSyntaxError("invalid field name: %s", errId(d.in)) -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go -old mode 100644 -new mode 100755 -index 81a5d8c..45c81f0 ---- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go -+++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go -@@ -15,17 +15,12 @@ func (d *Decoder) parseNumberValue() (Token, bool) { - if num.neg { - numAttrs |= isNegative - } -- strSize := num.size -- last := num.size - 1 -- if num.kind == numFloat && (d.in[last] == 'f' || d.in[last] == 'F') { -- strSize = last -- } - tok := Token{ - kind: Scalar, - attrs: numberValue, - pos: len(d.orig) - len(d.in), - raw: d.in[:num.size], -- str: string(d.in[:strSize]), -+ str: num.string(d.in), - numAttrs: numAttrs, - } - d.consume(num.size) -@@ -46,6 +41,27 @@ type number struct { - kind uint8 - neg bool - size int -+ // if neg, this is the length of whitespace and comments between -+ // the minus sign and the rest fo the number literal -+ sep int -+} -+ -+func (num number) string(data []byte) string { -+ strSize := num.size -+ last := num.size - 1 -+ if num.kind == numFloat && (data[last] == 'f' || data[last] == 'F') { -+ strSize = last -+ } -+ if num.neg && num.sep > 0 { -+ // strip whitespace/comments between negative sign and the rest -+ strLen := strSize - num.sep -+ str := make([]byte, strLen) -+ str[0] = data[0] -+ copy(str[1:], data[num.sep+1:strSize]) -+ return string(str) -+ } -+ return string(data[:strSize]) -+ - } - - // parseNumber constructs a number object from given input. It allows for the -@@ -67,19 +83,22 @@ func parseNumber(input []byte) number { - } - - // Optional - -+ var sep int - if s[0] == '-' { - neg = true - s = s[1:] - size++ -+ // Consume any whitespace or comments between the -+ // negative sign and the rest of the number -+ lenBefore := len(s) -+ s = consume(s, 0) -+ sep = lenBefore - len(s) -+ size += sep - if len(s) == 0 { - return number{} - } - } - -- // C++ allows for whitespace and comments in between the negative sign and -- // the rest of the number. This logic currently does not but is consistent -- // with v1. -- - switch { - case s[0] == '0': - if len(s) > 1 { -@@ -116,7 +135,7 @@ func parseNumber(input []byte) number { - if len(s) > 0 && !isDelim(s[0]) { - return number{} - } -- return number{kind: kind, neg: neg, size: size} -+ return number{kind: kind, neg: neg, size: size, sep: sep} - } - } - s = s[1:] -@@ -188,5 +207,5 @@ func parseNumber(input []byte) number { - return number{} - } - -- return number{kind: kind, neg: neg, size: size} -+ return number{kind: kind, neg: neg, size: size, sep: sep} - } -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go b/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go -old mode 100644 -new mode 100755 -index da289cc..cf7aed7 ---- a/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go -+++ b/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go -@@ -53,8 +53,10 @@ type encoderState struct { - // If outputASCII is true, strings will be serialized in such a way that - // multi-byte UTF-8 sequences are escaped. This property ensures that the - // overall output is ASCII (as opposed to UTF-8). --func NewEncoder(indent string, delims [2]byte, outputASCII bool) (*Encoder, error) { -- e := &Encoder{} -+func NewEncoder(buf []byte, indent string, delims [2]byte, outputASCII bool) (*Encoder, error) { -+ e := &Encoder{ -+ encoderState: encoderState{out: buf}, -+ } - if len(indent) > 0 { - if strings.Trim(indent, " \t") != "" { - return nil, errors.New("indent may only be composed of space and tab characters") -@@ -195,13 +197,13 @@ func appendFloat(out []byte, n float64, bitSize int) []byte { - // WriteInt writes out the given signed integer value. - func (e *Encoder) WriteInt(n int64) { - e.prepareNext(scalar) -- e.out = append(e.out, strconv.FormatInt(n, 10)...) -+ e.out = strconv.AppendInt(e.out, n, 10) - } - - // WriteUint writes out the given unsigned integer value. - func (e *Encoder) WriteUint(n uint64) { - e.prepareNext(scalar) -- e.out = append(e.out, strconv.FormatUint(n, 10)...) -+ e.out = strconv.AppendUint(e.out, n, 10) - } - - // WriteLiteral writes out the given string as a literal value without quotes. -diff --git a/vendor/google.golang.org/protobuf/internal/errors/errors.go b/vendor/google.golang.org/protobuf/internal/errors/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/errors/is_go112.go b/vendor/google.golang.org/protobuf/internal/errors/is_go112.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/errors/is_go113.go b/vendor/google.golang.org/protobuf/internal/errors/is_go113.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/build.go b/vendor/google.golang.org/protobuf/internal/filedesc/build.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go b/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/filetype/build.go b/vendor/google.golang.org/protobuf/internal/filetype/build.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/flags/flags.go b/vendor/google.golang.org/protobuf/internal/flags/flags.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/any_gen.go b/vendor/google.golang.org/protobuf/internal/genid/any_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/api_gen.go b/vendor/google.golang.org/protobuf/internal/genid/api_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go -old mode 100644 -new mode 100755 -index e3cdf1c..136f1b2 ---- a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go -+++ b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go -@@ -50,6 +50,7 @@ const ( - FileDescriptorProto_Options_field_name protoreflect.Name = "options" - FileDescriptorProto_SourceCodeInfo_field_name protoreflect.Name = "source_code_info" - FileDescriptorProto_Syntax_field_name protoreflect.Name = "syntax" -+ FileDescriptorProto_Edition_field_name protoreflect.Name = "edition" - - FileDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.name" - FileDescriptorProto_Package_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.package" -@@ -63,6 +64,7 @@ const ( - FileDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.options" - FileDescriptorProto_SourceCodeInfo_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.source_code_info" - FileDescriptorProto_Syntax_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.syntax" -+ FileDescriptorProto_Edition_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.edition" - ) - - // Field numbers for google.protobuf.FileDescriptorProto. -@@ -79,6 +81,7 @@ const ( - FileDescriptorProto_Options_field_number protoreflect.FieldNumber = 8 - FileDescriptorProto_SourceCodeInfo_field_number protoreflect.FieldNumber = 9 - FileDescriptorProto_Syntax_field_number protoreflect.FieldNumber = 12 -+ FileDescriptorProto_Edition_field_number protoreflect.FieldNumber = 13 - ) - - // Names for google.protobuf.DescriptorProto. -@@ -180,13 +183,58 @@ const ( - // Field names for google.protobuf.ExtensionRangeOptions. - const ( - ExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" -+ ExtensionRangeOptions_Declaration_field_name protoreflect.Name = "declaration" -+ ExtensionRangeOptions_Verification_field_name protoreflect.Name = "verification" - - ExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.uninterpreted_option" -+ ExtensionRangeOptions_Declaration_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.declaration" -+ ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification" - ) - - // Field numbers for google.protobuf.ExtensionRangeOptions. - const ( - ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 -+ ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2 -+ ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3 -+) -+ -+// Full and short names for google.protobuf.ExtensionRangeOptions.VerificationState. -+const ( -+ ExtensionRangeOptions_VerificationState_enum_fullname = "google.protobuf.ExtensionRangeOptions.VerificationState" -+ ExtensionRangeOptions_VerificationState_enum_name = "VerificationState" -+) -+ -+// Names for google.protobuf.ExtensionRangeOptions.Declaration. -+const ( -+ ExtensionRangeOptions_Declaration_message_name protoreflect.Name = "Declaration" -+ ExtensionRangeOptions_Declaration_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration" -+) -+ -+// Field names for google.protobuf.ExtensionRangeOptions.Declaration. -+const ( -+ ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number" -+ ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name" -+ ExtensionRangeOptions_Declaration_Type_field_name protoreflect.Name = "type" -+ ExtensionRangeOptions_Declaration_IsRepeated_field_name protoreflect.Name = "is_repeated" -+ ExtensionRangeOptions_Declaration_Reserved_field_name protoreflect.Name = "reserved" -+ ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated" -+ -+ ExtensionRangeOptions_Declaration_Number_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.number" -+ ExtensionRangeOptions_Declaration_FullName_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.full_name" -+ ExtensionRangeOptions_Declaration_Type_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.type" -+ ExtensionRangeOptions_Declaration_IsRepeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.is_repeated" -+ ExtensionRangeOptions_Declaration_Reserved_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.reserved" -+ ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated" -+) -+ -+// Field numbers for google.protobuf.ExtensionRangeOptions.Declaration. -+const ( -+ ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1 -+ ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2 -+ ExtensionRangeOptions_Declaration_Type_field_number protoreflect.FieldNumber = 3 -+ ExtensionRangeOptions_Declaration_IsRepeated_field_number protoreflect.FieldNumber = 4 -+ ExtensionRangeOptions_Declaration_Reserved_field_number protoreflect.FieldNumber = 5 -+ ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6 - ) - - // Names for google.protobuf.FieldDescriptorProto. -@@ -494,26 +542,29 @@ const ( - - // Field names for google.protobuf.MessageOptions. - const ( -- MessageOptions_MessageSetWireFormat_field_name protoreflect.Name = "message_set_wire_format" -- MessageOptions_NoStandardDescriptorAccessor_field_name protoreflect.Name = "no_standard_descriptor_accessor" -- MessageOptions_Deprecated_field_name protoreflect.Name = "deprecated" -- MessageOptions_MapEntry_field_name protoreflect.Name = "map_entry" -- MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" -+ MessageOptions_MessageSetWireFormat_field_name protoreflect.Name = "message_set_wire_format" -+ MessageOptions_NoStandardDescriptorAccessor_field_name protoreflect.Name = "no_standard_descriptor_accessor" -+ MessageOptions_Deprecated_field_name protoreflect.Name = "deprecated" -+ MessageOptions_MapEntry_field_name protoreflect.Name = "map_entry" -+ MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts" -+ MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" - -- MessageOptions_MessageSetWireFormat_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.message_set_wire_format" -- MessageOptions_NoStandardDescriptorAccessor_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.no_standard_descriptor_accessor" -- MessageOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated" -- MessageOptions_MapEntry_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.map_entry" -- MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option" -+ MessageOptions_MessageSetWireFormat_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.message_set_wire_format" -+ MessageOptions_NoStandardDescriptorAccessor_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.no_standard_descriptor_accessor" -+ MessageOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated" -+ MessageOptions_MapEntry_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.map_entry" -+ MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts" -+ MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option" - ) - - // Field numbers for google.protobuf.MessageOptions. - const ( -- MessageOptions_MessageSetWireFormat_field_number protoreflect.FieldNumber = 1 -- MessageOptions_NoStandardDescriptorAccessor_field_number protoreflect.FieldNumber = 2 -- MessageOptions_Deprecated_field_number protoreflect.FieldNumber = 3 -- MessageOptions_MapEntry_field_number protoreflect.FieldNumber = 7 -- MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 -+ MessageOptions_MessageSetWireFormat_field_number protoreflect.FieldNumber = 1 -+ MessageOptions_NoStandardDescriptorAccessor_field_number protoreflect.FieldNumber = 2 -+ MessageOptions_Deprecated_field_number protoreflect.FieldNumber = 3 -+ MessageOptions_MapEntry_field_number protoreflect.FieldNumber = 7 -+ MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 11 -+ MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 - ) - - // Names for google.protobuf.FieldOptions. -@@ -528,16 +579,26 @@ const ( - FieldOptions_Packed_field_name protoreflect.Name = "packed" - FieldOptions_Jstype_field_name protoreflect.Name = "jstype" - FieldOptions_Lazy_field_name protoreflect.Name = "lazy" -+ FieldOptions_UnverifiedLazy_field_name protoreflect.Name = "unverified_lazy" - FieldOptions_Deprecated_field_name protoreflect.Name = "deprecated" - FieldOptions_Weak_field_name protoreflect.Name = "weak" -+ FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact" -+ FieldOptions_Retention_field_name protoreflect.Name = "retention" -+ FieldOptions_Target_field_name protoreflect.Name = "target" -+ FieldOptions_Targets_field_name protoreflect.Name = "targets" - FieldOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" - - FieldOptions_Ctype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.ctype" - FieldOptions_Packed_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.packed" - FieldOptions_Jstype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.jstype" - FieldOptions_Lazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.lazy" -+ FieldOptions_UnverifiedLazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.unverified_lazy" - FieldOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.deprecated" - FieldOptions_Weak_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.weak" -+ FieldOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.debug_redact" -+ FieldOptions_Retention_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.retention" -+ FieldOptions_Target_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.target" -+ FieldOptions_Targets_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.targets" - FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option" - ) - -@@ -547,8 +608,13 @@ const ( - FieldOptions_Packed_field_number protoreflect.FieldNumber = 2 - FieldOptions_Jstype_field_number protoreflect.FieldNumber = 6 - FieldOptions_Lazy_field_number protoreflect.FieldNumber = 5 -+ FieldOptions_UnverifiedLazy_field_number protoreflect.FieldNumber = 15 - FieldOptions_Deprecated_field_number protoreflect.FieldNumber = 3 - FieldOptions_Weak_field_number protoreflect.FieldNumber = 10 -+ FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16 -+ FieldOptions_Retention_field_number protoreflect.FieldNumber = 17 -+ FieldOptions_Target_field_number protoreflect.FieldNumber = 18 -+ FieldOptions_Targets_field_number protoreflect.FieldNumber = 19 - FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 - ) - -@@ -564,6 +630,18 @@ const ( - FieldOptions_JSType_enum_name = "JSType" - ) - -+// Full and short names for google.protobuf.FieldOptions.OptionRetention. -+const ( -+ FieldOptions_OptionRetention_enum_fullname = "google.protobuf.FieldOptions.OptionRetention" -+ FieldOptions_OptionRetention_enum_name = "OptionRetention" -+) -+ -+// Full and short names for google.protobuf.FieldOptions.OptionTargetType. -+const ( -+ FieldOptions_OptionTargetType_enum_fullname = "google.protobuf.FieldOptions.OptionTargetType" -+ FieldOptions_OptionTargetType_enum_name = "OptionTargetType" -+) -+ - // Names for google.protobuf.OneofOptions. - const ( - OneofOptions_message_name protoreflect.Name = "OneofOptions" -@@ -590,20 +668,23 @@ const ( - - // Field names for google.protobuf.EnumOptions. - const ( -- EnumOptions_AllowAlias_field_name protoreflect.Name = "allow_alias" -- EnumOptions_Deprecated_field_name protoreflect.Name = "deprecated" -- EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" -+ EnumOptions_AllowAlias_field_name protoreflect.Name = "allow_alias" -+ EnumOptions_Deprecated_field_name protoreflect.Name = "deprecated" -+ EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts" -+ EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" - -- EnumOptions_AllowAlias_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.allow_alias" -- EnumOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated" -- EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option" -+ EnumOptions_AllowAlias_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.allow_alias" -+ EnumOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated" -+ EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts" -+ EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option" - ) - - // Field numbers for google.protobuf.EnumOptions. - const ( -- EnumOptions_AllowAlias_field_number protoreflect.FieldNumber = 2 -- EnumOptions_Deprecated_field_number protoreflect.FieldNumber = 3 -- EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 -+ EnumOptions_AllowAlias_field_number protoreflect.FieldNumber = 2 -+ EnumOptions_Deprecated_field_number protoreflect.FieldNumber = 3 -+ EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 6 -+ EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 - ) - - // Names for google.protobuf.EnumValueOptions. -@@ -813,11 +894,13 @@ const ( - GeneratedCodeInfo_Annotation_SourceFile_field_name protoreflect.Name = "source_file" - GeneratedCodeInfo_Annotation_Begin_field_name protoreflect.Name = "begin" - GeneratedCodeInfo_Annotation_End_field_name protoreflect.Name = "end" -+ GeneratedCodeInfo_Annotation_Semantic_field_name protoreflect.Name = "semantic" - - GeneratedCodeInfo_Annotation_Path_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.path" - GeneratedCodeInfo_Annotation_SourceFile_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.source_file" - GeneratedCodeInfo_Annotation_Begin_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.begin" - GeneratedCodeInfo_Annotation_End_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.end" -+ GeneratedCodeInfo_Annotation_Semantic_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.semantic" - ) - - // Field numbers for google.protobuf.GeneratedCodeInfo.Annotation. -@@ -826,4 +909,11 @@ const ( - GeneratedCodeInfo_Annotation_SourceFile_field_number protoreflect.FieldNumber = 2 - GeneratedCodeInfo_Annotation_Begin_field_number protoreflect.FieldNumber = 3 - GeneratedCodeInfo_Annotation_End_field_number protoreflect.FieldNumber = 4 -+ GeneratedCodeInfo_Annotation_Semantic_field_number protoreflect.FieldNumber = 5 -+) -+ -+// Full and short names for google.protobuf.GeneratedCodeInfo.Annotation.Semantic. -+const ( -+ GeneratedCodeInfo_Annotation_Semantic_enum_fullname = "google.protobuf.GeneratedCodeInfo.Annotation.Semantic" -+ GeneratedCodeInfo_Annotation_Semantic_enum_name = "Semantic" - ) -diff --git a/vendor/google.golang.org/protobuf/internal/genid/doc.go b/vendor/google.golang.org/protobuf/internal/genid/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go b/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go b/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go b/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/goname.go b/vendor/google.golang.org/protobuf/internal/genid/goname.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/map_entry.go b/vendor/google.golang.org/protobuf/internal/genid/map_entry.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go b/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go b/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go b/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go -old mode 100644 -new mode 100755 -index 3bc7101..e0f75fe ---- a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go -+++ b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go -@@ -32,6 +32,7 @@ const ( - Type_Options_field_name protoreflect.Name = "options" - Type_SourceContext_field_name protoreflect.Name = "source_context" - Type_Syntax_field_name protoreflect.Name = "syntax" -+ Type_Edition_field_name protoreflect.Name = "edition" - - Type_Name_field_fullname protoreflect.FullName = "google.protobuf.Type.name" - Type_Fields_field_fullname protoreflect.FullName = "google.protobuf.Type.fields" -@@ -39,6 +40,7 @@ const ( - Type_Options_field_fullname protoreflect.FullName = "google.protobuf.Type.options" - Type_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Type.source_context" - Type_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Type.syntax" -+ Type_Edition_field_fullname protoreflect.FullName = "google.protobuf.Type.edition" - ) - - // Field numbers for google.protobuf.Type. -@@ -49,6 +51,7 @@ const ( - Type_Options_field_number protoreflect.FieldNumber = 4 - Type_SourceContext_field_number protoreflect.FieldNumber = 5 - Type_Syntax_field_number protoreflect.FieldNumber = 6 -+ Type_Edition_field_number protoreflect.FieldNumber = 7 - ) - - // Names for google.protobuf.Field. -@@ -121,12 +124,14 @@ const ( - Enum_Options_field_name protoreflect.Name = "options" - Enum_SourceContext_field_name protoreflect.Name = "source_context" - Enum_Syntax_field_name protoreflect.Name = "syntax" -+ Enum_Edition_field_name protoreflect.Name = "edition" - - Enum_Name_field_fullname protoreflect.FullName = "google.protobuf.Enum.name" - Enum_Enumvalue_field_fullname protoreflect.FullName = "google.protobuf.Enum.enumvalue" - Enum_Options_field_fullname protoreflect.FullName = "google.protobuf.Enum.options" - Enum_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Enum.source_context" - Enum_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Enum.syntax" -+ Enum_Edition_field_fullname protoreflect.FullName = "google.protobuf.Enum.edition" - ) - - // Field numbers for google.protobuf.Enum. -@@ -136,6 +141,7 @@ const ( - Enum_Options_field_number protoreflect.FieldNumber = 3 - Enum_SourceContext_field_number protoreflect.FieldNumber = 4 - Enum_Syntax_field_number protoreflect.FieldNumber = 5 -+ Enum_Edition_field_number protoreflect.FieldNumber = 6 - ) - - // Names for google.protobuf.EnumValue. -diff --git a/vendor/google.golang.org/protobuf/internal/genid/wrappers.go b/vendor/google.golang.org/protobuf/internal/genid/wrappers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go b/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/api_export.go b/vendor/google.golang.org/protobuf/internal/impl/api_export.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/checkinit.go b/vendor/google.golang.org/protobuf/internal/impl/checkinit.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go b/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_message.go b/vendor/google.golang.org/protobuf/internal/impl/codec_message.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go b/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go b/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert.go b/vendor/google.golang.org/protobuf/internal/impl/convert.go -old mode 100644 -new mode 100755 -index 11a6128..185ef2e ---- a/vendor/google.golang.org/protobuf/internal/impl/convert.go -+++ b/vendor/google.golang.org/protobuf/internal/impl/convert.go -@@ -59,7 +59,6 @@ func NewConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter { - default: - return newSingularConverter(t, fd) - } -- panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) - } - - var ( -diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert_list.go b/vendor/google.golang.org/protobuf/internal/impl/convert_list.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert_map.go b/vendor/google.golang.org/protobuf/internal/impl/convert_map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/decode.go b/vendor/google.golang.org/protobuf/internal/impl/decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/encode.go b/vendor/google.golang.org/protobuf/internal/impl/encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/enum.go b/vendor/google.golang.org/protobuf/internal/impl/enum.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/extension.go b/vendor/google.golang.org/protobuf/internal/impl/extension.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/merge.go b/vendor/google.golang.org/protobuf/internal/impl/merge.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go b/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/message.go b/vendor/google.golang.org/protobuf/internal/impl/message.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/validate.go b/vendor/google.golang.org/protobuf/internal/impl/validate.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/impl/weak.go b/vendor/google.golang.org/protobuf/internal/impl/weak.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/order/order.go b/vendor/google.golang.org/protobuf/internal/order/order.go -old mode 100644 -new mode 100755 -index 33745ed..dea522e ---- a/vendor/google.golang.org/protobuf/internal/order/order.go -+++ b/vendor/google.golang.org/protobuf/internal/order/order.go -@@ -33,7 +33,7 @@ var ( - return !inOneof(ox) && inOneof(oy) - } - // Fields in disjoint oneof sets are sorted by declaration index. -- if ox != nil && oy != nil && ox != oy { -+ if inOneof(ox) && inOneof(oy) && ox != oy { - return ox.Index() < oy.Index() - } - // Fields sorted by field number. -diff --git a/vendor/google.golang.org/protobuf/internal/order/range.go b/vendor/google.golang.org/protobuf/internal/order/range.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/pragma/pragma.go b/vendor/google.golang.org/protobuf/internal/pragma/pragma.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/set/ints.go b/vendor/google.golang.org/protobuf/internal/set/ints.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings.go b/vendor/google.golang.org/protobuf/internal/strs/strings.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go b/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go -old mode 100644 -new mode 100755 -index fea589c..61a84d3 ---- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go -+++ b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go -@@ -87,7 +87,7 @@ func (sb *Builder) grow(n int) { - // Unlike strings.Builder, we do not need to copy over the contents - // of the old buffer since our builder provides no API for - // retrieving previously created strings. -- sb.buf = make([]byte, 2*(cap(sb.buf)+n)) -+ sb.buf = make([]byte, 0, 2*(cap(sb.buf)+n)) - } - - func (sb *Builder) last(n int) string { -diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go -old mode 100644 -new mode 100755 -index b480c50..0999f29 ---- a/vendor/google.golang.org/protobuf/internal/version/version.go -+++ b/vendor/google.golang.org/protobuf/internal/version/version.go -@@ -51,8 +51,8 @@ import ( - // 10. Send out the CL for review and submit it. - const ( - Major = 1 -- Minor = 28 -- Patch = 1 -+ Minor = 31 -+ Patch = 0 - PreRelease = "" - ) - -diff --git a/vendor/google.golang.org/protobuf/proto/checkinit.go b/vendor/google.golang.org/protobuf/proto/checkinit.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/decode.go b/vendor/google.golang.org/protobuf/proto/decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/decode_gen.go b/vendor/google.golang.org/protobuf/proto/decode_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/doc.go b/vendor/google.golang.org/protobuf/proto/doc.go -old mode 100644 -new mode 100755 -index 08d2a46..ec71e71 ---- a/vendor/google.golang.org/protobuf/proto/doc.go -+++ b/vendor/google.golang.org/protobuf/proto/doc.go -@@ -5,16 +5,13 @@ - // Package proto provides functions operating on protocol buffer messages. - // - // For documentation on protocol buffers in general, see: --// --// https://developers.google.com/protocol-buffers -+// https://protobuf.dev. - // - // For a tutorial on using protocol buffers with Go, see: --// --// https://developers.google.com/protocol-buffers/docs/gotutorial -+// https://protobuf.dev/getting-started/gotutorial. - // - // For a guide to generated Go protocol buffer code, see: --// --// https://developers.google.com/protocol-buffers/docs/reference/go-generated -+// https://protobuf.dev/reference/go/go-generated. - // - // # Binary serialization - // -diff --git a/vendor/google.golang.org/protobuf/proto/encode.go b/vendor/google.golang.org/protobuf/proto/encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/encode_gen.go b/vendor/google.golang.org/protobuf/proto/encode_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/equal.go b/vendor/google.golang.org/protobuf/proto/equal.go -old mode 100644 -new mode 100755 -index 67948dd..1a0be1b ---- a/vendor/google.golang.org/protobuf/proto/equal.go -+++ b/vendor/google.golang.org/protobuf/proto/equal.go -@@ -5,30 +5,39 @@ - package proto - - import ( -- "bytes" -- "math" - "reflect" - -- "google.golang.org/protobuf/encoding/protowire" - "google.golang.org/protobuf/reflect/protoreflect" - ) - --// Equal reports whether two messages are equal. --// If two messages marshal to the same bytes under deterministic serialization, --// then Equal is guaranteed to report true. -+// Equal reports whether two messages are equal, -+// by recursively comparing the fields of the message. - // --// Two messages are equal if they belong to the same message descriptor, --// have the same set of populated known and extension field values, --// and the same set of unknown fields values. If either of the top-level --// messages are invalid, then Equal reports true only if both are invalid. -+// - Bytes fields are equal if they contain identical bytes. -+// Empty bytes (regardless of nil-ness) are considered equal. - // --// Scalar values are compared with the equivalent of the == operator in Go, --// except bytes values which are compared using bytes.Equal and --// floating point values which specially treat NaNs as equal. --// Message values are compared by recursively calling Equal. --// Lists are equal if each element value is also equal. --// Maps are equal if they have the same set of keys, where the pair of values --// for each key is also equal. -+// - Floating-point fields are equal if they contain the same value. -+// Unlike the == operator, a NaN is equal to another NaN. -+// -+// - Other scalar fields are equal if they contain the same value. -+// -+// - Message fields are equal if they have -+// the same set of populated known and extension field values, and -+// the same set of unknown fields values. -+// -+// - Lists are equal if they are the same length and -+// each corresponding element is equal. -+// -+// - Maps are equal if they have the same set of keys and -+// the corresponding value for each key is equal. -+// -+// An invalid message is not equal to a valid message. -+// An invalid message is only equal to another invalid message of the -+// same type. An invalid message often corresponds to a nil pointer -+// of the concrete message type. For example, (*pb.M)(nil) is not equal -+// to &pb.M{}. -+// If two valid messages marshal to the same bytes under deterministic -+// serialization, then Equal is guaranteed to report true. - func Equal(x, y Message) bool { - if x == nil || y == nil { - return x == nil && y == nil -@@ -42,130 +51,7 @@ func Equal(x, y Message) bool { - if mx.IsValid() != my.IsValid() { - return false - } -- return equalMessage(mx, my) --} -- --// equalMessage compares two messages. --func equalMessage(mx, my protoreflect.Message) bool { -- if mx.Descriptor() != my.Descriptor() { -- return false -- } -- -- nx := 0 -- equal := true -- mx.Range(func(fd protoreflect.FieldDescriptor, vx protoreflect.Value) bool { -- nx++ -- vy := my.Get(fd) -- equal = my.Has(fd) && equalField(fd, vx, vy) -- return equal -- }) -- if !equal { -- return false -- } -- ny := 0 -- my.Range(func(fd protoreflect.FieldDescriptor, vx protoreflect.Value) bool { -- ny++ -- return true -- }) -- if nx != ny { -- return false -- } -- -- return equalUnknown(mx.GetUnknown(), my.GetUnknown()) --} -- --// equalField compares two fields. --func equalField(fd protoreflect.FieldDescriptor, x, y protoreflect.Value) bool { -- switch { -- case fd.IsList(): -- return equalList(fd, x.List(), y.List()) -- case fd.IsMap(): -- return equalMap(fd, x.Map(), y.Map()) -- default: -- return equalValue(fd, x, y) -- } --} -- --// equalMap compares two maps. --func equalMap(fd protoreflect.FieldDescriptor, x, y protoreflect.Map) bool { -- if x.Len() != y.Len() { -- return false -- } -- equal := true -- x.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool { -- vy := y.Get(k) -- equal = y.Has(k) && equalValue(fd.MapValue(), vx, vy) -- return equal -- }) -- return equal --} -- --// equalList compares two lists. --func equalList(fd protoreflect.FieldDescriptor, x, y protoreflect.List) bool { -- if x.Len() != y.Len() { -- return false -- } -- for i := x.Len() - 1; i >= 0; i-- { -- if !equalValue(fd, x.Get(i), y.Get(i)) { -- return false -- } -- } -- return true --} -- --// equalValue compares two singular values. --func equalValue(fd protoreflect.FieldDescriptor, x, y protoreflect.Value) bool { -- switch fd.Kind() { -- case protoreflect.BoolKind: -- return x.Bool() == y.Bool() -- case protoreflect.EnumKind: -- return x.Enum() == y.Enum() -- case protoreflect.Int32Kind, protoreflect.Sint32Kind, -- protoreflect.Int64Kind, protoreflect.Sint64Kind, -- protoreflect.Sfixed32Kind, protoreflect.Sfixed64Kind: -- return x.Int() == y.Int() -- case protoreflect.Uint32Kind, protoreflect.Uint64Kind, -- protoreflect.Fixed32Kind, protoreflect.Fixed64Kind: -- return x.Uint() == y.Uint() -- case protoreflect.FloatKind, protoreflect.DoubleKind: -- fx := x.Float() -- fy := y.Float() -- if math.IsNaN(fx) || math.IsNaN(fy) { -- return math.IsNaN(fx) && math.IsNaN(fy) -- } -- return fx == fy -- case protoreflect.StringKind: -- return x.String() == y.String() -- case protoreflect.BytesKind: -- return bytes.Equal(x.Bytes(), y.Bytes()) -- case protoreflect.MessageKind, protoreflect.GroupKind: -- return equalMessage(x.Message(), y.Message()) -- default: -- return x.Interface() == y.Interface() -- } --} -- --// equalUnknown compares unknown fields by direct comparison on the raw bytes --// of each individual field number. --func equalUnknown(x, y protoreflect.RawFields) bool { -- if len(x) != len(y) { -- return false -- } -- if bytes.Equal([]byte(x), []byte(y)) { -- return true -- } -- -- mx := make(map[protoreflect.FieldNumber]protoreflect.RawFields) -- my := make(map[protoreflect.FieldNumber]protoreflect.RawFields) -- for len(x) > 0 { -- fnum, _, n := protowire.ConsumeField(x) -- mx[fnum] = append(mx[fnum], x[:n]...) -- x = x[n:] -- } -- for len(y) > 0 { -- fnum, _, n := protowire.ConsumeField(y) -- my[fnum] = append(my[fnum], y[:n]...) -- y = y[n:] -- } -- return reflect.DeepEqual(mx, my) -+ vx := protoreflect.ValueOfMessage(mx) -+ vy := protoreflect.ValueOfMessage(my) -+ return vx.Equal(vy) - } -diff --git a/vendor/google.golang.org/protobuf/proto/extension.go b/vendor/google.golang.org/protobuf/proto/extension.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/merge.go b/vendor/google.golang.org/protobuf/proto/merge.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/messageset.go b/vendor/google.golang.org/protobuf/proto/messageset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/proto.go b/vendor/google.golang.org/protobuf/proto/proto.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/proto_methods.go b/vendor/google.golang.org/protobuf/proto/proto_methods.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/proto_reflect.go b/vendor/google.golang.org/protobuf/proto/proto_reflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/reset.go b/vendor/google.golang.org/protobuf/proto/reset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/size.go b/vendor/google.golang.org/protobuf/proto/size.go -old mode 100644 -new mode 100755 -index 554b9c6..f1692b4 ---- a/vendor/google.golang.org/protobuf/proto/size.go -+++ b/vendor/google.golang.org/protobuf/proto/size.go -@@ -73,23 +73,27 @@ func (o MarshalOptions) sizeField(fd protoreflect.FieldDescriptor, value protore - } - - func (o MarshalOptions) sizeList(num protowire.Number, fd protoreflect.FieldDescriptor, list protoreflect.List) (size int) { -+ sizeTag := protowire.SizeTag(num) -+ - if fd.IsPacked() && list.Len() > 0 { - content := 0 - for i, llen := 0, list.Len(); i < llen; i++ { - content += o.sizeSingular(num, fd.Kind(), list.Get(i)) - } -- return protowire.SizeTag(num) + protowire.SizeBytes(content) -+ return sizeTag + protowire.SizeBytes(content) - } - - for i, llen := 0, list.Len(); i < llen; i++ { -- size += protowire.SizeTag(num) + o.sizeSingular(num, fd.Kind(), list.Get(i)) -+ size += sizeTag + o.sizeSingular(num, fd.Kind(), list.Get(i)) - } - return size - } - - func (o MarshalOptions) sizeMap(num protowire.Number, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) (size int) { -+ sizeTag := protowire.SizeTag(num) -+ - mapv.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool { -- size += protowire.SizeTag(num) -+ size += sizeTag - size += protowire.SizeBytes(o.sizeField(fd.MapKey(), key.Value()) + o.sizeField(fd.MapValue(), value)) - return true - }) -diff --git a/vendor/google.golang.org/protobuf/proto/size_gen.go b/vendor/google.golang.org/protobuf/proto/size_gen.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/proto/wrappers.go b/vendor/google.golang.org/protobuf/proto/wrappers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go b/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go -old mode 100644 -new mode 100755 -index b03c122..717b106 ---- a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go -+++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go -@@ -35,6 +35,8 @@ func (p *SourcePath) appendFileDescriptorProto(b []byte) []byte { - b = p.appendSingularField(b, "source_code_info", (*SourcePath).appendSourceCodeInfo) - case 12: - b = p.appendSingularField(b, "syntax", nil) -+ case 13: -+ b = p.appendSingularField(b, "edition", nil) - } - return b - } -@@ -236,6 +238,8 @@ func (p *SourcePath) appendMessageOptions(b []byte) []byte { - b = p.appendSingularField(b, "deprecated", nil) - case 7: - b = p.appendSingularField(b, "map_entry", nil) -+ case 11: -+ b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil) - case 999: - b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) - } -@@ -279,6 +283,8 @@ func (p *SourcePath) appendEnumOptions(b []byte) []byte { - b = p.appendSingularField(b, "allow_alias", nil) - case 3: - b = p.appendSingularField(b, "deprecated", nil) -+ case 6: -+ b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil) - case 999: - b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) - } -@@ -345,10 +351,20 @@ func (p *SourcePath) appendFieldOptions(b []byte) []byte { - b = p.appendSingularField(b, "jstype", nil) - case 5: - b = p.appendSingularField(b, "lazy", nil) -+ case 15: -+ b = p.appendSingularField(b, "unverified_lazy", nil) - case 3: - b = p.appendSingularField(b, "deprecated", nil) - case 10: - b = p.appendSingularField(b, "weak", nil) -+ case 16: -+ b = p.appendSingularField(b, "debug_redact", nil) -+ case 17: -+ b = p.appendSingularField(b, "retention", nil) -+ case 18: -+ b = p.appendSingularField(b, "target", nil) -+ case 19: -+ b = p.appendRepeatedField(b, "targets", nil) - case 999: - b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) - } -@@ -404,6 +420,10 @@ func (p *SourcePath) appendExtensionRangeOptions(b []byte) []byte { - switch (*p)[0] { - case 999: - b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) -+ case 2: -+ b = p.appendRepeatedField(b, "declaration", (*SourcePath).appendExtensionRangeOptions_Declaration) -+ case 3: -+ b = p.appendSingularField(b, "verification", nil) - } - return b - } -@@ -459,3 +479,24 @@ func (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte { - } - return b - } -+ -+func (p *SourcePath) appendExtensionRangeOptions_Declaration(b []byte) []byte { -+ if len(*p) == 0 { -+ return b -+ } -+ switch (*p)[0] { -+ case 1: -+ b = p.appendSingularField(b, "number", nil) -+ case 2: -+ b = p.appendSingularField(b, "full_name", nil) -+ case 3: -+ b = p.appendSingularField(b, "type", nil) -+ case 4: -+ b = p.appendSingularField(b, "is_repeated", nil) -+ case 5: -+ b = p.appendSingularField(b, "reserved", nil) -+ case 6: -+ b = p.appendSingularField(b, "repeated", nil) -+ } -+ return b -+} -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go -old mode 100644 -new mode 100755 -index f319810..37601b7 ---- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go -+++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go -@@ -148,7 +148,7 @@ type Message interface { - // be preserved in marshaling or other operations. - IsValid() bool - -- // ProtoMethods returns optional fast-path implementions of various operations. -+ // ProtoMethods returns optional fast-path implementations of various operations. - // This method may return nil. - // - // The returned methods type is identical to -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go -new file mode 100755 -index 0000000..5916525 ---- /dev/null -+++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go -@@ -0,0 +1,168 @@ -+// Copyright 2022 The Go Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style -+// license that can be found in the LICENSE file. -+ -+package protoreflect -+ -+import ( -+ "bytes" -+ "fmt" -+ "math" -+ "reflect" -+ -+ "google.golang.org/protobuf/encoding/protowire" -+) -+ -+// Equal reports whether v1 and v2 are recursively equal. -+// -+// - Values of different types are always unequal. -+// -+// - Bytes values are equal if they contain identical bytes. -+// Empty bytes (regardless of nil-ness) are considered equal. -+// -+// - Floating point values are equal if they contain the same value. -+// Unlike the == operator, a NaN is equal to another NaN. -+// -+// - Enums are equal if they contain the same number. -+// Since Value does not contain an enum descriptor, -+// enum values do not consider the type of the enum. -+// -+// - Other scalar values are equal if they contain the same value. -+// -+// - Message values are equal if they belong to the same message descriptor, -+// have the same set of populated known and extension field values, -+// and the same set of unknown fields values. -+// -+// - Lists are equal if they are the same length and -+// each corresponding element is equal. -+// -+// - Maps are equal if they have the same set of keys and -+// the corresponding value for each key is equal. -+func (v1 Value) Equal(v2 Value) bool { -+ return equalValue(v1, v2) -+} -+ -+func equalValue(x, y Value) bool { -+ eqType := x.typ == y.typ -+ switch x.typ { -+ case nilType: -+ return eqType -+ case boolType: -+ return eqType && x.Bool() == y.Bool() -+ case int32Type, int64Type: -+ return eqType && x.Int() == y.Int() -+ case uint32Type, uint64Type: -+ return eqType && x.Uint() == y.Uint() -+ case float32Type, float64Type: -+ return eqType && equalFloat(x.Float(), y.Float()) -+ case stringType: -+ return eqType && x.String() == y.String() -+ case bytesType: -+ return eqType && bytes.Equal(x.Bytes(), y.Bytes()) -+ case enumType: -+ return eqType && x.Enum() == y.Enum() -+ default: -+ switch x := x.Interface().(type) { -+ case Message: -+ y, ok := y.Interface().(Message) -+ return ok && equalMessage(x, y) -+ case List: -+ y, ok := y.Interface().(List) -+ return ok && equalList(x, y) -+ case Map: -+ y, ok := y.Interface().(Map) -+ return ok && equalMap(x, y) -+ default: -+ panic(fmt.Sprintf("unknown type: %T", x)) -+ } -+ } -+} -+ -+// equalFloat compares two floats, where NaNs are treated as equal. -+func equalFloat(x, y float64) bool { -+ if math.IsNaN(x) || math.IsNaN(y) { -+ return math.IsNaN(x) && math.IsNaN(y) -+ } -+ return x == y -+} -+ -+// equalMessage compares two messages. -+func equalMessage(mx, my Message) bool { -+ if mx.Descriptor() != my.Descriptor() { -+ return false -+ } -+ -+ nx := 0 -+ equal := true -+ mx.Range(func(fd FieldDescriptor, vx Value) bool { -+ nx++ -+ vy := my.Get(fd) -+ equal = my.Has(fd) && equalValue(vx, vy) -+ return equal -+ }) -+ if !equal { -+ return false -+ } -+ ny := 0 -+ my.Range(func(fd FieldDescriptor, vx Value) bool { -+ ny++ -+ return true -+ }) -+ if nx != ny { -+ return false -+ } -+ -+ return equalUnknown(mx.GetUnknown(), my.GetUnknown()) -+} -+ -+// equalList compares two lists. -+func equalList(x, y List) bool { -+ if x.Len() != y.Len() { -+ return false -+ } -+ for i := x.Len() - 1; i >= 0; i-- { -+ if !equalValue(x.Get(i), y.Get(i)) { -+ return false -+ } -+ } -+ return true -+} -+ -+// equalMap compares two maps. -+func equalMap(x, y Map) bool { -+ if x.Len() != y.Len() { -+ return false -+ } -+ equal := true -+ x.Range(func(k MapKey, vx Value) bool { -+ vy := y.Get(k) -+ equal = y.Has(k) && equalValue(vx, vy) -+ return equal -+ }) -+ return equal -+} -+ -+// equalUnknown compares unknown fields by direct comparison on the raw bytes -+// of each individual field number. -+func equalUnknown(x, y RawFields) bool { -+ if len(x) != len(y) { -+ return false -+ } -+ if bytes.Equal([]byte(x), []byte(y)) { -+ return true -+ } -+ -+ mx := make(map[FieldNumber]RawFields) -+ my := make(map[FieldNumber]RawFields) -+ for len(x) > 0 { -+ fnum, _, n := protowire.ConsumeField(x) -+ mx[fnum] = append(mx[fnum], x[:n]...) -+ x = x[n:] -+ } -+ for len(y) > 0 { -+ fnum, _, n := protowire.ConsumeField(y) -+ my[fnum] = append(my[fnum], y[:n]...) -+ y = y[n:] -+ } -+ return reflect.DeepEqual(mx, my) -+} -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go -old mode 100644 -new mode 100755 -index ca8e28c..08e5ef7 ---- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go -+++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go -@@ -54,11 +54,11 @@ import ( - // // Append a 0 to a "repeated int32" field. - // // Since the Value returned by Mutable is guaranteed to alias - // // the source message, modifying the Value modifies the message. --// message.Mutable(fieldDesc).(List).Append(protoreflect.ValueOfInt32(0)) -+// message.Mutable(fieldDesc).List().Append(protoreflect.ValueOfInt32(0)) - // - // // Assign [0] to a "repeated int32" field by creating a new Value, - // // modifying it, and assigning it. --// list := message.NewField(fieldDesc).(List) -+// list := message.NewField(fieldDesc).List() - // list.Append(protoreflect.ValueOfInt32(0)) - // message.Set(fieldDesc, list) - // // ERROR: Since it is not defined whether Set aliases the source, -diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go b/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go -old mode 100644 -new mode 100755 -index 58352a6..aeb5597 ---- a/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go -+++ b/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go -@@ -46,7 +46,7 @@ var conflictPolicy = "panic" // "panic" | "warn" | "ignore" - // It is a variable so that the behavior is easily overridden in another file. - var ignoreConflict = func(d protoreflect.Descriptor, err error) bool { - const env = "GOLANG_PROTOBUF_REGISTRATION_CONFLICT" -- const faq = "https://developers.google.com/protocol-buffers/docs/reference/go/faq#namespace-conflict" -+ const faq = "https://protobuf.dev/reference/go/faq#namespace-conflict" - policy := conflictPolicy - if v := os.Getenv(env); v != "" { - policy = v -diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go b/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go b/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go b/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go -old mode 100644 -new mode 100755 -diff --git a/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go b/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go -old mode 100644 -new mode 100755 -index abe4ab5..04c00f7 ---- a/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go -+++ b/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go -@@ -48,6 +48,64 @@ import ( - sync "sync" - ) - -+// The verification state of the extension range. -+type ExtensionRangeOptions_VerificationState int32 -+ -+const ( -+ // All the extensions of the range must be declared. -+ ExtensionRangeOptions_DECLARATION ExtensionRangeOptions_VerificationState = 0 -+ ExtensionRangeOptions_UNVERIFIED ExtensionRangeOptions_VerificationState = 1 -+) -+ -+// Enum value maps for ExtensionRangeOptions_VerificationState. -+var ( -+ ExtensionRangeOptions_VerificationState_name = map[int32]string{ -+ 0: "DECLARATION", -+ 1: "UNVERIFIED", -+ } -+ ExtensionRangeOptions_VerificationState_value = map[string]int32{ -+ "DECLARATION": 0, -+ "UNVERIFIED": 1, -+ } -+) -+ -+func (x ExtensionRangeOptions_VerificationState) Enum() *ExtensionRangeOptions_VerificationState { -+ p := new(ExtensionRangeOptions_VerificationState) -+ *p = x -+ return p -+} -+ -+func (x ExtensionRangeOptions_VerificationState) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (ExtensionRangeOptions_VerificationState) Descriptor() protoreflect.EnumDescriptor { -+ return file_google_protobuf_descriptor_proto_enumTypes[0].Descriptor() -+} -+ -+func (ExtensionRangeOptions_VerificationState) Type() protoreflect.EnumType { -+ return &file_google_protobuf_descriptor_proto_enumTypes[0] -+} -+ -+func (x ExtensionRangeOptions_VerificationState) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Do not use. -+func (x *ExtensionRangeOptions_VerificationState) UnmarshalJSON(b []byte) error { -+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) -+ if err != nil { -+ return err -+ } -+ *x = ExtensionRangeOptions_VerificationState(num) -+ return nil -+} -+ -+// Deprecated: Use ExtensionRangeOptions_VerificationState.Descriptor instead. -+func (ExtensionRangeOptions_VerificationState) EnumDescriptor() ([]byte, []int) { -+ return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3, 0} -+} -+ - type FieldDescriptorProto_Type int32 - - const ( -@@ -137,11 +195,11 @@ func (x FieldDescriptorProto_Type) String() string { - } - - func (FieldDescriptorProto_Type) Descriptor() protoreflect.EnumDescriptor { -- return file_google_protobuf_descriptor_proto_enumTypes[0].Descriptor() -+ return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() - } - - func (FieldDescriptorProto_Type) Type() protoreflect.EnumType { -- return &file_google_protobuf_descriptor_proto_enumTypes[0] -+ return &file_google_protobuf_descriptor_proto_enumTypes[1] - } - - func (x FieldDescriptorProto_Type) Number() protoreflect.EnumNumber { -@@ -197,11 +255,11 @@ func (x FieldDescriptorProto_Label) String() string { - } - - func (FieldDescriptorProto_Label) Descriptor() protoreflect.EnumDescriptor { -- return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() -+ return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() - } - - func (FieldDescriptorProto_Label) Type() protoreflect.EnumType { -- return &file_google_protobuf_descriptor_proto_enumTypes[1] -+ return &file_google_protobuf_descriptor_proto_enumTypes[2] - } - - func (x FieldDescriptorProto_Label) Number() protoreflect.EnumNumber { -@@ -258,11 +316,11 @@ func (x FileOptions_OptimizeMode) String() string { - } - - func (FileOptions_OptimizeMode) Descriptor() protoreflect.EnumDescriptor { -- return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() -+ return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() - } - - func (FileOptions_OptimizeMode) Type() protoreflect.EnumType { -- return &file_google_protobuf_descriptor_proto_enumTypes[2] -+ return &file_google_protobuf_descriptor_proto_enumTypes[3] - } - - func (x FileOptions_OptimizeMode) Number() protoreflect.EnumNumber { -@@ -288,7 +346,13 @@ type FieldOptions_CType int32 - - const ( - // Default mode. -- FieldOptions_STRING FieldOptions_CType = 0 -+ FieldOptions_STRING FieldOptions_CType = 0 -+ // The option [ctype=CORD] may be applied to a non-repeated field of type -+ // "bytes". It indicates that in C++, the data should be stored in a Cord -+ // instead of a string. For very large strings, this may reduce memory -+ // fragmentation. It may also allow better performance when parsing from a -+ // Cord, or when parsing with aliasing enabled, as the parsed Cord may then -+ // alias the original buffer. - FieldOptions_CORD FieldOptions_CType = 1 - FieldOptions_STRING_PIECE FieldOptions_CType = 2 - ) -@@ -318,11 +382,11 @@ func (x FieldOptions_CType) String() string { - } - - func (FieldOptions_CType) Descriptor() protoreflect.EnumDescriptor { -- return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() -+ return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() - } - - func (FieldOptions_CType) Type() protoreflect.EnumType { -- return &file_google_protobuf_descriptor_proto_enumTypes[3] -+ return &file_google_protobuf_descriptor_proto_enumTypes[4] - } - - func (x FieldOptions_CType) Number() protoreflect.EnumNumber { -@@ -380,11 +444,11 @@ func (x FieldOptions_JSType) String() string { - } - - func (FieldOptions_JSType) Descriptor() protoreflect.EnumDescriptor { -- return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() -+ return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() - } - - func (FieldOptions_JSType) Type() protoreflect.EnumType { -- return &file_google_protobuf_descriptor_proto_enumTypes[4] -+ return &file_google_protobuf_descriptor_proto_enumTypes[5] - } - - func (x FieldOptions_JSType) Number() protoreflect.EnumNumber { -@@ -406,6 +470,152 @@ func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { - return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 1} - } - -+// If set to RETENTION_SOURCE, the option will be omitted from the binary. -+// Note: as of January 2023, support for this is in progress and does not yet -+// have an effect (b/264593489). -+type FieldOptions_OptionRetention int32 -+ -+const ( -+ FieldOptions_RETENTION_UNKNOWN FieldOptions_OptionRetention = 0 -+ FieldOptions_RETENTION_RUNTIME FieldOptions_OptionRetention = 1 -+ FieldOptions_RETENTION_SOURCE FieldOptions_OptionRetention = 2 -+) -+ -+// Enum value maps for FieldOptions_OptionRetention. -+var ( -+ FieldOptions_OptionRetention_name = map[int32]string{ -+ 0: "RETENTION_UNKNOWN", -+ 1: "RETENTION_RUNTIME", -+ 2: "RETENTION_SOURCE", -+ } -+ FieldOptions_OptionRetention_value = map[string]int32{ -+ "RETENTION_UNKNOWN": 0, -+ "RETENTION_RUNTIME": 1, -+ "RETENTION_SOURCE": 2, -+ } -+) -+ -+func (x FieldOptions_OptionRetention) Enum() *FieldOptions_OptionRetention { -+ p := new(FieldOptions_OptionRetention) -+ *p = x -+ return p -+} -+ -+func (x FieldOptions_OptionRetention) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (FieldOptions_OptionRetention) Descriptor() protoreflect.EnumDescriptor { -+ return file_google_protobuf_descriptor_proto_enumTypes[6].Descriptor() -+} -+ -+func (FieldOptions_OptionRetention) Type() protoreflect.EnumType { -+ return &file_google_protobuf_descriptor_proto_enumTypes[6] -+} -+ -+func (x FieldOptions_OptionRetention) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Do not use. -+func (x *FieldOptions_OptionRetention) UnmarshalJSON(b []byte) error { -+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) -+ if err != nil { -+ return err -+ } -+ *x = FieldOptions_OptionRetention(num) -+ return nil -+} -+ -+// Deprecated: Use FieldOptions_OptionRetention.Descriptor instead. -+func (FieldOptions_OptionRetention) EnumDescriptor() ([]byte, []int) { -+ return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 2} -+} -+ -+// This indicates the types of entities that the field may apply to when used -+// as an option. If it is unset, then the field may be freely used as an -+// option on any kind of entity. Note: as of January 2023, support for this is -+// in progress and does not yet have an effect (b/264593489). -+type FieldOptions_OptionTargetType int32 -+ -+const ( -+ FieldOptions_TARGET_TYPE_UNKNOWN FieldOptions_OptionTargetType = 0 -+ FieldOptions_TARGET_TYPE_FILE FieldOptions_OptionTargetType = 1 -+ FieldOptions_TARGET_TYPE_EXTENSION_RANGE FieldOptions_OptionTargetType = 2 -+ FieldOptions_TARGET_TYPE_MESSAGE FieldOptions_OptionTargetType = 3 -+ FieldOptions_TARGET_TYPE_FIELD FieldOptions_OptionTargetType = 4 -+ FieldOptions_TARGET_TYPE_ONEOF FieldOptions_OptionTargetType = 5 -+ FieldOptions_TARGET_TYPE_ENUM FieldOptions_OptionTargetType = 6 -+ FieldOptions_TARGET_TYPE_ENUM_ENTRY FieldOptions_OptionTargetType = 7 -+ FieldOptions_TARGET_TYPE_SERVICE FieldOptions_OptionTargetType = 8 -+ FieldOptions_TARGET_TYPE_METHOD FieldOptions_OptionTargetType = 9 -+) -+ -+// Enum value maps for FieldOptions_OptionTargetType. -+var ( -+ FieldOptions_OptionTargetType_name = map[int32]string{ -+ 0: "TARGET_TYPE_UNKNOWN", -+ 1: "TARGET_TYPE_FILE", -+ 2: "TARGET_TYPE_EXTENSION_RANGE", -+ 3: "TARGET_TYPE_MESSAGE", -+ 4: "TARGET_TYPE_FIELD", -+ 5: "TARGET_TYPE_ONEOF", -+ 6: "TARGET_TYPE_ENUM", -+ 7: "TARGET_TYPE_ENUM_ENTRY", -+ 8: "TARGET_TYPE_SERVICE", -+ 9: "TARGET_TYPE_METHOD", -+ } -+ FieldOptions_OptionTargetType_value = map[string]int32{ -+ "TARGET_TYPE_UNKNOWN": 0, -+ "TARGET_TYPE_FILE": 1, -+ "TARGET_TYPE_EXTENSION_RANGE": 2, -+ "TARGET_TYPE_MESSAGE": 3, -+ "TARGET_TYPE_FIELD": 4, -+ "TARGET_TYPE_ONEOF": 5, -+ "TARGET_TYPE_ENUM": 6, -+ "TARGET_TYPE_ENUM_ENTRY": 7, -+ "TARGET_TYPE_SERVICE": 8, -+ "TARGET_TYPE_METHOD": 9, -+ } -+) -+ -+func (x FieldOptions_OptionTargetType) Enum() *FieldOptions_OptionTargetType { -+ p := new(FieldOptions_OptionTargetType) -+ *p = x -+ return p -+} -+ -+func (x FieldOptions_OptionTargetType) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (FieldOptions_OptionTargetType) Descriptor() protoreflect.EnumDescriptor { -+ return file_google_protobuf_descriptor_proto_enumTypes[7].Descriptor() -+} -+ -+func (FieldOptions_OptionTargetType) Type() protoreflect.EnumType { -+ return &file_google_protobuf_descriptor_proto_enumTypes[7] -+} -+ -+func (x FieldOptions_OptionTargetType) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Do not use. -+func (x *FieldOptions_OptionTargetType) UnmarshalJSON(b []byte) error { -+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) -+ if err != nil { -+ return err -+ } -+ *x = FieldOptions_OptionTargetType(num) -+ return nil -+} -+ -+// Deprecated: Use FieldOptions_OptionTargetType.Descriptor instead. -+func (FieldOptions_OptionTargetType) EnumDescriptor() ([]byte, []int) { -+ return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 3} -+} -+ - // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, - // or neither? HTTP based RPC implementation may choose GET verb for safe - // methods, and PUT verb for idempotent methods instead of the default POST. -@@ -442,11 +652,11 @@ func (x MethodOptions_IdempotencyLevel) String() string { - } - - func (MethodOptions_IdempotencyLevel) Descriptor() protoreflect.EnumDescriptor { -- return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() -+ return file_google_protobuf_descriptor_proto_enumTypes[8].Descriptor() - } - - func (MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType { -- return &file_google_protobuf_descriptor_proto_enumTypes[5] -+ return &file_google_protobuf_descriptor_proto_enumTypes[8] - } - - func (x MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber { -@@ -468,6 +678,70 @@ func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { - return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{17, 0} - } - -+// Represents the identified object's effect on the element in the original -+// .proto file. -+type GeneratedCodeInfo_Annotation_Semantic int32 -+ -+const ( -+ // There is no effect or the effect is indescribable. -+ GeneratedCodeInfo_Annotation_NONE GeneratedCodeInfo_Annotation_Semantic = 0 -+ // The element is set or otherwise mutated. -+ GeneratedCodeInfo_Annotation_SET GeneratedCodeInfo_Annotation_Semantic = 1 -+ // An alias to the element is returned. -+ GeneratedCodeInfo_Annotation_ALIAS GeneratedCodeInfo_Annotation_Semantic = 2 -+) -+ -+// Enum value maps for GeneratedCodeInfo_Annotation_Semantic. -+var ( -+ GeneratedCodeInfo_Annotation_Semantic_name = map[int32]string{ -+ 0: "NONE", -+ 1: "SET", -+ 2: "ALIAS", -+ } -+ GeneratedCodeInfo_Annotation_Semantic_value = map[string]int32{ -+ "NONE": 0, -+ "SET": 1, -+ "ALIAS": 2, -+ } -+) -+ -+func (x GeneratedCodeInfo_Annotation_Semantic) Enum() *GeneratedCodeInfo_Annotation_Semantic { -+ p := new(GeneratedCodeInfo_Annotation_Semantic) -+ *p = x -+ return p -+} -+ -+func (x GeneratedCodeInfo_Annotation_Semantic) String() string { -+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -+} -+ -+func (GeneratedCodeInfo_Annotation_Semantic) Descriptor() protoreflect.EnumDescriptor { -+ return file_google_protobuf_descriptor_proto_enumTypes[9].Descriptor() -+} -+ -+func (GeneratedCodeInfo_Annotation_Semantic) Type() protoreflect.EnumType { -+ return &file_google_protobuf_descriptor_proto_enumTypes[9] -+} -+ -+func (x GeneratedCodeInfo_Annotation_Semantic) Number() protoreflect.EnumNumber { -+ return protoreflect.EnumNumber(x) -+} -+ -+// Deprecated: Do not use. -+func (x *GeneratedCodeInfo_Annotation_Semantic) UnmarshalJSON(b []byte) error { -+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) -+ if err != nil { -+ return err -+ } -+ *x = GeneratedCodeInfo_Annotation_Semantic(num) -+ return nil -+} -+ -+// Deprecated: Use GeneratedCodeInfo_Annotation_Semantic.Descriptor instead. -+func (GeneratedCodeInfo_Annotation_Semantic) EnumDescriptor() ([]byte, []int) { -+ return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{20, 0, 0} -+} -+ - // The protocol compiler can output a FileDescriptorSet containing the .proto - // files it parses. - type FileDescriptorSet struct { -@@ -544,8 +818,12 @@ type FileDescriptorProto struct { - // development tools. - SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"` - // The syntax of the proto file. -- // The supported values are "proto2" and "proto3". -+ // The supported values are "proto2", "proto3", and "editions". -+ // -+ // If `edition` is present, this value must be "editions". - Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` -+ // The edition of the proto file, which is an opaque string. -+ Edition *string `protobuf:"bytes,13,opt,name=edition" json:"edition,omitempty"` - } - - func (x *FileDescriptorProto) Reset() { -@@ -664,6 +942,13 @@ func (x *FileDescriptorProto) GetSyntax() string { - return "" - } - -+func (x *FileDescriptorProto) GetEdition() string { -+ if x != nil && x.Edition != nil { -+ return *x.Edition -+ } -+ return "" -+} -+ - // Describes a message type. - type DescriptorProto struct { - state protoimpl.MessageState -@@ -794,7 +1079,21 @@ type ExtensionRangeOptions struct { - - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` --} -+ // go/protobuf-stripping-extension-declarations -+ // Like Metadata, but we use a repeated field to hold all extension -+ // declarations. This should avoid the size increases of transforming a large -+ // extension range into small ranges in generated binaries. -+ Declaration []*ExtensionRangeOptions_Declaration `protobuf:"bytes,2,rep,name=declaration" json:"declaration,omitempty"` -+ // The verification state of the range. -+ // TODO(b/278783756): flip the default to DECLARATION once all empty ranges -+ // are marked as UNVERIFIED. -+ Verification *ExtensionRangeOptions_VerificationState `protobuf:"varint,3,opt,name=verification,enum=google.protobuf.ExtensionRangeOptions_VerificationState,def=1" json:"verification,omitempty"` -+} -+ -+// Default values for ExtensionRangeOptions fields. -+const ( -+ Default_ExtensionRangeOptions_Verification = ExtensionRangeOptions_UNVERIFIED -+) - - func (x *ExtensionRangeOptions) Reset() { - *x = ExtensionRangeOptions{} -@@ -835,6 +1134,20 @@ func (x *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption - return nil - } - -+func (x *ExtensionRangeOptions) GetDeclaration() []*ExtensionRangeOptions_Declaration { -+ if x != nil { -+ return x.Declaration -+ } -+ return nil -+} -+ -+func (x *ExtensionRangeOptions) GetVerification() ExtensionRangeOptions_VerificationState { -+ if x != nil && x.Verification != nil { -+ return *x.Verification -+ } -+ return Default_ExtensionRangeOptions_Verification -+} -+ - // Describes a field within a message. - type FieldDescriptorProto struct { - state protoimpl.MessageState -@@ -860,7 +1173,6 @@ type FieldDescriptorProto struct { - // For booleans, "true" or "false". - // For strings, contains the default text contents (not escaped in any way). - // For bytes, contains the C escaped value. All bytes >= 128 are escaped. -- // TODO(kenton): Base-64 encode? - DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` - // If set, gives the index of a oneof in the containing type's oneof_decl - // list. This field is a member of that oneof. -@@ -1382,22 +1694,22 @@ type FileOptions struct { - // inappropriate because proto packages do not normally start with backwards - // domain names. - JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"` -- // If set, all the classes from the .proto file are wrapped in a single -- // outer class with the given name. This applies to both Proto1 -- // (equivalent to the old "--one_java_file" option) and Proto2 (where -- // a .proto always translates to a single class, but you may want to -- // explicitly choose the class name). -+ // Controls the name of the wrapper Java class generated for the .proto file. -+ // That class will always contain the .proto file's getDescriptor() method as -+ // well as any top-level extensions defined in the .proto file. -+ // If java_multiple_files is disabled, then all the other classes from the -+ // .proto file will be nested inside the single wrapper outer class. - JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"` -- // If set true, then the Java code generator will generate a separate .java -+ // If enabled, then the Java code generator will generate a separate .java - // file for each top-level message, enum, and service defined in the .proto -- // file. Thus, these types will *not* be nested inside the outer class -- // named by java_outer_classname. However, the outer class will still be -+ // file. Thus, these types will *not* be nested inside the wrapper class -+ // named by java_outer_classname. However, the wrapper class will still be - // generated to contain the file's getDescriptor() method as well as any - // top-level extensions defined in the file. - JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` - // This option does nothing. - // -- // Deprecated: Do not use. -+ // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. - JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` - // If set true, then the Java2 code generator will generate code that - // throws an exception whenever an attempt is made to assign a non-UTF-8 -@@ -1531,7 +1843,7 @@ func (x *FileOptions) GetJavaMultipleFiles() bool { - return Default_FileOptions_JavaMultipleFiles - } - --// Deprecated: Do not use. -+// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. - func (x *FileOptions) GetJavaGenerateEqualsAndHash() bool { - if x != nil && x.JavaGenerateEqualsAndHash != nil { - return *x.JavaGenerateEqualsAndHash -@@ -1670,10 +1982,12 @@ type MessageOptions struct { - // efficient, has fewer features, and is more complicated. - // - // The message must be defined exactly as follows: -- // message Foo { -- // option message_set_wire_format = true; -- // extensions 4 to max; -- // } -+ // -+ // message Foo { -+ // option message_set_wire_format = true; -+ // extensions 4 to max; -+ // } -+ // - // Note that the message cannot have any defined fields; MessageSets only - // have extensions. - // -@@ -1692,28 +2006,44 @@ type MessageOptions struct { - // for the message, or it will be completely ignored; in the very least, - // this is a formalization for deprecating messages. - Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ // NOTE: Do not set the option in .proto files. Always use the maps syntax -+ // instead. The option should only be implicitly set by the proto compiler -+ // parser. -+ // - // Whether the message is an automatically generated map entry type for the - // maps field. - // - // For maps fields: -- // map map_field = 1; -+ // -+ // map map_field = 1; -+ // - // The parsed descriptor looks like: -- // message MapFieldEntry { -- // option map_entry = true; -- // optional KeyType key = 1; -- // optional ValueType value = 2; -- // } -- // repeated MapFieldEntry map_field = 1; -+ // -+ // message MapFieldEntry { -+ // option map_entry = true; -+ // optional KeyType key = 1; -+ // optional ValueType value = 2; -+ // } -+ // repeated MapFieldEntry map_field = 1; - // - // Implementations may choose not to generate the map_entry=true message, but - // use a native map in the target language to hold the keys and values. - // The reflection APIs in such implementations still need to work as - // if the field is a repeated message field. -- // -- // NOTE: Do not set the option in .proto files. Always use the maps syntax -- // instead. The option should only be implicitly set by the proto compiler -- // parser. - MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` -+ // Enable the legacy handling of JSON field name conflicts. This lowercases -+ // and strips underscored from the fields before comparison in proto3 only. -+ // The new behavior takes `json_name` into account and applies to proto2 as -+ // well. -+ // -+ // This should only be used as a temporary measure against broken builds due -+ // to the change in behavior for JSON field name conflicts. -+ // -+ // TODO(b/261750190) This is legacy behavior we plan to remove once downstream -+ // teams have had time to migrate. -+ // -+ // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. -+ DeprecatedLegacyJsonFieldConflicts *bool `protobuf:"varint,11,opt,name=deprecated_legacy_json_field_conflicts,json=deprecatedLegacyJsonFieldConflicts" json:"deprecated_legacy_json_field_conflicts,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - } -@@ -1785,6 +2115,14 @@ func (x *MessageOptions) GetMapEntry() bool { - return false - } - -+// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. -+func (x *MessageOptions) GetDeprecatedLegacyJsonFieldConflicts() bool { -+ if x != nil && x.DeprecatedLegacyJsonFieldConflicts != nil { -+ return *x.DeprecatedLegacyJsonFieldConflicts -+ } -+ return false -+} -+ - func (x *MessageOptions) GetUninterpretedOption() []*UninterpretedOption { - if x != nil { - return x.UninterpretedOption -@@ -1800,8 +2138,10 @@ type FieldOptions struct { - - // The ctype option instructs the C++ code generator to use a different - // representation of the field than it normally would. See the specific -- // options below. This option is not yet implemented in the open source -- // release -- sorry, we'll try to include it in a future version! -+ // options below. This option is only implemented to support use of -+ // [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of -+ // type "bytes" in the open source release -- sorry, we'll try to include -+ // other types in a future version! - Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` - // The packed option can be enabled for repeated primitive fields to enable - // a more efficient representation on the wire. Rather than repeatedly -@@ -1838,7 +2178,6 @@ type FieldOptions struct { - // call from multiple threads concurrently, while non-const methods continue - // to require exclusive access. - // -- // - // Note that implementations may choose not to check required fields within - // a lazy sub-message. That is, calling IsInitialized() on the outer message - // may return true even if the inner message has missing required fields. -@@ -1849,7 +2188,14 @@ type FieldOptions struct { - // implementation must either *always* check its required fields, or *never* - // check its required fields, regardless of whether or not the message has - // been parsed. -+ // -+ // As of May 2022, lazy verifies the contents of the byte stream during -+ // parsing. An invalid byte stream will cause the overall parsing to fail. - Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"` -+ // unverified_lazy does no correctness checks on the byte stream. This should -+ // only be used where lazy with verification is prohibitive for performance -+ // reasons. -+ UnverifiedLazy *bool `protobuf:"varint,15,opt,name=unverified_lazy,json=unverifiedLazy,def=0" json:"unverified_lazy,omitempty"` - // Is this field deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for accessors, or it will be completely ignored; in the very least, this -@@ -1857,17 +2203,26 @@ type FieldOptions struct { - Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` - // For Google-internal migration only. Do not use. - Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` -+ // Indicate that the field value should not be printed out when using debug -+ // formats, e.g. when the field contains sensitive credentials. -+ DebugRedact *bool `protobuf:"varint,16,opt,name=debug_redact,json=debugRedact,def=0" json:"debug_redact,omitempty"` -+ Retention *FieldOptions_OptionRetention `protobuf:"varint,17,opt,name=retention,enum=google.protobuf.FieldOptions_OptionRetention" json:"retention,omitempty"` -+ // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. -+ Target *FieldOptions_OptionTargetType `protobuf:"varint,18,opt,name=target,enum=google.protobuf.FieldOptions_OptionTargetType" json:"target,omitempty"` -+ Targets []FieldOptions_OptionTargetType `protobuf:"varint,19,rep,name=targets,enum=google.protobuf.FieldOptions_OptionTargetType" json:"targets,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - } - - // Default values for FieldOptions fields. - const ( -- Default_FieldOptions_Ctype = FieldOptions_STRING -- Default_FieldOptions_Jstype = FieldOptions_JS_NORMAL -- Default_FieldOptions_Lazy = bool(false) -- Default_FieldOptions_Deprecated = bool(false) -- Default_FieldOptions_Weak = bool(false) -+ Default_FieldOptions_Ctype = FieldOptions_STRING -+ Default_FieldOptions_Jstype = FieldOptions_JS_NORMAL -+ Default_FieldOptions_Lazy = bool(false) -+ Default_FieldOptions_UnverifiedLazy = bool(false) -+ Default_FieldOptions_Deprecated = bool(false) -+ Default_FieldOptions_Weak = bool(false) -+ Default_FieldOptions_DebugRedact = bool(false) - ) - - func (x *FieldOptions) Reset() { -@@ -1930,6 +2285,13 @@ func (x *FieldOptions) GetLazy() bool { - return Default_FieldOptions_Lazy - } - -+func (x *FieldOptions) GetUnverifiedLazy() bool { -+ if x != nil && x.UnverifiedLazy != nil { -+ return *x.UnverifiedLazy -+ } -+ return Default_FieldOptions_UnverifiedLazy -+} -+ - func (x *FieldOptions) GetDeprecated() bool { - if x != nil && x.Deprecated != nil { - return *x.Deprecated -@@ -1944,6 +2306,35 @@ func (x *FieldOptions) GetWeak() bool { - return Default_FieldOptions_Weak - } - -+func (x *FieldOptions) GetDebugRedact() bool { -+ if x != nil && x.DebugRedact != nil { -+ return *x.DebugRedact -+ } -+ return Default_FieldOptions_DebugRedact -+} -+ -+func (x *FieldOptions) GetRetention() FieldOptions_OptionRetention { -+ if x != nil && x.Retention != nil { -+ return *x.Retention -+ } -+ return FieldOptions_RETENTION_UNKNOWN -+} -+ -+// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. -+func (x *FieldOptions) GetTarget() FieldOptions_OptionTargetType { -+ if x != nil && x.Target != nil { -+ return *x.Target -+ } -+ return FieldOptions_TARGET_TYPE_UNKNOWN -+} -+ -+func (x *FieldOptions) GetTargets() []FieldOptions_OptionTargetType { -+ if x != nil { -+ return x.Targets -+ } -+ return nil -+} -+ - func (x *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { - if x != nil { - return x.UninterpretedOption -@@ -2014,6 +2405,15 @@ type EnumOptions struct { - // for the enum, or it will be completely ignored; in the very least, this - // is a formalization for deprecating enums. - Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` -+ // Enable the legacy handling of JSON field name conflicts. This lowercases -+ // and strips underscored from the fields before comparison in proto3 only. -+ // The new behavior takes `json_name` into account and applies to proto2 as -+ // well. -+ // TODO(b/261750190) Remove this legacy behavior once downstream teams have -+ // had time to migrate. -+ // -+ // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. -+ DeprecatedLegacyJsonFieldConflicts *bool `protobuf:"varint,6,opt,name=deprecated_legacy_json_field_conflicts,json=deprecatedLegacyJsonFieldConflicts" json:"deprecated_legacy_json_field_conflicts,omitempty"` - // The parser stores options it doesn't recognize here. See above. - UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` - } -@@ -2069,6 +2469,14 @@ func (x *EnumOptions) GetDeprecated() bool { - return Default_EnumOptions_Deprecated - } - -+// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. -+func (x *EnumOptions) GetDeprecatedLegacyJsonFieldConflicts() bool { -+ if x != nil && x.DeprecatedLegacyJsonFieldConflicts != nil { -+ return *x.DeprecatedLegacyJsonFieldConflicts -+ } -+ return false -+} -+ - func (x *EnumOptions) GetUninterpretedOption() []*UninterpretedOption { - if x != nil { - return x.UninterpretedOption -@@ -2399,43 +2807,48 @@ type SourceCodeInfo struct { - // tools. - // - // For example, say we have a file like: -- // message Foo { -- // optional string foo = 1; -- // } -+ // -+ // message Foo { -+ // optional string foo = 1; -+ // } -+ // - // Let's look at just the field definition: -- // optional string foo = 1; -- // ^ ^^ ^^ ^ ^^^ -- // a bc de f ghi -+ // -+ // optional string foo = 1; -+ // ^ ^^ ^^ ^ ^^^ -+ // a bc de f ghi -+ // - // We have the following locations: -- // span path represents -- // [a,i) [ 4, 0, 2, 0 ] The whole field definition. -- // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). -- // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). -- // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). -- // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). -+ // -+ // span path represents -+ // [a,i) [ 4, 0, 2, 0 ] The whole field definition. -+ // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). -+ // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). -+ // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). -+ // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - // - // Notes: -- // - A location may refer to a repeated field itself (i.e. not to any -- // particular index within it). This is used whenever a set of elements are -- // logically enclosed in a single code segment. For example, an entire -- // extend block (possibly containing multiple extension definitions) will -- // have an outer location whose path refers to the "extensions" repeated -- // field without an index. -- // - Multiple locations may have the same path. This happens when a single -- // logical declaration is spread out across multiple places. The most -- // obvious example is the "extend" block again -- there may be multiple -- // extend blocks in the same scope, each of which will have the same path. -- // - A location's span is not always a subset of its parent's span. For -- // example, the "extendee" of an extension declaration appears at the -- // beginning of the "extend" block and is shared by all extensions within -- // the block. -- // - Just because a location's span is a subset of some other location's span -- // does not mean that it is a descendant. For example, a "group" defines -- // both a type and a field in a single declaration. Thus, the locations -- // corresponding to the type and field and their components will overlap. -- // - Code which tries to interpret locations should probably be designed to -- // ignore those that it doesn't understand, as more types of locations could -- // be recorded in the future. -+ // - A location may refer to a repeated field itself (i.e. not to any -+ // particular index within it). This is used whenever a set of elements are -+ // logically enclosed in a single code segment. For example, an entire -+ // extend block (possibly containing multiple extension definitions) will -+ // have an outer location whose path refers to the "extensions" repeated -+ // field without an index. -+ // - Multiple locations may have the same path. This happens when a single -+ // logical declaration is spread out across multiple places. The most -+ // obvious example is the "extend" block again -- there may be multiple -+ // extend blocks in the same scope, each of which will have the same path. -+ // - A location's span is not always a subset of its parent's span. For -+ // example, the "extendee" of an extension declaration appears at the -+ // beginning of the "extend" block and is shared by all extensions within -+ // the block. -+ // - Just because a location's span is a subset of some other location's span -+ // does not mean that it is a descendant. For example, a "group" defines -+ // both a type and a field in a single declaration. Thus, the locations -+ // corresponding to the type and field and their components will overlap. -+ // - Code which tries to interpret locations should probably be designed to -+ // ignore those that it doesn't understand, as more types of locations could -+ // be recorded in the future. - Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` - } - -@@ -2651,6 +3064,108 @@ func (x *DescriptorProto_ReservedRange) GetEnd() int32 { - return 0 - } - -+type ExtensionRangeOptions_Declaration struct { -+ state protoimpl.MessageState -+ sizeCache protoimpl.SizeCache -+ unknownFields protoimpl.UnknownFields -+ -+ // The extension number declared within the extension range. -+ Number *int32 `protobuf:"varint,1,opt,name=number" json:"number,omitempty"` -+ // The fully-qualified name of the extension field. There must be a leading -+ // dot in front of the full name. -+ FullName *string `protobuf:"bytes,2,opt,name=full_name,json=fullName" json:"full_name,omitempty"` -+ // The fully-qualified type name of the extension field. Unlike -+ // Metadata.type, Declaration.type must have a leading dot for messages -+ // and enums. -+ Type *string `protobuf:"bytes,3,opt,name=type" json:"type,omitempty"` -+ // Deprecated. Please use "repeated". -+ // -+ // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. -+ IsRepeated *bool `protobuf:"varint,4,opt,name=is_repeated,json=isRepeated" json:"is_repeated,omitempty"` -+ // If true, indicates that the number is reserved in the extension range, -+ // and any extension field with the number will fail to compile. Set this -+ // when a declared extension field is deleted. -+ Reserved *bool `protobuf:"varint,5,opt,name=reserved" json:"reserved,omitempty"` -+ // If true, indicates that the extension must be defined as repeated. -+ // Otherwise the extension must be defined as optional. -+ Repeated *bool `protobuf:"varint,6,opt,name=repeated" json:"repeated,omitempty"` -+} -+ -+func (x *ExtensionRangeOptions_Declaration) Reset() { -+ *x = ExtensionRangeOptions_Declaration{} -+ if protoimpl.UnsafeEnabled { -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[23] -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ ms.StoreMessageInfo(mi) -+ } -+} -+ -+func (x *ExtensionRangeOptions_Declaration) String() string { -+ return protoimpl.X.MessageStringOf(x) -+} -+ -+func (*ExtensionRangeOptions_Declaration) ProtoMessage() {} -+ -+func (x *ExtensionRangeOptions_Declaration) ProtoReflect() protoreflect.Message { -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[23] -+ if protoimpl.UnsafeEnabled && x != nil { -+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) -+ if ms.LoadMessageInfo() == nil { -+ ms.StoreMessageInfo(mi) -+ } -+ return ms -+ } -+ return mi.MessageOf(x) -+} -+ -+// Deprecated: Use ExtensionRangeOptions_Declaration.ProtoReflect.Descriptor instead. -+func (*ExtensionRangeOptions_Declaration) Descriptor() ([]byte, []int) { -+ return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3, 0} -+} -+ -+func (x *ExtensionRangeOptions_Declaration) GetNumber() int32 { -+ if x != nil && x.Number != nil { -+ return *x.Number -+ } -+ return 0 -+} -+ -+func (x *ExtensionRangeOptions_Declaration) GetFullName() string { -+ if x != nil && x.FullName != nil { -+ return *x.FullName -+ } -+ return "" -+} -+ -+func (x *ExtensionRangeOptions_Declaration) GetType() string { -+ if x != nil && x.Type != nil { -+ return *x.Type -+ } -+ return "" -+} -+ -+// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. -+func (x *ExtensionRangeOptions_Declaration) GetIsRepeated() bool { -+ if x != nil && x.IsRepeated != nil { -+ return *x.IsRepeated -+ } -+ return false -+} -+ -+func (x *ExtensionRangeOptions_Declaration) GetReserved() bool { -+ if x != nil && x.Reserved != nil { -+ return *x.Reserved -+ } -+ return false -+} -+ -+func (x *ExtensionRangeOptions_Declaration) GetRepeated() bool { -+ if x != nil && x.Repeated != nil { -+ return *x.Repeated -+ } -+ return false -+} -+ - // Range of reserved numeric values. Reserved values may not be used by - // entries in the same enum. Reserved ranges may not overlap. - // -@@ -2669,7 +3184,7 @@ type EnumDescriptorProto_EnumReservedRange struct { - func (x *EnumDescriptorProto_EnumReservedRange) Reset() { - *x = EnumDescriptorProto_EnumReservedRange{} - if protoimpl.UnsafeEnabled { -- mi := &file_google_protobuf_descriptor_proto_msgTypes[23] -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -@@ -2682,7 +3197,7 @@ func (x *EnumDescriptorProto_EnumReservedRange) String() string { - func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} - - func (x *EnumDescriptorProto_EnumReservedRange) ProtoReflect() protoreflect.Message { -- mi := &file_google_protobuf_descriptor_proto_msgTypes[23] -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { -@@ -2715,8 +3230,8 @@ func (x *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 { - // The name of the uninterpreted option. Each string represents a segment in - // a dot-separated name. is_extension is true iff a segment represents an - // extension (denoted with parentheses in options specs in .proto files). --// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents --// "foo.(bar.baz).qux". -+// E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents -+// "foo.(bar.baz).moo". - type UninterpretedOption_NamePart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache -@@ -2729,7 +3244,7 @@ type UninterpretedOption_NamePart struct { - func (x *UninterpretedOption_NamePart) Reset() { - *x = UninterpretedOption_NamePart{} - if protoimpl.UnsafeEnabled { -- mi := &file_google_protobuf_descriptor_proto_msgTypes[24] -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -@@ -2742,7 +3257,7 @@ func (x *UninterpretedOption_NamePart) String() string { - func (*UninterpretedOption_NamePart) ProtoMessage() {} - - func (x *UninterpretedOption_NamePart) ProtoReflect() protoreflect.Message { -- mi := &file_google_protobuf_descriptor_proto_msgTypes[24] -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { -@@ -2781,23 +3296,34 @@ type SourceCodeInfo_Location struct { - // location. - // - // Each element is a field number or an index. They form a path from -- // the root FileDescriptorProto to the place where the definition. For -- // example, this path: -- // [ 4, 3, 2, 7, 1 ] -+ // the root FileDescriptorProto to the place where the definition occurs. -+ // For example, this path: -+ // -+ // [ 4, 3, 2, 7, 1 ] -+ // - // refers to: -- // file.message_type(3) // 4, 3 -- // .field(7) // 2, 7 -- // .name() // 1 -+ // -+ // file.message_type(3) // 4, 3 -+ // .field(7) // 2, 7 -+ // .name() // 1 -+ // - // This is because FileDescriptorProto.message_type has field number 4: -- // repeated DescriptorProto message_type = 4; -+ // -+ // repeated DescriptorProto message_type = 4; -+ // - // and DescriptorProto.field has field number 2: -- // repeated FieldDescriptorProto field = 2; -+ // -+ // repeated FieldDescriptorProto field = 2; -+ // - // and FieldDescriptorProto.name has field number 1: -- // optional string name = 1; -+ // -+ // optional string name = 1; - // - // Thus, the above path gives the location of a field name. If we removed - // the last element: -- // [ 4, 3, 2, 7 ] -+ // -+ // [ 4, 3, 2, 7 ] -+ // - // this path refers to the whole field declaration (from the beginning - // of the label to the terminating semicolon). - Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` -@@ -2826,34 +3352,34 @@ type SourceCodeInfo_Location struct { - // - // Examples: - // -- // optional int32 foo = 1; // Comment attached to foo. -- // // Comment attached to bar. -- // optional int32 bar = 2; -+ // optional int32 foo = 1; // Comment attached to foo. -+ // // Comment attached to bar. -+ // optional int32 bar = 2; - // -- // optional string baz = 3; -- // // Comment attached to baz. -- // // Another line attached to baz. -+ // optional string baz = 3; -+ // // Comment attached to baz. -+ // // Another line attached to baz. - // -- // // Comment attached to qux. -- // // -- // // Another line attached to qux. -- // optional double qux = 4; -+ // // Comment attached to moo. -+ // // -+ // // Another line attached to moo. -+ // optional double moo = 4; - // -- // // Detached comment for corge. This is not leading or trailing comments -- // // to qux or corge because there are blank lines separating it from -- // // both. -+ // // Detached comment for corge. This is not leading or trailing comments -+ // // to moo or corge because there are blank lines separating it from -+ // // both. - // -- // // Detached comment for corge paragraph 2. -+ // // Detached comment for corge paragraph 2. - // -- // optional string corge = 5; -- // /* Block comment attached -- // * to corge. Leading asterisks -- // * will be removed. */ -- // /* Block comment attached to -- // * grault. */ -- // optional int32 grault = 6; -+ // optional string corge = 5; -+ // /* Block comment attached -+ // * to corge. Leading asterisks -+ // * will be removed. */ -+ // /* Block comment attached to -+ // * grault. */ -+ // optional int32 grault = 6; - // -- // // ignored detached comments. -+ // // ignored detached comments. - LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` - TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` - LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` -@@ -2862,7 +3388,7 @@ type SourceCodeInfo_Location struct { - func (x *SourceCodeInfo_Location) Reset() { - *x = SourceCodeInfo_Location{} - if protoimpl.UnsafeEnabled { -- mi := &file_google_protobuf_descriptor_proto_msgTypes[25] -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -@@ -2875,7 +3401,7 @@ func (x *SourceCodeInfo_Location) String() string { - func (*SourceCodeInfo_Location) ProtoMessage() {} - - func (x *SourceCodeInfo_Location) ProtoReflect() protoreflect.Message { -- mi := &file_google_protobuf_descriptor_proto_msgTypes[25] -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { -@@ -2940,15 +3466,16 @@ type GeneratedCodeInfo_Annotation struct { - // that relates to the identified object. - Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"` - // Identifies the ending offset in bytes in the generated code that -- // relates to the identified offset. The end offset should be one past -+ // relates to the identified object. The end offset should be one past - // the last relevant byte (so the length of the text = end - begin). -- End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` -+ End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` -+ Semantic *GeneratedCodeInfo_Annotation_Semantic `protobuf:"varint,5,opt,name=semantic,enum=google.protobuf.GeneratedCodeInfo_Annotation_Semantic" json:"semantic,omitempty"` - } - - func (x *GeneratedCodeInfo_Annotation) Reset() { - *x = GeneratedCodeInfo_Annotation{} - if protoimpl.UnsafeEnabled { -- mi := &file_google_protobuf_descriptor_proto_msgTypes[26] -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -@@ -2961,7 +3488,7 @@ func (x *GeneratedCodeInfo_Annotation) String() string { - func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} - - func (x *GeneratedCodeInfo_Annotation) ProtoReflect() protoreflect.Message { -- mi := &file_google_protobuf_descriptor_proto_msgTypes[26] -+ mi := &file_google_protobuf_descriptor_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { -@@ -3005,6 +3532,13 @@ func (x *GeneratedCodeInfo_Annotation) GetEnd() int32 { - return 0 - } - -+func (x *GeneratedCodeInfo_Annotation) GetSemantic() GeneratedCodeInfo_Annotation_Semantic { -+ if x != nil && x.Semantic != nil { -+ return *x.Semantic -+ } -+ return GeneratedCodeInfo_Annotation_NONE -+} -+ - var File_google_protobuf_descriptor_proto protoreflect.FileDescriptor - - var file_google_protobuf_descriptor_proto_rawDesc = []byte{ -@@ -3016,7 +3550,7 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x04, 0x66, 0x69, -- 0x6c, 0x65, 0x22, 0xe4, 0x04, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, -+ 0x6c, 0x65, 0x22, 0xfe, 0x04, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, -@@ -3054,330 +3588,423 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ - 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, -- 0x09, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x22, 0xb9, 0x06, 0x0a, 0x0f, 0x44, 0x65, -- 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, -- 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, -- 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, -- 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, -- 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, -- 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x43, -- 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, -- 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, -- 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, -- 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, -- 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, -- 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, -- 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0a, 0x6e, 0x65, 0x73, 0x74, -- 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x74, -- 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, -- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, -- 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, -- 0x08, 0x65, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x0f, 0x65, 0x78, 0x74, -- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x03, -- 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, -+ 0x09, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x64, 0x69, -+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, -+ 0x69, 0x6f, 0x6e, 0x22, 0xb9, 0x06, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, -+ 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x66, -+ 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, -+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, -+ 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, -+ 0x6f, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, -+ 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, -+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, -+ 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, -+ 0x74, 0x6f, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, -+ 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, -+ 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, -- 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, -- 0x6e, 0x67, 0x65, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, -- 0x6e, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x64, 0x65, 0x63, -- 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, -- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, -- 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, -- 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x63, 0x6c, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, -- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, -- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, -- 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, -- 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, -- 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, -+ 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0a, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, -+ 0x12, 0x41, 0x0a, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, -+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, -+ 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x08, 0x65, 0x6e, 0x75, 0x6d, 0x54, -+ 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, -+ 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, -- 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, -- 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, -- 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, -- 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x03, -- 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, -- 0x1a, 0x7a, 0x0a, 0x0e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, -- 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, -- 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, -- 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x6f, 0x70, -- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, -- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, -- 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, -- 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x37, 0x0a, 0x0d, -- 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, -- 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, -- 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, -- 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x7c, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, -- 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, -- 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, -- 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, -- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, -- 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, -- 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, -- 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, -- 0x80, 0x80, 0x02, 0x22, 0xc1, 0x06, 0x0a, 0x14, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, -- 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, -- 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, -- 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, -- 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, -- 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, -- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, -- 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, -- 0x61, 0x62, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3e, 0x0a, 0x04, 0x74, -- 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, -- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, -- 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, -- 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, -- 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, -- 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, -- 0x6e, 0x64, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, -- 0x6e, 0x64, 0x65, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, -- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, -- 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, -- 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, -- 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, -- 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, -- 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, -- 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, -- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, -- 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, -- 0x6e, 0x61, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, -- 0x33, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xb6, 0x02, 0x0a, 0x04, 0x54, 0x79, -- 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, -- 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, -- 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, -- 0x34, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, -- 0x36, 0x34, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, -- 0x33, 0x32, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, -- 0x45, 0x44, 0x36, 0x34, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, -- 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, -- 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, -- 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, -- 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, -- 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, -- 0x50, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, -- 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x54, -- 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, -- 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x0f, 0x12, 0x11, 0x0a, -- 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x10, -- 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, -- 0x11, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x36, 0x34, -- 0x10, 0x12, 0x22, 0x43, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x0e, 0x4c, -- 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, -- 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, -- 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x50, -- 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x03, 0x22, 0x63, 0x0a, 0x14, 0x4f, 0x6e, 0x65, 0x6f, 0x66, -- 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, -- 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, -- 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, -+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, -+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0e, 0x65, -+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x44, 0x0a, -+ 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x64, 0x65, 0x63, 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, -+ 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, -+ 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, -+ 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x44, -+ 0x65, 0x63, 0x6c, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, -+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, -+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, -+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, -+ 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, -+ 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, -+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, -+ 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, -+ 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, -+ 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, -+ 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, -+ 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x7a, 0x0a, 0x0e, 0x45, 0x78, -+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, -+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, -+ 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, -+ 0x03, 0x65, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, -+ 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, -+ 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, -+ 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, -+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x37, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, -+ 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, -+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, -+ 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, -+ 0xad, 0x04, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, -+ 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, -+ 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, -+ 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, -+ 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, -+ 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x0b, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, -+ 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, -+ 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, -+ 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0x88, 0x01, -+ 0x02, 0x52, 0x0b, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, -+ 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, -+ 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, -+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, -+ 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x65, 0x72, -+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x0a, -+ 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, -+ 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb3, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x63, -+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, -+ 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, -+ 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, -+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, -+ 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, -+ 0x65, 0x12, 0x23, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, -+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, -+ 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, -+ 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, -+ 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, -+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x34, -+ 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, -+ 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x43, 0x4c, 0x41, 0x52, 0x41, 0x54, 0x49, -+ 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, -+ 0x45, 0x44, 0x10, 0x01, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, -+ 0xc1, 0x06, 0x0a, 0x14, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, -+ 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, -+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, -+ 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, -+ 0x6d, 0x62, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, -+ 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, -+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, -+ 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, -+ 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, -+ 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, -+ 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, -+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, -+ 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, -+ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, -+ 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, -+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, -+ 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, -+ 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, -+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, -+ 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, -+ 0x66, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, -+ 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x4e, -+ 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, -- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, -- 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe3, 0x02, 0x0a, -- 0x13, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, -- 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, -- 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, -- 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, -- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, -- 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, -- 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, -- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, -- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, -- 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, -- 0x73, 0x12, 0x5d, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, -- 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, -- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, -- 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, -- 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, -- 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, -- 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, -- 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, -- 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x11, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, -- 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, -- 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, -- 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, -- 0x6e, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, -+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, -+ 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, -+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, -+ 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xb6, 0x02, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, -+ 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, -+ 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x02, 0x12, -+ 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x03, 0x12, -+ 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x04, -+ 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x05, -+ 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, -+ 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, -+ 0x33, 0x32, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, -+ 0x4c, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, -+ 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, 0x4f, -+ 0x55, 0x50, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, -+ 0x53, 0x41, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, -+ 0x59, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, -+ 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, -+ 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, -+ 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, -+ 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x10, 0x12, 0x0f, 0x0a, 0x0b, -+ 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x11, 0x12, 0x0f, 0x0a, -+ 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x12, 0x22, 0x43, -+ 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, -+ 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, -+ 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, -+ 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x50, 0x45, 0x41, 0x54, 0x45, -+ 0x44, 0x10, 0x03, 0x22, 0x63, 0x0a, 0x14, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, -+ 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, -+ 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, -+ 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, -+ 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, -+ 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, -+ 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x13, 0x45, 0x6e, 0x75, -+ 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, -+ 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, -+ 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, -+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, -+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, -+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, -+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, -+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, -+ 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, -+ 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, -+ 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, -+ 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, -+ 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, -+ 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, -+ 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, -+ 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, -+ 0x65, 0x1a, 0x3b, 0x0a, 0x11, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, -+ 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, -+ 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, -+ 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x83, -+ 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, -+ 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, -+ 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, -+ 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, -+ 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, -+ 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, -+ 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, -- 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, -- 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x07, 0x6f, -- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, -- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, -- 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, -- 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x72, -- 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, -- 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, -- 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, -- 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, -- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, -- 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, -- 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, -- 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, -- 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, -- 0x6e, 0x73, 0x22, 0x89, 0x02, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, -- 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, -- 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, -- 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, -- 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, -- 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, -- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, -- 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, -- 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, -- 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, -- 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x10, 0x63, 0x6c, -- 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x05, -- 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x63, 0x6c, 0x69, -- 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x10, -- 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, -- 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x73, -- 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x22, 0x91, -- 0x09, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, -- 0x0a, 0x0c, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, -- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x61, 0x76, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, -- 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, -- 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, -- 0x12, 0x6a, 0x61, 0x76, 0x61, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x6e, -- 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6d, 0x75, 0x6c, 0x74, -- 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, -- 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x6a, 0x61, 0x76, 0x61, 0x4d, 0x75, 0x6c, -- 0x74, 0x69, 0x70, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x6a, 0x61, -- 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x71, 0x75, 0x61, -- 0x6c, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, -- 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x19, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, -- 0x61, 0x74, 0x65, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x48, 0x61, 0x73, 0x68, -- 0x12, 0x3a, 0x0a, 0x16, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, -- 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x75, 0x74, 0x66, 0x38, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, -- 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x53, 0x74, 0x72, -- 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x74, 0x66, 0x38, 0x12, 0x53, 0x0a, 0x0c, -- 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, -- 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, -- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, -- 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x05, 0x53, -- 0x50, 0x45, 0x45, 0x44, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x46, 0x6f, -- 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, -- 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, -- 0x12, 0x35, 0x0a, 0x13, 0x63, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, -- 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, -- 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x63, 0x63, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, -- 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x15, 0x6a, 0x61, 0x76, 0x61, 0x5f, -- 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, -- 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, -- 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, -- 0x65, 0x73, 0x12, 0x35, 0x0a, 0x13, 0x70, 0x79, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, -- 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x3a, -- 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x70, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, -- 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x70, 0x68, 0x70, -- 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, -- 0x73, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x12, -- 0x70, 0x68, 0x70, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, -- 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, -- 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, -- 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, -- 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, -- 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, -- 0x62, 0x6c, 0x65, 0x41, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, -- 0x63, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, -- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, -- 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, -- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, -- 0x0f, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, -- 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, -- 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, -- 0x66, 0x69, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, -- 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, -- 0x68, 0x70, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, -- 0x0d, 0x70, 0x68, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, -- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, -- 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, -- 0x74, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, -- 0x28, 0x09, 0x52, 0x14, 0x70, 0x68, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, -- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, -- 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, -- 0x72, 0x75, 0x62, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x75, -- 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, -- 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, -- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, -- 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, -- 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, -- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, -- 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x10, 0x01, -- 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x02, 0x12, -- 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, -- 0x03, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x26, -- 0x10, 0x27, 0x22, 0xd1, 0x02, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, -- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, -- 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, -- 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, 0x6d, -- 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, -- 0x6d, 0x61, 0x74, 0x12, 0x4c, 0x0a, 0x1f, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, -- 0x72, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, -- 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, -- 0x6c, 0x73, 0x65, 0x52, 0x1c, 0x6e, 0x6f, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x44, -- 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, -- 0x72, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, -- 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, -- 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, -- 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x70, -- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, -- 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, -- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, -- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, -- 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, -- 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, -- 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, -- 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xe2, 0x03, 0x0a, 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, -- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, -- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, -- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, -- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x06, 0x53, 0x54, 0x52, -- 0x49, 0x4e, 0x47, 0x52, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, -- 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, -- 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, -- 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, -+ 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, -+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, -+ 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x6d, 0x65, 0x74, -+ 0x68, 0x6f, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, -+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, -+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, -+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x89, -+ 0x02, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, -+ 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, -+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, -+ 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, -+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x07, -+ 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, -+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, -+ 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, -+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, -+ 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, -+ 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, -+ 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, -+ 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, -+ 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, -+ 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x22, 0x91, 0x09, 0x0a, 0x0b, 0x46, -+ 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x61, -+ 0x76, 0x61, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x0b, 0x6a, 0x61, 0x76, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, -+ 0x14, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x73, -+ 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6a, 0x61, 0x76, -+ 0x61, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x12, -+ 0x35, 0x0a, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, -+ 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, -+ 0x6c, 0x73, 0x65, 0x52, 0x11, 0x6a, 0x61, 0x76, 0x61, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, -+ 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, -+ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x5f, 0x61, -+ 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, -+ 0x01, 0x52, 0x19, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, -+ 0x71, 0x75, 0x61, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3a, 0x0a, 0x16, -+ 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, -+ 0x6b, 0x5f, 0x75, 0x74, 0x66, 0x38, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, -+ 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, -+ 0x68, 0x65, 0x63, 0x6b, 0x55, 0x74, 0x66, 0x38, 0x12, 0x53, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, -+ 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, -+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, -+ 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, -+ 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, -+ 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x1d, 0x0a, -+ 0x0a, 0x67, 0x6f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, -+ 0x09, 0x52, 0x09, 0x67, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x13, -+ 0x63, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, -+ 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, -+ 0x52, 0x11, 0x63, 0x63, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, -+ 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x15, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, -+ 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, -+ 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x47, -+ 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x35, -+ 0x0a, 0x13, 0x70, 0x79, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, -+ 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, -+ 0x73, 0x65, 0x52, 0x11, 0x70, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, -+ 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x70, 0x68, 0x70, 0x5f, 0x67, 0x65, 0x6e, -+ 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x2a, 0x20, -+ 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x12, 0x70, 0x68, 0x70, 0x47, -+ 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x25, -+ 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, -+ 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, -+ 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, -+ 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x3a, -+ 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, -+ 0x72, 0x65, 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x63, 0x5f, 0x63, 0x6c, -+ 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, -+ 0x78, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, -+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x73, 0x68, -+ 0x61, 0x72, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, -+ 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x27, 0x20, 0x01, -+ 0x28, 0x09, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, -+ 0x28, 0x0a, 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, -+ 0x66, 0x69, 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x68, 0x70, 0x43, 0x6c, -+ 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x70, -+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x0c, 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x34, -+ 0x0a, 0x16, 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6e, -+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, -+ 0x70, 0x68, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, -+ 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, 0x5f, 0x70, 0x61, 0x63, -+ 0x6b, 0x61, 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x62, 0x79, -+ 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, -+ 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, -+ 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, -+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, -+ 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, -+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, -+ 0x6e, 0x22, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, -+ 0x65, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, -+ 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, -+ 0x49, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x2a, 0x09, 0x08, -+ 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x22, 0xbb, -+ 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, -+ 0x73, 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, -+ 0x5f, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, -+ 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, -+ 0x67, 0x65, 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, -+ 0x4c, 0x0a, 0x1f, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x64, -+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, -+ 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, -+ 0x1c, 0x6e, 0x6f, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, -+ 0x69, 0x70, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x25, 0x0a, -+ 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, -+ 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, -+ 0x61, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, -+ 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, -+ 0x79, 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, -+ 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, -+ 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, -+ 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, -+ 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, -+ 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, -+ 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, -+ 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, -+ 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, -+ 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, -+ 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, -+ 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0x85, 0x09, 0x0a, -+ 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, -+ 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, -+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, -+ 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, -+ 0x65, 0x3a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x52, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, -+ 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, -+ 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, -+ 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, -+ 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, -+ 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x52, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, -+ 0x65, 0x12, 0x19, 0x0a, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, -+ 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x12, 0x2e, 0x0a, 0x0f, -+ 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x18, -+ 0x0f, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0e, 0x75, 0x6e, -+ 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x4c, 0x61, 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, -+ 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, -+ 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, -+ 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, -+ 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x12, 0x28, -+ 0x0a, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x10, -+ 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, -+ 0x75, 0x67, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x4b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x65, -+ 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, -+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, -+ 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, -+ 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, -+ 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, -+ 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, -+ 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, -+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, -+ 0x74, 0x12, 0x48, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, -+ 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, -- 0x73, 0x2e, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, -- 0x4d, 0x41, 0x4c, 0x52, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x04, 0x6c, -- 0x61, 0x7a, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, -- 0x52, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, -- 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, -- 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, -- 0x04, 0x77, 0x65, 0x61, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, -- 0x73, 0x65, 0x52, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, -- 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, -- 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, -- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, -- 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, -- 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, -- 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x05, 0x43, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, -- 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x52, 0x44, 0x10, -- 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x49, 0x45, 0x43, -- 0x45, 0x10, 0x02, 0x22, 0x35, 0x0a, 0x06, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, -- 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, -- 0x4a, 0x53, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4a, -- 0x53, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, -- 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x73, 0x0a, 0x0c, 0x4f, -- 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, -+ 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, -+ 0x70, 0x65, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, - 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, -- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, -- 0x22, 0xc0, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, -- 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, -- 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x6c, 0x69, 0x61, -- 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, -- 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, -- 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, -- 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, -- 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, -- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, -- 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, -- 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, -- 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, -- 0x05, 0x10, 0x06, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, -+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x05, 0x43, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, -+ 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, -+ 0x52, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, -+ 0x49, 0x45, 0x43, 0x45, 0x10, 0x02, 0x22, 0x35, 0x0a, 0x06, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, -+ 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, -+ 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, -+ 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x22, 0x55, 0x0a, -+ 0x0f, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, -+ 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, -+ 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, 0x4e, -+ 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x14, -+ 0x0a, 0x10, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, -+ 0x43, 0x45, 0x10, 0x02, 0x22, 0x8c, 0x02, 0x0a, 0x10, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, -+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, -+ 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, -+ 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, -+ 0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x41, 0x52, 0x47, -+ 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, -+ 0x4e, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, -+ 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, -+ 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, -+ 0x45, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x52, -+ 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x4e, 0x45, 0x4f, 0x46, 0x10, 0x05, -+ 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, -+ 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x06, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, -+ 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, -+ 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, -+ 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x08, 0x12, 0x16, 0x0a, 0x12, 0x54, -+ 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, -+ 0x44, 0x10, 0x09, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, -+ 0x08, 0x04, 0x10, 0x05, 0x22, 0x73, 0x0a, 0x0c, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, -+ 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, -+ 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, -+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, -+ 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, -+ 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, -+ 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x98, 0x02, 0x0a, 0x0b, 0x45, 0x6e, -+ 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, -+ 0x6f, 0x77, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, -+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, -+ 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, -+ 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, -+ 0x64, 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, -+ 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, -+ 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, -+ 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, -+ 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, -+ 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, -+ 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, -+ 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, -+ 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, -+ 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, -+ 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, -+ 0x08, 0x05, 0x10, 0x06, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, -+ 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, -+ 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, -+ 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, -+ 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, -+ 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, -+ 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, -+ 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, -+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, -+ 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, -+ 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, -- 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, -+ 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, -@@ -3385,97 +4012,95 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ - 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, -- 0x80, 0x80, 0x80, 0x02, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, -- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, -- 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, -- 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, -- 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, -- 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, -+ 0x80, 0x80, 0x80, 0x02, 0x22, 0xe0, 0x02, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, -+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, -+ 0x61, 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, -+ 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x71, 0x0a, -+ 0x11, 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, -+ 0x65, 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, -+ 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, -+ 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, -+ 0x4f, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x10, -+ 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, -+ 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, -+ 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, -+ 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, -+ 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, -+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, -+ 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x10, 0x49, 0x64, -+ 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, -+ 0x0a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, -+ 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x5f, 0x53, 0x49, -+ 0x44, 0x45, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, -+ 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, -+ 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x9a, 0x03, 0x0a, 0x13, 0x55, 0x6e, 0x69, 0x6e, -+ 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, -+ 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, -- 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, -- 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, -- 0x80, 0x80, 0x02, 0x22, 0xe0, 0x02, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, -- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, -- 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, -- 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x71, 0x0a, 0x11, -- 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, -- 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, -- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, -- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, -- 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, -- 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x10, 0x69, -- 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, -- 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, -- 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, -- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, -- 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, -- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, -- 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x10, 0x49, 0x64, 0x65, -- 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, -- 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, -- 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x5f, 0x53, 0x49, 0x44, -- 0x45, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, -- 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, 0x07, -- 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x9a, 0x03, 0x0a, 0x13, 0x55, 0x6e, 0x69, 0x6e, 0x74, -- 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, -- 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, -- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, -- 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, -- 0x6f, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, -- 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x5f, -- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x64, 0x65, -- 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, -- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, -- 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, -- 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, -- 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, -- 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, -- 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, -- 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, -- 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, -- 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, -- 0x0c, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, -- 0x0a, 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, -- 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, -- 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x4a, 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x50, -- 0x61, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, -- 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, -- 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, -- 0x18, 0x02, 0x20, 0x02, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, -- 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x02, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, -- 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, -- 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, -- 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, -- 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xce, 0x01, 0x0a, -- 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, -- 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, -- 0x68, 0x12, 0x16, 0x0a, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x42, -- 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x65, 0x61, -- 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, -- 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, -- 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, -- 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, -- 0x10, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, -- 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, -- 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, -- 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x74, -- 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd1, 0x01, -- 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, -- 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, -- 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, -- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, -- 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, -- 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, -- 0x6f, 0x6e, 0x1a, 0x6d, 0x0a, 0x0a, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, -- 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, -- 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, -- 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, -- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x65, 0x67, -- 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x12, -- 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, -- 0x64, 0x42, 0x7e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, -+ 0x69, 0x6f, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x52, 0x04, 0x6e, 0x61, -+ 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, -+ 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x64, -+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, -+ 0x12, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, -+ 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, -+ 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6e, -+ 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, -+ 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, -+ 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, -+ 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, -+ 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, -+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, -+ 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, -+ 0x27, 0x0a, 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, -+ 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, -+ 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x4a, 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, -+ 0x50, 0x61, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, -+ 0x74, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, -+ 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, -+ 0x6e, 0x18, 0x02, 0x20, 0x02, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, -+ 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x02, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, -+ 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, -+ 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, -+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, -+ 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, -+ 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xce, 0x01, -+ 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, -+ 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, -+ 0x74, 0x68, 0x12, 0x16, 0x0a, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, -+ 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x65, -+ 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, -+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, -+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, -+ 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, -+ 0x52, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, -+ 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, -+ 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, -+ 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, -+ 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd0, -+ 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, -+ 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, -+ 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, -+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, -+ 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, -+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, -+ 0x69, 0x6f, 0x6e, 0x1a, 0xeb, 0x01, 0x0a, 0x0a, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, -+ 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, -+ 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, -+ 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, -+ 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, -+ 0x65, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, -+ 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, -+ 0x65, 0x6e, 0x64, 0x12, 0x52, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x18, -+ 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, -+ 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, -+ 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, -+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x52, 0x08, 0x73, -+ 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x22, 0x28, 0x0a, 0x08, 0x53, 0x65, 0x6d, 0x61, 0x6e, -+ 0x74, 0x69, 0x63, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, -+ 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x10, -+ 0x02, 0x42, 0x7e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x48, 0x01, 0x5a, 0x2d, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, -@@ -3498,92 +4123,103 @@ func file_google_protobuf_descriptor_proto_rawDescGZIP() []byte { - return file_google_protobuf_descriptor_proto_rawDescData - } - --var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 6) --var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 27) -+var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -+var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 28) - var file_google_protobuf_descriptor_proto_goTypes = []interface{}{ -- (FieldDescriptorProto_Type)(0), // 0: google.protobuf.FieldDescriptorProto.Type -- (FieldDescriptorProto_Label)(0), // 1: google.protobuf.FieldDescriptorProto.Label -- (FileOptions_OptimizeMode)(0), // 2: google.protobuf.FileOptions.OptimizeMode -- (FieldOptions_CType)(0), // 3: google.protobuf.FieldOptions.CType -- (FieldOptions_JSType)(0), // 4: google.protobuf.FieldOptions.JSType -- (MethodOptions_IdempotencyLevel)(0), // 5: google.protobuf.MethodOptions.IdempotencyLevel -- (*FileDescriptorSet)(nil), // 6: google.protobuf.FileDescriptorSet -- (*FileDescriptorProto)(nil), // 7: google.protobuf.FileDescriptorProto -- (*DescriptorProto)(nil), // 8: google.protobuf.DescriptorProto -- (*ExtensionRangeOptions)(nil), // 9: google.protobuf.ExtensionRangeOptions -- (*FieldDescriptorProto)(nil), // 10: google.protobuf.FieldDescriptorProto -- (*OneofDescriptorProto)(nil), // 11: google.protobuf.OneofDescriptorProto -- (*EnumDescriptorProto)(nil), // 12: google.protobuf.EnumDescriptorProto -- (*EnumValueDescriptorProto)(nil), // 13: google.protobuf.EnumValueDescriptorProto -- (*ServiceDescriptorProto)(nil), // 14: google.protobuf.ServiceDescriptorProto -- (*MethodDescriptorProto)(nil), // 15: google.protobuf.MethodDescriptorProto -- (*FileOptions)(nil), // 16: google.protobuf.FileOptions -- (*MessageOptions)(nil), // 17: google.protobuf.MessageOptions -- (*FieldOptions)(nil), // 18: google.protobuf.FieldOptions -- (*OneofOptions)(nil), // 19: google.protobuf.OneofOptions -- (*EnumOptions)(nil), // 20: google.protobuf.EnumOptions -- (*EnumValueOptions)(nil), // 21: google.protobuf.EnumValueOptions -- (*ServiceOptions)(nil), // 22: google.protobuf.ServiceOptions -- (*MethodOptions)(nil), // 23: google.protobuf.MethodOptions -- (*UninterpretedOption)(nil), // 24: google.protobuf.UninterpretedOption -- (*SourceCodeInfo)(nil), // 25: google.protobuf.SourceCodeInfo -- (*GeneratedCodeInfo)(nil), // 26: google.protobuf.GeneratedCodeInfo -- (*DescriptorProto_ExtensionRange)(nil), // 27: google.protobuf.DescriptorProto.ExtensionRange -- (*DescriptorProto_ReservedRange)(nil), // 28: google.protobuf.DescriptorProto.ReservedRange -- (*EnumDescriptorProto_EnumReservedRange)(nil), // 29: google.protobuf.EnumDescriptorProto.EnumReservedRange -- (*UninterpretedOption_NamePart)(nil), // 30: google.protobuf.UninterpretedOption.NamePart -- (*SourceCodeInfo_Location)(nil), // 31: google.protobuf.SourceCodeInfo.Location -- (*GeneratedCodeInfo_Annotation)(nil), // 32: google.protobuf.GeneratedCodeInfo.Annotation -+ (ExtensionRangeOptions_VerificationState)(0), // 0: google.protobuf.ExtensionRangeOptions.VerificationState -+ (FieldDescriptorProto_Type)(0), // 1: google.protobuf.FieldDescriptorProto.Type -+ (FieldDescriptorProto_Label)(0), // 2: google.protobuf.FieldDescriptorProto.Label -+ (FileOptions_OptimizeMode)(0), // 3: google.protobuf.FileOptions.OptimizeMode -+ (FieldOptions_CType)(0), // 4: google.protobuf.FieldOptions.CType -+ (FieldOptions_JSType)(0), // 5: google.protobuf.FieldOptions.JSType -+ (FieldOptions_OptionRetention)(0), // 6: google.protobuf.FieldOptions.OptionRetention -+ (FieldOptions_OptionTargetType)(0), // 7: google.protobuf.FieldOptions.OptionTargetType -+ (MethodOptions_IdempotencyLevel)(0), // 8: google.protobuf.MethodOptions.IdempotencyLevel -+ (GeneratedCodeInfo_Annotation_Semantic)(0), // 9: google.protobuf.GeneratedCodeInfo.Annotation.Semantic -+ (*FileDescriptorSet)(nil), // 10: google.protobuf.FileDescriptorSet -+ (*FileDescriptorProto)(nil), // 11: google.protobuf.FileDescriptorProto -+ (*DescriptorProto)(nil), // 12: google.protobuf.DescriptorProto -+ (*ExtensionRangeOptions)(nil), // 13: google.protobuf.ExtensionRangeOptions -+ (*FieldDescriptorProto)(nil), // 14: google.protobuf.FieldDescriptorProto -+ (*OneofDescriptorProto)(nil), // 15: google.protobuf.OneofDescriptorProto -+ (*EnumDescriptorProto)(nil), // 16: google.protobuf.EnumDescriptorProto -+ (*EnumValueDescriptorProto)(nil), // 17: google.protobuf.EnumValueDescriptorProto -+ (*ServiceDescriptorProto)(nil), // 18: google.protobuf.ServiceDescriptorProto -+ (*MethodDescriptorProto)(nil), // 19: google.protobuf.MethodDescriptorProto -+ (*FileOptions)(nil), // 20: google.protobuf.FileOptions -+ (*MessageOptions)(nil), // 21: google.protobuf.MessageOptions -+ (*FieldOptions)(nil), // 22: google.protobuf.FieldOptions -+ (*OneofOptions)(nil), // 23: google.protobuf.OneofOptions -+ (*EnumOptions)(nil), // 24: google.protobuf.EnumOptions -+ (*EnumValueOptions)(nil), // 25: google.protobuf.EnumValueOptions -+ (*ServiceOptions)(nil), // 26: google.protobuf.ServiceOptions -+ (*MethodOptions)(nil), // 27: google.protobuf.MethodOptions -+ (*UninterpretedOption)(nil), // 28: google.protobuf.UninterpretedOption -+ (*SourceCodeInfo)(nil), // 29: google.protobuf.SourceCodeInfo -+ (*GeneratedCodeInfo)(nil), // 30: google.protobuf.GeneratedCodeInfo -+ (*DescriptorProto_ExtensionRange)(nil), // 31: google.protobuf.DescriptorProto.ExtensionRange -+ (*DescriptorProto_ReservedRange)(nil), // 32: google.protobuf.DescriptorProto.ReservedRange -+ (*ExtensionRangeOptions_Declaration)(nil), // 33: google.protobuf.ExtensionRangeOptions.Declaration -+ (*EnumDescriptorProto_EnumReservedRange)(nil), // 34: google.protobuf.EnumDescriptorProto.EnumReservedRange -+ (*UninterpretedOption_NamePart)(nil), // 35: google.protobuf.UninterpretedOption.NamePart -+ (*SourceCodeInfo_Location)(nil), // 36: google.protobuf.SourceCodeInfo.Location -+ (*GeneratedCodeInfo_Annotation)(nil), // 37: google.protobuf.GeneratedCodeInfo.Annotation - } - var file_google_protobuf_descriptor_proto_depIdxs = []int32{ -- 7, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto -- 8, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto -- 12, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto -- 14, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto -- 10, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto -- 16, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions -- 25, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo -- 10, // 7: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto -- 10, // 8: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto -- 8, // 9: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto -- 12, // 10: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto -- 27, // 11: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange -- 11, // 12: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto -- 17, // 13: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions -- 28, // 14: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange -- 24, // 15: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 1, // 16: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label -- 0, // 17: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type -- 18, // 18: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions -- 19, // 19: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions -- 13, // 20: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto -- 20, // 21: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions -- 29, // 22: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange -- 21, // 23: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions -- 15, // 24: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto -- 22, // 25: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions -- 23, // 26: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions -- 2, // 27: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode -- 24, // 28: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 24, // 29: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 3, // 30: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType -- 4, // 31: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType -- 24, // 32: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 24, // 33: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 24, // 34: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 24, // 35: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 24, // 36: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 5, // 37: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel -- 24, // 38: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -- 30, // 39: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart -- 31, // 40: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location -- 32, // 41: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation -- 9, // 42: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions -- 43, // [43:43] is the sub-list for method output_type -- 43, // [43:43] is the sub-list for method input_type -- 43, // [43:43] is the sub-list for extension type_name -- 43, // [43:43] is the sub-list for extension extendee -- 0, // [0:43] is the sub-list for field type_name -+ 11, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto -+ 12, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto -+ 16, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto -+ 18, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto -+ 14, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto -+ 20, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions -+ 29, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo -+ 14, // 7: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto -+ 14, // 8: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto -+ 12, // 9: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto -+ 16, // 10: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto -+ 31, // 11: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange -+ 15, // 12: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto -+ 21, // 13: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions -+ 32, // 14: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange -+ 28, // 15: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 33, // 16: google.protobuf.ExtensionRangeOptions.declaration:type_name -> google.protobuf.ExtensionRangeOptions.Declaration -+ 0, // 17: google.protobuf.ExtensionRangeOptions.verification:type_name -> google.protobuf.ExtensionRangeOptions.VerificationState -+ 2, // 18: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label -+ 1, // 19: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type -+ 22, // 20: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions -+ 23, // 21: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions -+ 17, // 22: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto -+ 24, // 23: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions -+ 34, // 24: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange -+ 25, // 25: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions -+ 19, // 26: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto -+ 26, // 27: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions -+ 27, // 28: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions -+ 3, // 29: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode -+ 28, // 30: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 28, // 31: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 4, // 32: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType -+ 5, // 33: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType -+ 6, // 34: google.protobuf.FieldOptions.retention:type_name -> google.protobuf.FieldOptions.OptionRetention -+ 7, // 35: google.protobuf.FieldOptions.target:type_name -> google.protobuf.FieldOptions.OptionTargetType -+ 7, // 36: google.protobuf.FieldOptions.targets:type_name -> google.protobuf.FieldOptions.OptionTargetType -+ 28, // 37: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 28, // 38: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 28, // 39: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 28, // 40: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 28, // 41: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 8, // 42: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel -+ 28, // 43: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption -+ 35, // 44: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart -+ 36, // 45: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location -+ 37, // 46: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation -+ 13, // 47: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions -+ 9, // 48: google.protobuf.GeneratedCodeInfo.Annotation.semantic:type_name -> google.protobuf.GeneratedCodeInfo.Annotation.Semantic -+ 49, // [49:49] is the sub-list for method output_type -+ 49, // [49:49] is the sub-list for method input_type -+ 49, // [49:49] is the sub-list for extension type_name -+ 49, // [49:49] is the sub-list for extension extendee -+ 0, // [0:49] is the sub-list for field type_name - } - - func init() { file_google_protobuf_descriptor_proto_init() } -@@ -3887,7 +4523,7 @@ func file_google_protobuf_descriptor_proto_init() { - } - } - file_google_protobuf_descriptor_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { -- switch v := v.(*EnumDescriptorProto_EnumReservedRange); i { -+ switch v := v.(*ExtensionRangeOptions_Declaration); i { - case 0: - return &v.state - case 1: -@@ -3899,7 +4535,7 @@ func file_google_protobuf_descriptor_proto_init() { - } - } - file_google_protobuf_descriptor_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { -- switch v := v.(*UninterpretedOption_NamePart); i { -+ switch v := v.(*EnumDescriptorProto_EnumReservedRange); i { - case 0: - return &v.state - case 1: -@@ -3911,7 +4547,7 @@ func file_google_protobuf_descriptor_proto_init() { - } - } - file_google_protobuf_descriptor_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { -- switch v := v.(*SourceCodeInfo_Location); i { -+ switch v := v.(*UninterpretedOption_NamePart); i { - case 0: - return &v.state - case 1: -@@ -3923,6 +4559,18 @@ func file_google_protobuf_descriptor_proto_init() { - } - } - file_google_protobuf_descriptor_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { -+ switch v := v.(*SourceCodeInfo_Location); i { -+ case 0: -+ return &v.state -+ case 1: -+ return &v.sizeCache -+ case 2: -+ return &v.unknownFields -+ default: -+ return nil -+ } -+ } -+ file_google_protobuf_descriptor_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GeneratedCodeInfo_Annotation); i { - case 0: - return &v.state -@@ -3940,8 +4588,8 @@ func file_google_protobuf_descriptor_proto_init() { - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_protobuf_descriptor_proto_rawDesc, -- NumEnums: 6, -- NumMessages: 27, -+ NumEnums: 10, -+ NumMessages: 28, - NumExtensions: 0, - NumServices: 0, - }, -diff --git a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go -old mode 100644 -new mode 100755 -index 8c10797..580b232 ---- a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go -+++ b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go -@@ -37,8 +37,7 @@ - // It is functionally a tuple of the full name of the remote message type and - // the serialized bytes of the remote message value. - // --// --// Constructing an Any -+// # Constructing an Any - // - // An Any message containing another message value is constructed using New: - // -@@ -48,8 +47,7 @@ - // } - // ... // make use of any - // --// --// Unmarshaling an Any -+// # Unmarshaling an Any - // - // With a populated Any message, the underlying message can be serialized into - // a remote concrete message value in a few ways. -@@ -95,8 +93,7 @@ - // listed in the case clauses are linked into the Go binary and therefore also - // registered in the global registry. - // --// --// Type checking an Any -+// # Type checking an Any - // - // In order to type check whether an Any message represents some other message, - // then use the MessageIs method: -@@ -115,7 +112,6 @@ - // } - // ... // make use of m - // } --// - package anypb - - import ( -@@ -136,45 +132,49 @@ import ( - // - // Example 1: Pack and unpack a message in C++. - // --// Foo foo = ...; --// Any any; --// any.PackFrom(foo); --// ... --// if (any.UnpackTo(&foo)) { --// ... --// } -+// Foo foo = ...; -+// Any any; -+// any.PackFrom(foo); -+// ... -+// if (any.UnpackTo(&foo)) { -+// ... -+// } - // - // Example 2: Pack and unpack a message in Java. - // --// Foo foo = ...; --// Any any = Any.pack(foo); --// ... --// if (any.is(Foo.class)) { --// foo = any.unpack(Foo.class); --// } --// --// Example 3: Pack and unpack a message in Python. --// --// foo = Foo(...) --// any = Any() --// any.Pack(foo) --// ... --// if any.Is(Foo.DESCRIPTOR): --// any.Unpack(foo) --// ... --// --// Example 4: Pack and unpack a message in Go --// --// foo := &pb.Foo{...} --// any, err := anypb.New(foo) --// if err != nil { --// ... --// } --// ... --// foo := &pb.Foo{} --// if err := any.UnmarshalTo(foo); err != nil { --// ... --// } -+// Foo foo = ...; -+// Any any = Any.pack(foo); -+// ... -+// if (any.is(Foo.class)) { -+// foo = any.unpack(Foo.class); -+// } -+// // or ... -+// if (any.isSameTypeAs(Foo.getDefaultInstance())) { -+// foo = any.unpack(Foo.getDefaultInstance()); -+// } -+// -+// Example 3: Pack and unpack a message in Python. -+// -+// foo = Foo(...) -+// any = Any() -+// any.Pack(foo) -+// ... -+// if any.Is(Foo.DESCRIPTOR): -+// any.Unpack(foo) -+// ... -+// -+// Example 4: Pack and unpack a message in Go -+// -+// foo := &pb.Foo{...} -+// any, err := anypb.New(foo) -+// if err != nil { -+// ... -+// } -+// ... -+// foo := &pb.Foo{} -+// if err := any.UnmarshalTo(foo); err != nil { -+// ... -+// } - // - // The pack methods provided by protobuf library will by default use - // 'type.googleapis.com/full.type.name' as the type URL and the unpack -@@ -182,35 +182,33 @@ import ( - // in the type URL, for example "foo.bar.com/x/y.z" will yield type - // name "y.z". - // --// - // JSON - // ==== - // The JSON representation of an `Any` value uses the regular - // representation of the deserialized, embedded message, with an - // additional field `@type` which contains the type URL. Example: - // --// package google.profile; --// message Person { --// string first_name = 1; --// string last_name = 2; --// } -+// package google.profile; -+// message Person { -+// string first_name = 1; -+// string last_name = 2; -+// } - // --// { --// "@type": "type.googleapis.com/google.profile.Person", --// "firstName": , --// "lastName": --// } -+// { -+// "@type": "type.googleapis.com/google.profile.Person", -+// "firstName": , -+// "lastName": -+// } - // - // If the embedded message type is well-known and has a custom JSON - // representation, that representation will be embedded adding a field - // `value` which holds the custom JSON in addition to the `@type` - // field. Example (for message [google.protobuf.Duration][]): - // --// { --// "@type": "type.googleapis.com/google.protobuf.Duration", --// "value": "1.212s" --// } --// -+// { -+// "@type": "type.googleapis.com/google.protobuf.Duration", -+// "value": "1.212s" -+// } - type Any struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache -@@ -228,14 +226,14 @@ type Any struct { - // scheme `http`, `https`, or no scheme, one can optionally set up a type - // server that maps type URLs to message definitions as follows: - // -- // * If no scheme is provided, `https` is assumed. -- // * An HTTP GET on the URL must yield a [google.protobuf.Type][] -- // value in binary format, or produce an error. -- // * Applications are allowed to cache lookup results based on the -- // URL, or have them precompiled into a binary to avoid any -- // lookup. Therefore, binary compatibility needs to be preserved -- // on changes to types. (Use versioned type names to manage -- // breaking changes.) -+ // - If no scheme is provided, `https` is assumed. -+ // - An HTTP GET on the URL must yield a [google.protobuf.Type][] -+ // value in binary format, or produce an error. -+ // - Applications are allowed to cache lookup results based on the -+ // URL, or have them precompiled into a binary to avoid any -+ // lookup. Therefore, binary compatibility needs to be preserved -+ // on changes to types. (Use versioned type names to manage -+ // breaking changes.) - // - // Note: this functionality is not currently available in the official - // protobuf release, and it is not used for type URLs beginning with -@@ -243,7 +241,6 @@ type Any struct { - // - // Schemes other than `http`, `https` (or the empty scheme) might be - // used with implementation specific semantics. -- // - TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` - // Must be a valid serialized protocol buffer of the above specified type. - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -diff --git a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go -old mode 100644 -new mode 100755 -index a583ca2..df709a8 ---- a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go -+++ b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go -@@ -35,8 +35,7 @@ - // - // The Duration message represents a signed span of time. - // --// --// Conversion to a Go Duration -+// # Conversion to a Go Duration - // - // The AsDuration method can be used to convert a Duration message to a - // standard Go time.Duration value: -@@ -65,15 +64,13 @@ - // the resulting value to the closest representable value (e.g., math.MaxInt64 - // for positive overflow and math.MinInt64 for negative overflow). - // --// --// Conversion from a Go Duration -+// # Conversion from a Go Duration - // - // The durationpb.New function can be used to construct a Duration message - // from a standard Go time.Duration value: - // - // dur := durationpb.New(d) - // ... // make use of d as a *durationpb.Duration --// - package durationpb - - import ( -@@ -96,43 +93,43 @@ import ( - // - // Example 1: Compute Duration from two Timestamps in pseudo code. - // --// Timestamp start = ...; --// Timestamp end = ...; --// Duration duration = ...; -+// Timestamp start = ...; -+// Timestamp end = ...; -+// Duration duration = ...; - // --// duration.seconds = end.seconds - start.seconds; --// duration.nanos = end.nanos - start.nanos; -+// duration.seconds = end.seconds - start.seconds; -+// duration.nanos = end.nanos - start.nanos; - // --// if (duration.seconds < 0 && duration.nanos > 0) { --// duration.seconds += 1; --// duration.nanos -= 1000000000; --// } else if (duration.seconds > 0 && duration.nanos < 0) { --// duration.seconds -= 1; --// duration.nanos += 1000000000; --// } -+// if (duration.seconds < 0 && duration.nanos > 0) { -+// duration.seconds += 1; -+// duration.nanos -= 1000000000; -+// } else if (duration.seconds > 0 && duration.nanos < 0) { -+// duration.seconds -= 1; -+// duration.nanos += 1000000000; -+// } - // - // Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. - // --// Timestamp start = ...; --// Duration duration = ...; --// Timestamp end = ...; -+// Timestamp start = ...; -+// Duration duration = ...; -+// Timestamp end = ...; - // --// end.seconds = start.seconds + duration.seconds; --// end.nanos = start.nanos + duration.nanos; -+// end.seconds = start.seconds + duration.seconds; -+// end.nanos = start.nanos + duration.nanos; - // --// if (end.nanos < 0) { --// end.seconds -= 1; --// end.nanos += 1000000000; --// } else if (end.nanos >= 1000000000) { --// end.seconds += 1; --// end.nanos -= 1000000000; --// } -+// if (end.nanos < 0) { -+// end.seconds -= 1; -+// end.nanos += 1000000000; -+// } else if (end.nanos >= 1000000000) { -+// end.seconds += 1; -+// end.nanos -= 1000000000; -+// } - // - // Example 3: Compute Duration from datetime.timedelta in Python. - // --// td = datetime.timedelta(days=3, minutes=10) --// duration = Duration() --// duration.FromTimedelta(td) -+// td = datetime.timedelta(days=3, minutes=10) -+// duration = Duration() -+// duration.FromTimedelta(td) - // - // # JSON Mapping - // -@@ -143,8 +140,6 @@ import ( - // encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should - // be expressed in JSON format as "3.000000001s", and 3 seconds and 1 - // microsecond should be expressed in JSON format as "3.000001s". --// --// - type Duration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache -diff --git a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go -old mode 100644 -new mode 100755 -index c9ae921..81511a3 ---- a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go -+++ b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go -@@ -36,8 +36,7 @@ - // The Timestamp message represents a timestamp, - // an instant in time since the Unix epoch (January 1st, 1970). - // --// --// Conversion to a Go Time -+// # Conversion to a Go Time - // - // The AsTime method can be used to convert a Timestamp message to a - // standard Go time.Time value in UTC: -@@ -59,8 +58,7 @@ - // ... // handle error - // } - // --// --// Conversion from a Go Time -+// # Conversion from a Go Time - // - // The timestamppb.New function can be used to construct a Timestamp message - // from a standard Go time.Time value: -@@ -72,7 +70,6 @@ - // - // ts := timestamppb.Now() - // ... // make use of ts as a *timestamppb.Timestamp --// - package timestamppb - - import ( -@@ -101,52 +98,50 @@ import ( - // - // Example 1: Compute Timestamp from POSIX `time()`. - // --// Timestamp timestamp; --// timestamp.set_seconds(time(NULL)); --// timestamp.set_nanos(0); -+// Timestamp timestamp; -+// timestamp.set_seconds(time(NULL)); -+// timestamp.set_nanos(0); - // - // Example 2: Compute Timestamp from POSIX `gettimeofday()`. - // --// struct timeval tv; --// gettimeofday(&tv, NULL); -+// struct timeval tv; -+// gettimeofday(&tv, NULL); - // --// Timestamp timestamp; --// timestamp.set_seconds(tv.tv_sec); --// timestamp.set_nanos(tv.tv_usec * 1000); -+// Timestamp timestamp; -+// timestamp.set_seconds(tv.tv_sec); -+// timestamp.set_nanos(tv.tv_usec * 1000); - // - // Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. - // --// FILETIME ft; --// GetSystemTimeAsFileTime(&ft); --// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; -+// FILETIME ft; -+// GetSystemTimeAsFileTime(&ft); -+// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; - // --// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z --// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. --// Timestamp timestamp; --// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); --// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); -+// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z -+// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. -+// Timestamp timestamp; -+// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); -+// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); - // - // Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. - // --// long millis = System.currentTimeMillis(); --// --// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) --// .setNanos((int) ((millis % 1000) * 1000000)).build(); -+// long millis = System.currentTimeMillis(); - // -+// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) -+// .setNanos((int) ((millis % 1000) * 1000000)).build(); - // - // Example 5: Compute Timestamp from Java `Instant.now()`. - // --// Instant now = Instant.now(); --// --// Timestamp timestamp = --// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) --// .setNanos(now.getNano()).build(); -+// Instant now = Instant.now(); - // -+// Timestamp timestamp = -+// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) -+// .setNanos(now.getNano()).build(); - // - // Example 6: Compute Timestamp from current time in Python. - // --// timestamp = Timestamp() --// timestamp.GetCurrentTime() -+// timestamp = Timestamp() -+// timestamp.GetCurrentTime() - // - // # JSON Mapping - // -@@ -172,10 +167,8 @@ import ( - // [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with - // the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use - // the Joda Time's [`ISODateTimeFormat.dateTime()`]( --// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D -+// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() - // ) to obtain a formatter capable of generating timestamps in this format. --// --// - type Timestamp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache -diff --git a/vendor/gopkg.in/inf.v0/LICENSE b/vendor/gopkg.in/inf.v0/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/inf.v0/dec.go b/vendor/gopkg.in/inf.v0/dec.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/inf.v0/rounder.go b/vendor/gopkg.in/inf.v0/rounder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/.travis.yml b/vendor/gopkg.in/yaml.v2/.travis.yml -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/LICENSE b/vendor/gopkg.in/yaml.v2/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/LICENSE.libyaml b/vendor/gopkg.in/yaml.v2/LICENSE.libyaml -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/NOTICE b/vendor/gopkg.in/yaml.v2/NOTICE -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/README.md b/vendor/gopkg.in/yaml.v2/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/apic.go b/vendor/gopkg.in/yaml.v2/apic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/decode.go b/vendor/gopkg.in/yaml.v2/decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/emitterc.go b/vendor/gopkg.in/yaml.v2/emitterc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/encode.go b/vendor/gopkg.in/yaml.v2/encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/parserc.go b/vendor/gopkg.in/yaml.v2/parserc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/readerc.go b/vendor/gopkg.in/yaml.v2/readerc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/sorter.go b/vendor/gopkg.in/yaml.v2/sorter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/writerc.go b/vendor/gopkg.in/yaml.v2/writerc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/yamlh.go b/vendor/gopkg.in/yaml.v2/yamlh.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v2/yamlprivateh.go b/vendor/gopkg.in/yaml.v2/yamlprivateh.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/LICENSE b/vendor/gopkg.in/yaml.v3/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/NOTICE b/vendor/gopkg.in/yaml.v3/NOTICE -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/README.md b/vendor/gopkg.in/yaml.v3/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/apic.go b/vendor/gopkg.in/yaml.v3/apic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/decode.go b/vendor/gopkg.in/yaml.v3/decode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/emitterc.go b/vendor/gopkg.in/yaml.v3/emitterc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/encode.go b/vendor/gopkg.in/yaml.v3/encode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/parserc.go b/vendor/gopkg.in/yaml.v3/parserc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/readerc.go b/vendor/gopkg.in/yaml.v3/readerc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/resolve.go b/vendor/gopkg.in/yaml.v3/resolve.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/scannerc.go b/vendor/gopkg.in/yaml.v3/scannerc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/sorter.go b/vendor/gopkg.in/yaml.v3/sorter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/writerc.go b/vendor/gopkg.in/yaml.v3/writerc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/yaml.go b/vendor/gopkg.in/yaml.v3/yaml.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/yamlh.go b/vendor/gopkg.in/yaml.v3/yamlh.go -old mode 100644 -new mode 100755 -diff --git a/vendor/gopkg.in/yaml.v3/yamlprivateh.go b/vendor/gopkg.in/yaml.v3/yamlprivateh.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/LICENSE b/vendor/k8s.io/api/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1/doc.go b/vendor/k8s.io/api/admissionregistration/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go b/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1/generated.proto b/vendor/k8s.io/api/admissionregistration/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1/register.go b/vendor/k8s.io/api/admissionregistration/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1/types.go b/vendor/k8s.io/api/admissionregistration/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/admissionregistration/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go b/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go b/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto b/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/register.go b/vendor/k8s.io/api/admissionregistration/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/types.go b/vendor/k8s.io/api/admissionregistration/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apiserverinternal/v1alpha1/doc.go b/vendor/k8s.io/api/apiserverinternal/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.pb.go b/vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.proto b/vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apiserverinternal/v1alpha1/register.go b/vendor/k8s.io/api/apiserverinternal/v1alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apiserverinternal/v1alpha1/types.go b/vendor/k8s.io/api/apiserverinternal/v1alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apiserverinternal/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/apiserverinternal/v1alpha1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apiserverinternal/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/apiserverinternal/v1alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1/doc.go b/vendor/k8s.io/api/apps/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1/generated.pb.go b/vendor/k8s.io/api/apps/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1/generated.proto b/vendor/k8s.io/api/apps/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1/register.go b/vendor/k8s.io/api/apps/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1/types.go b/vendor/k8s.io/api/apps/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta1/doc.go b/vendor/k8s.io/api/apps/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta1/generated.pb.go b/vendor/k8s.io/api/apps/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta1/generated.proto b/vendor/k8s.io/api/apps/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta1/register.go b/vendor/k8s.io/api/apps/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta1/types.go b/vendor/k8s.io/api/apps/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/apps/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta2/doc.go b/vendor/k8s.io/api/apps/v1beta2/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta2/generated.pb.go b/vendor/k8s.io/api/apps/v1beta2/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta2/generated.proto b/vendor/k8s.io/api/apps/v1beta2/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta2/register.go b/vendor/k8s.io/api/apps/v1beta2/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta2/types.go b/vendor/k8s.io/api/apps/v1beta2/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go b/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go b/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/apps/v1beta2/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/apps/v1beta2/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1/doc.go b/vendor/k8s.io/api/authentication/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1/generated.pb.go b/vendor/k8s.io/api/authentication/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1/generated.proto b/vendor/k8s.io/api/authentication/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1/register.go b/vendor/k8s.io/api/authentication/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1/types.go b/vendor/k8s.io/api/authentication/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/authentication/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/authentication/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1beta1/doc.go b/vendor/k8s.io/api/authentication/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go b/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1beta1/generated.proto b/vendor/k8s.io/api/authentication/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1beta1/register.go b/vendor/k8s.io/api/authentication/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1beta1/types.go b/vendor/k8s.io/api/authentication/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/authentication/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/authentication/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authentication/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/authentication/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1/doc.go b/vendor/k8s.io/api/authorization/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1/generated.pb.go b/vendor/k8s.io/api/authorization/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1/generated.proto b/vendor/k8s.io/api/authorization/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1/register.go b/vendor/k8s.io/api/authorization/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1/types.go b/vendor/k8s.io/api/authorization/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/authorization/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/authorization/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1beta1/doc.go b/vendor/k8s.io/api/authorization/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go b/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1beta1/generated.proto b/vendor/k8s.io/api/authorization/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1beta1/register.go b/vendor/k8s.io/api/authorization/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1beta1/types.go b/vendor/k8s.io/api/authorization/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/authorization/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/authorization/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/authorization/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/authorization/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v1/doc.go b/vendor/k8s.io/api/autoscaling/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v1/generated.pb.go b/vendor/k8s.io/api/autoscaling/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v1/generated.proto b/vendor/k8s.io/api/autoscaling/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v1/register.go b/vendor/k8s.io/api/autoscaling/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v1/types.go b/vendor/k8s.io/api/autoscaling/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/autoscaling/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/autoscaling/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/doc.go b/vendor/k8s.io/api/autoscaling/v2beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go b/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto b/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/register.go b/vendor/k8s.io/api/autoscaling/v2beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/types.go b/vendor/k8s.io/api/autoscaling/v2beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/doc.go b/vendor/k8s.io/api/autoscaling/v2beta2/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go b/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/generated.proto b/vendor/k8s.io/api/autoscaling/v2beta2/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/register.go b/vendor/k8s.io/api/autoscaling/v2beta2/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/types.go b/vendor/k8s.io/api/autoscaling/v2beta2/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/types_swagger_doc_generated.go b/vendor/k8s.io/api/autoscaling/v2beta2/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.deepcopy.go b/vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1/doc.go b/vendor/k8s.io/api/batch/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1/generated.pb.go b/vendor/k8s.io/api/batch/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1/generated.proto b/vendor/k8s.io/api/batch/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1/register.go b/vendor/k8s.io/api/batch/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1/types.go b/vendor/k8s.io/api/batch/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1beta1/doc.go b/vendor/k8s.io/api/batch/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1beta1/generated.pb.go b/vendor/k8s.io/api/batch/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1beta1/generated.proto b/vendor/k8s.io/api/batch/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1beta1/register.go b/vendor/k8s.io/api/batch/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1beta1/types.go b/vendor/k8s.io/api/batch/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v2alpha1/doc.go b/vendor/k8s.io/api/batch/v2alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go b/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v2alpha1/generated.proto b/vendor/k8s.io/api/batch/v2alpha1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v2alpha1/register.go b/vendor/k8s.io/api/batch/v2alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v2alpha1/types.go b/vendor/k8s.io/api/batch/v2alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1/doc.go b/vendor/k8s.io/api/certificates/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1/generated.pb.go b/vendor/k8s.io/api/certificates/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1/generated.proto b/vendor/k8s.io/api/certificates/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1/register.go b/vendor/k8s.io/api/certificates/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1/types.go b/vendor/k8s.io/api/certificates/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/certificates/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/certificates/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1beta1/doc.go b/vendor/k8s.io/api/certificates/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go b/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1beta1/generated.proto b/vendor/k8s.io/api/certificates/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1beta1/register.go b/vendor/k8s.io/api/certificates/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1beta1/types.go b/vendor/k8s.io/api/certificates/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/certificates/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/certificates/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/certificates/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/certificates/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1/doc.go b/vendor/k8s.io/api/coordination/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1/generated.pb.go b/vendor/k8s.io/api/coordination/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1/generated.proto b/vendor/k8s.io/api/coordination/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1/register.go b/vendor/k8s.io/api/coordination/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1/types.go b/vendor/k8s.io/api/coordination/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/coordination/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1beta1/doc.go b/vendor/k8s.io/api/coordination/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go b/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1beta1/generated.proto b/vendor/k8s.io/api/coordination/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1beta1/register.go b/vendor/k8s.io/api/coordination/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1beta1/types.go b/vendor/k8s.io/api/coordination/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/coordination/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/coordination/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/coordination/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/annotation_key_constants.go b/vendor/k8s.io/api/core/v1/annotation_key_constants.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/doc.go b/vendor/k8s.io/api/core/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/generated.pb.go b/vendor/k8s.io/api/core/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/api/core/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/lifecycle.go b/vendor/k8s.io/api/core/v1/lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/objectreference.go b/vendor/k8s.io/api/core/v1/objectreference.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/register.go b/vendor/k8s.io/api/core/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/resource.go b/vendor/k8s.io/api/core/v1/resource.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/taint.go b/vendor/k8s.io/api/core/v1/taint.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/toleration.go b/vendor/k8s.io/api/core/v1/toleration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/types.go b/vendor/k8s.io/api/core/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/well_known_labels.go b/vendor/k8s.io/api/core/v1/well_known_labels.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/well_known_taints.go b/vendor/k8s.io/api/core/v1/well_known_taints.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1alpha1/doc.go b/vendor/k8s.io/api/discovery/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go b/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1alpha1/generated.proto b/vendor/k8s.io/api/discovery/v1alpha1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1alpha1/register.go b/vendor/k8s.io/api/discovery/v1alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1alpha1/types.go b/vendor/k8s.io/api/discovery/v1alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go b/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/doc.go b/vendor/k8s.io/api/discovery/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/generated.pb.go b/vendor/k8s.io/api/discovery/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/generated.proto b/vendor/k8s.io/api/discovery/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/register.go b/vendor/k8s.io/api/discovery/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/types.go b/vendor/k8s.io/api/discovery/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/discovery/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/well_known_labels.go b/vendor/k8s.io/api/discovery/v1beta1/well_known_labels.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/discovery/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1/doc.go b/vendor/k8s.io/api/events/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1/generated.pb.go b/vendor/k8s.io/api/events/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1/generated.proto b/vendor/k8s.io/api/events/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1/register.go b/vendor/k8s.io/api/events/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1/types.go b/vendor/k8s.io/api/events/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/events/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1beta1/doc.go b/vendor/k8s.io/api/events/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1beta1/generated.pb.go b/vendor/k8s.io/api/events/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1beta1/generated.proto b/vendor/k8s.io/api/events/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1beta1/register.go b/vendor/k8s.io/api/events/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1beta1/types.go b/vendor/k8s.io/api/events/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/events/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/events/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/events/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/extensions/v1beta1/doc.go b/vendor/k8s.io/api/extensions/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go b/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/extensions/v1beta1/generated.proto b/vendor/k8s.io/api/extensions/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/extensions/v1beta1/register.go b/vendor/k8s.io/api/extensions/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/extensions/v1beta1/types.go b/vendor/k8s.io/api/extensions/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/extensions/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/extensions/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go b/vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go b/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto b/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1alpha1/register.go b/vendor/k8s.io/api/flowcontrol/v1alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1alpha1/types.go b/vendor/k8s.io/api/flowcontrol/v1alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/flowcontrol/v1alpha1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1beta1/doc.go b/vendor/k8s.io/api/flowcontrol/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1beta1/generated.pb.go b/vendor/k8s.io/api/flowcontrol/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1beta1/generated.proto b/vendor/k8s.io/api/flowcontrol/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1beta1/register.go b/vendor/k8s.io/api/flowcontrol/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1beta1/types.go b/vendor/k8s.io/api/flowcontrol/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/flowcontrol/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/flowcontrol/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/flowcontrol/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/flowcontrol/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1/doc.go b/vendor/k8s.io/api/networking/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1/generated.pb.go b/vendor/k8s.io/api/networking/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1/generated.proto b/vendor/k8s.io/api/networking/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1/register.go b/vendor/k8s.io/api/networking/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1/types.go b/vendor/k8s.io/api/networking/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/doc.go b/vendor/k8s.io/api/networking/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/generated.pb.go b/vendor/k8s.io/api/networking/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/generated.proto b/vendor/k8s.io/api/networking/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/register.go b/vendor/k8s.io/api/networking/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/types.go b/vendor/k8s.io/api/networking/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/well_known_annotations.go b/vendor/k8s.io/api/networking/v1beta1/well_known_annotations.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/networking/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/networking/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1/doc.go b/vendor/k8s.io/api/node/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1/generated.pb.go b/vendor/k8s.io/api/node/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1/generated.proto b/vendor/k8s.io/api/node/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1/register.go b/vendor/k8s.io/api/node/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1/types.go b/vendor/k8s.io/api/node/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/node/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/node/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1alpha1/doc.go b/vendor/k8s.io/api/node/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1alpha1/generated.pb.go b/vendor/k8s.io/api/node/v1alpha1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1alpha1/generated.proto b/vendor/k8s.io/api/node/v1alpha1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1alpha1/register.go b/vendor/k8s.io/api/node/v1alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1alpha1/types.go b/vendor/k8s.io/api/node/v1alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1beta1/doc.go b/vendor/k8s.io/api/node/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1beta1/generated.pb.go b/vendor/k8s.io/api/node/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1beta1/generated.proto b/vendor/k8s.io/api/node/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1beta1/register.go b/vendor/k8s.io/api/node/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1beta1/types.go b/vendor/k8s.io/api/node/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/node/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/node/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/policy/v1beta1/doc.go b/vendor/k8s.io/api/policy/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/policy/v1beta1/generated.pb.go b/vendor/k8s.io/api/policy/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/policy/v1beta1/generated.proto b/vendor/k8s.io/api/policy/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/policy/v1beta1/register.go b/vendor/k8s.io/api/policy/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/policy/v1beta1/types.go b/vendor/k8s.io/api/policy/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1/doc.go b/vendor/k8s.io/api/rbac/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1/generated.pb.go b/vendor/k8s.io/api/rbac/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1/generated.proto b/vendor/k8s.io/api/rbac/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1/register.go b/vendor/k8s.io/api/rbac/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1/types.go b/vendor/k8s.io/api/rbac/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/rbac/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/rbac/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1alpha1/doc.go b/vendor/k8s.io/api/rbac/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go b/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1alpha1/generated.proto b/vendor/k8s.io/api/rbac/v1alpha1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1alpha1/register.go b/vendor/k8s.io/api/rbac/v1alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1alpha1/types.go b/vendor/k8s.io/api/rbac/v1alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/rbac/v1alpha1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/rbac/v1alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1beta1/doc.go b/vendor/k8s.io/api/rbac/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go b/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1beta1/generated.proto b/vendor/k8s.io/api/rbac/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1beta1/register.go b/vendor/k8s.io/api/rbac/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1beta1/types.go b/vendor/k8s.io/api/rbac/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/rbac/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/rbac/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/rbac/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1/doc.go b/vendor/k8s.io/api/scheduling/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1/generated.pb.go b/vendor/k8s.io/api/scheduling/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1/generated.proto b/vendor/k8s.io/api/scheduling/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1/register.go b/vendor/k8s.io/api/scheduling/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1/types.go b/vendor/k8s.io/api/scheduling/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/scheduling/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1alpha1/doc.go b/vendor/k8s.io/api/scheduling/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go b/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto b/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1alpha1/register.go b/vendor/k8s.io/api/scheduling/v1alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1alpha1/types.go b/vendor/k8s.io/api/scheduling/v1alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/scheduling/v1alpha1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/scheduling/v1alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1beta1/doc.go b/vendor/k8s.io/api/scheduling/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go b/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1beta1/generated.proto b/vendor/k8s.io/api/scheduling/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1beta1/register.go b/vendor/k8s.io/api/scheduling/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1beta1/types.go b/vendor/k8s.io/api/scheduling/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/scheduling/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/scheduling/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/scheduling/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1/doc.go b/vendor/k8s.io/api/storage/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1/generated.pb.go b/vendor/k8s.io/api/storage/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1/generated.proto b/vendor/k8s.io/api/storage/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1/register.go b/vendor/k8s.io/api/storage/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1/types.go b/vendor/k8s.io/api/storage/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/storage/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1alpha1/doc.go b/vendor/k8s.io/api/storage/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go b/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1alpha1/generated.proto b/vendor/k8s.io/api/storage/v1alpha1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1alpha1/register.go b/vendor/k8s.io/api/storage/v1alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1alpha1/types.go b/vendor/k8s.io/api/storage/v1alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1beta1/doc.go b/vendor/k8s.io/api/storage/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1beta1/generated.pb.go b/vendor/k8s.io/api/storage/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1beta1/generated.proto b/vendor/k8s.io/api/storage/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1beta1/register.go b/vendor/k8s.io/api/storage/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1beta1/types.go b/vendor/k8s.io/api/storage/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go b/vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/LICENSE b/vendor/k8s.io/apimachinery/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS b/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/errors/doc.go b/vendor/k8s.io/apimachinery/pkg/api/errors/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go b/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS b/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go b/vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/doc.go b/vendor/k8s.io/apimachinery/pkg/api/meta/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/errors.go b/vendor/k8s.io/apimachinery/pkg/api/meta/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/firsthit_restmapper.go b/vendor/k8s.io/apimachinery/pkg/api/meta/firsthit_restmapper.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/help.go b/vendor/k8s.io/apimachinery/pkg/api/meta/help.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/interfaces.go b/vendor/k8s.io/apimachinery/pkg/api/meta/interfaces.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/lazy.go b/vendor/k8s.io/apimachinery/pkg/api/meta/lazy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go b/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go b/vendor/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/priority.go b/vendor/k8s.io/apimachinery/pkg/api/meta/priority.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go b/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS b/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/amount.go b/vendor/k8s.io/apimachinery/pkg/api/resource/amount.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/api/resource/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto b/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/math.go b/vendor/k8s.io/apimachinery/pkg/api/resource/math.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go b/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go b/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/scale_int.go b/vendor/k8s.io/apimachinery/pkg/api/resource/scale_int.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/suffix.go b/vendor/k8s.io/apimachinery/pkg/api/resource/suffix.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/controller_ref.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/controller_ref.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/doc.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/group_version.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/group_version.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/labels.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/labels.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_fuzz.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_fuzz.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_proto.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_proto.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_fuzz.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_fuzz.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/watch.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/watch.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.defaults.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.defaults.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/converter.go b/vendor/k8s.io/apimachinery/pkg/conversion/converter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/deep_equal.go b/vendor/k8s.io/apimachinery/pkg/conversion/deep_equal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/doc.go b/vendor/k8s.io/apimachinery/pkg/conversion/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/helper.go b/vendor/k8s.io/apimachinery/pkg/conversion/helper.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go b/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/doc.go b/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/fields/doc.go b/vendor/k8s.io/apimachinery/pkg/fields/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/fields/fields.go b/vendor/k8s.io/apimachinery/pkg/fields/fields.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/fields/requirements.go b/vendor/k8s.io/apimachinery/pkg/fields/requirements.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/fields/selector.go b/vendor/k8s.io/apimachinery/pkg/fields/selector.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/labels/doc.go b/vendor/k8s.io/apimachinery/pkg/labels/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/labels/labels.go b/vendor/k8s.io/apimachinery/pkg/labels/labels.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/labels/selector.go b/vendor/k8s.io/apimachinery/pkg/labels/selector.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/labels/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/labels/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/codec.go b/vendor/k8s.io/apimachinery/pkg/runtime/codec.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/codec_check.go b/vendor/k8s.io/apimachinery/pkg/runtime/codec_check.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go b/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/converter.go b/vendor/k8s.io/apimachinery/pkg/runtime/converter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/doc.go b/vendor/k8s.io/apimachinery/pkg/runtime/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go b/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/error.go b/vendor/k8s.io/apimachinery/pkg/runtime/error.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/extension.go b/vendor/k8s.io/apimachinery/pkg/runtime/extension.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto b/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/helper.go b/vendor/k8s.io/apimachinery/pkg/runtime/helper.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go b/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/mapper.go b/vendor/k8s.io/apimachinery/pkg/runtime/mapper.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/negotiate.go b/vendor/k8s.io/apimachinery/pkg/runtime/negotiate.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/register.go b/vendor/k8s.io/apimachinery/pkg/runtime/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto b/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go b/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/schema/interfaces.go b/vendor/k8s.io/apimachinery/pkg/runtime/schema/interfaces.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/scheme_builder.go b/vendor/k8s.io/apimachinery/pkg/runtime/scheme_builder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/codec_factory.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/codec_factory.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/meta.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/meta.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/negotiated_codec.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/negotiated_codec.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/doc.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer/recognizer.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer/recognizer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming/streaming.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming/streaming.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/swagger_doc_generator.go b/vendor/k8s.io/apimachinery/pkg/runtime/swagger_doc_generator.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/types.go b/vendor/k8s.io/apimachinery/pkg/runtime/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/types_proto.go b/vendor/k8s.io/apimachinery/pkg/runtime/types_proto.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/selection/operator.go b/vendor/k8s.io/apimachinery/pkg/selection/operator.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/types/doc.go b/vendor/k8s.io/apimachinery/pkg/types/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/types/namespacedname.go b/vendor/k8s.io/apimachinery/pkg/types/namespacedname.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/types/nodename.go b/vendor/k8s.io/apimachinery/pkg/types/nodename.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/types/patch.go b/vendor/k8s.io/apimachinery/pkg/types/patch.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/types/uid.go b/vendor/k8s.io/apimachinery/pkg/types/uid.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/cache/expiring.go b/vendor/k8s.io/apimachinery/pkg/util/cache/expiring.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go b/vendor/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go b/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/diff/diff.go b/vendor/k8s.io/apimachinery/pkg/util/diff/diff.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/errors/doc.go b/vendor/k8s.io/apimachinery/pkg/util/errors/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go b/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/framer/framer.go b/vendor/k8s.io/apimachinery/pkg/util/framer/framer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto b/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/intstr/instr_fuzz.go b/vendor/k8s.io/apimachinery/pkg/util/intstr/instr_fuzz.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go b/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/json/json.go b/vendor/k8s.io/apimachinery/pkg/util/json/json.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go b/vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/http.go b/vendor/k8s.io/apimachinery/pkg/util/net/http.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/interface.go b/vendor/k8s.io/apimachinery/pkg/util/net/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/port_range.go b/vendor/k8s.io/apimachinery/pkg/util/net/port_range.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/port_split.go b/vendor/k8s.io/apimachinery/pkg/util/net/port_split.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/util.go b/vendor/k8s.io/apimachinery/pkg/util/net/util.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/sets/byte.go b/vendor/k8s.io/apimachinery/pkg/util/sets/byte.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/sets/doc.go b/vendor/k8s.io/apimachinery/pkg/util/sets/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/sets/empty.go b/vendor/k8s.io/apimachinery/pkg/util/sets/empty.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/sets/int.go b/vendor/k8s.io/apimachinery/pkg/util/sets/int.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/sets/int32.go b/vendor/k8s.io/apimachinery/pkg/util/sets/int32.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/sets/int64.go b/vendor/k8s.io/apimachinery/pkg/util/sets/int64.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/sets/string.go b/vendor/k8s.io/apimachinery/pkg/util/sets/string.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go b/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/validation/field/path.go b/vendor/k8s.io/apimachinery/pkg/util/validation/field/path.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go b/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go b/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go b/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go b/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/version/doc.go b/vendor/k8s.io/apimachinery/pkg/version/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/version/helpers.go b/vendor/k8s.io/apimachinery/pkg/version/helpers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/version/types.go b/vendor/k8s.io/apimachinery/pkg/version/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/watch/doc.go b/vendor/k8s.io/apimachinery/pkg/watch/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/watch/filter.go b/vendor/k8s.io/apimachinery/pkg/watch/filter.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/watch/mux.go b/vendor/k8s.io/apimachinery/pkg/watch/mux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go b/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/watch/watch.go b/vendor/k8s.io/apimachinery/pkg/watch/watch.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/apimachinery/third_party/forked/golang/reflect/deep_equal.go b/vendor/k8s.io/apimachinery/third_party/forked/golang/reflect/deep_equal.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/LICENSE b/vendor/k8s.io/client-go/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/discovery/discovery_client.go b/vendor/k8s.io/client-go/discovery/discovery_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/discovery/doc.go b/vendor/k8s.io/client-go/discovery/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/discovery/helper.go b/vendor/k8s.io/client-go/discovery/helper.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1/mutatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apiserverinternal/interface.go b/vendor/k8s.io/client-go/informers/apiserverinternal/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/storageversion.go b/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/storageversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/interface.go b/vendor/k8s.io/client-go/informers/apps/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go b/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1/interface.go b/vendor/k8s.io/client-go/informers/apps/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go b/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/autoscaling/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/batch/interface.go b/vendor/k8s.io/client-go/informers/batch/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/batch/v1/interface.go b/vendor/k8s.io/client-go/informers/batch/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/batch/v1/job.go b/vendor/k8s.io/client-go/informers/batch/v1/job.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go b/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/batch/v2alpha1/cronjob.go b/vendor/k8s.io/client-go/informers/batch/v2alpha1/cronjob.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/batch/v2alpha1/interface.go b/vendor/k8s.io/client-go/informers/batch/v2alpha1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/certificates/interface.go b/vendor/k8s.io/client-go/informers/certificates/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/certificates/v1/certificatesigningrequest.go b/vendor/k8s.io/client-go/informers/certificates/v1/certificatesigningrequest.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/certificates/v1/interface.go b/vendor/k8s.io/client-go/informers/certificates/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go b/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/coordination/interface.go b/vendor/k8s.io/client-go/informers/coordination/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/coordination/v1/interface.go b/vendor/k8s.io/client-go/informers/coordination/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/coordination/v1/lease.go b/vendor/k8s.io/client-go/informers/coordination/v1/lease.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go b/vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/interface.go b/vendor/k8s.io/client-go/informers/core/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go b/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/configmap.go b/vendor/k8s.io/client-go/informers/core/v1/configmap.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/endpoints.go b/vendor/k8s.io/client-go/informers/core/v1/endpoints.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/event.go b/vendor/k8s.io/client-go/informers/core/v1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/interface.go b/vendor/k8s.io/client-go/informers/core/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/limitrange.go b/vendor/k8s.io/client-go/informers/core/v1/limitrange.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/namespace.go b/vendor/k8s.io/client-go/informers/core/v1/namespace.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/node.go b/vendor/k8s.io/client-go/informers/core/v1/node.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go b/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go b/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/pod.go b/vendor/k8s.io/client-go/informers/core/v1/pod.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go b/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go b/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go b/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/secret.go b/vendor/k8s.io/client-go/informers/core/v1/secret.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/service.go b/vendor/k8s.io/client-go/informers/core/v1/service.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go b/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/discovery/interface.go b/vendor/k8s.io/client-go/informers/discovery/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/discovery/v1alpha1/endpointslice.go b/vendor/k8s.io/client-go/informers/discovery/v1alpha1/endpointslice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/discovery/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/discovery/v1alpha1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/discovery/v1beta1/endpointslice.go b/vendor/k8s.io/client-go/informers/discovery/v1beta1/endpointslice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/discovery/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/discovery/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/events/interface.go b/vendor/k8s.io/client-go/informers/events/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/events/v1/event.go b/vendor/k8s.io/client-go/informers/events/v1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/events/v1/interface.go b/vendor/k8s.io/client-go/informers/events/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/events/v1beta1/event.go b/vendor/k8s.io/client-go/informers/events/v1beta1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/extensions/interface.go b/vendor/k8s.io/client-go/informers/extensions/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/podsecuritypolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/factory.go b/vendor/k8s.io/client-go/informers/factory.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/interface.go b/vendor/k8s.io/client-go/informers/flowcontrol/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/flowschema.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/flowschema.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/prioritylevelconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/flowschema.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/flowschema.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/prioritylevelconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/generic.go b/vendor/k8s.io/client-go/informers/generic.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go b/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/networking/interface.go b/vendor/k8s.io/client-go/informers/networking/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/networking/v1/ingress.go b/vendor/k8s.io/client-go/informers/networking/v1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/networking/v1/ingressclass.go b/vendor/k8s.io/client-go/informers/networking/v1/ingressclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/networking/v1/interface.go b/vendor/k8s.io/client-go/informers/networking/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go b/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/ingressclass.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/ingressclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/node/interface.go b/vendor/k8s.io/client-go/informers/node/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/node/v1/interface.go b/vendor/k8s.io/client-go/informers/node/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/node/v1/runtimeclass.go b/vendor/k8s.io/client-go/informers/node/v1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go b/vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/node/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/node/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go b/vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/policy/interface.go b/vendor/k8s.io/client-go/informers/policy/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go b/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/interface.go b/vendor/k8s.io/client-go/informers/rbac/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/scheduling/interface.go b/vendor/k8s.io/client-go/informers/scheduling/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1/interface.go b/vendor/k8s.io/client-go/informers/scheduling/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go b/vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/scheduling/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1beta1/priorityclass.go b/vendor/k8s.io/client-go/informers/scheduling/v1beta1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/interface.go b/vendor/k8s.io/client-go/informers/storage/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1/csidriver.go b/vendor/k8s.io/client-go/informers/storage/v1/csidriver.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1/csinode.go b/vendor/k8s.io/client-go/informers/storage/v1/csinode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go b/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1/volumeattachment.go b/vendor/k8s.io/client-go/informers/storage/v1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/csistoragecapacity.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/csistoragecapacity.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/clientset.go b/vendor/k8s.io/client-go/kubernetes/clientset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/doc.go b/vendor/k8s.io/client-go/kubernetes/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/import.go b/vendor/k8s.io/client-go/kubernetes/import.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/scheme/doc.go b/vendor/k8s.io/client-go/kubernetes/scheme/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/scheme/register.go b/vendor/k8s.io/client-go/kubernetes/scheme/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/mutatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/validatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/apiserverinternal_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/apiserverinternal_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/storageversion.go b/vendor/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/storageversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/tokenreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/tokenreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/tokenreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/tokenreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/localsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/localsubjectaccessreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectaccessreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectrulesreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectrulesreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/subjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/subjectaccessreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/localsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/localsubjectaccessreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectaccessreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectrulesreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectrulesreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/subjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/subjectaccessreview.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/certificates_client.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/certificates_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/certificatesigningrequest.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/certificatesigningrequest.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go b/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/discovery_client.go b/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/discovery_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/endpointslice.go b/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/endpointslice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/discovery_client.go b/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/discovery_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/endpointslice.go b/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/endpointslice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1/event.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowcontrol_client.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowcontrol_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowschema.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowschema.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/prioritylevelconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowcontrol_client.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowcontrol_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowschema.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowschema.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/prioritylevelconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingress.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingressclass.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingressclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingressclass.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingressclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1/node_client.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1/node_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1/runtimeclass.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go b/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/priorityclass.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/csidriver.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/csidriver.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/csinode.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/csinode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/volumeattachment.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/csistoragecapacity.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/csistoragecapacity.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1/mutatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/storageversion.go b/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/storageversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go b/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/daemonset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1/daemonset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go b/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/replicaset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1/replicaset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1/statefulset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1/statefulset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/horizontalpodautoscaler.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/batch/v1/job.go b/vendor/k8s.io/client-go/listers/batch/v1/job.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/batch/v1/job_expansion.go b/vendor/k8s.io/client-go/listers/batch/v1/job_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go b/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/batch/v2alpha1/cronjob.go b/vendor/k8s.io/client-go/listers/batch/v2alpha1/cronjob.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/batch/v2alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/batch/v2alpha1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/certificates/v1/certificatesigningrequest.go b/vendor/k8s.io/client-go/listers/certificates/v1/certificatesigningrequest.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/certificates/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/certificates/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go b/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/coordination/v1/lease.go b/vendor/k8s.io/client-go/listers/coordination/v1/lease.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go b/vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go b/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/configmap.go b/vendor/k8s.io/client-go/listers/core/v1/configmap.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/endpoints.go b/vendor/k8s.io/client-go/listers/core/v1/endpoints.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/event.go b/vendor/k8s.io/client-go/listers/core/v1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/limitrange.go b/vendor/k8s.io/client-go/listers/core/v1/limitrange.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/namespace.go b/vendor/k8s.io/client-go/listers/core/v1/namespace.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/node.go b/vendor/k8s.io/client-go/listers/core/v1/node.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go b/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go b/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/pod.go b/vendor/k8s.io/client-go/listers/core/v1/pod.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go b/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go b/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller_expansion.go b/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go b/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/secret.go b/vendor/k8s.io/client-go/listers/core/v1/secret.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/service.go b/vendor/k8s.io/client-go/listers/core/v1/service.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go b/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/discovery/v1alpha1/endpointslice.go b/vendor/k8s.io/client-go/listers/discovery/v1alpha1/endpointslice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/discovery/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/discovery/v1alpha1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/discovery/v1beta1/endpointslice.go b/vendor/k8s.io/client-go/listers/discovery/v1beta1/endpointslice.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/discovery/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/discovery/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/events/v1/event.go b/vendor/k8s.io/client-go/listers/events/v1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/events/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/events/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/events/v1beta1/event.go b/vendor/k8s.io/client-go/listers/events/v1beta1/event.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset_expansion.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/podsecuritypolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset_expansion.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/flowschema.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/flowschema.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/prioritylevelconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/flowschema.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/flowschema.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/prioritylevelconfiguration.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/networking/v1/ingress.go b/vendor/k8s.io/client-go/listers/networking/v1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/networking/v1/ingressclass.go b/vendor/k8s.io/client-go/listers/networking/v1/ingressclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go b/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/ingressclass.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/ingressclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/node/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/node/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/node/v1/runtimeclass.go b/vendor/k8s.io/client-go/listers/node/v1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go b/vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go b/vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget_expansion.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget_expansion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go b/vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/scheduling/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1beta1/priorityclass.go b/vendor/k8s.io/client-go/listers/scheduling/v1beta1/priorityclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1/csidriver.go b/vendor/k8s.io/client-go/listers/storage/v1/csidriver.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1/csinode.go b/vendor/k8s.io/client-go/listers/storage/v1/csinode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go b/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1/volumeattachment.go b/vendor/k8s.io/client-go/listers/storage/v1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/csistoragecapacity.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/csistoragecapacity.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/conversion.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/conversion.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/doc.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/register.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/types.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.conversion.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.defaults.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/version/.gitattributes b/vendor/k8s.io/client-go/pkg/version/.gitattributes -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/version/base.go b/vendor/k8s.io/client-go/pkg/version/base.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/version/def.bzl b/vendor/k8s.io/client-go/pkg/version/def.bzl -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/version/doc.go b/vendor/k8s.io/client-go/pkg/version/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/pkg/version/version.go b/vendor/k8s.io/client-go/pkg/version/version.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/OWNERS b/vendor/k8s.io/client-go/rest/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/client.go b/vendor/k8s.io/client-go/rest/client.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/config.go b/vendor/k8s.io/client-go/rest/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/exec.go b/vendor/k8s.io/client-go/rest/exec.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/plugin.go b/vendor/k8s.io/client-go/rest/plugin.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/request.go b/vendor/k8s.io/client-go/rest/request.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/transport.go b/vendor/k8s.io/client-go/rest/transport.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/url_utils.go b/vendor/k8s.io/client-go/rest/url_utils.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/urlbackoff.go b/vendor/k8s.io/client-go/rest/urlbackoff.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/warnings.go b/vendor/k8s.io/client-go/rest/warnings.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/watch/decoder.go b/vendor/k8s.io/client-go/rest/watch/decoder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/watch/encoder.go b/vendor/k8s.io/client-go/rest/watch/encoder.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/OWNERS b/vendor/k8s.io/client-go/tools/cache/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/controller.go b/vendor/k8s.io/client-go/tools/cache/controller.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/doc.go b/vendor/k8s.io/client-go/tools/cache/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/expiration_cache.go b/vendor/k8s.io/client-go/tools/cache/expiration_cache.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/expiration_cache_fakes.go b/vendor/k8s.io/client-go/tools/cache/expiration_cache_fakes.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/fake_custom_store.go b/vendor/k8s.io/client-go/tools/cache/fake_custom_store.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/fifo.go b/vendor/k8s.io/client-go/tools/cache/fifo.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/heap.go b/vendor/k8s.io/client-go/tools/cache/heap.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/index.go b/vendor/k8s.io/client-go/tools/cache/index.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/listers.go b/vendor/k8s.io/client-go/tools/cache/listers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/listwatch.go b/vendor/k8s.io/client-go/tools/cache/listwatch.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/mutation_cache.go b/vendor/k8s.io/client-go/tools/cache/mutation_cache.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/mutation_detector.go b/vendor/k8s.io/client-go/tools/cache/mutation_detector.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/reflector.go b/vendor/k8s.io/client-go/tools/cache/reflector.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/reflector_metrics.go b/vendor/k8s.io/client-go/tools/cache/reflector_metrics.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/shared_informer.go b/vendor/k8s.io/client-go/tools/cache/shared_informer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/store.go b/vendor/k8s.io/client-go/tools/cache/store.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go b/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/cache/undelta_store.go b/vendor/k8s.io/client-go/tools/cache/undelta_store.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/doc.go b/vendor/k8s.io/client-go/tools/clientcmd/api/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go b/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/register.go b/vendor/k8s.io/client-go/tools/clientcmd/api/register.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/metrics/OWNERS b/vendor/k8s.io/client-go/tools/metrics/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/metrics/metrics.go b/vendor/k8s.io/client-go/tools/metrics/metrics.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/pager/pager.go b/vendor/k8s.io/client-go/tools/pager/pager.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/tools/reference/ref.go b/vendor/k8s.io/client-go/tools/reference/ref.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/transport/OWNERS b/vendor/k8s.io/client-go/transport/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/transport/cache.go b/vendor/k8s.io/client-go/transport/cache.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/transport/cert_rotation.go b/vendor/k8s.io/client-go/transport/cert_rotation.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/transport/config.go b/vendor/k8s.io/client-go/transport/config.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/transport/round_trippers.go b/vendor/k8s.io/client-go/transport/round_trippers.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/transport/token_source.go b/vendor/k8s.io/client-go/transport/token_source.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/transport/transport.go b/vendor/k8s.io/client-go/transport/transport.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/cert/OWNERS b/vendor/k8s.io/client-go/util/cert/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/cert/cert.go b/vendor/k8s.io/client-go/util/cert/cert.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/cert/csr.go b/vendor/k8s.io/client-go/util/cert/csr.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/cert/io.go b/vendor/k8s.io/client-go/util/cert/io.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/cert/pem.go b/vendor/k8s.io/client-go/util/cert/pem.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/cert/server_inspection.go b/vendor/k8s.io/client-go/util/cert/server_inspection.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/connrotation/connrotation.go b/vendor/k8s.io/client-go/util/connrotation/connrotation.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/flowcontrol/backoff.go b/vendor/k8s.io/client-go/util/flowcontrol/backoff.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/flowcontrol/throttle.go b/vendor/k8s.io/client-go/util/flowcontrol/throttle.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/keyutil/OWNERS b/vendor/k8s.io/client-go/util/keyutil/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/keyutil/key.go b/vendor/k8s.io/client-go/util/keyutil/key.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/workqueue/doc.go b/vendor/k8s.io/client-go/util/workqueue/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/workqueue/metrics.go b/vendor/k8s.io/client-go/util/workqueue/metrics.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/workqueue/parallelizer.go b/vendor/k8s.io/client-go/util/workqueue/parallelizer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/workqueue/queue.go b/vendor/k8s.io/client-go/util/workqueue/queue.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go b/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/cri-api/LICENSE b/vendor/k8s.io/cri-api/LICENSE -new file mode 100755 -index 0000000..8dada3e ---- /dev/null -+++ b/vendor/k8s.io/cri-api/LICENSE -@@ -0,0 +1,201 @@ -+ Apache License -+ Version 2.0, January 2004 -+ http://www.apache.org/licenses/ -+ -+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -+ -+ 1. Definitions. -+ -+ "License" shall mean the terms and conditions for use, reproduction, -+ and distribution as defined by Sections 1 through 9 of this document. -+ -+ "Licensor" shall mean the copyright owner or entity authorized by -+ the copyright owner that is granting the License. -+ -+ "Legal Entity" shall mean the union of the acting entity and all -+ other entities that control, are controlled by, or are under common -+ control with that entity. For the purposes of this definition, -+ "control" means (i) the power, direct or indirect, to cause the -+ direction or management of such entity, whether by contract or -+ otherwise, or (ii) ownership of fifty percent (50%) or more of the -+ outstanding shares, or (iii) beneficial ownership of such entity. -+ -+ "You" (or "Your") shall mean an individual or Legal Entity -+ exercising permissions granted by this License. -+ -+ "Source" form shall mean the preferred form for making modifications, -+ including but not limited to software source code, documentation -+ source, and configuration files. -+ -+ "Object" form shall mean any form resulting from mechanical -+ transformation or translation of a Source form, including but -+ not limited to compiled object code, generated documentation, -+ and conversions to other media types. -+ -+ "Work" shall mean the work of authorship, whether in Source or -+ Object form, made available under the License, as indicated by a -+ copyright notice that is included in or attached to the work -+ (an example is provided in the Appendix below). -+ -+ "Derivative Works" shall mean any work, whether in Source or Object -+ form, that is based on (or derived from) the Work and for which the -+ editorial revisions, annotations, elaborations, or other modifications -+ represent, as a whole, an original work of authorship. For the purposes -+ of this License, Derivative Works shall not include works that remain -+ separable from, or merely link (or bind by name) to the interfaces of, -+ the Work and Derivative Works thereof. -+ -+ "Contribution" shall mean any work of authorship, including -+ the original version of the Work and any modifications or additions -+ to that Work or Derivative Works thereof, that is intentionally -+ submitted to Licensor for inclusion in the Work by the copyright owner -+ or by an individual or Legal Entity authorized to submit on behalf of -+ the copyright owner. For the purposes of this definition, "submitted" -+ means any form of electronic, verbal, or written communication sent -+ to the Licensor or its representatives, including but not limited to -+ communication on electronic mailing lists, source code control systems, -+ and issue tracking systems that are managed by, or on behalf of, the -+ Licensor for the purpose of discussing and improving the Work, but -+ excluding communication that is conspicuously marked or otherwise -+ designated in writing by the copyright owner as "Not a Contribution." -+ -+ "Contributor" shall mean Licensor and any individual or Legal Entity -+ on behalf of whom a Contribution has been received by Licensor and -+ subsequently incorporated within the Work. -+ -+ 2. Grant of Copyright License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ copyright license to reproduce, prepare Derivative Works of, -+ publicly display, publicly perform, sublicense, and distribute the -+ Work and such Derivative Works in Source or Object form. -+ -+ 3. Grant of Patent License. Subject to the terms and conditions of -+ this License, each Contributor hereby grants to You a perpetual, -+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable -+ (except as stated in this section) patent license to make, have made, -+ use, offer to sell, sell, import, and otherwise transfer the Work, -+ where such license applies only to those patent claims licensable -+ by such Contributor that are necessarily infringed by their -+ Contribution(s) alone or by combination of their Contribution(s) -+ with the Work to which such Contribution(s) was submitted. If You -+ institute patent litigation against any entity (including a -+ cross-claim or counterclaim in a lawsuit) alleging that the Work -+ or a Contribution incorporated within the Work constitutes direct -+ or contributory patent infringement, then any patent licenses -+ granted to You under this License for that Work shall terminate -+ as of the date such litigation is filed. -+ -+ 4. Redistribution. You may reproduce and distribute copies of the -+ Work or Derivative Works thereof in any medium, with or without -+ modifications, and in Source or Object form, provided that You -+ meet the following conditions: -+ -+ (a) You must give any other recipients of the Work or -+ Derivative Works a copy of this License; and -+ -+ (b) You must cause any modified files to carry prominent notices -+ stating that You changed the files; and -+ -+ (c) You must retain, in the Source form of any Derivative Works -+ that You distribute, all copyright, patent, trademark, and -+ attribution notices from the Source form of the Work, -+ excluding those notices that do not pertain to any part of -+ the Derivative Works; and -+ -+ (d) If the Work includes a "NOTICE" text file as part of its -+ distribution, then any Derivative Works that You distribute must -+ include a readable copy of the attribution notices contained -+ within such NOTICE file, excluding those notices that do not -+ pertain to any part of the Derivative Works, in at least one -+ of the following places: within a NOTICE text file distributed -+ as part of the Derivative Works; within the Source form or -+ documentation, if provided along with the Derivative Works; or, -+ within a display generated by the Derivative Works, if and -+ wherever such third-party notices normally appear. The contents -+ of the NOTICE file are for informational purposes only and -+ do not modify the License. You may add Your own attribution -+ notices within Derivative Works that You distribute, alongside -+ or as an addendum to the NOTICE text from the Work, provided -+ that such additional attribution notices cannot be construed -+ as modifying the License. -+ -+ You may add Your own copyright statement to Your modifications and -+ may provide additional or different license terms and conditions -+ for use, reproduction, or distribution of Your modifications, or -+ for any such Derivative Works as a whole, provided Your use, -+ reproduction, and distribution of the Work otherwise complies with -+ the conditions stated in this License. -+ -+ 5. Submission of Contributions. Unless You explicitly state otherwise, -+ any Contribution intentionally submitted for inclusion in the Work -+ by You to the Licensor shall be under the terms and conditions of -+ this License, without any additional terms or conditions. -+ Notwithstanding the above, nothing herein shall supersede or modify -+ the terms of any separate license agreement you may have executed -+ with Licensor regarding such Contributions. -+ -+ 6. Trademarks. This License does not grant permission to use the trade -+ names, trademarks, service marks, or product names of the Licensor, -+ except as required for reasonable and customary use in describing the -+ origin of the Work and reproducing the content of the NOTICE file. -+ -+ 7. Disclaimer of Warranty. Unless required by applicable law or -+ agreed to in writing, Licensor provides the Work (and each -+ Contributor provides its Contributions) on an "AS IS" BASIS, -+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -+ implied, including, without limitation, any warranties or conditions -+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -+ PARTICULAR PURPOSE. You are solely responsible for determining the -+ appropriateness of using or redistributing the Work and assume any -+ risks associated with Your exercise of permissions under this License. -+ -+ 8. Limitation of Liability. In no event and under no legal theory, -+ whether in tort (including negligence), contract, or otherwise, -+ unless required by applicable law (such as deliberate and grossly -+ negligent acts) or agreed to in writing, shall any Contributor be -+ liable to You for damages, including any direct, indirect, special, -+ incidental, or consequential damages of any character arising as a -+ result of this License or out of the use or inability to use the -+ Work (including but not limited to damages for loss of goodwill, -+ work stoppage, computer failure or malfunction, or any and all -+ other commercial damages or losses), even if such Contributor -+ has been advised of the possibility of such damages. -+ -+ 9. Accepting Warranty or Additional Liability. While redistributing -+ the Work or Derivative Works thereof, You may choose to offer, -+ and charge a fee for, acceptance of support, warranty, indemnity, -+ or other liability obligations and/or rights consistent with this -+ License. However, in accepting such obligations, You may act only -+ on Your own behalf and on Your sole responsibility, not on behalf -+ of any other Contributor, and only if You agree to indemnify, -+ defend, and hold each Contributor harmless for any liability -+ incurred by, or claims asserted against, such Contributor by reason -+ of your accepting any such warranty or additional liability. -+ -+ END OF TERMS AND CONDITIONS -+ -+ APPENDIX: How to apply the Apache License to your work. -+ -+ To apply the Apache License to your work, attach the following -+ boilerplate notice, with the fields enclosed by brackets "{}" -+ replaced with your own identifying information. (Don't include -+ the brackets!) The text should be enclosed in the appropriate -+ comment syntax for the file format. We also recommend that a -+ file or class name and description of purpose be included on the -+ same "printed page" as the copyright notice for easier -+ identification within third-party archives. -+ -+ Copyright {yyyy} {name of copyright owner} -+ -+ Licensed under the Apache License, Version 2.0 (the "License"); -+ you may not use this file except in compliance with the License. -+ You may obtain a copy of the License at -+ -+ 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. -diff --git a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go -new file mode 100755 -index 0000000..ca7f142 ---- /dev/null -+++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go -@@ -0,0 +1,40906 @@ -+/* -+Copyright The Kubernetes Authors. -+ -+Licensed under the Apache License, Version 2.0 (the "License"); -+you may not use this file except in compliance with the License. -+You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+// Code generated by protoc-gen-gogo. DO NOT EDIT. -+// source: api.proto -+ -+package v1 -+ -+import ( -+ context "context" -+ fmt "fmt" -+ _ "github.com/gogo/protobuf/gogoproto" -+ proto "github.com/gogo/protobuf/proto" -+ github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" -+ grpc "google.golang.org/grpc" -+ codes "google.golang.org/grpc/codes" -+ status "google.golang.org/grpc/status" -+ io "io" -+ math "math" -+ math_bits "math/bits" -+ reflect "reflect" -+ strings "strings" -+) -+ -+// Reference imports to suppress errors if they are not otherwise used. -+var _ = proto.Marshal -+var _ = fmt.Errorf -+var _ = math.Inf -+ -+// This is a compile-time assertion to ensure that this generated file -+// is compatible with the proto package it is being compiled against. -+// A compilation error at this line likely means your copy of the -+// proto package needs to be updated. -+const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -+ -+type Protocol int32 -+ -+const ( -+ Protocol_TCP Protocol = 0 -+ Protocol_UDP Protocol = 1 -+ Protocol_SCTP Protocol = 2 -+) -+ -+var Protocol_name = map[int32]string{ -+ 0: "TCP", -+ 1: "UDP", -+ 2: "SCTP", -+} -+ -+var Protocol_value = map[string]int32{ -+ "TCP": 0, -+ "UDP": 1, -+ "SCTP": 2, -+} -+ -+func (x Protocol) String() string { -+ return proto.EnumName(Protocol_name, int32(x)) -+} -+ -+func (Protocol) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{0} -+} -+ -+type MountPropagation int32 -+ -+const ( -+ // No mount propagation ("private" in Linux terminology). -+ MountPropagation_PROPAGATION_PRIVATE MountPropagation = 0 -+ // Mounts get propagated from the host to the container ("rslave" in Linux). -+ MountPropagation_PROPAGATION_HOST_TO_CONTAINER MountPropagation = 1 -+ // Mounts get propagated from the host to the container and from the -+ // container to the host ("rshared" in Linux). -+ MountPropagation_PROPAGATION_BIDIRECTIONAL MountPropagation = 2 -+) -+ -+var MountPropagation_name = map[int32]string{ -+ 0: "PROPAGATION_PRIVATE", -+ 1: "PROPAGATION_HOST_TO_CONTAINER", -+ 2: "PROPAGATION_BIDIRECTIONAL", -+} -+ -+var MountPropagation_value = map[string]int32{ -+ "PROPAGATION_PRIVATE": 0, -+ "PROPAGATION_HOST_TO_CONTAINER": 1, -+ "PROPAGATION_BIDIRECTIONAL": 2, -+} -+ -+func (x MountPropagation) String() string { -+ return proto.EnumName(MountPropagation_name, int32(x)) -+} -+ -+func (MountPropagation) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{1} -+} -+ -+// A NamespaceMode describes the intended namespace configuration for each -+// of the namespaces (Network, PID, IPC) in NamespaceOption. Runtimes should -+// map these modes as appropriate for the technology underlying the runtime. -+type NamespaceMode int32 -+ -+const ( -+ // A POD namespace is common to all containers in a pod. -+ // For example, a container with a PID namespace of POD expects to view -+ // all of the processes in all of the containers in the pod. -+ NamespaceMode_POD NamespaceMode = 0 -+ // A CONTAINER namespace is restricted to a single container. -+ // For example, a container with a PID namespace of CONTAINER expects to -+ // view only the processes in that container. -+ NamespaceMode_CONTAINER NamespaceMode = 1 -+ // A NODE namespace is the namespace of the Kubernetes node. -+ // For example, a container with a PID namespace of NODE expects to view -+ // all of the processes on the host running the kubelet. -+ NamespaceMode_NODE NamespaceMode = 2 -+ // TARGET targets the namespace of another container. When this is specified, -+ // a target_id must be specified in NamespaceOption and refer to a container -+ // previously created with NamespaceMode CONTAINER. This containers namespace -+ // will be made to match that of container target_id. -+ // For example, a container with a PID namespace of TARGET expects to view -+ // all of the processes that container target_id can view. -+ NamespaceMode_TARGET NamespaceMode = 3 -+) -+ -+var NamespaceMode_name = map[int32]string{ -+ 0: "POD", -+ 1: "CONTAINER", -+ 2: "NODE", -+ 3: "TARGET", -+} -+ -+var NamespaceMode_value = map[string]int32{ -+ "POD": 0, -+ "CONTAINER": 1, -+ "NODE": 2, -+ "TARGET": 3, -+} -+ -+func (x NamespaceMode) String() string { -+ return proto.EnumName(NamespaceMode_name, int32(x)) -+} -+ -+func (NamespaceMode) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{2} -+} -+ -+type PodSandboxState int32 -+ -+const ( -+ PodSandboxState_SANDBOX_READY PodSandboxState = 0 -+ PodSandboxState_SANDBOX_NOTREADY PodSandboxState = 1 -+) -+ -+var PodSandboxState_name = map[int32]string{ -+ 0: "SANDBOX_READY", -+ 1: "SANDBOX_NOTREADY", -+} -+ -+var PodSandboxState_value = map[string]int32{ -+ "SANDBOX_READY": 0, -+ "SANDBOX_NOTREADY": 1, -+} -+ -+func (x PodSandboxState) String() string { -+ return proto.EnumName(PodSandboxState_name, int32(x)) -+} -+ -+func (PodSandboxState) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{3} -+} -+ -+type ContainerState int32 -+ -+const ( -+ ContainerState_CONTAINER_CREATED ContainerState = 0 -+ ContainerState_CONTAINER_RUNNING ContainerState = 1 -+ ContainerState_CONTAINER_EXITED ContainerState = 2 -+ ContainerState_CONTAINER_UNKNOWN ContainerState = 3 -+) -+ -+var ContainerState_name = map[int32]string{ -+ 0: "CONTAINER_CREATED", -+ 1: "CONTAINER_RUNNING", -+ 2: "CONTAINER_EXITED", -+ 3: "CONTAINER_UNKNOWN", -+} -+ -+var ContainerState_value = map[string]int32{ -+ "CONTAINER_CREATED": 0, -+ "CONTAINER_RUNNING": 1, -+ "CONTAINER_EXITED": 2, -+ "CONTAINER_UNKNOWN": 3, -+} -+ -+func (x ContainerState) String() string { -+ return proto.EnumName(ContainerState_name, int32(x)) -+} -+ -+func (ContainerState) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{4} -+} -+ -+type ContainerEventType int32 -+ -+const ( -+ // Container created -+ ContainerEventType_CONTAINER_CREATED_EVENT ContainerEventType = 0 -+ // Container started -+ ContainerEventType_CONTAINER_STARTED_EVENT ContainerEventType = 1 -+ // Container stopped -+ ContainerEventType_CONTAINER_STOPPED_EVENT ContainerEventType = 2 -+ // Container deleted -+ ContainerEventType_CONTAINER_DELETED_EVENT ContainerEventType = 3 -+) -+ -+var ContainerEventType_name = map[int32]string{ -+ 0: "CONTAINER_CREATED_EVENT", -+ 1: "CONTAINER_STARTED_EVENT", -+ 2: "CONTAINER_STOPPED_EVENT", -+ 3: "CONTAINER_DELETED_EVENT", -+} -+ -+var ContainerEventType_value = map[string]int32{ -+ "CONTAINER_CREATED_EVENT": 0, -+ "CONTAINER_STARTED_EVENT": 1, -+ "CONTAINER_STOPPED_EVENT": 2, -+ "CONTAINER_DELETED_EVENT": 3, -+} -+ -+func (x ContainerEventType) String() string { -+ return proto.EnumName(ContainerEventType_name, int32(x)) -+} -+ -+func (ContainerEventType) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{5} -+} -+ -+// Available profile types. -+type SecurityProfile_ProfileType int32 -+ -+const ( -+ // The container runtime default profile should be used. -+ SecurityProfile_RuntimeDefault SecurityProfile_ProfileType = 0 -+ // Disable the feature for the sandbox or the container. -+ SecurityProfile_Unconfined SecurityProfile_ProfileType = 1 -+ // A pre-defined profile on the node should be used. -+ SecurityProfile_Localhost SecurityProfile_ProfileType = 2 -+) -+ -+var SecurityProfile_ProfileType_name = map[int32]string{ -+ 0: "RuntimeDefault", -+ 1: "Unconfined", -+ 2: "Localhost", -+} -+ -+var SecurityProfile_ProfileType_value = map[string]int32{ -+ "RuntimeDefault": 0, -+ "Unconfined": 1, -+ "Localhost": 2, -+} -+ -+func (x SecurityProfile_ProfileType) String() string { -+ return proto.EnumName(SecurityProfile_ProfileType_name, int32(x)) -+} -+ -+func (SecurityProfile_ProfileType) EnumDescriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{10, 0} -+} -+ -+type VersionRequest struct { -+ // Version of the kubelet runtime API. -+ Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *VersionRequest) Reset() { *m = VersionRequest{} } -+func (*VersionRequest) ProtoMessage() {} -+func (*VersionRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{0} -+} -+func (m *VersionRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *VersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_VersionRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *VersionRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_VersionRequest.Merge(m, src) -+} -+func (m *VersionRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *VersionRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_VersionRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_VersionRequest proto.InternalMessageInfo -+ -+func (m *VersionRequest) GetVersion() string { -+ if m != nil { -+ return m.Version -+ } -+ return "" -+} -+ -+type VersionResponse struct { -+ // Version of the kubelet runtime API. -+ Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` -+ // Name of the container runtime. -+ RuntimeName string `protobuf:"bytes,2,opt,name=runtime_name,json=runtimeName,proto3" json:"runtime_name,omitempty"` -+ // Version of the container runtime. The string must be -+ // semver-compatible. -+ RuntimeVersion string `protobuf:"bytes,3,opt,name=runtime_version,json=runtimeVersion,proto3" json:"runtime_version,omitempty"` -+ // API version of the container runtime. The string must be -+ // semver-compatible. -+ RuntimeApiVersion string `protobuf:"bytes,4,opt,name=runtime_api_version,json=runtimeApiVersion,proto3" json:"runtime_api_version,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *VersionResponse) Reset() { *m = VersionResponse{} } -+func (*VersionResponse) ProtoMessage() {} -+func (*VersionResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{1} -+} -+func (m *VersionResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *VersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_VersionResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *VersionResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_VersionResponse.Merge(m, src) -+} -+func (m *VersionResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *VersionResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_VersionResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_VersionResponse proto.InternalMessageInfo -+ -+func (m *VersionResponse) GetVersion() string { -+ if m != nil { -+ return m.Version -+ } -+ return "" -+} -+ -+func (m *VersionResponse) GetRuntimeName() string { -+ if m != nil { -+ return m.RuntimeName -+ } -+ return "" -+} -+ -+func (m *VersionResponse) GetRuntimeVersion() string { -+ if m != nil { -+ return m.RuntimeVersion -+ } -+ return "" -+} -+ -+func (m *VersionResponse) GetRuntimeApiVersion() string { -+ if m != nil { -+ return m.RuntimeApiVersion -+ } -+ return "" -+} -+ -+// DNSConfig specifies the DNS servers and search domains of a sandbox. -+type DNSConfig struct { -+ // List of DNS servers of the cluster. -+ Servers []string `protobuf:"bytes,1,rep,name=servers,proto3" json:"servers,omitempty"` -+ // List of DNS search domains of the cluster. -+ Searches []string `protobuf:"bytes,2,rep,name=searches,proto3" json:"searches,omitempty"` -+ // List of DNS options. See https://linux.die.net/man/5/resolv.conf -+ // for all available options. -+ Options []string `protobuf:"bytes,3,rep,name=options,proto3" json:"options,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *DNSConfig) Reset() { *m = DNSConfig{} } -+func (*DNSConfig) ProtoMessage() {} -+func (*DNSConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{2} -+} -+func (m *DNSConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *DNSConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_DNSConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *DNSConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_DNSConfig.Merge(m, src) -+} -+func (m *DNSConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *DNSConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_DNSConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_DNSConfig proto.InternalMessageInfo -+ -+func (m *DNSConfig) GetServers() []string { -+ if m != nil { -+ return m.Servers -+ } -+ return nil -+} -+ -+func (m *DNSConfig) GetSearches() []string { -+ if m != nil { -+ return m.Searches -+ } -+ return nil -+} -+ -+func (m *DNSConfig) GetOptions() []string { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+// PortMapping specifies the port mapping configurations of a sandbox. -+type PortMapping struct { -+ // Protocol of the port mapping. -+ Protocol Protocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=runtime.v1.Protocol" json:"protocol,omitempty"` -+ // Port number within the container. Default: 0 (not specified). -+ ContainerPort int32 `protobuf:"varint,2,opt,name=container_port,json=containerPort,proto3" json:"container_port,omitempty"` -+ // Port number on the host. Default: 0 (not specified). -+ HostPort int32 `protobuf:"varint,3,opt,name=host_port,json=hostPort,proto3" json:"host_port,omitempty"` -+ // Host IP. -+ HostIp string `protobuf:"bytes,4,opt,name=host_ip,json=hostIp,proto3" json:"host_ip,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PortMapping) Reset() { *m = PortMapping{} } -+func (*PortMapping) ProtoMessage() {} -+func (*PortMapping) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{3} -+} -+func (m *PortMapping) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PortMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PortMapping.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PortMapping) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PortMapping.Merge(m, src) -+} -+func (m *PortMapping) XXX_Size() int { -+ return m.Size() -+} -+func (m *PortMapping) XXX_DiscardUnknown() { -+ xxx_messageInfo_PortMapping.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PortMapping proto.InternalMessageInfo -+ -+func (m *PortMapping) GetProtocol() Protocol { -+ if m != nil { -+ return m.Protocol -+ } -+ return Protocol_TCP -+} -+ -+func (m *PortMapping) GetContainerPort() int32 { -+ if m != nil { -+ return m.ContainerPort -+ } -+ return 0 -+} -+ -+func (m *PortMapping) GetHostPort() int32 { -+ if m != nil { -+ return m.HostPort -+ } -+ return 0 -+} -+ -+func (m *PortMapping) GetHostIp() string { -+ if m != nil { -+ return m.HostIp -+ } -+ return "" -+} -+ -+// Mount specifies a host volume to mount into a container. -+type Mount struct { -+ // Path of the mount within the container. -+ ContainerPath string `protobuf:"bytes,1,opt,name=container_path,json=containerPath,proto3" json:"container_path,omitempty"` -+ // Path of the mount on the host. If the hostPath doesn't exist, then runtimes -+ // should report error. If the hostpath is a symbolic link, runtimes should -+ // follow the symlink and mount the real destination to container. -+ HostPath string `protobuf:"bytes,2,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"` -+ // If set, the mount is read-only. -+ Readonly bool `protobuf:"varint,3,opt,name=readonly,proto3" json:"readonly,omitempty"` -+ // If set, the mount needs SELinux relabeling. -+ SelinuxRelabel bool `protobuf:"varint,4,opt,name=selinux_relabel,json=selinuxRelabel,proto3" json:"selinux_relabel,omitempty"` -+ // Requested propagation mode. -+ Propagation MountPropagation `protobuf:"varint,5,opt,name=propagation,proto3,enum=runtime.v1.MountPropagation" json:"propagation,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *Mount) Reset() { *m = Mount{} } -+func (*Mount) ProtoMessage() {} -+func (*Mount) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{4} -+} -+func (m *Mount) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *Mount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_Mount.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *Mount) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_Mount.Merge(m, src) -+} -+func (m *Mount) XXX_Size() int { -+ return m.Size() -+} -+func (m *Mount) XXX_DiscardUnknown() { -+ xxx_messageInfo_Mount.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_Mount proto.InternalMessageInfo -+ -+func (m *Mount) GetContainerPath() string { -+ if m != nil { -+ return m.ContainerPath -+ } -+ return "" -+} -+ -+func (m *Mount) GetHostPath() string { -+ if m != nil { -+ return m.HostPath -+ } -+ return "" -+} -+ -+func (m *Mount) GetReadonly() bool { -+ if m != nil { -+ return m.Readonly -+ } -+ return false -+} -+ -+func (m *Mount) GetSelinuxRelabel() bool { -+ if m != nil { -+ return m.SelinuxRelabel -+ } -+ return false -+} -+ -+func (m *Mount) GetPropagation() MountPropagation { -+ if m != nil { -+ return m.Propagation -+ } -+ return MountPropagation_PROPAGATION_PRIVATE -+} -+ -+// IDMapping describes host to container ID mappings for a pod sandbox. -+type IDMapping struct { -+ // HostId is the id on the host. -+ HostId uint32 `protobuf:"varint,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` -+ // ContainerId is the id in the container. -+ ContainerId uint32 `protobuf:"varint,2,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Length is the size of the range to map. -+ Length uint32 `protobuf:"varint,3,opt,name=length,proto3" json:"length,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *IDMapping) Reset() { *m = IDMapping{} } -+func (*IDMapping) ProtoMessage() {} -+func (*IDMapping) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{5} -+} -+func (m *IDMapping) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *IDMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_IDMapping.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *IDMapping) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_IDMapping.Merge(m, src) -+} -+func (m *IDMapping) XXX_Size() int { -+ return m.Size() -+} -+func (m *IDMapping) XXX_DiscardUnknown() { -+ xxx_messageInfo_IDMapping.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_IDMapping proto.InternalMessageInfo -+ -+func (m *IDMapping) GetHostId() uint32 { -+ if m != nil { -+ return m.HostId -+ } -+ return 0 -+} -+ -+func (m *IDMapping) GetContainerId() uint32 { -+ if m != nil { -+ return m.ContainerId -+ } -+ return 0 -+} -+ -+func (m *IDMapping) GetLength() uint32 { -+ if m != nil { -+ return m.Length -+ } -+ return 0 -+} -+ -+// UserNamespace describes the intended user namespace configuration for a pod sandbox. -+type UserNamespace struct { -+ // Mode is the NamespaceMode for this UserNamespace. -+ // Note: NamespaceMode for UserNamespace currently supports only POD and NODE, not CONTAINER OR TARGET. -+ Mode NamespaceMode `protobuf:"varint,1,opt,name=mode,proto3,enum=runtime.v1.NamespaceMode" json:"mode,omitempty"` -+ // Uids specifies the UID mappings for the user namespace. -+ Uids []*IDMapping `protobuf:"bytes,2,rep,name=uids,proto3" json:"uids,omitempty"` -+ // Gids specifies the GID mappings for the user namespace. -+ Gids []*IDMapping `protobuf:"bytes,3,rep,name=gids,proto3" json:"gids,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *UserNamespace) Reset() { *m = UserNamespace{} } -+func (*UserNamespace) ProtoMessage() {} -+func (*UserNamespace) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{6} -+} -+func (m *UserNamespace) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *UserNamespace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_UserNamespace.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *UserNamespace) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_UserNamespace.Merge(m, src) -+} -+func (m *UserNamespace) XXX_Size() int { -+ return m.Size() -+} -+func (m *UserNamespace) XXX_DiscardUnknown() { -+ xxx_messageInfo_UserNamespace.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_UserNamespace proto.InternalMessageInfo -+ -+func (m *UserNamespace) GetMode() NamespaceMode { -+ if m != nil { -+ return m.Mode -+ } -+ return NamespaceMode_POD -+} -+ -+func (m *UserNamespace) GetUids() []*IDMapping { -+ if m != nil { -+ return m.Uids -+ } -+ return nil -+} -+ -+func (m *UserNamespace) GetGids() []*IDMapping { -+ if m != nil { -+ return m.Gids -+ } -+ return nil -+} -+ -+// NamespaceOption provides options for Linux namespaces. -+type NamespaceOption struct { -+ // Network namespace for this container/sandbox. -+ // Note: There is currently no way to set CONTAINER scoped network in the Kubernetes API. -+ // Namespaces currently set by the kubelet: POD, NODE -+ Network NamespaceMode `protobuf:"varint,1,opt,name=network,proto3,enum=runtime.v1.NamespaceMode" json:"network,omitempty"` -+ // PID namespace for this container/sandbox. -+ // Note: The CRI default is POD, but the v1.PodSpec default is CONTAINER. -+ // The kubelet's runtime manager will set this to CONTAINER explicitly for v1 pods. -+ // Namespaces currently set by the kubelet: POD, CONTAINER, NODE, TARGET -+ Pid NamespaceMode `protobuf:"varint,2,opt,name=pid,proto3,enum=runtime.v1.NamespaceMode" json:"pid,omitempty"` -+ // IPC namespace for this container/sandbox. -+ // Note: There is currently no way to set CONTAINER scoped IPC in the Kubernetes API. -+ // Namespaces currently set by the kubelet: POD, NODE -+ Ipc NamespaceMode `protobuf:"varint,3,opt,name=ipc,proto3,enum=runtime.v1.NamespaceMode" json:"ipc,omitempty"` -+ // Target Container ID for NamespaceMode of TARGET. This container must have been -+ // previously created in the same pod. It is not possible to specify different targets -+ // for each namespace. -+ TargetId string `protobuf:"bytes,4,opt,name=target_id,json=targetId,proto3" json:"target_id,omitempty"` -+ // UsernsOptions for this pod sandbox. -+ // The Kubelet picks the user namespace configuration to use for the pod sandbox. The mappings -+ // are specified as part of the UserNamespace struct. If the struct is nil, then the POD mode -+ // must be assumed. This is done for backward compatibility with older Kubelet versions that -+ // do not set a user namespace. -+ UsernsOptions *UserNamespace `protobuf:"bytes,5,opt,name=userns_options,json=usernsOptions,proto3" json:"userns_options,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *NamespaceOption) Reset() { *m = NamespaceOption{} } -+func (*NamespaceOption) ProtoMessage() {} -+func (*NamespaceOption) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{7} -+} -+func (m *NamespaceOption) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *NamespaceOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_NamespaceOption.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *NamespaceOption) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_NamespaceOption.Merge(m, src) -+} -+func (m *NamespaceOption) XXX_Size() int { -+ return m.Size() -+} -+func (m *NamespaceOption) XXX_DiscardUnknown() { -+ xxx_messageInfo_NamespaceOption.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_NamespaceOption proto.InternalMessageInfo -+ -+func (m *NamespaceOption) GetNetwork() NamespaceMode { -+ if m != nil { -+ return m.Network -+ } -+ return NamespaceMode_POD -+} -+ -+func (m *NamespaceOption) GetPid() NamespaceMode { -+ if m != nil { -+ return m.Pid -+ } -+ return NamespaceMode_POD -+} -+ -+func (m *NamespaceOption) GetIpc() NamespaceMode { -+ if m != nil { -+ return m.Ipc -+ } -+ return NamespaceMode_POD -+} -+ -+func (m *NamespaceOption) GetTargetId() string { -+ if m != nil { -+ return m.TargetId -+ } -+ return "" -+} -+ -+func (m *NamespaceOption) GetUsernsOptions() *UserNamespace { -+ if m != nil { -+ return m.UsernsOptions -+ } -+ return nil -+} -+ -+// Int64Value is the wrapper of int64. -+type Int64Value struct { -+ // The value. -+ Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *Int64Value) Reset() { *m = Int64Value{} } -+func (*Int64Value) ProtoMessage() {} -+func (*Int64Value) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{8} -+} -+func (m *Int64Value) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *Int64Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_Int64Value.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *Int64Value) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_Int64Value.Merge(m, src) -+} -+func (m *Int64Value) XXX_Size() int { -+ return m.Size() -+} -+func (m *Int64Value) XXX_DiscardUnknown() { -+ xxx_messageInfo_Int64Value.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_Int64Value proto.InternalMessageInfo -+ -+func (m *Int64Value) GetValue() int64 { -+ if m != nil { -+ return m.Value -+ } -+ return 0 -+} -+ -+// LinuxSandboxSecurityContext holds linux security configuration that will be -+// applied to a sandbox. Note that: -+// 1. It does not apply to containers in the pods. -+// 2. It may not be applicable to a PodSandbox which does not contain any running -+// process. -+type LinuxSandboxSecurityContext struct { -+ // Configurations for the sandbox's namespaces. -+ // This will be used only if the PodSandbox uses namespace for isolation. -+ NamespaceOptions *NamespaceOption `protobuf:"bytes,1,opt,name=namespace_options,json=namespaceOptions,proto3" json:"namespace_options,omitempty"` -+ // Optional SELinux context to be applied. -+ SelinuxOptions *SELinuxOption `protobuf:"bytes,2,opt,name=selinux_options,json=selinuxOptions,proto3" json:"selinux_options,omitempty"` -+ // UID to run sandbox processes as, when applicable. -+ RunAsUser *Int64Value `protobuf:"bytes,3,opt,name=run_as_user,json=runAsUser,proto3" json:"run_as_user,omitempty"` -+ // GID to run sandbox processes as, when applicable. run_as_group should only -+ // be specified when run_as_user is specified; otherwise, the runtime MUST error. -+ RunAsGroup *Int64Value `protobuf:"bytes,8,opt,name=run_as_group,json=runAsGroup,proto3" json:"run_as_group,omitempty"` -+ // If set, the root filesystem of the sandbox is read-only. -+ ReadonlyRootfs bool `protobuf:"varint,4,opt,name=readonly_rootfs,json=readonlyRootfs,proto3" json:"readonly_rootfs,omitempty"` -+ // List of groups applied to the first process run in the sandbox, in -+ // addition to the sandbox's primary GID. -+ SupplementalGroups []int64 `protobuf:"varint,5,rep,packed,name=supplemental_groups,json=supplementalGroups,proto3" json:"supplemental_groups,omitempty"` -+ // Indicates whether the sandbox will be asked to run a privileged -+ // container. If a privileged container is to be executed within it, this -+ // MUST be true. -+ // This allows a sandbox to take additional security precautions if no -+ // privileged containers are expected to be run. -+ Privileged bool `protobuf:"varint,6,opt,name=privileged,proto3" json:"privileged,omitempty"` -+ // Seccomp profile for the sandbox. -+ Seccomp *SecurityProfile `protobuf:"bytes,9,opt,name=seccomp,proto3" json:"seccomp,omitempty"` -+ // AppArmor profile for the sandbox. -+ Apparmor *SecurityProfile `protobuf:"bytes,10,opt,name=apparmor,proto3" json:"apparmor,omitempty"` -+ // Seccomp profile for the sandbox, candidate values are: -+ // - runtime/default: the default profile for the container runtime -+ // - unconfined: unconfined profile, ie, no seccomp sandboxing -+ // - localhost/: the profile installed on the node. -+ // is the full path of the profile. -+ // -+ // Default: "", which is identical with unconfined. -+ SeccompProfilePath string `protobuf:"bytes,7,opt,name=seccomp_profile_path,json=seccompProfilePath,proto3" json:"seccomp_profile_path,omitempty"` // Deprecated: Do not use. -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *LinuxSandboxSecurityContext) Reset() { *m = LinuxSandboxSecurityContext{} } -+func (*LinuxSandboxSecurityContext) ProtoMessage() {} -+func (*LinuxSandboxSecurityContext) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{9} -+} -+func (m *LinuxSandboxSecurityContext) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *LinuxSandboxSecurityContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_LinuxSandboxSecurityContext.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *LinuxSandboxSecurityContext) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_LinuxSandboxSecurityContext.Merge(m, src) -+} -+func (m *LinuxSandboxSecurityContext) XXX_Size() int { -+ return m.Size() -+} -+func (m *LinuxSandboxSecurityContext) XXX_DiscardUnknown() { -+ xxx_messageInfo_LinuxSandboxSecurityContext.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_LinuxSandboxSecurityContext proto.InternalMessageInfo -+ -+func (m *LinuxSandboxSecurityContext) GetNamespaceOptions() *NamespaceOption { -+ if m != nil { -+ return m.NamespaceOptions -+ } -+ return nil -+} -+ -+func (m *LinuxSandboxSecurityContext) GetSelinuxOptions() *SELinuxOption { -+ if m != nil { -+ return m.SelinuxOptions -+ } -+ return nil -+} -+ -+func (m *LinuxSandboxSecurityContext) GetRunAsUser() *Int64Value { -+ if m != nil { -+ return m.RunAsUser -+ } -+ return nil -+} -+ -+func (m *LinuxSandboxSecurityContext) GetRunAsGroup() *Int64Value { -+ if m != nil { -+ return m.RunAsGroup -+ } -+ return nil -+} -+ -+func (m *LinuxSandboxSecurityContext) GetReadonlyRootfs() bool { -+ if m != nil { -+ return m.ReadonlyRootfs -+ } -+ return false -+} -+ -+func (m *LinuxSandboxSecurityContext) GetSupplementalGroups() []int64 { -+ if m != nil { -+ return m.SupplementalGroups -+ } -+ return nil -+} -+ -+func (m *LinuxSandboxSecurityContext) GetPrivileged() bool { -+ if m != nil { -+ return m.Privileged -+ } -+ return false -+} -+ -+func (m *LinuxSandboxSecurityContext) GetSeccomp() *SecurityProfile { -+ if m != nil { -+ return m.Seccomp -+ } -+ return nil -+} -+ -+func (m *LinuxSandboxSecurityContext) GetApparmor() *SecurityProfile { -+ if m != nil { -+ return m.Apparmor -+ } -+ return nil -+} -+ -+// Deprecated: Do not use. -+func (m *LinuxSandboxSecurityContext) GetSeccompProfilePath() string { -+ if m != nil { -+ return m.SeccompProfilePath -+ } -+ return "" -+} -+ -+// A security profile which can be used for sandboxes and containers. -+type SecurityProfile struct { -+ // Indicator which `ProfileType` should be applied. -+ ProfileType SecurityProfile_ProfileType `protobuf:"varint,1,opt,name=profile_type,json=profileType,proto3,enum=runtime.v1.SecurityProfile_ProfileType" json:"profile_type,omitempty"` -+ // Indicates that a pre-defined profile on the node should be used. -+ // Must only be set if `ProfileType` is `Localhost`. -+ // For seccomp, it must be an absolute path to the seccomp profile. -+ // For AppArmor, this field is the AppArmor `/` -+ LocalhostRef string `protobuf:"bytes,2,opt,name=localhost_ref,json=localhostRef,proto3" json:"localhost_ref,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *SecurityProfile) Reset() { *m = SecurityProfile{} } -+func (*SecurityProfile) ProtoMessage() {} -+func (*SecurityProfile) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{10} -+} -+func (m *SecurityProfile) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *SecurityProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_SecurityProfile.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *SecurityProfile) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_SecurityProfile.Merge(m, src) -+} -+func (m *SecurityProfile) XXX_Size() int { -+ return m.Size() -+} -+func (m *SecurityProfile) XXX_DiscardUnknown() { -+ xxx_messageInfo_SecurityProfile.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_SecurityProfile proto.InternalMessageInfo -+ -+func (m *SecurityProfile) GetProfileType() SecurityProfile_ProfileType { -+ if m != nil { -+ return m.ProfileType -+ } -+ return SecurityProfile_RuntimeDefault -+} -+ -+func (m *SecurityProfile) GetLocalhostRef() string { -+ if m != nil { -+ return m.LocalhostRef -+ } -+ return "" -+} -+ -+// LinuxPodSandboxConfig holds platform-specific configurations for Linux -+// host platforms and Linux-based containers. -+type LinuxPodSandboxConfig struct { -+ // Parent cgroup of the PodSandbox. -+ // The cgroupfs style syntax will be used, but the container runtime can -+ // convert it to systemd semantics if needed. -+ CgroupParent string `protobuf:"bytes,1,opt,name=cgroup_parent,json=cgroupParent,proto3" json:"cgroup_parent,omitempty"` -+ // LinuxSandboxSecurityContext holds sandbox security attributes. -+ SecurityContext *LinuxSandboxSecurityContext `protobuf:"bytes,2,opt,name=security_context,json=securityContext,proto3" json:"security_context,omitempty"` -+ // Sysctls holds linux sysctls config for the sandbox. -+ Sysctls map[string]string `protobuf:"bytes,3,rep,name=sysctls,proto3" json:"sysctls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Optional overhead represents the overheads associated with this sandbox -+ Overhead *LinuxContainerResources `protobuf:"bytes,4,opt,name=overhead,proto3" json:"overhead,omitempty"` -+ // Optional resources represents the sum of container resources for this sandbox -+ Resources *LinuxContainerResources `protobuf:"bytes,5,opt,name=resources,proto3" json:"resources,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *LinuxPodSandboxConfig) Reset() { *m = LinuxPodSandboxConfig{} } -+func (*LinuxPodSandboxConfig) ProtoMessage() {} -+func (*LinuxPodSandboxConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{11} -+} -+func (m *LinuxPodSandboxConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *LinuxPodSandboxConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_LinuxPodSandboxConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *LinuxPodSandboxConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_LinuxPodSandboxConfig.Merge(m, src) -+} -+func (m *LinuxPodSandboxConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *LinuxPodSandboxConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_LinuxPodSandboxConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_LinuxPodSandboxConfig proto.InternalMessageInfo -+ -+func (m *LinuxPodSandboxConfig) GetCgroupParent() string { -+ if m != nil { -+ return m.CgroupParent -+ } -+ return "" -+} -+ -+func (m *LinuxPodSandboxConfig) GetSecurityContext() *LinuxSandboxSecurityContext { -+ if m != nil { -+ return m.SecurityContext -+ } -+ return nil -+} -+ -+func (m *LinuxPodSandboxConfig) GetSysctls() map[string]string { -+ if m != nil { -+ return m.Sysctls -+ } -+ return nil -+} -+ -+func (m *LinuxPodSandboxConfig) GetOverhead() *LinuxContainerResources { -+ if m != nil { -+ return m.Overhead -+ } -+ return nil -+} -+ -+func (m *LinuxPodSandboxConfig) GetResources() *LinuxContainerResources { -+ if m != nil { -+ return m.Resources -+ } -+ return nil -+} -+ -+// PodSandboxMetadata holds all necessary information for building the sandbox name. -+// The container runtime is encouraged to expose the metadata associated with the -+// PodSandbox in its user interface for better user experience. For example, -+// the runtime can construct a unique PodSandboxName based on the metadata. -+type PodSandboxMetadata struct { -+ // Pod name of the sandbox. Same as the pod name in the Pod ObjectMeta. -+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -+ // Pod UID of the sandbox. Same as the pod UID in the Pod ObjectMeta. -+ Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` -+ // Pod namespace of the sandbox. Same as the pod namespace in the Pod ObjectMeta. -+ Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` -+ // Attempt number of creating the sandbox. Default: 0. -+ Attempt uint32 `protobuf:"varint,4,opt,name=attempt,proto3" json:"attempt,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxMetadata) Reset() { *m = PodSandboxMetadata{} } -+func (*PodSandboxMetadata) ProtoMessage() {} -+func (*PodSandboxMetadata) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{12} -+} -+func (m *PodSandboxMetadata) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxMetadata.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxMetadata) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxMetadata.Merge(m, src) -+} -+func (m *PodSandboxMetadata) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxMetadata) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxMetadata.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxMetadata proto.InternalMessageInfo -+ -+func (m *PodSandboxMetadata) GetName() string { -+ if m != nil { -+ return m.Name -+ } -+ return "" -+} -+ -+func (m *PodSandboxMetadata) GetUid() string { -+ if m != nil { -+ return m.Uid -+ } -+ return "" -+} -+ -+func (m *PodSandboxMetadata) GetNamespace() string { -+ if m != nil { -+ return m.Namespace -+ } -+ return "" -+} -+ -+func (m *PodSandboxMetadata) GetAttempt() uint32 { -+ if m != nil { -+ return m.Attempt -+ } -+ return 0 -+} -+ -+// PodSandboxConfig holds all the required and optional fields for creating a -+// sandbox. -+type PodSandboxConfig struct { -+ // Metadata of the sandbox. This information will uniquely identify the -+ // sandbox, and the runtime should leverage this to ensure correct -+ // operation. The runtime may also use this information to improve UX, such -+ // as by constructing a readable name. -+ Metadata *PodSandboxMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // Hostname of the sandbox. Hostname could only be empty when the pod -+ // network namespace is NODE. -+ Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"` -+ // Path to the directory on the host in which container log files are -+ // stored. -+ // By default the log of a container going into the LogDirectory will be -+ // hooked up to STDOUT and STDERR. However, the LogDirectory may contain -+ // binary log files with structured logging data from the individual -+ // containers. For example, the files might be newline separated JSON -+ // structured logs, systemd-journald journal files, gRPC trace files, etc. -+ // E.g., -+ // -+ // PodSandboxConfig.LogDirectory = `/var/log/pods//` -+ // ContainerConfig.LogPath = `containerName/Instance#.log` -+ LogDirectory string `protobuf:"bytes,3,opt,name=log_directory,json=logDirectory,proto3" json:"log_directory,omitempty"` -+ // DNS config for the sandbox. -+ DnsConfig *DNSConfig `protobuf:"bytes,4,opt,name=dns_config,json=dnsConfig,proto3" json:"dns_config,omitempty"` -+ // Port mappings for the sandbox. -+ PortMappings []*PortMapping `protobuf:"bytes,5,rep,name=port_mappings,json=portMappings,proto3" json:"port_mappings,omitempty"` -+ // Key-value pairs that may be used to scope and select individual resources. -+ Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Unstructured key-value map that may be set by the kubelet to store and -+ // retrieve arbitrary metadata. This will include any annotations set on a -+ // pod through the Kubernetes API. -+ // -+ // Annotations MUST NOT be altered by the runtime; the annotations stored -+ // here MUST be returned in the PodSandboxStatus associated with the pod -+ // this PodSandboxConfig creates. -+ // -+ // In general, in order to preserve a well-defined interface between the -+ // kubelet and the container runtime, annotations SHOULD NOT influence -+ // runtime behaviour. -+ // -+ // Annotations can also be useful for runtime authors to experiment with -+ // new features that are opaque to the Kubernetes APIs (both user-facing -+ // and the CRI). Whenever possible, however, runtime authors SHOULD -+ // consider proposing new typed fields for any new features instead. -+ Annotations map[string]string `protobuf:"bytes,7,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Optional configurations specific to Linux hosts. -+ Linux *LinuxPodSandboxConfig `protobuf:"bytes,8,opt,name=linux,proto3" json:"linux,omitempty"` -+ // Optional configurations specific to Windows hosts. -+ Windows *WindowsPodSandboxConfig `protobuf:"bytes,9,opt,name=windows,proto3" json:"windows,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxConfig) Reset() { *m = PodSandboxConfig{} } -+func (*PodSandboxConfig) ProtoMessage() {} -+func (*PodSandboxConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{13} -+} -+func (m *PodSandboxConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxConfig.Merge(m, src) -+} -+func (m *PodSandboxConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxConfig proto.InternalMessageInfo -+ -+func (m *PodSandboxConfig) GetMetadata() *PodSandboxMetadata { -+ if m != nil { -+ return m.Metadata -+ } -+ return nil -+} -+ -+func (m *PodSandboxConfig) GetHostname() string { -+ if m != nil { -+ return m.Hostname -+ } -+ return "" -+} -+ -+func (m *PodSandboxConfig) GetLogDirectory() string { -+ if m != nil { -+ return m.LogDirectory -+ } -+ return "" -+} -+ -+func (m *PodSandboxConfig) GetDnsConfig() *DNSConfig { -+ if m != nil { -+ return m.DnsConfig -+ } -+ return nil -+} -+ -+func (m *PodSandboxConfig) GetPortMappings() []*PortMapping { -+ if m != nil { -+ return m.PortMappings -+ } -+ return nil -+} -+ -+func (m *PodSandboxConfig) GetLabels() map[string]string { -+ if m != nil { -+ return m.Labels -+ } -+ return nil -+} -+ -+func (m *PodSandboxConfig) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+func (m *PodSandboxConfig) GetLinux() *LinuxPodSandboxConfig { -+ if m != nil { -+ return m.Linux -+ } -+ return nil -+} -+ -+func (m *PodSandboxConfig) GetWindows() *WindowsPodSandboxConfig { -+ if m != nil { -+ return m.Windows -+ } -+ return nil -+} -+ -+type RunPodSandboxRequest struct { -+ // Configuration for creating a PodSandbox. -+ Config *PodSandboxConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` -+ // Named runtime configuration to use for this PodSandbox. -+ // If the runtime handler is unknown, this request should be rejected. An -+ // empty string should select the default handler, equivalent to the -+ // behavior before this feature was added. -+ // See https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class -+ RuntimeHandler string `protobuf:"bytes,2,opt,name=runtime_handler,json=runtimeHandler,proto3" json:"runtime_handler,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RunPodSandboxRequest) Reset() { *m = RunPodSandboxRequest{} } -+func (*RunPodSandboxRequest) ProtoMessage() {} -+func (*RunPodSandboxRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{14} -+} -+func (m *RunPodSandboxRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RunPodSandboxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RunPodSandboxRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RunPodSandboxRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RunPodSandboxRequest.Merge(m, src) -+} -+func (m *RunPodSandboxRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *RunPodSandboxRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_RunPodSandboxRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RunPodSandboxRequest proto.InternalMessageInfo -+ -+func (m *RunPodSandboxRequest) GetConfig() *PodSandboxConfig { -+ if m != nil { -+ return m.Config -+ } -+ return nil -+} -+ -+func (m *RunPodSandboxRequest) GetRuntimeHandler() string { -+ if m != nil { -+ return m.RuntimeHandler -+ } -+ return "" -+} -+ -+type RunPodSandboxResponse struct { -+ // ID of the PodSandbox to run. -+ PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RunPodSandboxResponse) Reset() { *m = RunPodSandboxResponse{} } -+func (*RunPodSandboxResponse) ProtoMessage() {} -+func (*RunPodSandboxResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{15} -+} -+func (m *RunPodSandboxResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RunPodSandboxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RunPodSandboxResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RunPodSandboxResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RunPodSandboxResponse.Merge(m, src) -+} -+func (m *RunPodSandboxResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *RunPodSandboxResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_RunPodSandboxResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RunPodSandboxResponse proto.InternalMessageInfo -+ -+func (m *RunPodSandboxResponse) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+type StopPodSandboxRequest struct { -+ // ID of the PodSandbox to stop. -+ PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *StopPodSandboxRequest) Reset() { *m = StopPodSandboxRequest{} } -+func (*StopPodSandboxRequest) ProtoMessage() {} -+func (*StopPodSandboxRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{16} -+} -+func (m *StopPodSandboxRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *StopPodSandboxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_StopPodSandboxRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *StopPodSandboxRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_StopPodSandboxRequest.Merge(m, src) -+} -+func (m *StopPodSandboxRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *StopPodSandboxRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_StopPodSandboxRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_StopPodSandboxRequest proto.InternalMessageInfo -+ -+func (m *StopPodSandboxRequest) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+type StopPodSandboxResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *StopPodSandboxResponse) Reset() { *m = StopPodSandboxResponse{} } -+func (*StopPodSandboxResponse) ProtoMessage() {} -+func (*StopPodSandboxResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{17} -+} -+func (m *StopPodSandboxResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *StopPodSandboxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_StopPodSandboxResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *StopPodSandboxResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_StopPodSandboxResponse.Merge(m, src) -+} -+func (m *StopPodSandboxResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *StopPodSandboxResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_StopPodSandboxResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_StopPodSandboxResponse proto.InternalMessageInfo -+ -+type RemovePodSandboxRequest struct { -+ // ID of the PodSandbox to remove. -+ PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RemovePodSandboxRequest) Reset() { *m = RemovePodSandboxRequest{} } -+func (*RemovePodSandboxRequest) ProtoMessage() {} -+func (*RemovePodSandboxRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{18} -+} -+func (m *RemovePodSandboxRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RemovePodSandboxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RemovePodSandboxRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RemovePodSandboxRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RemovePodSandboxRequest.Merge(m, src) -+} -+func (m *RemovePodSandboxRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *RemovePodSandboxRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_RemovePodSandboxRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RemovePodSandboxRequest proto.InternalMessageInfo -+ -+func (m *RemovePodSandboxRequest) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+type RemovePodSandboxResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RemovePodSandboxResponse) Reset() { *m = RemovePodSandboxResponse{} } -+func (*RemovePodSandboxResponse) ProtoMessage() {} -+func (*RemovePodSandboxResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{19} -+} -+func (m *RemovePodSandboxResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RemovePodSandboxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RemovePodSandboxResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RemovePodSandboxResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RemovePodSandboxResponse.Merge(m, src) -+} -+func (m *RemovePodSandboxResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *RemovePodSandboxResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_RemovePodSandboxResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RemovePodSandboxResponse proto.InternalMessageInfo -+ -+type PodSandboxStatusRequest struct { -+ // ID of the PodSandbox for which to retrieve status. -+ PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ // Verbose indicates whether to return extra information about the pod sandbox. -+ Verbose bool `protobuf:"varint,2,opt,name=verbose,proto3" json:"verbose,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxStatusRequest) Reset() { *m = PodSandboxStatusRequest{} } -+func (*PodSandboxStatusRequest) ProtoMessage() {} -+func (*PodSandboxStatusRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{20} -+} -+func (m *PodSandboxStatusRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxStatusRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxStatusRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxStatusRequest.Merge(m, src) -+} -+func (m *PodSandboxStatusRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxStatusRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxStatusRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxStatusRequest proto.InternalMessageInfo -+ -+func (m *PodSandboxStatusRequest) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+func (m *PodSandboxStatusRequest) GetVerbose() bool { -+ if m != nil { -+ return m.Verbose -+ } -+ return false -+} -+ -+// PodIP represents an ip of a Pod -+type PodIP struct { -+ // an ip is a string representation of an IPv4 or an IPv6 -+ Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodIP) Reset() { *m = PodIP{} } -+func (*PodIP) ProtoMessage() {} -+func (*PodIP) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{21} -+} -+func (m *PodIP) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodIP) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodIP.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodIP) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodIP.Merge(m, src) -+} -+func (m *PodIP) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodIP) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodIP.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodIP proto.InternalMessageInfo -+ -+func (m *PodIP) GetIp() string { -+ if m != nil { -+ return m.Ip -+ } -+ return "" -+} -+ -+// PodSandboxNetworkStatus is the status of the network for a PodSandbox. -+// Currently ignored for pods sharing the host networking namespace. -+type PodSandboxNetworkStatus struct { -+ // IP address of the PodSandbox. -+ Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` -+ // list of additional ips (not inclusive of PodSandboxNetworkStatus.Ip) of the PodSandBoxNetworkStatus -+ AdditionalIps []*PodIP `protobuf:"bytes,2,rep,name=additional_ips,json=additionalIps,proto3" json:"additional_ips,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxNetworkStatus) Reset() { *m = PodSandboxNetworkStatus{} } -+func (*PodSandboxNetworkStatus) ProtoMessage() {} -+func (*PodSandboxNetworkStatus) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{22} -+} -+func (m *PodSandboxNetworkStatus) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxNetworkStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxNetworkStatus.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxNetworkStatus) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxNetworkStatus.Merge(m, src) -+} -+func (m *PodSandboxNetworkStatus) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxNetworkStatus) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxNetworkStatus.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxNetworkStatus proto.InternalMessageInfo -+ -+func (m *PodSandboxNetworkStatus) GetIp() string { -+ if m != nil { -+ return m.Ip -+ } -+ return "" -+} -+ -+func (m *PodSandboxNetworkStatus) GetAdditionalIps() []*PodIP { -+ if m != nil { -+ return m.AdditionalIps -+ } -+ return nil -+} -+ -+// Namespace contains paths to the namespaces. -+type Namespace struct { -+ // Namespace options for Linux namespaces. -+ Options *NamespaceOption `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *Namespace) Reset() { *m = Namespace{} } -+func (*Namespace) ProtoMessage() {} -+func (*Namespace) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{23} -+} -+func (m *Namespace) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *Namespace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_Namespace.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *Namespace) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_Namespace.Merge(m, src) -+} -+func (m *Namespace) XXX_Size() int { -+ return m.Size() -+} -+func (m *Namespace) XXX_DiscardUnknown() { -+ xxx_messageInfo_Namespace.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_Namespace proto.InternalMessageInfo -+ -+func (m *Namespace) GetOptions() *NamespaceOption { -+ if m != nil { -+ return m.Options -+ } -+ return nil -+} -+ -+// LinuxSandboxStatus contains status specific to Linux sandboxes. -+type LinuxPodSandboxStatus struct { -+ // Paths to the sandbox's namespaces. -+ Namespaces *Namespace `protobuf:"bytes,1,opt,name=namespaces,proto3" json:"namespaces,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *LinuxPodSandboxStatus) Reset() { *m = LinuxPodSandboxStatus{} } -+func (*LinuxPodSandboxStatus) ProtoMessage() {} -+func (*LinuxPodSandboxStatus) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{24} -+} -+func (m *LinuxPodSandboxStatus) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *LinuxPodSandboxStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_LinuxPodSandboxStatus.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *LinuxPodSandboxStatus) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_LinuxPodSandboxStatus.Merge(m, src) -+} -+func (m *LinuxPodSandboxStatus) XXX_Size() int { -+ return m.Size() -+} -+func (m *LinuxPodSandboxStatus) XXX_DiscardUnknown() { -+ xxx_messageInfo_LinuxPodSandboxStatus.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_LinuxPodSandboxStatus proto.InternalMessageInfo -+ -+func (m *LinuxPodSandboxStatus) GetNamespaces() *Namespace { -+ if m != nil { -+ return m.Namespaces -+ } -+ return nil -+} -+ -+// PodSandboxStatus contains the status of the PodSandbox. -+type PodSandboxStatus struct { -+ // ID of the sandbox. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // Metadata of the sandbox. -+ Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // State of the sandbox. -+ State PodSandboxState `protobuf:"varint,3,opt,name=state,proto3,enum=runtime.v1.PodSandboxState" json:"state,omitempty"` -+ // Creation timestamp of the sandbox in nanoseconds. Must be > 0. -+ CreatedAt int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` -+ // Network contains network status if network is handled by the runtime. -+ Network *PodSandboxNetworkStatus `protobuf:"bytes,5,opt,name=network,proto3" json:"network,omitempty"` -+ // Linux-specific status to a pod sandbox. -+ Linux *LinuxPodSandboxStatus `protobuf:"bytes,6,opt,name=linux,proto3" json:"linux,omitempty"` -+ // Labels are key-value pairs that may be used to scope and select individual resources. -+ Labels map[string]string `protobuf:"bytes,7,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding PodSandboxConfig used to -+ // instantiate the pod sandbox this status represents. -+ Annotations map[string]string `protobuf:"bytes,8,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // runtime configuration used for this PodSandbox. -+ RuntimeHandler string `protobuf:"bytes,9,opt,name=runtime_handler,json=runtimeHandler,proto3" json:"runtime_handler,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxStatus) Reset() { *m = PodSandboxStatus{} } -+func (*PodSandboxStatus) ProtoMessage() {} -+func (*PodSandboxStatus) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{25} -+} -+func (m *PodSandboxStatus) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxStatus.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxStatus) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxStatus.Merge(m, src) -+} -+func (m *PodSandboxStatus) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxStatus) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxStatus.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxStatus proto.InternalMessageInfo -+ -+func (m *PodSandboxStatus) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *PodSandboxStatus) GetMetadata() *PodSandboxMetadata { -+ if m != nil { -+ return m.Metadata -+ } -+ return nil -+} -+ -+func (m *PodSandboxStatus) GetState() PodSandboxState { -+ if m != nil { -+ return m.State -+ } -+ return PodSandboxState_SANDBOX_READY -+} -+ -+func (m *PodSandboxStatus) GetCreatedAt() int64 { -+ if m != nil { -+ return m.CreatedAt -+ } -+ return 0 -+} -+ -+func (m *PodSandboxStatus) GetNetwork() *PodSandboxNetworkStatus { -+ if m != nil { -+ return m.Network -+ } -+ return nil -+} -+ -+func (m *PodSandboxStatus) GetLinux() *LinuxPodSandboxStatus { -+ if m != nil { -+ return m.Linux -+ } -+ return nil -+} -+ -+func (m *PodSandboxStatus) GetLabels() map[string]string { -+ if m != nil { -+ return m.Labels -+ } -+ return nil -+} -+ -+func (m *PodSandboxStatus) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+func (m *PodSandboxStatus) GetRuntimeHandler() string { -+ if m != nil { -+ return m.RuntimeHandler -+ } -+ return "" -+} -+ -+type PodSandboxStatusResponse struct { -+ // Status of the PodSandbox. -+ Status *PodSandboxStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` -+ // Info is extra information of the PodSandbox. The key could be arbitrary string, and -+ // value should be in json format. The information could include anything useful for -+ // debug, e.g. network namespace for linux container based container runtime. -+ // It should only be returned non-empty when Verbose is true. -+ Info map[string]string `protobuf:"bytes,2,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxStatusResponse) Reset() { *m = PodSandboxStatusResponse{} } -+func (*PodSandboxStatusResponse) ProtoMessage() {} -+func (*PodSandboxStatusResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{26} -+} -+func (m *PodSandboxStatusResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxStatusResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxStatusResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxStatusResponse.Merge(m, src) -+} -+func (m *PodSandboxStatusResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxStatusResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxStatusResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxStatusResponse proto.InternalMessageInfo -+ -+func (m *PodSandboxStatusResponse) GetStatus() *PodSandboxStatus { -+ if m != nil { -+ return m.Status -+ } -+ return nil -+} -+ -+func (m *PodSandboxStatusResponse) GetInfo() map[string]string { -+ if m != nil { -+ return m.Info -+ } -+ return nil -+} -+ -+// PodSandboxStateValue is the wrapper of PodSandboxState. -+type PodSandboxStateValue struct { -+ // State of the sandbox. -+ State PodSandboxState `protobuf:"varint,1,opt,name=state,proto3,enum=runtime.v1.PodSandboxState" json:"state,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxStateValue) Reset() { *m = PodSandboxStateValue{} } -+func (*PodSandboxStateValue) ProtoMessage() {} -+func (*PodSandboxStateValue) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{27} -+} -+func (m *PodSandboxStateValue) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxStateValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxStateValue.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxStateValue) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxStateValue.Merge(m, src) -+} -+func (m *PodSandboxStateValue) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxStateValue) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxStateValue.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxStateValue proto.InternalMessageInfo -+ -+func (m *PodSandboxStateValue) GetState() PodSandboxState { -+ if m != nil { -+ return m.State -+ } -+ return PodSandboxState_SANDBOX_READY -+} -+ -+// PodSandboxFilter is used to filter a list of PodSandboxes. -+// All those fields are combined with 'AND' -+type PodSandboxFilter struct { -+ // ID of the sandbox. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // State of the sandbox. -+ State *PodSandboxStateValue `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` -+ // LabelSelector to select matches. -+ // Only api.MatchLabels is supported for now and the requirements -+ // are ANDed. MatchExpressions is not supported yet. -+ LabelSelector map[string]string `protobuf:"bytes,3,rep,name=label_selector,json=labelSelector,proto3" json:"label_selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxFilter) Reset() { *m = PodSandboxFilter{} } -+func (*PodSandboxFilter) ProtoMessage() {} -+func (*PodSandboxFilter) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{28} -+} -+func (m *PodSandboxFilter) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxFilter.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxFilter) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxFilter.Merge(m, src) -+} -+func (m *PodSandboxFilter) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxFilter) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxFilter.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxFilter proto.InternalMessageInfo -+ -+func (m *PodSandboxFilter) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *PodSandboxFilter) GetState() *PodSandboxStateValue { -+ if m != nil { -+ return m.State -+ } -+ return nil -+} -+ -+func (m *PodSandboxFilter) GetLabelSelector() map[string]string { -+ if m != nil { -+ return m.LabelSelector -+ } -+ return nil -+} -+ -+type ListPodSandboxRequest struct { -+ // PodSandboxFilter to filter a list of PodSandboxes. -+ Filter *PodSandboxFilter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListPodSandboxRequest) Reset() { *m = ListPodSandboxRequest{} } -+func (*ListPodSandboxRequest) ProtoMessage() {} -+func (*ListPodSandboxRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{29} -+} -+func (m *ListPodSandboxRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListPodSandboxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListPodSandboxRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListPodSandboxRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListPodSandboxRequest.Merge(m, src) -+} -+func (m *ListPodSandboxRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListPodSandboxRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListPodSandboxRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListPodSandboxRequest proto.InternalMessageInfo -+ -+func (m *ListPodSandboxRequest) GetFilter() *PodSandboxFilter { -+ if m != nil { -+ return m.Filter -+ } -+ return nil -+} -+ -+// PodSandbox contains minimal information about a sandbox. -+type PodSandbox struct { -+ // ID of the PodSandbox. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // Metadata of the PodSandbox. -+ Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // State of the PodSandbox. -+ State PodSandboxState `protobuf:"varint,3,opt,name=state,proto3,enum=runtime.v1.PodSandboxState" json:"state,omitempty"` -+ // Creation timestamps of the PodSandbox in nanoseconds. Must be > 0. -+ CreatedAt int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` -+ // Labels of the PodSandbox. -+ Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding PodSandboxConfig used to -+ // instantiate this PodSandbox. -+ Annotations map[string]string `protobuf:"bytes,6,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // runtime configuration used for this PodSandbox. -+ RuntimeHandler string `protobuf:"bytes,7,opt,name=runtime_handler,json=runtimeHandler,proto3" json:"runtime_handler,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandbox) Reset() { *m = PodSandbox{} } -+func (*PodSandbox) ProtoMessage() {} -+func (*PodSandbox) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{30} -+} -+func (m *PodSandbox) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandbox) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandbox.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandbox) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandbox.Merge(m, src) -+} -+func (m *PodSandbox) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandbox) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandbox.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandbox proto.InternalMessageInfo -+ -+func (m *PodSandbox) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *PodSandbox) GetMetadata() *PodSandboxMetadata { -+ if m != nil { -+ return m.Metadata -+ } -+ return nil -+} -+ -+func (m *PodSandbox) GetState() PodSandboxState { -+ if m != nil { -+ return m.State -+ } -+ return PodSandboxState_SANDBOX_READY -+} -+ -+func (m *PodSandbox) GetCreatedAt() int64 { -+ if m != nil { -+ return m.CreatedAt -+ } -+ return 0 -+} -+ -+func (m *PodSandbox) GetLabels() map[string]string { -+ if m != nil { -+ return m.Labels -+ } -+ return nil -+} -+ -+func (m *PodSandbox) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+func (m *PodSandbox) GetRuntimeHandler() string { -+ if m != nil { -+ return m.RuntimeHandler -+ } -+ return "" -+} -+ -+type ListPodSandboxResponse struct { -+ // List of PodSandboxes. -+ Items []*PodSandbox `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListPodSandboxResponse) Reset() { *m = ListPodSandboxResponse{} } -+func (*ListPodSandboxResponse) ProtoMessage() {} -+func (*ListPodSandboxResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{31} -+} -+func (m *ListPodSandboxResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListPodSandboxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListPodSandboxResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListPodSandboxResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListPodSandboxResponse.Merge(m, src) -+} -+func (m *ListPodSandboxResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListPodSandboxResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListPodSandboxResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListPodSandboxResponse proto.InternalMessageInfo -+ -+func (m *ListPodSandboxResponse) GetItems() []*PodSandbox { -+ if m != nil { -+ return m.Items -+ } -+ return nil -+} -+ -+type PodSandboxStatsRequest struct { -+ // ID of the pod sandbox for which to retrieve stats. -+ PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxStatsRequest) Reset() { *m = PodSandboxStatsRequest{} } -+func (*PodSandboxStatsRequest) ProtoMessage() {} -+func (*PodSandboxStatsRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{32} -+} -+func (m *PodSandboxStatsRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxStatsRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxStatsRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxStatsRequest.Merge(m, src) -+} -+func (m *PodSandboxStatsRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxStatsRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxStatsRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxStatsRequest proto.InternalMessageInfo -+ -+func (m *PodSandboxStatsRequest) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+type PodSandboxStatsResponse struct { -+ Stats *PodSandboxStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxStatsResponse) Reset() { *m = PodSandboxStatsResponse{} } -+func (*PodSandboxStatsResponse) ProtoMessage() {} -+func (*PodSandboxStatsResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{33} -+} -+func (m *PodSandboxStatsResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxStatsResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxStatsResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxStatsResponse.Merge(m, src) -+} -+func (m *PodSandboxStatsResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxStatsResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxStatsResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxStatsResponse proto.InternalMessageInfo -+ -+func (m *PodSandboxStatsResponse) GetStats() *PodSandboxStats { -+ if m != nil { -+ return m.Stats -+ } -+ return nil -+} -+ -+// PodSandboxStatsFilter is used to filter the list of pod sandboxes to retrieve stats for. -+// All those fields are combined with 'AND'. -+type PodSandboxStatsFilter struct { -+ // ID of the pod sandbox. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // LabelSelector to select matches. -+ // Only api.MatchLabels is supported for now and the requirements -+ // are ANDed. MatchExpressions is not supported yet. -+ LabelSelector map[string]string `protobuf:"bytes,2,rep,name=label_selector,json=labelSelector,proto3" json:"label_selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxStatsFilter) Reset() { *m = PodSandboxStatsFilter{} } -+func (*PodSandboxStatsFilter) ProtoMessage() {} -+func (*PodSandboxStatsFilter) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{34} -+} -+func (m *PodSandboxStatsFilter) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxStatsFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxStatsFilter.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxStatsFilter) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxStatsFilter.Merge(m, src) -+} -+func (m *PodSandboxStatsFilter) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxStatsFilter) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxStatsFilter.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxStatsFilter proto.InternalMessageInfo -+ -+func (m *PodSandboxStatsFilter) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *PodSandboxStatsFilter) GetLabelSelector() map[string]string { -+ if m != nil { -+ return m.LabelSelector -+ } -+ return nil -+} -+ -+type ListPodSandboxStatsRequest struct { -+ // Filter for the list request. -+ Filter *PodSandboxStatsFilter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListPodSandboxStatsRequest) Reset() { *m = ListPodSandboxStatsRequest{} } -+func (*ListPodSandboxStatsRequest) ProtoMessage() {} -+func (*ListPodSandboxStatsRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{35} -+} -+func (m *ListPodSandboxStatsRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListPodSandboxStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListPodSandboxStatsRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListPodSandboxStatsRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListPodSandboxStatsRequest.Merge(m, src) -+} -+func (m *ListPodSandboxStatsRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListPodSandboxStatsRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListPodSandboxStatsRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListPodSandboxStatsRequest proto.InternalMessageInfo -+ -+func (m *ListPodSandboxStatsRequest) GetFilter() *PodSandboxStatsFilter { -+ if m != nil { -+ return m.Filter -+ } -+ return nil -+} -+ -+type ListPodSandboxStatsResponse struct { -+ // Stats of the pod sandbox. -+ Stats []*PodSandboxStats `protobuf:"bytes,1,rep,name=stats,proto3" json:"stats,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListPodSandboxStatsResponse) Reset() { *m = ListPodSandboxStatsResponse{} } -+func (*ListPodSandboxStatsResponse) ProtoMessage() {} -+func (*ListPodSandboxStatsResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{36} -+} -+func (m *ListPodSandboxStatsResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListPodSandboxStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListPodSandboxStatsResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListPodSandboxStatsResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListPodSandboxStatsResponse.Merge(m, src) -+} -+func (m *ListPodSandboxStatsResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListPodSandboxStatsResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListPodSandboxStatsResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListPodSandboxStatsResponse proto.InternalMessageInfo -+ -+func (m *ListPodSandboxStatsResponse) GetStats() []*PodSandboxStats { -+ if m != nil { -+ return m.Stats -+ } -+ return nil -+} -+ -+// PodSandboxAttributes provides basic information of the pod sandbox. -+type PodSandboxAttributes struct { -+ // ID of the pod sandbox. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // Metadata of the pod sandbox. -+ Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // Key-value pairs that may be used to scope and select individual resources. -+ Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding PodSandboxStatus used to -+ // instantiate the PodSandbox this status represents. -+ Annotations map[string]string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxAttributes) Reset() { *m = PodSandboxAttributes{} } -+func (*PodSandboxAttributes) ProtoMessage() {} -+func (*PodSandboxAttributes) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{37} -+} -+func (m *PodSandboxAttributes) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxAttributes.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxAttributes) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxAttributes.Merge(m, src) -+} -+func (m *PodSandboxAttributes) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxAttributes) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxAttributes.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxAttributes proto.InternalMessageInfo -+ -+func (m *PodSandboxAttributes) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *PodSandboxAttributes) GetMetadata() *PodSandboxMetadata { -+ if m != nil { -+ return m.Metadata -+ } -+ return nil -+} -+ -+func (m *PodSandboxAttributes) GetLabels() map[string]string { -+ if m != nil { -+ return m.Labels -+ } -+ return nil -+} -+ -+func (m *PodSandboxAttributes) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+// PodSandboxStats provides the resource usage statistics for a pod. -+// The linux or windows field will be populated depending on the platform. -+type PodSandboxStats struct { -+ // Information of the pod. -+ Attributes *PodSandboxAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` -+ // Stats from linux. -+ Linux *LinuxPodSandboxStats `protobuf:"bytes,2,opt,name=linux,proto3" json:"linux,omitempty"` -+ // Stats from windows. -+ Windows *WindowsPodSandboxStats `protobuf:"bytes,3,opt,name=windows,proto3" json:"windows,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PodSandboxStats) Reset() { *m = PodSandboxStats{} } -+func (*PodSandboxStats) ProtoMessage() {} -+func (*PodSandboxStats) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{38} -+} -+func (m *PodSandboxStats) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PodSandboxStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PodSandboxStats.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PodSandboxStats) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PodSandboxStats.Merge(m, src) -+} -+func (m *PodSandboxStats) XXX_Size() int { -+ return m.Size() -+} -+func (m *PodSandboxStats) XXX_DiscardUnknown() { -+ xxx_messageInfo_PodSandboxStats.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PodSandboxStats proto.InternalMessageInfo -+ -+func (m *PodSandboxStats) GetAttributes() *PodSandboxAttributes { -+ if m != nil { -+ return m.Attributes -+ } -+ return nil -+} -+ -+func (m *PodSandboxStats) GetLinux() *LinuxPodSandboxStats { -+ if m != nil { -+ return m.Linux -+ } -+ return nil -+} -+ -+func (m *PodSandboxStats) GetWindows() *WindowsPodSandboxStats { -+ if m != nil { -+ return m.Windows -+ } -+ return nil -+} -+ -+// LinuxPodSandboxStats provides the resource usage statistics for a pod sandbox on linux. -+type LinuxPodSandboxStats struct { -+ // CPU usage gathered for the pod sandbox. -+ Cpu *CpuUsage `protobuf:"bytes,1,opt,name=cpu,proto3" json:"cpu,omitempty"` -+ // Memory usage gathered for the pod sandbox. -+ Memory *MemoryUsage `protobuf:"bytes,2,opt,name=memory,proto3" json:"memory,omitempty"` -+ // Network usage gathered for the pod sandbox -+ Network *NetworkUsage `protobuf:"bytes,3,opt,name=network,proto3" json:"network,omitempty"` -+ // Stats pertaining to processes in the pod sandbox. -+ Process *ProcessUsage `protobuf:"bytes,4,opt,name=process,proto3" json:"process,omitempty"` -+ // Stats of containers in the measured pod sandbox. -+ Containers []*ContainerStats `protobuf:"bytes,5,rep,name=containers,proto3" json:"containers,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *LinuxPodSandboxStats) Reset() { *m = LinuxPodSandboxStats{} } -+func (*LinuxPodSandboxStats) ProtoMessage() {} -+func (*LinuxPodSandboxStats) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{39} -+} -+func (m *LinuxPodSandboxStats) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *LinuxPodSandboxStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_LinuxPodSandboxStats.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *LinuxPodSandboxStats) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_LinuxPodSandboxStats.Merge(m, src) -+} -+func (m *LinuxPodSandboxStats) XXX_Size() int { -+ return m.Size() -+} -+func (m *LinuxPodSandboxStats) XXX_DiscardUnknown() { -+ xxx_messageInfo_LinuxPodSandboxStats.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_LinuxPodSandboxStats proto.InternalMessageInfo -+ -+func (m *LinuxPodSandboxStats) GetCpu() *CpuUsage { -+ if m != nil { -+ return m.Cpu -+ } -+ return nil -+} -+ -+func (m *LinuxPodSandboxStats) GetMemory() *MemoryUsage { -+ if m != nil { -+ return m.Memory -+ } -+ return nil -+} -+ -+func (m *LinuxPodSandboxStats) GetNetwork() *NetworkUsage { -+ if m != nil { -+ return m.Network -+ } -+ return nil -+} -+ -+func (m *LinuxPodSandboxStats) GetProcess() *ProcessUsage { -+ if m != nil { -+ return m.Process -+ } -+ return nil -+} -+ -+func (m *LinuxPodSandboxStats) GetContainers() []*ContainerStats { -+ if m != nil { -+ return m.Containers -+ } -+ return nil -+} -+ -+// WindowsPodSandboxStats provides the resource usage statistics for a pod sandbox on windows -+type WindowsPodSandboxStats struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *WindowsPodSandboxStats) Reset() { *m = WindowsPodSandboxStats{} } -+func (*WindowsPodSandboxStats) ProtoMessage() {} -+func (*WindowsPodSandboxStats) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{40} -+} -+func (m *WindowsPodSandboxStats) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *WindowsPodSandboxStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_WindowsPodSandboxStats.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *WindowsPodSandboxStats) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_WindowsPodSandboxStats.Merge(m, src) -+} -+func (m *WindowsPodSandboxStats) XXX_Size() int { -+ return m.Size() -+} -+func (m *WindowsPodSandboxStats) XXX_DiscardUnknown() { -+ xxx_messageInfo_WindowsPodSandboxStats.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_WindowsPodSandboxStats proto.InternalMessageInfo -+ -+// NetworkUsage contains data about network resources. -+type NetworkUsage struct { -+ // The time at which these stats were updated. -+ Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -+ // Stats for the default network interface. -+ DefaultInterface *NetworkInterfaceUsage `protobuf:"bytes,2,opt,name=default_interface,json=defaultInterface,proto3" json:"default_interface,omitempty"` -+ // Stats for all found network interfaces, excluding the default. -+ Interfaces []*NetworkInterfaceUsage `protobuf:"bytes,3,rep,name=interfaces,proto3" json:"interfaces,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *NetworkUsage) Reset() { *m = NetworkUsage{} } -+func (*NetworkUsage) ProtoMessage() {} -+func (*NetworkUsage) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{41} -+} -+func (m *NetworkUsage) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *NetworkUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_NetworkUsage.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *NetworkUsage) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_NetworkUsage.Merge(m, src) -+} -+func (m *NetworkUsage) XXX_Size() int { -+ return m.Size() -+} -+func (m *NetworkUsage) XXX_DiscardUnknown() { -+ xxx_messageInfo_NetworkUsage.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_NetworkUsage proto.InternalMessageInfo -+ -+func (m *NetworkUsage) GetTimestamp() int64 { -+ if m != nil { -+ return m.Timestamp -+ } -+ return 0 -+} -+ -+func (m *NetworkUsage) GetDefaultInterface() *NetworkInterfaceUsage { -+ if m != nil { -+ return m.DefaultInterface -+ } -+ return nil -+} -+ -+func (m *NetworkUsage) GetInterfaces() []*NetworkInterfaceUsage { -+ if m != nil { -+ return m.Interfaces -+ } -+ return nil -+} -+ -+// NetworkInterfaceUsage contains resource value data about a network interface. -+type NetworkInterfaceUsage struct { -+ // The name of the network interface. -+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -+ // Cumulative count of bytes received. -+ RxBytes *UInt64Value `protobuf:"bytes,2,opt,name=rx_bytes,json=rxBytes,proto3" json:"rx_bytes,omitempty"` -+ // Cumulative count of receive errors encountered. -+ RxErrors *UInt64Value `protobuf:"bytes,3,opt,name=rx_errors,json=rxErrors,proto3" json:"rx_errors,omitempty"` -+ // Cumulative count of bytes transmitted. -+ TxBytes *UInt64Value `protobuf:"bytes,4,opt,name=tx_bytes,json=txBytes,proto3" json:"tx_bytes,omitempty"` -+ // Cumulative count of transmit errors encountered. -+ TxErrors *UInt64Value `protobuf:"bytes,5,opt,name=tx_errors,json=txErrors,proto3" json:"tx_errors,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *NetworkInterfaceUsage) Reset() { *m = NetworkInterfaceUsage{} } -+func (*NetworkInterfaceUsage) ProtoMessage() {} -+func (*NetworkInterfaceUsage) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{42} -+} -+func (m *NetworkInterfaceUsage) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *NetworkInterfaceUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_NetworkInterfaceUsage.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *NetworkInterfaceUsage) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_NetworkInterfaceUsage.Merge(m, src) -+} -+func (m *NetworkInterfaceUsage) XXX_Size() int { -+ return m.Size() -+} -+func (m *NetworkInterfaceUsage) XXX_DiscardUnknown() { -+ xxx_messageInfo_NetworkInterfaceUsage.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_NetworkInterfaceUsage proto.InternalMessageInfo -+ -+func (m *NetworkInterfaceUsage) GetName() string { -+ if m != nil { -+ return m.Name -+ } -+ return "" -+} -+ -+func (m *NetworkInterfaceUsage) GetRxBytes() *UInt64Value { -+ if m != nil { -+ return m.RxBytes -+ } -+ return nil -+} -+ -+func (m *NetworkInterfaceUsage) GetRxErrors() *UInt64Value { -+ if m != nil { -+ return m.RxErrors -+ } -+ return nil -+} -+ -+func (m *NetworkInterfaceUsage) GetTxBytes() *UInt64Value { -+ if m != nil { -+ return m.TxBytes -+ } -+ return nil -+} -+ -+func (m *NetworkInterfaceUsage) GetTxErrors() *UInt64Value { -+ if m != nil { -+ return m.TxErrors -+ } -+ return nil -+} -+ -+// ProcessUsage are stats pertaining to processes. -+type ProcessUsage struct { -+ // The time at which these stats were updated. -+ Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -+ // Number of processes. -+ ProcessCount *UInt64Value `protobuf:"bytes,2,opt,name=process_count,json=processCount,proto3" json:"process_count,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ProcessUsage) Reset() { *m = ProcessUsage{} } -+func (*ProcessUsage) ProtoMessage() {} -+func (*ProcessUsage) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{43} -+} -+func (m *ProcessUsage) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ProcessUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ProcessUsage.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ProcessUsage) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ProcessUsage.Merge(m, src) -+} -+func (m *ProcessUsage) XXX_Size() int { -+ return m.Size() -+} -+func (m *ProcessUsage) XXX_DiscardUnknown() { -+ xxx_messageInfo_ProcessUsage.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ProcessUsage proto.InternalMessageInfo -+ -+func (m *ProcessUsage) GetTimestamp() int64 { -+ if m != nil { -+ return m.Timestamp -+ } -+ return 0 -+} -+ -+func (m *ProcessUsage) GetProcessCount() *UInt64Value { -+ if m != nil { -+ return m.ProcessCount -+ } -+ return nil -+} -+ -+// ImageSpec is an internal representation of an image. -+type ImageSpec struct { -+ // Container's Image field (e.g. imageID or imageDigest). -+ Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` -+ // Unstructured key-value map holding arbitrary metadata. -+ // ImageSpec Annotations can be used to help the runtime target specific -+ // images in multi-arch images. -+ Annotations map[string]string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ImageSpec) Reset() { *m = ImageSpec{} } -+func (*ImageSpec) ProtoMessage() {} -+func (*ImageSpec) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{44} -+} -+func (m *ImageSpec) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ImageSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ImageSpec.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ImageSpec) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ImageSpec.Merge(m, src) -+} -+func (m *ImageSpec) XXX_Size() int { -+ return m.Size() -+} -+func (m *ImageSpec) XXX_DiscardUnknown() { -+ xxx_messageInfo_ImageSpec.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ImageSpec proto.InternalMessageInfo -+ -+func (m *ImageSpec) GetImage() string { -+ if m != nil { -+ return m.Image -+ } -+ return "" -+} -+ -+func (m *ImageSpec) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+type KeyValue struct { -+ Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` -+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *KeyValue) Reset() { *m = KeyValue{} } -+func (*KeyValue) ProtoMessage() {} -+func (*KeyValue) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{45} -+} -+func (m *KeyValue) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *KeyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_KeyValue.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *KeyValue) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_KeyValue.Merge(m, src) -+} -+func (m *KeyValue) XXX_Size() int { -+ return m.Size() -+} -+func (m *KeyValue) XXX_DiscardUnknown() { -+ xxx_messageInfo_KeyValue.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_KeyValue proto.InternalMessageInfo -+ -+func (m *KeyValue) GetKey() string { -+ if m != nil { -+ return m.Key -+ } -+ return "" -+} -+ -+func (m *KeyValue) GetValue() string { -+ if m != nil { -+ return m.Value -+ } -+ return "" -+} -+ -+// LinuxContainerResources specifies Linux specific configuration for -+// resources. -+type LinuxContainerResources struct { -+ // CPU CFS (Completely Fair Scheduler) period. Default: 0 (not specified). -+ CpuPeriod int64 `protobuf:"varint,1,opt,name=cpu_period,json=cpuPeriod,proto3" json:"cpu_period,omitempty"` -+ // CPU CFS (Completely Fair Scheduler) quota. Default: 0 (not specified). -+ CpuQuota int64 `protobuf:"varint,2,opt,name=cpu_quota,json=cpuQuota,proto3" json:"cpu_quota,omitempty"` -+ // CPU shares (relative weight vs. other containers). Default: 0 (not specified). -+ CpuShares int64 `protobuf:"varint,3,opt,name=cpu_shares,json=cpuShares,proto3" json:"cpu_shares,omitempty"` -+ // Memory limit in bytes. Default: 0 (not specified). -+ MemoryLimitInBytes int64 `protobuf:"varint,4,opt,name=memory_limit_in_bytes,json=memoryLimitInBytes,proto3" json:"memory_limit_in_bytes,omitempty"` -+ // OOMScoreAdj adjusts the oom-killer score. Default: 0 (not specified). -+ OomScoreAdj int64 `protobuf:"varint,5,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` -+ // CpusetCpus constrains the allowed set of logical CPUs. Default: "" (not specified). -+ CpusetCpus string `protobuf:"bytes,6,opt,name=cpuset_cpus,json=cpusetCpus,proto3" json:"cpuset_cpus,omitempty"` -+ // CpusetMems constrains the allowed set of memory nodes. Default: "" (not specified). -+ CpusetMems string `protobuf:"bytes,7,opt,name=cpuset_mems,json=cpusetMems,proto3" json:"cpuset_mems,omitempty"` -+ // List of HugepageLimits to limit the HugeTLB usage of container per page size. Default: nil (not specified). -+ HugepageLimits []*HugepageLimit `protobuf:"bytes,8,rep,name=hugepage_limits,json=hugepageLimits,proto3" json:"hugepage_limits,omitempty"` -+ // Unified resources for cgroup v2. Default: nil (not specified). -+ // Each key/value in the map refers to the cgroup v2. -+ // e.g. "memory.max": "6937202688" or "io.weight": "default 100". -+ Unified map[string]string `protobuf:"bytes,9,rep,name=unified,proto3" json:"unified,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Memory swap limit in bytes. Default 0 (not specified). -+ MemorySwapLimitInBytes int64 `protobuf:"varint,10,opt,name=memory_swap_limit_in_bytes,json=memorySwapLimitInBytes,proto3" json:"memory_swap_limit_in_bytes,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *LinuxContainerResources) Reset() { *m = LinuxContainerResources{} } -+func (*LinuxContainerResources) ProtoMessage() {} -+func (*LinuxContainerResources) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{46} -+} -+func (m *LinuxContainerResources) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *LinuxContainerResources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_LinuxContainerResources.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *LinuxContainerResources) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_LinuxContainerResources.Merge(m, src) -+} -+func (m *LinuxContainerResources) XXX_Size() int { -+ return m.Size() -+} -+func (m *LinuxContainerResources) XXX_DiscardUnknown() { -+ xxx_messageInfo_LinuxContainerResources.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_LinuxContainerResources proto.InternalMessageInfo -+ -+func (m *LinuxContainerResources) GetCpuPeriod() int64 { -+ if m != nil { -+ return m.CpuPeriod -+ } -+ return 0 -+} -+ -+func (m *LinuxContainerResources) GetCpuQuota() int64 { -+ if m != nil { -+ return m.CpuQuota -+ } -+ return 0 -+} -+ -+func (m *LinuxContainerResources) GetCpuShares() int64 { -+ if m != nil { -+ return m.CpuShares -+ } -+ return 0 -+} -+ -+func (m *LinuxContainerResources) GetMemoryLimitInBytes() int64 { -+ if m != nil { -+ return m.MemoryLimitInBytes -+ } -+ return 0 -+} -+ -+func (m *LinuxContainerResources) GetOomScoreAdj() int64 { -+ if m != nil { -+ return m.OomScoreAdj -+ } -+ return 0 -+} -+ -+func (m *LinuxContainerResources) GetCpusetCpus() string { -+ if m != nil { -+ return m.CpusetCpus -+ } -+ return "" -+} -+ -+func (m *LinuxContainerResources) GetCpusetMems() string { -+ if m != nil { -+ return m.CpusetMems -+ } -+ return "" -+} -+ -+func (m *LinuxContainerResources) GetHugepageLimits() []*HugepageLimit { -+ if m != nil { -+ return m.HugepageLimits -+ } -+ return nil -+} -+ -+func (m *LinuxContainerResources) GetUnified() map[string]string { -+ if m != nil { -+ return m.Unified -+ } -+ return nil -+} -+ -+func (m *LinuxContainerResources) GetMemorySwapLimitInBytes() int64 { -+ if m != nil { -+ return m.MemorySwapLimitInBytes -+ } -+ return 0 -+} -+ -+// HugepageLimit corresponds to the file`hugetlb..limit_in_byte` in container level cgroup. -+// For example, `PageSize=1GB`, `Limit=1073741824` means setting `1073741824` bytes to hugetlb.1GB.limit_in_bytes. -+type HugepageLimit struct { -+ // The value of PageSize has the format B (2MB, 1GB), -+ // and must match the of the corresponding control file found in `hugetlb..limit_in_bytes`. -+ // The values of are intended to be parsed using base 1024("1KB" = 1024, "1MB" = 1048576, etc). -+ PageSize string `protobuf:"bytes,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` -+ // limit in bytes of hugepagesize HugeTLB usage. -+ Limit uint64 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *HugepageLimit) Reset() { *m = HugepageLimit{} } -+func (*HugepageLimit) ProtoMessage() {} -+func (*HugepageLimit) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{47} -+} -+func (m *HugepageLimit) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *HugepageLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_HugepageLimit.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *HugepageLimit) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_HugepageLimit.Merge(m, src) -+} -+func (m *HugepageLimit) XXX_Size() int { -+ return m.Size() -+} -+func (m *HugepageLimit) XXX_DiscardUnknown() { -+ xxx_messageInfo_HugepageLimit.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_HugepageLimit proto.InternalMessageInfo -+ -+func (m *HugepageLimit) GetPageSize() string { -+ if m != nil { -+ return m.PageSize -+ } -+ return "" -+} -+ -+func (m *HugepageLimit) GetLimit() uint64 { -+ if m != nil { -+ return m.Limit -+ } -+ return 0 -+} -+ -+// SELinuxOption are the labels to be applied to the container. -+type SELinuxOption struct { -+ User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` -+ Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` -+ Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` -+ Level string `protobuf:"bytes,4,opt,name=level,proto3" json:"level,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *SELinuxOption) Reset() { *m = SELinuxOption{} } -+func (*SELinuxOption) ProtoMessage() {} -+func (*SELinuxOption) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{48} -+} -+func (m *SELinuxOption) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *SELinuxOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_SELinuxOption.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *SELinuxOption) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_SELinuxOption.Merge(m, src) -+} -+func (m *SELinuxOption) XXX_Size() int { -+ return m.Size() -+} -+func (m *SELinuxOption) XXX_DiscardUnknown() { -+ xxx_messageInfo_SELinuxOption.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_SELinuxOption proto.InternalMessageInfo -+ -+func (m *SELinuxOption) GetUser() string { -+ if m != nil { -+ return m.User -+ } -+ return "" -+} -+ -+func (m *SELinuxOption) GetRole() string { -+ if m != nil { -+ return m.Role -+ } -+ return "" -+} -+ -+func (m *SELinuxOption) GetType() string { -+ if m != nil { -+ return m.Type -+ } -+ return "" -+} -+ -+func (m *SELinuxOption) GetLevel() string { -+ if m != nil { -+ return m.Level -+ } -+ return "" -+} -+ -+// Capability contains the container capabilities to add or drop -+// Dropping a capability will drop it from all sets. -+// If a capability is added to only the add_capabilities list then it gets added to permitted, -+// inheritable, effective and bounding sets, i.e. all sets except the ambient set. -+// If a capability is added to only the add_ambient_capabilities list then it gets added to all sets, i.e permitted -+// inheritable, effective, bounding and ambient sets. -+// If a capability is added to add_capabilities and add_ambient_capabilities lists then it gets added to all sets, i.e. -+// permitted, inheritable, effective, bounding and ambient sets. -+type Capability struct { -+ // List of capabilities to add. -+ AddCapabilities []string `protobuf:"bytes,1,rep,name=add_capabilities,json=addCapabilities,proto3" json:"add_capabilities,omitempty"` -+ // List of capabilities to drop. -+ DropCapabilities []string `protobuf:"bytes,2,rep,name=drop_capabilities,json=dropCapabilities,proto3" json:"drop_capabilities,omitempty"` -+ // List of ambient capabilities to add. -+ AddAmbientCapabilities []string `protobuf:"bytes,3,rep,name=add_ambient_capabilities,json=addAmbientCapabilities,proto3" json:"add_ambient_capabilities,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *Capability) Reset() { *m = Capability{} } -+func (*Capability) ProtoMessage() {} -+func (*Capability) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{49} -+} -+func (m *Capability) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *Capability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_Capability.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *Capability) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_Capability.Merge(m, src) -+} -+func (m *Capability) XXX_Size() int { -+ return m.Size() -+} -+func (m *Capability) XXX_DiscardUnknown() { -+ xxx_messageInfo_Capability.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_Capability proto.InternalMessageInfo -+ -+func (m *Capability) GetAddCapabilities() []string { -+ if m != nil { -+ return m.AddCapabilities -+ } -+ return nil -+} -+ -+func (m *Capability) GetDropCapabilities() []string { -+ if m != nil { -+ return m.DropCapabilities -+ } -+ return nil -+} -+ -+func (m *Capability) GetAddAmbientCapabilities() []string { -+ if m != nil { -+ return m.AddAmbientCapabilities -+ } -+ return nil -+} -+ -+// LinuxContainerSecurityContext holds linux security configuration that will be applied to a container. -+type LinuxContainerSecurityContext struct { -+ // Capabilities to add or drop. -+ Capabilities *Capability `protobuf:"bytes,1,opt,name=capabilities,proto3" json:"capabilities,omitempty"` -+ // If set, run container in privileged mode. -+ // Privileged mode is incompatible with the following options. If -+ // privileged is set, the following features MAY have no effect: -+ // 1. capabilities -+ // 2. selinux_options -+ // 4. seccomp -+ // 5. apparmor -+ // -+ // Privileged mode implies the following specific options are applied: -+ // 1. All capabilities are added. -+ // 2. Sensitive paths, such as kernel module paths within sysfs, are not masked. -+ // 3. Any sysfs and procfs mounts are mounted RW. -+ // 4. AppArmor confinement is not applied. -+ // 5. Seccomp restrictions are not applied. -+ // 6. The device cgroup does not restrict access to any devices. -+ // 7. All devices from the host's /dev are available within the container. -+ // 8. SELinux restrictions are not applied (e.g. label=disabled). -+ Privileged bool `protobuf:"varint,2,opt,name=privileged,proto3" json:"privileged,omitempty"` -+ // Configurations for the container's namespaces. -+ // Only used if the container uses namespace for isolation. -+ NamespaceOptions *NamespaceOption `protobuf:"bytes,3,opt,name=namespace_options,json=namespaceOptions,proto3" json:"namespace_options,omitempty"` -+ // SELinux context to be optionally applied. -+ SelinuxOptions *SELinuxOption `protobuf:"bytes,4,opt,name=selinux_options,json=selinuxOptions,proto3" json:"selinux_options,omitempty"` -+ // UID to run the container process as. Only one of run_as_user and -+ // run_as_username can be specified at a time. -+ RunAsUser *Int64Value `protobuf:"bytes,5,opt,name=run_as_user,json=runAsUser,proto3" json:"run_as_user,omitempty"` -+ // GID to run the container process as. run_as_group should only be specified -+ // when run_as_user or run_as_username is specified; otherwise, the runtime -+ // MUST error. -+ RunAsGroup *Int64Value `protobuf:"bytes,12,opt,name=run_as_group,json=runAsGroup,proto3" json:"run_as_group,omitempty"` -+ // User name to run the container process as. If specified, the user MUST -+ // exist in the container image (i.e. in the /etc/passwd inside the image), -+ // and be resolved there by the runtime; otherwise, the runtime MUST error. -+ RunAsUsername string `protobuf:"bytes,6,opt,name=run_as_username,json=runAsUsername,proto3" json:"run_as_username,omitempty"` -+ // If set, the root filesystem of the container is read-only. -+ ReadonlyRootfs bool `protobuf:"varint,7,opt,name=readonly_rootfs,json=readonlyRootfs,proto3" json:"readonly_rootfs,omitempty"` -+ // List of groups applied to the first process run in the container, in -+ // addition to the container's primary GID. -+ SupplementalGroups []int64 `protobuf:"varint,8,rep,packed,name=supplemental_groups,json=supplementalGroups,proto3" json:"supplemental_groups,omitempty"` -+ // no_new_privs defines if the flag for no_new_privs should be set on the -+ // container. -+ NoNewPrivs bool `protobuf:"varint,11,opt,name=no_new_privs,json=noNewPrivs,proto3" json:"no_new_privs,omitempty"` -+ // masked_paths is a slice of paths that should be masked by the container -+ // runtime, this can be passed directly to the OCI spec. -+ MaskedPaths []string `protobuf:"bytes,13,rep,name=masked_paths,json=maskedPaths,proto3" json:"masked_paths,omitempty"` -+ // readonly_paths is a slice of paths that should be set as readonly by the -+ // container runtime, this can be passed directly to the OCI spec. -+ ReadonlyPaths []string `protobuf:"bytes,14,rep,name=readonly_paths,json=readonlyPaths,proto3" json:"readonly_paths,omitempty"` -+ // Seccomp profile for the container. -+ Seccomp *SecurityProfile `protobuf:"bytes,15,opt,name=seccomp,proto3" json:"seccomp,omitempty"` -+ // AppArmor profile for the container. -+ Apparmor *SecurityProfile `protobuf:"bytes,16,opt,name=apparmor,proto3" json:"apparmor,omitempty"` -+ // AppArmor profile for the container, candidate values are: -+ // - runtime/default: equivalent to not specifying a profile. -+ // - unconfined: no profiles are loaded -+ // - localhost/: profile loaded on the node -+ // (localhost) by name. The possible profile names are detailed at -+ // https://gitlab.com/apparmor/apparmor/-/wikis/AppArmor_Core_Policy_Reference -+ ApparmorProfile string `protobuf:"bytes,9,opt,name=apparmor_profile,json=apparmorProfile,proto3" json:"apparmor_profile,omitempty"` // Deprecated: Do not use. -+ // Seccomp profile for the container, candidate values are: -+ // - runtime/default: the default profile for the container runtime -+ // - unconfined: unconfined profile, ie, no seccomp sandboxing -+ // - localhost/: the profile installed on the node. -+ // is the full path of the profile. -+ // -+ // Default: "", which is identical with unconfined. -+ SeccompProfilePath string `protobuf:"bytes,10,opt,name=seccomp_profile_path,json=seccompProfilePath,proto3" json:"seccomp_profile_path,omitempty"` // Deprecated: Do not use. -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *LinuxContainerSecurityContext) Reset() { *m = LinuxContainerSecurityContext{} } -+func (*LinuxContainerSecurityContext) ProtoMessage() {} -+func (*LinuxContainerSecurityContext) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{50} -+} -+func (m *LinuxContainerSecurityContext) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *LinuxContainerSecurityContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_LinuxContainerSecurityContext.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *LinuxContainerSecurityContext) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_LinuxContainerSecurityContext.Merge(m, src) -+} -+func (m *LinuxContainerSecurityContext) XXX_Size() int { -+ return m.Size() -+} -+func (m *LinuxContainerSecurityContext) XXX_DiscardUnknown() { -+ xxx_messageInfo_LinuxContainerSecurityContext.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_LinuxContainerSecurityContext proto.InternalMessageInfo -+ -+func (m *LinuxContainerSecurityContext) GetCapabilities() *Capability { -+ if m != nil { -+ return m.Capabilities -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetPrivileged() bool { -+ if m != nil { -+ return m.Privileged -+ } -+ return false -+} -+ -+func (m *LinuxContainerSecurityContext) GetNamespaceOptions() *NamespaceOption { -+ if m != nil { -+ return m.NamespaceOptions -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetSelinuxOptions() *SELinuxOption { -+ if m != nil { -+ return m.SelinuxOptions -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetRunAsUser() *Int64Value { -+ if m != nil { -+ return m.RunAsUser -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetRunAsGroup() *Int64Value { -+ if m != nil { -+ return m.RunAsGroup -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetRunAsUsername() string { -+ if m != nil { -+ return m.RunAsUsername -+ } -+ return "" -+} -+ -+func (m *LinuxContainerSecurityContext) GetReadonlyRootfs() bool { -+ if m != nil { -+ return m.ReadonlyRootfs -+ } -+ return false -+} -+ -+func (m *LinuxContainerSecurityContext) GetSupplementalGroups() []int64 { -+ if m != nil { -+ return m.SupplementalGroups -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetNoNewPrivs() bool { -+ if m != nil { -+ return m.NoNewPrivs -+ } -+ return false -+} -+ -+func (m *LinuxContainerSecurityContext) GetMaskedPaths() []string { -+ if m != nil { -+ return m.MaskedPaths -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetReadonlyPaths() []string { -+ if m != nil { -+ return m.ReadonlyPaths -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetSeccomp() *SecurityProfile { -+ if m != nil { -+ return m.Seccomp -+ } -+ return nil -+} -+ -+func (m *LinuxContainerSecurityContext) GetApparmor() *SecurityProfile { -+ if m != nil { -+ return m.Apparmor -+ } -+ return nil -+} -+ -+// Deprecated: Do not use. -+func (m *LinuxContainerSecurityContext) GetApparmorProfile() string { -+ if m != nil { -+ return m.ApparmorProfile -+ } -+ return "" -+} -+ -+// Deprecated: Do not use. -+func (m *LinuxContainerSecurityContext) GetSeccompProfilePath() string { -+ if m != nil { -+ return m.SeccompProfilePath -+ } -+ return "" -+} -+ -+// LinuxContainerConfig contains platform-specific configuration for -+// Linux-based containers. -+type LinuxContainerConfig struct { -+ // Resources specification for the container. -+ Resources *LinuxContainerResources `protobuf:"bytes,1,opt,name=resources,proto3" json:"resources,omitempty"` -+ // LinuxContainerSecurityContext configuration for the container. -+ SecurityContext *LinuxContainerSecurityContext `protobuf:"bytes,2,opt,name=security_context,json=securityContext,proto3" json:"security_context,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *LinuxContainerConfig) Reset() { *m = LinuxContainerConfig{} } -+func (*LinuxContainerConfig) ProtoMessage() {} -+func (*LinuxContainerConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{51} -+} -+func (m *LinuxContainerConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *LinuxContainerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_LinuxContainerConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *LinuxContainerConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_LinuxContainerConfig.Merge(m, src) -+} -+func (m *LinuxContainerConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *LinuxContainerConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_LinuxContainerConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_LinuxContainerConfig proto.InternalMessageInfo -+ -+func (m *LinuxContainerConfig) GetResources() *LinuxContainerResources { -+ if m != nil { -+ return m.Resources -+ } -+ return nil -+} -+ -+func (m *LinuxContainerConfig) GetSecurityContext() *LinuxContainerSecurityContext { -+ if m != nil { -+ return m.SecurityContext -+ } -+ return nil -+} -+ -+// WindowsSandboxSecurityContext holds platform-specific configurations that will be -+// applied to a sandbox. -+// These settings will only apply to the sandbox container. -+type WindowsSandboxSecurityContext struct { -+ // User name to run the container process as. If specified, the user MUST -+ // exist in the container image and be resolved there by the runtime; -+ // otherwise, the runtime MUST return error. -+ RunAsUsername string `protobuf:"bytes,1,opt,name=run_as_username,json=runAsUsername,proto3" json:"run_as_username,omitempty"` -+ // The contents of the GMSA credential spec to use to run this container. -+ CredentialSpec string `protobuf:"bytes,2,opt,name=credential_spec,json=credentialSpec,proto3" json:"credential_spec,omitempty"` -+ // Indicates whether the container requested to run as a HostProcess container. -+ HostProcess bool `protobuf:"varint,3,opt,name=host_process,json=hostProcess,proto3" json:"host_process,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *WindowsSandboxSecurityContext) Reset() { *m = WindowsSandboxSecurityContext{} } -+func (*WindowsSandboxSecurityContext) ProtoMessage() {} -+func (*WindowsSandboxSecurityContext) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{52} -+} -+func (m *WindowsSandboxSecurityContext) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *WindowsSandboxSecurityContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_WindowsSandboxSecurityContext.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *WindowsSandboxSecurityContext) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_WindowsSandboxSecurityContext.Merge(m, src) -+} -+func (m *WindowsSandboxSecurityContext) XXX_Size() int { -+ return m.Size() -+} -+func (m *WindowsSandboxSecurityContext) XXX_DiscardUnknown() { -+ xxx_messageInfo_WindowsSandboxSecurityContext.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_WindowsSandboxSecurityContext proto.InternalMessageInfo -+ -+func (m *WindowsSandboxSecurityContext) GetRunAsUsername() string { -+ if m != nil { -+ return m.RunAsUsername -+ } -+ return "" -+} -+ -+func (m *WindowsSandboxSecurityContext) GetCredentialSpec() string { -+ if m != nil { -+ return m.CredentialSpec -+ } -+ return "" -+} -+ -+func (m *WindowsSandboxSecurityContext) GetHostProcess() bool { -+ if m != nil { -+ return m.HostProcess -+ } -+ return false -+} -+ -+// WindowsPodSandboxConfig holds platform-specific configurations for Windows -+// host platforms and Windows-based containers. -+type WindowsPodSandboxConfig struct { -+ // WindowsSandboxSecurityContext holds sandbox security attributes. -+ SecurityContext *WindowsSandboxSecurityContext `protobuf:"bytes,1,opt,name=security_context,json=securityContext,proto3" json:"security_context,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *WindowsPodSandboxConfig) Reset() { *m = WindowsPodSandboxConfig{} } -+func (*WindowsPodSandboxConfig) ProtoMessage() {} -+func (*WindowsPodSandboxConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{53} -+} -+func (m *WindowsPodSandboxConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *WindowsPodSandboxConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_WindowsPodSandboxConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *WindowsPodSandboxConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_WindowsPodSandboxConfig.Merge(m, src) -+} -+func (m *WindowsPodSandboxConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *WindowsPodSandboxConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_WindowsPodSandboxConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_WindowsPodSandboxConfig proto.InternalMessageInfo -+ -+func (m *WindowsPodSandboxConfig) GetSecurityContext() *WindowsSandboxSecurityContext { -+ if m != nil { -+ return m.SecurityContext -+ } -+ return nil -+} -+ -+// WindowsContainerSecurityContext holds windows security configuration that will be applied to a container. -+type WindowsContainerSecurityContext struct { -+ // User name to run the container process as. If specified, the user MUST -+ // exist in the container image and be resolved there by the runtime; -+ // otherwise, the runtime MUST return error. -+ RunAsUsername string `protobuf:"bytes,1,opt,name=run_as_username,json=runAsUsername,proto3" json:"run_as_username,omitempty"` -+ // The contents of the GMSA credential spec to use to run this container. -+ CredentialSpec string `protobuf:"bytes,2,opt,name=credential_spec,json=credentialSpec,proto3" json:"credential_spec,omitempty"` -+ // Indicates whether a container is to be run as a HostProcess container. -+ HostProcess bool `protobuf:"varint,3,opt,name=host_process,json=hostProcess,proto3" json:"host_process,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *WindowsContainerSecurityContext) Reset() { *m = WindowsContainerSecurityContext{} } -+func (*WindowsContainerSecurityContext) ProtoMessage() {} -+func (*WindowsContainerSecurityContext) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{54} -+} -+func (m *WindowsContainerSecurityContext) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *WindowsContainerSecurityContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_WindowsContainerSecurityContext.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *WindowsContainerSecurityContext) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_WindowsContainerSecurityContext.Merge(m, src) -+} -+func (m *WindowsContainerSecurityContext) XXX_Size() int { -+ return m.Size() -+} -+func (m *WindowsContainerSecurityContext) XXX_DiscardUnknown() { -+ xxx_messageInfo_WindowsContainerSecurityContext.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_WindowsContainerSecurityContext proto.InternalMessageInfo -+ -+func (m *WindowsContainerSecurityContext) GetRunAsUsername() string { -+ if m != nil { -+ return m.RunAsUsername -+ } -+ return "" -+} -+ -+func (m *WindowsContainerSecurityContext) GetCredentialSpec() string { -+ if m != nil { -+ return m.CredentialSpec -+ } -+ return "" -+} -+ -+func (m *WindowsContainerSecurityContext) GetHostProcess() bool { -+ if m != nil { -+ return m.HostProcess -+ } -+ return false -+} -+ -+// WindowsContainerConfig contains platform-specific configuration for -+// Windows-based containers. -+type WindowsContainerConfig struct { -+ // Resources specification for the container. -+ Resources *WindowsContainerResources `protobuf:"bytes,1,opt,name=resources,proto3" json:"resources,omitempty"` -+ // WindowsContainerSecurityContext configuration for the container. -+ SecurityContext *WindowsContainerSecurityContext `protobuf:"bytes,2,opt,name=security_context,json=securityContext,proto3" json:"security_context,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *WindowsContainerConfig) Reset() { *m = WindowsContainerConfig{} } -+func (*WindowsContainerConfig) ProtoMessage() {} -+func (*WindowsContainerConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{55} -+} -+func (m *WindowsContainerConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *WindowsContainerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_WindowsContainerConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *WindowsContainerConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_WindowsContainerConfig.Merge(m, src) -+} -+func (m *WindowsContainerConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *WindowsContainerConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_WindowsContainerConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_WindowsContainerConfig proto.InternalMessageInfo -+ -+func (m *WindowsContainerConfig) GetResources() *WindowsContainerResources { -+ if m != nil { -+ return m.Resources -+ } -+ return nil -+} -+ -+func (m *WindowsContainerConfig) GetSecurityContext() *WindowsContainerSecurityContext { -+ if m != nil { -+ return m.SecurityContext -+ } -+ return nil -+} -+ -+// WindowsContainerResources specifies Windows specific configuration for -+// resources. -+type WindowsContainerResources struct { -+ // CPU shares (relative weight vs. other containers). Default: 0 (not specified). -+ CpuShares int64 `protobuf:"varint,1,opt,name=cpu_shares,json=cpuShares,proto3" json:"cpu_shares,omitempty"` -+ // Number of CPUs available to the container. Default: 0 (not specified). -+ CpuCount int64 `protobuf:"varint,2,opt,name=cpu_count,json=cpuCount,proto3" json:"cpu_count,omitempty"` -+ // Specifies the portion of processor cycles that this container can use as a percentage times 100. -+ CpuMaximum int64 `protobuf:"varint,3,opt,name=cpu_maximum,json=cpuMaximum,proto3" json:"cpu_maximum,omitempty"` -+ // Memory limit in bytes. Default: 0 (not specified). -+ MemoryLimitInBytes int64 `protobuf:"varint,4,opt,name=memory_limit_in_bytes,json=memoryLimitInBytes,proto3" json:"memory_limit_in_bytes,omitempty"` -+ // Specifies the size of the rootfs / scratch space in bytes to be configured for this container. Default: 0 (not specified). -+ RootfsSizeInBytes int64 `protobuf:"varint,5,opt,name=rootfs_size_in_bytes,json=rootfsSizeInBytes,proto3" json:"rootfs_size_in_bytes,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *WindowsContainerResources) Reset() { *m = WindowsContainerResources{} } -+func (*WindowsContainerResources) ProtoMessage() {} -+func (*WindowsContainerResources) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{56} -+} -+func (m *WindowsContainerResources) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *WindowsContainerResources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_WindowsContainerResources.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *WindowsContainerResources) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_WindowsContainerResources.Merge(m, src) -+} -+func (m *WindowsContainerResources) XXX_Size() int { -+ return m.Size() -+} -+func (m *WindowsContainerResources) XXX_DiscardUnknown() { -+ xxx_messageInfo_WindowsContainerResources.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_WindowsContainerResources proto.InternalMessageInfo -+ -+func (m *WindowsContainerResources) GetCpuShares() int64 { -+ if m != nil { -+ return m.CpuShares -+ } -+ return 0 -+} -+ -+func (m *WindowsContainerResources) GetCpuCount() int64 { -+ if m != nil { -+ return m.CpuCount -+ } -+ return 0 -+} -+ -+func (m *WindowsContainerResources) GetCpuMaximum() int64 { -+ if m != nil { -+ return m.CpuMaximum -+ } -+ return 0 -+} -+ -+func (m *WindowsContainerResources) GetMemoryLimitInBytes() int64 { -+ if m != nil { -+ return m.MemoryLimitInBytes -+ } -+ return 0 -+} -+ -+func (m *WindowsContainerResources) GetRootfsSizeInBytes() int64 { -+ if m != nil { -+ return m.RootfsSizeInBytes -+ } -+ return 0 -+} -+ -+// ContainerMetadata holds all necessary information for building the container -+// name. The container runtime is encouraged to expose the metadata in its user -+// interface for better user experience. E.g., runtime can construct a unique -+// container name based on the metadata. Note that (name, attempt) is unique -+// within a sandbox for the entire lifetime of the sandbox. -+type ContainerMetadata struct { -+ // Name of the container. Same as the container name in the PodSpec. -+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -+ // Attempt number of creating the container. Default: 0. -+ Attempt uint32 `protobuf:"varint,2,opt,name=attempt,proto3" json:"attempt,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerMetadata) Reset() { *m = ContainerMetadata{} } -+func (*ContainerMetadata) ProtoMessage() {} -+func (*ContainerMetadata) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{57} -+} -+func (m *ContainerMetadata) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerMetadata.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerMetadata) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerMetadata.Merge(m, src) -+} -+func (m *ContainerMetadata) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerMetadata) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerMetadata.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerMetadata proto.InternalMessageInfo -+ -+func (m *ContainerMetadata) GetName() string { -+ if m != nil { -+ return m.Name -+ } -+ return "" -+} -+ -+func (m *ContainerMetadata) GetAttempt() uint32 { -+ if m != nil { -+ return m.Attempt -+ } -+ return 0 -+} -+ -+// Device specifies a host device to mount into a container. -+type Device struct { -+ // Path of the device within the container. -+ ContainerPath string `protobuf:"bytes,1,opt,name=container_path,json=containerPath,proto3" json:"container_path,omitempty"` -+ // Path of the device on the host. -+ HostPath string `protobuf:"bytes,2,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"` -+ // Cgroups permissions of the device, candidates are one or more of -+ // * r - allows container to read from the specified device. -+ // * w - allows container to write to the specified device. -+ // * m - allows container to create device files that do not yet exist. -+ Permissions string `protobuf:"bytes,3,opt,name=permissions,proto3" json:"permissions,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *Device) Reset() { *m = Device{} } -+func (*Device) ProtoMessage() {} -+func (*Device) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{58} -+} -+func (m *Device) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *Device) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_Device.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *Device) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_Device.Merge(m, src) -+} -+func (m *Device) XXX_Size() int { -+ return m.Size() -+} -+func (m *Device) XXX_DiscardUnknown() { -+ xxx_messageInfo_Device.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_Device proto.InternalMessageInfo -+ -+func (m *Device) GetContainerPath() string { -+ if m != nil { -+ return m.ContainerPath -+ } -+ return "" -+} -+ -+func (m *Device) GetHostPath() string { -+ if m != nil { -+ return m.HostPath -+ } -+ return "" -+} -+ -+func (m *Device) GetPermissions() string { -+ if m != nil { -+ return m.Permissions -+ } -+ return "" -+} -+ -+// ContainerConfig holds all the required and optional fields for creating a -+// container. -+type ContainerConfig struct { -+ // Metadata of the container. This information will uniquely identify the -+ // container, and the runtime should leverage this to ensure correct -+ // operation. The runtime may also use this information to improve UX, such -+ // as by constructing a readable name. -+ Metadata *ContainerMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // Image to use. -+ Image *ImageSpec `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` -+ // Command to execute (i.e., entrypoint for docker) -+ Command []string `protobuf:"bytes,3,rep,name=command,proto3" json:"command,omitempty"` -+ // Args for the Command (i.e., command for docker) -+ Args []string `protobuf:"bytes,4,rep,name=args,proto3" json:"args,omitempty"` -+ // Current working directory of the command. -+ WorkingDir string `protobuf:"bytes,5,opt,name=working_dir,json=workingDir,proto3" json:"working_dir,omitempty"` -+ // List of environment variable to set in the container. -+ Envs []*KeyValue `protobuf:"bytes,6,rep,name=envs,proto3" json:"envs,omitempty"` -+ // Mounts for the container. -+ Mounts []*Mount `protobuf:"bytes,7,rep,name=mounts,proto3" json:"mounts,omitempty"` -+ // Devices for the container. -+ Devices []*Device `protobuf:"bytes,8,rep,name=devices,proto3" json:"devices,omitempty"` -+ // Key-value pairs that may be used to scope and select individual resources. -+ // Label keys are of the form: -+ // -+ // label-key ::= prefixed-name | name -+ // prefixed-name ::= prefix '/' name -+ // prefix ::= DNS_SUBDOMAIN -+ // name ::= DNS_LABEL -+ Labels map[string]string `protobuf:"bytes,9,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Unstructured key-value map that may be used by the kubelet to store and -+ // retrieve arbitrary metadata. -+ // -+ // Annotations MUST NOT be altered by the runtime; the annotations stored -+ // here MUST be returned in the ContainerStatus associated with the container -+ // this ContainerConfig creates. -+ // -+ // In general, in order to preserve a well-defined interface between the -+ // kubelet and the container runtime, annotations SHOULD NOT influence -+ // runtime behaviour. -+ Annotations map[string]string `protobuf:"bytes,10,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Path relative to PodSandboxConfig.LogDirectory for container to store -+ // the log (STDOUT and STDERR) on the host. -+ // E.g., -+ // -+ // PodSandboxConfig.LogDirectory = `/var/log/pods//` -+ // ContainerConfig.LogPath = `containerName/Instance#.log` -+ // -+ // WARNING: Log management and how kubelet should interface with the -+ // container logs are under active discussion in -+ // https://issues.k8s.io/24677. There *may* be future change of direction -+ // for logging as the discussion carries on. -+ LogPath string `protobuf:"bytes,11,opt,name=log_path,json=logPath,proto3" json:"log_path,omitempty"` -+ // Variables for interactive containers, these have very specialized -+ // use-cases (e.g. debugging). -+ Stdin bool `protobuf:"varint,12,opt,name=stdin,proto3" json:"stdin,omitempty"` -+ StdinOnce bool `protobuf:"varint,13,opt,name=stdin_once,json=stdinOnce,proto3" json:"stdin_once,omitempty"` -+ Tty bool `protobuf:"varint,14,opt,name=tty,proto3" json:"tty,omitempty"` -+ // Configuration specific to Linux containers. -+ Linux *LinuxContainerConfig `protobuf:"bytes,15,opt,name=linux,proto3" json:"linux,omitempty"` -+ // Configuration specific to Windows containers. -+ Windows *WindowsContainerConfig `protobuf:"bytes,16,opt,name=windows,proto3" json:"windows,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerConfig) Reset() { *m = ContainerConfig{} } -+func (*ContainerConfig) ProtoMessage() {} -+func (*ContainerConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{59} -+} -+func (m *ContainerConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerConfig.Merge(m, src) -+} -+func (m *ContainerConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerConfig proto.InternalMessageInfo -+ -+func (m *ContainerConfig) GetMetadata() *ContainerMetadata { -+ if m != nil { -+ return m.Metadata -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetImage() *ImageSpec { -+ if m != nil { -+ return m.Image -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetCommand() []string { -+ if m != nil { -+ return m.Command -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetArgs() []string { -+ if m != nil { -+ return m.Args -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetWorkingDir() string { -+ if m != nil { -+ return m.WorkingDir -+ } -+ return "" -+} -+ -+func (m *ContainerConfig) GetEnvs() []*KeyValue { -+ if m != nil { -+ return m.Envs -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetMounts() []*Mount { -+ if m != nil { -+ return m.Mounts -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetDevices() []*Device { -+ if m != nil { -+ return m.Devices -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetLabels() map[string]string { -+ if m != nil { -+ return m.Labels -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetLogPath() string { -+ if m != nil { -+ return m.LogPath -+ } -+ return "" -+} -+ -+func (m *ContainerConfig) GetStdin() bool { -+ if m != nil { -+ return m.Stdin -+ } -+ return false -+} -+ -+func (m *ContainerConfig) GetStdinOnce() bool { -+ if m != nil { -+ return m.StdinOnce -+ } -+ return false -+} -+ -+func (m *ContainerConfig) GetTty() bool { -+ if m != nil { -+ return m.Tty -+ } -+ return false -+} -+ -+func (m *ContainerConfig) GetLinux() *LinuxContainerConfig { -+ if m != nil { -+ return m.Linux -+ } -+ return nil -+} -+ -+func (m *ContainerConfig) GetWindows() *WindowsContainerConfig { -+ if m != nil { -+ return m.Windows -+ } -+ return nil -+} -+ -+type CreateContainerRequest struct { -+ // ID of the PodSandbox in which the container should be created. -+ PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ // Config of the container. -+ Config *ContainerConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` -+ // Config of the PodSandbox. This is the same config that was passed -+ // to RunPodSandboxRequest to create the PodSandbox. It is passed again -+ // here just for easy reference. The PodSandboxConfig is immutable and -+ // remains the same throughout the lifetime of the pod. -+ SandboxConfig *PodSandboxConfig `protobuf:"bytes,3,opt,name=sandbox_config,json=sandboxConfig,proto3" json:"sandbox_config,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *CreateContainerRequest) Reset() { *m = CreateContainerRequest{} } -+func (*CreateContainerRequest) ProtoMessage() {} -+func (*CreateContainerRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{60} -+} -+func (m *CreateContainerRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *CreateContainerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_CreateContainerRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *CreateContainerRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_CreateContainerRequest.Merge(m, src) -+} -+func (m *CreateContainerRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *CreateContainerRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_CreateContainerRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_CreateContainerRequest proto.InternalMessageInfo -+ -+func (m *CreateContainerRequest) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+func (m *CreateContainerRequest) GetConfig() *ContainerConfig { -+ if m != nil { -+ return m.Config -+ } -+ return nil -+} -+ -+func (m *CreateContainerRequest) GetSandboxConfig() *PodSandboxConfig { -+ if m != nil { -+ return m.SandboxConfig -+ } -+ return nil -+} -+ -+type CreateContainerResponse struct { -+ // ID of the created container. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *CreateContainerResponse) Reset() { *m = CreateContainerResponse{} } -+func (*CreateContainerResponse) ProtoMessage() {} -+func (*CreateContainerResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{61} -+} -+func (m *CreateContainerResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *CreateContainerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_CreateContainerResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *CreateContainerResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_CreateContainerResponse.Merge(m, src) -+} -+func (m *CreateContainerResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *CreateContainerResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_CreateContainerResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_CreateContainerResponse proto.InternalMessageInfo -+ -+func (m *CreateContainerResponse) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+type StartContainerRequest struct { -+ // ID of the container to start. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *StartContainerRequest) Reset() { *m = StartContainerRequest{} } -+func (*StartContainerRequest) ProtoMessage() {} -+func (*StartContainerRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{62} -+} -+func (m *StartContainerRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *StartContainerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_StartContainerRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *StartContainerRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_StartContainerRequest.Merge(m, src) -+} -+func (m *StartContainerRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *StartContainerRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_StartContainerRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_StartContainerRequest proto.InternalMessageInfo -+ -+func (m *StartContainerRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+type StartContainerResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *StartContainerResponse) Reset() { *m = StartContainerResponse{} } -+func (*StartContainerResponse) ProtoMessage() {} -+func (*StartContainerResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{63} -+} -+func (m *StartContainerResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *StartContainerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_StartContainerResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *StartContainerResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_StartContainerResponse.Merge(m, src) -+} -+func (m *StartContainerResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *StartContainerResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_StartContainerResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_StartContainerResponse proto.InternalMessageInfo -+ -+type StopContainerRequest struct { -+ // ID of the container to stop. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Timeout in seconds to wait for the container to stop before forcibly -+ // terminating it. Default: 0 (forcibly terminate the container immediately) -+ Timeout int64 `protobuf:"varint,2,opt,name=timeout,proto3" json:"timeout,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *StopContainerRequest) Reset() { *m = StopContainerRequest{} } -+func (*StopContainerRequest) ProtoMessage() {} -+func (*StopContainerRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{64} -+} -+func (m *StopContainerRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *StopContainerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_StopContainerRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *StopContainerRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_StopContainerRequest.Merge(m, src) -+} -+func (m *StopContainerRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *StopContainerRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_StopContainerRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_StopContainerRequest proto.InternalMessageInfo -+ -+func (m *StopContainerRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+func (m *StopContainerRequest) GetTimeout() int64 { -+ if m != nil { -+ return m.Timeout -+ } -+ return 0 -+} -+ -+type StopContainerResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *StopContainerResponse) Reset() { *m = StopContainerResponse{} } -+func (*StopContainerResponse) ProtoMessage() {} -+func (*StopContainerResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{65} -+} -+func (m *StopContainerResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *StopContainerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_StopContainerResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *StopContainerResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_StopContainerResponse.Merge(m, src) -+} -+func (m *StopContainerResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *StopContainerResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_StopContainerResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_StopContainerResponse proto.InternalMessageInfo -+ -+type RemoveContainerRequest struct { -+ // ID of the container to remove. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RemoveContainerRequest) Reset() { *m = RemoveContainerRequest{} } -+func (*RemoveContainerRequest) ProtoMessage() {} -+func (*RemoveContainerRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{66} -+} -+func (m *RemoveContainerRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RemoveContainerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RemoveContainerRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RemoveContainerRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RemoveContainerRequest.Merge(m, src) -+} -+func (m *RemoveContainerRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *RemoveContainerRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_RemoveContainerRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RemoveContainerRequest proto.InternalMessageInfo -+ -+func (m *RemoveContainerRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+type RemoveContainerResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RemoveContainerResponse) Reset() { *m = RemoveContainerResponse{} } -+func (*RemoveContainerResponse) ProtoMessage() {} -+func (*RemoveContainerResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{67} -+} -+func (m *RemoveContainerResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RemoveContainerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RemoveContainerResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RemoveContainerResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RemoveContainerResponse.Merge(m, src) -+} -+func (m *RemoveContainerResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *RemoveContainerResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_RemoveContainerResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RemoveContainerResponse proto.InternalMessageInfo -+ -+// ContainerStateValue is the wrapper of ContainerState. -+type ContainerStateValue struct { -+ // State of the container. -+ State ContainerState `protobuf:"varint,1,opt,name=state,proto3,enum=runtime.v1.ContainerState" json:"state,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerStateValue) Reset() { *m = ContainerStateValue{} } -+func (*ContainerStateValue) ProtoMessage() {} -+func (*ContainerStateValue) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{68} -+} -+func (m *ContainerStateValue) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerStateValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerStateValue.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerStateValue) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerStateValue.Merge(m, src) -+} -+func (m *ContainerStateValue) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerStateValue) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerStateValue.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerStateValue proto.InternalMessageInfo -+ -+func (m *ContainerStateValue) GetState() ContainerState { -+ if m != nil { -+ return m.State -+ } -+ return ContainerState_CONTAINER_CREATED -+} -+ -+// ContainerFilter is used to filter containers. -+// All those fields are combined with 'AND' -+type ContainerFilter struct { -+ // ID of the container. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // State of the container. -+ State *ContainerStateValue `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` -+ // ID of the PodSandbox. -+ PodSandboxId string `protobuf:"bytes,3,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ // LabelSelector to select matches. -+ // Only api.MatchLabels is supported for now and the requirements -+ // are ANDed. MatchExpressions is not supported yet. -+ LabelSelector map[string]string `protobuf:"bytes,4,rep,name=label_selector,json=labelSelector,proto3" json:"label_selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerFilter) Reset() { *m = ContainerFilter{} } -+func (*ContainerFilter) ProtoMessage() {} -+func (*ContainerFilter) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{69} -+} -+func (m *ContainerFilter) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerFilter.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerFilter) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerFilter.Merge(m, src) -+} -+func (m *ContainerFilter) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerFilter) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerFilter.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerFilter proto.InternalMessageInfo -+ -+func (m *ContainerFilter) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *ContainerFilter) GetState() *ContainerStateValue { -+ if m != nil { -+ return m.State -+ } -+ return nil -+} -+ -+func (m *ContainerFilter) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+func (m *ContainerFilter) GetLabelSelector() map[string]string { -+ if m != nil { -+ return m.LabelSelector -+ } -+ return nil -+} -+ -+type ListContainersRequest struct { -+ Filter *ContainerFilter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListContainersRequest) Reset() { *m = ListContainersRequest{} } -+func (*ListContainersRequest) ProtoMessage() {} -+func (*ListContainersRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{70} -+} -+func (m *ListContainersRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListContainersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListContainersRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListContainersRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListContainersRequest.Merge(m, src) -+} -+func (m *ListContainersRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListContainersRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListContainersRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListContainersRequest proto.InternalMessageInfo -+ -+func (m *ListContainersRequest) GetFilter() *ContainerFilter { -+ if m != nil { -+ return m.Filter -+ } -+ return nil -+} -+ -+// Container provides the runtime information for a container, such as ID, hash, -+// state of the container. -+type Container struct { -+ // ID of the container, used by the container runtime to identify -+ // a container. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // ID of the sandbox to which this container belongs. -+ PodSandboxId string `protobuf:"bytes,2,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ // Metadata of the container. -+ Metadata *ContainerMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // Spec of the image. -+ Image *ImageSpec `protobuf:"bytes,4,opt,name=image,proto3" json:"image,omitempty"` -+ // Reference to the image in use. For most runtimes, this should be an -+ // image ID. -+ ImageRef string `protobuf:"bytes,5,opt,name=image_ref,json=imageRef,proto3" json:"image_ref,omitempty"` -+ // State of the container. -+ State ContainerState `protobuf:"varint,6,opt,name=state,proto3,enum=runtime.v1.ContainerState" json:"state,omitempty"` -+ // Creation time of the container in nanoseconds. -+ CreatedAt int64 `protobuf:"varint,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` -+ // Key-value pairs that may be used to scope and select individual resources. -+ Labels map[string]string `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding ContainerConfig used to -+ // instantiate this Container. -+ Annotations map[string]string `protobuf:"bytes,9,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *Container) Reset() { *m = Container{} } -+func (*Container) ProtoMessage() {} -+func (*Container) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{71} -+} -+func (m *Container) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *Container) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_Container.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *Container) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_Container.Merge(m, src) -+} -+func (m *Container) XXX_Size() int { -+ return m.Size() -+} -+func (m *Container) XXX_DiscardUnknown() { -+ xxx_messageInfo_Container.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_Container proto.InternalMessageInfo -+ -+func (m *Container) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *Container) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+func (m *Container) GetMetadata() *ContainerMetadata { -+ if m != nil { -+ return m.Metadata -+ } -+ return nil -+} -+ -+func (m *Container) GetImage() *ImageSpec { -+ if m != nil { -+ return m.Image -+ } -+ return nil -+} -+ -+func (m *Container) GetImageRef() string { -+ if m != nil { -+ return m.ImageRef -+ } -+ return "" -+} -+ -+func (m *Container) GetState() ContainerState { -+ if m != nil { -+ return m.State -+ } -+ return ContainerState_CONTAINER_CREATED -+} -+ -+func (m *Container) GetCreatedAt() int64 { -+ if m != nil { -+ return m.CreatedAt -+ } -+ return 0 -+} -+ -+func (m *Container) GetLabels() map[string]string { -+ if m != nil { -+ return m.Labels -+ } -+ return nil -+} -+ -+func (m *Container) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+type ListContainersResponse struct { -+ // List of containers. -+ Containers []*Container `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListContainersResponse) Reset() { *m = ListContainersResponse{} } -+func (*ListContainersResponse) ProtoMessage() {} -+func (*ListContainersResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{72} -+} -+func (m *ListContainersResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListContainersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListContainersResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListContainersResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListContainersResponse.Merge(m, src) -+} -+func (m *ListContainersResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListContainersResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListContainersResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListContainersResponse proto.InternalMessageInfo -+ -+func (m *ListContainersResponse) GetContainers() []*Container { -+ if m != nil { -+ return m.Containers -+ } -+ return nil -+} -+ -+type ContainerStatusRequest struct { -+ // ID of the container for which to retrieve status. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Verbose indicates whether to return extra information about the container. -+ Verbose bool `protobuf:"varint,2,opt,name=verbose,proto3" json:"verbose,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerStatusRequest) Reset() { *m = ContainerStatusRequest{} } -+func (*ContainerStatusRequest) ProtoMessage() {} -+func (*ContainerStatusRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{73} -+} -+func (m *ContainerStatusRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerStatusRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerStatusRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerStatusRequest.Merge(m, src) -+} -+func (m *ContainerStatusRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerStatusRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerStatusRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerStatusRequest proto.InternalMessageInfo -+ -+func (m *ContainerStatusRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+func (m *ContainerStatusRequest) GetVerbose() bool { -+ if m != nil { -+ return m.Verbose -+ } -+ return false -+} -+ -+// ContainerStatus represents the status of a container. -+type ContainerStatus struct { -+ // ID of the container. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // Metadata of the container. -+ Metadata *ContainerMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // Status of the container. -+ State ContainerState `protobuf:"varint,3,opt,name=state,proto3,enum=runtime.v1.ContainerState" json:"state,omitempty"` -+ // Creation time of the container in nanoseconds. -+ CreatedAt int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` -+ // Start time of the container in nanoseconds. Default: 0 (not specified). -+ StartedAt int64 `protobuf:"varint,5,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` -+ // Finish time of the container in nanoseconds. Default: 0 (not specified). -+ FinishedAt int64 `protobuf:"varint,6,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` -+ // Exit code of the container. Only required when finished_at != 0. Default: 0. -+ ExitCode int32 `protobuf:"varint,7,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"` -+ // Spec of the image. -+ Image *ImageSpec `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"` -+ // Reference to the image in use. For most runtimes, this should be an -+ // image ID -+ ImageRef string `protobuf:"bytes,9,opt,name=image_ref,json=imageRef,proto3" json:"image_ref,omitempty"` -+ // Brief CamelCase string explaining why container is in its current state. -+ Reason string `protobuf:"bytes,10,opt,name=reason,proto3" json:"reason,omitempty"` -+ // Human-readable message indicating details about why container is in its -+ // current state. -+ Message string `protobuf:"bytes,11,opt,name=message,proto3" json:"message,omitempty"` -+ // Key-value pairs that may be used to scope and select individual resources. -+ Labels map[string]string `protobuf:"bytes,12,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding ContainerConfig used to -+ // instantiate the Container this status represents. -+ Annotations map[string]string `protobuf:"bytes,13,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Mounts for the container. -+ Mounts []*Mount `protobuf:"bytes,14,rep,name=mounts,proto3" json:"mounts,omitempty"` -+ // Log path of container. -+ LogPath string `protobuf:"bytes,15,opt,name=log_path,json=logPath,proto3" json:"log_path,omitempty"` -+ // Resource limits configuration of the container. -+ Resources *ContainerResources `protobuf:"bytes,16,opt,name=resources,proto3" json:"resources,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } -+func (*ContainerStatus) ProtoMessage() {} -+func (*ContainerStatus) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{74} -+} -+func (m *ContainerStatus) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerStatus.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerStatus) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerStatus.Merge(m, src) -+} -+func (m *ContainerStatus) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerStatus) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerStatus.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerStatus proto.InternalMessageInfo -+ -+func (m *ContainerStatus) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *ContainerStatus) GetMetadata() *ContainerMetadata { -+ if m != nil { -+ return m.Metadata -+ } -+ return nil -+} -+ -+func (m *ContainerStatus) GetState() ContainerState { -+ if m != nil { -+ return m.State -+ } -+ return ContainerState_CONTAINER_CREATED -+} -+ -+func (m *ContainerStatus) GetCreatedAt() int64 { -+ if m != nil { -+ return m.CreatedAt -+ } -+ return 0 -+} -+ -+func (m *ContainerStatus) GetStartedAt() int64 { -+ if m != nil { -+ return m.StartedAt -+ } -+ return 0 -+} -+ -+func (m *ContainerStatus) GetFinishedAt() int64 { -+ if m != nil { -+ return m.FinishedAt -+ } -+ return 0 -+} -+ -+func (m *ContainerStatus) GetExitCode() int32 { -+ if m != nil { -+ return m.ExitCode -+ } -+ return 0 -+} -+ -+func (m *ContainerStatus) GetImage() *ImageSpec { -+ if m != nil { -+ return m.Image -+ } -+ return nil -+} -+ -+func (m *ContainerStatus) GetImageRef() string { -+ if m != nil { -+ return m.ImageRef -+ } -+ return "" -+} -+ -+func (m *ContainerStatus) GetReason() string { -+ if m != nil { -+ return m.Reason -+ } -+ return "" -+} -+ -+func (m *ContainerStatus) GetMessage() string { -+ if m != nil { -+ return m.Message -+ } -+ return "" -+} -+ -+func (m *ContainerStatus) GetLabels() map[string]string { -+ if m != nil { -+ return m.Labels -+ } -+ return nil -+} -+ -+func (m *ContainerStatus) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+func (m *ContainerStatus) GetMounts() []*Mount { -+ if m != nil { -+ return m.Mounts -+ } -+ return nil -+} -+ -+func (m *ContainerStatus) GetLogPath() string { -+ if m != nil { -+ return m.LogPath -+ } -+ return "" -+} -+ -+func (m *ContainerStatus) GetResources() *ContainerResources { -+ if m != nil { -+ return m.Resources -+ } -+ return nil -+} -+ -+type ContainerStatusResponse struct { -+ // Status of the container. -+ Status *ContainerStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` -+ // Info is extra information of the Container. The key could be arbitrary string, and -+ // value should be in json format. The information could include anything useful for -+ // debug, e.g. pid for linux container based container runtime. -+ // It should only be returned non-empty when Verbose is true. -+ Info map[string]string `protobuf:"bytes,2,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerStatusResponse) Reset() { *m = ContainerStatusResponse{} } -+func (*ContainerStatusResponse) ProtoMessage() {} -+func (*ContainerStatusResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{75} -+} -+func (m *ContainerStatusResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerStatusResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerStatusResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerStatusResponse.Merge(m, src) -+} -+func (m *ContainerStatusResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerStatusResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerStatusResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerStatusResponse proto.InternalMessageInfo -+ -+func (m *ContainerStatusResponse) GetStatus() *ContainerStatus { -+ if m != nil { -+ return m.Status -+ } -+ return nil -+} -+ -+func (m *ContainerStatusResponse) GetInfo() map[string]string { -+ if m != nil { -+ return m.Info -+ } -+ return nil -+} -+ -+// ContainerResources holds resource limits configuration for a container. -+type ContainerResources struct { -+ // Resource limits configuration specific to Linux container. -+ Linux *LinuxContainerResources `protobuf:"bytes,1,opt,name=linux,proto3" json:"linux,omitempty"` -+ // Resource limits configuration specific to Windows container. -+ Windows *WindowsContainerResources `protobuf:"bytes,2,opt,name=windows,proto3" json:"windows,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerResources) Reset() { *m = ContainerResources{} } -+func (*ContainerResources) ProtoMessage() {} -+func (*ContainerResources) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{76} -+} -+func (m *ContainerResources) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerResources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerResources.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerResources) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerResources.Merge(m, src) -+} -+func (m *ContainerResources) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerResources) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerResources.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerResources proto.InternalMessageInfo -+ -+func (m *ContainerResources) GetLinux() *LinuxContainerResources { -+ if m != nil { -+ return m.Linux -+ } -+ return nil -+} -+ -+func (m *ContainerResources) GetWindows() *WindowsContainerResources { -+ if m != nil { -+ return m.Windows -+ } -+ return nil -+} -+ -+type UpdateContainerResourcesRequest struct { -+ // ID of the container to update. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Resource configuration specific to Linux containers. -+ Linux *LinuxContainerResources `protobuf:"bytes,2,opt,name=linux,proto3" json:"linux,omitempty"` -+ // Resource configuration specific to Windows containers. -+ Windows *WindowsContainerResources `protobuf:"bytes,3,opt,name=windows,proto3" json:"windows,omitempty"` -+ // Unstructured key-value map holding arbitrary additional information for -+ // container resources updating. This can be used for specifying experimental -+ // resources to update or other options to use when updating the container. -+ Annotations map[string]string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *UpdateContainerResourcesRequest) Reset() { *m = UpdateContainerResourcesRequest{} } -+func (*UpdateContainerResourcesRequest) ProtoMessage() {} -+func (*UpdateContainerResourcesRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{77} -+} -+func (m *UpdateContainerResourcesRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *UpdateContainerResourcesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_UpdateContainerResourcesRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *UpdateContainerResourcesRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_UpdateContainerResourcesRequest.Merge(m, src) -+} -+func (m *UpdateContainerResourcesRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *UpdateContainerResourcesRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_UpdateContainerResourcesRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_UpdateContainerResourcesRequest proto.InternalMessageInfo -+ -+func (m *UpdateContainerResourcesRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+func (m *UpdateContainerResourcesRequest) GetLinux() *LinuxContainerResources { -+ if m != nil { -+ return m.Linux -+ } -+ return nil -+} -+ -+func (m *UpdateContainerResourcesRequest) GetWindows() *WindowsContainerResources { -+ if m != nil { -+ return m.Windows -+ } -+ return nil -+} -+ -+func (m *UpdateContainerResourcesRequest) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+type UpdateContainerResourcesResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *UpdateContainerResourcesResponse) Reset() { *m = UpdateContainerResourcesResponse{} } -+func (*UpdateContainerResourcesResponse) ProtoMessage() {} -+func (*UpdateContainerResourcesResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{78} -+} -+func (m *UpdateContainerResourcesResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *UpdateContainerResourcesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_UpdateContainerResourcesResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *UpdateContainerResourcesResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_UpdateContainerResourcesResponse.Merge(m, src) -+} -+func (m *UpdateContainerResourcesResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *UpdateContainerResourcesResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_UpdateContainerResourcesResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_UpdateContainerResourcesResponse proto.InternalMessageInfo -+ -+type ExecSyncRequest struct { -+ // ID of the container. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Command to execute. -+ Cmd []string `protobuf:"bytes,2,rep,name=cmd,proto3" json:"cmd,omitempty"` -+ // Timeout in seconds to stop the command. Default: 0 (run forever). -+ Timeout int64 `protobuf:"varint,3,opt,name=timeout,proto3" json:"timeout,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ExecSyncRequest) Reset() { *m = ExecSyncRequest{} } -+func (*ExecSyncRequest) ProtoMessage() {} -+func (*ExecSyncRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{79} -+} -+func (m *ExecSyncRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ExecSyncRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ExecSyncRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ExecSyncRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ExecSyncRequest.Merge(m, src) -+} -+func (m *ExecSyncRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ExecSyncRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ExecSyncRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ExecSyncRequest proto.InternalMessageInfo -+ -+func (m *ExecSyncRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+func (m *ExecSyncRequest) GetCmd() []string { -+ if m != nil { -+ return m.Cmd -+ } -+ return nil -+} -+ -+func (m *ExecSyncRequest) GetTimeout() int64 { -+ if m != nil { -+ return m.Timeout -+ } -+ return 0 -+} -+ -+type ExecSyncResponse struct { -+ // Captured command stdout output. -+ Stdout []byte `protobuf:"bytes,1,opt,name=stdout,proto3" json:"stdout,omitempty"` -+ // Captured command stderr output. -+ Stderr []byte `protobuf:"bytes,2,opt,name=stderr,proto3" json:"stderr,omitempty"` -+ // Exit code the command finished with. Default: 0 (success). -+ ExitCode int32 `protobuf:"varint,3,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ExecSyncResponse) Reset() { *m = ExecSyncResponse{} } -+func (*ExecSyncResponse) ProtoMessage() {} -+func (*ExecSyncResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{80} -+} -+func (m *ExecSyncResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ExecSyncResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ExecSyncResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ExecSyncResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ExecSyncResponse.Merge(m, src) -+} -+func (m *ExecSyncResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ExecSyncResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ExecSyncResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ExecSyncResponse proto.InternalMessageInfo -+ -+func (m *ExecSyncResponse) GetStdout() []byte { -+ if m != nil { -+ return m.Stdout -+ } -+ return nil -+} -+ -+func (m *ExecSyncResponse) GetStderr() []byte { -+ if m != nil { -+ return m.Stderr -+ } -+ return nil -+} -+ -+func (m *ExecSyncResponse) GetExitCode() int32 { -+ if m != nil { -+ return m.ExitCode -+ } -+ return 0 -+} -+ -+type ExecRequest struct { -+ // ID of the container in which to execute the command. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Command to execute. -+ Cmd []string `protobuf:"bytes,2,rep,name=cmd,proto3" json:"cmd,omitempty"` -+ // Whether to exec the command in a TTY. -+ Tty bool `protobuf:"varint,3,opt,name=tty,proto3" json:"tty,omitempty"` -+ // Whether to stream stdin. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ Stdin bool `protobuf:"varint,4,opt,name=stdin,proto3" json:"stdin,omitempty"` -+ // Whether to stream stdout. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ Stdout bool `protobuf:"varint,5,opt,name=stdout,proto3" json:"stdout,omitempty"` -+ // Whether to stream stderr. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported -+ // in this case. The output of stdout and stderr will be combined to a -+ // single stream. -+ Stderr bool `protobuf:"varint,6,opt,name=stderr,proto3" json:"stderr,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ExecRequest) Reset() { *m = ExecRequest{} } -+func (*ExecRequest) ProtoMessage() {} -+func (*ExecRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{81} -+} -+func (m *ExecRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ExecRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ExecRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ExecRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ExecRequest.Merge(m, src) -+} -+func (m *ExecRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ExecRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ExecRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ExecRequest proto.InternalMessageInfo -+ -+func (m *ExecRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+func (m *ExecRequest) GetCmd() []string { -+ if m != nil { -+ return m.Cmd -+ } -+ return nil -+} -+ -+func (m *ExecRequest) GetTty() bool { -+ if m != nil { -+ return m.Tty -+ } -+ return false -+} -+ -+func (m *ExecRequest) GetStdin() bool { -+ if m != nil { -+ return m.Stdin -+ } -+ return false -+} -+ -+func (m *ExecRequest) GetStdout() bool { -+ if m != nil { -+ return m.Stdout -+ } -+ return false -+} -+ -+func (m *ExecRequest) GetStderr() bool { -+ if m != nil { -+ return m.Stderr -+ } -+ return false -+} -+ -+type ExecResponse struct { -+ // Fully qualified URL of the exec streaming server. -+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ExecResponse) Reset() { *m = ExecResponse{} } -+func (*ExecResponse) ProtoMessage() {} -+func (*ExecResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{82} -+} -+func (m *ExecResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ExecResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ExecResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ExecResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ExecResponse.Merge(m, src) -+} -+func (m *ExecResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ExecResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ExecResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ExecResponse proto.InternalMessageInfo -+ -+func (m *ExecResponse) GetUrl() string { -+ if m != nil { -+ return m.Url -+ } -+ return "" -+} -+ -+type AttachRequest struct { -+ // ID of the container to which to attach. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Whether to stream stdin. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ Stdin bool `protobuf:"varint,2,opt,name=stdin,proto3" json:"stdin,omitempty"` -+ // Whether the process being attached is running in a TTY. -+ // This must match the TTY setting in the ContainerConfig. -+ Tty bool `protobuf:"varint,3,opt,name=tty,proto3" json:"tty,omitempty"` -+ // Whether to stream stdout. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ Stdout bool `protobuf:"varint,4,opt,name=stdout,proto3" json:"stdout,omitempty"` -+ // Whether to stream stderr. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported -+ // in this case. The output of stdout and stderr will be combined to a -+ // single stream. -+ Stderr bool `protobuf:"varint,5,opt,name=stderr,proto3" json:"stderr,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *AttachRequest) Reset() { *m = AttachRequest{} } -+func (*AttachRequest) ProtoMessage() {} -+func (*AttachRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{83} -+} -+func (m *AttachRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *AttachRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_AttachRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *AttachRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_AttachRequest.Merge(m, src) -+} -+func (m *AttachRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *AttachRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_AttachRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_AttachRequest proto.InternalMessageInfo -+ -+func (m *AttachRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+func (m *AttachRequest) GetStdin() bool { -+ if m != nil { -+ return m.Stdin -+ } -+ return false -+} -+ -+func (m *AttachRequest) GetTty() bool { -+ if m != nil { -+ return m.Tty -+ } -+ return false -+} -+ -+func (m *AttachRequest) GetStdout() bool { -+ if m != nil { -+ return m.Stdout -+ } -+ return false -+} -+ -+func (m *AttachRequest) GetStderr() bool { -+ if m != nil { -+ return m.Stderr -+ } -+ return false -+} -+ -+type AttachResponse struct { -+ // Fully qualified URL of the attach streaming server. -+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *AttachResponse) Reset() { *m = AttachResponse{} } -+func (*AttachResponse) ProtoMessage() {} -+func (*AttachResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{84} -+} -+func (m *AttachResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *AttachResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_AttachResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *AttachResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_AttachResponse.Merge(m, src) -+} -+func (m *AttachResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *AttachResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_AttachResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_AttachResponse proto.InternalMessageInfo -+ -+func (m *AttachResponse) GetUrl() string { -+ if m != nil { -+ return m.Url -+ } -+ return "" -+} -+ -+type PortForwardRequest struct { -+ // ID of the container to which to forward the port. -+ PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ // Port to forward. -+ Port []int32 `protobuf:"varint,2,rep,packed,name=port,proto3" json:"port,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PortForwardRequest) Reset() { *m = PortForwardRequest{} } -+func (*PortForwardRequest) ProtoMessage() {} -+func (*PortForwardRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{85} -+} -+func (m *PortForwardRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PortForwardRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PortForwardRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PortForwardRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PortForwardRequest.Merge(m, src) -+} -+func (m *PortForwardRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *PortForwardRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_PortForwardRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PortForwardRequest proto.InternalMessageInfo -+ -+func (m *PortForwardRequest) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+func (m *PortForwardRequest) GetPort() []int32 { -+ if m != nil { -+ return m.Port -+ } -+ return nil -+} -+ -+type PortForwardResponse struct { -+ // Fully qualified URL of the port-forward streaming server. -+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PortForwardResponse) Reset() { *m = PortForwardResponse{} } -+func (*PortForwardResponse) ProtoMessage() {} -+func (*PortForwardResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{86} -+} -+func (m *PortForwardResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PortForwardResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PortForwardResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PortForwardResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PortForwardResponse.Merge(m, src) -+} -+func (m *PortForwardResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *PortForwardResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_PortForwardResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PortForwardResponse proto.InternalMessageInfo -+ -+func (m *PortForwardResponse) GetUrl() string { -+ if m != nil { -+ return m.Url -+ } -+ return "" -+} -+ -+type ImageFilter struct { -+ // Spec of the image. -+ Image *ImageSpec `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ImageFilter) Reset() { *m = ImageFilter{} } -+func (*ImageFilter) ProtoMessage() {} -+func (*ImageFilter) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{87} -+} -+func (m *ImageFilter) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ImageFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ImageFilter.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ImageFilter) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ImageFilter.Merge(m, src) -+} -+func (m *ImageFilter) XXX_Size() int { -+ return m.Size() -+} -+func (m *ImageFilter) XXX_DiscardUnknown() { -+ xxx_messageInfo_ImageFilter.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ImageFilter proto.InternalMessageInfo -+ -+func (m *ImageFilter) GetImage() *ImageSpec { -+ if m != nil { -+ return m.Image -+ } -+ return nil -+} -+ -+type ListImagesRequest struct { -+ // Filter to list images. -+ Filter *ImageFilter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListImagesRequest) Reset() { *m = ListImagesRequest{} } -+func (*ListImagesRequest) ProtoMessage() {} -+func (*ListImagesRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{88} -+} -+func (m *ListImagesRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListImagesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListImagesRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListImagesRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListImagesRequest.Merge(m, src) -+} -+func (m *ListImagesRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListImagesRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListImagesRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListImagesRequest proto.InternalMessageInfo -+ -+func (m *ListImagesRequest) GetFilter() *ImageFilter { -+ if m != nil { -+ return m.Filter -+ } -+ return nil -+} -+ -+// Basic information about a container image. -+type Image struct { -+ // ID of the image. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // Other names by which this image is known. -+ RepoTags []string `protobuf:"bytes,2,rep,name=repo_tags,json=repoTags,proto3" json:"repo_tags,omitempty"` -+ // Digests by which this image is known. -+ RepoDigests []string `protobuf:"bytes,3,rep,name=repo_digests,json=repoDigests,proto3" json:"repo_digests,omitempty"` -+ // Size of the image in bytes. Must be > 0. -+ Size_ uint64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` -+ // UID that will run the command(s). This is used as a default if no user is -+ // specified when creating the container. UID and the following user name -+ // are mutually exclusive. -+ Uid *Int64Value `protobuf:"bytes,5,opt,name=uid,proto3" json:"uid,omitempty"` -+ // User name that will run the command(s). This is used if UID is not set -+ // and no user is specified when creating container. -+ Username string `protobuf:"bytes,6,opt,name=username,proto3" json:"username,omitempty"` -+ // ImageSpec for image which includes annotations -+ Spec *ImageSpec `protobuf:"bytes,7,opt,name=spec,proto3" json:"spec,omitempty"` -+ // Recommendation on whether this image should be exempt from garbage collection. -+ // It must only be treated as a recommendation -- the client can still request that the image be deleted, -+ // and the runtime must oblige. -+ Pinned bool `protobuf:"varint,8,opt,name=pinned,proto3" json:"pinned,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *Image) Reset() { *m = Image{} } -+func (*Image) ProtoMessage() {} -+func (*Image) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{89} -+} -+func (m *Image) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *Image) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_Image.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *Image) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_Image.Merge(m, src) -+} -+func (m *Image) XXX_Size() int { -+ return m.Size() -+} -+func (m *Image) XXX_DiscardUnknown() { -+ xxx_messageInfo_Image.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_Image proto.InternalMessageInfo -+ -+func (m *Image) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *Image) GetRepoTags() []string { -+ if m != nil { -+ return m.RepoTags -+ } -+ return nil -+} -+ -+func (m *Image) GetRepoDigests() []string { -+ if m != nil { -+ return m.RepoDigests -+ } -+ return nil -+} -+ -+func (m *Image) GetSize_() uint64 { -+ if m != nil { -+ return m.Size_ -+ } -+ return 0 -+} -+ -+func (m *Image) GetUid() *Int64Value { -+ if m != nil { -+ return m.Uid -+ } -+ return nil -+} -+ -+func (m *Image) GetUsername() string { -+ if m != nil { -+ return m.Username -+ } -+ return "" -+} -+ -+func (m *Image) GetSpec() *ImageSpec { -+ if m != nil { -+ return m.Spec -+ } -+ return nil -+} -+ -+func (m *Image) GetPinned() bool { -+ if m != nil { -+ return m.Pinned -+ } -+ return false -+} -+ -+type ListImagesResponse struct { -+ // List of images. -+ Images []*Image `protobuf:"bytes,1,rep,name=images,proto3" json:"images,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListImagesResponse) Reset() { *m = ListImagesResponse{} } -+func (*ListImagesResponse) ProtoMessage() {} -+func (*ListImagesResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{90} -+} -+func (m *ListImagesResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListImagesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListImagesResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListImagesResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListImagesResponse.Merge(m, src) -+} -+func (m *ListImagesResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListImagesResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListImagesResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListImagesResponse proto.InternalMessageInfo -+ -+func (m *ListImagesResponse) GetImages() []*Image { -+ if m != nil { -+ return m.Images -+ } -+ return nil -+} -+ -+type ImageStatusRequest struct { -+ // Spec of the image. -+ Image *ImageSpec `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` -+ // Verbose indicates whether to return extra information about the image. -+ Verbose bool `protobuf:"varint,2,opt,name=verbose,proto3" json:"verbose,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ImageStatusRequest) Reset() { *m = ImageStatusRequest{} } -+func (*ImageStatusRequest) ProtoMessage() {} -+func (*ImageStatusRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{91} -+} -+func (m *ImageStatusRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ImageStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ImageStatusRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ImageStatusRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ImageStatusRequest.Merge(m, src) -+} -+func (m *ImageStatusRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ImageStatusRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ImageStatusRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ImageStatusRequest proto.InternalMessageInfo -+ -+func (m *ImageStatusRequest) GetImage() *ImageSpec { -+ if m != nil { -+ return m.Image -+ } -+ return nil -+} -+ -+func (m *ImageStatusRequest) GetVerbose() bool { -+ if m != nil { -+ return m.Verbose -+ } -+ return false -+} -+ -+type ImageStatusResponse struct { -+ // Status of the image. -+ Image *Image `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` -+ // Info is extra information of the Image. The key could be arbitrary string, and -+ // value should be in json format. The information could include anything useful -+ // for debug, e.g. image config for oci image based container runtime. -+ // It should only be returned non-empty when Verbose is true. -+ Info map[string]string `protobuf:"bytes,2,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ImageStatusResponse) Reset() { *m = ImageStatusResponse{} } -+func (*ImageStatusResponse) ProtoMessage() {} -+func (*ImageStatusResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{92} -+} -+func (m *ImageStatusResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ImageStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ImageStatusResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ImageStatusResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ImageStatusResponse.Merge(m, src) -+} -+func (m *ImageStatusResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ImageStatusResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ImageStatusResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ImageStatusResponse proto.InternalMessageInfo -+ -+func (m *ImageStatusResponse) GetImage() *Image { -+ if m != nil { -+ return m.Image -+ } -+ return nil -+} -+ -+func (m *ImageStatusResponse) GetInfo() map[string]string { -+ if m != nil { -+ return m.Info -+ } -+ return nil -+} -+ -+// AuthConfig contains authorization information for connecting to a registry. -+type AuthConfig struct { -+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` -+ Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` -+ Auth string `protobuf:"bytes,3,opt,name=auth,proto3" json:"auth,omitempty"` -+ ServerAddress string `protobuf:"bytes,4,opt,name=server_address,json=serverAddress,proto3" json:"server_address,omitempty"` -+ // IdentityToken is used to authenticate the user and get -+ // an access token for the registry. -+ IdentityToken string `protobuf:"bytes,5,opt,name=identity_token,json=identityToken,proto3" json:"identity_token,omitempty"` -+ // RegistryToken is a bearer token to be sent to a registry -+ RegistryToken string `protobuf:"bytes,6,opt,name=registry_token,json=registryToken,proto3" json:"registry_token,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *AuthConfig) Reset() { *m = AuthConfig{} } -+func (*AuthConfig) ProtoMessage() {} -+func (*AuthConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{93} -+} -+func (m *AuthConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *AuthConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_AuthConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *AuthConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_AuthConfig.Merge(m, src) -+} -+func (m *AuthConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *AuthConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_AuthConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_AuthConfig proto.InternalMessageInfo -+ -+func (m *AuthConfig) GetUsername() string { -+ if m != nil { -+ return m.Username -+ } -+ return "" -+} -+ -+func (m *AuthConfig) GetPassword() string { -+ if m != nil { -+ return m.Password -+ } -+ return "" -+} -+ -+func (m *AuthConfig) GetAuth() string { -+ if m != nil { -+ return m.Auth -+ } -+ return "" -+} -+ -+func (m *AuthConfig) GetServerAddress() string { -+ if m != nil { -+ return m.ServerAddress -+ } -+ return "" -+} -+ -+func (m *AuthConfig) GetIdentityToken() string { -+ if m != nil { -+ return m.IdentityToken -+ } -+ return "" -+} -+ -+func (m *AuthConfig) GetRegistryToken() string { -+ if m != nil { -+ return m.RegistryToken -+ } -+ return "" -+} -+ -+type PullImageRequest struct { -+ // Spec of the image. -+ Image *ImageSpec `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` -+ // Authentication configuration for pulling the image. -+ Auth *AuthConfig `protobuf:"bytes,2,opt,name=auth,proto3" json:"auth,omitempty"` -+ // Config of the PodSandbox, which is used to pull image in PodSandbox context. -+ SandboxConfig *PodSandboxConfig `protobuf:"bytes,3,opt,name=sandbox_config,json=sandboxConfig,proto3" json:"sandbox_config,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PullImageRequest) Reset() { *m = PullImageRequest{} } -+func (*PullImageRequest) ProtoMessage() {} -+func (*PullImageRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{94} -+} -+func (m *PullImageRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PullImageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PullImageRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PullImageRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PullImageRequest.Merge(m, src) -+} -+func (m *PullImageRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *PullImageRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_PullImageRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PullImageRequest proto.InternalMessageInfo -+ -+func (m *PullImageRequest) GetImage() *ImageSpec { -+ if m != nil { -+ return m.Image -+ } -+ return nil -+} -+ -+func (m *PullImageRequest) GetAuth() *AuthConfig { -+ if m != nil { -+ return m.Auth -+ } -+ return nil -+} -+ -+func (m *PullImageRequest) GetSandboxConfig() *PodSandboxConfig { -+ if m != nil { -+ return m.SandboxConfig -+ } -+ return nil -+} -+ -+type PullImageResponse struct { -+ // Reference to the image in use. For most runtimes, this should be an -+ // image ID or digest. -+ ImageRef string `protobuf:"bytes,1,opt,name=image_ref,json=imageRef,proto3" json:"image_ref,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *PullImageResponse) Reset() { *m = PullImageResponse{} } -+func (*PullImageResponse) ProtoMessage() {} -+func (*PullImageResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{95} -+} -+func (m *PullImageResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *PullImageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_PullImageResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *PullImageResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_PullImageResponse.Merge(m, src) -+} -+func (m *PullImageResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *PullImageResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_PullImageResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_PullImageResponse proto.InternalMessageInfo -+ -+func (m *PullImageResponse) GetImageRef() string { -+ if m != nil { -+ return m.ImageRef -+ } -+ return "" -+} -+ -+type RemoveImageRequest struct { -+ // Spec of the image to remove. -+ Image *ImageSpec `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RemoveImageRequest) Reset() { *m = RemoveImageRequest{} } -+func (*RemoveImageRequest) ProtoMessage() {} -+func (*RemoveImageRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{96} -+} -+func (m *RemoveImageRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RemoveImageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RemoveImageRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RemoveImageRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RemoveImageRequest.Merge(m, src) -+} -+func (m *RemoveImageRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *RemoveImageRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_RemoveImageRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RemoveImageRequest proto.InternalMessageInfo -+ -+func (m *RemoveImageRequest) GetImage() *ImageSpec { -+ if m != nil { -+ return m.Image -+ } -+ return nil -+} -+ -+type RemoveImageResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RemoveImageResponse) Reset() { *m = RemoveImageResponse{} } -+func (*RemoveImageResponse) ProtoMessage() {} -+func (*RemoveImageResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{97} -+} -+func (m *RemoveImageResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RemoveImageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RemoveImageResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RemoveImageResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RemoveImageResponse.Merge(m, src) -+} -+func (m *RemoveImageResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *RemoveImageResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_RemoveImageResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RemoveImageResponse proto.InternalMessageInfo -+ -+type NetworkConfig struct { -+ // CIDR to use for pod IP addresses. If the CIDR is empty, runtimes -+ // should omit it. -+ PodCidr string `protobuf:"bytes,1,opt,name=pod_cidr,json=podCidr,proto3" json:"pod_cidr,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *NetworkConfig) Reset() { *m = NetworkConfig{} } -+func (*NetworkConfig) ProtoMessage() {} -+func (*NetworkConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{98} -+} -+func (m *NetworkConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *NetworkConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_NetworkConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *NetworkConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_NetworkConfig.Merge(m, src) -+} -+func (m *NetworkConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *NetworkConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_NetworkConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_NetworkConfig proto.InternalMessageInfo -+ -+func (m *NetworkConfig) GetPodCidr() string { -+ if m != nil { -+ return m.PodCidr -+ } -+ return "" -+} -+ -+type RuntimeConfig struct { -+ NetworkConfig *NetworkConfig `protobuf:"bytes,1,opt,name=network_config,json=networkConfig,proto3" json:"network_config,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RuntimeConfig) Reset() { *m = RuntimeConfig{} } -+func (*RuntimeConfig) ProtoMessage() {} -+func (*RuntimeConfig) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{99} -+} -+func (m *RuntimeConfig) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RuntimeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RuntimeConfig.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RuntimeConfig) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RuntimeConfig.Merge(m, src) -+} -+func (m *RuntimeConfig) XXX_Size() int { -+ return m.Size() -+} -+func (m *RuntimeConfig) XXX_DiscardUnknown() { -+ xxx_messageInfo_RuntimeConfig.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RuntimeConfig proto.InternalMessageInfo -+ -+func (m *RuntimeConfig) GetNetworkConfig() *NetworkConfig { -+ if m != nil { -+ return m.NetworkConfig -+ } -+ return nil -+} -+ -+type UpdateRuntimeConfigRequest struct { -+ RuntimeConfig *RuntimeConfig `protobuf:"bytes,1,opt,name=runtime_config,json=runtimeConfig,proto3" json:"runtime_config,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *UpdateRuntimeConfigRequest) Reset() { *m = UpdateRuntimeConfigRequest{} } -+func (*UpdateRuntimeConfigRequest) ProtoMessage() {} -+func (*UpdateRuntimeConfigRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{100} -+} -+func (m *UpdateRuntimeConfigRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *UpdateRuntimeConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_UpdateRuntimeConfigRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *UpdateRuntimeConfigRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_UpdateRuntimeConfigRequest.Merge(m, src) -+} -+func (m *UpdateRuntimeConfigRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *UpdateRuntimeConfigRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_UpdateRuntimeConfigRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_UpdateRuntimeConfigRequest proto.InternalMessageInfo -+ -+func (m *UpdateRuntimeConfigRequest) GetRuntimeConfig() *RuntimeConfig { -+ if m != nil { -+ return m.RuntimeConfig -+ } -+ return nil -+} -+ -+type UpdateRuntimeConfigResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *UpdateRuntimeConfigResponse) Reset() { *m = UpdateRuntimeConfigResponse{} } -+func (*UpdateRuntimeConfigResponse) ProtoMessage() {} -+func (*UpdateRuntimeConfigResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{101} -+} -+func (m *UpdateRuntimeConfigResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *UpdateRuntimeConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_UpdateRuntimeConfigResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *UpdateRuntimeConfigResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_UpdateRuntimeConfigResponse.Merge(m, src) -+} -+func (m *UpdateRuntimeConfigResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *UpdateRuntimeConfigResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_UpdateRuntimeConfigResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_UpdateRuntimeConfigResponse proto.InternalMessageInfo -+ -+// RuntimeCondition contains condition information for the runtime. -+// There are 2 kinds of runtime conditions: -+// 1. Required conditions: Conditions are required for kubelet to work -+// properly. If any required condition is unmet, the node will be not ready. -+// The required conditions include: -+// - RuntimeReady: RuntimeReady means the runtime is up and ready to accept -+// basic containers e.g. container only needs host network. -+// - NetworkReady: NetworkReady means the runtime network is up and ready to -+// accept containers which require container network. -+// -+// 2. Optional conditions: Conditions are informative to the user, but kubelet -+// will not rely on. Since condition type is an arbitrary string, all conditions -+// not required are optional. These conditions will be exposed to users to help -+// them understand the status of the system. -+type RuntimeCondition struct { -+ // Type of runtime condition. -+ Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` -+ // Status of the condition, one of true/false. Default: false. -+ Status bool `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"` -+ // Brief CamelCase string containing reason for the condition's last transition. -+ Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` -+ // Human-readable message indicating details about last transition. -+ Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RuntimeCondition) Reset() { *m = RuntimeCondition{} } -+func (*RuntimeCondition) ProtoMessage() {} -+func (*RuntimeCondition) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{102} -+} -+func (m *RuntimeCondition) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RuntimeCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RuntimeCondition.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RuntimeCondition) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RuntimeCondition.Merge(m, src) -+} -+func (m *RuntimeCondition) XXX_Size() int { -+ return m.Size() -+} -+func (m *RuntimeCondition) XXX_DiscardUnknown() { -+ xxx_messageInfo_RuntimeCondition.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RuntimeCondition proto.InternalMessageInfo -+ -+func (m *RuntimeCondition) GetType() string { -+ if m != nil { -+ return m.Type -+ } -+ return "" -+} -+ -+func (m *RuntimeCondition) GetStatus() bool { -+ if m != nil { -+ return m.Status -+ } -+ return false -+} -+ -+func (m *RuntimeCondition) GetReason() string { -+ if m != nil { -+ return m.Reason -+ } -+ return "" -+} -+ -+func (m *RuntimeCondition) GetMessage() string { -+ if m != nil { -+ return m.Message -+ } -+ return "" -+} -+ -+// RuntimeStatus is information about the current status of the runtime. -+type RuntimeStatus struct { -+ // List of current observed runtime conditions. -+ Conditions []*RuntimeCondition `protobuf:"bytes,1,rep,name=conditions,proto3" json:"conditions,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *RuntimeStatus) Reset() { *m = RuntimeStatus{} } -+func (*RuntimeStatus) ProtoMessage() {} -+func (*RuntimeStatus) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{103} -+} -+func (m *RuntimeStatus) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *RuntimeStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_RuntimeStatus.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *RuntimeStatus) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_RuntimeStatus.Merge(m, src) -+} -+func (m *RuntimeStatus) XXX_Size() int { -+ return m.Size() -+} -+func (m *RuntimeStatus) XXX_DiscardUnknown() { -+ xxx_messageInfo_RuntimeStatus.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_RuntimeStatus proto.InternalMessageInfo -+ -+func (m *RuntimeStatus) GetConditions() []*RuntimeCondition { -+ if m != nil { -+ return m.Conditions -+ } -+ return nil -+} -+ -+type StatusRequest struct { -+ // Verbose indicates whether to return extra information about the runtime. -+ Verbose bool `protobuf:"varint,1,opt,name=verbose,proto3" json:"verbose,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *StatusRequest) Reset() { *m = StatusRequest{} } -+func (*StatusRequest) ProtoMessage() {} -+func (*StatusRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{104} -+} -+func (m *StatusRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *StatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_StatusRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *StatusRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_StatusRequest.Merge(m, src) -+} -+func (m *StatusRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *StatusRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_StatusRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_StatusRequest proto.InternalMessageInfo -+ -+func (m *StatusRequest) GetVerbose() bool { -+ if m != nil { -+ return m.Verbose -+ } -+ return false -+} -+ -+type StatusResponse struct { -+ // Status of the Runtime. -+ Status *RuntimeStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` -+ // Info is extra information of the Runtime. The key could be arbitrary string, and -+ // value should be in json format. The information could include anything useful for -+ // debug, e.g. plugins used by the container runtime. -+ // It should only be returned non-empty when Verbose is true. -+ Info map[string]string `protobuf:"bytes,2,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *StatusResponse) Reset() { *m = StatusResponse{} } -+func (*StatusResponse) ProtoMessage() {} -+func (*StatusResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{105} -+} -+func (m *StatusResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *StatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_StatusResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *StatusResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_StatusResponse.Merge(m, src) -+} -+func (m *StatusResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *StatusResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_StatusResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_StatusResponse proto.InternalMessageInfo -+ -+func (m *StatusResponse) GetStatus() *RuntimeStatus { -+ if m != nil { -+ return m.Status -+ } -+ return nil -+} -+ -+func (m *StatusResponse) GetInfo() map[string]string { -+ if m != nil { -+ return m.Info -+ } -+ return nil -+} -+ -+type ImageFsInfoRequest struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ImageFsInfoRequest) Reset() { *m = ImageFsInfoRequest{} } -+func (*ImageFsInfoRequest) ProtoMessage() {} -+func (*ImageFsInfoRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{106} -+} -+func (m *ImageFsInfoRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ImageFsInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ImageFsInfoRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ImageFsInfoRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ImageFsInfoRequest.Merge(m, src) -+} -+func (m *ImageFsInfoRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ImageFsInfoRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ImageFsInfoRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ImageFsInfoRequest proto.InternalMessageInfo -+ -+// UInt64Value is the wrapper of uint64. -+type UInt64Value struct { -+ // The value. -+ Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *UInt64Value) Reset() { *m = UInt64Value{} } -+func (*UInt64Value) ProtoMessage() {} -+func (*UInt64Value) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{107} -+} -+func (m *UInt64Value) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *UInt64Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_UInt64Value.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *UInt64Value) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_UInt64Value.Merge(m, src) -+} -+func (m *UInt64Value) XXX_Size() int { -+ return m.Size() -+} -+func (m *UInt64Value) XXX_DiscardUnknown() { -+ xxx_messageInfo_UInt64Value.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_UInt64Value proto.InternalMessageInfo -+ -+func (m *UInt64Value) GetValue() uint64 { -+ if m != nil { -+ return m.Value -+ } -+ return 0 -+} -+ -+// FilesystemIdentifier uniquely identify the filesystem. -+type FilesystemIdentifier struct { -+ // Mountpoint of a filesystem. -+ Mountpoint string `protobuf:"bytes,1,opt,name=mountpoint,proto3" json:"mountpoint,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *FilesystemIdentifier) Reset() { *m = FilesystemIdentifier{} } -+func (*FilesystemIdentifier) ProtoMessage() {} -+func (*FilesystemIdentifier) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{108} -+} -+func (m *FilesystemIdentifier) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *FilesystemIdentifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_FilesystemIdentifier.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *FilesystemIdentifier) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_FilesystemIdentifier.Merge(m, src) -+} -+func (m *FilesystemIdentifier) XXX_Size() int { -+ return m.Size() -+} -+func (m *FilesystemIdentifier) XXX_DiscardUnknown() { -+ xxx_messageInfo_FilesystemIdentifier.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_FilesystemIdentifier proto.InternalMessageInfo -+ -+func (m *FilesystemIdentifier) GetMountpoint() string { -+ if m != nil { -+ return m.Mountpoint -+ } -+ return "" -+} -+ -+// FilesystemUsage provides the filesystem usage information. -+type FilesystemUsage struct { -+ // Timestamp in nanoseconds at which the information were collected. Must be > 0. -+ Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -+ // The unique identifier of the filesystem. -+ FsId *FilesystemIdentifier `protobuf:"bytes,2,opt,name=fs_id,json=fsId,proto3" json:"fs_id,omitempty"` -+ // UsedBytes represents the bytes used for images on the filesystem. -+ // This may differ from the total bytes used on the filesystem and may not -+ // equal CapacityBytes - AvailableBytes. -+ UsedBytes *UInt64Value `protobuf:"bytes,3,opt,name=used_bytes,json=usedBytes,proto3" json:"used_bytes,omitempty"` -+ // InodesUsed represents the inodes used by the images. -+ // This may not equal InodesCapacity - InodesAvailable because the underlying -+ // filesystem may also be used for purposes other than storing images. -+ InodesUsed *UInt64Value `protobuf:"bytes,4,opt,name=inodes_used,json=inodesUsed,proto3" json:"inodes_used,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *FilesystemUsage) Reset() { *m = FilesystemUsage{} } -+func (*FilesystemUsage) ProtoMessage() {} -+func (*FilesystemUsage) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{109} -+} -+func (m *FilesystemUsage) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *FilesystemUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_FilesystemUsage.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *FilesystemUsage) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_FilesystemUsage.Merge(m, src) -+} -+func (m *FilesystemUsage) XXX_Size() int { -+ return m.Size() -+} -+func (m *FilesystemUsage) XXX_DiscardUnknown() { -+ xxx_messageInfo_FilesystemUsage.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_FilesystemUsage proto.InternalMessageInfo -+ -+func (m *FilesystemUsage) GetTimestamp() int64 { -+ if m != nil { -+ return m.Timestamp -+ } -+ return 0 -+} -+ -+func (m *FilesystemUsage) GetFsId() *FilesystemIdentifier { -+ if m != nil { -+ return m.FsId -+ } -+ return nil -+} -+ -+func (m *FilesystemUsage) GetUsedBytes() *UInt64Value { -+ if m != nil { -+ return m.UsedBytes -+ } -+ return nil -+} -+ -+func (m *FilesystemUsage) GetInodesUsed() *UInt64Value { -+ if m != nil { -+ return m.InodesUsed -+ } -+ return nil -+} -+ -+type ImageFsInfoResponse struct { -+ // Information of image filesystem(s). -+ ImageFilesystems []*FilesystemUsage `protobuf:"bytes,1,rep,name=image_filesystems,json=imageFilesystems,proto3" json:"image_filesystems,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ImageFsInfoResponse) Reset() { *m = ImageFsInfoResponse{} } -+func (*ImageFsInfoResponse) ProtoMessage() {} -+func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{110} -+} -+func (m *ImageFsInfoResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ImageFsInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ImageFsInfoResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ImageFsInfoResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ImageFsInfoResponse.Merge(m, src) -+} -+func (m *ImageFsInfoResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ImageFsInfoResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ImageFsInfoResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ImageFsInfoResponse proto.InternalMessageInfo -+ -+func (m *ImageFsInfoResponse) GetImageFilesystems() []*FilesystemUsage { -+ if m != nil { -+ return m.ImageFilesystems -+ } -+ return nil -+} -+ -+type ContainerStatsRequest struct { -+ // ID of the container for which to retrieve stats. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerStatsRequest) Reset() { *m = ContainerStatsRequest{} } -+func (*ContainerStatsRequest) ProtoMessage() {} -+func (*ContainerStatsRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{111} -+} -+func (m *ContainerStatsRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerStatsRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerStatsRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerStatsRequest.Merge(m, src) -+} -+func (m *ContainerStatsRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerStatsRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerStatsRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerStatsRequest proto.InternalMessageInfo -+ -+func (m *ContainerStatsRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+type ContainerStatsResponse struct { -+ // Stats of the container. -+ Stats *ContainerStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerStatsResponse) Reset() { *m = ContainerStatsResponse{} } -+func (*ContainerStatsResponse) ProtoMessage() {} -+func (*ContainerStatsResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{112} -+} -+func (m *ContainerStatsResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerStatsResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerStatsResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerStatsResponse.Merge(m, src) -+} -+func (m *ContainerStatsResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerStatsResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerStatsResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerStatsResponse proto.InternalMessageInfo -+ -+func (m *ContainerStatsResponse) GetStats() *ContainerStats { -+ if m != nil { -+ return m.Stats -+ } -+ return nil -+} -+ -+type ListContainerStatsRequest struct { -+ // Filter for the list request. -+ Filter *ContainerStatsFilter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListContainerStatsRequest) Reset() { *m = ListContainerStatsRequest{} } -+func (*ListContainerStatsRequest) ProtoMessage() {} -+func (*ListContainerStatsRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{113} -+} -+func (m *ListContainerStatsRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListContainerStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListContainerStatsRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListContainerStatsRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListContainerStatsRequest.Merge(m, src) -+} -+func (m *ListContainerStatsRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListContainerStatsRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListContainerStatsRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListContainerStatsRequest proto.InternalMessageInfo -+ -+func (m *ListContainerStatsRequest) GetFilter() *ContainerStatsFilter { -+ if m != nil { -+ return m.Filter -+ } -+ return nil -+} -+ -+// ContainerStatsFilter is used to filter containers. -+// All those fields are combined with 'AND' -+type ContainerStatsFilter struct { -+ // ID of the container. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // ID of the PodSandbox. -+ PodSandboxId string `protobuf:"bytes,2,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` -+ // LabelSelector to select matches. -+ // Only api.MatchLabels is supported for now and the requirements -+ // are ANDed. MatchExpressions is not supported yet. -+ LabelSelector map[string]string `protobuf:"bytes,3,rep,name=label_selector,json=labelSelector,proto3" json:"label_selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerStatsFilter) Reset() { *m = ContainerStatsFilter{} } -+func (*ContainerStatsFilter) ProtoMessage() {} -+func (*ContainerStatsFilter) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{114} -+} -+func (m *ContainerStatsFilter) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerStatsFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerStatsFilter.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerStatsFilter) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerStatsFilter.Merge(m, src) -+} -+func (m *ContainerStatsFilter) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerStatsFilter) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerStatsFilter.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerStatsFilter proto.InternalMessageInfo -+ -+func (m *ContainerStatsFilter) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *ContainerStatsFilter) GetPodSandboxId() string { -+ if m != nil { -+ return m.PodSandboxId -+ } -+ return "" -+} -+ -+func (m *ContainerStatsFilter) GetLabelSelector() map[string]string { -+ if m != nil { -+ return m.LabelSelector -+ } -+ return nil -+} -+ -+type ListContainerStatsResponse struct { -+ // Stats of the container. -+ Stats []*ContainerStats `protobuf:"bytes,1,rep,name=stats,proto3" json:"stats,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ListContainerStatsResponse) Reset() { *m = ListContainerStatsResponse{} } -+func (*ListContainerStatsResponse) ProtoMessage() {} -+func (*ListContainerStatsResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{115} -+} -+func (m *ListContainerStatsResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ListContainerStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ListContainerStatsResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ListContainerStatsResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ListContainerStatsResponse.Merge(m, src) -+} -+func (m *ListContainerStatsResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ListContainerStatsResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ListContainerStatsResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ListContainerStatsResponse proto.InternalMessageInfo -+ -+func (m *ListContainerStatsResponse) GetStats() []*ContainerStats { -+ if m != nil { -+ return m.Stats -+ } -+ return nil -+} -+ -+// ContainerAttributes provides basic information of the container. -+type ContainerAttributes struct { -+ // ID of the container. -+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -+ // Metadata of the container. -+ Metadata *ContainerMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -+ // Key-value pairs that may be used to scope and select individual resources. -+ Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding ContainerConfig used to -+ // instantiate the Container this status represents. -+ Annotations map[string]string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerAttributes) Reset() { *m = ContainerAttributes{} } -+func (*ContainerAttributes) ProtoMessage() {} -+func (*ContainerAttributes) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{116} -+} -+func (m *ContainerAttributes) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerAttributes.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerAttributes) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerAttributes.Merge(m, src) -+} -+func (m *ContainerAttributes) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerAttributes) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerAttributes.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerAttributes proto.InternalMessageInfo -+ -+func (m *ContainerAttributes) GetId() string { -+ if m != nil { -+ return m.Id -+ } -+ return "" -+} -+ -+func (m *ContainerAttributes) GetMetadata() *ContainerMetadata { -+ if m != nil { -+ return m.Metadata -+ } -+ return nil -+} -+ -+func (m *ContainerAttributes) GetLabels() map[string]string { -+ if m != nil { -+ return m.Labels -+ } -+ return nil -+} -+ -+func (m *ContainerAttributes) GetAnnotations() map[string]string { -+ if m != nil { -+ return m.Annotations -+ } -+ return nil -+} -+ -+// ContainerStats provides the resource usage statistics for a container. -+type ContainerStats struct { -+ // Information of the container. -+ Attributes *ContainerAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` -+ // CPU usage gathered from the container. -+ Cpu *CpuUsage `protobuf:"bytes,2,opt,name=cpu,proto3" json:"cpu,omitempty"` -+ // Memory usage gathered from the container. -+ Memory *MemoryUsage `protobuf:"bytes,3,opt,name=memory,proto3" json:"memory,omitempty"` -+ // Usage of the writable layer. -+ WritableLayer *FilesystemUsage `protobuf:"bytes,4,opt,name=writable_layer,json=writableLayer,proto3" json:"writable_layer,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerStats) Reset() { *m = ContainerStats{} } -+func (*ContainerStats) ProtoMessage() {} -+func (*ContainerStats) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{117} -+} -+func (m *ContainerStats) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerStats.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerStats) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerStats.Merge(m, src) -+} -+func (m *ContainerStats) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerStats) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerStats.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerStats proto.InternalMessageInfo -+ -+func (m *ContainerStats) GetAttributes() *ContainerAttributes { -+ if m != nil { -+ return m.Attributes -+ } -+ return nil -+} -+ -+func (m *ContainerStats) GetCpu() *CpuUsage { -+ if m != nil { -+ return m.Cpu -+ } -+ return nil -+} -+ -+func (m *ContainerStats) GetMemory() *MemoryUsage { -+ if m != nil { -+ return m.Memory -+ } -+ return nil -+} -+ -+func (m *ContainerStats) GetWritableLayer() *FilesystemUsage { -+ if m != nil { -+ return m.WritableLayer -+ } -+ return nil -+} -+ -+// CpuUsage provides the CPU usage information. -+type CpuUsage struct { -+ // Timestamp in nanoseconds at which the information were collected. Must be > 0. -+ Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -+ // Cumulative CPU usage (sum across all cores) since object creation. -+ UsageCoreNanoSeconds *UInt64Value `protobuf:"bytes,2,opt,name=usage_core_nano_seconds,json=usageCoreNanoSeconds,proto3" json:"usage_core_nano_seconds,omitempty"` -+ // Total CPU usage (sum of all cores) averaged over the sample window. -+ // The "core" unit can be interpreted as CPU core-nanoseconds per second. -+ UsageNanoCores *UInt64Value `protobuf:"bytes,3,opt,name=usage_nano_cores,json=usageNanoCores,proto3" json:"usage_nano_cores,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *CpuUsage) Reset() { *m = CpuUsage{} } -+func (*CpuUsage) ProtoMessage() {} -+func (*CpuUsage) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{118} -+} -+func (m *CpuUsage) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *CpuUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_CpuUsage.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *CpuUsage) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_CpuUsage.Merge(m, src) -+} -+func (m *CpuUsage) XXX_Size() int { -+ return m.Size() -+} -+func (m *CpuUsage) XXX_DiscardUnknown() { -+ xxx_messageInfo_CpuUsage.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_CpuUsage proto.InternalMessageInfo -+ -+func (m *CpuUsage) GetTimestamp() int64 { -+ if m != nil { -+ return m.Timestamp -+ } -+ return 0 -+} -+ -+func (m *CpuUsage) GetUsageCoreNanoSeconds() *UInt64Value { -+ if m != nil { -+ return m.UsageCoreNanoSeconds -+ } -+ return nil -+} -+ -+func (m *CpuUsage) GetUsageNanoCores() *UInt64Value { -+ if m != nil { -+ return m.UsageNanoCores -+ } -+ return nil -+} -+ -+// MemoryUsage provides the memory usage information. -+type MemoryUsage struct { -+ // Timestamp in nanoseconds at which the information were collected. Must be > 0. -+ Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -+ // The amount of working set memory in bytes. -+ WorkingSetBytes *UInt64Value `protobuf:"bytes,2,opt,name=working_set_bytes,json=workingSetBytes,proto3" json:"working_set_bytes,omitempty"` -+ // Available memory for use. This is defined as the memory limit - workingSetBytes. -+ AvailableBytes *UInt64Value `protobuf:"bytes,3,opt,name=available_bytes,json=availableBytes,proto3" json:"available_bytes,omitempty"` -+ // Total memory in use. This includes all memory regardless of when it was accessed. -+ UsageBytes *UInt64Value `protobuf:"bytes,4,opt,name=usage_bytes,json=usageBytes,proto3" json:"usage_bytes,omitempty"` -+ // The amount of anonymous and swap cache memory (includes transparent hugepages). -+ RssBytes *UInt64Value `protobuf:"bytes,5,opt,name=rss_bytes,json=rssBytes,proto3" json:"rss_bytes,omitempty"` -+ // Cumulative number of minor page faults. -+ PageFaults *UInt64Value `protobuf:"bytes,6,opt,name=page_faults,json=pageFaults,proto3" json:"page_faults,omitempty"` -+ // Cumulative number of major page faults. -+ MajorPageFaults *UInt64Value `protobuf:"bytes,7,opt,name=major_page_faults,json=majorPageFaults,proto3" json:"major_page_faults,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *MemoryUsage) Reset() { *m = MemoryUsage{} } -+func (*MemoryUsage) ProtoMessage() {} -+func (*MemoryUsage) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{119} -+} -+func (m *MemoryUsage) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *MemoryUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_MemoryUsage.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *MemoryUsage) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_MemoryUsage.Merge(m, src) -+} -+func (m *MemoryUsage) XXX_Size() int { -+ return m.Size() -+} -+func (m *MemoryUsage) XXX_DiscardUnknown() { -+ xxx_messageInfo_MemoryUsage.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_MemoryUsage proto.InternalMessageInfo -+ -+func (m *MemoryUsage) GetTimestamp() int64 { -+ if m != nil { -+ return m.Timestamp -+ } -+ return 0 -+} -+ -+func (m *MemoryUsage) GetWorkingSetBytes() *UInt64Value { -+ if m != nil { -+ return m.WorkingSetBytes -+ } -+ return nil -+} -+ -+func (m *MemoryUsage) GetAvailableBytes() *UInt64Value { -+ if m != nil { -+ return m.AvailableBytes -+ } -+ return nil -+} -+ -+func (m *MemoryUsage) GetUsageBytes() *UInt64Value { -+ if m != nil { -+ return m.UsageBytes -+ } -+ return nil -+} -+ -+func (m *MemoryUsage) GetRssBytes() *UInt64Value { -+ if m != nil { -+ return m.RssBytes -+ } -+ return nil -+} -+ -+func (m *MemoryUsage) GetPageFaults() *UInt64Value { -+ if m != nil { -+ return m.PageFaults -+ } -+ return nil -+} -+ -+func (m *MemoryUsage) GetMajorPageFaults() *UInt64Value { -+ if m != nil { -+ return m.MajorPageFaults -+ } -+ return nil -+} -+ -+type ReopenContainerLogRequest struct { -+ // ID of the container for which to reopen the log. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ReopenContainerLogRequest) Reset() { *m = ReopenContainerLogRequest{} } -+func (*ReopenContainerLogRequest) ProtoMessage() {} -+func (*ReopenContainerLogRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{120} -+} -+func (m *ReopenContainerLogRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ReopenContainerLogRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ReopenContainerLogRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ReopenContainerLogRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ReopenContainerLogRequest.Merge(m, src) -+} -+func (m *ReopenContainerLogRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *ReopenContainerLogRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_ReopenContainerLogRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ReopenContainerLogRequest proto.InternalMessageInfo -+ -+func (m *ReopenContainerLogRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+type ReopenContainerLogResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ReopenContainerLogResponse) Reset() { *m = ReopenContainerLogResponse{} } -+func (*ReopenContainerLogResponse) ProtoMessage() {} -+func (*ReopenContainerLogResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{121} -+} -+func (m *ReopenContainerLogResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ReopenContainerLogResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ReopenContainerLogResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ReopenContainerLogResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ReopenContainerLogResponse.Merge(m, src) -+} -+func (m *ReopenContainerLogResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ReopenContainerLogResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ReopenContainerLogResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ReopenContainerLogResponse proto.InternalMessageInfo -+ -+type CheckpointContainerRequest struct { -+ // ID of the container to be checkpointed. -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Location of the checkpoint archive used for export -+ Location string `protobuf:"bytes,2,opt,name=location,proto3" json:"location,omitempty"` -+ // Timeout in seconds for the checkpoint to complete. -+ // Timeout of zero means to use the CRI default. -+ // Timeout > 0 means to use the user specified timeout. -+ Timeout int64 `protobuf:"varint,3,opt,name=timeout,proto3" json:"timeout,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *CheckpointContainerRequest) Reset() { *m = CheckpointContainerRequest{} } -+func (*CheckpointContainerRequest) ProtoMessage() {} -+func (*CheckpointContainerRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{122} -+} -+func (m *CheckpointContainerRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *CheckpointContainerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_CheckpointContainerRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *CheckpointContainerRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_CheckpointContainerRequest.Merge(m, src) -+} -+func (m *CheckpointContainerRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *CheckpointContainerRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_CheckpointContainerRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_CheckpointContainerRequest proto.InternalMessageInfo -+ -+func (m *CheckpointContainerRequest) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+func (m *CheckpointContainerRequest) GetLocation() string { -+ if m != nil { -+ return m.Location -+ } -+ return "" -+} -+ -+func (m *CheckpointContainerRequest) GetTimeout() int64 { -+ if m != nil { -+ return m.Timeout -+ } -+ return 0 -+} -+ -+type CheckpointContainerResponse struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *CheckpointContainerResponse) Reset() { *m = CheckpointContainerResponse{} } -+func (*CheckpointContainerResponse) ProtoMessage() {} -+func (*CheckpointContainerResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{123} -+} -+func (m *CheckpointContainerResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *CheckpointContainerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_CheckpointContainerResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *CheckpointContainerResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_CheckpointContainerResponse.Merge(m, src) -+} -+func (m *CheckpointContainerResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *CheckpointContainerResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_CheckpointContainerResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_CheckpointContainerResponse proto.InternalMessageInfo -+ -+type GetEventsRequest struct { -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *GetEventsRequest) Reset() { *m = GetEventsRequest{} } -+func (*GetEventsRequest) ProtoMessage() {} -+func (*GetEventsRequest) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{124} -+} -+func (m *GetEventsRequest) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *GetEventsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_GetEventsRequest.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *GetEventsRequest) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_GetEventsRequest.Merge(m, src) -+} -+func (m *GetEventsRequest) XXX_Size() int { -+ return m.Size() -+} -+func (m *GetEventsRequest) XXX_DiscardUnknown() { -+ xxx_messageInfo_GetEventsRequest.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_GetEventsRequest proto.InternalMessageInfo -+ -+type ContainerEventResponse struct { -+ // ID of the container -+ ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` -+ // Type of the container event -+ ContainerEventType ContainerEventType `protobuf:"varint,2,opt,name=container_event_type,json=containerEventType,proto3,enum=runtime.v1.ContainerEventType" json:"container_event_type,omitempty"` -+ // Creation timestamp of this event -+ CreatedAt int64 `protobuf:"varint,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` -+ // ID of the sandbox container -+ PodSandboxMetadata *PodSandboxMetadata `protobuf:"bytes,4,opt,name=pod_sandbox_metadata,json=podSandboxMetadata,proto3" json:"pod_sandbox_metadata,omitempty"` -+ XXX_NoUnkeyedLiteral struct{} `json:"-"` -+ XXX_sizecache int32 `json:"-"` -+} -+ -+func (m *ContainerEventResponse) Reset() { *m = ContainerEventResponse{} } -+func (*ContainerEventResponse) ProtoMessage() {} -+func (*ContainerEventResponse) Descriptor() ([]byte, []int) { -+ return fileDescriptor_00212fb1f9d3bf1c, []int{125} -+} -+func (m *ContainerEventResponse) XXX_Unmarshal(b []byte) error { -+ return m.Unmarshal(b) -+} -+func (m *ContainerEventResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { -+ if deterministic { -+ return xxx_messageInfo_ContainerEventResponse.Marshal(b, m, deterministic) -+ } else { -+ b = b[:cap(b)] -+ n, err := m.MarshalToSizedBuffer(b) -+ if err != nil { -+ return nil, err -+ } -+ return b[:n], nil -+ } -+} -+func (m *ContainerEventResponse) XXX_Merge(src proto.Message) { -+ xxx_messageInfo_ContainerEventResponse.Merge(m, src) -+} -+func (m *ContainerEventResponse) XXX_Size() int { -+ return m.Size() -+} -+func (m *ContainerEventResponse) XXX_DiscardUnknown() { -+ xxx_messageInfo_ContainerEventResponse.DiscardUnknown(m) -+} -+ -+var xxx_messageInfo_ContainerEventResponse proto.InternalMessageInfo -+ -+func (m *ContainerEventResponse) GetContainerId() string { -+ if m != nil { -+ return m.ContainerId -+ } -+ return "" -+} -+ -+func (m *ContainerEventResponse) GetContainerEventType() ContainerEventType { -+ if m != nil { -+ return m.ContainerEventType -+ } -+ return ContainerEventType_CONTAINER_CREATED_EVENT -+} -+ -+func (m *ContainerEventResponse) GetCreatedAt() int64 { -+ if m != nil { -+ return m.CreatedAt -+ } -+ return 0 -+} -+ -+func (m *ContainerEventResponse) GetPodSandboxMetadata() *PodSandboxMetadata { -+ if m != nil { -+ return m.PodSandboxMetadata -+ } -+ return nil -+} -+ -+func init() { -+ proto.RegisterEnum("runtime.v1.Protocol", Protocol_name, Protocol_value) -+ proto.RegisterEnum("runtime.v1.MountPropagation", MountPropagation_name, MountPropagation_value) -+ proto.RegisterEnum("runtime.v1.NamespaceMode", NamespaceMode_name, NamespaceMode_value) -+ proto.RegisterEnum("runtime.v1.PodSandboxState", PodSandboxState_name, PodSandboxState_value) -+ proto.RegisterEnum("runtime.v1.ContainerState", ContainerState_name, ContainerState_value) -+ proto.RegisterEnum("runtime.v1.ContainerEventType", ContainerEventType_name, ContainerEventType_value) -+ proto.RegisterEnum("runtime.v1.SecurityProfile_ProfileType", SecurityProfile_ProfileType_name, SecurityProfile_ProfileType_value) -+ proto.RegisterType((*VersionRequest)(nil), "runtime.v1.VersionRequest") -+ proto.RegisterType((*VersionResponse)(nil), "runtime.v1.VersionResponse") -+ proto.RegisterType((*DNSConfig)(nil), "runtime.v1.DNSConfig") -+ proto.RegisterType((*PortMapping)(nil), "runtime.v1.PortMapping") -+ proto.RegisterType((*Mount)(nil), "runtime.v1.Mount") -+ proto.RegisterType((*IDMapping)(nil), "runtime.v1.IDMapping") -+ proto.RegisterType((*UserNamespace)(nil), "runtime.v1.UserNamespace") -+ proto.RegisterType((*NamespaceOption)(nil), "runtime.v1.NamespaceOption") -+ proto.RegisterType((*Int64Value)(nil), "runtime.v1.Int64Value") -+ proto.RegisterType((*LinuxSandboxSecurityContext)(nil), "runtime.v1.LinuxSandboxSecurityContext") -+ proto.RegisterType((*SecurityProfile)(nil), "runtime.v1.SecurityProfile") -+ proto.RegisterType((*LinuxPodSandboxConfig)(nil), "runtime.v1.LinuxPodSandboxConfig") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.LinuxPodSandboxConfig.SysctlsEntry") -+ proto.RegisterType((*PodSandboxMetadata)(nil), "runtime.v1.PodSandboxMetadata") -+ proto.RegisterType((*PodSandboxConfig)(nil), "runtime.v1.PodSandboxConfig") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxConfig.AnnotationsEntry") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxConfig.LabelsEntry") -+ proto.RegisterType((*RunPodSandboxRequest)(nil), "runtime.v1.RunPodSandboxRequest") -+ proto.RegisterType((*RunPodSandboxResponse)(nil), "runtime.v1.RunPodSandboxResponse") -+ proto.RegisterType((*StopPodSandboxRequest)(nil), "runtime.v1.StopPodSandboxRequest") -+ proto.RegisterType((*StopPodSandboxResponse)(nil), "runtime.v1.StopPodSandboxResponse") -+ proto.RegisterType((*RemovePodSandboxRequest)(nil), "runtime.v1.RemovePodSandboxRequest") -+ proto.RegisterType((*RemovePodSandboxResponse)(nil), "runtime.v1.RemovePodSandboxResponse") -+ proto.RegisterType((*PodSandboxStatusRequest)(nil), "runtime.v1.PodSandboxStatusRequest") -+ proto.RegisterType((*PodIP)(nil), "runtime.v1.PodIP") -+ proto.RegisterType((*PodSandboxNetworkStatus)(nil), "runtime.v1.PodSandboxNetworkStatus") -+ proto.RegisterType((*Namespace)(nil), "runtime.v1.Namespace") -+ proto.RegisterType((*LinuxPodSandboxStatus)(nil), "runtime.v1.LinuxPodSandboxStatus") -+ proto.RegisterType((*PodSandboxStatus)(nil), "runtime.v1.PodSandboxStatus") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxStatus.AnnotationsEntry") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxStatus.LabelsEntry") -+ proto.RegisterType((*PodSandboxStatusResponse)(nil), "runtime.v1.PodSandboxStatusResponse") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxStatusResponse.InfoEntry") -+ proto.RegisterType((*PodSandboxStateValue)(nil), "runtime.v1.PodSandboxStateValue") -+ proto.RegisterType((*PodSandboxFilter)(nil), "runtime.v1.PodSandboxFilter") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxFilter.LabelSelectorEntry") -+ proto.RegisterType((*ListPodSandboxRequest)(nil), "runtime.v1.ListPodSandboxRequest") -+ proto.RegisterType((*PodSandbox)(nil), "runtime.v1.PodSandbox") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandbox.AnnotationsEntry") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandbox.LabelsEntry") -+ proto.RegisterType((*ListPodSandboxResponse)(nil), "runtime.v1.ListPodSandboxResponse") -+ proto.RegisterType((*PodSandboxStatsRequest)(nil), "runtime.v1.PodSandboxStatsRequest") -+ proto.RegisterType((*PodSandboxStatsResponse)(nil), "runtime.v1.PodSandboxStatsResponse") -+ proto.RegisterType((*PodSandboxStatsFilter)(nil), "runtime.v1.PodSandboxStatsFilter") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxStatsFilter.LabelSelectorEntry") -+ proto.RegisterType((*ListPodSandboxStatsRequest)(nil), "runtime.v1.ListPodSandboxStatsRequest") -+ proto.RegisterType((*ListPodSandboxStatsResponse)(nil), "runtime.v1.ListPodSandboxStatsResponse") -+ proto.RegisterType((*PodSandboxAttributes)(nil), "runtime.v1.PodSandboxAttributes") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxAttributes.AnnotationsEntry") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.PodSandboxAttributes.LabelsEntry") -+ proto.RegisterType((*PodSandboxStats)(nil), "runtime.v1.PodSandboxStats") -+ proto.RegisterType((*LinuxPodSandboxStats)(nil), "runtime.v1.LinuxPodSandboxStats") -+ proto.RegisterType((*WindowsPodSandboxStats)(nil), "runtime.v1.WindowsPodSandboxStats") -+ proto.RegisterType((*NetworkUsage)(nil), "runtime.v1.NetworkUsage") -+ proto.RegisterType((*NetworkInterfaceUsage)(nil), "runtime.v1.NetworkInterfaceUsage") -+ proto.RegisterType((*ProcessUsage)(nil), "runtime.v1.ProcessUsage") -+ proto.RegisterType((*ImageSpec)(nil), "runtime.v1.ImageSpec") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ImageSpec.AnnotationsEntry") -+ proto.RegisterType((*KeyValue)(nil), "runtime.v1.KeyValue") -+ proto.RegisterType((*LinuxContainerResources)(nil), "runtime.v1.LinuxContainerResources") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.LinuxContainerResources.UnifiedEntry") -+ proto.RegisterType((*HugepageLimit)(nil), "runtime.v1.HugepageLimit") -+ proto.RegisterType((*SELinuxOption)(nil), "runtime.v1.SELinuxOption") -+ proto.RegisterType((*Capability)(nil), "runtime.v1.Capability") -+ proto.RegisterType((*LinuxContainerSecurityContext)(nil), "runtime.v1.LinuxContainerSecurityContext") -+ proto.RegisterType((*LinuxContainerConfig)(nil), "runtime.v1.LinuxContainerConfig") -+ proto.RegisterType((*WindowsSandboxSecurityContext)(nil), "runtime.v1.WindowsSandboxSecurityContext") -+ proto.RegisterType((*WindowsPodSandboxConfig)(nil), "runtime.v1.WindowsPodSandboxConfig") -+ proto.RegisterType((*WindowsContainerSecurityContext)(nil), "runtime.v1.WindowsContainerSecurityContext") -+ proto.RegisterType((*WindowsContainerConfig)(nil), "runtime.v1.WindowsContainerConfig") -+ proto.RegisterType((*WindowsContainerResources)(nil), "runtime.v1.WindowsContainerResources") -+ proto.RegisterType((*ContainerMetadata)(nil), "runtime.v1.ContainerMetadata") -+ proto.RegisterType((*Device)(nil), "runtime.v1.Device") -+ proto.RegisterType((*ContainerConfig)(nil), "runtime.v1.ContainerConfig") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerConfig.AnnotationsEntry") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerConfig.LabelsEntry") -+ proto.RegisterType((*CreateContainerRequest)(nil), "runtime.v1.CreateContainerRequest") -+ proto.RegisterType((*CreateContainerResponse)(nil), "runtime.v1.CreateContainerResponse") -+ proto.RegisterType((*StartContainerRequest)(nil), "runtime.v1.StartContainerRequest") -+ proto.RegisterType((*StartContainerResponse)(nil), "runtime.v1.StartContainerResponse") -+ proto.RegisterType((*StopContainerRequest)(nil), "runtime.v1.StopContainerRequest") -+ proto.RegisterType((*StopContainerResponse)(nil), "runtime.v1.StopContainerResponse") -+ proto.RegisterType((*RemoveContainerRequest)(nil), "runtime.v1.RemoveContainerRequest") -+ proto.RegisterType((*RemoveContainerResponse)(nil), "runtime.v1.RemoveContainerResponse") -+ proto.RegisterType((*ContainerStateValue)(nil), "runtime.v1.ContainerStateValue") -+ proto.RegisterType((*ContainerFilter)(nil), "runtime.v1.ContainerFilter") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerFilter.LabelSelectorEntry") -+ proto.RegisterType((*ListContainersRequest)(nil), "runtime.v1.ListContainersRequest") -+ proto.RegisterType((*Container)(nil), "runtime.v1.Container") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.Container.AnnotationsEntry") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.Container.LabelsEntry") -+ proto.RegisterType((*ListContainersResponse)(nil), "runtime.v1.ListContainersResponse") -+ proto.RegisterType((*ContainerStatusRequest)(nil), "runtime.v1.ContainerStatusRequest") -+ proto.RegisterType((*ContainerStatus)(nil), "runtime.v1.ContainerStatus") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerStatus.AnnotationsEntry") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerStatus.LabelsEntry") -+ proto.RegisterType((*ContainerStatusResponse)(nil), "runtime.v1.ContainerStatusResponse") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerStatusResponse.InfoEntry") -+ proto.RegisterType((*ContainerResources)(nil), "runtime.v1.ContainerResources") -+ proto.RegisterType((*UpdateContainerResourcesRequest)(nil), "runtime.v1.UpdateContainerResourcesRequest") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.UpdateContainerResourcesRequest.AnnotationsEntry") -+ proto.RegisterType((*UpdateContainerResourcesResponse)(nil), "runtime.v1.UpdateContainerResourcesResponse") -+ proto.RegisterType((*ExecSyncRequest)(nil), "runtime.v1.ExecSyncRequest") -+ proto.RegisterType((*ExecSyncResponse)(nil), "runtime.v1.ExecSyncResponse") -+ proto.RegisterType((*ExecRequest)(nil), "runtime.v1.ExecRequest") -+ proto.RegisterType((*ExecResponse)(nil), "runtime.v1.ExecResponse") -+ proto.RegisterType((*AttachRequest)(nil), "runtime.v1.AttachRequest") -+ proto.RegisterType((*AttachResponse)(nil), "runtime.v1.AttachResponse") -+ proto.RegisterType((*PortForwardRequest)(nil), "runtime.v1.PortForwardRequest") -+ proto.RegisterType((*PortForwardResponse)(nil), "runtime.v1.PortForwardResponse") -+ proto.RegisterType((*ImageFilter)(nil), "runtime.v1.ImageFilter") -+ proto.RegisterType((*ListImagesRequest)(nil), "runtime.v1.ListImagesRequest") -+ proto.RegisterType((*Image)(nil), "runtime.v1.Image") -+ proto.RegisterType((*ListImagesResponse)(nil), "runtime.v1.ListImagesResponse") -+ proto.RegisterType((*ImageStatusRequest)(nil), "runtime.v1.ImageStatusRequest") -+ proto.RegisterType((*ImageStatusResponse)(nil), "runtime.v1.ImageStatusResponse") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ImageStatusResponse.InfoEntry") -+ proto.RegisterType((*AuthConfig)(nil), "runtime.v1.AuthConfig") -+ proto.RegisterType((*PullImageRequest)(nil), "runtime.v1.PullImageRequest") -+ proto.RegisterType((*PullImageResponse)(nil), "runtime.v1.PullImageResponse") -+ proto.RegisterType((*RemoveImageRequest)(nil), "runtime.v1.RemoveImageRequest") -+ proto.RegisterType((*RemoveImageResponse)(nil), "runtime.v1.RemoveImageResponse") -+ proto.RegisterType((*NetworkConfig)(nil), "runtime.v1.NetworkConfig") -+ proto.RegisterType((*RuntimeConfig)(nil), "runtime.v1.RuntimeConfig") -+ proto.RegisterType((*UpdateRuntimeConfigRequest)(nil), "runtime.v1.UpdateRuntimeConfigRequest") -+ proto.RegisterType((*UpdateRuntimeConfigResponse)(nil), "runtime.v1.UpdateRuntimeConfigResponse") -+ proto.RegisterType((*RuntimeCondition)(nil), "runtime.v1.RuntimeCondition") -+ proto.RegisterType((*RuntimeStatus)(nil), "runtime.v1.RuntimeStatus") -+ proto.RegisterType((*StatusRequest)(nil), "runtime.v1.StatusRequest") -+ proto.RegisterType((*StatusResponse)(nil), "runtime.v1.StatusResponse") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.StatusResponse.InfoEntry") -+ proto.RegisterType((*ImageFsInfoRequest)(nil), "runtime.v1.ImageFsInfoRequest") -+ proto.RegisterType((*UInt64Value)(nil), "runtime.v1.UInt64Value") -+ proto.RegisterType((*FilesystemIdentifier)(nil), "runtime.v1.FilesystemIdentifier") -+ proto.RegisterType((*FilesystemUsage)(nil), "runtime.v1.FilesystemUsage") -+ proto.RegisterType((*ImageFsInfoResponse)(nil), "runtime.v1.ImageFsInfoResponse") -+ proto.RegisterType((*ContainerStatsRequest)(nil), "runtime.v1.ContainerStatsRequest") -+ proto.RegisterType((*ContainerStatsResponse)(nil), "runtime.v1.ContainerStatsResponse") -+ proto.RegisterType((*ListContainerStatsRequest)(nil), "runtime.v1.ListContainerStatsRequest") -+ proto.RegisterType((*ContainerStatsFilter)(nil), "runtime.v1.ContainerStatsFilter") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerStatsFilter.LabelSelectorEntry") -+ proto.RegisterType((*ListContainerStatsResponse)(nil), "runtime.v1.ListContainerStatsResponse") -+ proto.RegisterType((*ContainerAttributes)(nil), "runtime.v1.ContainerAttributes") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerAttributes.AnnotationsEntry") -+ proto.RegisterMapType((map[string]string)(nil), "runtime.v1.ContainerAttributes.LabelsEntry") -+ proto.RegisterType((*ContainerStats)(nil), "runtime.v1.ContainerStats") -+ proto.RegisterType((*CpuUsage)(nil), "runtime.v1.CpuUsage") -+ proto.RegisterType((*MemoryUsage)(nil), "runtime.v1.MemoryUsage") -+ proto.RegisterType((*ReopenContainerLogRequest)(nil), "runtime.v1.ReopenContainerLogRequest") -+ proto.RegisterType((*ReopenContainerLogResponse)(nil), "runtime.v1.ReopenContainerLogResponse") -+ proto.RegisterType((*CheckpointContainerRequest)(nil), "runtime.v1.CheckpointContainerRequest") -+ proto.RegisterType((*CheckpointContainerResponse)(nil), "runtime.v1.CheckpointContainerResponse") -+ proto.RegisterType((*GetEventsRequest)(nil), "runtime.v1.GetEventsRequest") -+ proto.RegisterType((*ContainerEventResponse)(nil), "runtime.v1.ContainerEventResponse") -+} -+ -+func init() { proto.RegisterFile("api.proto", fileDescriptor_00212fb1f9d3bf1c) } -+ -+var fileDescriptor_00212fb1f9d3bf1c = []byte{ -+ // 5988 bytes of a gzipped FileDescriptorProto -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x4d, 0x70, 0x1b, 0xc9, -+ 0x75, 0x30, 0x07, 0x00, 0x49, 0xe0, 0x81, 0x00, 0xc1, 0x16, 0x45, 0x42, 0xa0, 0xa4, 0x95, 0x46, -+ 0xde, 0x1f, 0x49, 0xbb, 0x94, 0x56, 0xab, 0x5d, 0x4b, 0xb2, 0x76, 0x57, 0x10, 0xc9, 0xd5, 0x72, -+ 0x2d, 0x91, 0xf0, 0x80, 0x94, 0xff, 0xbe, 0xf2, 0x7c, 0x23, 0x4c, 0x13, 0x9c, 0x15, 0x30, 0x33, -+ 0x9e, 0x19, 0x48, 0xa2, 0x4f, 0xdf, 0xf1, 0x4b, 0x4e, 0xae, 0x72, 0x1c, 0x57, 0xb9, 0x52, 0x49, -+ 0xe5, 0x94, 0x43, 0x0e, 0xce, 0x25, 0xa9, 0x54, 0xa5, 0x92, 0x5c, 0x52, 0x2e, 0x27, 0x55, 0xae, -+ 0xf2, 0x25, 0x55, 0x3e, 0xa4, 0x2a, 0xf6, 0xe6, 0x96, 0x43, 0x4e, 0x3e, 0xe4, 0x14, 0xa7, 0xfa, -+ 0x6f, 0x66, 0x7a, 0x66, 0x30, 0x00, 0xb9, 0x6b, 0xef, 0x9e, 0x80, 0x79, 0xfd, 0xde, 0xeb, 0xd7, -+ 0xaf, 0x5f, 0xbf, 0x7e, 0xdd, 0xef, 0xcd, 0x40, 0xc5, 0x70, 0xad, 0x75, 0xd7, 0x73, 0x02, 0x07, -+ 0x81, 0x37, 0xb2, 0x03, 0x6b, 0x88, 0xd7, 0x9f, 0xbd, 0xd9, 0x7a, 0xa3, 0x6f, 0x05, 0x87, 0xa3, -+ 0x27, 0xeb, 0x3d, 0x67, 0x78, 0xad, 0xef, 0xf4, 0x9d, 0x6b, 0x14, 0xe5, 0xc9, 0xe8, 0x80, 0x3e, -+ 0xd1, 0x07, 0xfa, 0x8f, 0x91, 0xaa, 0x57, 0xa0, 0xfe, 0x18, 0x7b, 0xbe, 0xe5, 0xd8, 0x1a, 0xfe, -+ 0xee, 0x08, 0xfb, 0x01, 0x6a, 0xc2, 0xfc, 0x33, 0x06, 0x69, 0x2a, 0x17, 0x94, 0xd7, 0x2a, 0x9a, -+ 0x78, 0x54, 0xff, 0x42, 0x81, 0xc5, 0x10, 0xd9, 0x77, 0x1d, 0xdb, 0xc7, 0xe3, 0xb1, 0xd1, 0x45, -+ 0x58, 0xe0, 0x62, 0xe9, 0xb6, 0x31, 0xc4, 0xcd, 0x02, 0x6d, 0xae, 0x72, 0xd8, 0x8e, 0x31, 0xc4, -+ 0xe8, 0x55, 0x58, 0x14, 0x28, 0x82, 0x49, 0x91, 0x62, 0xd5, 0x39, 0x98, 0xf7, 0x86, 0xd6, 0xe1, -+ 0x94, 0x40, 0x34, 0x5c, 0x2b, 0x44, 0x2e, 0x51, 0xe4, 0x25, 0xde, 0xd4, 0x76, 0x2d, 0x8e, 0xaf, -+ 0x7e, 0x1b, 0x2a, 0x9b, 0x3b, 0xdd, 0x0d, 0xc7, 0x3e, 0xb0, 0xfa, 0x44, 0x44, 0x1f, 0x7b, 0x84, -+ 0xa6, 0xa9, 0x5c, 0x28, 0x12, 0x11, 0xf9, 0x23, 0x6a, 0x41, 0xd9, 0xc7, 0x86, 0xd7, 0x3b, 0xc4, -+ 0x7e, 0xb3, 0x40, 0x9b, 0xc2, 0x67, 0x42, 0xe5, 0xb8, 0x81, 0xe5, 0xd8, 0x7e, 0xb3, 0xc8, 0xa8, -+ 0xf8, 0xa3, 0xfa, 0x27, 0x0a, 0x54, 0x3b, 0x8e, 0x17, 0x3c, 0x32, 0x5c, 0xd7, 0xb2, 0xfb, 0xe8, -+ 0x3a, 0x94, 0xa9, 0x2e, 0x7b, 0xce, 0x80, 0xea, 0xa0, 0x7e, 0x63, 0x79, 0x3d, 0x9a, 0x90, 0xf5, -+ 0x0e, 0x6f, 0xd3, 0x42, 0x2c, 0xf4, 0x32, 0xd4, 0x7b, 0x8e, 0x1d, 0x18, 0x96, 0x8d, 0x3d, 0xdd, -+ 0x75, 0xbc, 0x80, 0x2a, 0x67, 0x56, 0xab, 0x85, 0x50, 0xc2, 0x1f, 0xad, 0x41, 0xe5, 0xd0, 0xf1, -+ 0x03, 0x86, 0x51, 0xa4, 0x18, 0x65, 0x02, 0xa0, 0x8d, 0xab, 0x30, 0x4f, 0x1b, 0x2d, 0x97, 0xab, -+ 0x61, 0x8e, 0x3c, 0x6e, 0xbb, 0xea, 0x2f, 0x14, 0x98, 0x7d, 0xe4, 0x8c, 0xec, 0x20, 0xd1, 0x8d, -+ 0x11, 0x1c, 0xf2, 0x29, 0x8a, 0x75, 0x63, 0x04, 0x87, 0x51, 0x37, 0x04, 0x83, 0xcd, 0x12, 0xeb, -+ 0x86, 0x34, 0xb6, 0xa0, 0xec, 0x61, 0xc3, 0x74, 0xec, 0xc1, 0x11, 0x15, 0xa1, 0xac, 0x85, 0xcf, -+ 0x64, 0xfa, 0x7c, 0x3c, 0xb0, 0xec, 0xd1, 0x0b, 0xdd, 0xc3, 0x03, 0xe3, 0x09, 0x1e, 0x50, 0x51, -+ 0xca, 0x5a, 0x9d, 0x83, 0x35, 0x06, 0x45, 0xef, 0x41, 0xd5, 0xf5, 0x1c, 0xd7, 0xe8, 0x1b, 0x44, -+ 0x83, 0xcd, 0x59, 0xaa, 0xa4, 0xb3, 0x71, 0x25, 0x51, 0x81, 0x3b, 0x11, 0x8e, 0x16, 0x27, 0x50, -+ 0x75, 0xa8, 0x6c, 0x6f, 0x0a, 0x75, 0x87, 0x03, 0x37, 0xe9, 0x70, 0x6a, 0x7c, 0xe0, 0x26, 0x31, -+ 0xb8, 0x68, 0xb8, 0x96, 0x49, 0x87, 0x52, 0xd3, 0xaa, 0x21, 0x6c, 0xdb, 0x44, 0x2b, 0x30, 0x37, -+ 0xc0, 0x76, 0x3f, 0x38, 0xa4, 0x63, 0xa9, 0x69, 0xfc, 0x49, 0xfd, 0x23, 0x05, 0x6a, 0xfb, 0x3e, -+ 0xf6, 0x88, 0x55, 0xfa, 0xae, 0xd1, 0xc3, 0xe8, 0x0d, 0x28, 0x0d, 0x1d, 0x13, 0xf3, 0x09, 0x3d, -+ 0x13, 0x97, 0x35, 0x44, 0x7a, 0xe4, 0x98, 0x58, 0xa3, 0x68, 0xe8, 0x32, 0x94, 0x46, 0x96, 0xc9, -+ 0xac, 0xa8, 0x7a, 0xe3, 0x74, 0x1c, 0x3d, 0x94, 0x5c, 0xa3, 0x28, 0x04, 0xb5, 0x4f, 0x50, 0x8b, -+ 0xb9, 0xa8, 0x04, 0x45, 0xfd, 0xad, 0x02, 0x8b, 0x61, 0x6f, 0xbb, 0xd4, 0xfc, 0xd0, 0x5b, 0x30, -+ 0x6f, 0xe3, 0xe0, 0xb9, 0xe3, 0x3d, 0x9d, 0x2c, 0x9b, 0xc0, 0x44, 0x57, 0xa1, 0xe8, 0x72, 0x8d, -+ 0xe4, 0x12, 0x10, 0x2c, 0x82, 0x6c, 0xb9, 0x3d, 0xaa, 0xa1, 0x7c, 0x64, 0xcb, 0xed, 0x11, 0xe3, -+ 0x09, 0x0c, 0xaf, 0x8f, 0xe9, 0x7c, 0x30, 0x43, 0x2c, 0x33, 0xc0, 0xb6, 0x89, 0xee, 0x41, 0x7d, -+ 0xe4, 0x63, 0xcf, 0xf6, 0x75, 0xb1, 0x94, 0xc8, 0xd4, 0x57, 0x65, 0xa6, 0x92, 0xde, 0xb5, 0x1a, -+ 0x23, 0xd8, 0xe5, 0x6b, 0x4d, 0x05, 0xd8, 0xb6, 0x83, 0x77, 0x6e, 0x3e, 0x36, 0x06, 0x23, 0x8c, -+ 0x96, 0x61, 0xf6, 0x19, 0xf9, 0x43, 0x47, 0x5e, 0xd4, 0xd8, 0x83, 0xfa, 0xf7, 0x25, 0x58, 0x7b, -+ 0x48, 0xcc, 0xad, 0x6b, 0xd8, 0xe6, 0x13, 0xe7, 0x45, 0x17, 0xf7, 0x46, 0x9e, 0x15, 0x1c, 0x6d, -+ 0x38, 0x76, 0x80, 0x5f, 0x04, 0xe8, 0x43, 0x58, 0xb2, 0x05, 0xff, 0x50, 0x10, 0x85, 0x0a, 0xb2, -+ 0x96, 0x39, 0x3a, 0xd6, 0xb9, 0xd6, 0xb0, 0x65, 0x80, 0x8f, 0xee, 0x47, 0x06, 0x2f, 0xf8, 0x14, -+ 0xd2, 0x03, 0xea, 0x6e, 0x51, 0x69, 0x38, 0x17, 0xb1, 0x16, 0x04, 0x8f, 0x77, 0x80, 0xb8, 0x40, -+ 0xdd, 0xf0, 0x75, 0x32, 0x52, 0xaa, 0xe5, 0xea, 0x8d, 0x15, 0xc9, 0x0a, 0xc2, 0x01, 0x6b, 0x15, -+ 0x6f, 0x64, 0xb7, 0x7d, 0xa2, 0x21, 0x74, 0x8b, 0xba, 0x53, 0x42, 0xd7, 0xf7, 0x9c, 0x91, 0xdb, -+ 0x2c, 0xe7, 0x12, 0x02, 0x25, 0x7c, 0x40, 0x30, 0xa9, 0x97, 0xe5, 0x4b, 0x56, 0xf7, 0x1c, 0x27, -+ 0x38, 0xf0, 0xc5, 0x32, 0x15, 0x60, 0x8d, 0x42, 0xd1, 0x35, 0x38, 0xe5, 0x8f, 0x5c, 0x77, 0x80, -+ 0x87, 0xd8, 0x0e, 0x8c, 0x01, 0xeb, 0x88, 0xcc, 0x59, 0xf1, 0xb5, 0xa2, 0x86, 0xe2, 0x4d, 0x94, -+ 0xb1, 0x8f, 0xce, 0x03, 0xb8, 0x9e, 0xf5, 0xcc, 0x1a, 0xe0, 0x3e, 0x36, 0x9b, 0x73, 0x94, 0x69, -+ 0x0c, 0x82, 0xde, 0x26, 0x9e, 0xb7, 0xd7, 0x73, 0x86, 0x6e, 0xb3, 0x92, 0xd6, 0xb7, 0x98, 0xa7, -+ 0x8e, 0xe7, 0x1c, 0x58, 0x03, 0xac, 0x09, 0x5c, 0xf4, 0x65, 0x28, 0x1b, 0xae, 0x6b, 0x78, 0x43, -+ 0xc7, 0x6b, 0xc2, 0x64, 0xba, 0x10, 0x19, 0xdd, 0x84, 0x65, 0xce, 0x43, 0x77, 0x59, 0x23, 0x73, -+ 0x6a, 0xf3, 0xc4, 0x2e, 0xef, 0x17, 0x9a, 0x8a, 0x86, 0x78, 0x3b, 0xa7, 0x25, 0x2e, 0x4e, 0xfd, -+ 0x27, 0x05, 0x16, 0x13, 0x3c, 0xd1, 0x47, 0xb0, 0x20, 0x38, 0x04, 0x47, 0xae, 0x70, 0x03, 0xaf, -+ 0xe6, 0x88, 0xb1, 0xce, 0x7f, 0xf7, 0x8e, 0x5c, 0x4c, 0xbd, 0x97, 0x78, 0x40, 0x97, 0xa0, 0x36, -+ 0x70, 0x7a, 0xc6, 0x80, 0x7a, 0x2d, 0x0f, 0x1f, 0x70, 0x1f, 0xbb, 0x10, 0x02, 0x35, 0x7c, 0xa0, -+ 0xde, 0x83, 0x6a, 0x8c, 0x01, 0x42, 0x50, 0xd7, 0x58, 0x57, 0x9b, 0xf8, 0xc0, 0x18, 0x0d, 0x82, -+ 0xc6, 0x0c, 0xaa, 0x03, 0xec, 0xdb, 0x3d, 0xb2, 0xa7, 0xd9, 0xd8, 0x6c, 0x28, 0xa8, 0x06, 0x95, -+ 0x87, 0x82, 0x45, 0xa3, 0xa0, 0xfe, 0xb8, 0x08, 0xa7, 0xa9, 0xe1, 0x75, 0x1c, 0x93, 0xaf, 0x04, -+ 0xbe, 0x01, 0x5e, 0x82, 0x5a, 0x8f, 0xce, 0xa5, 0xee, 0x1a, 0x1e, 0xb6, 0x03, 0xbe, 0x0d, 0x2c, -+ 0x30, 0x60, 0x87, 0xc2, 0x90, 0x06, 0x0d, 0x9f, 0x8f, 0x48, 0xef, 0xb1, 0x95, 0xc3, 0x8d, 0x5b, -+ 0x1a, 0x75, 0xce, 0x42, 0xd3, 0x16, 0xfd, 0xd4, 0xca, 0x9b, 0xf7, 0x8f, 0xfc, 0x5e, 0x30, 0x10, -+ 0xde, 0x6e, 0x3d, 0xc5, 0x2a, 0x29, 0xec, 0x7a, 0x97, 0x11, 0x6c, 0xd9, 0x81, 0x77, 0xa4, 0x09, -+ 0x72, 0xf4, 0x3e, 0x94, 0x9d, 0x67, 0xd8, 0x3b, 0xc4, 0x06, 0xf3, 0x32, 0xd5, 0x1b, 0x97, 0x52, -+ 0xac, 0x36, 0x84, 0xa3, 0xd7, 0xb0, 0xef, 0x8c, 0xbc, 0x1e, 0xf6, 0xb5, 0x90, 0x08, 0xb5, 0xa1, -+ 0xe2, 0x09, 0x30, 0xf7, 0x42, 0x53, 0x71, 0x88, 0xa8, 0x5a, 0x77, 0x60, 0x21, 0x2e, 0x1c, 0x6a, -+ 0x40, 0xf1, 0x29, 0x3e, 0xe2, 0xca, 0x24, 0x7f, 0x23, 0xff, 0xc4, 0x66, 0x98, 0x3d, 0xdc, 0x29, -+ 0xdc, 0x52, 0x54, 0x0f, 0x50, 0x34, 0xd2, 0x47, 0x38, 0x30, 0x4c, 0x23, 0x30, 0x10, 0x82, 0x12, -+ 0x0d, 0x8d, 0x18, 0x0b, 0xfa, 0x9f, 0x70, 0x1d, 0x71, 0x57, 0x5d, 0xd1, 0xc8, 0x5f, 0x74, 0x16, -+ 0x2a, 0xa1, 0x27, 0xe2, 0xf1, 0x51, 0x04, 0x20, 0x71, 0x8a, 0x11, 0x04, 0x78, 0xe8, 0x06, 0x54, -+ 0x31, 0x35, 0x4d, 0x3c, 0xaa, 0x7f, 0x30, 0x0b, 0x8d, 0x94, 0x2d, 0xdc, 0x81, 0xf2, 0x90, 0x77, -+ 0xcf, 0x7d, 0xe0, 0x79, 0x29, 0x58, 0x49, 0x09, 0xa9, 0x85, 0xf8, 0x24, 0x16, 0x20, 0xb6, 0x16, -+ 0x8b, 0xe6, 0xc2, 0x67, 0x66, 0xe4, 0x7d, 0xdd, 0xb4, 0x3c, 0xdc, 0x0b, 0x1c, 0xef, 0x88, 0x0b, -+ 0xba, 0x30, 0x70, 0xfa, 0x9b, 0x02, 0x86, 0x6e, 0x02, 0x98, 0xb6, 0xaf, 0x53, 0x1b, 0xee, 0xf3, -+ 0x79, 0x94, 0x36, 0xc0, 0x30, 0x68, 0xd3, 0x2a, 0xa6, 0xed, 0x73, 0x91, 0xef, 0x42, 0x8d, 0x44, -+ 0x40, 0xfa, 0x90, 0xed, 0x8d, 0xcc, 0x21, 0x55, 0x6f, 0xac, 0xca, 0x72, 0x87, 0xf1, 0x98, 0xb6, -+ 0xe0, 0x46, 0x0f, 0x3e, 0xba, 0x07, 0x73, 0x34, 0x08, 0xf1, 0x9b, 0x73, 0x94, 0xec, 0xb5, 0xec, -+ 0xe1, 0x72, 0xeb, 0x7b, 0x48, 0x51, 0x99, 0xf1, 0x71, 0x3a, 0xb4, 0x0b, 0x55, 0xc3, 0xb6, 0x9d, -+ 0xc0, 0x60, 0x1e, 0x7f, 0x9e, 0xb2, 0x79, 0x23, 0x97, 0x4d, 0x3b, 0xc2, 0x67, 0xbc, 0xe2, 0x1c, -+ 0xd0, 0x97, 0x61, 0x96, 0x6e, 0x09, 0xdc, 0x87, 0x5f, 0x9c, 0xb8, 0x28, 0x34, 0x86, 0x8f, 0xde, -+ 0x85, 0xf9, 0xe7, 0x96, 0x6d, 0x3a, 0xcf, 0x7d, 0xee, 0x4f, 0x25, 0x13, 0xfe, 0x3a, 0x6b, 0x4a, -+ 0x11, 0x0b, 0x9a, 0xd6, 0x6d, 0xa8, 0xc6, 0xc6, 0x77, 0x1c, 0xfb, 0x6d, 0xbd, 0x07, 0x8d, 0xe4, -+ 0x98, 0x8e, 0x65, 0xff, 0x23, 0x58, 0xd6, 0x46, 0x76, 0x24, 0x9a, 0x38, 0x6c, 0xdc, 0x84, 0x39, -+ 0x6e, 0x0d, 0xcc, 0x18, 0xcf, 0xe6, 0xa9, 0x55, 0xe3, 0xb8, 0xf1, 0x73, 0xc3, 0xa1, 0x61, 0x9b, -+ 0x03, 0xec, 0xf1, 0x1e, 0xc5, 0xb9, 0xe1, 0x43, 0x06, 0x55, 0xdf, 0x85, 0xd3, 0x89, 0x6e, 0xf9, -+ 0xb1, 0xe5, 0x4b, 0x50, 0x77, 0x1d, 0x53, 0xf7, 0x19, 0x58, 0xc4, 0x92, 0x15, 0x62, 0x3b, 0x02, -+ 0x77, 0xdb, 0x24, 0xe4, 0xdd, 0xc0, 0x71, 0xd3, 0x62, 0x4f, 0x47, 0xde, 0x84, 0x95, 0x24, 0x39, -+ 0xeb, 0x5e, 0x7d, 0x1f, 0x56, 0x35, 0x3c, 0x74, 0x9e, 0xe1, 0x93, 0xb2, 0x6e, 0x41, 0x33, 0xcd, -+ 0x80, 0x33, 0xff, 0x26, 0xac, 0x46, 0xd0, 0x6e, 0x60, 0x04, 0x23, 0xff, 0x58, 0xcc, 0xf9, 0x99, -+ 0xee, 0x89, 0xe3, 0xb3, 0x89, 0x2c, 0x6b, 0xe2, 0x51, 0x5d, 0x85, 0xd9, 0x8e, 0x63, 0x6e, 0x77, -+ 0x50, 0x1d, 0x0a, 0x96, 0xcb, 0x89, 0x0b, 0x96, 0xab, 0xf6, 0xe2, 0x7d, 0xee, 0xb0, 0xa8, 0x93, -+ 0x75, 0x9d, 0x44, 0x45, 0xb7, 0xa0, 0x6e, 0x98, 0xa6, 0x45, 0x0c, 0xc9, 0x18, 0xe8, 0x96, 0x2b, -+ 0x82, 0xe6, 0xa5, 0xc4, 0xd4, 0x6f, 0x77, 0xb4, 0x5a, 0x84, 0xb8, 0xed, 0xfa, 0xea, 0x7d, 0xa8, -+ 0x44, 0x01, 0xfa, 0xdb, 0xd1, 0xf9, 0xac, 0x30, 0x39, 0x96, 0x0b, 0x0f, 0x6f, 0x3b, 0xa9, 0x4d, -+ 0x92, 0x8b, 0xf9, 0x36, 0x40, 0xe8, 0x54, 0x45, 0x78, 0x78, 0x3a, 0x93, 0xa5, 0x16, 0x43, 0x54, -+ 0xff, 0xbd, 0x14, 0x77, 0xb2, 0xb1, 0x21, 0x9b, 0xe1, 0x90, 0x4d, 0xc9, 0xe9, 0x16, 0x8e, 0xe9, -+ 0x74, 0xdf, 0x84, 0x59, 0x3f, 0x30, 0x02, 0xcc, 0xe3, 0xf1, 0xb5, 0x6c, 0x42, 0xd2, 0x31, 0xd6, -+ 0x18, 0x26, 0x3a, 0x07, 0xd0, 0xf3, 0xb0, 0x11, 0x60, 0x53, 0x37, 0xd8, 0xae, 0x50, 0xd4, 0x2a, -+ 0x1c, 0xd2, 0x0e, 0x88, 0x17, 0x11, 0x27, 0x88, 0x8c, 0x8d, 0x70, 0xcc, 0x34, 0x46, 0x67, 0x89, -+ 0xd0, 0x7b, 0xcd, 0x4d, 0xf4, 0x5e, 0x9c, 0x94, 0x7b, 0xaf, 0xc8, 0x13, 0xcf, 0xe7, 0x79, 0x62, -+ 0x46, 0x34, 0x8d, 0x27, 0x2e, 0xe7, 0x79, 0x62, 0xce, 0x26, 0xdf, 0x13, 0x67, 0x38, 0x92, 0x4a, -+ 0x96, 0x23, 0xf9, 0x3c, 0x5d, 0xe7, 0xcf, 0x15, 0x68, 0xa6, 0xd7, 0x33, 0xf7, 0x63, 0x37, 0x61, -+ 0xce, 0xa7, 0x90, 0x7c, 0xff, 0xc9, 0xa9, 0x38, 0x2e, 0xba, 0x0f, 0x25, 0xcb, 0x3e, 0x70, 0xf8, -+ 0xc2, 0x5b, 0xcf, 0xa5, 0xe1, 0x3d, 0xad, 0x6f, 0xdb, 0x07, 0x0e, 0xd3, 0x20, 0xa5, 0x6d, 0x7d, -+ 0x19, 0x2a, 0x21, 0xe8, 0x58, 0xe3, 0xd9, 0x86, 0xe5, 0x84, 0xdd, 0xb2, 0xc3, 0x5d, 0x68, 0xe8, -+ 0xca, 0xb4, 0x86, 0xae, 0xfe, 0x46, 0x89, 0x2f, 0xbe, 0x0f, 0xac, 0x41, 0x80, 0xbd, 0xd4, 0xe2, -+ 0x7b, 0x47, 0xf0, 0x65, 0x2b, 0xef, 0x42, 0x0e, 0x5f, 0x76, 0x76, 0xe2, 0xab, 0xe8, 0x31, 0xd4, -+ 0xa9, 0xd9, 0xe9, 0x3e, 0x1e, 0xd0, 0xf8, 0x85, 0xc7, 0xb0, 0xd7, 0xb2, 0x19, 0xb0, 0xde, 0x99, -+ 0xd9, 0x76, 0x39, 0x05, 0xd3, 0x57, 0x6d, 0x10, 0x87, 0xb5, 0xee, 0x01, 0x4a, 0x23, 0x1d, 0x4b, -+ 0x83, 0x8f, 0x88, 0x0f, 0xf3, 0x83, 0xcc, 0xdd, 0xf4, 0x80, 0x8a, 0x91, 0x6f, 0x0d, 0x4c, 0x54, -+ 0x8d, 0xe3, 0xaa, 0xff, 0x5a, 0x04, 0x88, 0x1a, 0xbf, 0xe0, 0xce, 0xeb, 0x4e, 0xe8, 0x44, 0x58, -+ 0x14, 0xa8, 0x66, 0xb3, 0xcc, 0x74, 0x1f, 0xdb, 0xb2, 0xfb, 0x60, 0xf1, 0xe0, 0xab, 0x63, 0x18, -+ 0x1c, 0xdb, 0x71, 0xcc, 0x7f, 0xd1, 0x1c, 0xc7, 0x07, 0xb0, 0x92, 0x34, 0x13, 0xee, 0x35, 0x5e, -+ 0x87, 0x59, 0x2b, 0xc0, 0x43, 0x76, 0x1f, 0x9a, 0xb8, 0x44, 0x88, 0xa1, 0x33, 0x24, 0xf5, 0x3d, -+ 0x58, 0x91, 0xe7, 0xea, 0x78, 0xe1, 0x84, 0xfa, 0x30, 0x19, 0x8f, 0x44, 0xee, 0x8b, 0xdb, 0x47, -+ 0xe6, 0x75, 0x4c, 0x92, 0x86, 0x61, 0xaa, 0x3f, 0x55, 0xe0, 0x74, 0xa2, 0x69, 0xcc, 0xc2, 0xff, -+ 0x76, 0x6a, 0x01, 0x33, 0x7f, 0x77, 0x33, 0xa7, 0x97, 0xdf, 0xe3, 0x2a, 0xfe, 0x3a, 0xb4, 0xe4, -+ 0xe9, 0x91, 0x54, 0x7b, 0x3b, 0xb1, 0x94, 0x2f, 0x4e, 0x14, 0x3a, 0x5c, 0xcf, 0x1d, 0x58, 0xcb, -+ 0x64, 0x9c, 0xd6, 0x79, 0x71, 0x4a, 0x9d, 0xff, 0x77, 0x21, 0xee, 0xb3, 0xdb, 0x41, 0xe0, 0x59, -+ 0x4f, 0x46, 0x01, 0xfe, 0x6c, 0x03, 0x9d, 0xcd, 0x70, 0x65, 0x33, 0x3f, 0xfb, 0x7a, 0x36, 0x65, -+ 0xd4, 0x7b, 0xe6, 0x1a, 0xef, 0xca, 0x6b, 0xbc, 0x44, 0x59, 0xbd, 0x39, 0x91, 0x55, 0xee, 0x6a, -+ 0xff, 0x3c, 0x17, 0xf1, 0x3f, 0x2b, 0xb0, 0x98, 0x98, 0x15, 0x74, 0x0f, 0xc0, 0x08, 0x45, 0xe7, -+ 0xf6, 0x71, 0x61, 0xd2, 0x10, 0xb5, 0x18, 0x0d, 0xd9, 0x13, 0x59, 0x0c, 0x97, 0xb1, 0x27, 0x66, -+ 0xc4, 0x70, 0x61, 0x08, 0x77, 0x37, 0x3a, 0x80, 0xb2, 0x8b, 0x4b, 0x35, 0xf7, 0x00, 0xca, 0x68, -+ 0x05, 0x89, 0xfa, 0x83, 0x02, 0x2c, 0x67, 0x71, 0x47, 0xaf, 0x40, 0xb1, 0xe7, 0x8e, 0xf8, 0x48, -+ 0xa4, 0xe4, 0xc9, 0x86, 0x3b, 0xda, 0xf7, 0x8d, 0x3e, 0xd6, 0x08, 0x02, 0xba, 0x06, 0x73, 0x43, -+ 0x3c, 0x74, 0xbc, 0x23, 0x2e, 0xb7, 0x74, 0x05, 0xf0, 0x88, 0xb6, 0x30, 0x6c, 0x8e, 0x86, 0x6e, -+ 0x44, 0xa1, 0x2e, 0x93, 0xb7, 0x29, 0x45, 0xf4, 0xac, 0x89, 0x91, 0x84, 0xf1, 0xed, 0x0d, 0x98, -+ 0x77, 0x3d, 0xa7, 0x87, 0x7d, 0x9f, 0xdf, 0x50, 0x34, 0x13, 0xd9, 0x1c, 0xd2, 0xc4, 0x69, 0x38, -+ 0x22, 0xba, 0x03, 0x10, 0xa6, 0x19, 0xc4, 0xce, 0xd4, 0x92, 0xc6, 0x21, 0x5a, 0x99, 0x4a, 0x62, -+ 0xd8, 0xe4, 0x94, 0x98, 0xad, 0x38, 0xf5, 0x1f, 0x15, 0x58, 0x88, 0xcb, 0x88, 0xce, 0x42, 0x85, -+ 0x30, 0xf4, 0x03, 0x63, 0xe8, 0xf2, 0x3b, 0xf0, 0x08, 0x80, 0x76, 0x60, 0xc9, 0x64, 0x97, 0x85, -+ 0xba, 0x65, 0x07, 0xd8, 0x3b, 0x30, 0x7a, 0x22, 0xe8, 0xb9, 0x98, 0x31, 0xec, 0x6d, 0x81, 0xc3, -+ 0xc6, 0xd2, 0xe0, 0xb4, 0x21, 0x18, 0xb5, 0x01, 0x42, 0x3e, 0x62, 0x51, 0x4e, 0xc1, 0x28, 0x46, -+ 0xa4, 0xfe, 0x56, 0x81, 0xd3, 0x99, 0x58, 0x99, 0x57, 0x5f, 0x37, 0xa0, 0xec, 0xbd, 0xd0, 0x9f, -+ 0x1c, 0x05, 0xd8, 0xcf, 0x9a, 0xe0, 0xfd, 0xd8, 0xfd, 0xf6, 0xbc, 0xf7, 0xe2, 0x3e, 0xc1, 0x43, -+ 0x37, 0xa1, 0xe2, 0xbd, 0xd0, 0xb1, 0xe7, 0x39, 0x9e, 0xb0, 0xc9, 0xb1, 0x44, 0x65, 0xef, 0xc5, -+ 0x16, 0x45, 0x24, 0x3d, 0x05, 0xa2, 0xa7, 0xd2, 0x84, 0x9e, 0x82, 0xa8, 0xa7, 0x20, 0xec, 0x69, -+ 0x76, 0x42, 0x4f, 0x01, 0xef, 0x49, 0xfd, 0x18, 0x16, 0xe2, 0x26, 0x33, 0x61, 0x0a, 0xef, 0x42, -+ 0x8d, 0x9b, 0x94, 0xde, 0x73, 0x46, 0x76, 0x30, 0x49, 0x0d, 0x0b, 0x1c, 0x7b, 0x83, 0x20, 0xab, -+ 0x7f, 0xa9, 0x40, 0x65, 0x7b, 0x68, 0xf4, 0x71, 0xd7, 0xc5, 0x3d, 0xe2, 0x53, 0x2c, 0xf2, 0xc0, -+ 0x55, 0xcc, 0x1e, 0xd0, 0x87, 0xb2, 0x7f, 0x64, 0x3b, 0xe2, 0x2b, 0x52, 0x16, 0x41, 0x70, 0x98, -+ 0xe0, 0x14, 0x3f, 0xad, 0x67, 0xbb, 0x01, 0xe5, 0xaf, 0xe2, 0x23, 0x16, 0xfb, 0x4f, 0x49, 0xa7, -+ 0xfe, 0xb0, 0x04, 0xab, 0x63, 0x6e, 0x6a, 0x69, 0xe0, 0xe8, 0x8e, 0x74, 0x17, 0x7b, 0x96, 0x63, -+ 0x0a, 0xd5, 0xf6, 0xdc, 0x51, 0x87, 0x02, 0xd0, 0x1a, 0x90, 0x07, 0xfd, 0xbb, 0x23, 0x87, 0xef, -+ 0x4d, 0x45, 0xad, 0xdc, 0x73, 0x47, 0x5f, 0x23, 0xcf, 0x82, 0xd6, 0x3f, 0x34, 0x3c, 0xcc, 0xcc, -+ 0x88, 0xd1, 0x76, 0x29, 0x00, 0xbd, 0x09, 0xa7, 0x99, 0x43, 0xd1, 0x07, 0xd6, 0xd0, 0x22, 0xcb, -+ 0x2b, 0x66, 0x3b, 0x45, 0x0d, 0xb1, 0xc6, 0x87, 0xa4, 0x6d, 0xdb, 0x66, 0xd6, 0xa2, 0x42, 0xcd, -+ 0x71, 0x86, 0xba, 0xdf, 0x73, 0x3c, 0xac, 0x1b, 0xe6, 0xc7, 0xd4, 0x62, 0x8a, 0x5a, 0xd5, 0x71, -+ 0x86, 0x5d, 0x02, 0x6b, 0x9b, 0x1f, 0xa3, 0x97, 0xa0, 0xda, 0x73, 0x47, 0x3e, 0x0e, 0x74, 0xf2, -+ 0x43, 0xcf, 0xd3, 0x15, 0x0d, 0x18, 0x68, 0xc3, 0x1d, 0xf9, 0x31, 0x84, 0x21, 0x89, 0xd6, 0xe6, -+ 0xe3, 0x08, 0x8f, 0xf0, 0x90, 0x26, 0xa4, 0x0e, 0x47, 0x7d, 0xec, 0x1a, 0x7d, 0xcc, 0x44, 0x13, -+ 0x87, 0x62, 0x29, 0x21, 0xf5, 0x21, 0x47, 0xa1, 0x02, 0x6a, 0xf5, 0xc3, 0xf8, 0xa3, 0x8f, 0x3e, -+ 0x82, 0xf9, 0x91, 0x6d, 0x1d, 0x58, 0xd8, 0x6c, 0x56, 0x28, 0xed, 0xf5, 0x29, 0xee, 0xc5, 0xd7, -+ 0xf7, 0x19, 0x09, 0xbf, 0xa6, 0xe7, 0x0c, 0xd0, 0x1d, 0x68, 0x71, 0x45, 0xf9, 0xcf, 0x0d, 0x37, -+ 0xa9, 0x2d, 0xa0, 0x2a, 0x58, 0x61, 0x18, 0xdd, 0xe7, 0x86, 0x1b, 0xd7, 0x58, 0xeb, 0x0e, 0x2c, -+ 0xc4, 0x99, 0x1e, 0xcb, 0x96, 0xee, 0x43, 0x4d, 0x1a, 0x24, 0x99, 0x6d, 0xaa, 0x14, 0xdf, 0xfa, -+ 0x9e, 0x58, 0x00, 0x65, 0x02, 0xe8, 0x5a, 0xdf, 0xa3, 0x69, 0x44, 0x2a, 0x19, 0xe5, 0x53, 0xd2, -+ 0xd8, 0x83, 0x6a, 0x40, 0x4d, 0xca, 0xdc, 0x11, 0x17, 0x45, 0x53, 0x74, 0xdc, 0x45, 0x91, 0xff, -+ 0x04, 0xe6, 0x39, 0x03, 0x21, 0x01, 0xfd, 0x4f, 0x60, 0x34, 0x47, 0xc4, 0x6e, 0xbc, 0xe9, 0x7f, -+ 0xda, 0x05, 0x7e, 0xc6, 0x13, 0xe2, 0x15, 0x8d, 0x3d, 0xa8, 0x7f, 0xaa, 0x00, 0x6c, 0x18, 0xae, -+ 0xf1, 0xc4, 0x1a, 0x58, 0xc1, 0x11, 0xba, 0x0c, 0x0d, 0xc3, 0x34, 0xf5, 0x9e, 0x80, 0x58, 0x58, -+ 0x54, 0x28, 0x2c, 0x1a, 0xa6, 0xb9, 0x11, 0x03, 0xa3, 0xab, 0xb0, 0x64, 0x7a, 0x8e, 0x2b, 0xe3, -+ 0xb2, 0x92, 0x85, 0x06, 0x69, 0x90, 0x90, 0x6f, 0x41, 0x93, 0xf0, 0x35, 0x86, 0x4f, 0x2c, 0x6c, -+ 0x07, 0x32, 0x0d, 0xab, 0x65, 0x58, 0x31, 0x4c, 0xb3, 0xcd, 0x9a, 0xe3, 0x94, 0xea, 0x3f, 0xcc, -+ 0xc1, 0x39, 0x79, 0xc6, 0x93, 0xc9, 0xd4, 0x3b, 0xb0, 0x90, 0x90, 0x37, 0x95, 0x86, 0x8c, 0x46, -+ 0xa8, 0x49, 0xb8, 0x89, 0x74, 0x61, 0x21, 0x95, 0x2e, 0xcc, 0x4c, 0xd4, 0x16, 0x3f, 0xa3, 0x44, -+ 0x6d, 0xe9, 0x53, 0x26, 0x6a, 0x67, 0x4f, 0x9a, 0xa8, 0x5d, 0x98, 0x3a, 0x51, 0xfb, 0x0a, 0x3d, -+ 0x54, 0x8a, 0x1e, 0xe9, 0xf6, 0xc8, 0x7c, 0x42, 0x2d, 0xe4, 0x6e, 0x8b, 0xb2, 0x99, 0x44, 0x42, -+ 0x77, 0xfe, 0x38, 0x09, 0xdd, 0xf2, 0xd8, 0x84, 0xee, 0x05, 0x58, 0xb0, 0x1d, 0xdd, 0xc6, 0xcf, -+ 0x75, 0x32, 0x2d, 0x7e, 0xb3, 0xca, 0xe6, 0xc8, 0x76, 0x76, 0xf0, 0xf3, 0x0e, 0x81, 0xa0, 0x8b, -+ 0xb0, 0x30, 0x34, 0xfc, 0xa7, 0xd8, 0xa4, 0x99, 0x55, 0xbf, 0x59, 0xa3, 0xf6, 0x54, 0x65, 0xb0, -+ 0x0e, 0x01, 0xa1, 0x97, 0x21, 0x94, 0x83, 0x23, 0xd5, 0x29, 0x52, 0x4d, 0x40, 0x19, 0x5a, 0x2c, -+ 0x39, 0xbc, 0x78, 0xc2, 0xe4, 0x70, 0xe3, 0x38, 0xc9, 0xe1, 0x37, 0xa0, 0x21, 0xfe, 0x8b, 0xec, -+ 0x30, 0xbb, 0xec, 0xa3, 0x89, 0xe1, 0x45, 0xd1, 0x26, 0x32, 0xc0, 0xe3, 0x72, 0xc9, 0x90, 0x9b, -+ 0x4b, 0xfe, 0x89, 0xc2, 0x43, 0xdc, 0x70, 0x01, 0xf1, 0x24, 0x96, 0x94, 0x7f, 0x54, 0x4e, 0x92, -+ 0x7f, 0x44, 0x7b, 0x63, 0x33, 0xb4, 0x97, 0xc7, 0x73, 0x9a, 0x94, 0xa3, 0x55, 0x7f, 0xa0, 0xc0, -+ 0x39, 0x1e, 0x7f, 0x8e, 0xa9, 0x9f, 0xc8, 0x30, 0x4b, 0x65, 0x8c, 0x59, 0xf6, 0x3c, 0x6c, 0x62, -+ 0x3b, 0xb0, 0x8c, 0x81, 0xee, 0xbb, 0xb8, 0x27, 0xb2, 0x32, 0x11, 0x98, 0x46, 0x26, 0x17, 0x61, -+ 0x81, 0x15, 0x1c, 0xf1, 0x30, 0x9b, 0xd5, 0x15, 0x55, 0x69, 0xcd, 0x11, 0x03, 0xa9, 0x0e, 0xac, -+ 0x8e, 0x49, 0x67, 0x65, 0xaa, 0x41, 0x49, 0xab, 0x21, 0x77, 0x4c, 0x69, 0x35, 0xfc, 0x50, 0x81, -+ 0x97, 0x38, 0xc9, 0x58, 0xdf, 0xf7, 0x79, 0x28, 0xe2, 0xaf, 0x95, 0xf0, 0x78, 0x90, 0x34, 0xa9, -+ 0x8d, 0xb4, 0x49, 0xbd, 0x9c, 0xa1, 0x81, 0x7c, 0xa3, 0x7a, 0x3c, 0xd6, 0xa8, 0xae, 0xe6, 0xf1, -+ 0x9a, 0xa8, 0xcf, 0x7f, 0x53, 0xe0, 0xcc, 0x58, 0x01, 0x12, 0xf1, 0x96, 0x92, 0x8c, 0xb7, 0x78, -+ 0xac, 0x16, 0x85, 0xc0, 0x2c, 0x56, 0xa3, 0x51, 0x2e, 0x0f, 0x8a, 0xf4, 0xa1, 0xf1, 0xc2, 0x1a, -+ 0x8e, 0x86, 0x3c, 0x58, 0x23, 0xec, 0x1e, 0x31, 0xc8, 0x49, 0xa2, 0xb5, 0x6b, 0xb0, 0xcc, 0x1c, -+ 0x29, 0x0d, 0x18, 0x22, 0x0a, 0x16, 0xb4, 0x2d, 0xb1, 0x36, 0x12, 0x3b, 0x70, 0x02, 0xb5, 0x0d, -+ 0x4b, 0xe1, 0xb0, 0x72, 0xd3, 0xf9, 0xb1, 0xf4, 0x7c, 0x41, 0x4e, 0xcf, 0xdb, 0x30, 0xb7, 0x89, -+ 0x9f, 0x59, 0x3d, 0xfc, 0x99, 0xd4, 0xe9, 0x5d, 0x80, 0xaa, 0x8b, 0xbd, 0xa1, 0xe5, 0xfb, 0xe1, -+ 0xae, 0x59, 0xd1, 0xe2, 0x20, 0xf5, 0x27, 0x73, 0xb0, 0x98, 0x34, 0xa1, 0xdb, 0xa9, 0x6a, 0x80, -+ 0x73, 0x99, 0xa7, 0xd6, 0x8c, 0xeb, 0x9a, 0xab, 0xe2, 0x78, 0x51, 0x48, 0xa7, 0xca, 0xc2, 0x23, -+ 0x84, 0x38, 0x75, 0x34, 0x61, 0xbe, 0xe7, 0x0c, 0x87, 0x86, 0x6d, 0x8a, 0x62, 0x4a, 0xfe, 0x48, -+ 0x74, 0x66, 0x78, 0x7d, 0x76, 0x51, 0x53, 0xd1, 0xe8, 0x7f, 0x32, 0xc3, 0xe4, 0xc4, 0x68, 0xd9, -+ 0xb4, 0x9e, 0x80, 0x4e, 0x42, 0x45, 0x03, 0x0e, 0xda, 0xb4, 0x3c, 0xf4, 0x1a, 0x94, 0xb0, 0xfd, -+ 0x4c, 0xdc, 0xe0, 0x4a, 0x17, 0x06, 0xe2, 0x48, 0xa1, 0x51, 0x0c, 0x74, 0x19, 0xe6, 0x86, 0xc4, -+ 0x6a, 0x44, 0xce, 0x69, 0x29, 0x55, 0x74, 0xa8, 0x71, 0x04, 0xf4, 0x3a, 0xcc, 0x9b, 0x74, 0x3e, -+ 0x44, 0x0c, 0x8d, 0xa4, 0xca, 0x04, 0xda, 0xa4, 0x09, 0x14, 0xf4, 0x7e, 0x78, 0x5b, 0x55, 0x49, -+ 0x5f, 0x23, 0x27, 0xd4, 0x9c, 0x79, 0x51, 0xb5, 0x23, 0x1f, 0xc4, 0x20, 0x7d, 0xe7, 0x95, 0xe4, -+ 0x92, 0x7f, 0x23, 0x7d, 0x06, 0xca, 0x03, 0xa7, 0xcf, 0x8c, 0xa3, 0xca, 0x2a, 0x71, 0x07, 0x4e, -+ 0x9f, 0xda, 0xc6, 0x32, 0xcc, 0xfa, 0x81, 0x69, 0xd9, 0x34, 0x14, 0x29, 0x6b, 0xec, 0x81, 0xac, -+ 0x41, 0xfa, 0x47, 0x77, 0xec, 0x1e, 0x6e, 0xd6, 0x68, 0x53, 0x85, 0x42, 0x76, 0xed, 0x1e, 0x3d, -+ 0x92, 0x05, 0xc1, 0x51, 0xb3, 0x4e, 0xe1, 0xe4, 0x6f, 0x74, 0x69, 0xb4, 0x38, 0xe6, 0xd2, 0x28, -+ 0x21, 0x70, 0xc6, 0xa5, 0x51, 0x63, 0xec, 0xa5, 0x51, 0x92, 0xf6, 0x8b, 0x50, 0xb4, 0xf0, 0xb7, -+ 0x0a, 0xac, 0x6c, 0xd0, 0xcc, 0x43, 0xcc, 0x85, 0x1d, 0x27, 0x91, 0xfe, 0x56, 0x58, 0xdd, 0x90, -+ 0x91, 0xa2, 0x4e, 0x8e, 0x58, 0x14, 0x37, 0x6c, 0x40, 0x5d, 0xb0, 0xe5, 0xc4, 0xc5, 0x29, 0x4a, -+ 0x23, 0x6a, 0x7e, 0xfc, 0x51, 0xbd, 0x0b, 0xab, 0x29, 0xc9, 0xf9, 0xfd, 0x6f, 0xb2, 0x4c, 0x96, -+ 0x09, 0x1e, 0x2f, 0x93, 0x55, 0xef, 0xc0, 0xe9, 0x6e, 0x60, 0x78, 0x41, 0x6a, 0xd8, 0x53, 0xd0, -+ 0xd2, 0xa2, 0x07, 0x99, 0x96, 0xd7, 0x25, 0x74, 0x61, 0xb9, 0x1b, 0x38, 0xee, 0x09, 0x98, 0x12, -+ 0xff, 0x41, 0x46, 0xee, 0x8c, 0xc4, 0x76, 0x20, 0x1e, 0xd5, 0x55, 0x56, 0xa2, 0x91, 0xee, 0xed, -+ 0x2b, 0xb0, 0xc2, 0x2a, 0x24, 0x4e, 0x32, 0x88, 0x33, 0xa2, 0x3e, 0x23, 0xcd, 0xf7, 0x01, 0x9c, -+ 0x92, 0x2e, 0xf3, 0x78, 0xf6, 0xf2, 0xba, 0x9c, 0xbd, 0x1c, 0x7f, 0xf9, 0x17, 0x26, 0x2f, 0x7f, -+ 0x54, 0x88, 0xf9, 0xe3, 0x31, 0x29, 0x8c, 0xb7, 0xe5, 0xdc, 0xe5, 0x4b, 0xe3, 0xb9, 0x4a, 0xa9, -+ 0xcb, 0xb4, 0x75, 0x16, 0x33, 0xac, 0x73, 0x3f, 0x95, 0x1f, 0x29, 0xa5, 0xf3, 0xc1, 0x09, 0x09, -+ 0x7f, 0x2f, 0x99, 0x91, 0x87, 0x2c, 0xbf, 0x19, 0x76, 0x1d, 0x26, 0x45, 0xde, 0x4a, 0x24, 0x45, -+ 0xd6, 0x72, 0x24, 0x0d, 0xd3, 0x21, 0x3f, 0x2a, 0x41, 0x25, 0x6c, 0x4b, 0x69, 0x38, 0xad, 0xaa, -+ 0x42, 0x86, 0xaa, 0xe2, 0xfb, 0x64, 0xf1, 0x84, 0xfb, 0x64, 0x69, 0x8a, 0x7d, 0x72, 0x0d, 0x2a, -+ 0xf4, 0x0f, 0x2d, 0x13, 0x65, 0xfb, 0x5e, 0x99, 0x02, 0x34, 0x7c, 0x10, 0x99, 0xd8, 0xdc, 0x94, -+ 0x26, 0x96, 0xc8, 0xa5, 0xce, 0x27, 0x73, 0xa9, 0xb7, 0xc3, 0x3d, 0xac, 0x9c, 0xbe, 0xdc, 0x0d, -+ 0x39, 0x66, 0xee, 0x5e, 0x89, 0x6b, 0xc4, 0x4a, 0xfa, 0x1a, 0x31, 0xa2, 0xff, 0xc2, 0xe6, 0x56, -+ 0x76, 0x59, 0x82, 0x34, 0x6e, 0x67, 0xdc, 0x47, 0xbe, 0x2d, 0xdd, 0xe7, 0x2b, 0xe9, 0x4a, 0xfd, -+ 0xc8, 0x2f, 0xc4, 0xaf, 0xf2, 0xf7, 0x61, 0x45, 0x9a, 0x88, 0xa8, 0xf0, 0x6a, 0x3a, 0x1f, 0x37, -+ 0xa6, 0xea, 0xea, 0x8f, 0xe3, 0x91, 0xdb, 0x98, 0x12, 0xa3, 0xdb, 0xa9, 0xcc, 0xdb, 0xd4, 0x16, -+ 0x7a, 0x5d, 0x4e, 0xd2, 0x1f, 0xdb, 0xae, 0x52, 0x39, 0x7a, 0x1a, 0x59, 0x18, 0x1e, 0x6f, 0x66, -+ 0x31, 0x74, 0x85, 0x43, 0xda, 0x34, 0x80, 0x3f, 0xb0, 0x6c, 0xcb, 0x3f, 0x64, 0xed, 0x73, 0x2c, -+ 0x80, 0x17, 0xa0, 0x36, 0xbd, 0xbc, 0xc3, 0x2f, 0xac, 0x40, 0xef, 0x39, 0x26, 0xa6, 0x56, 0x3b, -+ 0xab, 0x95, 0x09, 0x60, 0xc3, 0x31, 0x71, 0xb4, 0x9e, 0xca, 0xc7, 0x5d, 0x4f, 0x95, 0xc4, 0x7a, -+ 0x5a, 0x81, 0x39, 0x0f, 0x1b, 0xbe, 0x63, 0xb3, 0x33, 0xbd, 0xc6, 0x9f, 0xc8, 0x44, 0x0c, 0xb1, -+ 0xef, 0x93, 0x3e, 0x78, 0x20, 0xc5, 0x1f, 0x63, 0x41, 0xdf, 0x42, 0x4e, 0xd0, 0x97, 0x53, 0xc0, -+ 0x94, 0x08, 0xfa, 0x6a, 0x39, 0x41, 0xdf, 0x54, 0xf5, 0x4b, 0x51, 0x78, 0x5b, 0x9f, 0x14, 0xde, -+ 0xc6, 0xe3, 0xc3, 0x45, 0x39, 0x3e, 0xbc, 0x1b, 0x3f, 0x48, 0x36, 0xd2, 0x69, 0xdb, 0xfc, 0xb2, -+ 0xe8, 0xcf, 0x71, 0x01, 0xff, 0x8b, 0x02, 0xab, 0xa9, 0x05, 0xc7, 0x97, 0xf0, 0x5b, 0x89, 0xca, -+ 0xa8, 0xb5, 0x1c, 0x2d, 0x87, 0x85, 0x51, 0x6d, 0xa9, 0x30, 0xea, 0x8d, 0x3c, 0x92, 0xcf, 0xbc, -+ 0x2e, 0xea, 0xfb, 0x0a, 0xa0, 0x8c, 0xa3, 0xf2, 0x6d, 0x11, 0x75, 0x1f, 0xe3, 0xd2, 0x88, 0x07, -+ 0xde, 0xef, 0x47, 0x81, 0x77, 0xe1, 0x38, 0xd7, 0x03, 0x61, 0xc2, 0xf6, 0x57, 0x05, 0x78, 0x69, -+ 0xdf, 0x35, 0x13, 0x61, 0x24, 0xc7, 0x9a, 0xde, 0xb3, 0xdd, 0x96, 0xb3, 0xcd, 0x27, 0x1c, 0x42, -+ 0xf1, 0x24, 0x43, 0x40, 0xdf, 0xc9, 0xaa, 0x07, 0xb8, 0x2b, 0xe5, 0xd3, 0xf2, 0x07, 0xf8, 0x3b, -+ 0xce, 0x82, 0xa9, 0x70, 0x61, 0xbc, 0x00, 0x3c, 0xe4, 0xfc, 0xbf, 0xb0, 0xb8, 0xf5, 0x02, 0xf7, -+ 0xba, 0x47, 0x76, 0xef, 0x18, 0x5a, 0x6f, 0x40, 0xb1, 0x37, 0x34, 0x79, 0x92, 0x80, 0xfc, 0x8d, -+ 0x47, 0xd1, 0x45, 0x39, 0x8a, 0xd6, 0xa1, 0x11, 0xf5, 0xc0, 0x17, 0xd0, 0x0a, 0x59, 0x40, 0x26, -+ 0x41, 0x26, 0xcc, 0x17, 0x34, 0xfe, 0xc4, 0xe1, 0xd8, 0x63, 0x35, 0xd7, 0x0c, 0x8e, 0x3d, 0x4f, -+ 0xf6, 0xda, 0x45, 0xd9, 0x6b, 0xab, 0x3f, 0x56, 0xa0, 0x4a, 0x7a, 0xf8, 0x54, 0xf2, 0xf3, 0x23, -+ 0x69, 0x31, 0x3a, 0x92, 0x86, 0x27, 0xdb, 0x52, 0xfc, 0x64, 0x1b, 0x49, 0x3e, 0x4b, 0xc1, 0x69, -+ 0xc9, 0xe7, 0x42, 0x38, 0xf6, 0x3c, 0xf5, 0x02, 0x2c, 0x30, 0xd9, 0xf8, 0xc8, 0x1b, 0x50, 0x1c, -+ 0x79, 0x03, 0x31, 0x7f, 0x23, 0x6f, 0xa0, 0xfe, 0xa1, 0x02, 0xb5, 0x76, 0x10, 0x18, 0xbd, 0xc3, -+ 0x63, 0x0c, 0x20, 0x14, 0xae, 0x10, 0x17, 0x2e, 0x3d, 0x88, 0x48, 0xdc, 0xd2, 0x18, 0x71, 0x67, -+ 0x25, 0x71, 0x55, 0xa8, 0x0b, 0x59, 0xc6, 0x0a, 0xbc, 0x03, 0xa8, 0xe3, 0x78, 0xc1, 0x07, 0x8e, -+ 0xf7, 0xdc, 0xf0, 0xcc, 0xe3, 0x9d, 0x5a, 0x11, 0x94, 0xf8, 0x3b, 0xa9, 0xc5, 0xd7, 0x66, 0x35, -+ 0xfa, 0x5f, 0x7d, 0x15, 0x4e, 0x49, 0xfc, 0xc6, 0x76, 0x7c, 0x07, 0xaa, 0x74, 0x17, 0xe6, 0x07, -+ 0x9a, 0xab, 0xf1, 0x24, 0xf4, 0x84, 0xdd, 0x5a, 0xdd, 0x84, 0x25, 0x12, 0x8f, 0x51, 0x78, 0xe8, -+ 0x5f, 0xae, 0x25, 0x62, 0xfe, 0xd5, 0x14, 0x8b, 0x44, 0xbc, 0xff, 0x1b, 0x05, 0x66, 0x29, 0x3c, -+ 0x15, 0x23, 0xad, 0x91, 0x7d, 0xce, 0x75, 0xf4, 0xc0, 0xe8, 0x87, 0xef, 0xfb, 0x12, 0xc0, 0x9e, -+ 0xd1, 0xa7, 0x89, 0x0d, 0xda, 0x68, 0x5a, 0x7d, 0xec, 0x07, 0x22, 0x51, 0x56, 0x25, 0xb0, 0x4d, -+ 0x06, 0x22, 0x8a, 0xa1, 0xf9, 0xc4, 0x12, 0x4d, 0x1b, 0xd2, 0xff, 0xe8, 0x35, 0xf6, 0xba, 0x4e, -+ 0x7e, 0x76, 0x88, 0xbe, 0xc6, 0xd3, 0x82, 0x72, 0x22, 0xad, 0x13, 0x3e, 0xa3, 0xcb, 0x50, 0xa2, -+ 0xd7, 0xc4, 0xf3, 0x79, 0x5a, 0xa2, 0x28, 0xc4, 0x2a, 0x5c, 0xcb, 0xb6, 0xb1, 0x49, 0x03, 0xa0, -+ 0xb2, 0xc6, 0x9f, 0xd4, 0xf7, 0x01, 0xc5, 0x95, 0xc7, 0x27, 0xe8, 0x32, 0xcc, 0x51, 0xdd, 0x8a, -+ 0x20, 0x76, 0x29, 0xc5, 0x5a, 0xe3, 0x08, 0xea, 0xb7, 0x01, 0xb1, 0xbe, 0xa4, 0xc0, 0xf5, 0x38, -+ 0x13, 0x98, 0x13, 0xc2, 0xfe, 0x8d, 0x02, 0xa7, 0x24, 0xee, 0x5c, 0xbe, 0x57, 0x65, 0xf6, 0x19, -+ 0xe2, 0x71, 0xd6, 0xef, 0x4a, 0x3b, 0xf3, 0xe5, 0xb4, 0x18, 0xbf, 0xa3, 0x5d, 0xf9, 0xe7, 0x0a, -+ 0x40, 0x7b, 0x14, 0x1c, 0xf2, 0x0b, 0xd3, 0xf8, 0x24, 0x2a, 0x89, 0x49, 0x6c, 0x41, 0xd9, 0x35, -+ 0x7c, 0xff, 0xb9, 0xe3, 0x89, 0x43, 0x64, 0xf8, 0x4c, 0xaf, 0x39, 0x47, 0xfc, 0xb5, 0xe3, 0x8a, -+ 0x46, 0xff, 0xa3, 0x97, 0xa1, 0xce, 0x5e, 0x44, 0xd7, 0x0d, 0xd3, 0xf4, 0x44, 0xbd, 0x51, 0x45, -+ 0xab, 0x31, 0x68, 0x9b, 0x01, 0x09, 0x9a, 0x45, 0x93, 0x06, 0xc1, 0x91, 0x1e, 0x38, 0x4f, 0xb1, -+ 0xcd, 0x0f, 0x86, 0x35, 0x01, 0xdd, 0x23, 0x40, 0x96, 0x75, 0xeb, 0x5b, 0x7e, 0xe0, 0x09, 0x34, -+ 0x91, 0x3b, 0xe4, 0x50, 0x8a, 0xa6, 0xfe, 0x95, 0x02, 0x8d, 0xce, 0x68, 0x30, 0x60, 0xca, 0x3d, -+ 0xc9, 0x24, 0x5f, 0xe1, 0x43, 0x29, 0xa4, 0x4d, 0x3e, 0x52, 0x14, 0x1f, 0xe2, 0x67, 0x72, 0x97, -+ 0x75, 0x1d, 0x96, 0x62, 0x12, 0x73, 0xc3, 0x91, 0x22, 0x7b, 0x45, 0x8e, 0xec, 0xd5, 0x36, 0x20, -+ 0x76, 0x7d, 0x73, 0xe2, 0x51, 0xaa, 0xa7, 0xe1, 0x94, 0xc4, 0x82, 0x6f, 0xc5, 0x57, 0xa0, 0xc6, -+ 0xeb, 0x99, 0xb8, 0x41, 0x9c, 0x81, 0x32, 0x71, 0xa9, 0x3d, 0xcb, 0x14, 0x85, 0x02, 0xf3, 0xae, -+ 0x63, 0x6e, 0x58, 0xa6, 0xa7, 0x7e, 0x0d, 0x6a, 0xfc, 0x1d, 0x4e, 0x8e, 0x7b, 0x0f, 0xea, 0xbc, -+ 0xc8, 0x4c, 0x97, 0x5e, 0x7a, 0x3a, 0x93, 0x51, 0x54, 0x25, 0x54, 0x61, 0xc7, 0x1f, 0xd5, 0xef, -+ 0x40, 0x8b, 0x45, 0x0b, 0x12, 0x63, 0x31, 0xc0, 0x7b, 0x20, 0xaa, 0x8f, 0x73, 0xf8, 0xcb, 0x94, -+ 0x35, 0x2f, 0xfe, 0xa8, 0x9e, 0x83, 0xb5, 0x4c, 0xfe, 0x7c, 0xf4, 0x2e, 0x34, 0xa2, 0x06, 0xf6, -+ 0x66, 0x4e, 0x58, 0xfd, 0xa0, 0xc4, 0xaa, 0x1f, 0x56, 0xc2, 0xd8, 0xbb, 0x20, 0x76, 0x2e, 0x1a, -+ 0x5e, 0x47, 0x27, 0xae, 0xe2, 0xb8, 0x13, 0x57, 0x49, 0x3a, 0x71, 0xa9, 0x8f, 0x42, 0x1d, 0xf2, -+ 0x73, 0xef, 0x5d, 0x7a, 0x32, 0x67, 0x7d, 0x0b, 0xa7, 0x76, 0x36, 0x7b, 0x7c, 0x0c, 0x49, 0x8b, -+ 0xe1, 0xab, 0x97, 0xa1, 0x26, 0xbb, 0xb7, 0x98, 0xc7, 0x52, 0x52, 0x1e, 0xab, 0x9e, 0x70, 0x56, -+ 0x6f, 0x26, 0x8e, 0x14, 0x59, 0x7a, 0x4d, 0x1c, 0x28, 0x6e, 0x49, 0x6e, 0xeb, 0x4b, 0x52, 0xa6, -+ 0xfa, 0x77, 0xe4, 0xb1, 0x96, 0xb9, 0x1f, 0xff, 0xc0, 0x27, 0xf4, 0x7c, 0xa0, 0xea, 0x25, 0xa8, -+ 0xee, 0x8f, 0x7b, 0x93, 0xbe, 0x24, 0xca, 0xab, 0xde, 0x81, 0xe5, 0x0f, 0xac, 0x01, 0xf6, 0x8f, -+ 0xfc, 0x00, 0x0f, 0xb7, 0xa9, 0x7b, 0x39, 0xb0, 0xb0, 0x87, 0xce, 0x03, 0xd0, 0x53, 0xa4, 0xeb, -+ 0x58, 0xe1, 0xdb, 0xc3, 0x31, 0x88, 0xfa, 0x4b, 0x05, 0x16, 0x23, 0xc2, 0x69, 0x0a, 0xdd, 0xde, -+ 0x86, 0xd9, 0x03, 0x5f, 0xdc, 0xb6, 0x25, 0x72, 0x09, 0x59, 0x22, 0x68, 0xa5, 0x03, 0x7f, 0xdb, -+ 0x44, 0xef, 0x00, 0x8c, 0x7c, 0x6c, 0xf2, 0xec, 0xdc, 0x84, 0x72, 0xbf, 0x0a, 0x41, 0x65, 0xf9, -+ 0xbd, 0x5b, 0x50, 0xb5, 0x6c, 0xc7, 0xc4, 0x34, 0x73, 0x6b, 0x4e, 0x2a, 0xf9, 0x03, 0x86, 0xbb, -+ 0xef, 0x63, 0x53, 0xd5, 0xf9, 0xbe, 0x25, 0xb4, 0xc9, 0x4d, 0xe1, 0x43, 0x58, 0x62, 0xee, 0xe7, -+ 0x20, 0x14, 0x36, 0xb3, 0xa0, 0x3a, 0xa1, 0x15, 0xad, 0x61, 0xf1, 0x88, 0x45, 0x10, 0xa9, 0x77, -+ 0xe0, 0x74, 0xa2, 0x38, 0x74, 0xfa, 0x6b, 0xea, 0x8f, 0x12, 0xf7, 0x4d, 0x91, 0xa9, 0x5e, 0x97, -+ 0x0b, 0xeb, 0xf3, 0x6a, 0x51, 0x79, 0x8d, 0xf7, 0x3e, 0x9c, 0x91, 0x2e, 0xc3, 0x24, 0x59, 0x6e, -+ 0x25, 0x82, 0xb0, 0x0b, 0xe3, 0xf9, 0x25, 0xa2, 0xb1, 0xff, 0x54, 0x60, 0x39, 0x0b, 0xe1, 0x84, -+ 0x17, 0xb1, 0xdf, 0x1a, 0xf3, 0x52, 0xce, 0x5b, 0x93, 0x04, 0xfa, 0xbd, 0x5c, 0x5c, 0xef, 0xb0, -+ 0x92, 0xfe, 0xc9, 0x73, 0x52, 0x9c, 0x6e, 0x4e, 0x7e, 0x53, 0x88, 0x25, 0x1b, 0x72, 0xca, 0xee, -+ 0x3f, 0xc5, 0xe5, 0xdf, 0x46, 0xa2, 0xea, 0xfe, 0x6a, 0x26, 0xe1, 0x84, 0xa2, 0x7b, 0x2d, 0xeb, -+ 0x90, 0x7d, 0x7d, 0x12, 0xa7, 0x2f, 0xec, 0xbd, 0xf0, 0x7f, 0x29, 0x50, 0x97, 0x27, 0x04, 0xbd, -+ 0x9f, 0x51, 0x72, 0xff, 0xd2, 0x84, 0x01, 0x4a, 0x15, 0xf7, 0xbc, 0xc4, 0xbd, 0x30, 0x7d, 0x89, -+ 0x7b, 0x71, 0xba, 0x12, 0xf7, 0xfb, 0x50, 0x7f, 0xee, 0x59, 0x81, 0xf1, 0x64, 0x80, 0xf5, 0x81, -+ 0x71, 0x84, 0x3d, 0xee, 0xdd, 0x72, 0xdd, 0x50, 0x4d, 0x90, 0x3c, 0x24, 0x14, 0xea, 0xdf, 0x29, -+ 0x50, 0x16, 0x62, 0x4c, 0x2c, 0x32, 0x5f, 0x1d, 0x11, 0x34, 0x9d, 0x16, 0xb6, 0xda, 0x86, 0xed, -+ 0xe8, 0x3e, 0x26, 0x3b, 0xec, 0xc4, 0x92, 0xed, 0x65, 0x4a, 0xb7, 0xe1, 0x78, 0x78, 0xc7, 0xb0, -+ 0x9d, 0x2e, 0x23, 0x42, 0x6d, 0x68, 0x30, 0x7e, 0x94, 0x15, 0x61, 0x3a, 0xd1, 0xaf, 0xd7, 0x29, -+ 0x01, 0x61, 0x42, 0x98, 0xf9, 0xea, 0x9f, 0x17, 0xa1, 0x1a, 0xd3, 0xcc, 0x84, 0x01, 0x6c, 0xc0, -+ 0x92, 0x28, 0x2e, 0xf0, 0x71, 0x30, 0x5d, 0xb5, 0xf9, 0x22, 0xa7, 0xe8, 0xe2, 0x80, 0xed, 0x27, -+ 0xf7, 0x60, 0xd1, 0x78, 0x66, 0x58, 0x03, 0xaa, 0xf5, 0xa9, 0x36, 0xa3, 0x7a, 0x88, 0x1f, 0xee, -+ 0x48, 0x6c, 0xdc, 0x53, 0x15, 0xa1, 0x03, 0xc5, 0x8d, 0x2a, 0xde, 0x7d, 0x3f, 0x56, 0xa0, 0x92, -+ 0x5b, 0xf1, 0xee, 0xfb, 0x61, 0x7f, 0xb4, 0x20, 0x96, 0xd6, 0xf8, 0xfb, 0xfc, 0xdd, 0xdd, 0xf1, -+ 0xfd, 0x11, 0xdc, 0x0f, 0x28, 0x2a, 0x51, 0xd8, 0xd0, 0xf8, 0xd8, 0xf1, 0xf4, 0x38, 0xfd, 0xfc, -+ 0x04, 0x85, 0x51, 0x8a, 0x4e, 0xc8, 0x44, 0x7d, 0x0f, 0xce, 0x68, 0xd8, 0x71, 0xb1, 0x1d, 0xae, -+ 0x93, 0x87, 0x4e, 0xff, 0x18, 0x3b, 0xdd, 0x59, 0x68, 0x65, 0xd1, 0xf3, 0xb8, 0x74, 0x04, 0xad, -+ 0x8d, 0x43, 0xdc, 0x7b, 0x4a, 0xa3, 0x91, 0x93, 0xe4, 0x97, 0x5b, 0x50, 0x1e, 0x38, 0x3d, 0xf6, -+ 0x75, 0x2a, 0x7e, 0x74, 0x13, 0xcf, 0x39, 0xb7, 0x66, 0xe7, 0x60, 0x2d, 0xb3, 0x5b, 0x2e, 0x15, -+ 0x82, 0xc6, 0x03, 0x1c, 0x6c, 0x3d, 0xc3, 0x76, 0xb8, 0x91, 0xaa, 0xff, 0xa3, 0xc4, 0xb6, 0x6c, -+ 0xda, 0x74, 0x8c, 0xbc, 0x3c, 0xea, 0xc0, 0x72, 0x84, 0x82, 0x09, 0x35, 0xfb, 0x3a, 0x0d, 0xfb, -+ 0xae, 0x53, 0xf6, 0x9d, 0x3d, 0xed, 0x84, 0x7e, 0x94, 0x06, 0xf5, 0x52, 0xb0, 0x44, 0x26, 0xa7, -+ 0x98, 0xcc, 0xe4, 0x74, 0x60, 0x39, 0xbe, 0x29, 0x87, 0x9b, 0x4c, 0x69, 0xaa, 0x77, 0xbb, 0x90, -+ 0x9b, 0x82, 0x5d, 0x79, 0x05, 0xca, 0xe2, 0x83, 0x68, 0x68, 0x1e, 0x8a, 0x7b, 0x1b, 0x9d, 0xc6, -+ 0x0c, 0xf9, 0xb3, 0xbf, 0xd9, 0x69, 0x28, 0xa8, 0x0c, 0xa5, 0xee, 0xc6, 0x5e, 0xa7, 0x51, 0xb8, -+ 0x32, 0x84, 0x46, 0xf2, 0x9b, 0x60, 0x68, 0x15, 0x4e, 0x75, 0xb4, 0xdd, 0x4e, 0xfb, 0x41, 0x7b, -+ 0x6f, 0x7b, 0x77, 0x47, 0xef, 0x68, 0xdb, 0x8f, 0xdb, 0x7b, 0x5b, 0x8d, 0x19, 0x74, 0x11, 0xce, -+ 0xc5, 0x1b, 0x3e, 0xdc, 0xed, 0xee, 0xe9, 0x7b, 0xbb, 0xfa, 0xc6, 0xee, 0xce, 0x5e, 0x7b, 0x7b, -+ 0x67, 0x4b, 0x6b, 0x28, 0xe8, 0x1c, 0x9c, 0x89, 0xa3, 0xdc, 0xdf, 0xde, 0xdc, 0xd6, 0xb6, 0x36, -+ 0xc8, 0xff, 0xf6, 0xc3, 0x46, 0xe1, 0xca, 0xbb, 0x50, 0x93, 0x3e, 0x6e, 0x45, 0x44, 0xea, 0xec, -+ 0x6e, 0x36, 0x66, 0x50, 0x0d, 0x2a, 0x71, 0x3e, 0x65, 0x28, 0xed, 0xec, 0x6e, 0x6e, 0x35, 0x0a, -+ 0x08, 0x60, 0x6e, 0xaf, 0xad, 0x3d, 0xd8, 0xda, 0x6b, 0x14, 0xaf, 0xdc, 0x49, 0xbe, 0xa4, 0x85, -+ 0xd1, 0x12, 0xd4, 0xba, 0xed, 0x9d, 0xcd, 0xfb, 0xbb, 0xdf, 0xd0, 0xb5, 0xad, 0xf6, 0xe6, 0x37, -+ 0x1b, 0x33, 0x68, 0x19, 0x1a, 0x02, 0xb4, 0xb3, 0xbb, 0xc7, 0xa0, 0xca, 0x95, 0xa7, 0x89, 0xcd, -+ 0x06, 0xa3, 0xd3, 0xb0, 0x14, 0x76, 0xa9, 0x6f, 0x68, 0x5b, 0xed, 0xbd, 0x2d, 0x22, 0x89, 0x04, -+ 0xd6, 0xf6, 0x77, 0x76, 0xb6, 0x77, 0x1e, 0x34, 0x14, 0xc2, 0x35, 0x02, 0x6f, 0x7d, 0x63, 0x9b, -+ 0x20, 0x17, 0x64, 0xe4, 0xfd, 0x9d, 0xaf, 0xee, 0xec, 0x7e, 0x7d, 0xa7, 0x51, 0xbc, 0xf2, 0xff, -+ 0xe3, 0x49, 0x86, 0xc8, 0x0c, 0xd6, 0x60, 0x35, 0xd5, 0xa3, 0xbe, 0xf5, 0x78, 0x6b, 0x67, 0xaf, -+ 0x31, 0x23, 0x37, 0x76, 0xf7, 0xda, 0x5a, 0xd4, 0xa8, 0x24, 0x1b, 0x77, 0x3b, 0x9d, 0xb0, 0xb1, -+ 0x20, 0x37, 0x6e, 0x6e, 0x3d, 0xdc, 0x8a, 0x28, 0x8b, 0x37, 0x7e, 0x1a, 0x7d, 0xe3, 0xa8, 0x8b, -+ 0x3d, 0x5a, 0x08, 0xb7, 0x09, 0xf3, 0xe2, 0x8b, 0x7f, 0x52, 0x74, 0x24, 0x7f, 0xa1, 0xb0, 0xb5, -+ 0x96, 0xd9, 0xc6, 0x57, 0xdd, 0x0c, 0x7a, 0x4c, 0xcf, 0x8c, 0xb1, 0x37, 0x9a, 0x2f, 0x24, 0xce, -+ 0x69, 0xa9, 0x17, 0xa7, 0x5b, 0x17, 0x73, 0x30, 0x42, 0xbe, 0xdf, 0x24, 0x07, 0xc2, 0xf8, 0xe7, -+ 0x3c, 0xd0, 0x45, 0xf9, 0x3c, 0x97, 0xf1, 0xa5, 0x90, 0x96, 0x9a, 0x87, 0x12, 0xb2, 0xd6, 0xa1, -+ 0x91, 0xfc, 0x9c, 0x07, 0x92, 0xd2, 0x24, 0x63, 0xbe, 0x16, 0xd2, 0xfa, 0x52, 0x3e, 0x52, 0xbc, -+ 0x83, 0xd4, 0x57, 0x2a, 0x2e, 0xe5, 0xbf, 0xf7, 0x9f, 0xd1, 0xc1, 0xb8, 0x8f, 0x03, 0x30, 0xe5, -+ 0xc8, 0x2f, 0x9d, 0xa2, 0xc4, 0x87, 0x21, 0x32, 0xde, 0x57, 0x97, 0x95, 0x93, 0xfd, 0xae, 0xb2, -+ 0x3a, 0x83, 0xfe, 0x0f, 0x2c, 0x26, 0x6a, 0x99, 0x90, 0x44, 0x98, 0x5d, 0xa2, 0xd5, 0xba, 0x94, -+ 0x8b, 0x23, 0xcf, 0x6a, 0xbc, 0x5e, 0x29, 0x39, 0xab, 0x19, 0x75, 0x50, 0xc9, 0x59, 0xcd, 0x2c, -+ 0x77, 0xa2, 0x86, 0x28, 0xd5, 0x26, 0xc9, 0x86, 0x98, 0x55, 0x0b, 0xd5, 0xba, 0x98, 0x83, 0x11, -+ 0x57, 0x48, 0xa2, 0x3a, 0x49, 0x56, 0x48, 0x76, 0xdd, 0x53, 0xeb, 0x52, 0x2e, 0x4e, 0x72, 0x26, -+ 0xa3, 0xaa, 0x88, 0xf4, 0x4c, 0xa6, 0x2a, 0x73, 0xd2, 0x33, 0x99, 0x2e, 0xaa, 0xe0, 0x33, 0x99, -+ 0xa8, 0x63, 0x50, 0x73, 0x73, 0xac, 0x59, 0x33, 0x99, 0x9d, 0x87, 0x55, 0x67, 0xd0, 0x73, 0x68, -+ 0x8e, 0x4b, 0xa5, 0xa1, 0xab, 0xc7, 0xc8, 0xf8, 0xb5, 0x5e, 0x9f, 0x0e, 0x39, 0xec, 0x18, 0x03, -+ 0x4a, 0x07, 0x27, 0xe8, 0x65, 0x59, 0xdd, 0x63, 0x82, 0x9f, 0xd6, 0x2b, 0x93, 0xd0, 0xc2, 0x6e, -+ 0x1e, 0x40, 0x59, 0x24, 0xe9, 0x90, 0xe4, 0x02, 0x13, 0xc9, 0xc1, 0xd6, 0xd9, 0xec, 0xc6, 0x90, -+ 0xd1, 0x57, 0xa0, 0x44, 0xa0, 0x68, 0x35, 0x89, 0x27, 0x18, 0x34, 0xd3, 0x0d, 0x21, 0x71, 0x1b, -+ 0xe6, 0x58, 0xf6, 0x09, 0x49, 0xd7, 0x5f, 0x52, 0x76, 0xac, 0xd5, 0xca, 0x6a, 0x0a, 0x59, 0x74, -+ 0xd8, 0xf7, 0x53, 0x79, 0x32, 0x09, 0x9d, 0x4f, 0x7e, 0xc8, 0x4b, 0xce, 0x5a, 0xb5, 0x5e, 0x1a, -+ 0xdb, 0x1e, 0xb7, 0xd9, 0xc4, 0x81, 0xed, 0x62, 0xce, 0xe9, 0x3a, 0xcb, 0x66, 0xb3, 0xcf, 0xec, -+ 0x6c, 0x72, 0xd3, 0x67, 0x7a, 0x79, 0x72, 0xc7, 0xde, 0x9b, 0xc8, 0x93, 0x3b, 0xfe, 0x6a, 0x80, -+ 0x2d, 0x8d, 0xe4, 0x5b, 0xd1, 0x6a, 0xde, 0x9b, 0xf9, 0x59, 0x4b, 0x63, 0xcc, 0x1b, 0xff, 0xea, -+ 0x0c, 0x3a, 0x84, 0x53, 0x19, 0x9f, 0x04, 0x40, 0xaf, 0x8c, 0xf7, 0xbf, 0x52, 0x2f, 0xaf, 0x4e, -+ 0xc4, 0x8b, 0xf7, 0x94, 0x71, 0x83, 0x2c, 0xf7, 0x34, 0xfe, 0x0a, 0x5b, 0xee, 0x29, 0xef, 0x2a, -+ 0x9a, 0x1a, 0x22, 0xf7, 0x21, 0x67, 0xb2, 0xae, 0x55, 0x33, 0x0c, 0x31, 0xe5, 0x31, 0x0e, 0xe1, -+ 0x54, 0x46, 0x00, 0x2f, 0x0b, 0x3b, 0xfe, 0x60, 0x21, 0x0b, 0x9b, 0x77, 0x12, 0x98, 0x41, 0xdf, -+ 0x02, 0xf4, 0x00, 0x07, 0x72, 0xe4, 0xe5, 0x23, 0x69, 0xa1, 0x26, 0xcf, 0x0a, 0x63, 0xec, 0x53, -+ 0x3a, 0x34, 0xa8, 0x33, 0xd7, 0x95, 0x1b, 0x7f, 0x56, 0x84, 0x05, 0x96, 0xbf, 0xe0, 0x61, 0xd4, -+ 0x23, 0x80, 0x28, 0x15, 0x88, 0xce, 0x25, 0x27, 0x4f, 0xca, 0xaf, 0xb6, 0xce, 0x8f, 0x6b, 0x8e, -+ 0x2f, 0xd7, 0x58, 0x8a, 0x4d, 0x5e, 0xae, 0xe9, 0x8c, 0xa1, 0xbc, 0x5c, 0x33, 0x72, 0x73, 0xea, -+ 0x0c, 0xfa, 0x08, 0x2a, 0x61, 0x46, 0x47, 0x56, 0x42, 0x32, 0x35, 0xd5, 0x3a, 0x37, 0xa6, 0x35, -+ 0x2e, 0x5d, 0x2c, 0x51, 0x23, 0x4b, 0x97, 0x4e, 0x02, 0xc9, 0xd2, 0x65, 0x65, 0x78, 0xa2, 0xf1, -+ 0xb2, 0x2b, 0xdf, 0x8c, 0xf1, 0x4a, 0x37, 0xeb, 0x19, 0xe3, 0x95, 0xef, 0x8a, 0xd5, 0x99, 0xfb, -+ 0xf7, 0x7e, 0xf6, 0xeb, 0xf3, 0xca, 0x2f, 0x7f, 0x7d, 0x7e, 0xe6, 0xff, 0x7d, 0x72, 0x5e, 0xf9, -+ 0xd9, 0x27, 0xe7, 0x95, 0x5f, 0x7c, 0x72, 0x5e, 0xf9, 0xd5, 0x27, 0xe7, 0x95, 0xef, 0xff, 0xc7, -+ 0xf9, 0x99, 0x6f, 0xa9, 0x4f, 0x6f, 0xf9, 0xeb, 0x96, 0x73, 0xad, 0xe7, 0x59, 0x6f, 0x18, 0xae, -+ 0x75, 0xcd, 0x7d, 0xda, 0xbf, 0x66, 0xb8, 0x96, 0x7f, 0x8d, 0xf3, 0xbd, 0xf6, 0xec, 0xcd, 0x27, -+ 0x73, 0xf4, 0xdb, 0xd1, 0x6f, 0xfd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x94, 0xf5, 0x05, 0x82, -+ 0xf5, 0x5b, 0x00, 0x00, -+} -+ -+// Reference imports to suppress errors if they are not otherwise used. -+var _ context.Context -+var _ grpc.ClientConn -+ -+// This is a compile-time assertion to ensure that this generated file -+// is compatible with the grpc package it is being compiled against. -+const _ = grpc.SupportPackageIsVersion4 -+ -+// RuntimeServiceClient is the client API for RuntimeService service. -+// -+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -+type RuntimeServiceClient interface { -+ // Version returns the runtime name, runtime version, and runtime API version. -+ Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error) -+ // RunPodSandbox creates and starts a pod-level sandbox. Runtimes must ensure -+ // the sandbox is in the ready state on success. -+ RunPodSandbox(ctx context.Context, in *RunPodSandboxRequest, opts ...grpc.CallOption) (*RunPodSandboxResponse, error) -+ // StopPodSandbox stops any running process that is part of the sandbox and -+ // reclaims network resources (e.g., IP addresses) allocated to the sandbox. -+ // If there are any running containers in the sandbox, they must be forcibly -+ // terminated. -+ // This call is idempotent, and must not return an error if all relevant -+ // resources have already been reclaimed. kubelet will call StopPodSandbox -+ // at least once before calling RemovePodSandbox. It will also attempt to -+ // reclaim resources eagerly, as soon as a sandbox is not needed. Hence, -+ // multiple StopPodSandbox calls are expected. -+ StopPodSandbox(ctx context.Context, in *StopPodSandboxRequest, opts ...grpc.CallOption) (*StopPodSandboxResponse, error) -+ // RemovePodSandbox removes the sandbox. If there are any running containers -+ // in the sandbox, they must be forcibly terminated and removed. -+ // This call is idempotent, and must not return an error if the sandbox has -+ // already been removed. -+ RemovePodSandbox(ctx context.Context, in *RemovePodSandboxRequest, opts ...grpc.CallOption) (*RemovePodSandboxResponse, error) -+ // PodSandboxStatus returns the status of the PodSandbox. If the PodSandbox is not -+ // present, returns an error. -+ PodSandboxStatus(ctx context.Context, in *PodSandboxStatusRequest, opts ...grpc.CallOption) (*PodSandboxStatusResponse, error) -+ // ListPodSandbox returns a list of PodSandboxes. -+ ListPodSandbox(ctx context.Context, in *ListPodSandboxRequest, opts ...grpc.CallOption) (*ListPodSandboxResponse, error) -+ // CreateContainer creates a new container in specified PodSandbox -+ CreateContainer(ctx context.Context, in *CreateContainerRequest, opts ...grpc.CallOption) (*CreateContainerResponse, error) -+ // StartContainer starts the container. -+ StartContainer(ctx context.Context, in *StartContainerRequest, opts ...grpc.CallOption) (*StartContainerResponse, error) -+ // StopContainer stops a running container with a grace period (i.e., timeout). -+ // This call is idempotent, and must not return an error if the container has -+ // already been stopped. -+ // The runtime must forcibly kill the container after the grace period is -+ // reached. -+ StopContainer(ctx context.Context, in *StopContainerRequest, opts ...grpc.CallOption) (*StopContainerResponse, error) -+ // RemoveContainer removes the container. If the container is running, the -+ // container must be forcibly removed. -+ // This call is idempotent, and must not return an error if the container has -+ // already been removed. -+ RemoveContainer(ctx context.Context, in *RemoveContainerRequest, opts ...grpc.CallOption) (*RemoveContainerResponse, error) -+ // ListContainers lists all containers by filters. -+ ListContainers(ctx context.Context, in *ListContainersRequest, opts ...grpc.CallOption) (*ListContainersResponse, error) -+ // ContainerStatus returns status of the container. If the container is not -+ // present, returns an error. -+ ContainerStatus(ctx context.Context, in *ContainerStatusRequest, opts ...grpc.CallOption) (*ContainerStatusResponse, error) -+ // UpdateContainerResources updates ContainerConfig of the container synchronously. -+ // If runtime fails to transactionally update the requested resources, an error is returned. -+ UpdateContainerResources(ctx context.Context, in *UpdateContainerResourcesRequest, opts ...grpc.CallOption) (*UpdateContainerResourcesResponse, error) -+ // ReopenContainerLog asks runtime to reopen the stdout/stderr log file -+ // for the container. This is often called after the log file has been -+ // rotated. If the container is not running, container runtime can choose -+ // to either create a new log file and return nil, or return an error. -+ // Once it returns error, new container log file MUST NOT be created. -+ ReopenContainerLog(ctx context.Context, in *ReopenContainerLogRequest, opts ...grpc.CallOption) (*ReopenContainerLogResponse, error) -+ // ExecSync runs a command in a container synchronously. -+ ExecSync(ctx context.Context, in *ExecSyncRequest, opts ...grpc.CallOption) (*ExecSyncResponse, error) -+ // Exec prepares a streaming endpoint to execute a command in the container. -+ Exec(ctx context.Context, in *ExecRequest, opts ...grpc.CallOption) (*ExecResponse, error) -+ // Attach prepares a streaming endpoint to attach to a running container. -+ Attach(ctx context.Context, in *AttachRequest, opts ...grpc.CallOption) (*AttachResponse, error) -+ // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. -+ PortForward(ctx context.Context, in *PortForwardRequest, opts ...grpc.CallOption) (*PortForwardResponse, error) -+ // ContainerStats returns stats of the container. If the container does not -+ // exist, the call returns an error. -+ ContainerStats(ctx context.Context, in *ContainerStatsRequest, opts ...grpc.CallOption) (*ContainerStatsResponse, error) -+ // ListContainerStats returns stats of all running containers. -+ ListContainerStats(ctx context.Context, in *ListContainerStatsRequest, opts ...grpc.CallOption) (*ListContainerStatsResponse, error) -+ // PodSandboxStats returns stats of the pod sandbox. If the pod sandbox does not -+ // exist, the call returns an error. -+ PodSandboxStats(ctx context.Context, in *PodSandboxStatsRequest, opts ...grpc.CallOption) (*PodSandboxStatsResponse, error) -+ // ListPodSandboxStats returns stats of the pod sandboxes matching a filter. -+ ListPodSandboxStats(ctx context.Context, in *ListPodSandboxStatsRequest, opts ...grpc.CallOption) (*ListPodSandboxStatsResponse, error) -+ // UpdateRuntimeConfig updates the runtime configuration based on the given request. -+ UpdateRuntimeConfig(ctx context.Context, in *UpdateRuntimeConfigRequest, opts ...grpc.CallOption) (*UpdateRuntimeConfigResponse, error) -+ // Status returns the status of the runtime. -+ Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) -+ // CheckpointContainer checkpoints a container -+ CheckpointContainer(ctx context.Context, in *CheckpointContainerRequest, opts ...grpc.CallOption) (*CheckpointContainerResponse, error) -+ // GetContainerEvents gets container events from the CRI runtime -+ GetContainerEvents(ctx context.Context, in *GetEventsRequest, opts ...grpc.CallOption) (RuntimeService_GetContainerEventsClient, error) -+} -+ -+type runtimeServiceClient struct { -+ cc *grpc.ClientConn -+} -+ -+func NewRuntimeServiceClient(cc *grpc.ClientConn) RuntimeServiceClient { -+ return &runtimeServiceClient{cc} -+} -+ -+func (c *runtimeServiceClient) Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error) { -+ out := new(VersionResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/Version", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) RunPodSandbox(ctx context.Context, in *RunPodSandboxRequest, opts ...grpc.CallOption) (*RunPodSandboxResponse, error) { -+ out := new(RunPodSandboxResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/RunPodSandbox", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) StopPodSandbox(ctx context.Context, in *StopPodSandboxRequest, opts ...grpc.CallOption) (*StopPodSandboxResponse, error) { -+ out := new(StopPodSandboxResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/StopPodSandbox", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) RemovePodSandbox(ctx context.Context, in *RemovePodSandboxRequest, opts ...grpc.CallOption) (*RemovePodSandboxResponse, error) { -+ out := new(RemovePodSandboxResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/RemovePodSandbox", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) PodSandboxStatus(ctx context.Context, in *PodSandboxStatusRequest, opts ...grpc.CallOption) (*PodSandboxStatusResponse, error) { -+ out := new(PodSandboxStatusResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/PodSandboxStatus", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) ListPodSandbox(ctx context.Context, in *ListPodSandboxRequest, opts ...grpc.CallOption) (*ListPodSandboxResponse, error) { -+ out := new(ListPodSandboxResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/ListPodSandbox", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) CreateContainer(ctx context.Context, in *CreateContainerRequest, opts ...grpc.CallOption) (*CreateContainerResponse, error) { -+ out := new(CreateContainerResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/CreateContainer", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) StartContainer(ctx context.Context, in *StartContainerRequest, opts ...grpc.CallOption) (*StartContainerResponse, error) { -+ out := new(StartContainerResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/StartContainer", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) StopContainer(ctx context.Context, in *StopContainerRequest, opts ...grpc.CallOption) (*StopContainerResponse, error) { -+ out := new(StopContainerResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/StopContainer", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) RemoveContainer(ctx context.Context, in *RemoveContainerRequest, opts ...grpc.CallOption) (*RemoveContainerResponse, error) { -+ out := new(RemoveContainerResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/RemoveContainer", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) ListContainers(ctx context.Context, in *ListContainersRequest, opts ...grpc.CallOption) (*ListContainersResponse, error) { -+ out := new(ListContainersResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/ListContainers", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) ContainerStatus(ctx context.Context, in *ContainerStatusRequest, opts ...grpc.CallOption) (*ContainerStatusResponse, error) { -+ out := new(ContainerStatusResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/ContainerStatus", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) UpdateContainerResources(ctx context.Context, in *UpdateContainerResourcesRequest, opts ...grpc.CallOption) (*UpdateContainerResourcesResponse, error) { -+ out := new(UpdateContainerResourcesResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/UpdateContainerResources", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) ReopenContainerLog(ctx context.Context, in *ReopenContainerLogRequest, opts ...grpc.CallOption) (*ReopenContainerLogResponse, error) { -+ out := new(ReopenContainerLogResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/ReopenContainerLog", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) ExecSync(ctx context.Context, in *ExecSyncRequest, opts ...grpc.CallOption) (*ExecSyncResponse, error) { -+ out := new(ExecSyncResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/ExecSync", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) Exec(ctx context.Context, in *ExecRequest, opts ...grpc.CallOption) (*ExecResponse, error) { -+ out := new(ExecResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/Exec", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) Attach(ctx context.Context, in *AttachRequest, opts ...grpc.CallOption) (*AttachResponse, error) { -+ out := new(AttachResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/Attach", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) PortForward(ctx context.Context, in *PortForwardRequest, opts ...grpc.CallOption) (*PortForwardResponse, error) { -+ out := new(PortForwardResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/PortForward", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) ContainerStats(ctx context.Context, in *ContainerStatsRequest, opts ...grpc.CallOption) (*ContainerStatsResponse, error) { -+ out := new(ContainerStatsResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/ContainerStats", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) ListContainerStats(ctx context.Context, in *ListContainerStatsRequest, opts ...grpc.CallOption) (*ListContainerStatsResponse, error) { -+ out := new(ListContainerStatsResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/ListContainerStats", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) PodSandboxStats(ctx context.Context, in *PodSandboxStatsRequest, opts ...grpc.CallOption) (*PodSandboxStatsResponse, error) { -+ out := new(PodSandboxStatsResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/PodSandboxStats", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) ListPodSandboxStats(ctx context.Context, in *ListPodSandboxStatsRequest, opts ...grpc.CallOption) (*ListPodSandboxStatsResponse, error) { -+ out := new(ListPodSandboxStatsResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/ListPodSandboxStats", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) UpdateRuntimeConfig(ctx context.Context, in *UpdateRuntimeConfigRequest, opts ...grpc.CallOption) (*UpdateRuntimeConfigResponse, error) { -+ out := new(UpdateRuntimeConfigResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/UpdateRuntimeConfig", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) { -+ out := new(StatusResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/Status", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) CheckpointContainer(ctx context.Context, in *CheckpointContainerRequest, opts ...grpc.CallOption) (*CheckpointContainerResponse, error) { -+ out := new(CheckpointContainerResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/CheckpointContainer", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *runtimeServiceClient) GetContainerEvents(ctx context.Context, in *GetEventsRequest, opts ...grpc.CallOption) (RuntimeService_GetContainerEventsClient, error) { -+ stream, err := c.cc.NewStream(ctx, &_RuntimeService_serviceDesc.Streams[0], "/runtime.v1.RuntimeService/GetContainerEvents", opts...) -+ if err != nil { -+ return nil, err -+ } -+ x := &runtimeServiceGetContainerEventsClient{stream} -+ if err := x.ClientStream.SendMsg(in); err != nil { -+ return nil, err -+ } -+ if err := x.ClientStream.CloseSend(); err != nil { -+ return nil, err -+ } -+ return x, nil -+} -+ -+type RuntimeService_GetContainerEventsClient interface { -+ Recv() (*ContainerEventResponse, error) -+ grpc.ClientStream -+} -+ -+type runtimeServiceGetContainerEventsClient struct { -+ grpc.ClientStream -+} -+ -+func (x *runtimeServiceGetContainerEventsClient) Recv() (*ContainerEventResponse, error) { -+ m := new(ContainerEventResponse) -+ if err := x.ClientStream.RecvMsg(m); err != nil { -+ return nil, err -+ } -+ return m, nil -+} -+ -+// RuntimeServiceServer is the server API for RuntimeService service. -+type RuntimeServiceServer interface { -+ // Version returns the runtime name, runtime version, and runtime API version. -+ Version(context.Context, *VersionRequest) (*VersionResponse, error) -+ // RunPodSandbox creates and starts a pod-level sandbox. Runtimes must ensure -+ // the sandbox is in the ready state on success. -+ RunPodSandbox(context.Context, *RunPodSandboxRequest) (*RunPodSandboxResponse, error) -+ // StopPodSandbox stops any running process that is part of the sandbox and -+ // reclaims network resources (e.g., IP addresses) allocated to the sandbox. -+ // If there are any running containers in the sandbox, they must be forcibly -+ // terminated. -+ // This call is idempotent, and must not return an error if all relevant -+ // resources have already been reclaimed. kubelet will call StopPodSandbox -+ // at least once before calling RemovePodSandbox. It will also attempt to -+ // reclaim resources eagerly, as soon as a sandbox is not needed. Hence, -+ // multiple StopPodSandbox calls are expected. -+ StopPodSandbox(context.Context, *StopPodSandboxRequest) (*StopPodSandboxResponse, error) -+ // RemovePodSandbox removes the sandbox. If there are any running containers -+ // in the sandbox, they must be forcibly terminated and removed. -+ // This call is idempotent, and must not return an error if the sandbox has -+ // already been removed. -+ RemovePodSandbox(context.Context, *RemovePodSandboxRequest) (*RemovePodSandboxResponse, error) -+ // PodSandboxStatus returns the status of the PodSandbox. If the PodSandbox is not -+ // present, returns an error. -+ PodSandboxStatus(context.Context, *PodSandboxStatusRequest) (*PodSandboxStatusResponse, error) -+ // ListPodSandbox returns a list of PodSandboxes. -+ ListPodSandbox(context.Context, *ListPodSandboxRequest) (*ListPodSandboxResponse, error) -+ // CreateContainer creates a new container in specified PodSandbox -+ CreateContainer(context.Context, *CreateContainerRequest) (*CreateContainerResponse, error) -+ // StartContainer starts the container. -+ StartContainer(context.Context, *StartContainerRequest) (*StartContainerResponse, error) -+ // StopContainer stops a running container with a grace period (i.e., timeout). -+ // This call is idempotent, and must not return an error if the container has -+ // already been stopped. -+ // The runtime must forcibly kill the container after the grace period is -+ // reached. -+ StopContainer(context.Context, *StopContainerRequest) (*StopContainerResponse, error) -+ // RemoveContainer removes the container. If the container is running, the -+ // container must be forcibly removed. -+ // This call is idempotent, and must not return an error if the container has -+ // already been removed. -+ RemoveContainer(context.Context, *RemoveContainerRequest) (*RemoveContainerResponse, error) -+ // ListContainers lists all containers by filters. -+ ListContainers(context.Context, *ListContainersRequest) (*ListContainersResponse, error) -+ // ContainerStatus returns status of the container. If the container is not -+ // present, returns an error. -+ ContainerStatus(context.Context, *ContainerStatusRequest) (*ContainerStatusResponse, error) -+ // UpdateContainerResources updates ContainerConfig of the container synchronously. -+ // If runtime fails to transactionally update the requested resources, an error is returned. -+ UpdateContainerResources(context.Context, *UpdateContainerResourcesRequest) (*UpdateContainerResourcesResponse, error) -+ // ReopenContainerLog asks runtime to reopen the stdout/stderr log file -+ // for the container. This is often called after the log file has been -+ // rotated. If the container is not running, container runtime can choose -+ // to either create a new log file and return nil, or return an error. -+ // Once it returns error, new container log file MUST NOT be created. -+ ReopenContainerLog(context.Context, *ReopenContainerLogRequest) (*ReopenContainerLogResponse, error) -+ // ExecSync runs a command in a container synchronously. -+ ExecSync(context.Context, *ExecSyncRequest) (*ExecSyncResponse, error) -+ // Exec prepares a streaming endpoint to execute a command in the container. -+ Exec(context.Context, *ExecRequest) (*ExecResponse, error) -+ // Attach prepares a streaming endpoint to attach to a running container. -+ Attach(context.Context, *AttachRequest) (*AttachResponse, error) -+ // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. -+ PortForward(context.Context, *PortForwardRequest) (*PortForwardResponse, error) -+ // ContainerStats returns stats of the container. If the container does not -+ // exist, the call returns an error. -+ ContainerStats(context.Context, *ContainerStatsRequest) (*ContainerStatsResponse, error) -+ // ListContainerStats returns stats of all running containers. -+ ListContainerStats(context.Context, *ListContainerStatsRequest) (*ListContainerStatsResponse, error) -+ // PodSandboxStats returns stats of the pod sandbox. If the pod sandbox does not -+ // exist, the call returns an error. -+ PodSandboxStats(context.Context, *PodSandboxStatsRequest) (*PodSandboxStatsResponse, error) -+ // ListPodSandboxStats returns stats of the pod sandboxes matching a filter. -+ ListPodSandboxStats(context.Context, *ListPodSandboxStatsRequest) (*ListPodSandboxStatsResponse, error) -+ // UpdateRuntimeConfig updates the runtime configuration based on the given request. -+ UpdateRuntimeConfig(context.Context, *UpdateRuntimeConfigRequest) (*UpdateRuntimeConfigResponse, error) -+ // Status returns the status of the runtime. -+ Status(context.Context, *StatusRequest) (*StatusResponse, error) -+ // CheckpointContainer checkpoints a container -+ CheckpointContainer(context.Context, *CheckpointContainerRequest) (*CheckpointContainerResponse, error) -+ // GetContainerEvents gets container events from the CRI runtime -+ GetContainerEvents(*GetEventsRequest, RuntimeService_GetContainerEventsServer) error -+} -+ -+// UnimplementedRuntimeServiceServer can be embedded to have forward compatible implementations. -+type UnimplementedRuntimeServiceServer struct { -+} -+ -+func (*UnimplementedRuntimeServiceServer) Version(ctx context.Context, req *VersionRequest) (*VersionResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method Version not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) RunPodSandbox(ctx context.Context, req *RunPodSandboxRequest) (*RunPodSandboxResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method RunPodSandbox not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) StopPodSandbox(ctx context.Context, req *StopPodSandboxRequest) (*StopPodSandboxResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method StopPodSandbox not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) RemovePodSandbox(ctx context.Context, req *RemovePodSandboxRequest) (*RemovePodSandboxResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method RemovePodSandbox not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) PodSandboxStatus(ctx context.Context, req *PodSandboxStatusRequest) (*PodSandboxStatusResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method PodSandboxStatus not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) ListPodSandbox(ctx context.Context, req *ListPodSandboxRequest) (*ListPodSandboxResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ListPodSandbox not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) CreateContainer(ctx context.Context, req *CreateContainerRequest) (*CreateContainerResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method CreateContainer not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) StartContainer(ctx context.Context, req *StartContainerRequest) (*StartContainerResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method StartContainer not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) StopContainer(ctx context.Context, req *StopContainerRequest) (*StopContainerResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method StopContainer not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) RemoveContainer(ctx context.Context, req *RemoveContainerRequest) (*RemoveContainerResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method RemoveContainer not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) ListContainers(ctx context.Context, req *ListContainersRequest) (*ListContainersResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ListContainers not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) ContainerStatus(ctx context.Context, req *ContainerStatusRequest) (*ContainerStatusResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ContainerStatus not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) UpdateContainerResources(ctx context.Context, req *UpdateContainerResourcesRequest) (*UpdateContainerResourcesResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method UpdateContainerResources not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) ReopenContainerLog(ctx context.Context, req *ReopenContainerLogRequest) (*ReopenContainerLogResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ReopenContainerLog not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) ExecSync(ctx context.Context, req *ExecSyncRequest) (*ExecSyncResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ExecSync not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) Exec(ctx context.Context, req *ExecRequest) (*ExecResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) Attach(ctx context.Context, req *AttachRequest) (*AttachResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method Attach not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) PortForward(ctx context.Context, req *PortForwardRequest) (*PortForwardResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method PortForward not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) ContainerStats(ctx context.Context, req *ContainerStatsRequest) (*ContainerStatsResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ContainerStats not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) ListContainerStats(ctx context.Context, req *ListContainerStatsRequest) (*ListContainerStatsResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ListContainerStats not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) PodSandboxStats(ctx context.Context, req *PodSandboxStatsRequest) (*PodSandboxStatsResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method PodSandboxStats not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) ListPodSandboxStats(ctx context.Context, req *ListPodSandboxStatsRequest) (*ListPodSandboxStatsResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ListPodSandboxStats not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) UpdateRuntimeConfig(ctx context.Context, req *UpdateRuntimeConfigRequest) (*UpdateRuntimeConfigResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method UpdateRuntimeConfig not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) Status(ctx context.Context, req *StatusRequest) (*StatusResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method Status not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) CheckpointContainer(ctx context.Context, req *CheckpointContainerRequest) (*CheckpointContainerResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method CheckpointContainer not implemented") -+} -+func (*UnimplementedRuntimeServiceServer) GetContainerEvents(req *GetEventsRequest, srv RuntimeService_GetContainerEventsServer) error { -+ return status.Errorf(codes.Unimplemented, "method GetContainerEvents not implemented") -+} -+ -+func RegisterRuntimeServiceServer(s *grpc.Server, srv RuntimeServiceServer) { -+ s.RegisterService(&_RuntimeService_serviceDesc, srv) -+} -+ -+func _RuntimeService_Version_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(VersionRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).Version(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/Version", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).Version(ctx, req.(*VersionRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_RunPodSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(RunPodSandboxRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).RunPodSandbox(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/RunPodSandbox", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).RunPodSandbox(ctx, req.(*RunPodSandboxRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_StopPodSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(StopPodSandboxRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).StopPodSandbox(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/StopPodSandbox", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).StopPodSandbox(ctx, req.(*StopPodSandboxRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_RemovePodSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(RemovePodSandboxRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).RemovePodSandbox(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/RemovePodSandbox", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).RemovePodSandbox(ctx, req.(*RemovePodSandboxRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_PodSandboxStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(PodSandboxStatusRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).PodSandboxStatus(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/PodSandboxStatus", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).PodSandboxStatus(ctx, req.(*PodSandboxStatusRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_ListPodSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ListPodSandboxRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).ListPodSandbox(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/ListPodSandbox", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).ListPodSandbox(ctx, req.(*ListPodSandboxRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_CreateContainer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(CreateContainerRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).CreateContainer(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/CreateContainer", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).CreateContainer(ctx, req.(*CreateContainerRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_StartContainer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(StartContainerRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).StartContainer(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/StartContainer", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).StartContainer(ctx, req.(*StartContainerRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_StopContainer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(StopContainerRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).StopContainer(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/StopContainer", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).StopContainer(ctx, req.(*StopContainerRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_RemoveContainer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(RemoveContainerRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).RemoveContainer(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/RemoveContainer", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).RemoveContainer(ctx, req.(*RemoveContainerRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_ListContainers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ListContainersRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).ListContainers(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/ListContainers", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).ListContainers(ctx, req.(*ListContainersRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_ContainerStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ContainerStatusRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).ContainerStatus(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/ContainerStatus", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).ContainerStatus(ctx, req.(*ContainerStatusRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_UpdateContainerResources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(UpdateContainerResourcesRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).UpdateContainerResources(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/UpdateContainerResources", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).UpdateContainerResources(ctx, req.(*UpdateContainerResourcesRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_ReopenContainerLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ReopenContainerLogRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).ReopenContainerLog(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/ReopenContainerLog", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).ReopenContainerLog(ctx, req.(*ReopenContainerLogRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_ExecSync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ExecSyncRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).ExecSync(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/ExecSync", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).ExecSync(ctx, req.(*ExecSyncRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ExecRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).Exec(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/Exec", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).Exec(ctx, req.(*ExecRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_Attach_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(AttachRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).Attach(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/Attach", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).Attach(ctx, req.(*AttachRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_PortForward_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(PortForwardRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).PortForward(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/PortForward", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).PortForward(ctx, req.(*PortForwardRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_ContainerStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ContainerStatsRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).ContainerStats(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/ContainerStats", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).ContainerStats(ctx, req.(*ContainerStatsRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_ListContainerStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ListContainerStatsRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).ListContainerStats(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/ListContainerStats", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).ListContainerStats(ctx, req.(*ListContainerStatsRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_PodSandboxStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(PodSandboxStatsRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).PodSandboxStats(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/PodSandboxStats", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).PodSandboxStats(ctx, req.(*PodSandboxStatsRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_ListPodSandboxStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ListPodSandboxStatsRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).ListPodSandboxStats(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/ListPodSandboxStats", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).ListPodSandboxStats(ctx, req.(*ListPodSandboxStatsRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_UpdateRuntimeConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(UpdateRuntimeConfigRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).UpdateRuntimeConfig(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/UpdateRuntimeConfig", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).UpdateRuntimeConfig(ctx, req.(*UpdateRuntimeConfigRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(StatusRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).Status(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/Status", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).Status(ctx, req.(*StatusRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_CheckpointContainer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(CheckpointContainerRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(RuntimeServiceServer).CheckpointContainer(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.RuntimeService/CheckpointContainer", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(RuntimeServiceServer).CheckpointContainer(ctx, req.(*CheckpointContainerRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _RuntimeService_GetContainerEvents_Handler(srv interface{}, stream grpc.ServerStream) error { -+ m := new(GetEventsRequest) -+ if err := stream.RecvMsg(m); err != nil { -+ return err -+ } -+ return srv.(RuntimeServiceServer).GetContainerEvents(m, &runtimeServiceGetContainerEventsServer{stream}) -+} -+ -+type RuntimeService_GetContainerEventsServer interface { -+ Send(*ContainerEventResponse) error -+ grpc.ServerStream -+} -+ -+type runtimeServiceGetContainerEventsServer struct { -+ grpc.ServerStream -+} -+ -+func (x *runtimeServiceGetContainerEventsServer) Send(m *ContainerEventResponse) error { -+ return x.ServerStream.SendMsg(m) -+} -+ -+var _RuntimeService_serviceDesc = grpc.ServiceDesc{ -+ ServiceName: "runtime.v1.RuntimeService", -+ HandlerType: (*RuntimeServiceServer)(nil), -+ Methods: []grpc.MethodDesc{ -+ { -+ MethodName: "Version", -+ Handler: _RuntimeService_Version_Handler, -+ }, -+ { -+ MethodName: "RunPodSandbox", -+ Handler: _RuntimeService_RunPodSandbox_Handler, -+ }, -+ { -+ MethodName: "StopPodSandbox", -+ Handler: _RuntimeService_StopPodSandbox_Handler, -+ }, -+ { -+ MethodName: "RemovePodSandbox", -+ Handler: _RuntimeService_RemovePodSandbox_Handler, -+ }, -+ { -+ MethodName: "PodSandboxStatus", -+ Handler: _RuntimeService_PodSandboxStatus_Handler, -+ }, -+ { -+ MethodName: "ListPodSandbox", -+ Handler: _RuntimeService_ListPodSandbox_Handler, -+ }, -+ { -+ MethodName: "CreateContainer", -+ Handler: _RuntimeService_CreateContainer_Handler, -+ }, -+ { -+ MethodName: "StartContainer", -+ Handler: _RuntimeService_StartContainer_Handler, -+ }, -+ { -+ MethodName: "StopContainer", -+ Handler: _RuntimeService_StopContainer_Handler, -+ }, -+ { -+ MethodName: "RemoveContainer", -+ Handler: _RuntimeService_RemoveContainer_Handler, -+ }, -+ { -+ MethodName: "ListContainers", -+ Handler: _RuntimeService_ListContainers_Handler, -+ }, -+ { -+ MethodName: "ContainerStatus", -+ Handler: _RuntimeService_ContainerStatus_Handler, -+ }, -+ { -+ MethodName: "UpdateContainerResources", -+ Handler: _RuntimeService_UpdateContainerResources_Handler, -+ }, -+ { -+ MethodName: "ReopenContainerLog", -+ Handler: _RuntimeService_ReopenContainerLog_Handler, -+ }, -+ { -+ MethodName: "ExecSync", -+ Handler: _RuntimeService_ExecSync_Handler, -+ }, -+ { -+ MethodName: "Exec", -+ Handler: _RuntimeService_Exec_Handler, -+ }, -+ { -+ MethodName: "Attach", -+ Handler: _RuntimeService_Attach_Handler, -+ }, -+ { -+ MethodName: "PortForward", -+ Handler: _RuntimeService_PortForward_Handler, -+ }, -+ { -+ MethodName: "ContainerStats", -+ Handler: _RuntimeService_ContainerStats_Handler, -+ }, -+ { -+ MethodName: "ListContainerStats", -+ Handler: _RuntimeService_ListContainerStats_Handler, -+ }, -+ { -+ MethodName: "PodSandboxStats", -+ Handler: _RuntimeService_PodSandboxStats_Handler, -+ }, -+ { -+ MethodName: "ListPodSandboxStats", -+ Handler: _RuntimeService_ListPodSandboxStats_Handler, -+ }, -+ { -+ MethodName: "UpdateRuntimeConfig", -+ Handler: _RuntimeService_UpdateRuntimeConfig_Handler, -+ }, -+ { -+ MethodName: "Status", -+ Handler: _RuntimeService_Status_Handler, -+ }, -+ { -+ MethodName: "CheckpointContainer", -+ Handler: _RuntimeService_CheckpointContainer_Handler, -+ }, -+ }, -+ Streams: []grpc.StreamDesc{ -+ { -+ StreamName: "GetContainerEvents", -+ Handler: _RuntimeService_GetContainerEvents_Handler, -+ ServerStreams: true, -+ }, -+ }, -+ Metadata: "api.proto", -+} -+ -+// ImageServiceClient is the client API for ImageService service. -+// -+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -+type ImageServiceClient interface { -+ // ListImages lists existing images. -+ ListImages(ctx context.Context, in *ListImagesRequest, opts ...grpc.CallOption) (*ListImagesResponse, error) -+ // ImageStatus returns the status of the image. If the image is not -+ // present, returns a response with ImageStatusResponse.Image set to -+ // nil. -+ ImageStatus(ctx context.Context, in *ImageStatusRequest, opts ...grpc.CallOption) (*ImageStatusResponse, error) -+ // PullImage pulls an image with authentication config. -+ PullImage(ctx context.Context, in *PullImageRequest, opts ...grpc.CallOption) (*PullImageResponse, error) -+ // RemoveImage removes the image. -+ // This call is idempotent, and must not return an error if the image has -+ // already been removed. -+ RemoveImage(ctx context.Context, in *RemoveImageRequest, opts ...grpc.CallOption) (*RemoveImageResponse, error) -+ // ImageFSInfo returns information of the filesystem that is used to store images. -+ ImageFsInfo(ctx context.Context, in *ImageFsInfoRequest, opts ...grpc.CallOption) (*ImageFsInfoResponse, error) -+} -+ -+type imageServiceClient struct { -+ cc *grpc.ClientConn -+} -+ -+func NewImageServiceClient(cc *grpc.ClientConn) ImageServiceClient { -+ return &imageServiceClient{cc} -+} -+ -+func (c *imageServiceClient) ListImages(ctx context.Context, in *ListImagesRequest, opts ...grpc.CallOption) (*ListImagesResponse, error) { -+ out := new(ListImagesResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.ImageService/ListImages", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *imageServiceClient) ImageStatus(ctx context.Context, in *ImageStatusRequest, opts ...grpc.CallOption) (*ImageStatusResponse, error) { -+ out := new(ImageStatusResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.ImageService/ImageStatus", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *imageServiceClient) PullImage(ctx context.Context, in *PullImageRequest, opts ...grpc.CallOption) (*PullImageResponse, error) { -+ out := new(PullImageResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.ImageService/PullImage", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *imageServiceClient) RemoveImage(ctx context.Context, in *RemoveImageRequest, opts ...grpc.CallOption) (*RemoveImageResponse, error) { -+ out := new(RemoveImageResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.ImageService/RemoveImage", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+func (c *imageServiceClient) ImageFsInfo(ctx context.Context, in *ImageFsInfoRequest, opts ...grpc.CallOption) (*ImageFsInfoResponse, error) { -+ out := new(ImageFsInfoResponse) -+ err := c.cc.Invoke(ctx, "/runtime.v1.ImageService/ImageFsInfo", in, out, opts...) -+ if err != nil { -+ return nil, err -+ } -+ return out, nil -+} -+ -+// ImageServiceServer is the server API for ImageService service. -+type ImageServiceServer interface { -+ // ListImages lists existing images. -+ ListImages(context.Context, *ListImagesRequest) (*ListImagesResponse, error) -+ // ImageStatus returns the status of the image. If the image is not -+ // present, returns a response with ImageStatusResponse.Image set to -+ // nil. -+ ImageStatus(context.Context, *ImageStatusRequest) (*ImageStatusResponse, error) -+ // PullImage pulls an image with authentication config. -+ PullImage(context.Context, *PullImageRequest) (*PullImageResponse, error) -+ // RemoveImage removes the image. -+ // This call is idempotent, and must not return an error if the image has -+ // already been removed. -+ RemoveImage(context.Context, *RemoveImageRequest) (*RemoveImageResponse, error) -+ // ImageFSInfo returns information of the filesystem that is used to store images. -+ ImageFsInfo(context.Context, *ImageFsInfoRequest) (*ImageFsInfoResponse, error) -+} -+ -+// UnimplementedImageServiceServer can be embedded to have forward compatible implementations. -+type UnimplementedImageServiceServer struct { -+} -+ -+func (*UnimplementedImageServiceServer) ListImages(ctx context.Context, req *ListImagesRequest) (*ListImagesResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ListImages not implemented") -+} -+func (*UnimplementedImageServiceServer) ImageStatus(ctx context.Context, req *ImageStatusRequest) (*ImageStatusResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ImageStatus not implemented") -+} -+func (*UnimplementedImageServiceServer) PullImage(ctx context.Context, req *PullImageRequest) (*PullImageResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method PullImage not implemented") -+} -+func (*UnimplementedImageServiceServer) RemoveImage(ctx context.Context, req *RemoveImageRequest) (*RemoveImageResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method RemoveImage not implemented") -+} -+func (*UnimplementedImageServiceServer) ImageFsInfo(ctx context.Context, req *ImageFsInfoRequest) (*ImageFsInfoResponse, error) { -+ return nil, status.Errorf(codes.Unimplemented, "method ImageFsInfo not implemented") -+} -+ -+func RegisterImageServiceServer(s *grpc.Server, srv ImageServiceServer) { -+ s.RegisterService(&_ImageService_serviceDesc, srv) -+} -+ -+func _ImageService_ListImages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ListImagesRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(ImageServiceServer).ListImages(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.ImageService/ListImages", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(ImageServiceServer).ListImages(ctx, req.(*ListImagesRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _ImageService_ImageStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ImageStatusRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(ImageServiceServer).ImageStatus(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.ImageService/ImageStatus", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(ImageServiceServer).ImageStatus(ctx, req.(*ImageStatusRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _ImageService_PullImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(PullImageRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(ImageServiceServer).PullImage(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.ImageService/PullImage", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(ImageServiceServer).PullImage(ctx, req.(*PullImageRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _ImageService_RemoveImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(RemoveImageRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(ImageServiceServer).RemoveImage(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.ImageService/RemoveImage", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(ImageServiceServer).RemoveImage(ctx, req.(*RemoveImageRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+func _ImageService_ImageFsInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { -+ in := new(ImageFsInfoRequest) -+ if err := dec(in); err != nil { -+ return nil, err -+ } -+ if interceptor == nil { -+ return srv.(ImageServiceServer).ImageFsInfo(ctx, in) -+ } -+ info := &grpc.UnaryServerInfo{ -+ Server: srv, -+ FullMethod: "/runtime.v1.ImageService/ImageFsInfo", -+ } -+ handler := func(ctx context.Context, req interface{}) (interface{}, error) { -+ return srv.(ImageServiceServer).ImageFsInfo(ctx, req.(*ImageFsInfoRequest)) -+ } -+ return interceptor(ctx, in, info, handler) -+} -+ -+var _ImageService_serviceDesc = grpc.ServiceDesc{ -+ ServiceName: "runtime.v1.ImageService", -+ HandlerType: (*ImageServiceServer)(nil), -+ Methods: []grpc.MethodDesc{ -+ { -+ MethodName: "ListImages", -+ Handler: _ImageService_ListImages_Handler, -+ }, -+ { -+ MethodName: "ImageStatus", -+ Handler: _ImageService_ImageStatus_Handler, -+ }, -+ { -+ MethodName: "PullImage", -+ Handler: _ImageService_PullImage_Handler, -+ }, -+ { -+ MethodName: "RemoveImage", -+ Handler: _ImageService_RemoveImage_Handler, -+ }, -+ { -+ MethodName: "ImageFsInfo", -+ Handler: _ImageService_ImageFsInfo_Handler, -+ }, -+ }, -+ Streams: []grpc.StreamDesc{}, -+ Metadata: "api.proto", -+} -+ -+func (m *VersionRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *VersionRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *VersionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Version) > 0 { -+ i -= len(m.Version) -+ copy(dAtA[i:], m.Version) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Version))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *VersionResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *VersionResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *VersionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.RuntimeApiVersion) > 0 { -+ i -= len(m.RuntimeApiVersion) -+ copy(dAtA[i:], m.RuntimeApiVersion) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RuntimeApiVersion))) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if len(m.RuntimeVersion) > 0 { -+ i -= len(m.RuntimeVersion) -+ copy(dAtA[i:], m.RuntimeVersion) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RuntimeVersion))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if len(m.RuntimeName) > 0 { -+ i -= len(m.RuntimeName) -+ copy(dAtA[i:], m.RuntimeName) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RuntimeName))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Version) > 0 { -+ i -= len(m.Version) -+ copy(dAtA[i:], m.Version) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Version))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *DNSConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *DNSConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *DNSConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Options) > 0 { -+ for iNdEx := len(m.Options) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.Options[iNdEx]) -+ copy(dAtA[i:], m.Options[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Options[iNdEx]))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if len(m.Searches) > 0 { -+ for iNdEx := len(m.Searches) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.Searches[iNdEx]) -+ copy(dAtA[i:], m.Searches[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Searches[iNdEx]))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if len(m.Servers) > 0 { -+ for iNdEx := len(m.Servers) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.Servers[iNdEx]) -+ copy(dAtA[i:], m.Servers[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Servers[iNdEx]))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PortMapping) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PortMapping) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PortMapping) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.HostIp) > 0 { -+ i -= len(m.HostIp) -+ copy(dAtA[i:], m.HostIp) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.HostIp))) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.HostPort != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.HostPort)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.ContainerPort != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.ContainerPort)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if m.Protocol != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Protocol)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *Mount) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *Mount) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *Mount) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Propagation != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Propagation)) -+ i-- -+ dAtA[i] = 0x28 -+ } -+ if m.SelinuxRelabel { -+ i-- -+ if m.SelinuxRelabel { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.Readonly { -+ i-- -+ if m.Readonly { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if len(m.HostPath) > 0 { -+ i -= len(m.HostPath) -+ copy(dAtA[i:], m.HostPath) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.HostPath))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.ContainerPath) > 0 { -+ i -= len(m.ContainerPath) -+ copy(dAtA[i:], m.ContainerPath) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerPath))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *IDMapping) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *IDMapping) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *IDMapping) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Length != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Length)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.ContainerId != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.ContainerId)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if m.HostId != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.HostId)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *UserNamespace) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *UserNamespace) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *UserNamespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Gids) > 0 { -+ for iNdEx := len(m.Gids) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Gids[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if len(m.Uids) > 0 { -+ for iNdEx := len(m.Uids) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Uids[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if m.Mode != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Mode)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *NamespaceOption) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *NamespaceOption) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *NamespaceOption) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.UsernsOptions != nil { -+ { -+ size, err := m.UsernsOptions.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if len(m.TargetId) > 0 { -+ i -= len(m.TargetId) -+ copy(dAtA[i:], m.TargetId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.TargetId))) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.Ipc != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Ipc)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.Pid != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Pid)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if m.Network != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Network)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *Int64Value) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *Int64Value) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *Int64Value) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Value != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Value)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *LinuxSandboxSecurityContext) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *LinuxSandboxSecurityContext) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *LinuxSandboxSecurityContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Apparmor != nil { -+ { -+ size, err := m.Apparmor.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x52 -+ } -+ if m.Seccomp != nil { -+ { -+ size, err := m.Seccomp.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x4a -+ } -+ if m.RunAsGroup != nil { -+ { -+ size, err := m.RunAsGroup.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x42 -+ } -+ if len(m.SeccompProfilePath) > 0 { -+ i -= len(m.SeccompProfilePath) -+ copy(dAtA[i:], m.SeccompProfilePath) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.SeccompProfilePath))) -+ i-- -+ dAtA[i] = 0x3a -+ } -+ if m.Privileged { -+ i-- -+ if m.Privileged { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x30 -+ } -+ if len(m.SupplementalGroups) > 0 { -+ dAtA6 := make([]byte, len(m.SupplementalGroups)*10) -+ var j5 int -+ for _, num1 := range m.SupplementalGroups { -+ num := uint64(num1) -+ for num >= 1<<7 { -+ dAtA6[j5] = uint8(uint64(num)&0x7f | 0x80) -+ num >>= 7 -+ j5++ -+ } -+ dAtA6[j5] = uint8(num) -+ j5++ -+ } -+ i -= j5 -+ copy(dAtA[i:], dAtA6[:j5]) -+ i = encodeVarintApi(dAtA, i, uint64(j5)) -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if m.ReadonlyRootfs { -+ i-- -+ if m.ReadonlyRootfs { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.RunAsUser != nil { -+ { -+ size, err := m.RunAsUser.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.SelinuxOptions != nil { -+ { -+ size, err := m.SelinuxOptions.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.NamespaceOptions != nil { -+ { -+ size, err := m.NamespaceOptions.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *SecurityProfile) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *SecurityProfile) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *SecurityProfile) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.LocalhostRef) > 0 { -+ i -= len(m.LocalhostRef) -+ copy(dAtA[i:], m.LocalhostRef) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.LocalhostRef))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.ProfileType != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.ProfileType)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *LinuxPodSandboxConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *LinuxPodSandboxConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *LinuxPodSandboxConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Resources != nil { -+ { -+ size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if m.Overhead != nil { -+ { -+ size, err := m.Overhead.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if len(m.Sysctls) > 0 { -+ for k := range m.Sysctls { -+ v := m.Sysctls[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if m.SecurityContext != nil { -+ { -+ size, err := m.SecurityContext.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.CgroupParent) > 0 { -+ i -= len(m.CgroupParent) -+ copy(dAtA[i:], m.CgroupParent) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.CgroupParent))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxMetadata) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxMetadata) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Attempt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Attempt)) -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if len(m.Namespace) > 0 { -+ i -= len(m.Namespace) -+ copy(dAtA[i:], m.Namespace) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Namespace))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if len(m.Uid) > 0 { -+ i -= len(m.Uid) -+ copy(dAtA[i:], m.Uid) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Uid))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Name) > 0 { -+ i -= len(m.Name) -+ copy(dAtA[i:], m.Name) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Name))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Windows != nil { -+ { -+ size, err := m.Windows.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x4a -+ } -+ if m.Linux != nil { -+ { -+ size, err := m.Linux.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x42 -+ } -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x3a -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k := range m.Labels { -+ v := m.Labels[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x32 -+ } -+ } -+ if len(m.PortMappings) > 0 { -+ for iNdEx := len(m.PortMappings) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.PortMappings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ } -+ if m.DnsConfig != nil { -+ { -+ size, err := m.DnsConfig.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if len(m.LogDirectory) > 0 { -+ i -= len(m.LogDirectory) -+ copy(dAtA[i:], m.LogDirectory) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.LogDirectory))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if len(m.Hostname) > 0 { -+ i -= len(m.Hostname) -+ copy(dAtA[i:], m.Hostname) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Hostname))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Metadata != nil { -+ { -+ size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *RunPodSandboxRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RunPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RunPodSandboxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.RuntimeHandler) > 0 { -+ i -= len(m.RuntimeHandler) -+ copy(dAtA[i:], m.RuntimeHandler) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RuntimeHandler))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Config != nil { -+ { -+ size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *RunPodSandboxResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RunPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RunPodSandboxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *StopPodSandboxRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *StopPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *StopPodSandboxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *StopPodSandboxResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *StopPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *StopPodSandboxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *RemovePodSandboxRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RemovePodSandboxRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RemovePodSandboxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *RemovePodSandboxResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RemovePodSandboxResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RemovePodSandboxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxStatusRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxStatusRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Verbose { -+ i-- -+ if m.Verbose { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodIP) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodIP) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodIP) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Ip) > 0 { -+ i -= len(m.Ip) -+ copy(dAtA[i:], m.Ip) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Ip))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxNetworkStatus) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxNetworkStatus) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxNetworkStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.AdditionalIps) > 0 { -+ for iNdEx := len(m.AdditionalIps) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.AdditionalIps[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if len(m.Ip) > 0 { -+ i -= len(m.Ip) -+ copy(dAtA[i:], m.Ip) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Ip))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *Namespace) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *Namespace) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *Namespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Options != nil { -+ { -+ size, err := m.Options.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *LinuxPodSandboxStatus) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *LinuxPodSandboxStatus) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *LinuxPodSandboxStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Namespaces != nil { -+ { -+ size, err := m.Namespaces.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxStatus) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxStatus) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.RuntimeHandler) > 0 { -+ i -= len(m.RuntimeHandler) -+ copy(dAtA[i:], m.RuntimeHandler) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RuntimeHandler))) -+ i-- -+ dAtA[i] = 0x4a -+ } -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x42 -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k := range m.Labels { -+ v := m.Labels[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x3a -+ } -+ } -+ if m.Linux != nil { -+ { -+ size, err := m.Linux.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x32 -+ } -+ if m.Network != nil { -+ { -+ size, err := m.Network.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if m.CreatedAt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CreatedAt)) -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.State != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.State)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.Metadata != nil { -+ { -+ size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxStatusResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxStatusResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Info) > 0 { -+ for k := range m.Info { -+ v := m.Info[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if m.Status != nil { -+ { -+ size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxStateValue) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxStateValue) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxStateValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.State != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.State)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxFilter) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxFilter) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxFilter) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.LabelSelector) > 0 { -+ for k := range m.LabelSelector { -+ v := m.LabelSelector[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if m.State != nil { -+ { -+ size, err := m.State.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListPodSandboxRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListPodSandboxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Filter != nil { -+ { -+ size, err := m.Filter.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandbox) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandbox) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandbox) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.RuntimeHandler) > 0 { -+ i -= len(m.RuntimeHandler) -+ copy(dAtA[i:], m.RuntimeHandler) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RuntimeHandler))) -+ i-- -+ dAtA[i] = 0x3a -+ } -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x32 -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k := range m.Labels { -+ v := m.Labels[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x2a -+ } -+ } -+ if m.CreatedAt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CreatedAt)) -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.State != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.State)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.Metadata != nil { -+ { -+ size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListPodSandboxResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListPodSandboxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Items) > 0 { -+ for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxStatsRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxStatsRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxStatsResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxStatsResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Stats != nil { -+ { -+ size, err := m.Stats.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxStatsFilter) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxStatsFilter) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxStatsFilter) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.LabelSelector) > 0 { -+ for k := range m.LabelSelector { -+ v := m.LabelSelector[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListPodSandboxStatsRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListPodSandboxStatsRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListPodSandboxStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Filter != nil { -+ { -+ size, err := m.Filter.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListPodSandboxStatsResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListPodSandboxStatsResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListPodSandboxStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Stats) > 0 { -+ for iNdEx := len(m.Stats) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Stats[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxAttributes) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxAttributes) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k := range m.Labels { -+ v := m.Labels[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if m.Metadata != nil { -+ { -+ size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PodSandboxStats) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PodSandboxStats) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PodSandboxStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Windows != nil { -+ { -+ size, err := m.Windows.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.Linux != nil { -+ { -+ size, err := m.Linux.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Attributes != nil { -+ { -+ size, err := m.Attributes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *LinuxPodSandboxStats) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *LinuxPodSandboxStats) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *LinuxPodSandboxStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Containers) > 0 { -+ for iNdEx := len(m.Containers) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Containers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ } -+ if m.Process != nil { -+ { -+ size, err := m.Process.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.Network != nil { -+ { -+ size, err := m.Network.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.Memory != nil { -+ { -+ size, err := m.Memory.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Cpu != nil { -+ { -+ size, err := m.Cpu.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *WindowsPodSandboxStats) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *WindowsPodSandboxStats) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *WindowsPodSandboxStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *NetworkUsage) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *NetworkUsage) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *NetworkUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Interfaces) > 0 { -+ for iNdEx := len(m.Interfaces) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Interfaces[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if m.DefaultInterface != nil { -+ { -+ size, err := m.DefaultInterface.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Timestamp != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *NetworkInterfaceUsage) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *NetworkInterfaceUsage) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *NetworkInterfaceUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.TxErrors != nil { -+ { -+ size, err := m.TxErrors.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if m.TxBytes != nil { -+ { -+ size, err := m.TxBytes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.RxErrors != nil { -+ { -+ size, err := m.RxErrors.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.RxBytes != nil { -+ { -+ size, err := m.RxBytes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Name) > 0 { -+ i -= len(m.Name) -+ copy(dAtA[i:], m.Name) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Name))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ProcessUsage) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ProcessUsage) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ProcessUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.ProcessCount != nil { -+ { -+ size, err := m.ProcessCount.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Timestamp != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ImageSpec) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ImageSpec) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ImageSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if len(m.Image) > 0 { -+ i -= len(m.Image) -+ copy(dAtA[i:], m.Image) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Image))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *KeyValue) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *KeyValue) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *KeyValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Value) > 0 { -+ i -= len(m.Value) -+ copy(dAtA[i:], m.Value) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Value))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Key) > 0 { -+ i -= len(m.Key) -+ copy(dAtA[i:], m.Key) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Key))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *LinuxContainerResources) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *LinuxContainerResources) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *LinuxContainerResources) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.MemorySwapLimitInBytes != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.MemorySwapLimitInBytes)) -+ i-- -+ dAtA[i] = 0x50 -+ } -+ if len(m.Unified) > 0 { -+ for k := range m.Unified { -+ v := m.Unified[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x4a -+ } -+ } -+ if len(m.HugepageLimits) > 0 { -+ for iNdEx := len(m.HugepageLimits) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.HugepageLimits[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x42 -+ } -+ } -+ if len(m.CpusetMems) > 0 { -+ i -= len(m.CpusetMems) -+ copy(dAtA[i:], m.CpusetMems) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.CpusetMems))) -+ i-- -+ dAtA[i] = 0x3a -+ } -+ if len(m.CpusetCpus) > 0 { -+ i -= len(m.CpusetCpus) -+ copy(dAtA[i:], m.CpusetCpus) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.CpusetCpus))) -+ i-- -+ dAtA[i] = 0x32 -+ } -+ if m.OomScoreAdj != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.OomScoreAdj)) -+ i-- -+ dAtA[i] = 0x28 -+ } -+ if m.MemoryLimitInBytes != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.MemoryLimitInBytes)) -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.CpuShares != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CpuShares)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.CpuQuota != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CpuQuota)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if m.CpuPeriod != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CpuPeriod)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *HugepageLimit) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *HugepageLimit) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *HugepageLimit) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Limit != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Limit)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if len(m.PageSize) > 0 { -+ i -= len(m.PageSize) -+ copy(dAtA[i:], m.PageSize) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PageSize))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *SELinuxOption) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *SELinuxOption) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *SELinuxOption) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Level) > 0 { -+ i -= len(m.Level) -+ copy(dAtA[i:], m.Level) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Level))) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if len(m.Type) > 0 { -+ i -= len(m.Type) -+ copy(dAtA[i:], m.Type) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Type))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if len(m.Role) > 0 { -+ i -= len(m.Role) -+ copy(dAtA[i:], m.Role) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Role))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.User) > 0 { -+ i -= len(m.User) -+ copy(dAtA[i:], m.User) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.User))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *Capability) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *Capability) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *Capability) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.AddAmbientCapabilities) > 0 { -+ for iNdEx := len(m.AddAmbientCapabilities) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.AddAmbientCapabilities[iNdEx]) -+ copy(dAtA[i:], m.AddAmbientCapabilities[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.AddAmbientCapabilities[iNdEx]))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if len(m.DropCapabilities) > 0 { -+ for iNdEx := len(m.DropCapabilities) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.DropCapabilities[iNdEx]) -+ copy(dAtA[i:], m.DropCapabilities[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.DropCapabilities[iNdEx]))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if len(m.AddCapabilities) > 0 { -+ for iNdEx := len(m.AddCapabilities) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.AddCapabilities[iNdEx]) -+ copy(dAtA[i:], m.AddCapabilities[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.AddCapabilities[iNdEx]))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *LinuxContainerSecurityContext) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *LinuxContainerSecurityContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Apparmor != nil { -+ { -+ size, err := m.Apparmor.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1 -+ i-- -+ dAtA[i] = 0x82 -+ } -+ if m.Seccomp != nil { -+ { -+ size, err := m.Seccomp.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x7a -+ } -+ if len(m.ReadonlyPaths) > 0 { -+ for iNdEx := len(m.ReadonlyPaths) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.ReadonlyPaths[iNdEx]) -+ copy(dAtA[i:], m.ReadonlyPaths[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ReadonlyPaths[iNdEx]))) -+ i-- -+ dAtA[i] = 0x72 -+ } -+ } -+ if len(m.MaskedPaths) > 0 { -+ for iNdEx := len(m.MaskedPaths) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.MaskedPaths[iNdEx]) -+ copy(dAtA[i:], m.MaskedPaths[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.MaskedPaths[iNdEx]))) -+ i-- -+ dAtA[i] = 0x6a -+ } -+ } -+ if m.RunAsGroup != nil { -+ { -+ size, err := m.RunAsGroup.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x62 -+ } -+ if m.NoNewPrivs { -+ i-- -+ if m.NoNewPrivs { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x58 -+ } -+ if len(m.SeccompProfilePath) > 0 { -+ i -= len(m.SeccompProfilePath) -+ copy(dAtA[i:], m.SeccompProfilePath) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.SeccompProfilePath))) -+ i-- -+ dAtA[i] = 0x52 -+ } -+ if len(m.ApparmorProfile) > 0 { -+ i -= len(m.ApparmorProfile) -+ copy(dAtA[i:], m.ApparmorProfile) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ApparmorProfile))) -+ i-- -+ dAtA[i] = 0x4a -+ } -+ if len(m.SupplementalGroups) > 0 { -+ dAtA47 := make([]byte, len(m.SupplementalGroups)*10) -+ var j46 int -+ for _, num1 := range m.SupplementalGroups { -+ num := uint64(num1) -+ for num >= 1<<7 { -+ dAtA47[j46] = uint8(uint64(num)&0x7f | 0x80) -+ num >>= 7 -+ j46++ -+ } -+ dAtA47[j46] = uint8(num) -+ j46++ -+ } -+ i -= j46 -+ copy(dAtA[i:], dAtA47[:j46]) -+ i = encodeVarintApi(dAtA, i, uint64(j46)) -+ i-- -+ dAtA[i] = 0x42 -+ } -+ if m.ReadonlyRootfs { -+ i-- -+ if m.ReadonlyRootfs { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x38 -+ } -+ if len(m.RunAsUsername) > 0 { -+ i -= len(m.RunAsUsername) -+ copy(dAtA[i:], m.RunAsUsername) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RunAsUsername))) -+ i-- -+ dAtA[i] = 0x32 -+ } -+ if m.RunAsUser != nil { -+ { -+ size, err := m.RunAsUser.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if m.SelinuxOptions != nil { -+ { -+ size, err := m.SelinuxOptions.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.NamespaceOptions != nil { -+ { -+ size, err := m.NamespaceOptions.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.Privileged { -+ i-- -+ if m.Privileged { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if m.Capabilities != nil { -+ { -+ size, err := m.Capabilities.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *LinuxContainerConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *LinuxContainerConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *LinuxContainerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.SecurityContext != nil { -+ { -+ size, err := m.SecurityContext.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Resources != nil { -+ { -+ size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *WindowsSandboxSecurityContext) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *WindowsSandboxSecurityContext) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *WindowsSandboxSecurityContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.HostProcess { -+ i-- -+ if m.HostProcess { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if len(m.CredentialSpec) > 0 { -+ i -= len(m.CredentialSpec) -+ copy(dAtA[i:], m.CredentialSpec) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.CredentialSpec))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.RunAsUsername) > 0 { -+ i -= len(m.RunAsUsername) -+ copy(dAtA[i:], m.RunAsUsername) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RunAsUsername))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *WindowsPodSandboxConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *WindowsPodSandboxConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *WindowsPodSandboxConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.SecurityContext != nil { -+ { -+ size, err := m.SecurityContext.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *WindowsContainerSecurityContext) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *WindowsContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *WindowsContainerSecurityContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.HostProcess { -+ i-- -+ if m.HostProcess { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if len(m.CredentialSpec) > 0 { -+ i -= len(m.CredentialSpec) -+ copy(dAtA[i:], m.CredentialSpec) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.CredentialSpec))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.RunAsUsername) > 0 { -+ i -= len(m.RunAsUsername) -+ copy(dAtA[i:], m.RunAsUsername) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RunAsUsername))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *WindowsContainerConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *WindowsContainerConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *WindowsContainerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.SecurityContext != nil { -+ { -+ size, err := m.SecurityContext.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Resources != nil { -+ { -+ size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *WindowsContainerResources) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *WindowsContainerResources) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *WindowsContainerResources) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.RootfsSizeInBytes != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.RootfsSizeInBytes)) -+ i-- -+ dAtA[i] = 0x28 -+ } -+ if m.MemoryLimitInBytes != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.MemoryLimitInBytes)) -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.CpuMaximum != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CpuMaximum)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.CpuCount != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CpuCount)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if m.CpuShares != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CpuShares)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerMetadata) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerMetadata) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Attempt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Attempt)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if len(m.Name) > 0 { -+ i -= len(m.Name) -+ copy(dAtA[i:], m.Name) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Name))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *Device) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *Device) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *Device) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Permissions) > 0 { -+ i -= len(m.Permissions) -+ copy(dAtA[i:], m.Permissions) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Permissions))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if len(m.HostPath) > 0 { -+ i -= len(m.HostPath) -+ copy(dAtA[i:], m.HostPath) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.HostPath))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.ContainerPath) > 0 { -+ i -= len(m.ContainerPath) -+ copy(dAtA[i:], m.ContainerPath) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerPath))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Windows != nil { -+ { -+ size, err := m.Windows.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1 -+ i-- -+ dAtA[i] = 0x82 -+ } -+ if m.Linux != nil { -+ { -+ size, err := m.Linux.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x7a -+ } -+ if m.Tty { -+ i-- -+ if m.Tty { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x70 -+ } -+ if m.StdinOnce { -+ i-- -+ if m.StdinOnce { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x68 -+ } -+ if m.Stdin { -+ i-- -+ if m.Stdin { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x60 -+ } -+ if len(m.LogPath) > 0 { -+ i -= len(m.LogPath) -+ copy(dAtA[i:], m.LogPath) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.LogPath))) -+ i-- -+ dAtA[i] = 0x5a -+ } -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x52 -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k := range m.Labels { -+ v := m.Labels[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x4a -+ } -+ } -+ if len(m.Devices) > 0 { -+ for iNdEx := len(m.Devices) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Devices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x42 -+ } -+ } -+ if len(m.Mounts) > 0 { -+ for iNdEx := len(m.Mounts) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Mounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x3a -+ } -+ } -+ if len(m.Envs) > 0 { -+ for iNdEx := len(m.Envs) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Envs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x32 -+ } -+ } -+ if len(m.WorkingDir) > 0 { -+ i -= len(m.WorkingDir) -+ copy(dAtA[i:], m.WorkingDir) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.WorkingDir))) -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if len(m.Args) > 0 { -+ for iNdEx := len(m.Args) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.Args[iNdEx]) -+ copy(dAtA[i:], m.Args[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Args[iNdEx]))) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ } -+ if len(m.Command) > 0 { -+ for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.Command[iNdEx]) -+ copy(dAtA[i:], m.Command[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Command[iNdEx]))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if m.Image != nil { -+ { -+ size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Metadata != nil { -+ { -+ size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *CreateContainerRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *CreateContainerRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *CreateContainerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.SandboxConfig != nil { -+ { -+ size, err := m.SandboxConfig.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.Config != nil { -+ { -+ size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *CreateContainerResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *CreateContainerResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *CreateContainerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *StartContainerRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *StartContainerRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *StartContainerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *StartContainerResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *StartContainerResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *StartContainerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *StopContainerRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *StopContainerRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *StopContainerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Timeout != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Timeout)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *StopContainerResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *StopContainerResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *StopContainerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *RemoveContainerRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RemoveContainerRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RemoveContainerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *RemoveContainerResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RemoveContainerResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RemoveContainerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerStateValue) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerStateValue) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerStateValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.State != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.State)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerFilter) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerFilter) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerFilter) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.LabelSelector) > 0 { -+ for k := range m.LabelSelector { -+ v := m.LabelSelector[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ } -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.State != nil { -+ { -+ size, err := m.State.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListContainersRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListContainersRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListContainersRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Filter != nil { -+ { -+ size, err := m.Filter.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *Container) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *Container) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *Container) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x4a -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k := range m.Labels { -+ v := m.Labels[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x42 -+ } -+ } -+ if m.CreatedAt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CreatedAt)) -+ i-- -+ dAtA[i] = 0x38 -+ } -+ if m.State != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.State)) -+ i-- -+ dAtA[i] = 0x30 -+ } -+ if len(m.ImageRef) > 0 { -+ i -= len(m.ImageRef) -+ copy(dAtA[i:], m.ImageRef) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ImageRef))) -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if m.Image != nil { -+ { -+ size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.Metadata != nil { -+ { -+ size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListContainersResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListContainersResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListContainersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Containers) > 0 { -+ for iNdEx := len(m.Containers) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Containers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerStatusRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerStatusRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Verbose { -+ i-- -+ if m.Verbose { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerStatus) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Resources != nil { -+ { -+ size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1 -+ i-- -+ dAtA[i] = 0x82 -+ } -+ if len(m.LogPath) > 0 { -+ i -= len(m.LogPath) -+ copy(dAtA[i:], m.LogPath) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.LogPath))) -+ i-- -+ dAtA[i] = 0x7a -+ } -+ if len(m.Mounts) > 0 { -+ for iNdEx := len(m.Mounts) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Mounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x72 -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x6a -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k := range m.Labels { -+ v := m.Labels[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x62 -+ } -+ } -+ if len(m.Message) > 0 { -+ i -= len(m.Message) -+ copy(dAtA[i:], m.Message) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Message))) -+ i-- -+ dAtA[i] = 0x5a -+ } -+ if len(m.Reason) > 0 { -+ i -= len(m.Reason) -+ copy(dAtA[i:], m.Reason) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Reason))) -+ i-- -+ dAtA[i] = 0x52 -+ } -+ if len(m.ImageRef) > 0 { -+ i -= len(m.ImageRef) -+ copy(dAtA[i:], m.ImageRef) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ImageRef))) -+ i-- -+ dAtA[i] = 0x4a -+ } -+ if m.Image != nil { -+ { -+ size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x42 -+ } -+ if m.ExitCode != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.ExitCode)) -+ i-- -+ dAtA[i] = 0x38 -+ } -+ if m.FinishedAt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.FinishedAt)) -+ i-- -+ dAtA[i] = 0x30 -+ } -+ if m.StartedAt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.StartedAt)) -+ i-- -+ dAtA[i] = 0x28 -+ } -+ if m.CreatedAt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CreatedAt)) -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.State != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.State)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.Metadata != nil { -+ { -+ size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerStatusResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerStatusResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Info) > 0 { -+ for k := range m.Info { -+ v := m.Info[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if m.Status != nil { -+ { -+ size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerResources) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerResources) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerResources) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Windows != nil { -+ { -+ size, err := m.Windows.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Linux != nil { -+ { -+ size, err := m.Linux.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *UpdateContainerResourcesRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *UpdateContainerResourcesRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *UpdateContainerResourcesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ } -+ if m.Windows != nil { -+ { -+ size, err := m.Windows.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.Linux != nil { -+ { -+ size, err := m.Linux.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *UpdateContainerResourcesResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *UpdateContainerResourcesResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *UpdateContainerResourcesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *ExecSyncRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ExecSyncRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ExecSyncRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Timeout != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Timeout)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if len(m.Cmd) > 0 { -+ for iNdEx := len(m.Cmd) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.Cmd[iNdEx]) -+ copy(dAtA[i:], m.Cmd[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Cmd[iNdEx]))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ExecSyncResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ExecSyncResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ExecSyncResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.ExitCode != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.ExitCode)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if len(m.Stderr) > 0 { -+ i -= len(m.Stderr) -+ copy(dAtA[i:], m.Stderr) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Stderr))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Stdout) > 0 { -+ i -= len(m.Stdout) -+ copy(dAtA[i:], m.Stdout) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Stdout))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ExecRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ExecRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ExecRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Stderr { -+ i-- -+ if m.Stderr { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x30 -+ } -+ if m.Stdout { -+ i-- -+ if m.Stdout { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x28 -+ } -+ if m.Stdin { -+ i-- -+ if m.Stdin { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.Tty { -+ i-- -+ if m.Tty { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if len(m.Cmd) > 0 { -+ for iNdEx := len(m.Cmd) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.Cmd[iNdEx]) -+ copy(dAtA[i:], m.Cmd[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Cmd[iNdEx]))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ExecResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ExecResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ExecResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Url) > 0 { -+ i -= len(m.Url) -+ copy(dAtA[i:], m.Url) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Url))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *AttachRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *AttachRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *AttachRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Stderr { -+ i-- -+ if m.Stderr { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x28 -+ } -+ if m.Stdout { -+ i-- -+ if m.Stdout { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if m.Tty { -+ i-- -+ if m.Tty { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.Stdin { -+ i-- -+ if m.Stdin { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *AttachResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *AttachResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *AttachResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Url) > 0 { -+ i -= len(m.Url) -+ copy(dAtA[i:], m.Url) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Url))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PortForwardRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PortForwardRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PortForwardRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Port) > 0 { -+ dAtA76 := make([]byte, len(m.Port)*10) -+ var j75 int -+ for _, num1 := range m.Port { -+ num := uint64(num1) -+ for num >= 1<<7 { -+ dAtA76[j75] = uint8(uint64(num)&0x7f | 0x80) -+ num >>= 7 -+ j75++ -+ } -+ dAtA76[j75] = uint8(num) -+ j75++ -+ } -+ i -= j75 -+ copy(dAtA[i:], dAtA76[:j75]) -+ i = encodeVarintApi(dAtA, i, uint64(j75)) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PortForwardResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PortForwardResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PortForwardResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Url) > 0 { -+ i -= len(m.Url) -+ copy(dAtA[i:], m.Url) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Url))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ImageFilter) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ImageFilter) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ImageFilter) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Image != nil { -+ { -+ size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListImagesRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListImagesRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListImagesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Filter != nil { -+ { -+ size, err := m.Filter.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *Image) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *Image) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *Image) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Pinned { -+ i-- -+ if m.Pinned { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x40 -+ } -+ if m.Spec != nil { -+ { -+ size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x3a -+ } -+ if len(m.Username) > 0 { -+ i -= len(m.Username) -+ copy(dAtA[i:], m.Username) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Username))) -+ i-- -+ dAtA[i] = 0x32 -+ } -+ if m.Uid != nil { -+ { -+ size, err := m.Uid.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if m.Size_ != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Size_)) -+ i-- -+ dAtA[i] = 0x20 -+ } -+ if len(m.RepoDigests) > 0 { -+ for iNdEx := len(m.RepoDigests) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.RepoDigests[iNdEx]) -+ copy(dAtA[i:], m.RepoDigests[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RepoDigests[iNdEx]))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if len(m.RepoTags) > 0 { -+ for iNdEx := len(m.RepoTags) - 1; iNdEx >= 0; iNdEx-- { -+ i -= len(m.RepoTags[iNdEx]) -+ copy(dAtA[i:], m.RepoTags[iNdEx]) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RepoTags[iNdEx]))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListImagesResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListImagesResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListImagesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Images) > 0 { -+ for iNdEx := len(m.Images) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Images[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ImageStatusRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ImageStatusRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ImageStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Verbose { -+ i-- -+ if m.Verbose { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if m.Image != nil { -+ { -+ size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ImageStatusResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ImageStatusResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ImageStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Info) > 0 { -+ for k := range m.Info { -+ v := m.Info[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if m.Image != nil { -+ { -+ size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *AuthConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *AuthConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *AuthConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.RegistryToken) > 0 { -+ i -= len(m.RegistryToken) -+ copy(dAtA[i:], m.RegistryToken) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.RegistryToken))) -+ i-- -+ dAtA[i] = 0x32 -+ } -+ if len(m.IdentityToken) > 0 { -+ i -= len(m.IdentityToken) -+ copy(dAtA[i:], m.IdentityToken) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.IdentityToken))) -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if len(m.ServerAddress) > 0 { -+ i -= len(m.ServerAddress) -+ copy(dAtA[i:], m.ServerAddress) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ServerAddress))) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if len(m.Auth) > 0 { -+ i -= len(m.Auth) -+ copy(dAtA[i:], m.Auth) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Auth))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if len(m.Password) > 0 { -+ i -= len(m.Password) -+ copy(dAtA[i:], m.Password) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Password))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Username) > 0 { -+ i -= len(m.Username) -+ copy(dAtA[i:], m.Username) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Username))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PullImageRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PullImageRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PullImageRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.SandboxConfig != nil { -+ { -+ size, err := m.SandboxConfig.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.Auth != nil { -+ { -+ size, err := m.Auth.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Image != nil { -+ { -+ size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *PullImageResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *PullImageResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *PullImageResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.ImageRef) > 0 { -+ i -= len(m.ImageRef) -+ copy(dAtA[i:], m.ImageRef) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ImageRef))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *RemoveImageRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RemoveImageRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RemoveImageRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Image != nil { -+ { -+ size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *RemoveImageResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RemoveImageResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RemoveImageResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *NetworkConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *NetworkConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *NetworkConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.PodCidr) > 0 { -+ i -= len(m.PodCidr) -+ copy(dAtA[i:], m.PodCidr) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodCidr))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *RuntimeConfig) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RuntimeConfig) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RuntimeConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.NetworkConfig != nil { -+ { -+ size, err := m.NetworkConfig.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *UpdateRuntimeConfigRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *UpdateRuntimeConfigRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *UpdateRuntimeConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.RuntimeConfig != nil { -+ { -+ size, err := m.RuntimeConfig.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *UpdateRuntimeConfigResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *UpdateRuntimeConfigResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *UpdateRuntimeConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *RuntimeCondition) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RuntimeCondition) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RuntimeCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Message) > 0 { -+ i -= len(m.Message) -+ copy(dAtA[i:], m.Message) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Message))) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if len(m.Reason) > 0 { -+ i -= len(m.Reason) -+ copy(dAtA[i:], m.Reason) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Reason))) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.Status { -+ i-- -+ if m.Status { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if len(m.Type) > 0 { -+ i -= len(m.Type) -+ copy(dAtA[i:], m.Type) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Type))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *RuntimeStatus) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *RuntimeStatus) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *RuntimeStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Conditions) > 0 { -+ for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *StatusRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *StatusRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *StatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Verbose { -+ i-- -+ if m.Verbose { -+ dAtA[i] = 1 -+ } else { -+ dAtA[i] = 0 -+ } -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *StatusResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *StatusResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *StatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Info) > 0 { -+ for k := range m.Info { -+ v := m.Info[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ } -+ if m.Status != nil { -+ { -+ size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ImageFsInfoRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ImageFsInfoRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ImageFsInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *UInt64Value) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *UInt64Value) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *UInt64Value) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Value != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Value)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *FilesystemIdentifier) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *FilesystemIdentifier) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *FilesystemIdentifier) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Mountpoint) > 0 { -+ i -= len(m.Mountpoint) -+ copy(dAtA[i:], m.Mountpoint) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Mountpoint))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *FilesystemUsage) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *FilesystemUsage) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *FilesystemUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.InodesUsed != nil { -+ { -+ size, err := m.InodesUsed.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.UsedBytes != nil { -+ { -+ size, err := m.UsedBytes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.FsId != nil { -+ { -+ size, err := m.FsId.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Timestamp != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ImageFsInfoResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ImageFsInfoResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ImageFsInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.ImageFilesystems) > 0 { -+ for iNdEx := len(m.ImageFilesystems) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.ImageFilesystems[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerStatsRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerStatsRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerStatsResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerStatsResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Stats != nil { -+ { -+ size, err := m.Stats.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListContainerStatsRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListContainerStatsRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListContainerStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Filter != nil { -+ { -+ size, err := m.Filter.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerStatsFilter) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerStatsFilter) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerStatsFilter) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.LabelSelector) > 0 { -+ for k := range m.LabelSelector { -+ v := m.LabelSelector[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if len(m.PodSandboxId) > 0 { -+ i -= len(m.PodSandboxId) -+ copy(dAtA[i:], m.PodSandboxId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ListContainerStatsResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ListContainerStatsResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ListContainerStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Stats) > 0 { -+ for iNdEx := len(m.Stats) - 1; iNdEx >= 0; iNdEx-- { -+ { -+ size, err := m.Stats[iNdEx].MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerAttributes) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerAttributes) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.Annotations) > 0 { -+ for k := range m.Annotations { -+ v := m.Annotations[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x22 -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k := range m.Labels { -+ v := m.Labels[k] -+ baseI := i -+ i -= len(v) -+ copy(dAtA[i:], v) -+ i = encodeVarintApi(dAtA, i, uint64(len(v))) -+ i-- -+ dAtA[i] = 0x12 -+ i -= len(k) -+ copy(dAtA[i:], k) -+ i = encodeVarintApi(dAtA, i, uint64(len(k))) -+ i-- -+ dAtA[i] = 0xa -+ i = encodeVarintApi(dAtA, i, uint64(baseI-i)) -+ i-- -+ dAtA[i] = 0x1a -+ } -+ } -+ if m.Metadata != nil { -+ { -+ size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.Id) > 0 { -+ i -= len(m.Id) -+ copy(dAtA[i:], m.Id) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerStats) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerStats) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.WritableLayer != nil { -+ { -+ size, err := m.WritableLayer.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.Memory != nil { -+ { -+ size, err := m.Memory.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.Cpu != nil { -+ { -+ size, err := m.Cpu.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Attributes != nil { -+ { -+ size, err := m.Attributes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *CpuUsage) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *CpuUsage) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *CpuUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.UsageNanoCores != nil { -+ { -+ size, err := m.UsageNanoCores.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.UsageCoreNanoSeconds != nil { -+ { -+ size, err := m.UsageCoreNanoSeconds.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Timestamp != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *MemoryUsage) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *MemoryUsage) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *MemoryUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.MajorPageFaults != nil { -+ { -+ size, err := m.MajorPageFaults.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x3a -+ } -+ if m.PageFaults != nil { -+ { -+ size, err := m.PageFaults.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x32 -+ } -+ if m.RssBytes != nil { -+ { -+ size, err := m.RssBytes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x2a -+ } -+ if m.UsageBytes != nil { -+ { -+ size, err := m.UsageBytes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.AvailableBytes != nil { -+ { -+ size, err := m.AvailableBytes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x1a -+ } -+ if m.WorkingSetBytes != nil { -+ { -+ size, err := m.WorkingSetBytes.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if m.Timestamp != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) -+ i-- -+ dAtA[i] = 0x8 -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ReopenContainerLogRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ReopenContainerLogRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ReopenContainerLogRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *ReopenContainerLogResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ReopenContainerLogResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ReopenContainerLogResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *CheckpointContainerRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *CheckpointContainerRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *CheckpointContainerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.Timeout != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.Timeout)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if len(m.Location) > 0 { -+ i -= len(m.Location) -+ copy(dAtA[i:], m.Location) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.Location))) -+ i-- -+ dAtA[i] = 0x12 -+ } -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func (m *CheckpointContainerResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *CheckpointContainerResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *CheckpointContainerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *GetEventsRequest) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *GetEventsRequest) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *GetEventsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ return len(dAtA) - i, nil -+} -+ -+func (m *ContainerEventResponse) Marshal() (dAtA []byte, err error) { -+ size := m.Size() -+ dAtA = make([]byte, size) -+ n, err := m.MarshalToSizedBuffer(dAtA[:size]) -+ if err != nil { -+ return nil, err -+ } -+ return dAtA[:n], nil -+} -+ -+func (m *ContainerEventResponse) MarshalTo(dAtA []byte) (int, error) { -+ size := m.Size() -+ return m.MarshalToSizedBuffer(dAtA[:size]) -+} -+ -+func (m *ContainerEventResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { -+ i := len(dAtA) -+ _ = i -+ var l int -+ _ = l -+ if m.PodSandboxMetadata != nil { -+ { -+ size, err := m.PodSandboxMetadata.MarshalToSizedBuffer(dAtA[:i]) -+ if err != nil { -+ return 0, err -+ } -+ i -= size -+ i = encodeVarintApi(dAtA, i, uint64(size)) -+ } -+ i-- -+ dAtA[i] = 0x22 -+ } -+ if m.CreatedAt != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.CreatedAt)) -+ i-- -+ dAtA[i] = 0x18 -+ } -+ if m.ContainerEventType != 0 { -+ i = encodeVarintApi(dAtA, i, uint64(m.ContainerEventType)) -+ i-- -+ dAtA[i] = 0x10 -+ } -+ if len(m.ContainerId) > 0 { -+ i -= len(m.ContainerId) -+ copy(dAtA[i:], m.ContainerId) -+ i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) -+ i-- -+ dAtA[i] = 0xa -+ } -+ return len(dAtA) - i, nil -+} -+ -+func encodeVarintApi(dAtA []byte, offset int, v uint64) int { -+ offset -= sovApi(v) -+ base := offset -+ for v >= 1<<7 { -+ dAtA[offset] = uint8(v&0x7f | 0x80) -+ v >>= 7 -+ offset++ -+ } -+ dAtA[offset] = uint8(v) -+ return base -+} -+func (m *VersionRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Version) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *VersionResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Version) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.RuntimeName) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.RuntimeVersion) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.RuntimeApiVersion) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *DNSConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.Servers) > 0 { -+ for _, s := range m.Servers { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Searches) > 0 { -+ for _, s := range m.Searches { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Options) > 0 { -+ for _, s := range m.Options { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *PortMapping) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Protocol != 0 { -+ n += 1 + sovApi(uint64(m.Protocol)) -+ } -+ if m.ContainerPort != 0 { -+ n += 1 + sovApi(uint64(m.ContainerPort)) -+ } -+ if m.HostPort != 0 { -+ n += 1 + sovApi(uint64(m.HostPort)) -+ } -+ l = len(m.HostIp) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *Mount) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerPath) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.HostPath) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Readonly { -+ n += 2 -+ } -+ if m.SelinuxRelabel { -+ n += 2 -+ } -+ if m.Propagation != 0 { -+ n += 1 + sovApi(uint64(m.Propagation)) -+ } -+ return n -+} -+ -+func (m *IDMapping) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.HostId != 0 { -+ n += 1 + sovApi(uint64(m.HostId)) -+ } -+ if m.ContainerId != 0 { -+ n += 1 + sovApi(uint64(m.ContainerId)) -+ } -+ if m.Length != 0 { -+ n += 1 + sovApi(uint64(m.Length)) -+ } -+ return n -+} -+ -+func (m *UserNamespace) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Mode != 0 { -+ n += 1 + sovApi(uint64(m.Mode)) -+ } -+ if len(m.Uids) > 0 { -+ for _, e := range m.Uids { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Gids) > 0 { -+ for _, e := range m.Gids { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *NamespaceOption) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Network != 0 { -+ n += 1 + sovApi(uint64(m.Network)) -+ } -+ if m.Pid != 0 { -+ n += 1 + sovApi(uint64(m.Pid)) -+ } -+ if m.Ipc != 0 { -+ n += 1 + sovApi(uint64(m.Ipc)) -+ } -+ l = len(m.TargetId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.UsernsOptions != nil { -+ l = m.UsernsOptions.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *Int64Value) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Value != 0 { -+ n += 1 + sovApi(uint64(m.Value)) -+ } -+ return n -+} -+ -+func (m *LinuxSandboxSecurityContext) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.NamespaceOptions != nil { -+ l = m.NamespaceOptions.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.SelinuxOptions != nil { -+ l = m.SelinuxOptions.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.RunAsUser != nil { -+ l = m.RunAsUser.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.ReadonlyRootfs { -+ n += 2 -+ } -+ if len(m.SupplementalGroups) > 0 { -+ l = 0 -+ for _, e := range m.SupplementalGroups { -+ l += sovApi(uint64(e)) -+ } -+ n += 1 + sovApi(uint64(l)) + l -+ } -+ if m.Privileged { -+ n += 2 -+ } -+ l = len(m.SeccompProfilePath) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.RunAsGroup != nil { -+ l = m.RunAsGroup.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Seccomp != nil { -+ l = m.Seccomp.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Apparmor != nil { -+ l = m.Apparmor.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *SecurityProfile) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.ProfileType != 0 { -+ n += 1 + sovApi(uint64(m.ProfileType)) -+ } -+ l = len(m.LocalhostRef) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *LinuxPodSandboxConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.CgroupParent) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.SecurityContext != nil { -+ l = m.SecurityContext.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Sysctls) > 0 { -+ for k, v := range m.Sysctls { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if m.Overhead != nil { -+ l = m.Overhead.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Resources != nil { -+ l = m.Resources.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PodSandboxMetadata) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Name) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Uid) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Namespace) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Attempt != 0 { -+ n += 1 + sovApi(uint64(m.Attempt)) -+ } -+ return n -+} -+ -+func (m *PodSandboxConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Metadata != nil { -+ l = m.Metadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Hostname) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.LogDirectory) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.DnsConfig != nil { -+ l = m.DnsConfig.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.PortMappings) > 0 { -+ for _, e := range m.PortMappings { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k, v := range m.Labels { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if m.Linux != nil { -+ l = m.Linux.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Windows != nil { -+ l = m.Windows.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *RunPodSandboxRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Config != nil { -+ l = m.Config.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.RuntimeHandler) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *RunPodSandboxResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *StopPodSandboxRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *StopPodSandboxResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *RemovePodSandboxRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *RemovePodSandboxResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *PodSandboxStatusRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Verbose { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *PodIP) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Ip) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PodSandboxNetworkStatus) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Ip) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.AdditionalIps) > 0 { -+ for _, e := range m.AdditionalIps { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *Namespace) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Options != nil { -+ l = m.Options.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *LinuxPodSandboxStatus) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Namespaces != nil { -+ l = m.Namespaces.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PodSandboxStatus) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Metadata != nil { -+ l = m.Metadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.State != 0 { -+ n += 1 + sovApi(uint64(m.State)) -+ } -+ if m.CreatedAt != 0 { -+ n += 1 + sovApi(uint64(m.CreatedAt)) -+ } -+ if m.Network != nil { -+ l = m.Network.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Linux != nil { -+ l = m.Linux.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Labels) > 0 { -+ for k, v := range m.Labels { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ l = len(m.RuntimeHandler) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PodSandboxStatusResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Status != nil { -+ l = m.Status.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Info) > 0 { -+ for k, v := range m.Info { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *PodSandboxStateValue) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.State != 0 { -+ n += 1 + sovApi(uint64(m.State)) -+ } -+ return n -+} -+ -+func (m *PodSandboxFilter) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.State != nil { -+ l = m.State.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.LabelSelector) > 0 { -+ for k, v := range m.LabelSelector { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *ListPodSandboxRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Filter != nil { -+ l = m.Filter.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PodSandbox) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Metadata != nil { -+ l = m.Metadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.State != 0 { -+ n += 1 + sovApi(uint64(m.State)) -+ } -+ if m.CreatedAt != 0 { -+ n += 1 + sovApi(uint64(m.CreatedAt)) -+ } -+ if len(m.Labels) > 0 { -+ for k, v := range m.Labels { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ l = len(m.RuntimeHandler) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ListPodSandboxResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.Items) > 0 { -+ for _, e := range m.Items { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *PodSandboxStatsRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PodSandboxStatsResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Stats != nil { -+ l = m.Stats.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PodSandboxStatsFilter) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.LabelSelector) > 0 { -+ for k, v := range m.LabelSelector { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *ListPodSandboxStatsRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Filter != nil { -+ l = m.Filter.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ListPodSandboxStatsResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.Stats) > 0 { -+ for _, e := range m.Stats { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *PodSandboxAttributes) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Metadata != nil { -+ l = m.Metadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Labels) > 0 { -+ for k, v := range m.Labels { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *PodSandboxStats) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Attributes != nil { -+ l = m.Attributes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Linux != nil { -+ l = m.Linux.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Windows != nil { -+ l = m.Windows.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *LinuxPodSandboxStats) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Cpu != nil { -+ l = m.Cpu.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Memory != nil { -+ l = m.Memory.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Network != nil { -+ l = m.Network.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Process != nil { -+ l = m.Process.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Containers) > 0 { -+ for _, e := range m.Containers { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *WindowsPodSandboxStats) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *NetworkUsage) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Timestamp != 0 { -+ n += 1 + sovApi(uint64(m.Timestamp)) -+ } -+ if m.DefaultInterface != nil { -+ l = m.DefaultInterface.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Interfaces) > 0 { -+ for _, e := range m.Interfaces { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *NetworkInterfaceUsage) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Name) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.RxBytes != nil { -+ l = m.RxBytes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.RxErrors != nil { -+ l = m.RxErrors.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.TxBytes != nil { -+ l = m.TxBytes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.TxErrors != nil { -+ l = m.TxErrors.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ProcessUsage) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Timestamp != 0 { -+ n += 1 + sovApi(uint64(m.Timestamp)) -+ } -+ if m.ProcessCount != nil { -+ l = m.ProcessCount.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ImageSpec) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Image) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *KeyValue) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Key) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Value) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *LinuxContainerResources) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.CpuPeriod != 0 { -+ n += 1 + sovApi(uint64(m.CpuPeriod)) -+ } -+ if m.CpuQuota != 0 { -+ n += 1 + sovApi(uint64(m.CpuQuota)) -+ } -+ if m.CpuShares != 0 { -+ n += 1 + sovApi(uint64(m.CpuShares)) -+ } -+ if m.MemoryLimitInBytes != 0 { -+ n += 1 + sovApi(uint64(m.MemoryLimitInBytes)) -+ } -+ if m.OomScoreAdj != 0 { -+ n += 1 + sovApi(uint64(m.OomScoreAdj)) -+ } -+ l = len(m.CpusetCpus) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.CpusetMems) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.HugepageLimits) > 0 { -+ for _, e := range m.HugepageLimits { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Unified) > 0 { -+ for k, v := range m.Unified { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if m.MemorySwapLimitInBytes != 0 { -+ n += 1 + sovApi(uint64(m.MemorySwapLimitInBytes)) -+ } -+ return n -+} -+ -+func (m *HugepageLimit) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PageSize) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Limit != 0 { -+ n += 1 + sovApi(uint64(m.Limit)) -+ } -+ return n -+} -+ -+func (m *SELinuxOption) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.User) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Role) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Type) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Level) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *Capability) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.AddCapabilities) > 0 { -+ for _, s := range m.AddCapabilities { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.DropCapabilities) > 0 { -+ for _, s := range m.DropCapabilities { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.AddAmbientCapabilities) > 0 { -+ for _, s := range m.AddAmbientCapabilities { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *LinuxContainerSecurityContext) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Capabilities != nil { -+ l = m.Capabilities.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Privileged { -+ n += 2 -+ } -+ if m.NamespaceOptions != nil { -+ l = m.NamespaceOptions.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.SelinuxOptions != nil { -+ l = m.SelinuxOptions.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.RunAsUser != nil { -+ l = m.RunAsUser.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.RunAsUsername) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.ReadonlyRootfs { -+ n += 2 -+ } -+ if len(m.SupplementalGroups) > 0 { -+ l = 0 -+ for _, e := range m.SupplementalGroups { -+ l += sovApi(uint64(e)) -+ } -+ n += 1 + sovApi(uint64(l)) + l -+ } -+ l = len(m.ApparmorProfile) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.SeccompProfilePath) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.NoNewPrivs { -+ n += 2 -+ } -+ if m.RunAsGroup != nil { -+ l = m.RunAsGroup.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.MaskedPaths) > 0 { -+ for _, s := range m.MaskedPaths { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.ReadonlyPaths) > 0 { -+ for _, s := range m.ReadonlyPaths { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if m.Seccomp != nil { -+ l = m.Seccomp.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Apparmor != nil { -+ l = m.Apparmor.Size() -+ n += 2 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *LinuxContainerConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Resources != nil { -+ l = m.Resources.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.SecurityContext != nil { -+ l = m.SecurityContext.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *WindowsSandboxSecurityContext) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.RunAsUsername) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.CredentialSpec) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.HostProcess { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *WindowsPodSandboxConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.SecurityContext != nil { -+ l = m.SecurityContext.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *WindowsContainerSecurityContext) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.RunAsUsername) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.CredentialSpec) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.HostProcess { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *WindowsContainerConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Resources != nil { -+ l = m.Resources.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.SecurityContext != nil { -+ l = m.SecurityContext.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *WindowsContainerResources) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.CpuShares != 0 { -+ n += 1 + sovApi(uint64(m.CpuShares)) -+ } -+ if m.CpuCount != 0 { -+ n += 1 + sovApi(uint64(m.CpuCount)) -+ } -+ if m.CpuMaximum != 0 { -+ n += 1 + sovApi(uint64(m.CpuMaximum)) -+ } -+ if m.MemoryLimitInBytes != 0 { -+ n += 1 + sovApi(uint64(m.MemoryLimitInBytes)) -+ } -+ if m.RootfsSizeInBytes != 0 { -+ n += 1 + sovApi(uint64(m.RootfsSizeInBytes)) -+ } -+ return n -+} -+ -+func (m *ContainerMetadata) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Name) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Attempt != 0 { -+ n += 1 + sovApi(uint64(m.Attempt)) -+ } -+ return n -+} -+ -+func (m *Device) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerPath) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.HostPath) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Permissions) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ContainerConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Metadata != nil { -+ l = m.Metadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Image != nil { -+ l = m.Image.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Command) > 0 { -+ for _, s := range m.Command { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Args) > 0 { -+ for _, s := range m.Args { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ l = len(m.WorkingDir) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Envs) > 0 { -+ for _, e := range m.Envs { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Mounts) > 0 { -+ for _, e := range m.Mounts { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Devices) > 0 { -+ for _, e := range m.Devices { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.Labels) > 0 { -+ for k, v := range m.Labels { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ l = len(m.LogPath) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Stdin { -+ n += 2 -+ } -+ if m.StdinOnce { -+ n += 2 -+ } -+ if m.Tty { -+ n += 2 -+ } -+ if m.Linux != nil { -+ l = m.Linux.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Windows != nil { -+ l = m.Windows.Size() -+ n += 2 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *CreateContainerRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Config != nil { -+ l = m.Config.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.SandboxConfig != nil { -+ l = m.SandboxConfig.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *CreateContainerResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *StartContainerRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *StartContainerResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *StopContainerRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Timeout != 0 { -+ n += 1 + sovApi(uint64(m.Timeout)) -+ } -+ return n -+} -+ -+func (m *StopContainerResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *RemoveContainerRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *RemoveContainerResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *ContainerStateValue) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.State != 0 { -+ n += 1 + sovApi(uint64(m.State)) -+ } -+ return n -+} -+ -+func (m *ContainerFilter) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.State != nil { -+ l = m.State.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.LabelSelector) > 0 { -+ for k, v := range m.LabelSelector { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *ListContainersRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Filter != nil { -+ l = m.Filter.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *Container) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Metadata != nil { -+ l = m.Metadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Image != nil { -+ l = m.Image.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.ImageRef) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.State != 0 { -+ n += 1 + sovApi(uint64(m.State)) -+ } -+ if m.CreatedAt != 0 { -+ n += 1 + sovApi(uint64(m.CreatedAt)) -+ } -+ if len(m.Labels) > 0 { -+ for k, v := range m.Labels { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *ListContainersResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.Containers) > 0 { -+ for _, e := range m.Containers { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *ContainerStatusRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Verbose { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *ContainerStatus) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Metadata != nil { -+ l = m.Metadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.State != 0 { -+ n += 1 + sovApi(uint64(m.State)) -+ } -+ if m.CreatedAt != 0 { -+ n += 1 + sovApi(uint64(m.CreatedAt)) -+ } -+ if m.StartedAt != 0 { -+ n += 1 + sovApi(uint64(m.StartedAt)) -+ } -+ if m.FinishedAt != 0 { -+ n += 1 + sovApi(uint64(m.FinishedAt)) -+ } -+ if m.ExitCode != 0 { -+ n += 1 + sovApi(uint64(m.ExitCode)) -+ } -+ if m.Image != nil { -+ l = m.Image.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.ImageRef) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Reason) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Message) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Labels) > 0 { -+ for k, v := range m.Labels { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Mounts) > 0 { -+ for _, e := range m.Mounts { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ l = len(m.LogPath) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Resources != nil { -+ l = m.Resources.Size() -+ n += 2 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ContainerStatusResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Status != nil { -+ l = m.Status.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Info) > 0 { -+ for k, v := range m.Info { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *ContainerResources) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Linux != nil { -+ l = m.Linux.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Windows != nil { -+ l = m.Windows.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *UpdateContainerResourcesRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Linux != nil { -+ l = m.Linux.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Windows != nil { -+ l = m.Windows.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *UpdateContainerResourcesResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *ExecSyncRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Cmd) > 0 { -+ for _, s := range m.Cmd { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if m.Timeout != 0 { -+ n += 1 + sovApi(uint64(m.Timeout)) -+ } -+ return n -+} -+ -+func (m *ExecSyncResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Stdout) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Stderr) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.ExitCode != 0 { -+ n += 1 + sovApi(uint64(m.ExitCode)) -+ } -+ return n -+} -+ -+func (m *ExecRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Cmd) > 0 { -+ for _, s := range m.Cmd { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if m.Tty { -+ n += 2 -+ } -+ if m.Stdin { -+ n += 2 -+ } -+ if m.Stdout { -+ n += 2 -+ } -+ if m.Stderr { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *ExecResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Url) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *AttachRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Stdin { -+ n += 2 -+ } -+ if m.Tty { -+ n += 2 -+ } -+ if m.Stdout { -+ n += 2 -+ } -+ if m.Stderr { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *AttachResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Url) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PortForwardRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Port) > 0 { -+ l = 0 -+ for _, e := range m.Port { -+ l += sovApi(uint64(e)) -+ } -+ n += 1 + sovApi(uint64(l)) + l -+ } -+ return n -+} -+ -+func (m *PortForwardResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Url) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ImageFilter) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Image != nil { -+ l = m.Image.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ListImagesRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Filter != nil { -+ l = m.Filter.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *Image) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.RepoTags) > 0 { -+ for _, s := range m.RepoTags { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if len(m.RepoDigests) > 0 { -+ for _, s := range m.RepoDigests { -+ l = len(s) -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ if m.Size_ != 0 { -+ n += 1 + sovApi(uint64(m.Size_)) -+ } -+ if m.Uid != nil { -+ l = m.Uid.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Username) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Spec != nil { -+ l = m.Spec.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Pinned { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *ListImagesResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.Images) > 0 { -+ for _, e := range m.Images { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *ImageStatusRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Image != nil { -+ l = m.Image.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Verbose { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *ImageStatusResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Image != nil { -+ l = m.Image.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Info) > 0 { -+ for k, v := range m.Info { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *AuthConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Username) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Password) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Auth) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.ServerAddress) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.IdentityToken) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.RegistryToken) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PullImageRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Image != nil { -+ l = m.Image.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Auth != nil { -+ l = m.Auth.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.SandboxConfig != nil { -+ l = m.SandboxConfig.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *PullImageResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ImageRef) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *RemoveImageRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Image != nil { -+ l = m.Image.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *RemoveImageResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *NetworkConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.PodCidr) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *RuntimeConfig) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.NetworkConfig != nil { -+ l = m.NetworkConfig.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *UpdateRuntimeConfigRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.RuntimeConfig != nil { -+ l = m.RuntimeConfig.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *UpdateRuntimeConfigResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *RuntimeCondition) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Type) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Status { -+ n += 2 -+ } -+ l = len(m.Reason) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Message) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *RuntimeStatus) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.Conditions) > 0 { -+ for _, e := range m.Conditions { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *StatusRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Verbose { -+ n += 2 -+ } -+ return n -+} -+ -+func (m *StatusResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Status != nil { -+ l = m.Status.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Info) > 0 { -+ for k, v := range m.Info { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *ImageFsInfoRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *UInt64Value) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Value != 0 { -+ n += 1 + sovApi(uint64(m.Value)) -+ } -+ return n -+} -+ -+func (m *FilesystemIdentifier) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Mountpoint) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *FilesystemUsage) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Timestamp != 0 { -+ n += 1 + sovApi(uint64(m.Timestamp)) -+ } -+ if m.FsId != nil { -+ l = m.FsId.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.UsedBytes != nil { -+ l = m.UsedBytes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.InodesUsed != nil { -+ l = m.InodesUsed.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ImageFsInfoResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.ImageFilesystems) > 0 { -+ for _, e := range m.ImageFilesystems { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *ContainerStatsRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ContainerStatsResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Stats != nil { -+ l = m.Stats.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ListContainerStatsRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Filter != nil { -+ l = m.Filter.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ContainerStatsFilter) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.PodSandboxId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.LabelSelector) > 0 { -+ for k, v := range m.LabelSelector { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *ListContainerStatsResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if len(m.Stats) > 0 { -+ for _, e := range m.Stats { -+ l = e.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ } -+ return n -+} -+ -+func (m *ContainerAttributes) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.Id) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Metadata != nil { -+ l = m.Metadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if len(m.Labels) > 0 { -+ for k, v := range m.Labels { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ if len(m.Annotations) > 0 { -+ for k, v := range m.Annotations { -+ _ = k -+ _ = v -+ mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) -+ n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) -+ } -+ } -+ return n -+} -+ -+func (m *ContainerStats) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Attributes != nil { -+ l = m.Attributes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Cpu != nil { -+ l = m.Cpu.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Memory != nil { -+ l = m.Memory.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.WritableLayer != nil { -+ l = m.WritableLayer.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *CpuUsage) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Timestamp != 0 { -+ n += 1 + sovApi(uint64(m.Timestamp)) -+ } -+ if m.UsageCoreNanoSeconds != nil { -+ l = m.UsageCoreNanoSeconds.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.UsageNanoCores != nil { -+ l = m.UsageNanoCores.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *MemoryUsage) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ if m.Timestamp != 0 { -+ n += 1 + sovApi(uint64(m.Timestamp)) -+ } -+ if m.WorkingSetBytes != nil { -+ l = m.WorkingSetBytes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.AvailableBytes != nil { -+ l = m.AvailableBytes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.UsageBytes != nil { -+ l = m.UsageBytes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.RssBytes != nil { -+ l = m.RssBytes.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.PageFaults != nil { -+ l = m.PageFaults.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.MajorPageFaults != nil { -+ l = m.MajorPageFaults.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ReopenContainerLogRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func (m *ReopenContainerLogResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *CheckpointContainerRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ l = len(m.Location) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.Timeout != 0 { -+ n += 1 + sovApi(uint64(m.Timeout)) -+ } -+ return n -+} -+ -+func (m *CheckpointContainerResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *GetEventsRequest) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ return n -+} -+ -+func (m *ContainerEventResponse) Size() (n int) { -+ if m == nil { -+ return 0 -+ } -+ var l int -+ _ = l -+ l = len(m.ContainerId) -+ if l > 0 { -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ if m.ContainerEventType != 0 { -+ n += 1 + sovApi(uint64(m.ContainerEventType)) -+ } -+ if m.CreatedAt != 0 { -+ n += 1 + sovApi(uint64(m.CreatedAt)) -+ } -+ if m.PodSandboxMetadata != nil { -+ l = m.PodSandboxMetadata.Size() -+ n += 1 + l + sovApi(uint64(l)) -+ } -+ return n -+} -+ -+func sovApi(x uint64) (n int) { -+ return (math_bits.Len64(x|1) + 6) / 7 -+} -+func sozApi(x uint64) (n int) { -+ return sovApi(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -+} -+func (this *VersionRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&VersionRequest{`, -+ `Version:` + fmt.Sprintf("%v", this.Version) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *VersionResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&VersionResponse{`, -+ `Version:` + fmt.Sprintf("%v", this.Version) + `,`, -+ `RuntimeName:` + fmt.Sprintf("%v", this.RuntimeName) + `,`, -+ `RuntimeVersion:` + fmt.Sprintf("%v", this.RuntimeVersion) + `,`, -+ `RuntimeApiVersion:` + fmt.Sprintf("%v", this.RuntimeApiVersion) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *DNSConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&DNSConfig{`, -+ `Servers:` + fmt.Sprintf("%v", this.Servers) + `,`, -+ `Searches:` + fmt.Sprintf("%v", this.Searches) + `,`, -+ `Options:` + fmt.Sprintf("%v", this.Options) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PortMapping) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PortMapping{`, -+ `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, -+ `ContainerPort:` + fmt.Sprintf("%v", this.ContainerPort) + `,`, -+ `HostPort:` + fmt.Sprintf("%v", this.HostPort) + `,`, -+ `HostIp:` + fmt.Sprintf("%v", this.HostIp) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *Mount) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&Mount{`, -+ `ContainerPath:` + fmt.Sprintf("%v", this.ContainerPath) + `,`, -+ `HostPath:` + fmt.Sprintf("%v", this.HostPath) + `,`, -+ `Readonly:` + fmt.Sprintf("%v", this.Readonly) + `,`, -+ `SelinuxRelabel:` + fmt.Sprintf("%v", this.SelinuxRelabel) + `,`, -+ `Propagation:` + fmt.Sprintf("%v", this.Propagation) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *IDMapping) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&IDMapping{`, -+ `HostId:` + fmt.Sprintf("%v", this.HostId) + `,`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `Length:` + fmt.Sprintf("%v", this.Length) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *UserNamespace) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForUids := "[]*IDMapping{" -+ for _, f := range this.Uids { -+ repeatedStringForUids += strings.Replace(f.String(), "IDMapping", "IDMapping", 1) + "," -+ } -+ repeatedStringForUids += "}" -+ repeatedStringForGids := "[]*IDMapping{" -+ for _, f := range this.Gids { -+ repeatedStringForGids += strings.Replace(f.String(), "IDMapping", "IDMapping", 1) + "," -+ } -+ repeatedStringForGids += "}" -+ s := strings.Join([]string{`&UserNamespace{`, -+ `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`, -+ `Uids:` + repeatedStringForUids + `,`, -+ `Gids:` + repeatedStringForGids + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *NamespaceOption) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&NamespaceOption{`, -+ `Network:` + fmt.Sprintf("%v", this.Network) + `,`, -+ `Pid:` + fmt.Sprintf("%v", this.Pid) + `,`, -+ `Ipc:` + fmt.Sprintf("%v", this.Ipc) + `,`, -+ `TargetId:` + fmt.Sprintf("%v", this.TargetId) + `,`, -+ `UsernsOptions:` + strings.Replace(this.UsernsOptions.String(), "UserNamespace", "UserNamespace", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *Int64Value) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&Int64Value{`, -+ `Value:` + fmt.Sprintf("%v", this.Value) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *LinuxSandboxSecurityContext) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&LinuxSandboxSecurityContext{`, -+ `NamespaceOptions:` + strings.Replace(this.NamespaceOptions.String(), "NamespaceOption", "NamespaceOption", 1) + `,`, -+ `SelinuxOptions:` + strings.Replace(this.SelinuxOptions.String(), "SELinuxOption", "SELinuxOption", 1) + `,`, -+ `RunAsUser:` + strings.Replace(this.RunAsUser.String(), "Int64Value", "Int64Value", 1) + `,`, -+ `ReadonlyRootfs:` + fmt.Sprintf("%v", this.ReadonlyRootfs) + `,`, -+ `SupplementalGroups:` + fmt.Sprintf("%v", this.SupplementalGroups) + `,`, -+ `Privileged:` + fmt.Sprintf("%v", this.Privileged) + `,`, -+ `SeccompProfilePath:` + fmt.Sprintf("%v", this.SeccompProfilePath) + `,`, -+ `RunAsGroup:` + strings.Replace(this.RunAsGroup.String(), "Int64Value", "Int64Value", 1) + `,`, -+ `Seccomp:` + strings.Replace(this.Seccomp.String(), "SecurityProfile", "SecurityProfile", 1) + `,`, -+ `Apparmor:` + strings.Replace(this.Apparmor.String(), "SecurityProfile", "SecurityProfile", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *SecurityProfile) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&SecurityProfile{`, -+ `ProfileType:` + fmt.Sprintf("%v", this.ProfileType) + `,`, -+ `LocalhostRef:` + fmt.Sprintf("%v", this.LocalhostRef) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *LinuxPodSandboxConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForSysctls := make([]string, 0, len(this.Sysctls)) -+ for k := range this.Sysctls { -+ keysForSysctls = append(keysForSysctls, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForSysctls) -+ mapStringForSysctls := "map[string]string{" -+ for _, k := range keysForSysctls { -+ mapStringForSysctls += fmt.Sprintf("%v: %v,", k, this.Sysctls[k]) -+ } -+ mapStringForSysctls += "}" -+ s := strings.Join([]string{`&LinuxPodSandboxConfig{`, -+ `CgroupParent:` + fmt.Sprintf("%v", this.CgroupParent) + `,`, -+ `SecurityContext:` + strings.Replace(this.SecurityContext.String(), "LinuxSandboxSecurityContext", "LinuxSandboxSecurityContext", 1) + `,`, -+ `Sysctls:` + mapStringForSysctls + `,`, -+ `Overhead:` + strings.Replace(this.Overhead.String(), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, -+ `Resources:` + strings.Replace(this.Resources.String(), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxMetadata) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PodSandboxMetadata{`, -+ `Name:` + fmt.Sprintf("%v", this.Name) + `,`, -+ `Uid:` + fmt.Sprintf("%v", this.Uid) + `,`, -+ `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, -+ `Attempt:` + fmt.Sprintf("%v", this.Attempt) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForPortMappings := "[]*PortMapping{" -+ for _, f := range this.PortMappings { -+ repeatedStringForPortMappings += strings.Replace(f.String(), "PortMapping", "PortMapping", 1) + "," -+ } -+ repeatedStringForPortMappings += "}" -+ keysForLabels := make([]string, 0, len(this.Labels)) -+ for k := range this.Labels { -+ keysForLabels = append(keysForLabels, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) -+ mapStringForLabels := "map[string]string{" -+ for _, k := range keysForLabels { -+ mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) -+ } -+ mapStringForLabels += "}" -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&PodSandboxConfig{`, -+ `Metadata:` + strings.Replace(this.Metadata.String(), "PodSandboxMetadata", "PodSandboxMetadata", 1) + `,`, -+ `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, -+ `LogDirectory:` + fmt.Sprintf("%v", this.LogDirectory) + `,`, -+ `DnsConfig:` + strings.Replace(this.DnsConfig.String(), "DNSConfig", "DNSConfig", 1) + `,`, -+ `PortMappings:` + repeatedStringForPortMappings + `,`, -+ `Labels:` + mapStringForLabels + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `Linux:` + strings.Replace(this.Linux.String(), "LinuxPodSandboxConfig", "LinuxPodSandboxConfig", 1) + `,`, -+ `Windows:` + strings.Replace(this.Windows.String(), "WindowsPodSandboxConfig", "WindowsPodSandboxConfig", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RunPodSandboxRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RunPodSandboxRequest{`, -+ `Config:` + strings.Replace(this.Config.String(), "PodSandboxConfig", "PodSandboxConfig", 1) + `,`, -+ `RuntimeHandler:` + fmt.Sprintf("%v", this.RuntimeHandler) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RunPodSandboxResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RunPodSandboxResponse{`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *StopPodSandboxRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&StopPodSandboxRequest{`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *StopPodSandboxResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&StopPodSandboxResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RemovePodSandboxRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RemovePodSandboxRequest{`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RemovePodSandboxResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RemovePodSandboxResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxStatusRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PodSandboxStatusRequest{`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `Verbose:` + fmt.Sprintf("%v", this.Verbose) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodIP) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PodIP{`, -+ `Ip:` + fmt.Sprintf("%v", this.Ip) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxNetworkStatus) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForAdditionalIps := "[]*PodIP{" -+ for _, f := range this.AdditionalIps { -+ repeatedStringForAdditionalIps += strings.Replace(f.String(), "PodIP", "PodIP", 1) + "," -+ } -+ repeatedStringForAdditionalIps += "}" -+ s := strings.Join([]string{`&PodSandboxNetworkStatus{`, -+ `Ip:` + fmt.Sprintf("%v", this.Ip) + `,`, -+ `AdditionalIps:` + repeatedStringForAdditionalIps + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *Namespace) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&Namespace{`, -+ `Options:` + strings.Replace(this.Options.String(), "NamespaceOption", "NamespaceOption", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *LinuxPodSandboxStatus) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&LinuxPodSandboxStatus{`, -+ `Namespaces:` + strings.Replace(this.Namespaces.String(), "Namespace", "Namespace", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxStatus) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabels := make([]string, 0, len(this.Labels)) -+ for k := range this.Labels { -+ keysForLabels = append(keysForLabels, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) -+ mapStringForLabels := "map[string]string{" -+ for _, k := range keysForLabels { -+ mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) -+ } -+ mapStringForLabels += "}" -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&PodSandboxStatus{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `Metadata:` + strings.Replace(this.Metadata.String(), "PodSandboxMetadata", "PodSandboxMetadata", 1) + `,`, -+ `State:` + fmt.Sprintf("%v", this.State) + `,`, -+ `CreatedAt:` + fmt.Sprintf("%v", this.CreatedAt) + `,`, -+ `Network:` + strings.Replace(this.Network.String(), "PodSandboxNetworkStatus", "PodSandboxNetworkStatus", 1) + `,`, -+ `Linux:` + strings.Replace(this.Linux.String(), "LinuxPodSandboxStatus", "LinuxPodSandboxStatus", 1) + `,`, -+ `Labels:` + mapStringForLabels + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `RuntimeHandler:` + fmt.Sprintf("%v", this.RuntimeHandler) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxStatusResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForInfo := make([]string, 0, len(this.Info)) -+ for k := range this.Info { -+ keysForInfo = append(keysForInfo, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForInfo) -+ mapStringForInfo := "map[string]string{" -+ for _, k := range keysForInfo { -+ mapStringForInfo += fmt.Sprintf("%v: %v,", k, this.Info[k]) -+ } -+ mapStringForInfo += "}" -+ s := strings.Join([]string{`&PodSandboxStatusResponse{`, -+ `Status:` + strings.Replace(this.Status.String(), "PodSandboxStatus", "PodSandboxStatus", 1) + `,`, -+ `Info:` + mapStringForInfo + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxStateValue) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PodSandboxStateValue{`, -+ `State:` + fmt.Sprintf("%v", this.State) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxFilter) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabelSelector := make([]string, 0, len(this.LabelSelector)) -+ for k := range this.LabelSelector { -+ keysForLabelSelector = append(keysForLabelSelector, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabelSelector) -+ mapStringForLabelSelector := "map[string]string{" -+ for _, k := range keysForLabelSelector { -+ mapStringForLabelSelector += fmt.Sprintf("%v: %v,", k, this.LabelSelector[k]) -+ } -+ mapStringForLabelSelector += "}" -+ s := strings.Join([]string{`&PodSandboxFilter{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `State:` + strings.Replace(this.State.String(), "PodSandboxStateValue", "PodSandboxStateValue", 1) + `,`, -+ `LabelSelector:` + mapStringForLabelSelector + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListPodSandboxRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ListPodSandboxRequest{`, -+ `Filter:` + strings.Replace(this.Filter.String(), "PodSandboxFilter", "PodSandboxFilter", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandbox) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabels := make([]string, 0, len(this.Labels)) -+ for k := range this.Labels { -+ keysForLabels = append(keysForLabels, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) -+ mapStringForLabels := "map[string]string{" -+ for _, k := range keysForLabels { -+ mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) -+ } -+ mapStringForLabels += "}" -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&PodSandbox{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `Metadata:` + strings.Replace(this.Metadata.String(), "PodSandboxMetadata", "PodSandboxMetadata", 1) + `,`, -+ `State:` + fmt.Sprintf("%v", this.State) + `,`, -+ `CreatedAt:` + fmt.Sprintf("%v", this.CreatedAt) + `,`, -+ `Labels:` + mapStringForLabels + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `RuntimeHandler:` + fmt.Sprintf("%v", this.RuntimeHandler) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListPodSandboxResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForItems := "[]*PodSandbox{" -+ for _, f := range this.Items { -+ repeatedStringForItems += strings.Replace(f.String(), "PodSandbox", "PodSandbox", 1) + "," -+ } -+ repeatedStringForItems += "}" -+ s := strings.Join([]string{`&ListPodSandboxResponse{`, -+ `Items:` + repeatedStringForItems + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxStatsRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PodSandboxStatsRequest{`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxStatsResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PodSandboxStatsResponse{`, -+ `Stats:` + strings.Replace(this.Stats.String(), "PodSandboxStats", "PodSandboxStats", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxStatsFilter) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabelSelector := make([]string, 0, len(this.LabelSelector)) -+ for k := range this.LabelSelector { -+ keysForLabelSelector = append(keysForLabelSelector, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabelSelector) -+ mapStringForLabelSelector := "map[string]string{" -+ for _, k := range keysForLabelSelector { -+ mapStringForLabelSelector += fmt.Sprintf("%v: %v,", k, this.LabelSelector[k]) -+ } -+ mapStringForLabelSelector += "}" -+ s := strings.Join([]string{`&PodSandboxStatsFilter{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `LabelSelector:` + mapStringForLabelSelector + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListPodSandboxStatsRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ListPodSandboxStatsRequest{`, -+ `Filter:` + strings.Replace(this.Filter.String(), "PodSandboxStatsFilter", "PodSandboxStatsFilter", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListPodSandboxStatsResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForStats := "[]*PodSandboxStats{" -+ for _, f := range this.Stats { -+ repeatedStringForStats += strings.Replace(f.String(), "PodSandboxStats", "PodSandboxStats", 1) + "," -+ } -+ repeatedStringForStats += "}" -+ s := strings.Join([]string{`&ListPodSandboxStatsResponse{`, -+ `Stats:` + repeatedStringForStats + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxAttributes) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabels := make([]string, 0, len(this.Labels)) -+ for k := range this.Labels { -+ keysForLabels = append(keysForLabels, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) -+ mapStringForLabels := "map[string]string{" -+ for _, k := range keysForLabels { -+ mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) -+ } -+ mapStringForLabels += "}" -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&PodSandboxAttributes{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `Metadata:` + strings.Replace(this.Metadata.String(), "PodSandboxMetadata", "PodSandboxMetadata", 1) + `,`, -+ `Labels:` + mapStringForLabels + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PodSandboxStats) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PodSandboxStats{`, -+ `Attributes:` + strings.Replace(this.Attributes.String(), "PodSandboxAttributes", "PodSandboxAttributes", 1) + `,`, -+ `Linux:` + strings.Replace(this.Linux.String(), "LinuxPodSandboxStats", "LinuxPodSandboxStats", 1) + `,`, -+ `Windows:` + strings.Replace(this.Windows.String(), "WindowsPodSandboxStats", "WindowsPodSandboxStats", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *LinuxPodSandboxStats) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForContainers := "[]*ContainerStats{" -+ for _, f := range this.Containers { -+ repeatedStringForContainers += strings.Replace(f.String(), "ContainerStats", "ContainerStats", 1) + "," -+ } -+ repeatedStringForContainers += "}" -+ s := strings.Join([]string{`&LinuxPodSandboxStats{`, -+ `Cpu:` + strings.Replace(this.Cpu.String(), "CpuUsage", "CpuUsage", 1) + `,`, -+ `Memory:` + strings.Replace(this.Memory.String(), "MemoryUsage", "MemoryUsage", 1) + `,`, -+ `Network:` + strings.Replace(this.Network.String(), "NetworkUsage", "NetworkUsage", 1) + `,`, -+ `Process:` + strings.Replace(this.Process.String(), "ProcessUsage", "ProcessUsage", 1) + `,`, -+ `Containers:` + repeatedStringForContainers + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *WindowsPodSandboxStats) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&WindowsPodSandboxStats{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *NetworkUsage) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForInterfaces := "[]*NetworkInterfaceUsage{" -+ for _, f := range this.Interfaces { -+ repeatedStringForInterfaces += strings.Replace(f.String(), "NetworkInterfaceUsage", "NetworkInterfaceUsage", 1) + "," -+ } -+ repeatedStringForInterfaces += "}" -+ s := strings.Join([]string{`&NetworkUsage{`, -+ `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, -+ `DefaultInterface:` + strings.Replace(this.DefaultInterface.String(), "NetworkInterfaceUsage", "NetworkInterfaceUsage", 1) + `,`, -+ `Interfaces:` + repeatedStringForInterfaces + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *NetworkInterfaceUsage) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&NetworkInterfaceUsage{`, -+ `Name:` + fmt.Sprintf("%v", this.Name) + `,`, -+ `RxBytes:` + strings.Replace(this.RxBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `RxErrors:` + strings.Replace(this.RxErrors.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `TxBytes:` + strings.Replace(this.TxBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `TxErrors:` + strings.Replace(this.TxErrors.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ProcessUsage) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ProcessUsage{`, -+ `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, -+ `ProcessCount:` + strings.Replace(this.ProcessCount.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ImageSpec) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&ImageSpec{`, -+ `Image:` + fmt.Sprintf("%v", this.Image) + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *KeyValue) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&KeyValue{`, -+ `Key:` + fmt.Sprintf("%v", this.Key) + `,`, -+ `Value:` + fmt.Sprintf("%v", this.Value) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *LinuxContainerResources) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForHugepageLimits := "[]*HugepageLimit{" -+ for _, f := range this.HugepageLimits { -+ repeatedStringForHugepageLimits += strings.Replace(f.String(), "HugepageLimit", "HugepageLimit", 1) + "," -+ } -+ repeatedStringForHugepageLimits += "}" -+ keysForUnified := make([]string, 0, len(this.Unified)) -+ for k := range this.Unified { -+ keysForUnified = append(keysForUnified, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForUnified) -+ mapStringForUnified := "map[string]string{" -+ for _, k := range keysForUnified { -+ mapStringForUnified += fmt.Sprintf("%v: %v,", k, this.Unified[k]) -+ } -+ mapStringForUnified += "}" -+ s := strings.Join([]string{`&LinuxContainerResources{`, -+ `CpuPeriod:` + fmt.Sprintf("%v", this.CpuPeriod) + `,`, -+ `CpuQuota:` + fmt.Sprintf("%v", this.CpuQuota) + `,`, -+ `CpuShares:` + fmt.Sprintf("%v", this.CpuShares) + `,`, -+ `MemoryLimitInBytes:` + fmt.Sprintf("%v", this.MemoryLimitInBytes) + `,`, -+ `OomScoreAdj:` + fmt.Sprintf("%v", this.OomScoreAdj) + `,`, -+ `CpusetCpus:` + fmt.Sprintf("%v", this.CpusetCpus) + `,`, -+ `CpusetMems:` + fmt.Sprintf("%v", this.CpusetMems) + `,`, -+ `HugepageLimits:` + repeatedStringForHugepageLimits + `,`, -+ `Unified:` + mapStringForUnified + `,`, -+ `MemorySwapLimitInBytes:` + fmt.Sprintf("%v", this.MemorySwapLimitInBytes) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *HugepageLimit) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&HugepageLimit{`, -+ `PageSize:` + fmt.Sprintf("%v", this.PageSize) + `,`, -+ `Limit:` + fmt.Sprintf("%v", this.Limit) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *SELinuxOption) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&SELinuxOption{`, -+ `User:` + fmt.Sprintf("%v", this.User) + `,`, -+ `Role:` + fmt.Sprintf("%v", this.Role) + `,`, -+ `Type:` + fmt.Sprintf("%v", this.Type) + `,`, -+ `Level:` + fmt.Sprintf("%v", this.Level) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *Capability) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&Capability{`, -+ `AddCapabilities:` + fmt.Sprintf("%v", this.AddCapabilities) + `,`, -+ `DropCapabilities:` + fmt.Sprintf("%v", this.DropCapabilities) + `,`, -+ `AddAmbientCapabilities:` + fmt.Sprintf("%v", this.AddAmbientCapabilities) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *LinuxContainerSecurityContext) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&LinuxContainerSecurityContext{`, -+ `Capabilities:` + strings.Replace(this.Capabilities.String(), "Capability", "Capability", 1) + `,`, -+ `Privileged:` + fmt.Sprintf("%v", this.Privileged) + `,`, -+ `NamespaceOptions:` + strings.Replace(this.NamespaceOptions.String(), "NamespaceOption", "NamespaceOption", 1) + `,`, -+ `SelinuxOptions:` + strings.Replace(this.SelinuxOptions.String(), "SELinuxOption", "SELinuxOption", 1) + `,`, -+ `RunAsUser:` + strings.Replace(this.RunAsUser.String(), "Int64Value", "Int64Value", 1) + `,`, -+ `RunAsUsername:` + fmt.Sprintf("%v", this.RunAsUsername) + `,`, -+ `ReadonlyRootfs:` + fmt.Sprintf("%v", this.ReadonlyRootfs) + `,`, -+ `SupplementalGroups:` + fmt.Sprintf("%v", this.SupplementalGroups) + `,`, -+ `ApparmorProfile:` + fmt.Sprintf("%v", this.ApparmorProfile) + `,`, -+ `SeccompProfilePath:` + fmt.Sprintf("%v", this.SeccompProfilePath) + `,`, -+ `NoNewPrivs:` + fmt.Sprintf("%v", this.NoNewPrivs) + `,`, -+ `RunAsGroup:` + strings.Replace(this.RunAsGroup.String(), "Int64Value", "Int64Value", 1) + `,`, -+ `MaskedPaths:` + fmt.Sprintf("%v", this.MaskedPaths) + `,`, -+ `ReadonlyPaths:` + fmt.Sprintf("%v", this.ReadonlyPaths) + `,`, -+ `Seccomp:` + strings.Replace(this.Seccomp.String(), "SecurityProfile", "SecurityProfile", 1) + `,`, -+ `Apparmor:` + strings.Replace(this.Apparmor.String(), "SecurityProfile", "SecurityProfile", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *LinuxContainerConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&LinuxContainerConfig{`, -+ `Resources:` + strings.Replace(this.Resources.String(), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, -+ `SecurityContext:` + strings.Replace(this.SecurityContext.String(), "LinuxContainerSecurityContext", "LinuxContainerSecurityContext", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *WindowsSandboxSecurityContext) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&WindowsSandboxSecurityContext{`, -+ `RunAsUsername:` + fmt.Sprintf("%v", this.RunAsUsername) + `,`, -+ `CredentialSpec:` + fmt.Sprintf("%v", this.CredentialSpec) + `,`, -+ `HostProcess:` + fmt.Sprintf("%v", this.HostProcess) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *WindowsPodSandboxConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&WindowsPodSandboxConfig{`, -+ `SecurityContext:` + strings.Replace(this.SecurityContext.String(), "WindowsSandboxSecurityContext", "WindowsSandboxSecurityContext", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *WindowsContainerSecurityContext) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&WindowsContainerSecurityContext{`, -+ `RunAsUsername:` + fmt.Sprintf("%v", this.RunAsUsername) + `,`, -+ `CredentialSpec:` + fmt.Sprintf("%v", this.CredentialSpec) + `,`, -+ `HostProcess:` + fmt.Sprintf("%v", this.HostProcess) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *WindowsContainerConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&WindowsContainerConfig{`, -+ `Resources:` + strings.Replace(this.Resources.String(), "WindowsContainerResources", "WindowsContainerResources", 1) + `,`, -+ `SecurityContext:` + strings.Replace(this.SecurityContext.String(), "WindowsContainerSecurityContext", "WindowsContainerSecurityContext", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *WindowsContainerResources) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&WindowsContainerResources{`, -+ `CpuShares:` + fmt.Sprintf("%v", this.CpuShares) + `,`, -+ `CpuCount:` + fmt.Sprintf("%v", this.CpuCount) + `,`, -+ `CpuMaximum:` + fmt.Sprintf("%v", this.CpuMaximum) + `,`, -+ `MemoryLimitInBytes:` + fmt.Sprintf("%v", this.MemoryLimitInBytes) + `,`, -+ `RootfsSizeInBytes:` + fmt.Sprintf("%v", this.RootfsSizeInBytes) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerMetadata) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ContainerMetadata{`, -+ `Name:` + fmt.Sprintf("%v", this.Name) + `,`, -+ `Attempt:` + fmt.Sprintf("%v", this.Attempt) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *Device) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&Device{`, -+ `ContainerPath:` + fmt.Sprintf("%v", this.ContainerPath) + `,`, -+ `HostPath:` + fmt.Sprintf("%v", this.HostPath) + `,`, -+ `Permissions:` + fmt.Sprintf("%v", this.Permissions) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForEnvs := "[]*KeyValue{" -+ for _, f := range this.Envs { -+ repeatedStringForEnvs += strings.Replace(f.String(), "KeyValue", "KeyValue", 1) + "," -+ } -+ repeatedStringForEnvs += "}" -+ repeatedStringForMounts := "[]*Mount{" -+ for _, f := range this.Mounts { -+ repeatedStringForMounts += strings.Replace(f.String(), "Mount", "Mount", 1) + "," -+ } -+ repeatedStringForMounts += "}" -+ repeatedStringForDevices := "[]*Device{" -+ for _, f := range this.Devices { -+ repeatedStringForDevices += strings.Replace(f.String(), "Device", "Device", 1) + "," -+ } -+ repeatedStringForDevices += "}" -+ keysForLabels := make([]string, 0, len(this.Labels)) -+ for k := range this.Labels { -+ keysForLabels = append(keysForLabels, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) -+ mapStringForLabels := "map[string]string{" -+ for _, k := range keysForLabels { -+ mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) -+ } -+ mapStringForLabels += "}" -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&ContainerConfig{`, -+ `Metadata:` + strings.Replace(this.Metadata.String(), "ContainerMetadata", "ContainerMetadata", 1) + `,`, -+ `Image:` + strings.Replace(this.Image.String(), "ImageSpec", "ImageSpec", 1) + `,`, -+ `Command:` + fmt.Sprintf("%v", this.Command) + `,`, -+ `Args:` + fmt.Sprintf("%v", this.Args) + `,`, -+ `WorkingDir:` + fmt.Sprintf("%v", this.WorkingDir) + `,`, -+ `Envs:` + repeatedStringForEnvs + `,`, -+ `Mounts:` + repeatedStringForMounts + `,`, -+ `Devices:` + repeatedStringForDevices + `,`, -+ `Labels:` + mapStringForLabels + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `LogPath:` + fmt.Sprintf("%v", this.LogPath) + `,`, -+ `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, -+ `StdinOnce:` + fmt.Sprintf("%v", this.StdinOnce) + `,`, -+ `Tty:` + fmt.Sprintf("%v", this.Tty) + `,`, -+ `Linux:` + strings.Replace(this.Linux.String(), "LinuxContainerConfig", "LinuxContainerConfig", 1) + `,`, -+ `Windows:` + strings.Replace(this.Windows.String(), "WindowsContainerConfig", "WindowsContainerConfig", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *CreateContainerRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&CreateContainerRequest{`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `Config:` + strings.Replace(this.Config.String(), "ContainerConfig", "ContainerConfig", 1) + `,`, -+ `SandboxConfig:` + strings.Replace(this.SandboxConfig.String(), "PodSandboxConfig", "PodSandboxConfig", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *CreateContainerResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&CreateContainerResponse{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *StartContainerRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&StartContainerRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *StartContainerResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&StartContainerResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *StopContainerRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&StopContainerRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `Timeout:` + fmt.Sprintf("%v", this.Timeout) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *StopContainerResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&StopContainerResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RemoveContainerRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RemoveContainerRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RemoveContainerResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RemoveContainerResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerStateValue) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ContainerStateValue{`, -+ `State:` + fmt.Sprintf("%v", this.State) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerFilter) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabelSelector := make([]string, 0, len(this.LabelSelector)) -+ for k := range this.LabelSelector { -+ keysForLabelSelector = append(keysForLabelSelector, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabelSelector) -+ mapStringForLabelSelector := "map[string]string{" -+ for _, k := range keysForLabelSelector { -+ mapStringForLabelSelector += fmt.Sprintf("%v: %v,", k, this.LabelSelector[k]) -+ } -+ mapStringForLabelSelector += "}" -+ s := strings.Join([]string{`&ContainerFilter{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `State:` + strings.Replace(this.State.String(), "ContainerStateValue", "ContainerStateValue", 1) + `,`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `LabelSelector:` + mapStringForLabelSelector + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListContainersRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ListContainersRequest{`, -+ `Filter:` + strings.Replace(this.Filter.String(), "ContainerFilter", "ContainerFilter", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *Container) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabels := make([]string, 0, len(this.Labels)) -+ for k := range this.Labels { -+ keysForLabels = append(keysForLabels, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) -+ mapStringForLabels := "map[string]string{" -+ for _, k := range keysForLabels { -+ mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) -+ } -+ mapStringForLabels += "}" -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&Container{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `Metadata:` + strings.Replace(this.Metadata.String(), "ContainerMetadata", "ContainerMetadata", 1) + `,`, -+ `Image:` + strings.Replace(this.Image.String(), "ImageSpec", "ImageSpec", 1) + `,`, -+ `ImageRef:` + fmt.Sprintf("%v", this.ImageRef) + `,`, -+ `State:` + fmt.Sprintf("%v", this.State) + `,`, -+ `CreatedAt:` + fmt.Sprintf("%v", this.CreatedAt) + `,`, -+ `Labels:` + mapStringForLabels + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListContainersResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForContainers := "[]*Container{" -+ for _, f := range this.Containers { -+ repeatedStringForContainers += strings.Replace(f.String(), "Container", "Container", 1) + "," -+ } -+ repeatedStringForContainers += "}" -+ s := strings.Join([]string{`&ListContainersResponse{`, -+ `Containers:` + repeatedStringForContainers + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerStatusRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ContainerStatusRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `Verbose:` + fmt.Sprintf("%v", this.Verbose) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerStatus) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForMounts := "[]*Mount{" -+ for _, f := range this.Mounts { -+ repeatedStringForMounts += strings.Replace(f.String(), "Mount", "Mount", 1) + "," -+ } -+ repeatedStringForMounts += "}" -+ keysForLabels := make([]string, 0, len(this.Labels)) -+ for k := range this.Labels { -+ keysForLabels = append(keysForLabels, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) -+ mapStringForLabels := "map[string]string{" -+ for _, k := range keysForLabels { -+ mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) -+ } -+ mapStringForLabels += "}" -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&ContainerStatus{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `Metadata:` + strings.Replace(this.Metadata.String(), "ContainerMetadata", "ContainerMetadata", 1) + `,`, -+ `State:` + fmt.Sprintf("%v", this.State) + `,`, -+ `CreatedAt:` + fmt.Sprintf("%v", this.CreatedAt) + `,`, -+ `StartedAt:` + fmt.Sprintf("%v", this.StartedAt) + `,`, -+ `FinishedAt:` + fmt.Sprintf("%v", this.FinishedAt) + `,`, -+ `ExitCode:` + fmt.Sprintf("%v", this.ExitCode) + `,`, -+ `Image:` + strings.Replace(this.Image.String(), "ImageSpec", "ImageSpec", 1) + `,`, -+ `ImageRef:` + fmt.Sprintf("%v", this.ImageRef) + `,`, -+ `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, -+ `Message:` + fmt.Sprintf("%v", this.Message) + `,`, -+ `Labels:` + mapStringForLabels + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `Mounts:` + repeatedStringForMounts + `,`, -+ `LogPath:` + fmt.Sprintf("%v", this.LogPath) + `,`, -+ `Resources:` + strings.Replace(this.Resources.String(), "ContainerResources", "ContainerResources", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerStatusResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForInfo := make([]string, 0, len(this.Info)) -+ for k := range this.Info { -+ keysForInfo = append(keysForInfo, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForInfo) -+ mapStringForInfo := "map[string]string{" -+ for _, k := range keysForInfo { -+ mapStringForInfo += fmt.Sprintf("%v: %v,", k, this.Info[k]) -+ } -+ mapStringForInfo += "}" -+ s := strings.Join([]string{`&ContainerStatusResponse{`, -+ `Status:` + strings.Replace(this.Status.String(), "ContainerStatus", "ContainerStatus", 1) + `,`, -+ `Info:` + mapStringForInfo + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerResources) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ContainerResources{`, -+ `Linux:` + strings.Replace(this.Linux.String(), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, -+ `Windows:` + strings.Replace(this.Windows.String(), "WindowsContainerResources", "WindowsContainerResources", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *UpdateContainerResourcesRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&UpdateContainerResourcesRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `Linux:` + strings.Replace(this.Linux.String(), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, -+ `Windows:` + strings.Replace(this.Windows.String(), "WindowsContainerResources", "WindowsContainerResources", 1) + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *UpdateContainerResourcesResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&UpdateContainerResourcesResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ExecSyncRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ExecSyncRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `Cmd:` + fmt.Sprintf("%v", this.Cmd) + `,`, -+ `Timeout:` + fmt.Sprintf("%v", this.Timeout) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ExecSyncResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ExecSyncResponse{`, -+ `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, -+ `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, -+ `ExitCode:` + fmt.Sprintf("%v", this.ExitCode) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ExecRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ExecRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `Cmd:` + fmt.Sprintf("%v", this.Cmd) + `,`, -+ `Tty:` + fmt.Sprintf("%v", this.Tty) + `,`, -+ `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, -+ `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, -+ `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ExecResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ExecResponse{`, -+ `Url:` + fmt.Sprintf("%v", this.Url) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *AttachRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&AttachRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, -+ `Tty:` + fmt.Sprintf("%v", this.Tty) + `,`, -+ `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, -+ `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *AttachResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&AttachResponse{`, -+ `Url:` + fmt.Sprintf("%v", this.Url) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PortForwardRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PortForwardRequest{`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `Port:` + fmt.Sprintf("%v", this.Port) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PortForwardResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PortForwardResponse{`, -+ `Url:` + fmt.Sprintf("%v", this.Url) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ImageFilter) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ImageFilter{`, -+ `Image:` + strings.Replace(this.Image.String(), "ImageSpec", "ImageSpec", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListImagesRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ListImagesRequest{`, -+ `Filter:` + strings.Replace(this.Filter.String(), "ImageFilter", "ImageFilter", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *Image) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&Image{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `RepoTags:` + fmt.Sprintf("%v", this.RepoTags) + `,`, -+ `RepoDigests:` + fmt.Sprintf("%v", this.RepoDigests) + `,`, -+ `Size_:` + fmt.Sprintf("%v", this.Size_) + `,`, -+ `Uid:` + strings.Replace(this.Uid.String(), "Int64Value", "Int64Value", 1) + `,`, -+ `Username:` + fmt.Sprintf("%v", this.Username) + `,`, -+ `Spec:` + strings.Replace(this.Spec.String(), "ImageSpec", "ImageSpec", 1) + `,`, -+ `Pinned:` + fmt.Sprintf("%v", this.Pinned) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListImagesResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForImages := "[]*Image{" -+ for _, f := range this.Images { -+ repeatedStringForImages += strings.Replace(f.String(), "Image", "Image", 1) + "," -+ } -+ repeatedStringForImages += "}" -+ s := strings.Join([]string{`&ListImagesResponse{`, -+ `Images:` + repeatedStringForImages + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ImageStatusRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ImageStatusRequest{`, -+ `Image:` + strings.Replace(this.Image.String(), "ImageSpec", "ImageSpec", 1) + `,`, -+ `Verbose:` + fmt.Sprintf("%v", this.Verbose) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ImageStatusResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForInfo := make([]string, 0, len(this.Info)) -+ for k := range this.Info { -+ keysForInfo = append(keysForInfo, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForInfo) -+ mapStringForInfo := "map[string]string{" -+ for _, k := range keysForInfo { -+ mapStringForInfo += fmt.Sprintf("%v: %v,", k, this.Info[k]) -+ } -+ mapStringForInfo += "}" -+ s := strings.Join([]string{`&ImageStatusResponse{`, -+ `Image:` + strings.Replace(this.Image.String(), "Image", "Image", 1) + `,`, -+ `Info:` + mapStringForInfo + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *AuthConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&AuthConfig{`, -+ `Username:` + fmt.Sprintf("%v", this.Username) + `,`, -+ `Password:` + fmt.Sprintf("%v", this.Password) + `,`, -+ `Auth:` + fmt.Sprintf("%v", this.Auth) + `,`, -+ `ServerAddress:` + fmt.Sprintf("%v", this.ServerAddress) + `,`, -+ `IdentityToken:` + fmt.Sprintf("%v", this.IdentityToken) + `,`, -+ `RegistryToken:` + fmt.Sprintf("%v", this.RegistryToken) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PullImageRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PullImageRequest{`, -+ `Image:` + strings.Replace(this.Image.String(), "ImageSpec", "ImageSpec", 1) + `,`, -+ `Auth:` + strings.Replace(this.Auth.String(), "AuthConfig", "AuthConfig", 1) + `,`, -+ `SandboxConfig:` + strings.Replace(this.SandboxConfig.String(), "PodSandboxConfig", "PodSandboxConfig", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *PullImageResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&PullImageResponse{`, -+ `ImageRef:` + fmt.Sprintf("%v", this.ImageRef) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RemoveImageRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RemoveImageRequest{`, -+ `Image:` + strings.Replace(this.Image.String(), "ImageSpec", "ImageSpec", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RemoveImageResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RemoveImageResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *NetworkConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&NetworkConfig{`, -+ `PodCidr:` + fmt.Sprintf("%v", this.PodCidr) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RuntimeConfig) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RuntimeConfig{`, -+ `NetworkConfig:` + strings.Replace(this.NetworkConfig.String(), "NetworkConfig", "NetworkConfig", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *UpdateRuntimeConfigRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&UpdateRuntimeConfigRequest{`, -+ `RuntimeConfig:` + strings.Replace(this.RuntimeConfig.String(), "RuntimeConfig", "RuntimeConfig", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *UpdateRuntimeConfigResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&UpdateRuntimeConfigResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RuntimeCondition) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&RuntimeCondition{`, -+ `Type:` + fmt.Sprintf("%v", this.Type) + `,`, -+ `Status:` + fmt.Sprintf("%v", this.Status) + `,`, -+ `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, -+ `Message:` + fmt.Sprintf("%v", this.Message) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *RuntimeStatus) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForConditions := "[]*RuntimeCondition{" -+ for _, f := range this.Conditions { -+ repeatedStringForConditions += strings.Replace(f.String(), "RuntimeCondition", "RuntimeCondition", 1) + "," -+ } -+ repeatedStringForConditions += "}" -+ s := strings.Join([]string{`&RuntimeStatus{`, -+ `Conditions:` + repeatedStringForConditions + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *StatusRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&StatusRequest{`, -+ `Verbose:` + fmt.Sprintf("%v", this.Verbose) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *StatusResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForInfo := make([]string, 0, len(this.Info)) -+ for k := range this.Info { -+ keysForInfo = append(keysForInfo, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForInfo) -+ mapStringForInfo := "map[string]string{" -+ for _, k := range keysForInfo { -+ mapStringForInfo += fmt.Sprintf("%v: %v,", k, this.Info[k]) -+ } -+ mapStringForInfo += "}" -+ s := strings.Join([]string{`&StatusResponse{`, -+ `Status:` + strings.Replace(this.Status.String(), "RuntimeStatus", "RuntimeStatus", 1) + `,`, -+ `Info:` + mapStringForInfo + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ImageFsInfoRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ImageFsInfoRequest{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *UInt64Value) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&UInt64Value{`, -+ `Value:` + fmt.Sprintf("%v", this.Value) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *FilesystemIdentifier) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&FilesystemIdentifier{`, -+ `Mountpoint:` + fmt.Sprintf("%v", this.Mountpoint) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *FilesystemUsage) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&FilesystemUsage{`, -+ `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, -+ `FsId:` + strings.Replace(this.FsId.String(), "FilesystemIdentifier", "FilesystemIdentifier", 1) + `,`, -+ `UsedBytes:` + strings.Replace(this.UsedBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `InodesUsed:` + strings.Replace(this.InodesUsed.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ImageFsInfoResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForImageFilesystems := "[]*FilesystemUsage{" -+ for _, f := range this.ImageFilesystems { -+ repeatedStringForImageFilesystems += strings.Replace(f.String(), "FilesystemUsage", "FilesystemUsage", 1) + "," -+ } -+ repeatedStringForImageFilesystems += "}" -+ s := strings.Join([]string{`&ImageFsInfoResponse{`, -+ `ImageFilesystems:` + repeatedStringForImageFilesystems + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerStatsRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ContainerStatsRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerStatsResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ContainerStatsResponse{`, -+ `Stats:` + strings.Replace(this.Stats.String(), "ContainerStats", "ContainerStats", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListContainerStatsRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ListContainerStatsRequest{`, -+ `Filter:` + strings.Replace(this.Filter.String(), "ContainerStatsFilter", "ContainerStatsFilter", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerStatsFilter) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabelSelector := make([]string, 0, len(this.LabelSelector)) -+ for k := range this.LabelSelector { -+ keysForLabelSelector = append(keysForLabelSelector, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabelSelector) -+ mapStringForLabelSelector := "map[string]string{" -+ for _, k := range keysForLabelSelector { -+ mapStringForLabelSelector += fmt.Sprintf("%v: %v,", k, this.LabelSelector[k]) -+ } -+ mapStringForLabelSelector += "}" -+ s := strings.Join([]string{`&ContainerStatsFilter{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, -+ `LabelSelector:` + mapStringForLabelSelector + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ListContainerStatsResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ repeatedStringForStats := "[]*ContainerStats{" -+ for _, f := range this.Stats { -+ repeatedStringForStats += strings.Replace(f.String(), "ContainerStats", "ContainerStats", 1) + "," -+ } -+ repeatedStringForStats += "}" -+ s := strings.Join([]string{`&ListContainerStatsResponse{`, -+ `Stats:` + repeatedStringForStats + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerAttributes) String() string { -+ if this == nil { -+ return "nil" -+ } -+ keysForLabels := make([]string, 0, len(this.Labels)) -+ for k := range this.Labels { -+ keysForLabels = append(keysForLabels, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) -+ mapStringForLabels := "map[string]string{" -+ for _, k := range keysForLabels { -+ mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) -+ } -+ mapStringForLabels += "}" -+ keysForAnnotations := make([]string, 0, len(this.Annotations)) -+ for k := range this.Annotations { -+ keysForAnnotations = append(keysForAnnotations, k) -+ } -+ github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) -+ mapStringForAnnotations := "map[string]string{" -+ for _, k := range keysForAnnotations { -+ mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) -+ } -+ mapStringForAnnotations += "}" -+ s := strings.Join([]string{`&ContainerAttributes{`, -+ `Id:` + fmt.Sprintf("%v", this.Id) + `,`, -+ `Metadata:` + strings.Replace(this.Metadata.String(), "ContainerMetadata", "ContainerMetadata", 1) + `,`, -+ `Labels:` + mapStringForLabels + `,`, -+ `Annotations:` + mapStringForAnnotations + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerStats) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ContainerStats{`, -+ `Attributes:` + strings.Replace(this.Attributes.String(), "ContainerAttributes", "ContainerAttributes", 1) + `,`, -+ `Cpu:` + strings.Replace(this.Cpu.String(), "CpuUsage", "CpuUsage", 1) + `,`, -+ `Memory:` + strings.Replace(this.Memory.String(), "MemoryUsage", "MemoryUsage", 1) + `,`, -+ `WritableLayer:` + strings.Replace(this.WritableLayer.String(), "FilesystemUsage", "FilesystemUsage", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *CpuUsage) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&CpuUsage{`, -+ `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, -+ `UsageCoreNanoSeconds:` + strings.Replace(this.UsageCoreNanoSeconds.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `UsageNanoCores:` + strings.Replace(this.UsageNanoCores.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *MemoryUsage) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&MemoryUsage{`, -+ `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, -+ `WorkingSetBytes:` + strings.Replace(this.WorkingSetBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `AvailableBytes:` + strings.Replace(this.AvailableBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `UsageBytes:` + strings.Replace(this.UsageBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `RssBytes:` + strings.Replace(this.RssBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `PageFaults:` + strings.Replace(this.PageFaults.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `MajorPageFaults:` + strings.Replace(this.MajorPageFaults.String(), "UInt64Value", "UInt64Value", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ReopenContainerLogRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ReopenContainerLogRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ReopenContainerLogResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ReopenContainerLogResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *CheckpointContainerRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&CheckpointContainerRequest{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `Location:` + fmt.Sprintf("%v", this.Location) + `,`, -+ `Timeout:` + fmt.Sprintf("%v", this.Timeout) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *CheckpointContainerResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&CheckpointContainerResponse{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *GetEventsRequest) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&GetEventsRequest{`, -+ `}`, -+ }, "") -+ return s -+} -+func (this *ContainerEventResponse) String() string { -+ if this == nil { -+ return "nil" -+ } -+ s := strings.Join([]string{`&ContainerEventResponse{`, -+ `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, -+ `ContainerEventType:` + fmt.Sprintf("%v", this.ContainerEventType) + `,`, -+ `CreatedAt:` + fmt.Sprintf("%v", this.CreatedAt) + `,`, -+ `PodSandboxMetadata:` + strings.Replace(this.PodSandboxMetadata.String(), "PodSandboxMetadata", "PodSandboxMetadata", 1) + `,`, -+ `}`, -+ }, "") -+ return s -+} -+func valueToStringApi(v interface{}) string { -+ rv := reflect.ValueOf(v) -+ if rv.IsNil() { -+ return "nil" -+ } -+ pv := reflect.Indirect(rv).Interface() -+ return fmt.Sprintf("*%v", pv) -+} -+func (m *VersionRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: VersionRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: VersionRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Version = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *VersionResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: VersionResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: VersionResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Version = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RuntimeName", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RuntimeName = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RuntimeVersion", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RuntimeVersion = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RuntimeApiVersion", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RuntimeApiVersion = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *DNSConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: DNSConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: DNSConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Servers", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Servers = append(m.Servers, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Searches", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Searches = append(m.Searches, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Options = append(m.Options, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PortMapping) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PortMapping: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PortMapping: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) -+ } -+ m.Protocol = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Protocol |= Protocol(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerPort", wireType) -+ } -+ m.ContainerPort = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.ContainerPort |= int32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field HostPort", wireType) -+ } -+ m.HostPort = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.HostPort |= int32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field HostIp", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.HostIp = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *Mount) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: Mount: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: Mount: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerPath", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerPath = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field HostPath", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.HostPath = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Readonly", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Readonly = bool(v != 0) -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SelinuxRelabel", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.SelinuxRelabel = bool(v != 0) -+ case 5: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Propagation", wireType) -+ } -+ m.Propagation = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Propagation |= MountPropagation(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *IDMapping) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: IDMapping: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: IDMapping: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field HostId", wireType) -+ } -+ m.HostId = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.HostId |= uint32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ m.ContainerId = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.ContainerId |= uint32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Length", wireType) -+ } -+ m.Length = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Length |= uint32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *UserNamespace) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: UserNamespace: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: UserNamespace: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) -+ } -+ m.Mode = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Mode |= NamespaceMode(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Uids", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Uids = append(m.Uids, &IDMapping{}) -+ if err := m.Uids[len(m.Uids)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Gids", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Gids = append(m.Gids, &IDMapping{}) -+ if err := m.Gids[len(m.Gids)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *NamespaceOption) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: NamespaceOption: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: NamespaceOption: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) -+ } -+ m.Network = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Network |= NamespaceMode(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType) -+ } -+ m.Pid = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Pid |= NamespaceMode(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Ipc", wireType) -+ } -+ m.Ipc = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Ipc |= NamespaceMode(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field TargetId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.TargetId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field UsernsOptions", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.UsernsOptions == nil { -+ m.UsernsOptions = &UserNamespace{} -+ } -+ if err := m.UsernsOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *Int64Value) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: Int64Value: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: Int64Value: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) -+ } -+ m.Value = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Value |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *LinuxSandboxSecurityContext) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: LinuxSandboxSecurityContext: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: LinuxSandboxSecurityContext: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field NamespaceOptions", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.NamespaceOptions == nil { -+ m.NamespaceOptions = &NamespaceOption{} -+ } -+ if err := m.NamespaceOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SelinuxOptions", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.SelinuxOptions == nil { -+ m.SelinuxOptions = &SELinuxOption{} -+ } -+ if err := m.SelinuxOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.RunAsUser == nil { -+ m.RunAsUser = &Int64Value{} -+ } -+ if err := m.RunAsUser.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ReadonlyRootfs", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.ReadonlyRootfs = bool(v != 0) -+ case 5: -+ if wireType == 0 { -+ var v int64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.SupplementalGroups = append(m.SupplementalGroups, v) -+ } else if wireType == 2 { -+ var packedLen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ packedLen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if packedLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + packedLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ var elementCount int -+ var count int -+ for _, integer := range dAtA[iNdEx:postIndex] { -+ if integer < 128 { -+ count++ -+ } -+ } -+ elementCount = count -+ if elementCount != 0 && len(m.SupplementalGroups) == 0 { -+ m.SupplementalGroups = make([]int64, 0, elementCount) -+ } -+ for iNdEx < postIndex { -+ var v int64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.SupplementalGroups = append(m.SupplementalGroups, v) -+ } -+ } else { -+ return fmt.Errorf("proto: wrong wireType = %d for field SupplementalGroups", wireType) -+ } -+ case 6: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Privileged", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Privileged = bool(v != 0) -+ case 7: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SeccompProfilePath", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.SeccompProfilePath = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 8: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsGroup", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.RunAsGroup == nil { -+ m.RunAsGroup = &Int64Value{} -+ } -+ if err := m.RunAsGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 9: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Seccomp", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Seccomp == nil { -+ m.Seccomp = &SecurityProfile{} -+ } -+ if err := m.Seccomp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 10: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Apparmor", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Apparmor == nil { -+ m.Apparmor = &SecurityProfile{} -+ } -+ if err := m.Apparmor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *SecurityProfile) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: SecurityProfile: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: SecurityProfile: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ProfileType", wireType) -+ } -+ m.ProfileType = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.ProfileType |= SecurityProfile_ProfileType(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field LocalhostRef", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.LocalhostRef = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *LinuxPodSandboxConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: LinuxPodSandboxConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: LinuxPodSandboxConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CgroupParent", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.CgroupParent = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.SecurityContext == nil { -+ m.SecurityContext = &LinuxSandboxSecurityContext{} -+ } -+ if err := m.SecurityContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Sysctls", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Sysctls == nil { -+ m.Sysctls = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Sysctls[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Overhead", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Overhead == nil { -+ m.Overhead = &LinuxContainerResources{} -+ } -+ if err := m.Overhead.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Resources == nil { -+ m.Resources = &LinuxContainerResources{} -+ } -+ if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxMetadata) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxMetadata: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxMetadata: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Name = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Uid", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Uid = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Namespace = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Attempt", wireType) -+ } -+ m.Attempt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Attempt |= uint32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Metadata == nil { -+ m.Metadata = &PodSandboxMetadata{} -+ } -+ if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Hostname = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field LogDirectory", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.LogDirectory = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field DnsConfig", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.DnsConfig == nil { -+ m.DnsConfig = &DNSConfig{} -+ } -+ if err := m.DnsConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PortMappings", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PortMappings = append(m.PortMappings, &PortMapping{}) -+ if err := m.PortMappings[len(m.PortMappings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Labels == nil { -+ m.Labels = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Labels[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 7: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 8: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Linux", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Linux == nil { -+ m.Linux = &LinuxPodSandboxConfig{} -+ } -+ if err := m.Linux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 9: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Windows", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Windows == nil { -+ m.Windows = &WindowsPodSandboxConfig{} -+ } -+ if err := m.Windows.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RunPodSandboxRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RunPodSandboxRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RunPodSandboxRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Config == nil { -+ m.Config = &PodSandboxConfig{} -+ } -+ if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RuntimeHandler", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RuntimeHandler = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RunPodSandboxResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RunPodSandboxResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RunPodSandboxResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *StopPodSandboxRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: StopPodSandboxRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: StopPodSandboxRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *StopPodSandboxResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: StopPodSandboxResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: StopPodSandboxResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RemovePodSandboxRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RemovePodSandboxRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RemovePodSandboxRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RemovePodSandboxResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RemovePodSandboxResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RemovePodSandboxResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxStatusRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxStatusRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Verbose = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodIP) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodIP: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodIP: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Ip", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Ip = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxNetworkStatus) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxNetworkStatus: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxNetworkStatus: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Ip", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Ip = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field AdditionalIps", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.AdditionalIps = append(m.AdditionalIps, &PodIP{}) -+ if err := m.AdditionalIps[len(m.AdditionalIps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *Namespace) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: Namespace: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: Namespace: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Options == nil { -+ m.Options = &NamespaceOption{} -+ } -+ if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *LinuxPodSandboxStatus) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: LinuxPodSandboxStatus: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: LinuxPodSandboxStatus: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Namespaces", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Namespaces == nil { -+ m.Namespaces = &Namespace{} -+ } -+ if err := m.Namespaces.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxStatus) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxStatus: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxStatus: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Metadata == nil { -+ m.Metadata = &PodSandboxMetadata{} -+ } -+ if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) -+ } -+ m.State = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.State |= PodSandboxState(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) -+ } -+ m.CreatedAt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CreatedAt |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Network == nil { -+ m.Network = &PodSandboxNetworkStatus{} -+ } -+ if err := m.Network.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Linux", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Linux == nil { -+ m.Linux = &LinuxPodSandboxStatus{} -+ } -+ if err := m.Linux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 7: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Labels == nil { -+ m.Labels = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Labels[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 8: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 9: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RuntimeHandler", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RuntimeHandler = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxStatusResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxStatusResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Status == nil { -+ m.Status = &PodSandboxStatus{} -+ } -+ if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Info == nil { -+ m.Info = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Info[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxStateValue) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxStateValue: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxStateValue: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) -+ } -+ m.State = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.State |= PodSandboxState(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxFilter) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxFilter: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxFilter: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.State == nil { -+ m.State = &PodSandboxStateValue{} -+ } -+ if err := m.State.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.LabelSelector == nil { -+ m.LabelSelector = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.LabelSelector[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListPodSandboxRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListPodSandboxRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListPodSandboxRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Filter == nil { -+ m.Filter = &PodSandboxFilter{} -+ } -+ if err := m.Filter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandbox) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandbox: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandbox: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Metadata == nil { -+ m.Metadata = &PodSandboxMetadata{} -+ } -+ if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) -+ } -+ m.State = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.State |= PodSandboxState(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) -+ } -+ m.CreatedAt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CreatedAt |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Labels == nil { -+ m.Labels = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Labels[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 7: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RuntimeHandler", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RuntimeHandler = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListPodSandboxResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListPodSandboxResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListPodSandboxResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Items = append(m.Items, &PodSandbox{}) -+ if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxStatsRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxStatsRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxStatsResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxStatsResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxStatsResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Stats == nil { -+ m.Stats = &PodSandboxStats{} -+ } -+ if err := m.Stats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxStatsFilter) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxStatsFilter: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxStatsFilter: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.LabelSelector == nil { -+ m.LabelSelector = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.LabelSelector[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListPodSandboxStatsRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListPodSandboxStatsRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListPodSandboxStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Filter == nil { -+ m.Filter = &PodSandboxStatsFilter{} -+ } -+ if err := m.Filter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListPodSandboxStatsResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListPodSandboxStatsResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListPodSandboxStatsResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Stats = append(m.Stats, &PodSandboxStats{}) -+ if err := m.Stats[len(m.Stats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxAttributes) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxAttributes: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxAttributes: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Metadata == nil { -+ m.Metadata = &PodSandboxMetadata{} -+ } -+ if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Labels == nil { -+ m.Labels = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Labels[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PodSandboxStats) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PodSandboxStats: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PodSandboxStats: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Attributes == nil { -+ m.Attributes = &PodSandboxAttributes{} -+ } -+ if err := m.Attributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Linux", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Linux == nil { -+ m.Linux = &LinuxPodSandboxStats{} -+ } -+ if err := m.Linux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Windows", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Windows == nil { -+ m.Windows = &WindowsPodSandboxStats{} -+ } -+ if err := m.Windows.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *LinuxPodSandboxStats) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: LinuxPodSandboxStats: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: LinuxPodSandboxStats: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Cpu", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Cpu == nil { -+ m.Cpu = &CpuUsage{} -+ } -+ if err := m.Cpu.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Memory", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Memory == nil { -+ m.Memory = &MemoryUsage{} -+ } -+ if err := m.Memory.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Network == nil { -+ m.Network = &NetworkUsage{} -+ } -+ if err := m.Network.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Process", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Process == nil { -+ m.Process = &ProcessUsage{} -+ } -+ if err := m.Process.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Containers", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Containers = append(m.Containers, &ContainerStats{}) -+ if err := m.Containers[len(m.Containers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *WindowsPodSandboxStats) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: WindowsPodSandboxStats: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: WindowsPodSandboxStats: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *NetworkUsage) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: NetworkUsage: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: NetworkUsage: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) -+ } -+ m.Timestamp = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Timestamp |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field DefaultInterface", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.DefaultInterface == nil { -+ m.DefaultInterface = &NetworkInterfaceUsage{} -+ } -+ if err := m.DefaultInterface.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Interfaces", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Interfaces = append(m.Interfaces, &NetworkInterfaceUsage{}) -+ if err := m.Interfaces[len(m.Interfaces)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *NetworkInterfaceUsage) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: NetworkInterfaceUsage: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: NetworkInterfaceUsage: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Name = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RxBytes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.RxBytes == nil { -+ m.RxBytes = &UInt64Value{} -+ } -+ if err := m.RxBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RxErrors", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.RxErrors == nil { -+ m.RxErrors = &UInt64Value{} -+ } -+ if err := m.RxErrors.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field TxBytes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.TxBytes == nil { -+ m.TxBytes = &UInt64Value{} -+ } -+ if err := m.TxBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field TxErrors", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.TxErrors == nil { -+ m.TxErrors = &UInt64Value{} -+ } -+ if err := m.TxErrors.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ProcessUsage) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ProcessUsage: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ProcessUsage: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) -+ } -+ m.Timestamp = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Timestamp |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ProcessCount", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.ProcessCount == nil { -+ m.ProcessCount = &UInt64Value{} -+ } -+ if err := m.ProcessCount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ImageSpec) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ImageSpec: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ImageSpec: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Image = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *KeyValue) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: KeyValue: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: KeyValue: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Key = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Value = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *LinuxContainerResources) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: LinuxContainerResources: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: LinuxContainerResources: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CpuPeriod", wireType) -+ } -+ m.CpuPeriod = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CpuPeriod |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CpuQuota", wireType) -+ } -+ m.CpuQuota = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CpuQuota |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CpuShares", wireType) -+ } -+ m.CpuShares = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CpuShares |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field MemoryLimitInBytes", wireType) -+ } -+ m.MemoryLimitInBytes = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.MemoryLimitInBytes |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 5: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field OomScoreAdj", wireType) -+ } -+ m.OomScoreAdj = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.OomScoreAdj |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CpusetCpus", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.CpusetCpus = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 7: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CpusetMems", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.CpusetMems = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 8: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field HugepageLimits", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.HugepageLimits = append(m.HugepageLimits, &HugepageLimit{}) -+ if err := m.HugepageLimits[len(m.HugepageLimits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 9: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Unified", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Unified == nil { -+ m.Unified = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Unified[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 10: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field MemorySwapLimitInBytes", wireType) -+ } -+ m.MemorySwapLimitInBytes = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.MemorySwapLimitInBytes |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *HugepageLimit) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: HugepageLimit: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: HugepageLimit: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PageSize", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PageSize = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) -+ } -+ m.Limit = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Limit |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *SELinuxOption) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: SELinuxOption: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: SELinuxOption: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.User = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Role = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Type = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Level = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *Capability) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: Capability: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: Capability: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field AddCapabilities", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.AddCapabilities = append(m.AddCapabilities, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field DropCapabilities", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.DropCapabilities = append(m.DropCapabilities, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field AddAmbientCapabilities", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.AddAmbientCapabilities = append(m.AddAmbientCapabilities, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *LinuxContainerSecurityContext) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: LinuxContainerSecurityContext: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: LinuxContainerSecurityContext: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Capabilities", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Capabilities == nil { -+ m.Capabilities = &Capability{} -+ } -+ if err := m.Capabilities.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Privileged", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Privileged = bool(v != 0) -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field NamespaceOptions", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.NamespaceOptions == nil { -+ m.NamespaceOptions = &NamespaceOption{} -+ } -+ if err := m.NamespaceOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SelinuxOptions", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.SelinuxOptions == nil { -+ m.SelinuxOptions = &SELinuxOption{} -+ } -+ if err := m.SelinuxOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.RunAsUser == nil { -+ m.RunAsUser = &Int64Value{} -+ } -+ if err := m.RunAsUser.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsUsername", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RunAsUsername = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 7: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ReadonlyRootfs", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.ReadonlyRootfs = bool(v != 0) -+ case 8: -+ if wireType == 0 { -+ var v int64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.SupplementalGroups = append(m.SupplementalGroups, v) -+ } else if wireType == 2 { -+ var packedLen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ packedLen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if packedLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + packedLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ var elementCount int -+ var count int -+ for _, integer := range dAtA[iNdEx:postIndex] { -+ if integer < 128 { -+ count++ -+ } -+ } -+ elementCount = count -+ if elementCount != 0 && len(m.SupplementalGroups) == 0 { -+ m.SupplementalGroups = make([]int64, 0, elementCount) -+ } -+ for iNdEx < postIndex { -+ var v int64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.SupplementalGroups = append(m.SupplementalGroups, v) -+ } -+ } else { -+ return fmt.Errorf("proto: wrong wireType = %d for field SupplementalGroups", wireType) -+ } -+ case 9: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ApparmorProfile", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ApparmorProfile = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 10: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SeccompProfilePath", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.SeccompProfilePath = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 11: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field NoNewPrivs", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.NoNewPrivs = bool(v != 0) -+ case 12: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsGroup", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.RunAsGroup == nil { -+ m.RunAsGroup = &Int64Value{} -+ } -+ if err := m.RunAsGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 13: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field MaskedPaths", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.MaskedPaths = append(m.MaskedPaths, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 14: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ReadonlyPaths", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ReadonlyPaths = append(m.ReadonlyPaths, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 15: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Seccomp", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Seccomp == nil { -+ m.Seccomp = &SecurityProfile{} -+ } -+ if err := m.Seccomp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 16: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Apparmor", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Apparmor == nil { -+ m.Apparmor = &SecurityProfile{} -+ } -+ if err := m.Apparmor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *LinuxContainerConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: LinuxContainerConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: LinuxContainerConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Resources == nil { -+ m.Resources = &LinuxContainerResources{} -+ } -+ if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.SecurityContext == nil { -+ m.SecurityContext = &LinuxContainerSecurityContext{} -+ } -+ if err := m.SecurityContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *WindowsSandboxSecurityContext) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: WindowsSandboxSecurityContext: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: WindowsSandboxSecurityContext: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsUsername", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RunAsUsername = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CredentialSpec", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.CredentialSpec = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field HostProcess", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.HostProcess = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *WindowsPodSandboxConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: WindowsPodSandboxConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: WindowsPodSandboxConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.SecurityContext == nil { -+ m.SecurityContext = &WindowsSandboxSecurityContext{} -+ } -+ if err := m.SecurityContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *WindowsContainerSecurityContext) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: WindowsContainerSecurityContext: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: WindowsContainerSecurityContext: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsUsername", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RunAsUsername = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CredentialSpec", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.CredentialSpec = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field HostProcess", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.HostProcess = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *WindowsContainerConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: WindowsContainerConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: WindowsContainerConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Resources == nil { -+ m.Resources = &WindowsContainerResources{} -+ } -+ if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.SecurityContext == nil { -+ m.SecurityContext = &WindowsContainerSecurityContext{} -+ } -+ if err := m.SecurityContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *WindowsContainerResources) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: WindowsContainerResources: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: WindowsContainerResources: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CpuShares", wireType) -+ } -+ m.CpuShares = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CpuShares |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CpuCount", wireType) -+ } -+ m.CpuCount = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CpuCount |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CpuMaximum", wireType) -+ } -+ m.CpuMaximum = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CpuMaximum |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field MemoryLimitInBytes", wireType) -+ } -+ m.MemoryLimitInBytes = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.MemoryLimitInBytes |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 5: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RootfsSizeInBytes", wireType) -+ } -+ m.RootfsSizeInBytes = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.RootfsSizeInBytes |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerMetadata) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerMetadata: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerMetadata: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Name = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Attempt", wireType) -+ } -+ m.Attempt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Attempt |= uint32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *Device) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: Device: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: Device: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerPath", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerPath = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field HostPath", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.HostPath = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Permissions", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Permissions = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Metadata == nil { -+ m.Metadata = &ContainerMetadata{} -+ } -+ if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Image == nil { -+ m.Image = &ImageSpec{} -+ } -+ if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Command = append(m.Command, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Args", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Args = append(m.Args, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field WorkingDir", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.WorkingDir = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Envs", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Envs = append(m.Envs, &KeyValue{}) -+ if err := m.Envs[len(m.Envs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 7: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Mounts", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Mounts = append(m.Mounts, &Mount{}) -+ if err := m.Mounts[len(m.Mounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 8: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Devices", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Devices = append(m.Devices, &Device{}) -+ if err := m.Devices[len(m.Devices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 9: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Labels == nil { -+ m.Labels = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Labels[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 10: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 11: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field LogPath", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.LogPath = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 12: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Stdin = bool(v != 0) -+ case 13: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field StdinOnce", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.StdinOnce = bool(v != 0) -+ case 14: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Tty", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Tty = bool(v != 0) -+ case 15: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Linux", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Linux == nil { -+ m.Linux = &LinuxContainerConfig{} -+ } -+ if err := m.Linux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 16: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Windows", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Windows == nil { -+ m.Windows = &WindowsContainerConfig{} -+ } -+ if err := m.Windows.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *CreateContainerRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: CreateContainerRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: CreateContainerRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Config == nil { -+ m.Config = &ContainerConfig{} -+ } -+ if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SandboxConfig", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.SandboxConfig == nil { -+ m.SandboxConfig = &PodSandboxConfig{} -+ } -+ if err := m.SandboxConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *CreateContainerResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: CreateContainerResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: CreateContainerResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *StartContainerRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: StartContainerRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: StartContainerRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *StartContainerResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: StartContainerResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: StartContainerResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *StopContainerRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: StopContainerRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: StopContainerRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) -+ } -+ m.Timeout = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Timeout |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *StopContainerResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: StopContainerResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: StopContainerResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RemoveContainerRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RemoveContainerRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RemoveContainerRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RemoveContainerResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RemoveContainerResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RemoveContainerResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerStateValue) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerStateValue: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerStateValue: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) -+ } -+ m.State = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.State |= ContainerState(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerFilter) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerFilter: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerFilter: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.State == nil { -+ m.State = &ContainerStateValue{} -+ } -+ if err := m.State.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.LabelSelector == nil { -+ m.LabelSelector = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.LabelSelector[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListContainersRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListContainersRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListContainersRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Filter == nil { -+ m.Filter = &ContainerFilter{} -+ } -+ if err := m.Filter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *Container) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: Container: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: Container: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Metadata == nil { -+ m.Metadata = &ContainerMetadata{} -+ } -+ if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Image == nil { -+ m.Image = &ImageSpec{} -+ } -+ if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ImageRef", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ImageRef = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 6: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) -+ } -+ m.State = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.State |= ContainerState(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 7: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) -+ } -+ m.CreatedAt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CreatedAt |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 8: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Labels == nil { -+ m.Labels = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Labels[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 9: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListContainersResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListContainersResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListContainersResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Containers", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Containers = append(m.Containers, &Container{}) -+ if err := m.Containers[len(m.Containers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerStatusRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerStatusRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Verbose = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerStatus) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerStatus: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerStatus: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Metadata == nil { -+ m.Metadata = &ContainerMetadata{} -+ } -+ if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) -+ } -+ m.State = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.State |= ContainerState(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) -+ } -+ m.CreatedAt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CreatedAt |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 5: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) -+ } -+ m.StartedAt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.StartedAt |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 6: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) -+ } -+ m.FinishedAt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.FinishedAt |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 7: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ExitCode", wireType) -+ } -+ m.ExitCode = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.ExitCode |= int32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 8: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Image == nil { -+ m.Image = &ImageSpec{} -+ } -+ if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 9: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ImageRef", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ImageRef = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 10: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Reason = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 11: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Message = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 12: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Labels == nil { -+ m.Labels = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Labels[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 13: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 14: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Mounts", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Mounts = append(m.Mounts, &Mount{}) -+ if err := m.Mounts[len(m.Mounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 15: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field LogPath", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.LogPath = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 16: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Resources == nil { -+ m.Resources = &ContainerResources{} -+ } -+ if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerStatusResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerStatusResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Status == nil { -+ m.Status = &ContainerStatus{} -+ } -+ if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Info == nil { -+ m.Info = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Info[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerResources) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerResources: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerResources: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Linux", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Linux == nil { -+ m.Linux = &LinuxContainerResources{} -+ } -+ if err := m.Linux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Windows", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Windows == nil { -+ m.Windows = &WindowsContainerResources{} -+ } -+ if err := m.Windows.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *UpdateContainerResourcesRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: UpdateContainerResourcesRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: UpdateContainerResourcesRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Linux", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Linux == nil { -+ m.Linux = &LinuxContainerResources{} -+ } -+ if err := m.Linux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Windows", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Windows == nil { -+ m.Windows = &WindowsContainerResources{} -+ } -+ if err := m.Windows.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *UpdateContainerResourcesResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: UpdateContainerResourcesResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: UpdateContainerResourcesResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ExecSyncRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ExecSyncRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ExecSyncRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Cmd", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Cmd = append(m.Cmd, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) -+ } -+ m.Timeout = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Timeout |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ExecSyncResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ExecSyncResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ExecSyncResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stdout", wireType) -+ } -+ var byteLen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ byteLen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if byteLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + byteLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Stdout = append(m.Stdout[:0], dAtA[iNdEx:postIndex]...) -+ if m.Stdout == nil { -+ m.Stdout = []byte{} -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stderr", wireType) -+ } -+ var byteLen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ byteLen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if byteLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + byteLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Stderr = append(m.Stderr[:0], dAtA[iNdEx:postIndex]...) -+ if m.Stderr == nil { -+ m.Stderr = []byte{} -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ExitCode", wireType) -+ } -+ m.ExitCode = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.ExitCode |= int32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ExecRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ExecRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ExecRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Cmd", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Cmd = append(m.Cmd, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Tty", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Tty = bool(v != 0) -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Stdin = bool(v != 0) -+ case 5: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stdout", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Stdout = bool(v != 0) -+ case 6: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stderr", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Stderr = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ExecResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ExecResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ExecResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Url", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Url = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *AttachRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: AttachRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: AttachRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Stdin = bool(v != 0) -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Tty", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Tty = bool(v != 0) -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stdout", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Stdout = bool(v != 0) -+ case 5: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stderr", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Stderr = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *AttachResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: AttachResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: AttachResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Url", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Url = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PortForwardRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PortForwardRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PortForwardRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType == 0 { -+ var v int32 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Port = append(m.Port, v) -+ } else if wireType == 2 { -+ var packedLen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ packedLen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if packedLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + packedLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ var elementCount int -+ var count int -+ for _, integer := range dAtA[iNdEx:postIndex] { -+ if integer < 128 { -+ count++ -+ } -+ } -+ elementCount = count -+ if elementCount != 0 && len(m.Port) == 0 { -+ m.Port = make([]int32, 0, elementCount) -+ } -+ for iNdEx < postIndex { -+ var v int32 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int32(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Port = append(m.Port, v) -+ } -+ } else { -+ return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PortForwardResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PortForwardResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PortForwardResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Url", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Url = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ImageFilter) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ImageFilter: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ImageFilter: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Image == nil { -+ m.Image = &ImageSpec{} -+ } -+ if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListImagesRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListImagesRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListImagesRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Filter == nil { -+ m.Filter = &ImageFilter{} -+ } -+ if err := m.Filter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *Image) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: Image: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: Image: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RepoTags", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RepoTags = append(m.RepoTags, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RepoDigests", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RepoDigests = append(m.RepoDigests, string(dAtA[iNdEx:postIndex])) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Size_", wireType) -+ } -+ m.Size_ = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Size_ |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Uid", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Uid == nil { -+ m.Uid = &Int64Value{} -+ } -+ if err := m.Uid.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Username = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 7: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Spec == nil { -+ m.Spec = &ImageSpec{} -+ } -+ if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 8: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Pinned", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Pinned = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListImagesResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListImagesResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListImagesResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Images", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Images = append(m.Images, &Image{}) -+ if err := m.Images[len(m.Images)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ImageStatusRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ImageStatusRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ImageStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Image == nil { -+ m.Image = &ImageSpec{} -+ } -+ if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Verbose = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ImageStatusResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ImageStatusResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ImageStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Image == nil { -+ m.Image = &Image{} -+ } -+ if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Info == nil { -+ m.Info = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Info[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *AuthConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: AuthConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: AuthConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Username = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Password = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Auth", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Auth = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ServerAddress", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ServerAddress = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field IdentityToken", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.IdentityToken = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RegistryToken", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.RegistryToken = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PullImageRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PullImageRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PullImageRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Image == nil { -+ m.Image = &ImageSpec{} -+ } -+ if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Auth", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Auth == nil { -+ m.Auth = &AuthConfig{} -+ } -+ if err := m.Auth.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field SandboxConfig", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.SandboxConfig == nil { -+ m.SandboxConfig = &PodSandboxConfig{} -+ } -+ if err := m.SandboxConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *PullImageResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: PullImageResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: PullImageResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ImageRef", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ImageRef = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RemoveImageRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RemoveImageRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RemoveImageRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Image == nil { -+ m.Image = &ImageSpec{} -+ } -+ if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RemoveImageResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RemoveImageResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RemoveImageResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *NetworkConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: NetworkConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: NetworkConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodCidr", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodCidr = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RuntimeConfig) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RuntimeConfig: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RuntimeConfig: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field NetworkConfig", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.NetworkConfig == nil { -+ m.NetworkConfig = &NetworkConfig{} -+ } -+ if err := m.NetworkConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *UpdateRuntimeConfigRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: UpdateRuntimeConfigRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: UpdateRuntimeConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RuntimeConfig", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.RuntimeConfig == nil { -+ m.RuntimeConfig = &RuntimeConfig{} -+ } -+ if err := m.RuntimeConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *UpdateRuntimeConfigResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: UpdateRuntimeConfigResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: UpdateRuntimeConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RuntimeCondition) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RuntimeCondition: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RuntimeCondition: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Type = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Status = bool(v != 0) -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Reason = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Message = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *RuntimeStatus) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: RuntimeStatus: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: RuntimeStatus: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Conditions = append(m.Conditions, &RuntimeCondition{}) -+ if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *StatusRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: StatusRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: StatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) -+ } -+ var v int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ v |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ m.Verbose = bool(v != 0) -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *StatusResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: StatusResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: StatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Status == nil { -+ m.Status = &RuntimeStatus{} -+ } -+ if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Info == nil { -+ m.Info = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Info[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ImageFsInfoRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ImageFsInfoRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ImageFsInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *UInt64Value) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: UInt64Value: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: UInt64Value: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) -+ } -+ m.Value = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Value |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *FilesystemIdentifier) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: FilesystemIdentifier: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: FilesystemIdentifier: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Mountpoint", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Mountpoint = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *FilesystemUsage) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: FilesystemUsage: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: FilesystemUsage: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) -+ } -+ m.Timestamp = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Timestamp |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field FsId", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.FsId == nil { -+ m.FsId = &FilesystemIdentifier{} -+ } -+ if err := m.FsId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field UsedBytes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.UsedBytes == nil { -+ m.UsedBytes = &UInt64Value{} -+ } -+ if err := m.UsedBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field InodesUsed", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.InodesUsed == nil { -+ m.InodesUsed = &UInt64Value{} -+ } -+ if err := m.InodesUsed.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ImageFsInfoResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ImageFsInfoResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ImageFsInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ImageFilesystems", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ImageFilesystems = append(m.ImageFilesystems, &FilesystemUsage{}) -+ if err := m.ImageFilesystems[len(m.ImageFilesystems)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerStatsRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerStatsRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerStatsResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerStatsResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerStatsResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Stats == nil { -+ m.Stats = &ContainerStats{} -+ } -+ if err := m.Stats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListContainerStatsRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListContainerStatsRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListContainerStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Filter == nil { -+ m.Filter = &ContainerStatsFilter{} -+ } -+ if err := m.Filter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerStatsFilter) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerStatsFilter: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerStatsFilter: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.PodSandboxId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.LabelSelector == nil { -+ m.LabelSelector = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.LabelSelector[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ListContainerStatsResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ListContainerStatsResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ListContainerStatsResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Stats = append(m.Stats, &ContainerStats{}) -+ if err := m.Stats[len(m.Stats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerAttributes) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerAttributes: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerAttributes: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Id = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Metadata == nil { -+ m.Metadata = &ContainerMetadata{} -+ } -+ if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Labels == nil { -+ m.Labels = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Labels[mapkey] = mapvalue -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Annotations == nil { -+ m.Annotations = make(map[string]string) -+ } -+ var mapkey string -+ var mapvalue string -+ for iNdEx < postIndex { -+ entryPreIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ if fieldNum == 1 { -+ var stringLenmapkey uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapkey |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapkey := int(stringLenmapkey) -+ if intStringLenmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapkey := iNdEx + intStringLenmapkey -+ if postStringIndexmapkey < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapkey > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) -+ iNdEx = postStringIndexmapkey -+ } else if fieldNum == 2 { -+ var stringLenmapvalue uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLenmapvalue |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLenmapvalue := int(stringLenmapvalue) -+ if intStringLenmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue -+ if postStringIndexmapvalue < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postStringIndexmapvalue > l { -+ return io.ErrUnexpectedEOF -+ } -+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) -+ iNdEx = postStringIndexmapvalue -+ } else { -+ iNdEx = entryPreIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > postIndex { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ m.Annotations[mapkey] = mapvalue -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerStats) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerStats: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerStats: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Attributes == nil { -+ m.Attributes = &ContainerAttributes{} -+ } -+ if err := m.Attributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Cpu", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Cpu == nil { -+ m.Cpu = &CpuUsage{} -+ } -+ if err := m.Cpu.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Memory", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.Memory == nil { -+ m.Memory = &MemoryUsage{} -+ } -+ if err := m.Memory.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field WritableLayer", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.WritableLayer == nil { -+ m.WritableLayer = &FilesystemUsage{} -+ } -+ if err := m.WritableLayer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *CpuUsage) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: CpuUsage: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: CpuUsage: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) -+ } -+ m.Timestamp = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Timestamp |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field UsageCoreNanoSeconds", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.UsageCoreNanoSeconds == nil { -+ m.UsageCoreNanoSeconds = &UInt64Value{} -+ } -+ if err := m.UsageCoreNanoSeconds.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field UsageNanoCores", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.UsageNanoCores == nil { -+ m.UsageNanoCores = &UInt64Value{} -+ } -+ if err := m.UsageNanoCores.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *MemoryUsage) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: MemoryUsage: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: MemoryUsage: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) -+ } -+ m.Timestamp = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Timestamp |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field WorkingSetBytes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.WorkingSetBytes == nil { -+ m.WorkingSetBytes = &UInt64Value{} -+ } -+ if err := m.WorkingSetBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 3: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field AvailableBytes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.AvailableBytes == nil { -+ m.AvailableBytes = &UInt64Value{} -+ } -+ if err := m.AvailableBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field UsageBytes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.UsageBytes == nil { -+ m.UsageBytes = &UInt64Value{} -+ } -+ if err := m.UsageBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 5: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field RssBytes", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.RssBytes == nil { -+ m.RssBytes = &UInt64Value{} -+ } -+ if err := m.RssBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 6: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PageFaults", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.PageFaults == nil { -+ m.PageFaults = &UInt64Value{} -+ } -+ if err := m.PageFaults.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ case 7: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field MajorPageFaults", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.MajorPageFaults == nil { -+ m.MajorPageFaults = &UInt64Value{} -+ } -+ if err := m.MajorPageFaults.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ReopenContainerLogRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ReopenContainerLogRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ReopenContainerLogRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ReopenContainerLogResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ReopenContainerLogResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ReopenContainerLogResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *CheckpointContainerRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: CheckpointContainerRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: CheckpointContainerRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.Location = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) -+ } -+ m.Timeout = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.Timeout |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *CheckpointContainerResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: CheckpointContainerResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: CheckpointContainerResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *GetEventsRequest) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: GetEventsRequest: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: GetEventsRequest: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func (m *ContainerEventResponse) Unmarshal(dAtA []byte) error { -+ l := len(dAtA) -+ iNdEx := 0 -+ for iNdEx < l { -+ preIndex := iNdEx -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ fieldNum := int32(wire >> 3) -+ wireType := int(wire & 0x7) -+ if wireType == 4 { -+ return fmt.Errorf("proto: ContainerEventResponse: wiretype end group for non-group") -+ } -+ if fieldNum <= 0 { -+ return fmt.Errorf("proto: ContainerEventResponse: illegal tag %d (wire type %d)", fieldNum, wire) -+ } -+ switch fieldNum { -+ case 1: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) -+ } -+ var stringLen uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ stringLen |= uint64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ intStringLen := int(stringLen) -+ if intStringLen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + intStringLen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ m.ContainerId = string(dAtA[iNdEx:postIndex]) -+ iNdEx = postIndex -+ case 2: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field ContainerEventType", wireType) -+ } -+ m.ContainerEventType = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.ContainerEventType |= ContainerEventType(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 3: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) -+ } -+ m.CreatedAt = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.CreatedAt |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ case 4: -+ if wireType != 2 { -+ return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxMetadata", wireType) -+ } -+ var msglen int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ msglen |= int(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if msglen < 0 { -+ return ErrInvalidLengthApi -+ } -+ postIndex := iNdEx + msglen -+ if postIndex < 0 { -+ return ErrInvalidLengthApi -+ } -+ if postIndex > l { -+ return io.ErrUnexpectedEOF -+ } -+ if m.PodSandboxMetadata == nil { -+ m.PodSandboxMetadata = &PodSandboxMetadata{} -+ } -+ if err := m.PodSandboxMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -+ return err -+ } -+ iNdEx = postIndex -+ default: -+ iNdEx = preIndex -+ skippy, err := skipApi(dAtA[iNdEx:]) -+ if err != nil { -+ return err -+ } -+ if (skippy < 0) || (iNdEx+skippy) < 0 { -+ return ErrInvalidLengthApi -+ } -+ if (iNdEx + skippy) > l { -+ return io.ErrUnexpectedEOF -+ } -+ iNdEx += skippy -+ } -+ } -+ -+ if iNdEx > l { -+ return io.ErrUnexpectedEOF -+ } -+ return nil -+} -+func skipApi(dAtA []byte) (n int, err error) { -+ l := len(dAtA) -+ iNdEx := 0 -+ depth := 0 -+ for iNdEx < l { -+ var wire uint64 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return 0, ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return 0, io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ wire |= (uint64(b) & 0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ wireType := int(wire & 0x7) -+ switch wireType { -+ case 0: -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return 0, ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return 0, io.ErrUnexpectedEOF -+ } -+ iNdEx++ -+ if dAtA[iNdEx-1] < 0x80 { -+ break -+ } -+ } -+ case 1: -+ iNdEx += 8 -+ case 2: -+ var length int -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return 0, ErrIntOverflowApi -+ } -+ if iNdEx >= l { -+ return 0, io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ length |= (int(b) & 0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } -+ if length < 0 { -+ return 0, ErrInvalidLengthApi -+ } -+ iNdEx += length -+ case 3: -+ depth++ -+ case 4: -+ if depth == 0 { -+ return 0, ErrUnexpectedEndOfGroupApi -+ } -+ depth-- -+ case 5: -+ iNdEx += 4 -+ default: -+ return 0, fmt.Errorf("proto: illegal wireType %d", wireType) -+ } -+ if iNdEx < 0 { -+ return 0, ErrInvalidLengthApi -+ } -+ if depth == 0 { -+ return iNdEx, nil -+ } -+ } -+ return 0, io.ErrUnexpectedEOF -+} -+ -+var ( -+ ErrInvalidLengthApi = fmt.Errorf("proto: negative length found during unmarshaling") -+ ErrIntOverflowApi = fmt.Errorf("proto: integer overflow") -+ ErrUnexpectedEndOfGroupApi = fmt.Errorf("proto: unexpected end of group") -+) -diff --git a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto -new file mode 100755 -index 0000000..9feb4b2 ---- /dev/null -+++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto -@@ -0,0 +1,1606 @@ -+/* -+Copyright 2020 The Kubernetes Authors. -+ -+Licensed under the Apache License, Version 2.0 (the "License"); -+you may not use this file except in compliance with the License. -+You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+// To regenerate api.pb.go run hack/update-generated-runtime.sh -+syntax = "proto3"; -+ -+package runtime.v1; -+option go_package = "k8s.io/cri-api/pkg/apis/runtime/v1"; -+ -+import "github.com/gogo/protobuf/gogoproto/gogo.proto"; -+ -+option (gogoproto.goproto_stringer_all) = false; -+option (gogoproto.stringer_all) = true; -+option (gogoproto.goproto_getters_all) = true; -+option (gogoproto.marshaler_all) = true; -+option (gogoproto.sizer_all) = true; -+option (gogoproto.unmarshaler_all) = true; -+option (gogoproto.goproto_unrecognized_all) = false; -+ -+// Runtime service defines the public APIs for remote container runtimes -+service RuntimeService { -+ // Version returns the runtime name, runtime version, and runtime API version. -+ rpc Version(VersionRequest) returns (VersionResponse) {} -+ -+ // RunPodSandbox creates and starts a pod-level sandbox. Runtimes must ensure -+ // the sandbox is in the ready state on success. -+ rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} -+ // StopPodSandbox stops any running process that is part of the sandbox and -+ // reclaims network resources (e.g., IP addresses) allocated to the sandbox. -+ // If there are any running containers in the sandbox, they must be forcibly -+ // terminated. -+ // This call is idempotent, and must not return an error if all relevant -+ // resources have already been reclaimed. kubelet will call StopPodSandbox -+ // at least once before calling RemovePodSandbox. It will also attempt to -+ // reclaim resources eagerly, as soon as a sandbox is not needed. Hence, -+ // multiple StopPodSandbox calls are expected. -+ rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} -+ // RemovePodSandbox removes the sandbox. If there are any running containers -+ // in the sandbox, they must be forcibly terminated and removed. -+ // This call is idempotent, and must not return an error if the sandbox has -+ // already been removed. -+ rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} -+ // PodSandboxStatus returns the status of the PodSandbox. If the PodSandbox is not -+ // present, returns an error. -+ rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} -+ // ListPodSandbox returns a list of PodSandboxes. -+ rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} -+ -+ // CreateContainer creates a new container in specified PodSandbox -+ rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} -+ // StartContainer starts the container. -+ rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} -+ // StopContainer stops a running container with a grace period (i.e., timeout). -+ // This call is idempotent, and must not return an error if the container has -+ // already been stopped. -+ // The runtime must forcibly kill the container after the grace period is -+ // reached. -+ rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} -+ // RemoveContainer removes the container. If the container is running, the -+ // container must be forcibly removed. -+ // This call is idempotent, and must not return an error if the container has -+ // already been removed. -+ rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} -+ // ListContainers lists all containers by filters. -+ rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} -+ // ContainerStatus returns status of the container. If the container is not -+ // present, returns an error. -+ rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} -+ // UpdateContainerResources updates ContainerConfig of the container synchronously. -+ // If runtime fails to transactionally update the requested resources, an error is returned. -+ rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} -+ // ReopenContainerLog asks runtime to reopen the stdout/stderr log file -+ // for the container. This is often called after the log file has been -+ // rotated. If the container is not running, container runtime can choose -+ // to either create a new log file and return nil, or return an error. -+ // Once it returns error, new container log file MUST NOT be created. -+ rpc ReopenContainerLog(ReopenContainerLogRequest) returns (ReopenContainerLogResponse) {} -+ -+ // ExecSync runs a command in a container synchronously. -+ rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} -+ // Exec prepares a streaming endpoint to execute a command in the container. -+ rpc Exec(ExecRequest) returns (ExecResponse) {} -+ // Attach prepares a streaming endpoint to attach to a running container. -+ rpc Attach(AttachRequest) returns (AttachResponse) {} -+ // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. -+ rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {} -+ -+ // ContainerStats returns stats of the container. If the container does not -+ // exist, the call returns an error. -+ rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} -+ // ListContainerStats returns stats of all running containers. -+ rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} -+ -+ // PodSandboxStats returns stats of the pod sandbox. If the pod sandbox does not -+ // exist, the call returns an error. -+ rpc PodSandboxStats(PodSandboxStatsRequest) returns (PodSandboxStatsResponse) {} -+ // ListPodSandboxStats returns stats of the pod sandboxes matching a filter. -+ rpc ListPodSandboxStats(ListPodSandboxStatsRequest) returns (ListPodSandboxStatsResponse) {} -+ -+ // UpdateRuntimeConfig updates the runtime configuration based on the given request. -+ rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {} -+ -+ // Status returns the status of the runtime. -+ rpc Status(StatusRequest) returns (StatusResponse) {} -+ -+ // CheckpointContainer checkpoints a container -+ rpc CheckpointContainer(CheckpointContainerRequest) returns (CheckpointContainerResponse) {} -+ -+ // GetContainerEvents gets container events from the CRI runtime -+ rpc GetContainerEvents(GetEventsRequest) returns (stream ContainerEventResponse) {} -+ -+} -+ -+// ImageService defines the public APIs for managing images. -+service ImageService { -+ // ListImages lists existing images. -+ rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} -+ // ImageStatus returns the status of the image. If the image is not -+ // present, returns a response with ImageStatusResponse.Image set to -+ // nil. -+ rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} -+ // PullImage pulls an image with authentication config. -+ rpc PullImage(PullImageRequest) returns (PullImageResponse) {} -+ // RemoveImage removes the image. -+ // This call is idempotent, and must not return an error if the image has -+ // already been removed. -+ rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} -+ // ImageFSInfo returns information of the filesystem that is used to store images. -+ rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} -+} -+ -+message VersionRequest { -+ // Version of the kubelet runtime API. -+ string version = 1; -+} -+ -+message VersionResponse { -+ // Version of the kubelet runtime API. -+ string version = 1; -+ // Name of the container runtime. -+ string runtime_name = 2; -+ // Version of the container runtime. The string must be -+ // semver-compatible. -+ string runtime_version = 3; -+ // API version of the container runtime. The string must be -+ // semver-compatible. -+ string runtime_api_version = 4; -+} -+ -+// DNSConfig specifies the DNS servers and search domains of a sandbox. -+message DNSConfig { -+ // List of DNS servers of the cluster. -+ repeated string servers = 1; -+ // List of DNS search domains of the cluster. -+ repeated string searches = 2; -+ // List of DNS options. See https://linux.die.net/man/5/resolv.conf -+ // for all available options. -+ repeated string options = 3; -+} -+ -+enum Protocol { -+ TCP = 0; -+ UDP = 1; -+ SCTP = 2; -+} -+ -+// PortMapping specifies the port mapping configurations of a sandbox. -+message PortMapping { -+ // Protocol of the port mapping. -+ Protocol protocol = 1; -+ // Port number within the container. Default: 0 (not specified). -+ int32 container_port = 2; -+ // Port number on the host. Default: 0 (not specified). -+ int32 host_port = 3; -+ // Host IP. -+ string host_ip = 4; -+} -+ -+enum MountPropagation { -+ // No mount propagation ("private" in Linux terminology). -+ PROPAGATION_PRIVATE = 0; -+ // Mounts get propagated from the host to the container ("rslave" in Linux). -+ PROPAGATION_HOST_TO_CONTAINER = 1; -+ // Mounts get propagated from the host to the container and from the -+ // container to the host ("rshared" in Linux). -+ PROPAGATION_BIDIRECTIONAL = 2; -+} -+ -+// Mount specifies a host volume to mount into a container. -+message Mount { -+ // Path of the mount within the container. -+ string container_path = 1; -+ // Path of the mount on the host. If the hostPath doesn't exist, then runtimes -+ // should report error. If the hostpath is a symbolic link, runtimes should -+ // follow the symlink and mount the real destination to container. -+ string host_path = 2; -+ // If set, the mount is read-only. -+ bool readonly = 3; -+ // If set, the mount needs SELinux relabeling. -+ bool selinux_relabel = 4; -+ // Requested propagation mode. -+ MountPropagation propagation = 5; -+} -+ -+// IDMapping describes host to container ID mappings for a pod sandbox. -+message IDMapping { -+ // HostId is the id on the host. -+ uint32 host_id = 1; -+ // ContainerId is the id in the container. -+ uint32 container_id = 2; -+ // Length is the size of the range to map. -+ uint32 length = 3; -+} -+ -+// A NamespaceMode describes the intended namespace configuration for each -+// of the namespaces (Network, PID, IPC) in NamespaceOption. Runtimes should -+// map these modes as appropriate for the technology underlying the runtime. -+enum NamespaceMode { -+ // A POD namespace is common to all containers in a pod. -+ // For example, a container with a PID namespace of POD expects to view -+ // all of the processes in all of the containers in the pod. -+ POD = 0; -+ // A CONTAINER namespace is restricted to a single container. -+ // For example, a container with a PID namespace of CONTAINER expects to -+ // view only the processes in that container. -+ CONTAINER = 1; -+ // A NODE namespace is the namespace of the Kubernetes node. -+ // For example, a container with a PID namespace of NODE expects to view -+ // all of the processes on the host running the kubelet. -+ NODE = 2; -+ // TARGET targets the namespace of another container. When this is specified, -+ // a target_id must be specified in NamespaceOption and refer to a container -+ // previously created with NamespaceMode CONTAINER. This containers namespace -+ // will be made to match that of container target_id. -+ // For example, a container with a PID namespace of TARGET expects to view -+ // all of the processes that container target_id can view. -+ TARGET = 3; -+} -+ -+// UserNamespace describes the intended user namespace configuration for a pod sandbox. -+message UserNamespace { -+ // Mode is the NamespaceMode for this UserNamespace. -+ // Note: NamespaceMode for UserNamespace currently supports only POD and NODE, not CONTAINER OR TARGET. -+ NamespaceMode mode = 1; -+ -+ // Uids specifies the UID mappings for the user namespace. -+ repeated IDMapping uids = 2; -+ -+ // Gids specifies the GID mappings for the user namespace. -+ repeated IDMapping gids = 3; -+} -+ -+// NamespaceOption provides options for Linux namespaces. -+message NamespaceOption { -+ // Network namespace for this container/sandbox. -+ // Note: There is currently no way to set CONTAINER scoped network in the Kubernetes API. -+ // Namespaces currently set by the kubelet: POD, NODE -+ NamespaceMode network = 1; -+ // PID namespace for this container/sandbox. -+ // Note: The CRI default is POD, but the v1.PodSpec default is CONTAINER. -+ // The kubelet's runtime manager will set this to CONTAINER explicitly for v1 pods. -+ // Namespaces currently set by the kubelet: POD, CONTAINER, NODE, TARGET -+ NamespaceMode pid = 2; -+ // IPC namespace for this container/sandbox. -+ // Note: There is currently no way to set CONTAINER scoped IPC in the Kubernetes API. -+ // Namespaces currently set by the kubelet: POD, NODE -+ NamespaceMode ipc = 3; -+ // Target Container ID for NamespaceMode of TARGET. This container must have been -+ // previously created in the same pod. It is not possible to specify different targets -+ // for each namespace. -+ string target_id = 4; -+ // UsernsOptions for this pod sandbox. -+ // The Kubelet picks the user namespace configuration to use for the pod sandbox. The mappings -+ // are specified as part of the UserNamespace struct. If the struct is nil, then the POD mode -+ // must be assumed. This is done for backward compatibility with older Kubelet versions that -+ // do not set a user namespace. -+ UserNamespace userns_options = 5; -+} -+ -+// Int64Value is the wrapper of int64. -+message Int64Value { -+ // The value. -+ int64 value = 1; -+} -+ -+// LinuxSandboxSecurityContext holds linux security configuration that will be -+// applied to a sandbox. Note that: -+// 1) It does not apply to containers in the pods. -+// 2) It may not be applicable to a PodSandbox which does not contain any running -+// process. -+message LinuxSandboxSecurityContext { -+ // Configurations for the sandbox's namespaces. -+ // This will be used only if the PodSandbox uses namespace for isolation. -+ NamespaceOption namespace_options = 1; -+ // Optional SELinux context to be applied. -+ SELinuxOption selinux_options = 2; -+ // UID to run sandbox processes as, when applicable. -+ Int64Value run_as_user = 3; -+ // GID to run sandbox processes as, when applicable. run_as_group should only -+ // be specified when run_as_user is specified; otherwise, the runtime MUST error. -+ Int64Value run_as_group = 8; -+ // If set, the root filesystem of the sandbox is read-only. -+ bool readonly_rootfs = 4; -+ // List of groups applied to the first process run in the sandbox, in -+ // addition to the sandbox's primary GID. -+ repeated int64 supplemental_groups = 5; -+ // Indicates whether the sandbox will be asked to run a privileged -+ // container. If a privileged container is to be executed within it, this -+ // MUST be true. -+ // This allows a sandbox to take additional security precautions if no -+ // privileged containers are expected to be run. -+ bool privileged = 6; -+ // Seccomp profile for the sandbox. -+ SecurityProfile seccomp = 9; -+ // AppArmor profile for the sandbox. -+ SecurityProfile apparmor = 10; -+ // Seccomp profile for the sandbox, candidate values are: -+ // * runtime/default: the default profile for the container runtime -+ // * unconfined: unconfined profile, ie, no seccomp sandboxing -+ // * localhost/: the profile installed on the node. -+ // is the full path of the profile. -+ // Default: "", which is identical with unconfined. -+ string seccomp_profile_path = 7 [deprecated=true]; -+} -+ -+// A security profile which can be used for sandboxes and containers. -+message SecurityProfile { -+ // Available profile types. -+ enum ProfileType { -+ // The container runtime default profile should be used. -+ RuntimeDefault = 0; -+ // Disable the feature for the sandbox or the container. -+ Unconfined = 1; -+ // A pre-defined profile on the node should be used. -+ Localhost = 2; -+ } -+ // Indicator which `ProfileType` should be applied. -+ ProfileType profile_type = 1; -+ // Indicates that a pre-defined profile on the node should be used. -+ // Must only be set if `ProfileType` is `Localhost`. -+ // For seccomp, it must be an absolute path to the seccomp profile. -+ // For AppArmor, this field is the AppArmor `/` -+ string localhost_ref = 2; -+} -+ -+// LinuxPodSandboxConfig holds platform-specific configurations for Linux -+// host platforms and Linux-based containers. -+message LinuxPodSandboxConfig { -+ // Parent cgroup of the PodSandbox. -+ // The cgroupfs style syntax will be used, but the container runtime can -+ // convert it to systemd semantics if needed. -+ string cgroup_parent = 1; -+ // LinuxSandboxSecurityContext holds sandbox security attributes. -+ LinuxSandboxSecurityContext security_context = 2; -+ // Sysctls holds linux sysctls config for the sandbox. -+ map sysctls = 3; -+ // Optional overhead represents the overheads associated with this sandbox -+ LinuxContainerResources overhead = 4; -+ // Optional resources represents the sum of container resources for this sandbox -+ LinuxContainerResources resources = 5; -+} -+ -+// PodSandboxMetadata holds all necessary information for building the sandbox name. -+// The container runtime is encouraged to expose the metadata associated with the -+// PodSandbox in its user interface for better user experience. For example, -+// the runtime can construct a unique PodSandboxName based on the metadata. -+message PodSandboxMetadata { -+ // Pod name of the sandbox. Same as the pod name in the Pod ObjectMeta. -+ string name = 1; -+ // Pod UID of the sandbox. Same as the pod UID in the Pod ObjectMeta. -+ string uid = 2; -+ // Pod namespace of the sandbox. Same as the pod namespace in the Pod ObjectMeta. -+ string namespace = 3; -+ // Attempt number of creating the sandbox. Default: 0. -+ uint32 attempt = 4; -+} -+ -+// PodSandboxConfig holds all the required and optional fields for creating a -+// sandbox. -+message PodSandboxConfig { -+ // Metadata of the sandbox. This information will uniquely identify the -+ // sandbox, and the runtime should leverage this to ensure correct -+ // operation. The runtime may also use this information to improve UX, such -+ // as by constructing a readable name. -+ PodSandboxMetadata metadata = 1; -+ // Hostname of the sandbox. Hostname could only be empty when the pod -+ // network namespace is NODE. -+ string hostname = 2; -+ // Path to the directory on the host in which container log files are -+ // stored. -+ // By default the log of a container going into the LogDirectory will be -+ // hooked up to STDOUT and STDERR. However, the LogDirectory may contain -+ // binary log files with structured logging data from the individual -+ // containers. For example, the files might be newline separated JSON -+ // structured logs, systemd-journald journal files, gRPC trace files, etc. -+ // E.g., -+ // PodSandboxConfig.LogDirectory = `/var/log/pods//` -+ // ContainerConfig.LogPath = `containerName/Instance#.log` -+ string log_directory = 3; -+ // DNS config for the sandbox. -+ DNSConfig dns_config = 4; -+ // Port mappings for the sandbox. -+ repeated PortMapping port_mappings = 5; -+ // Key-value pairs that may be used to scope and select individual resources. -+ map labels = 6; -+ // Unstructured key-value map that may be set by the kubelet to store and -+ // retrieve arbitrary metadata. This will include any annotations set on a -+ // pod through the Kubernetes API. -+ // -+ // Annotations MUST NOT be altered by the runtime; the annotations stored -+ // here MUST be returned in the PodSandboxStatus associated with the pod -+ // this PodSandboxConfig creates. -+ // -+ // In general, in order to preserve a well-defined interface between the -+ // kubelet and the container runtime, annotations SHOULD NOT influence -+ // runtime behaviour. -+ // -+ // Annotations can also be useful for runtime authors to experiment with -+ // new features that are opaque to the Kubernetes APIs (both user-facing -+ // and the CRI). Whenever possible, however, runtime authors SHOULD -+ // consider proposing new typed fields for any new features instead. -+ map annotations = 7; -+ // Optional configurations specific to Linux hosts. -+ LinuxPodSandboxConfig linux = 8; -+ // Optional configurations specific to Windows hosts. -+ WindowsPodSandboxConfig windows = 9; -+} -+ -+message RunPodSandboxRequest { -+ // Configuration for creating a PodSandbox. -+ PodSandboxConfig config = 1; -+ // Named runtime configuration to use for this PodSandbox. -+ // If the runtime handler is unknown, this request should be rejected. An -+ // empty string should select the default handler, equivalent to the -+ // behavior before this feature was added. -+ // See https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class -+ string runtime_handler = 2; -+} -+ -+message RunPodSandboxResponse { -+ // ID of the PodSandbox to run. -+ string pod_sandbox_id = 1; -+} -+ -+message StopPodSandboxRequest { -+ // ID of the PodSandbox to stop. -+ string pod_sandbox_id = 1; -+} -+ -+message StopPodSandboxResponse {} -+ -+message RemovePodSandboxRequest { -+ // ID of the PodSandbox to remove. -+ string pod_sandbox_id = 1; -+} -+ -+message RemovePodSandboxResponse {} -+ -+message PodSandboxStatusRequest { -+ // ID of the PodSandbox for which to retrieve status. -+ string pod_sandbox_id = 1; -+ // Verbose indicates whether to return extra information about the pod sandbox. -+ bool verbose = 2; -+} -+ -+// PodIP represents an ip of a Pod -+message PodIP{ -+ // an ip is a string representation of an IPv4 or an IPv6 -+ string ip = 1; -+} -+// PodSandboxNetworkStatus is the status of the network for a PodSandbox. -+// Currently ignored for pods sharing the host networking namespace. -+message PodSandboxNetworkStatus { -+ // IP address of the PodSandbox. -+ string ip = 1; -+ // list of additional ips (not inclusive of PodSandboxNetworkStatus.Ip) of the PodSandBoxNetworkStatus -+ repeated PodIP additional_ips = 2; -+} -+ -+// Namespace contains paths to the namespaces. -+message Namespace { -+ // Namespace options for Linux namespaces. -+ NamespaceOption options = 2; -+} -+ -+// LinuxSandboxStatus contains status specific to Linux sandboxes. -+message LinuxPodSandboxStatus { -+ // Paths to the sandbox's namespaces. -+ Namespace namespaces = 1; -+} -+ -+enum PodSandboxState { -+ SANDBOX_READY = 0; -+ SANDBOX_NOTREADY = 1; -+} -+ -+// PodSandboxStatus contains the status of the PodSandbox. -+message PodSandboxStatus { -+ // ID of the sandbox. -+ string id = 1; -+ // Metadata of the sandbox. -+ PodSandboxMetadata metadata = 2; -+ // State of the sandbox. -+ PodSandboxState state = 3; -+ // Creation timestamp of the sandbox in nanoseconds. Must be > 0. -+ int64 created_at = 4; -+ // Network contains network status if network is handled by the runtime. -+ PodSandboxNetworkStatus network = 5; -+ // Linux-specific status to a pod sandbox. -+ LinuxPodSandboxStatus linux = 6; -+ // Labels are key-value pairs that may be used to scope and select individual resources. -+ map labels = 7; -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding PodSandboxConfig used to -+ // instantiate the pod sandbox this status represents. -+ map annotations = 8; -+ // runtime configuration used for this PodSandbox. -+ string runtime_handler = 9; -+} -+ -+message PodSandboxStatusResponse { -+ // Status of the PodSandbox. -+ PodSandboxStatus status = 1; -+ // Info is extra information of the PodSandbox. The key could be arbitrary string, and -+ // value should be in json format. The information could include anything useful for -+ // debug, e.g. network namespace for linux container based container runtime. -+ // It should only be returned non-empty when Verbose is true. -+ map info = 2; -+} -+ -+// PodSandboxStateValue is the wrapper of PodSandboxState. -+message PodSandboxStateValue { -+ // State of the sandbox. -+ PodSandboxState state = 1; -+} -+ -+// PodSandboxFilter is used to filter a list of PodSandboxes. -+// All those fields are combined with 'AND' -+message PodSandboxFilter { -+ // ID of the sandbox. -+ string id = 1; -+ // State of the sandbox. -+ PodSandboxStateValue state = 2; -+ // LabelSelector to select matches. -+ // Only api.MatchLabels is supported for now and the requirements -+ // are ANDed. MatchExpressions is not supported yet. -+ map label_selector = 3; -+} -+ -+message ListPodSandboxRequest { -+ // PodSandboxFilter to filter a list of PodSandboxes. -+ PodSandboxFilter filter = 1; -+} -+ -+ -+// PodSandbox contains minimal information about a sandbox. -+message PodSandbox { -+ // ID of the PodSandbox. -+ string id = 1; -+ // Metadata of the PodSandbox. -+ PodSandboxMetadata metadata = 2; -+ // State of the PodSandbox. -+ PodSandboxState state = 3; -+ // Creation timestamps of the PodSandbox in nanoseconds. Must be > 0. -+ int64 created_at = 4; -+ // Labels of the PodSandbox. -+ map labels = 5; -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding PodSandboxConfig used to -+ // instantiate this PodSandbox. -+ map annotations = 6; -+ // runtime configuration used for this PodSandbox. -+ string runtime_handler = 7; -+} -+ -+message ListPodSandboxResponse { -+ // List of PodSandboxes. -+ repeated PodSandbox items = 1; -+} -+ -+message PodSandboxStatsRequest { -+ // ID of the pod sandbox for which to retrieve stats. -+ string pod_sandbox_id = 1; -+} -+ -+message PodSandboxStatsResponse { -+ PodSandboxStats stats = 1; -+} -+ -+// PodSandboxStatsFilter is used to filter the list of pod sandboxes to retrieve stats for. -+// All those fields are combined with 'AND'. -+message PodSandboxStatsFilter { -+ // ID of the pod sandbox. -+ string id = 1; -+ // LabelSelector to select matches. -+ // Only api.MatchLabels is supported for now and the requirements -+ // are ANDed. MatchExpressions is not supported yet. -+ map label_selector = 2; -+} -+ -+message ListPodSandboxStatsRequest { -+ // Filter for the list request. -+ PodSandboxStatsFilter filter = 1; -+} -+ -+message ListPodSandboxStatsResponse { -+ // Stats of the pod sandbox. -+ repeated PodSandboxStats stats = 1; -+} -+ -+// PodSandboxAttributes provides basic information of the pod sandbox. -+message PodSandboxAttributes { -+ // ID of the pod sandbox. -+ string id = 1; -+ // Metadata of the pod sandbox. -+ PodSandboxMetadata metadata = 2; -+ // Key-value pairs that may be used to scope and select individual resources. -+ map labels = 3; -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding PodSandboxStatus used to -+ // instantiate the PodSandbox this status represents. -+ map annotations = 4; -+} -+ -+// PodSandboxStats provides the resource usage statistics for a pod. -+// The linux or windows field will be populated depending on the platform. -+message PodSandboxStats { -+ // Information of the pod. -+ PodSandboxAttributes attributes = 1; -+ // Stats from linux. -+ LinuxPodSandboxStats linux = 2; -+ // Stats from windows. -+ WindowsPodSandboxStats windows = 3; -+} -+ -+// LinuxPodSandboxStats provides the resource usage statistics for a pod sandbox on linux. -+message LinuxPodSandboxStats { -+ // CPU usage gathered for the pod sandbox. -+ CpuUsage cpu = 1; -+ // Memory usage gathered for the pod sandbox. -+ MemoryUsage memory = 2; -+ // Network usage gathered for the pod sandbox -+ NetworkUsage network = 3; -+ // Stats pertaining to processes in the pod sandbox. -+ ProcessUsage process = 4; -+ // Stats of containers in the measured pod sandbox. -+ repeated ContainerStats containers = 5; -+} -+ -+// WindowsPodSandboxStats provides the resource usage statistics for a pod sandbox on windows -+message WindowsPodSandboxStats { -+ // TODO: Add stats relevant to windows. -+} -+ -+// NetworkUsage contains data about network resources. -+message NetworkUsage { -+ // The time at which these stats were updated. -+ int64 timestamp = 1; -+ // Stats for the default network interface. -+ NetworkInterfaceUsage default_interface = 2; -+ // Stats for all found network interfaces, excluding the default. -+ repeated NetworkInterfaceUsage interfaces = 3; -+} -+ -+// NetworkInterfaceUsage contains resource value data about a network interface. -+message NetworkInterfaceUsage { -+ // The name of the network interface. -+ string name = 1; -+ // Cumulative count of bytes received. -+ UInt64Value rx_bytes = 2; -+ // Cumulative count of receive errors encountered. -+ UInt64Value rx_errors = 3; -+ // Cumulative count of bytes transmitted. -+ UInt64Value tx_bytes = 4; -+ // Cumulative count of transmit errors encountered. -+ UInt64Value tx_errors = 5; -+} -+ -+// ProcessUsage are stats pertaining to processes. -+message ProcessUsage { -+ // The time at which these stats were updated. -+ int64 timestamp = 1; -+ // Number of processes. -+ UInt64Value process_count = 2; -+} -+ -+// ImageSpec is an internal representation of an image. -+message ImageSpec { -+ // Container's Image field (e.g. imageID or imageDigest). -+ string image = 1; -+ // Unstructured key-value map holding arbitrary metadata. -+ // ImageSpec Annotations can be used to help the runtime target specific -+ // images in multi-arch images. -+ map annotations = 2; -+} -+ -+message KeyValue { -+ string key = 1; -+ string value = 2; -+} -+ -+// LinuxContainerResources specifies Linux specific configuration for -+// resources. -+message LinuxContainerResources { -+ // CPU CFS (Completely Fair Scheduler) period. Default: 0 (not specified). -+ int64 cpu_period = 1; -+ // CPU CFS (Completely Fair Scheduler) quota. Default: 0 (not specified). -+ int64 cpu_quota = 2; -+ // CPU shares (relative weight vs. other containers). Default: 0 (not specified). -+ int64 cpu_shares = 3; -+ // Memory limit in bytes. Default: 0 (not specified). -+ int64 memory_limit_in_bytes = 4; -+ // OOMScoreAdj adjusts the oom-killer score. Default: 0 (not specified). -+ int64 oom_score_adj = 5; -+ // CpusetCpus constrains the allowed set of logical CPUs. Default: "" (not specified). -+ string cpuset_cpus = 6; -+ // CpusetMems constrains the allowed set of memory nodes. Default: "" (not specified). -+ string cpuset_mems = 7; -+ // List of HugepageLimits to limit the HugeTLB usage of container per page size. Default: nil (not specified). -+ repeated HugepageLimit hugepage_limits = 8; -+ // Unified resources for cgroup v2. Default: nil (not specified). -+ // Each key/value in the map refers to the cgroup v2. -+ // e.g. "memory.max": "6937202688" or "io.weight": "default 100". -+ map unified = 9; -+ // Memory swap limit in bytes. Default 0 (not specified). -+ int64 memory_swap_limit_in_bytes = 10; -+} -+ -+// HugepageLimit corresponds to the file`hugetlb..limit_in_byte` in container level cgroup. -+// For example, `PageSize=1GB`, `Limit=1073741824` means setting `1073741824` bytes to hugetlb.1GB.limit_in_bytes. -+message HugepageLimit { -+ // The value of PageSize has the format B (2MB, 1GB), -+ // and must match the of the corresponding control file found in `hugetlb..limit_in_bytes`. -+ // The values of are intended to be parsed using base 1024("1KB" = 1024, "1MB" = 1048576, etc). -+ string page_size = 1; -+ // limit in bytes of hugepagesize HugeTLB usage. -+ uint64 limit = 2; -+} -+ -+// SELinuxOption are the labels to be applied to the container. -+message SELinuxOption { -+ string user = 1; -+ string role = 2; -+ string type = 3; -+ string level = 4; -+} -+ -+// Capability contains the container capabilities to add or drop -+// Dropping a capability will drop it from all sets. -+// If a capability is added to only the add_capabilities list then it gets added to permitted, -+// inheritable, effective and bounding sets, i.e. all sets except the ambient set. -+// If a capability is added to only the add_ambient_capabilities list then it gets added to all sets, i.e permitted -+// inheritable, effective, bounding and ambient sets. -+// If a capability is added to add_capabilities and add_ambient_capabilities lists then it gets added to all sets, i.e. -+// permitted, inheritable, effective, bounding and ambient sets. -+message Capability { -+ // List of capabilities to add. -+ repeated string add_capabilities = 1; -+ // List of capabilities to drop. -+ repeated string drop_capabilities = 2; -+ // List of ambient capabilities to add. -+ repeated string add_ambient_capabilities = 3; -+} -+ -+// LinuxContainerSecurityContext holds linux security configuration that will be applied to a container. -+message LinuxContainerSecurityContext { -+ // Capabilities to add or drop. -+ Capability capabilities = 1; -+ // If set, run container in privileged mode. -+ // Privileged mode is incompatible with the following options. If -+ // privileged is set, the following features MAY have no effect: -+ // 1. capabilities -+ // 2. selinux_options -+ // 4. seccomp -+ // 5. apparmor -+ // -+ // Privileged mode implies the following specific options are applied: -+ // 1. All capabilities are added. -+ // 2. Sensitive paths, such as kernel module paths within sysfs, are not masked. -+ // 3. Any sysfs and procfs mounts are mounted RW. -+ // 4. AppArmor confinement is not applied. -+ // 5. Seccomp restrictions are not applied. -+ // 6. The device cgroup does not restrict access to any devices. -+ // 7. All devices from the host's /dev are available within the container. -+ // 8. SELinux restrictions are not applied (e.g. label=disabled). -+ bool privileged = 2; -+ // Configurations for the container's namespaces. -+ // Only used if the container uses namespace for isolation. -+ NamespaceOption namespace_options = 3; -+ // SELinux context to be optionally applied. -+ SELinuxOption selinux_options = 4; -+ // UID to run the container process as. Only one of run_as_user and -+ // run_as_username can be specified at a time. -+ Int64Value run_as_user = 5; -+ // GID to run the container process as. run_as_group should only be specified -+ // when run_as_user or run_as_username is specified; otherwise, the runtime -+ // MUST error. -+ Int64Value run_as_group = 12; -+ // User name to run the container process as. If specified, the user MUST -+ // exist in the container image (i.e. in the /etc/passwd inside the image), -+ // and be resolved there by the runtime; otherwise, the runtime MUST error. -+ string run_as_username = 6; -+ // If set, the root filesystem of the container is read-only. -+ bool readonly_rootfs = 7; -+ // List of groups applied to the first process run in the container, in -+ // addition to the container's primary GID. -+ repeated int64 supplemental_groups = 8; -+ // no_new_privs defines if the flag for no_new_privs should be set on the -+ // container. -+ bool no_new_privs = 11; -+ // masked_paths is a slice of paths that should be masked by the container -+ // runtime, this can be passed directly to the OCI spec. -+ repeated string masked_paths = 13; -+ // readonly_paths is a slice of paths that should be set as readonly by the -+ // container runtime, this can be passed directly to the OCI spec. -+ repeated string readonly_paths = 14; -+ // Seccomp profile for the container. -+ SecurityProfile seccomp = 15; -+ // AppArmor profile for the container. -+ SecurityProfile apparmor = 16; -+ // AppArmor profile for the container, candidate values are: -+ // * runtime/default: equivalent to not specifying a profile. -+ // * unconfined: no profiles are loaded -+ // * localhost/: profile loaded on the node -+ // (localhost) by name. The possible profile names are detailed at -+ // https://gitlab.com/apparmor/apparmor/-/wikis/AppArmor_Core_Policy_Reference -+ string apparmor_profile = 9 [deprecated=true]; -+ // Seccomp profile for the container, candidate values are: -+ // * runtime/default: the default profile for the container runtime -+ // * unconfined: unconfined profile, ie, no seccomp sandboxing -+ // * localhost/: the profile installed on the node. -+ // is the full path of the profile. -+ // Default: "", which is identical with unconfined. -+ string seccomp_profile_path = 10 [deprecated=true]; -+} -+ -+// LinuxContainerConfig contains platform-specific configuration for -+// Linux-based containers. -+message LinuxContainerConfig { -+ // Resources specification for the container. -+ LinuxContainerResources resources = 1; -+ // LinuxContainerSecurityContext configuration for the container. -+ LinuxContainerSecurityContext security_context = 2; -+} -+ -+// WindowsSandboxSecurityContext holds platform-specific configurations that will be -+// applied to a sandbox. -+// These settings will only apply to the sandbox container. -+message WindowsSandboxSecurityContext { -+ // User name to run the container process as. If specified, the user MUST -+ // exist in the container image and be resolved there by the runtime; -+ // otherwise, the runtime MUST return error. -+ string run_as_username = 1; -+ -+ // The contents of the GMSA credential spec to use to run this container. -+ string credential_spec = 2; -+ -+ // Indicates whether the container requested to run as a HostProcess container. -+ bool host_process = 3; -+} -+ -+// WindowsPodSandboxConfig holds platform-specific configurations for Windows -+// host platforms and Windows-based containers. -+message WindowsPodSandboxConfig { -+ // WindowsSandboxSecurityContext holds sandbox security attributes. -+ WindowsSandboxSecurityContext security_context = 1; -+} -+ -+// WindowsContainerSecurityContext holds windows security configuration that will be applied to a container. -+message WindowsContainerSecurityContext { -+ // User name to run the container process as. If specified, the user MUST -+ // exist in the container image and be resolved there by the runtime; -+ // otherwise, the runtime MUST return error. -+ string run_as_username = 1; -+ -+ // The contents of the GMSA credential spec to use to run this container. -+ string credential_spec = 2; -+ -+ // Indicates whether a container is to be run as a HostProcess container. -+ bool host_process = 3; -+} -+ -+// WindowsContainerConfig contains platform-specific configuration for -+// Windows-based containers. -+message WindowsContainerConfig { -+ // Resources specification for the container. -+ WindowsContainerResources resources = 1; -+ // WindowsContainerSecurityContext configuration for the container. -+ WindowsContainerSecurityContext security_context = 2; -+} -+ -+// WindowsContainerResources specifies Windows specific configuration for -+// resources. -+message WindowsContainerResources { -+ // CPU shares (relative weight vs. other containers). Default: 0 (not specified). -+ int64 cpu_shares = 1; -+ // Number of CPUs available to the container. Default: 0 (not specified). -+ int64 cpu_count = 2; -+ // Specifies the portion of processor cycles that this container can use as a percentage times 100. -+ int64 cpu_maximum = 3; -+ // Memory limit in bytes. Default: 0 (not specified). -+ int64 memory_limit_in_bytes = 4; -+ // Specifies the size of the rootfs / scratch space in bytes to be configured for this container. Default: 0 (not specified). -+ int64 rootfs_size_in_bytes = 5; -+} -+ -+// ContainerMetadata holds all necessary information for building the container -+// name. The container runtime is encouraged to expose the metadata in its user -+// interface for better user experience. E.g., runtime can construct a unique -+// container name based on the metadata. Note that (name, attempt) is unique -+// within a sandbox for the entire lifetime of the sandbox. -+message ContainerMetadata { -+ // Name of the container. Same as the container name in the PodSpec. -+ string name = 1; -+ // Attempt number of creating the container. Default: 0. -+ uint32 attempt = 2; -+} -+ -+// Device specifies a host device to mount into a container. -+message Device { -+ // Path of the device within the container. -+ string container_path = 1; -+ // Path of the device on the host. -+ string host_path = 2; -+ // Cgroups permissions of the device, candidates are one or more of -+ // * r - allows container to read from the specified device. -+ // * w - allows container to write to the specified device. -+ // * m - allows container to create device files that do not yet exist. -+ string permissions = 3; -+} -+ -+// ContainerConfig holds all the required and optional fields for creating a -+// container. -+message ContainerConfig { -+ // Metadata of the container. This information will uniquely identify the -+ // container, and the runtime should leverage this to ensure correct -+ // operation. The runtime may also use this information to improve UX, such -+ // as by constructing a readable name. -+ ContainerMetadata metadata = 1 ; -+ // Image to use. -+ ImageSpec image = 2; -+ // Command to execute (i.e., entrypoint for docker) -+ repeated string command = 3; -+ // Args for the Command (i.e., command for docker) -+ repeated string args = 4; -+ // Current working directory of the command. -+ string working_dir = 5; -+ // List of environment variable to set in the container. -+ repeated KeyValue envs = 6; -+ // Mounts for the container. -+ repeated Mount mounts = 7; -+ // Devices for the container. -+ repeated Device devices = 8; -+ // Key-value pairs that may be used to scope and select individual resources. -+ // Label keys are of the form: -+ // label-key ::= prefixed-name | name -+ // prefixed-name ::= prefix '/' name -+ // prefix ::= DNS_SUBDOMAIN -+ // name ::= DNS_LABEL -+ map labels = 9; -+ // Unstructured key-value map that may be used by the kubelet to store and -+ // retrieve arbitrary metadata. -+ // -+ // Annotations MUST NOT be altered by the runtime; the annotations stored -+ // here MUST be returned in the ContainerStatus associated with the container -+ // this ContainerConfig creates. -+ // -+ // In general, in order to preserve a well-defined interface between the -+ // kubelet and the container runtime, annotations SHOULD NOT influence -+ // runtime behaviour. -+ map annotations = 10; -+ // Path relative to PodSandboxConfig.LogDirectory for container to store -+ // the log (STDOUT and STDERR) on the host. -+ // E.g., -+ // PodSandboxConfig.LogDirectory = `/var/log/pods//` -+ // ContainerConfig.LogPath = `containerName/Instance#.log` -+ // -+ // WARNING: Log management and how kubelet should interface with the -+ // container logs are under active discussion in -+ // https://issues.k8s.io/24677. There *may* be future change of direction -+ // for logging as the discussion carries on. -+ string log_path = 11; -+ -+ // Variables for interactive containers, these have very specialized -+ // use-cases (e.g. debugging). -+ bool stdin = 12; -+ bool stdin_once = 13; -+ bool tty = 14; -+ -+ // Configuration specific to Linux containers. -+ LinuxContainerConfig linux = 15; -+ // Configuration specific to Windows containers. -+ WindowsContainerConfig windows = 16; -+} -+ -+message CreateContainerRequest { -+ // ID of the PodSandbox in which the container should be created. -+ string pod_sandbox_id = 1; -+ // Config of the container. -+ ContainerConfig config = 2; -+ // Config of the PodSandbox. This is the same config that was passed -+ // to RunPodSandboxRequest to create the PodSandbox. It is passed again -+ // here just for easy reference. The PodSandboxConfig is immutable and -+ // remains the same throughout the lifetime of the pod. -+ PodSandboxConfig sandbox_config = 3; -+} -+ -+message CreateContainerResponse { -+ // ID of the created container. -+ string container_id = 1; -+} -+ -+message StartContainerRequest { -+ // ID of the container to start. -+ string container_id = 1; -+} -+ -+message StartContainerResponse {} -+ -+message StopContainerRequest { -+ // ID of the container to stop. -+ string container_id = 1; -+ // Timeout in seconds to wait for the container to stop before forcibly -+ // terminating it. Default: 0 (forcibly terminate the container immediately) -+ int64 timeout = 2; -+} -+ -+message StopContainerResponse {} -+ -+message RemoveContainerRequest { -+ // ID of the container to remove. -+ string container_id = 1; -+} -+ -+message RemoveContainerResponse {} -+ -+enum ContainerState { -+ CONTAINER_CREATED = 0; -+ CONTAINER_RUNNING = 1; -+ CONTAINER_EXITED = 2; -+ CONTAINER_UNKNOWN = 3; -+} -+ -+// ContainerStateValue is the wrapper of ContainerState. -+message ContainerStateValue { -+ // State of the container. -+ ContainerState state = 1; -+} -+ -+// ContainerFilter is used to filter containers. -+// All those fields are combined with 'AND' -+message ContainerFilter { -+ // ID of the container. -+ string id = 1; -+ // State of the container. -+ ContainerStateValue state = 2; -+ // ID of the PodSandbox. -+ string pod_sandbox_id = 3; -+ // LabelSelector to select matches. -+ // Only api.MatchLabels is supported for now and the requirements -+ // are ANDed. MatchExpressions is not supported yet. -+ map label_selector = 4; -+} -+ -+message ListContainersRequest { -+ ContainerFilter filter = 1; -+} -+ -+// Container provides the runtime information for a container, such as ID, hash, -+// state of the container. -+message Container { -+ // ID of the container, used by the container runtime to identify -+ // a container. -+ string id = 1; -+ // ID of the sandbox to which this container belongs. -+ string pod_sandbox_id = 2; -+ // Metadata of the container. -+ ContainerMetadata metadata = 3; -+ // Spec of the image. -+ ImageSpec image = 4; -+ // Reference to the image in use. For most runtimes, this should be an -+ // image ID. -+ string image_ref = 5; -+ // State of the container. -+ ContainerState state = 6; -+ // Creation time of the container in nanoseconds. -+ int64 created_at = 7; -+ // Key-value pairs that may be used to scope and select individual resources. -+ map labels = 8; -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding ContainerConfig used to -+ // instantiate this Container. -+ map annotations = 9; -+} -+ -+message ListContainersResponse { -+ // List of containers. -+ repeated Container containers = 1; -+} -+ -+message ContainerStatusRequest { -+ // ID of the container for which to retrieve status. -+ string container_id = 1; -+ // Verbose indicates whether to return extra information about the container. -+ bool verbose = 2; -+} -+ -+// ContainerStatus represents the status of a container. -+message ContainerStatus { -+ // ID of the container. -+ string id = 1; -+ // Metadata of the container. -+ ContainerMetadata metadata = 2; -+ // Status of the container. -+ ContainerState state = 3; -+ // Creation time of the container in nanoseconds. -+ int64 created_at = 4; -+ // Start time of the container in nanoseconds. Default: 0 (not specified). -+ int64 started_at = 5; -+ // Finish time of the container in nanoseconds. Default: 0 (not specified). -+ int64 finished_at = 6; -+ // Exit code of the container. Only required when finished_at != 0. Default: 0. -+ int32 exit_code = 7; -+ // Spec of the image. -+ ImageSpec image = 8; -+ // Reference to the image in use. For most runtimes, this should be an -+ // image ID -+ string image_ref = 9; -+ // Brief CamelCase string explaining why container is in its current state. -+ string reason = 10; -+ // Human-readable message indicating details about why container is in its -+ // current state. -+ string message = 11; -+ // Key-value pairs that may be used to scope and select individual resources. -+ map labels = 12; -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding ContainerConfig used to -+ // instantiate the Container this status represents. -+ map annotations = 13; -+ // Mounts for the container. -+ repeated Mount mounts = 14; -+ // Log path of container. -+ string log_path = 15; -+ // Resource limits configuration of the container. -+ ContainerResources resources = 16; -+} -+ -+message ContainerStatusResponse { -+ // Status of the container. -+ ContainerStatus status = 1; -+ // Info is extra information of the Container. The key could be arbitrary string, and -+ // value should be in json format. The information could include anything useful for -+ // debug, e.g. pid for linux container based container runtime. -+ // It should only be returned non-empty when Verbose is true. -+ map info = 2; -+} -+ -+// ContainerResources holds resource limits configuration for a container. -+message ContainerResources { -+ // Resource limits configuration specific to Linux container. -+ LinuxContainerResources linux = 1; -+ // Resource limits configuration specific to Windows container. -+ WindowsContainerResources windows = 2; -+} -+ -+message UpdateContainerResourcesRequest { -+ // ID of the container to update. -+ string container_id = 1; -+ // Resource configuration specific to Linux containers. -+ LinuxContainerResources linux = 2; -+ // Resource configuration specific to Windows containers. -+ WindowsContainerResources windows = 3; -+ // Unstructured key-value map holding arbitrary additional information for -+ // container resources updating. This can be used for specifying experimental -+ // resources to update or other options to use when updating the container. -+ map annotations = 4; -+} -+ -+message UpdateContainerResourcesResponse {} -+ -+message ExecSyncRequest { -+ // ID of the container. -+ string container_id = 1; -+ // Command to execute. -+ repeated string cmd = 2; -+ // Timeout in seconds to stop the command. Default: 0 (run forever). -+ int64 timeout = 3; -+} -+ -+message ExecSyncResponse { -+ // Captured command stdout output. -+ bytes stdout = 1; -+ // Captured command stderr output. -+ bytes stderr = 2; -+ // Exit code the command finished with. Default: 0 (success). -+ int32 exit_code = 3; -+} -+ -+message ExecRequest { -+ // ID of the container in which to execute the command. -+ string container_id = 1; -+ // Command to execute. -+ repeated string cmd = 2; -+ // Whether to exec the command in a TTY. -+ bool tty = 3; -+ // Whether to stream stdin. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ bool stdin = 4; -+ // Whether to stream stdout. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ bool stdout = 5; -+ // Whether to stream stderr. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported -+ // in this case. The output of stdout and stderr will be combined to a -+ // single stream. -+ bool stderr = 6; -+} -+ -+message ExecResponse { -+ // Fully qualified URL of the exec streaming server. -+ string url = 1; -+} -+ -+message AttachRequest { -+ // ID of the container to which to attach. -+ string container_id = 1; -+ // Whether to stream stdin. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ bool stdin = 2; -+ // Whether the process being attached is running in a TTY. -+ // This must match the TTY setting in the ContainerConfig. -+ bool tty = 3; -+ // Whether to stream stdout. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ bool stdout = 4; -+ // Whether to stream stderr. -+ // One of `stdin`, `stdout`, and `stderr` MUST be true. -+ // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported -+ // in this case. The output of stdout and stderr will be combined to a -+ // single stream. -+ bool stderr = 5; -+} -+ -+message AttachResponse { -+ // Fully qualified URL of the attach streaming server. -+ string url = 1; -+} -+ -+message PortForwardRequest { -+ // ID of the container to which to forward the port. -+ string pod_sandbox_id = 1; -+ // Port to forward. -+ repeated int32 port = 2; -+} -+ -+message PortForwardResponse { -+ // Fully qualified URL of the port-forward streaming server. -+ string url = 1; -+} -+ -+message ImageFilter { -+ // Spec of the image. -+ ImageSpec image = 1; -+} -+ -+message ListImagesRequest { -+ // Filter to list images. -+ ImageFilter filter = 1; -+} -+ -+// Basic information about a container image. -+message Image { -+ // ID of the image. -+ string id = 1; -+ // Other names by which this image is known. -+ repeated string repo_tags = 2; -+ // Digests by which this image is known. -+ repeated string repo_digests = 3; -+ // Size of the image in bytes. Must be > 0. -+ uint64 size = 4; -+ // UID that will run the command(s). This is used as a default if no user is -+ // specified when creating the container. UID and the following user name -+ // are mutually exclusive. -+ Int64Value uid = 5; -+ // User name that will run the command(s). This is used if UID is not set -+ // and no user is specified when creating container. -+ string username = 6; -+ // ImageSpec for image which includes annotations -+ ImageSpec spec = 7; -+ // Recommendation on whether this image should be exempt from garbage collection. -+ // It must only be treated as a recommendation -- the client can still request that the image be deleted, -+ // and the runtime must oblige. -+ bool pinned = 8; -+} -+ -+message ListImagesResponse { -+ // List of images. -+ repeated Image images = 1; -+} -+ -+message ImageStatusRequest { -+ // Spec of the image. -+ ImageSpec image = 1; -+ // Verbose indicates whether to return extra information about the image. -+ bool verbose = 2; -+} -+ -+message ImageStatusResponse { -+ // Status of the image. -+ Image image = 1; -+ // Info is extra information of the Image. The key could be arbitrary string, and -+ // value should be in json format. The information could include anything useful -+ // for debug, e.g. image config for oci image based container runtime. -+ // It should only be returned non-empty when Verbose is true. -+ map info = 2; -+} -+ -+// AuthConfig contains authorization information for connecting to a registry. -+message AuthConfig { -+ string username = 1; -+ string password = 2; -+ string auth = 3; -+ string server_address = 4; -+ // IdentityToken is used to authenticate the user and get -+ // an access token for the registry. -+ string identity_token = 5; -+ // RegistryToken is a bearer token to be sent to a registry -+ string registry_token = 6; -+} -+ -+message PullImageRequest { -+ // Spec of the image. -+ ImageSpec image = 1; -+ // Authentication configuration for pulling the image. -+ AuthConfig auth = 2; -+ // Config of the PodSandbox, which is used to pull image in PodSandbox context. -+ PodSandboxConfig sandbox_config = 3; -+} -+ -+message PullImageResponse { -+ // Reference to the image in use. For most runtimes, this should be an -+ // image ID or digest. -+ string image_ref = 1; -+} -+ -+message RemoveImageRequest { -+ // Spec of the image to remove. -+ ImageSpec image = 1; -+} -+ -+message RemoveImageResponse {} -+ -+message NetworkConfig { -+ // CIDR to use for pod IP addresses. If the CIDR is empty, runtimes -+ // should omit it. -+ string pod_cidr = 1; -+} -+ -+message RuntimeConfig { -+ NetworkConfig network_config = 1; -+} -+ -+message UpdateRuntimeConfigRequest { -+ RuntimeConfig runtime_config = 1; -+} -+ -+message UpdateRuntimeConfigResponse {} -+ -+// RuntimeCondition contains condition information for the runtime. -+// There are 2 kinds of runtime conditions: -+// 1. Required conditions: Conditions are required for kubelet to work -+// properly. If any required condition is unmet, the node will be not ready. -+// The required conditions include: -+// * RuntimeReady: RuntimeReady means the runtime is up and ready to accept -+// basic containers e.g. container only needs host network. -+// * NetworkReady: NetworkReady means the runtime network is up and ready to -+// accept containers which require container network. -+// 2. Optional conditions: Conditions are informative to the user, but kubelet -+// will not rely on. Since condition type is an arbitrary string, all conditions -+// not required are optional. These conditions will be exposed to users to help -+// them understand the status of the system. -+message RuntimeCondition { -+ // Type of runtime condition. -+ string type = 1; -+ // Status of the condition, one of true/false. Default: false. -+ bool status = 2; -+ // Brief CamelCase string containing reason for the condition's last transition. -+ string reason = 3; -+ // Human-readable message indicating details about last transition. -+ string message = 4; -+} -+ -+// RuntimeStatus is information about the current status of the runtime. -+message RuntimeStatus { -+ // List of current observed runtime conditions. -+ repeated RuntimeCondition conditions = 1; -+} -+ -+message StatusRequest { -+ // Verbose indicates whether to return extra information about the runtime. -+ bool verbose = 1; -+} -+ -+message StatusResponse { -+ // Status of the Runtime. -+ RuntimeStatus status = 1; -+ // Info is extra information of the Runtime. The key could be arbitrary string, and -+ // value should be in json format. The information could include anything useful for -+ // debug, e.g. plugins used by the container runtime. -+ // It should only be returned non-empty when Verbose is true. -+ map info = 2; -+} -+ -+message ImageFsInfoRequest {} -+ -+// UInt64Value is the wrapper of uint64. -+message UInt64Value { -+ // The value. -+ uint64 value = 1; -+} -+ -+// FilesystemIdentifier uniquely identify the filesystem. -+message FilesystemIdentifier{ -+ // Mountpoint of a filesystem. -+ string mountpoint = 1; -+} -+ -+// FilesystemUsage provides the filesystem usage information. -+message FilesystemUsage { -+ // Timestamp in nanoseconds at which the information were collected. Must be > 0. -+ int64 timestamp = 1; -+ // The unique identifier of the filesystem. -+ FilesystemIdentifier fs_id = 2; -+ // UsedBytes represents the bytes used for images on the filesystem. -+ // This may differ from the total bytes used on the filesystem and may not -+ // equal CapacityBytes - AvailableBytes. -+ UInt64Value used_bytes = 3; -+ // InodesUsed represents the inodes used by the images. -+ // This may not equal InodesCapacity - InodesAvailable because the underlying -+ // filesystem may also be used for purposes other than storing images. -+ UInt64Value inodes_used = 4; -+} -+ -+message ImageFsInfoResponse { -+ // Information of image filesystem(s). -+ repeated FilesystemUsage image_filesystems = 1; -+} -+ -+message ContainerStatsRequest{ -+ // ID of the container for which to retrieve stats. -+ string container_id = 1; -+} -+ -+message ContainerStatsResponse { -+ // Stats of the container. -+ ContainerStats stats = 1; -+} -+ -+message ListContainerStatsRequest{ -+ // Filter for the list request. -+ ContainerStatsFilter filter = 1; -+} -+ -+// ContainerStatsFilter is used to filter containers. -+// All those fields are combined with 'AND' -+message ContainerStatsFilter { -+ // ID of the container. -+ string id = 1; -+ // ID of the PodSandbox. -+ string pod_sandbox_id = 2; -+ // LabelSelector to select matches. -+ // Only api.MatchLabels is supported for now and the requirements -+ // are ANDed. MatchExpressions is not supported yet. -+ map label_selector = 3; -+} -+ -+message ListContainerStatsResponse { -+ // Stats of the container. -+ repeated ContainerStats stats = 1; -+} -+ -+// ContainerAttributes provides basic information of the container. -+message ContainerAttributes { -+ // ID of the container. -+ string id = 1; -+ // Metadata of the container. -+ ContainerMetadata metadata = 2; -+ // Key-value pairs that may be used to scope and select individual resources. -+ map labels = 3; -+ // Unstructured key-value map holding arbitrary metadata. -+ // Annotations MUST NOT be altered by the runtime; the value of this field -+ // MUST be identical to that of the corresponding ContainerConfig used to -+ // instantiate the Container this status represents. -+ map annotations = 4; -+} -+ -+// ContainerStats provides the resource usage statistics for a container. -+message ContainerStats { -+ // Information of the container. -+ ContainerAttributes attributes = 1; -+ // CPU usage gathered from the container. -+ CpuUsage cpu = 2; -+ // Memory usage gathered from the container. -+ MemoryUsage memory = 3; -+ // Usage of the writable layer. -+ FilesystemUsage writable_layer = 4; -+} -+ -+// CpuUsage provides the CPU usage information. -+message CpuUsage { -+ // Timestamp in nanoseconds at which the information were collected. Must be > 0. -+ int64 timestamp = 1; -+ // Cumulative CPU usage (sum across all cores) since object creation. -+ UInt64Value usage_core_nano_seconds = 2; -+ // Total CPU usage (sum of all cores) averaged over the sample window. -+ // The "core" unit can be interpreted as CPU core-nanoseconds per second. -+ UInt64Value usage_nano_cores = 3; -+} -+ -+// MemoryUsage provides the memory usage information. -+message MemoryUsage { -+ // Timestamp in nanoseconds at which the information were collected. Must be > 0. -+ int64 timestamp = 1; -+ // The amount of working set memory in bytes. -+ UInt64Value working_set_bytes = 2; -+ // Available memory for use. This is defined as the memory limit - workingSetBytes. -+ UInt64Value available_bytes = 3; -+ // Total memory in use. This includes all memory regardless of when it was accessed. -+ UInt64Value usage_bytes = 4; -+ // The amount of anonymous and swap cache memory (includes transparent hugepages). -+ UInt64Value rss_bytes = 5; -+ // Cumulative number of minor page faults. -+ UInt64Value page_faults = 6; -+ // Cumulative number of major page faults. -+ UInt64Value major_page_faults = 7; -+} -+ -+message ReopenContainerLogRequest { -+ // ID of the container for which to reopen the log. -+ string container_id = 1; -+} -+ -+message ReopenContainerLogResponse{ -+} -+ -+message CheckpointContainerRequest { -+ // ID of the container to be checkpointed. -+ string container_id = 1; -+ // Location of the checkpoint archive used for export -+ string location = 2; -+ // Timeout in seconds for the checkpoint to complete. -+ // Timeout of zero means to use the CRI default. -+ // Timeout > 0 means to use the user specified timeout. -+ int64 timeout = 3; -+} -+ -+message CheckpointContainerResponse {} -+ -+message GetEventsRequest {} -+ -+message ContainerEventResponse { -+ // ID of the container -+ string container_id = 1; -+ -+ // Type of the container event -+ ContainerEventType container_event_type = 2; -+ -+ // Creation timestamp of this event -+ int64 created_at = 3; -+ -+ // ID of the sandbox container -+ PodSandboxMetadata pod_sandbox_metadata = 4; -+} -+ -+enum ContainerEventType { -+ // Container created -+ CONTAINER_CREATED_EVENT = 0; -+ -+ // Container started -+ CONTAINER_STARTED_EVENT = 1; -+ -+ // Container stopped -+ CONTAINER_STOPPED_EVENT = 2; -+ -+ // Container deleted -+ CONTAINER_DELETED_EVENT = 3; -+} -diff --git a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/constants.go b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/constants.go -new file mode 100755 -index 0000000..6f9ad59 ---- /dev/null -+++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/constants.go -@@ -0,0 +1,55 @@ -+/* -+Copyright 2020 The Kubernetes Authors. -+ -+Licensed under the Apache License, Version 2.0 (the "License"); -+you may not use this file except in compliance with the License. -+You may obtain a copy of the License at -+ -+ 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. -+*/ -+ -+package v1 -+ -+// This file contains all constants defined in CRI. -+ -+// Required runtime condition type. -+const ( -+ // RuntimeReady means the runtime is up and ready to accept basic containers. -+ RuntimeReady = "RuntimeReady" -+ // NetworkReady means the runtime network is up and ready to accept containers which require network. -+ NetworkReady = "NetworkReady" -+) -+ -+// LogStreamType is the type of the stream in CRI container log. -+type LogStreamType string -+ -+const ( -+ // Stdout is the stream type for stdout. -+ Stdout LogStreamType = "stdout" -+ // Stderr is the stream type for stderr. -+ Stderr LogStreamType = "stderr" -+) -+ -+// LogTag is the tag of a log line in CRI container log. -+// Currently defined log tags: -+// * First tag: Partial/Full - P/F. -+// The field in the container log format can be extended to include multiple -+// tags by using a delimiter, but changes should be rare. If it becomes clear -+// that better extensibility is desired, a more extensible format (e.g., json) -+// should be adopted as a replacement and/or addition. -+type LogTag string -+ -+const ( -+ // LogTagPartial means the line is part of multiple lines. -+ LogTagPartial LogTag = "P" -+ // LogTagFull means the line is a single full line or the end of multiple lines. -+ LogTagFull LogTag = "F" -+ // LogTagDelimiter is the delimiter for different log tags. -+ LogTagDelimiter = ":" -+) -diff --git a/vendor/k8s.io/klog/v2/.gitignore b/vendor/k8s.io/klog/v2/.gitignore -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/CONTRIBUTING.md b/vendor/k8s.io/klog/v2/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/LICENSE b/vendor/k8s.io/klog/v2/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/OWNERS b/vendor/k8s.io/klog/v2/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/README.md b/vendor/k8s.io/klog/v2/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/RELEASE.md b/vendor/k8s.io/klog/v2/RELEASE.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/SECURITY.md b/vendor/k8s.io/klog/v2/SECURITY.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/SECURITY_CONTACTS b/vendor/k8s.io/klog/v2/SECURITY_CONTACTS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/code-of-conduct.md b/vendor/k8s.io/klog/v2/code-of-conduct.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/contextual.go b/vendor/k8s.io/klog/v2/contextual.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/exit.go b/vendor/k8s.io/klog/v2/exit.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/imports.go b/vendor/k8s.io/klog/v2/imports.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/internal/buffer/buffer.go b/vendor/k8s.io/klog/v2/internal/buffer/buffer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/internal/clock/README.md b/vendor/k8s.io/klog/v2/internal/clock/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/internal/clock/clock.go b/vendor/k8s.io/klog/v2/internal/clock/clock.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/internal/dbg/dbg.go b/vendor/k8s.io/klog/v2/internal/dbg/dbg.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/internal/serialize/keyvalues.go b/vendor/k8s.io/klog/v2/internal/serialize/keyvalues.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/internal/severity/severity.go b/vendor/k8s.io/klog/v2/internal/severity/severity.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/k8s_references.go b/vendor/k8s.io/klog/v2/k8s_references.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/klog.go b/vendor/k8s.io/klog/v2/klog.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/klog_file.go b/vendor/k8s.io/klog/v2/klog_file.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/klog_file_others.go b/vendor/k8s.io/klog/v2/klog_file_others.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/klog_file_windows.go b/vendor/k8s.io/klog/v2/klog_file_windows.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/klog/v2/klogr.go b/vendor/k8s.io/klog/v2/klogr.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/LICENSE b/vendor/k8s.io/utils/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/buffer/ring_growing.go b/vendor/k8s.io/utils/buffer/ring_growing.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/clock/README.md b/vendor/k8s.io/utils/clock/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/clock/clock.go b/vendor/k8s.io/utils/clock/clock.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/inotify/LICENSE b/vendor/k8s.io/utils/inotify/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/inotify/PATENTS b/vendor/k8s.io/utils/inotify/PATENTS -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/inotify/README.md b/vendor/k8s.io/utils/inotify/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/inotify/inotify.go b/vendor/k8s.io/utils/inotify/inotify.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/inotify/inotify_linux.go b/vendor/k8s.io/utils/inotify/inotify_linux.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/inotify/inotify_others.go b/vendor/k8s.io/utils/inotify/inotify_others.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/integer/integer.go b/vendor/k8s.io/utils/integer/integer.go -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/trace/README.md b/vendor/k8s.io/utils/trace/README.md -old mode 100644 -new mode 100755 -diff --git a/vendor/k8s.io/utils/trace/trace.go b/vendor/k8s.io/utils/trace/trace.go -old mode 100644 -new mode 100755 -diff --git a/vendor/modules.txt b/vendor/modules.txt -old mode 100644 -new mode 100755 -index f9e8a91..6d24bdf ---- a/vendor/modules.txt -+++ b/vendor/modules.txt -@@ -1,3 +1,9 @@ -+# github.com/beorn7/perks v1.0.1 -+## explicit; go 1.11 -+github.com/beorn7/perks/quantile -+# github.com/cespare/xxhash/v2 v2.2.0 -+## explicit; go 1.11 -+github.com/cespare/xxhash/v2 - # github.com/checkpoint-restore/go-criu/v5 v5.3.0 - ## explicit; go 1.13 - github.com/checkpoint-restore/go-criu/v5 -@@ -13,6 +19,16 @@ github.com/cilium/ebpf/link - # github.com/containerd/console v1.0.3 - ## explicit; go 1.13 - github.com/containerd/console -+# github.com/containerd/nri v0.6.1 -+## explicit; go 1.19 -+github.com/containerd/nri/pkg/api -+github.com/containerd/nri/pkg/log -+github.com/containerd/nri/pkg/net -+github.com/containerd/nri/pkg/net/multiplex -+github.com/containerd/nri/pkg/stub -+# github.com/containerd/ttrpc v1.2.3 -+## explicit; go 1.19 -+github.com/containerd/ttrpc - # github.com/coreos/go-systemd/v22 v22.3.2 - ## explicit; go 1.12 - github.com/coreos/go-systemd/v22/dbus -@@ -28,7 +44,7 @@ github.com/docker/go-units - # github.com/euank/go-kmsg-parser v2.0.0+incompatible - ## explicit - github.com/euank/go-kmsg-parser/kmsgparser --# github.com/go-logr/logr v1.2.0 -+# github.com/go-logr/logr v1.2.3 - ## explicit; go 1.16 - github.com/go-logr/logr - # github.com/godbus/dbus/v5 v5.0.6 -@@ -36,10 +52,13 @@ github.com/go-logr/logr - github.com/godbus/dbus/v5 - # github.com/gogo/protobuf v1.3.2 - ## explicit; go 1.15 -+github.com/gogo/protobuf/gogoproto - github.com/gogo/protobuf/proto -+github.com/gogo/protobuf/protoc-gen-gogo/descriptor - github.com/gogo/protobuf/sortkeys --# github.com/golang/protobuf v1.5.2 -+# github.com/golang/protobuf v1.5.3 - ## explicit; go 1.9 -+github.com/golang/protobuf/jsonpb - github.com/golang/protobuf/proto - github.com/golang/protobuf/ptypes - github.com/golang/protobuf/ptypes/any -@@ -75,7 +94,7 @@ github.com/google/cadvisor/utils/sysfs - github.com/google/cadvisor/utils/sysinfo - github.com/google/cadvisor/version - github.com/google/cadvisor/watcher --# github.com/google/go-cmp v0.5.8 -+# github.com/google/go-cmp v0.5.9 - ## explicit; go 1.13 - github.com/google/go-cmp/cmp - github.com/google/go-cmp/cmp/internal/diff -@@ -85,7 +104,7 @@ github.com/google/go-cmp/cmp/internal/value - # github.com/google/gofuzz v1.1.0 - ## explicit; go 1.12 - github.com/google/gofuzz --# github.com/google/uuid v1.1.2 -+# github.com/google/uuid v1.3.0 - ## explicit - github.com/google/uuid - # github.com/googleapis/gnostic v0.4.1 -@@ -163,6 +182,11 @@ github.com/pkg/errors - # github.com/pmezard/go-difflib v1.0.0 - ## explicit - github.com/pmezard/go-difflib/difflib -+# github.com/prometheus/client_golang v1.14.0 -+## explicit; go 1.17 -+github.com/prometheus/client_golang/prometheus -+github.com/prometheus/client_golang/prometheus/internal -+github.com/prometheus/client_golang/prometheus/promhttp - # github.com/prometheus/client_model v0.3.0 - ## explicit; go 1.9 - github.com/prometheus/client_model/go -@@ -171,6 +195,11 @@ github.com/prometheus/client_model/go - github.com/prometheus/common/expfmt - github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg - github.com/prometheus/common/model -+# github.com/prometheus/procfs v0.8.0 -+## explicit; go 1.17 -+github.com/prometheus/procfs -+github.com/prometheus/procfs/internal/fs -+github.com/prometheus/procfs/internal/util - # github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 - ## explicit; go 1.14 - github.com/seccomp/libseccomp-golang -@@ -190,33 +219,33 @@ github.com/vishvananda/netlink/nl - # github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df - ## explicit; go 1.12 - github.com/vishvananda/netns --# golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 -+# golang.org/x/crypto v0.14.0 - ## explicit; go 1.17 - golang.org/x/crypto/ssh/terminal --# golang.org/x/net v0.4.0 -+# golang.org/x/net v0.17.0 - ## explicit; go 1.17 - golang.org/x/net/bpf - golang.org/x/net/context --golang.org/x/net/context/ctxhttp - golang.org/x/net/http/httpguts - golang.org/x/net/http2 - golang.org/x/net/http2/hpack - golang.org/x/net/idna --# golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b --## explicit; go 1.11 -+golang.org/x/net/internal/timeseries -+golang.org/x/net/trace -+# golang.org/x/oauth2 v0.7.0 -+## explicit; go 1.17 - golang.org/x/oauth2 - golang.org/x/oauth2/internal --# golang.org/x/sys v0.3.0 -+# golang.org/x/sys v0.13.0 - ## explicit; go 1.17 --golang.org/x/sys/internal/unsafeheader - golang.org/x/sys/plan9 - golang.org/x/sys/unix - golang.org/x/sys/windows - golang.org/x/sys/windows/registry --# golang.org/x/term v0.3.0 -+# golang.org/x/term v0.13.0 - ## explicit; go 1.17 - golang.org/x/term --# golang.org/x/text v0.5.0 -+# golang.org/x/text v0.13.0 - ## explicit; go 1.17 - golang.org/x/text/secure/bidirule - golang.org/x/text/transform -@@ -234,14 +263,69 @@ google.golang.org/appengine/internal/log - google.golang.org/appengine/internal/remote_api - google.golang.org/appengine/internal/urlfetch - google.golang.org/appengine/urlfetch --# google.golang.org/protobuf v1.28.1 -+# google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d -+## explicit; go 1.19 -+google.golang.org/genproto/googleapis/rpc/status -+# google.golang.org/grpc v1.57.1 -+## explicit; go 1.17 -+google.golang.org/grpc -+google.golang.org/grpc/attributes -+google.golang.org/grpc/backoff -+google.golang.org/grpc/balancer -+google.golang.org/grpc/balancer/base -+google.golang.org/grpc/balancer/grpclb/state -+google.golang.org/grpc/balancer/roundrobin -+google.golang.org/grpc/binarylog/grpc_binarylog_v1 -+google.golang.org/grpc/channelz -+google.golang.org/grpc/codes -+google.golang.org/grpc/connectivity -+google.golang.org/grpc/credentials -+google.golang.org/grpc/credentials/insecure -+google.golang.org/grpc/encoding -+google.golang.org/grpc/encoding/proto -+google.golang.org/grpc/grpclog -+google.golang.org/grpc/internal -+google.golang.org/grpc/internal/backoff -+google.golang.org/grpc/internal/balancer/gracefulswitch -+google.golang.org/grpc/internal/balancerload -+google.golang.org/grpc/internal/binarylog -+google.golang.org/grpc/internal/buffer -+google.golang.org/grpc/internal/channelz -+google.golang.org/grpc/internal/credentials -+google.golang.org/grpc/internal/envconfig -+google.golang.org/grpc/internal/grpclog -+google.golang.org/grpc/internal/grpcrand -+google.golang.org/grpc/internal/grpcsync -+google.golang.org/grpc/internal/grpcutil -+google.golang.org/grpc/internal/metadata -+google.golang.org/grpc/internal/pretty -+google.golang.org/grpc/internal/resolver -+google.golang.org/grpc/internal/resolver/dns -+google.golang.org/grpc/internal/resolver/passthrough -+google.golang.org/grpc/internal/resolver/unix -+google.golang.org/grpc/internal/serviceconfig -+google.golang.org/grpc/internal/status -+google.golang.org/grpc/internal/syscall -+google.golang.org/grpc/internal/transport -+google.golang.org/grpc/internal/transport/networktype -+google.golang.org/grpc/keepalive -+google.golang.org/grpc/metadata -+google.golang.org/grpc/peer -+google.golang.org/grpc/resolver -+google.golang.org/grpc/serviceconfig -+google.golang.org/grpc/stats -+google.golang.org/grpc/status -+google.golang.org/grpc/tap -+# google.golang.org/protobuf v1.31.0 - ## explicit; go 1.11 -+google.golang.org/protobuf/encoding/protojson - google.golang.org/protobuf/encoding/prototext - google.golang.org/protobuf/encoding/protowire - google.golang.org/protobuf/internal/descfmt - google.golang.org/protobuf/internal/descopts - google.golang.org/protobuf/internal/detrand - google.golang.org/protobuf/internal/encoding/defval -+google.golang.org/protobuf/internal/encoding/json - google.golang.org/protobuf/internal/encoding/messageset - google.golang.org/protobuf/internal/encoding/tag - google.golang.org/protobuf/internal/encoding/text -@@ -525,6 +609,9 @@ k8s.io/client-go/util/connrotation - k8s.io/client-go/util/flowcontrol - k8s.io/client-go/util/keyutil - k8s.io/client-go/util/workqueue -+# k8s.io/cri-api v0.25.3 -+## explicit; go 1.19 -+k8s.io/cri-api/pkg/apis/runtime/v1 - # k8s.io/klog/v2 v2.80.1 - ## explicit; go 1.13 - k8s.io/klog/v2 -@@ -543,7 +630,7 @@ k8s.io/utils/trace - # sigs.k8s.io/structured-merge-diff/v4 v4.0.2 - ## explicit; go 1.13 - sigs.k8s.io/structured-merge-diff/v4/value --# sigs.k8s.io/yaml v1.2.0 -+# sigs.k8s.io/yaml v1.3.0 - ## explicit; go 1.12 - sigs.k8s.io/yaml - # github.com/cyphar/filepath-securejoin => github.com/cyphar/filepath-securejoin v0.2.2 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/LICENSE b/vendor/sigs.k8s.io/structured-merge-diff/v4/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/allocator.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/allocator.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/doc.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/doc.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/fields.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/fields.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/jsontagutil.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/jsontagutil.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/list.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/list.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/listreflect.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/listreflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/listunstructured.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/listunstructured.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/map.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/map.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapreflect.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapreflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapunstructured.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapunstructured.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/reflectcache.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/reflectcache.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/scalar.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/scalar.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/structreflect.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/structreflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/value.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/value.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/valuereflect.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/valuereflect.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/valueunstructured.go b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/valueunstructured.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/.gitignore b/vendor/sigs.k8s.io/yaml/.gitignore -old mode 100644 -new mode 100755 -index e256a31..2dc9290 ---- a/vendor/sigs.k8s.io/yaml/.gitignore -+++ b/vendor/sigs.k8s.io/yaml/.gitignore -@@ -6,6 +6,10 @@ - .project - .settings/** - -+# Idea files -+.idea/** -+.idea/ -+ - # Emacs save files - *~ - -diff --git a/vendor/sigs.k8s.io/yaml/.travis.yml b/vendor/sigs.k8s.io/yaml/.travis.yml -old mode 100644 -new mode 100755 -index d20e23e..54ed8f9 ---- a/vendor/sigs.k8s.io/yaml/.travis.yml -+++ b/vendor/sigs.k8s.io/yaml/.travis.yml -@@ -1,8 +1,7 @@ - language: go --dist: xenial --go: -- - 1.12.x -- - 1.13.x -+arch: arm64 -+dist: focal -+go: 1.15.x - script: - - diff -u <(echo -n) <(gofmt -d *.go) - - diff -u <(echo -n) <(golint $(go list -e ./...) | grep -v YAMLToJSON) -diff --git a/vendor/sigs.k8s.io/yaml/CONTRIBUTING.md b/vendor/sigs.k8s.io/yaml/CONTRIBUTING.md -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/LICENSE b/vendor/sigs.k8s.io/yaml/LICENSE -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/OWNERS b/vendor/sigs.k8s.io/yaml/OWNERS -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/README.md b/vendor/sigs.k8s.io/yaml/README.md -old mode 100644 -new mode 100755 -index 5a651d9..e81cc42 ---- a/vendor/sigs.k8s.io/yaml/README.md -+++ b/vendor/sigs.k8s.io/yaml/README.md -@@ -107,8 +107,8 @@ func main() { - } - fmt.Println(string(y)) - /* Output: -- name: John - age: 30 -+ name: John - */ - j2, err := yaml.YAMLToJSON(y) - if err != nil { -diff --git a/vendor/sigs.k8s.io/yaml/RELEASE.md b/vendor/sigs.k8s.io/yaml/RELEASE.md -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/SECURITY_CONTACTS b/vendor/sigs.k8s.io/yaml/SECURITY_CONTACTS -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/code-of-conduct.md b/vendor/sigs.k8s.io/yaml/code-of-conduct.md -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/fields.go b/vendor/sigs.k8s.io/yaml/fields.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/yaml.go b/vendor/sigs.k8s.io/yaml/yaml.go -old mode 100644 -new mode 100755 -diff --git a/vendor/sigs.k8s.io/yaml/yaml_go110.go b/vendor/sigs.k8s.io/yaml/yaml_go110.go -old mode 100644 -new mode 100755 --- -2.41.0 - diff --git a/patch/0014-update-pkg-podmanager-podmanager.go.patch b/patch/0014-update-pkg-podmanager-podmanager.go.patch deleted file mode 100644 index a190617..0000000 --- a/patch/0014-update-pkg-podmanager-podmanager.go.patch +++ /dev/null @@ -1,44 +0,0 @@ -From f7f84f78b3ec4d19e712404c80757f208a86b18a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?=E5=B0=8F=E8=8D=89=E5=84=BF=E8=A6=81=E7=9D=A1=E8=A7=89?= - <18503470247@163.com> -Date: Wed, 4 Sep 2024 07:47:35 +0000 -Subject: [PATCH 1/2] =?UTF-8?q?update=20pkg/podmanager/podmanager.go.=20?= - =?UTF-8?q?=E4=BF=AE=E5=A4=8Dpodmanager.go=E4=B8=ADeventToNRIRawContainers?= - =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=94=99=E8=AF=AF=20toRawContainerPointer?= - =?UTF-8?q?=E7=9A=84=E5=85=A5=E5=8F=82=E5=BA=94=E4=B8=BAcontainer=20,conta?= - =?UTF-8?q?iners=E9=81=8D=E5=8E=86=E7=9A=84=E5=AD=90=E9=A1=B9=E4=B9=9F?= - =?UTF-8?q?=E5=BA=94=E8=AF=A5=E6=98=AFcontainer?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: 小草儿要睡觉 <18503470247@163.com> ---- - pkg/podmanager/podmanager.go | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/pkg/podmanager/podmanager.go b/pkg/podmanager/podmanager.go -index d415018..17f95d3 100644 ---- a/pkg/podmanager/podmanager.go -+++ b/pkg/podmanager/podmanager.go -@@ -173,13 +173,13 @@ func eventToNRIRawContainers(e typedef.Event) ([]*typedef.NRIRawContainer, error - if !ok { - return nil, fmt.Errorf("fail to get *typedef.NRIRawContainer which type is %T", e) - } -- toRawContainerPointer := func(pod nriapi.Container) *typedef.NRIRawContainer { -- tmp := typedef.NRIRawContainer(pod) -+ toRawContainerPointer := func(container nriapi.Container) *typedef.NRIRawContainer { -+ tmp := typedef.NRIRawContainer(container) - return &tmp - } - var pointerContainers []*typedef.NRIRawContainer -- for _, pod := range containers { -- pointerContainers = append(pointerContainers, toRawContainerPointer(*pod)) -+ for _, container := range containers { -+ pointerContainers = append(pointerContainers, toRawContainerPointer(*container)) - } - return pointerContainers, nil - } --- -2.46.0 - diff --git a/patch/0015-rubik-set-container-engine-when-getting-container-id.patch b/patch/0015-rubik-set-container-engine-when-getting-container-id.patch deleted file mode 100644 index 39cf07a..0000000 --- a/patch/0015-rubik-set-container-engine-when-getting-container-id.patch +++ /dev/null @@ -1,485 +0,0 @@ -From fe585042518f7c1a1da09028fe56177fa573ebbc Mon Sep 17 00:00:00 2001 -From: vegbir -Date: Wed, 4 Sep 2024 10:35:50 +0800 -Subject: [PATCH 2/2] rubik: set container engine when getting container id - -reason: -bugfix: `/proc/self/cgroup` is not a sure way to get container engine because of the different cgroup path format. -So we have two approaches to get container engines: `proc/self/cgroup` or containerdID passed by k8s. -reconstruct: We abstract the cgroup driver, i.e., systemd &cgroupfs, to simplify the code for splicing cgroup paths. -Currently, only the path to the apiserver has been simplified, and the nri method needs to be reconstructed. - -Signed-off-by: vegbir ---- - pkg/core/typedef/cgroup/cgroupfs/driver.go | 37 +++++++++ - pkg/core/typedef/cgroup/common.go | 5 -- - pkg/core/typedef/cgroup/driver.go | 48 +++++++++++ - pkg/core/typedef/cgroup/systemd/driver.go | 51 ++++++++++++ - pkg/core/typedef/containerinfo.go | 34 ++++---- - pkg/core/typedef/nrirawpod.go | 63 +-------------- - pkg/core/typedef/rawpod.go | 92 ++++++---------------- - 7 files changed, 175 insertions(+), 155 deletions(-) - create mode 100644 pkg/core/typedef/cgroup/cgroupfs/driver.go - create mode 100644 pkg/core/typedef/cgroup/driver.go - create mode 100644 pkg/core/typedef/cgroup/systemd/driver.go - -diff --git a/pkg/core/typedef/cgroup/cgroupfs/driver.go b/pkg/core/typedef/cgroup/cgroupfs/driver.go -new file mode 100644 -index 0000000..4256deb ---- /dev/null -+++ b/pkg/core/typedef/cgroup/cgroupfs/driver.go -@@ -0,0 +1,37 @@ -+// Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. -+// rubik licensed under the Mulan PSL v2. -+// You can use this software according to the terms and conditions of the Mulan PSL v2. -+// You may obtain a copy of Mulan PSL v2 at: -+// http://license.coscl.org.cn/MulanPSL2 -+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR -+// PURPOSE. -+// See the Mulan PSL v2 for more details. -+// Author: Jiaqi Yang -+// Date: 2024-09-03 -+// Description: This file is used for cgroupfs driver -+ -+package cgroupfs -+ -+import ( -+ "path/filepath" -+ -+ "isula.org/rubik/pkg/common/constant" -+) -+ -+const Name = "cgroupfs" -+ -+type Driver struct{} -+ -+func (d *Driver) Name() string { -+ return Name -+} -+ -+func (d *Driver) ConcatPodCgroupPath(qosClass string, id string) string { -+ // When using cgroupfs as cgroup driver: -+ // 1. The Burstable path looks like: kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ // 2. The BestEffort path is in the form: kubepods/bestEffort/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ // 3. The Guaranteed path is in the form: kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3 -+ -+ return filepath.Join(constant.KubepodsCgroup, qosClass, constant.PodCgroupNamePrefix+id) -+} -diff --git a/pkg/core/typedef/cgroup/common.go b/pkg/core/typedef/cgroup/common.go -index 668f951..5252e7d 100644 ---- a/pkg/core/typedef/cgroup/common.go -+++ b/pkg/core/typedef/cgroup/common.go -@@ -27,11 +27,6 @@ import ( - var rootDir = constant.DefaultCgroupRoot - var cgroupDriver = constant.CgroupDriverCgroupfs - --// SetCgroupDriver is the setter of global cgroup driver --func SetCgroupDriver(driver string) { -- cgroupDriver = driver --} -- - // GetCgroupDriver is the getter of global cgroup driver - func GetCgroupDriver() string { - return cgroupDriver -diff --git a/pkg/core/typedef/cgroup/driver.go b/pkg/core/typedef/cgroup/driver.go -new file mode 100644 -index 0000000..b8cd4d5 ---- /dev/null -+++ b/pkg/core/typedef/cgroup/driver.go -@@ -0,0 +1,48 @@ -+// Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. -+// rubik licensed under the Mulan PSL v2. -+// You can use this software according to the terms and conditions of the Mulan PSL v2. -+// You may obtain a copy of Mulan PSL v2 at: -+// http://license.coscl.org.cn/MulanPSL2 -+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR -+// PURPOSE. -+// See the Mulan PSL v2 for more details. -+// Author: Jiaqi Yang -+// Date: 2024-09-03 -+// Description: This file is used for cgroup driver -+ -+package cgroup -+ -+import ( -+ "isula.org/rubik/pkg/core/typedef/cgroup/cgroupfs" -+ "isula.org/rubik/pkg/core/typedef/cgroup/systemd" -+) -+ -+type Driver interface { -+ Name() string -+ ConcatPodCgroupPath(qosClass string, id string) string -+} -+ -+var driver Driver = &cgroupfs.Driver{} -+ -+// SetCgroupDriver is the setter of global cgroup driver -+func SetCgroupDriver(driverTyp string) { -+ cgroupDriver = driverTyp -+ switch driverTyp { -+ case systemd.Name: -+ driver = &systemd.Driver{} -+ case cgroupfs.Name: -+ driver = &cgroupfs.Driver{} -+ } -+} -+ -+func Type() string { -+ return driver.Name() -+} -+func ConcatPodCgroupPath(qosClass, id string) string { -+ return driver.ConcatPodCgroupPath(qosClass, id) -+} -+ -+func ConcatContainerCgroupPath(podCgroupPath string, containerScope string) string { -+ return driver.ConcatPodCgroupPath(podCgroupPath, containerScope) -+} -diff --git a/pkg/core/typedef/cgroup/systemd/driver.go b/pkg/core/typedef/cgroup/systemd/driver.go -new file mode 100644 -index 0000000..740b7ba ---- /dev/null -+++ b/pkg/core/typedef/cgroup/systemd/driver.go -@@ -0,0 +1,51 @@ -+// Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. -+// rubik licensed under the Mulan PSL v2. -+// You can use this software according to the terms and conditions of the Mulan PSL v2. -+// You may obtain a copy of Mulan PSL v2 at: -+// http://license.coscl.org.cn/MulanPSL2 -+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR -+// PURPOSE. -+// See the Mulan PSL v2 for more details. -+// Author: Jiaqi Yang -+// Date: 2024-09-03 -+// Description: This file is used for system cgroup driver -+ -+package systemd -+ -+import ( -+ "path/filepath" -+ "strings" -+ -+ "isula.org/rubik/pkg/common/constant" -+) -+ -+const Name = "systemd" -+ -+type Driver struct{} -+ -+func (d *Driver) Name() string { -+ return Name -+} -+ -+func (d *Driver) ConcatPodCgroupPath(qosClass string, id string) string { -+ // When using systemd as cgroup driver: -+ // 1. The Burstable path looks like: kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -+ // 2. The BestEffort path is in the form: kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -+ // 3. The Guaranteed path is in the form: kubepods.slice/kubepods-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/ -+ const suffix = ".slice" -+ var ( -+ prefix = constant.KubepodsCgroup -+ podPath = constant.KubepodsCgroup + suffix -+ ) -+ if qosClass != "" { -+ podPath = filepath.Join(podPath, constant.KubepodsCgroup+"-"+qosClass+suffix) -+ prefix = strings.Join([]string{prefix, qosClass}, "-") -+ } -+ return filepath.Join(podPath, -+ strings.Join([]string{prefix, constant.PodCgroupNamePrefix + strings.Replace(id, "-", "_", -1) + suffix}, "-")) -+} -+ -+func (d *Driver) ConcatContainerCgroupPath(podCgroupPath string, containerScope string) string { -+ return filepath.Join(podCgroupPath, containerScope+".scope") -+} -diff --git a/pkg/core/typedef/containerinfo.go b/pkg/core/typedef/containerinfo.go -index 841c800..ec04ed8 100644 ---- a/pkg/core/typedef/containerinfo.go -+++ b/pkg/core/typedef/containerinfo.go -@@ -85,33 +85,30 @@ type ContainerInfo struct { - PodSandboxId string `json:"podisandid,omitempty"` - } - -+func containerPath(id, podCgroupPath string) string { -+ if cgroup.Type() == constant.CgroupDriverSystemd { -+ return filepath.Join(podCgroupPath, containerEngineScopes[currentContainerEngines]+"-"+id+".scope") -+ } -+ // In the case of cgroupfs, the path of crio contains a special prefix -+ if containerEngineScopes[currentContainerEngines] == constant.ContainerEngineCrio { -+ return filepath.Join(podCgroupPath, constant.ContainerEngineCrio+"-"+id) -+ } -+ return filepath.Join(podCgroupPath, id) -+} -+ - // NewContainerInfo creates a ContainerInfo instance - func NewContainerInfo(id, podCgroupPath string, rawContainer *RawContainer) *ContainerInfo { -- scopeName := containerEngineScopes[currentContainerEngines] - requests, limits := rawContainer.GetResourceMaps() -- var path string -- if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -- path = filepath.Join(podCgroupPath, scopeName+"-"+id+".scope") -- } -- } else { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineContainerd, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -- path = filepath.Join(podCgroupPath, id) -- case constant.ContainerEngineCrio: -- path = filepath.Join(podCgroupPath, scopeName+"-"+id) -- } -- } - return &ContainerInfo{ - Name: rawContainer.status.Name, - ID: id, -- Hierarchy: cgroup.Hierarchy{Path: path}, -+ Hierarchy: cgroup.Hierarchy{Path: containerPath(id, podCgroupPath)}, - RequestResources: requests, -- LimitResources: limits} -+ LimitResources: limits, -+ } - } - --func fixContainerEngine(containerID string) { -+func getEngineFromContainerID(containerID string) { - for engine, prefix := range supportEnginesPrefixMap { - if strings.HasPrefix(containerID, prefix) { - currentContainerEngines = engine -@@ -119,7 +116,6 @@ func fixContainerEngine(containerID string) { - return - } - } -- currentContainerEngines = UNDEFINED - } - - // DeepCopy returns deepcopy object. -diff --git a/pkg/core/typedef/nrirawpod.go b/pkg/core/typedef/nrirawpod.go -index 0749c8a..d060923 100644 ---- a/pkg/core/typedef/nrirawpod.go -+++ b/pkg/core/typedef/nrirawpod.go -@@ -49,10 +49,6 @@ const ( - fileMode os.FileMode = 0666 - ) - --func init() { -- setContainerEnginesOnce.Do(FixContainerEngine) --} -- - // convert NRIRawPod structure to PodInfo structure - func (pod *NRIRawPod) ConvertNRIRawPod2PodInfo() *PodInfo { - if pod == nil { -@@ -87,7 +83,6 @@ func (pod *NRIRawPod) GetQosClass() string { - - // get pod cgroupPath - func (pod *NRIRawPod) CgroupPath() string { -- var path string - id := pod.Uid - - qosClassPath := "" -@@ -100,61 +95,7 @@ func (pod *NRIRawPod) CgroupPath() string { - default: - return "" - } -- /* -- Kubernetes defines three different pods: -- 1. Burstable: pod requests are less than the value of limits and not 0; -- 2. BestEffort: pod requests and limits are both 0; -- 3. Guaranteed: pod requests are equal to the value set by limits; -- -- When using cgroupfs as cgroup driver, -- 1. The Burstable path looks like: kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3 -- 2. The BestEffort path is in the form: kubepods/besteffort/pod34152897-dbaf-11ea-8cb9-0653660051c3 -- 3. The Guaranteed path is in the form: kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3 -- -- When using systemd as cgroup driver: -- 1. The Burstable path looks like: kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -- 2. The BestEffort path is in the form: kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -- 3. The Guaranteed path is in the form: kubepods.slice/kubepods-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/ -- */ -- -- if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -- if qosClassPath == "" { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -- path = filepath.Join( -- constant.KubepodsCgroup+".slice", -- constant.KubepodsCgroup+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -- ) -- } -- } else { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -- path = filepath.Join( -- constant.KubepodsCgroup+".slice", -- constant.KubepodsCgroup+"-"+qosClassPath+".slice", -- pod.Linux.CgroupParent, -- ) -- -- } -- } -- } else { -- if qosClassPath == "" { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineContainerd, constant.ContainerEngineDocker, constant.ContainerEngineIsula, constant.ContainerEngineCrio: -- path = filepath.Join(constant.KubepodsCgroup, constant.PodCgroupNamePrefix+id) -- } -- } else { -- -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineContainerd, constant.ContainerEngineDocker, constant.ContainerEngineIsula, constant.ContainerEngineCrio: -- path = filepath.Join(constant.KubepodsCgroup, qosClassPath, constant.PodCgroupNamePrefix+id) -- default: -- path = "" -- } -- } -- -- } -- return path -+ return cgroup.ConcatPodCgroupPath(qosClassPath, id) - } - - // get pod running state -@@ -437,7 +378,7 @@ func (container *NRIRawContainer) GetResourceMaps() (ResourceMap, ResourceMap) { - } - - // get current container engine --func FixContainerEngine() { -+func getEngineFromCgroup() { - file, err := os.OpenFile(procSelfCgroupFile, os.O_RDONLY, fileMode) - if err != nil { - return -diff --git a/pkg/core/typedef/rawpod.go b/pkg/core/typedef/rawpod.go -index b67126a..b653c71 100644 ---- a/pkg/core/typedef/rawpod.go -+++ b/pkg/core/typedef/rawpod.go -@@ -16,13 +16,11 @@ package typedef - - import ( - "fmt" -- "path/filepath" - "strings" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - -- "isula.org/rubik/pkg/common/constant" - "isula.org/rubik/pkg/core/typedef/cgroup" - ) - -@@ -86,83 +84,30 @@ func (pod *RawPod) ID() string { - return string(pod.UID) - } - -+// Kubernetes defines three different pods: -+// 1. Burstable: pod requests are less than the value of limits and not 0; -+// 2. BestEffort: pod requests and limits are both 0; -+// 3. Guaranteed: pod requests are equal to the value set by limits; -+var k8sQosClass = map[corev1.PodQOSClass]string{ -+ corev1.PodQOSGuaranteed: "", -+ corev1.PodQOSBurstable: strings.ToLower(string(corev1.PodQOSBurstable)), -+ corev1.PodQOSBestEffort: strings.ToLower(string(corev1.PodQOSBestEffort)), -+} -+ - // CgroupPath returns cgroup path of raw pod - // handle different combinations of cgroupdriver and pod qos and container runtime --func (pod *RawPod) CgroupPath() string { -+func (pod *RawPod) CgroupPath() (res string) { - id := string(pod.UID) - if configHash := pod.Annotations[configHashAnnotationKey]; configHash != "" { - id = configHash - } - -- qosClassPath := "" -- switch pod.Status.QOSClass { -- case corev1.PodQOSGuaranteed: -- case corev1.PodQOSBurstable: -- qosClassPath = strings.ToLower(string(corev1.PodQOSBurstable)) -- case corev1.PodQOSBestEffort: -- qosClassPath = strings.ToLower(string(corev1.PodQOSBestEffort)) -- default: -+ qosPrefix, existed := k8sQosClass[pod.Status.QOSClass] -+ if !existed { -+ fmt.Printf("unsupported qos class: %v", pod.Status.QOSClass) - return "" - } -- -- /* -- Kubernetes defines three different pods: -- 1. Burstable: pod requests are less than the value of limits and not 0; -- 2. BestEffort: pod requests and limits are both 0; -- 3. Guaranteed: pod requests are equal to the value set by limits; -- -- When using cgroupfs as cgroup driver: -- 1. The Burstable path looks like: kubepods/burstable/pod34152897-dbaf-11ea-8cb9-0653660051c3 -- 2. The BestEffort path is in the form: kubepods/bestEffort/pod34152897-dbaf-11ea-8cb9-0653660051c3 -- 3. The Guaranteed path is in the form: kubepods/pod34152897-dbaf-11ea-8cb9-0653660051c3 -- -- When using systemd as cgroup driver: -- 1. The Burstable path looks like: kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -- 2. The BestEffort path is in the form: kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice -- 3. The Guaranteed path is in the form: kubepods.slice/kubepods-podb895995a_e7e5_413e_9bc1_3c3895b3f233.slice/ -- */ -- -- if cgroup.GetCgroupDriver() == constant.CgroupDriverSystemd { -- if qosClassPath == "" { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -- return filepath.Join( -- constant.KubepodsCgroup+".slice", -- constant.KubepodsCgroup+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -- ) -- default: -- return "" -- } -- } else { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineContainerd, constant.ContainerEngineCrio, constant.ContainerEngineDocker, constant.ContainerEngineIsula: -- return filepath.Join( -- constant.KubepodsCgroup+".slice", -- constant.KubepodsCgroup+"-"+qosClassPath+".slice", -- constant.KubepodsCgroup+"-"+qosClassPath+"-"+constant.PodCgroupNamePrefix+strings.Replace(id, "-", "_", -1)+".slice", -- ) -- default: -- return "" -- } -- -- } -- } else { -- if qosClassPath == "" { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineDocker, constant.ContainerEngineContainerd, constant.ContainerEngineIsula, constant.ContainerEngineCrio: -- return filepath.Join(constant.KubepodsCgroup, constant.PodCgroupNamePrefix+id) -- default: -- return "" -- } -- } else { -- switch containerEngineScopes[currentContainerEngines] { -- case constant.ContainerEngineDocker, constant.ContainerEngineContainerd, constant.ContainerEngineIsula, constant.ContainerEngineCrio: -- return filepath.Join(constant.KubepodsCgroup, qosClassPath, constant.PodCgroupNamePrefix+id) -- default: -- return "" -- } -- } -- } -+ return cgroup.ConcatPodCgroupPath(qosPrefix, id) - } - - // ListRawContainers returns all RawContainers in the RawPod -@@ -221,6 +166,13 @@ func (cont *RawContainer) GetRealContainerID() (string, error) { - So we don't consider the case of midway container engine changes - `fixContainerEngine` is only executed when `getRealContainerID` is called for the first time - */ -+ setContainerEnginesOnce.Do(func() { -+ getEngineFromCgroup() -+ _, exist := supportEnginesPrefixMap[currentContainerEngines] -+ if !exist { -+ getEngineFromContainerID(cont.status.ContainerID) -+ } -+ }) - - if !currentContainerEngines.Support(cont) { - return "", fmt.Errorf("unsupported container engine: %v", cont.status.ContainerID) --- -2.46.0 - diff --git a/rubik.spec b/rubik.spec index 36d8eb0..f3f1a6d 100644 --- a/rubik.spec +++ b/rubik.spec @@ -1,6 +1,6 @@ Name: rubik -Version: 2.0.0 -Release: 8 +Version: 2.0.1 +Release: 1 Summary: Hybrid Deployment for Cloud Native License: Mulan PSL V2 URL: https://gitee.com/openeuler/rubik @@ -59,6 +59,12 @@ install -Dp ./build_rubik_image.sh %{buildroot}%{_sharedstatedir}/%{name}/build_ rm -rf %{buildroot} %changelog +* Thu Nov 14 2024 vegbir - 2.0.1-1 +- Type: bugfix +- CVE:NA +- SUG:restart +- DESC:upgrade rubik version to v2.0.1 + * Fri Sep 20 2024 wujing - 2.0.0-8 - Type: bugfix - CVE:NA diff --git a/series.conf b/series.conf index 41c45eb..2a324cf 100644 --- a/series.conf +++ b/series.conf @@ -1,16 +1 @@ -patch/0001-Support-Labels-field-to-configure-QoSLevel.patch -patch/0002-rubik-fix-weight-for-iocost-does-not-take-effect.patch -patch/0003-rubik-test-coverage-for-PSI-Manager.patch -patch/0004-rubik-add-psi-design-documentation.patch -patch/0005-rubik-move-fssr-design-document-to-design-dir.patch -patch/0006-rubik-fix-that-value-of-memory.high_async_ratio-lost.patch -patch/0007-bugfix-fix-typos-calling-order-of-waitgroup.patch -patch/0008-rubik-test-coverage-improvement-for-pkg-config.patch -patch/0009-rubik-optimize-dynamicAdjust-to-be-clear-and-add-log.patch -patch/0010-support-isulad-container-engine.patch -patch/0011-support-systemd-cgroup-driver.patch -patch/0012-support-crio-container-engine.patch -patch/0013-informer-add-nri-support.patch -patch/0014-update-pkg-podmanager-podmanager.go.patch -patch/0015-rubik-set-container-engine-when-getting-container-id.patch -#end of file +# end of file \ No newline at end of file diff --git a/v2.0.0.tar.gz b/v2.0.0.tar.gz deleted file mode 100644 index 89f53e4..0000000 Binary files a/v2.0.0.tar.gz and /dev/null differ diff --git a/v2.0.1.tar.gz b/v2.0.1.tar.gz new file mode 100644 index 0000000..06084b7 Binary files /dev/null and b/v2.0.1.tar.gz differ