From a368370bef3127bdf23e7834fdb82f1c48510803 Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Thu, 16 Jul 2020 12:21:37 -0400 Subject: [PATCH] k8s 1.18 import (#2651) * k8s 1.18 import wip backup, cmd, controller, generated, restic, restore, serverstatusrequest, test and util Signed-off-by: Andrew Lavery * go mod tidy Signed-off-by: Andrew Lavery * add changelog file Signed-off-by: Andrew Lavery * go fmt Signed-off-by: Andrew Lavery * update code-generator and controller-gen in CI Signed-off-by: Andrew Lavery * checkout proper code-generator version, regen Signed-off-by: Andrew Lavery * fix remaining calls Signed-off-by: Andrew Lavery * regenerate CRDs with ./hack/update-generated-crd-code.sh Signed-off-by: Andrew Lavery * use existing context in restic and server Signed-off-by: Andrew Lavery * fix test cases by resetting resource version also use main library go context, not golang.org/x/net/context, in pkg/restore/restore.go Signed-off-by: Andrew Lavery * clarify changelog message Signed-off-by: Andrew Lavery * use github.com/kubernetes-csi/external-snapshotter/v2@v2.2.0-rc1 Signed-off-by: Andrew Lavery * run 'go mod tidy' to remove old external-snapshotter version Signed-off-by: Andrew Lavery --- changelogs/unreleased/2651-laverya | 1 + config/crd/bases/velero.io_backups.yaml | 2 +- .../velero.io_backupstoragelocations.yaml | 2 +- .../bases/velero.io_deletebackuprequests.yaml | 2 +- .../crd/bases/velero.io_downloadrequests.yaml | 2 +- .../crd/bases/velero.io_podvolumebackups.yaml | 2 +- .../bases/velero.io_podvolumerestores.yaml | 2 +- .../bases/velero.io_resticrepositories.yaml | 2 +- config/crd/bases/velero.io_restores.yaml | 2 +- config/crd/bases/velero.io_schedules.yaml | 2 +- .../bases/velero.io_serverstatusrequests.yaml | 2 +- .../velero.io_volumesnapshotlocations.yaml | 2 +- config/crd/crds/crds.go | 22 +- config/rbac/role.yaml | 28 ++ go.mod | 71 ++- go.sum | 467 +++++++++++++----- hack/build-image/Dockerfile | 4 +- pkg/backup/backup.go | 6 +- pkg/backup/backup_test.go | 4 +- pkg/backup/rbac.go | 6 +- pkg/backup/remap_crd_version_action.go | 3 +- pkg/backup/remap_crd_version_action_test.go | 7 +- pkg/client/dynamic.go | 12 +- pkg/cmd/cli/backup/create.go | 6 +- pkg/cmd/cli/backup/create_test.go | 3 +- pkg/cmd/cli/backup/delete.go | 7 +- pkg/cmd/cli/backup/describe.go | 11 +- pkg/cmd/cli/backup/download.go | 3 +- pkg/cmd/cli/backup/get.go | 6 +- pkg/cmd/cli/backup/logs.go | 3 +- pkg/cmd/cli/plugin/add.go | 5 +- pkg/cmd/cli/plugin/remove.go | 5 +- pkg/cmd/cli/restic/repo/get.go | 6 +- pkg/cmd/cli/restic/server.go | 2 +- pkg/cmd/cli/restic/server_test.go | 4 +- pkg/cmd/cli/restore/create.go | 9 +- pkg/cmd/cli/restore/delete.go | 7 +- pkg/cmd/cli/restore/describe.go | 7 +- pkg/cmd/cli/restore/get.go | 6 +- pkg/cmd/cli/restore/logs.go | 3 +- pkg/cmd/cli/schedule/create.go | 3 +- pkg/cmd/cli/schedule/delete.go | 7 +- pkg/cmd/cli/schedule/describe.go | 5 +- pkg/cmd/cli/schedule/get.go | 6 +- pkg/cmd/cli/serverstatus/server_status.go | 7 +- pkg/cmd/cli/snapshotlocation/create.go | 3 +- pkg/cmd/cli/snapshotlocation/get.go | 6 +- pkg/cmd/server/server.go | 4 +- .../util/downloadrequest/downloadrequest.go | 7 +- pkg/controller/backup_controller.go | 2 +- pkg/controller/backup_controller_test.go | 7 +- pkg/controller/backup_deletion_controller.go | 22 +- .../backup_deletion_controller_test.go | 4 +- pkg/controller/backup_sync_controller.go | 8 +- pkg/controller/backup_sync_controller_test.go | 16 +- pkg/controller/download_request_controller.go | 4 +- .../download_request_controller_test.go | 7 +- pkg/controller/gc_controller.go | 3 +- .../pod_volume_backup_controller.go | 3 +- .../pod_volume_restore_controller.go | 3 +- .../restic_repository_controller.go | 2 +- pkg/controller/restore_controller.go | 5 +- pkg/controller/restore_controller_test.go | 4 + pkg/controller/schedule_controller.go | 5 +- .../clientset/versioned/clientset.go | 2 +- .../versioned/typed/velero/v1/backup.go | 72 +-- .../typed/velero/v1/backupstoragelocation.go | 72 +-- .../typed/velero/v1/deletebackuprequest.go | 72 +-- .../typed/velero/v1/downloadrequest.go | 72 +-- .../typed/velero/v1/fake/fake_backup.go | 22 +- .../v1/fake/fake_backupstoragelocation.go | 22 +- .../v1/fake/fake_deletebackuprequest.go | 22 +- .../velero/v1/fake/fake_downloadrequest.go | 22 +- .../velero/v1/fake/fake_podvolumebackup.go | 22 +- .../velero/v1/fake/fake_podvolumerestore.go | 22 +- .../velero/v1/fake/fake_resticrepository.go | 22 +- .../typed/velero/v1/fake/fake_restore.go | 22 +- .../typed/velero/v1/fake/fake_schedule.go | 22 +- .../v1/fake/fake_serverstatusrequest.go | 22 +- .../v1/fake/fake_volumesnapshotlocation.go | 22 +- .../typed/velero/v1/podvolumebackup.go | 72 +-- .../typed/velero/v1/podvolumerestore.go | 72 +-- .../typed/velero/v1/resticrepository.go | 72 +-- .../versioned/typed/velero/v1/restore.go | 72 +-- .../versioned/typed/velero/v1/schedule.go | 72 +-- .../typed/velero/v1/serverstatusrequest.go | 72 +-- .../typed/velero/v1/volumesnapshotlocation.go | 72 +-- pkg/generated/crds/crds.go | 22 +- .../crds/manifests/velero.io_backups.yaml | 2 +- .../crds/manifests/velero.io_schedules.yaml | 2 +- .../externalversions/velero/v1/backup.go | 5 +- .../velero/v1/backupstoragelocation.go | 5 +- .../velero/v1/deletebackuprequest.go | 5 +- .../velero/v1/downloadrequest.go | 5 +- .../velero/v1/podvolumebackup.go | 5 +- .../velero/v1/podvolumerestore.go | 5 +- .../velero/v1/resticrepository.go | 5 +- .../externalversions/velero/v1/restore.go | 5 +- .../externalversions/velero/v1/schedule.go | 5 +- .../velero/v1/serverstatusrequest.go | 5 +- .../velero/v1/volumesnapshotlocation.go | 5 +- pkg/restic/backupper.go | 10 +- pkg/restic/backupper_test.go | 3 +- pkg/restic/repository_ensurer.go | 2 +- pkg/restic/repository_keys.go | 8 +- pkg/restic/restorer.go | 2 +- pkg/restore/change_pvc_node_selector.go | 4 +- pkg/restore/change_pvc_node_selector_test.go | 6 +- pkg/restore/change_storageclass_action.go | 4 +- .../change_storageclass_action_test.go | 6 +- pkg/restore/restic_restore_action.go | 5 +- pkg/restore/restic_restore_action_test.go | 4 +- pkg/restore/restore.go | 28 +- pkg/restore/restore_test.go | 16 +- pkg/serverstatusrequest/process.go | 5 +- pkg/serverstatusrequest/process_test.go | 3 +- pkg/test/fake_namespace.go | 20 +- pkg/util/kube/utils.go | 5 +- 118 files changed, 1288 insertions(+), 849 deletions(-) create mode 100644 changelogs/unreleased/2651-laverya create mode 100644 config/rbac/role.yaml diff --git a/changelogs/unreleased/2651-laverya b/changelogs/unreleased/2651-laverya new file mode 100644 index 000000000..037c6eab0 --- /dev/null +++ b/changelogs/unreleased/2651-laverya @@ -0,0 +1 @@ +bump Kubernetes module dependencies to v0.18.4 to fix https://github.com/vmware-tanzu/velero/issues/2540 by adding code compatibility with kubernetes v1.18 diff --git a/config/crd/bases/velero.io_backups.yaml b/config/crd/bases/velero.io_backups.yaml index b527f7513..45d8434fe 100644 --- a/config/crd/bases/velero.io_backups.yaml +++ b/config/crd/bases/velero.io_backups.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: backups.velero.io spec: diff --git a/config/crd/bases/velero.io_backupstoragelocations.yaml b/config/crd/bases/velero.io_backupstoragelocations.yaml index f7a335912..eeda0210d 100644 --- a/config/crd/bases/velero.io_backupstoragelocations.yaml +++ b/config/crd/bases/velero.io_backupstoragelocations.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: backupstoragelocations.velero.io spec: diff --git a/config/crd/bases/velero.io_deletebackuprequests.yaml b/config/crd/bases/velero.io_deletebackuprequests.yaml index 951b23655..05ecbdfc2 100644 --- a/config/crd/bases/velero.io_deletebackuprequests.yaml +++ b/config/crd/bases/velero.io_deletebackuprequests.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: deletebackuprequests.velero.io spec: diff --git a/config/crd/bases/velero.io_downloadrequests.yaml b/config/crd/bases/velero.io_downloadrequests.yaml index f0bd8deba..949b7c876 100644 --- a/config/crd/bases/velero.io_downloadrequests.yaml +++ b/config/crd/bases/velero.io_downloadrequests.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: downloadrequests.velero.io spec: diff --git a/config/crd/bases/velero.io_podvolumebackups.yaml b/config/crd/bases/velero.io_podvolumebackups.yaml index 54f5641bb..094dd3e16 100644 --- a/config/crd/bases/velero.io_podvolumebackups.yaml +++ b/config/crd/bases/velero.io_podvolumebackups.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: podvolumebackups.velero.io spec: diff --git a/config/crd/bases/velero.io_podvolumerestores.yaml b/config/crd/bases/velero.io_podvolumerestores.yaml index 03b4bf013..43a738e5f 100644 --- a/config/crd/bases/velero.io_podvolumerestores.yaml +++ b/config/crd/bases/velero.io_podvolumerestores.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: podvolumerestores.velero.io spec: diff --git a/config/crd/bases/velero.io_resticrepositories.yaml b/config/crd/bases/velero.io_resticrepositories.yaml index 538fb2e81..727e66bdf 100644 --- a/config/crd/bases/velero.io_resticrepositories.yaml +++ b/config/crd/bases/velero.io_resticrepositories.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: resticrepositories.velero.io spec: diff --git a/config/crd/bases/velero.io_restores.yaml b/config/crd/bases/velero.io_restores.yaml index cabfa3067..ee3cc3aee 100644 --- a/config/crd/bases/velero.io_restores.yaml +++ b/config/crd/bases/velero.io_restores.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: restores.velero.io spec: diff --git a/config/crd/bases/velero.io_schedules.yaml b/config/crd/bases/velero.io_schedules.yaml index e612fc11d..4ba21fc9a 100644 --- a/config/crd/bases/velero.io_schedules.yaml +++ b/config/crd/bases/velero.io_schedules.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: schedules.velero.io spec: diff --git a/config/crd/bases/velero.io_serverstatusrequests.yaml b/config/crd/bases/velero.io_serverstatusrequests.yaml index 4989ab948..b3096ffb2 100644 --- a/config/crd/bases/velero.io_serverstatusrequests.yaml +++ b/config/crd/bases/velero.io_serverstatusrequests.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: serverstatusrequests.velero.io spec: diff --git a/config/crd/bases/velero.io_volumesnapshotlocations.yaml b/config/crd/bases/velero.io_volumesnapshotlocations.yaml index 66e2161a2..d13b84f59 100644 --- a/config/crd/bases/velero.io_volumesnapshotlocations.yaml +++ b/config/crd/bases/velero.io_volumesnapshotlocations.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: volumesnapshotlocations.velero.io spec: diff --git a/config/crd/crds/crds.go b/config/crd/crds/crds.go index add6ff3c3..8bf3926cd 100644 --- a/config/crd/crds/crds.go +++ b/config/crd/crds/crds.go @@ -29,17 +29,17 @@ import ( ) var rawCRDs = [][]byte{ - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xecwà\x18C\xe7\xf2(\xf3J(\x90\xday\xa1\xb3@\x87\xa8q:\xa5\x03\xc6\xc5\xd9\xc36\xb8\xb5\x843\xf1\xbe\xe3\xe2\x8cF0\x16\n\xf2\xe6\xfd\xa9n\x10>\x8c\x92\xbb\x15\xe4kLPC[)t\xf1E9{\xceƮ\xafG\x00\xd7R\b{\xbf\x12[T\xe0Pa\xe6\x8d\x1dbôPØ\xf7Q#\xbc\x1b\xf0V\x8d\xff%\x12ێʌ\xc2\x04x=\xc8\xec\x10\xb6e\xd2\x17\x86\x02\xb9A\xc7\xf6+\xcaR\xbd\x0f\x13\aӒ\x0ec\u0084\x9b1i̧\xb0\xfaf\u074cY?\u05cc\x19\x8f\xd7\xe5e-\xfa\xdf\x0f+\x93\xe3>[17\xbd\x85\x1f\xa9\x98\xc4DI\xa1\xf5f\aX\x94\xfe\xfd\x1a\xa4OO)\x92\x10\x9c\x18\x8e\xb2\xa7~\xf7oN\x10\xe7\xea\xf4\xe6t\xdd\a\xea\xf4/\x94B\xfd\xeaߌ\x10\xd8\xd9?F_\xbfP\x00?\xb5\xd7\\\x83\xdc\xd5\x02ȯa'\x95G{\"\x89)rʹ$~)\v\xe6w*\x1a\x85\xf0\xd9\xe1\xfe\x8d\xa2#\xd7\xd4s\x16q\xe3ti\x88)ST\xdd\xddL'\xa1\x02'\x83\xd2b\x11R\xcc'\xe6`\xf3\x84#\x9f\xcf_\xbf`>\xce\x14X\xa2a=\x12>\x9f\xa0\xd9~m\f\x91\x97\x11\x10\x83\x94:\xbb\b\xe5\x82k\x10\xf0\x82\xef!\xba\x10\x1aH \x82^C\x93g!Z\xe4\x9a\x05+\xd4\v\xbe3\x90X\x86\x98Y\xbbL\xf4a\xbc\xe0\xfb\xfc\xa4\x13\xb6\x116\xd2Ų\n\xf1\x8f\x1e0\x038\x87]\xca2\xe0\"R\xf20sD\xc1R\x17\x91F\xe2\xf6\xd9\xe4\xd5bj\xea\x1eA\x90W.\b\x85\xb4\xfd \xcbE\x04\x92\xeb\x04\x87l\x13\xa9\x88\xf4,\x94\xcc\xeb\xd7\x04\xfd\xde\xe8k\xf8j\xfcF\x8f\x05\xab\xddq\xff&]\xac\xdd}1\xe8\xbe\x1a\xcfO>\x9c\x89\x01\xe5\xb3Y\x18\x96\xb1\t\xe9\xe0\x86\x89\xfev-jV\x89\xc3\u0604\f\xab\x16\x89t\xb0єC\x04^\x85jbxٔ\xb7\uf3a2r\\l\xd2F\xafx\xb3[\x0f\xbd'\xb2x\xa1\"\xb7\xa5\xd0G\xab~ex\xdd\"\x88O\xb4/\x84ա2\xaaD\x869\xe4\x153\x91+{\xc2\xe3^fP\xa0ݏo\x04\xedQ\x92\xcf^\xf2\xfaE\xbe4\x8c\xb3\xf4i\xc9֜Ft\xc6\xf9\x1c\x1a+\xb2\xcd\xd99I\xb43\x13\aKy\xe3\x13\xe7\xe8\xe0M\x92\xe3\x86\x19n\x8a<\xe7\x83\x16\xa1\x1e\x16{\xefŜ\xef\xef\xdb\x01\xa5\xb0\xc7\x15\x82\vt\xffK[\x15+\xed\xffA)\xa4\x9d\xb5\xd0\xcf|b\xa2\xb0\xb32V\x85\xda/!\xf8\xd2\x01I\xf3(\xd4iAx\x80,C^\x03U؆ͮ\x17i\\\xc3\xeb\xc1\xb8\xb0+\xee$\xaa\x1c\xe4T\xa4E\xe3\xf2\x05\xdf/\xaf{6~\xb9їa{\xeeYl\xda\xcbg\x00\x1b\xad\xde\xe1\x92W^~{\xe8\xb2H\xeb\x16L\xe2\xe3\xb3e\xc1,esi\x17\xa7e\xf5\x19\f\x85\xa2\xe3\xd8.й\xd28\xbf\x10\x89\a\xe3|\xa8\xd0u\x82ǁ\xda\xd0tN\x13kB v\xe1\xdc\xcb\xd8t\xc2A\x8e\xec\xa4TIRr8X\xe0\xecA\xcc#H\xa1\x14\\66\x1a\xfc\xe3e8\xf6\xe0W\x88\x8cÂ\t\x88\xa4\n\xa55\x19:7\xa5\x0e\xb3\x9ew\xa6\xe0V\x17\xdbDH*\xc2!\xc2Tq/\x8d\xa5a#\xb1\xe6\xac0\xfb\xfe\xadU\x03$Ӧ\xff\xa7\xd5\xec<\x8c\x80Ϡ\x8bB\xe8\xd9͢\x87\xdc]X\x97L!\x82\t!\xbb\xddWl\xc6K#\xbd\xa84\xbf\xee\x06[H\xbda\xe0\xf0\xe9C\xb7cH.\x11\xcf\x0f\xa9\xef\xd2ʆ\xcd\xf5\x83`\x9b\xa5\xe9\x97܇\xc6\xeb\x01-v$կ\fs8\xa7\x8do\xa5\xe7\xcb\x18\x1d\xf0\xb8r\xb0\x93\xd6\xf96\x92\x8e\x0f\xb6>>G\xd1\xf7\xd6~C\x8a\xf2簮U\x00:\x98\xd7tR8r874\xf8\x18\x04A\xee@z@\x9d\x99Js\x11\x83\x8c\x94_\x10X\x1a\x9c\xe9\xec&\x1b\xc6\x12æ\x81\xba*\x96\x10\xbeb\xed\x91z\xa2\xd6ў\xfc\xa3\x90S\x95\xaa4\xce\x12\x93\x97\x05\x9ajbSkFGLOa]爷\x10o\xb2\xa8\n\x10\x051{\x11Gig\x96\x05v\xe5\v\xafBz\xf6\xee\x04\x95]\xbd7d\x14\xa5B\xbf,\x1b\xd8\xe2\xceX\xb6E's\xac\xb7\xcc(s\xa3A\xc0NHU\xd9E\x1e\xed\f\x8e.\x8f죑\u007fLо\xe4\xb5+&\u007f\xb6L\xb9(T\x9b\xf2\xaa\xa5]\x1a\xa8=X\xfc\xc8\x10\xa9\xb4\x92t\xc6|l\x94\x14UI\xe8\xf7\xefaR\x8b7\xdfä\xde\xf8\x1e&u\xc6\xf70\xe9{\x9849\xbe\x87I\xdfä\xdfk\x984\x8dɊ\xebV\x83?ͼ}\xf6\bu\x1c\xb1Q\xc8\xf1T\xff.\xf4^/\xeb\xcb\xdb\f\xaf\x19軌-\xdd+\xee8\xef˹9\xfao\xdc|ݨGʟ\x9474\x96N\xb6\xee-h\xc4\x1b\xea͜o/\x99k*\xe9\xf6$֍\x1d\xa9)ѤW\xf4\xa8O\x9d\xec\x14f\xb6;\x18\x84R\xed\xde\x14a\x1b\xa6\xfcJ\xfd\x8a\xb3\xad\x1f3\r\x1f\xd3m\x9b\xe3\x1c:\t\xed\xbb,\xb2\x9d\x16\xc3_\x99C\x93}\x19\xe3\xdd\x18\xf1$\x03\xbd8~Zw\u007f\xf1&\xf6f\xc0\xab\xf4\x87\x1e\x01\xdc4I)\x8b\u07b7\x9b#\x93N\xc5\xeb\x03\xa7\x9c\x03cAKu=\xd8\x17S߬h\xb3\x13\xfe\\\x86\xa4\xe8,{\x9b\n\xed\x97\xf4n|s\xc7F\xb7'c\xd0ɞwر\xb4\x85tyOF\xb7\xe7bd\x93YЉqv\xa7\xc5|\xbe5\xd9U\xf1\r\xbd\x14\xa9ObjÝ\xe8\xa0X\x10s\xccwK|S\x8f\x04\x1f\xe6M`}VgD\xab\xeba\x02\xe4\xb2~\x88\x05,\x99\xeb}8\xbb\xe3\xe1\xb4\xcb`\x82\x88\xb9>\x87\xf1\x1e\x86\t\xa0\x83\xdd\rK:\x17&`\xd6=\r\x1fد0ӥ\xf01\x9d\x84\xbf4\xf6\x1c\xeb9\x98\xe94\x98\x89L\xa7\xb0\x9a\xe9%X\xdeA0ßo\xec\x16\xa8\xfb\x01\x06\xdfyn\x8f@\xb7\v`\x10\xe4\xc2\u0380\x91\xb3\xffA\x90\v\xfa\x01fN\xfc\a\xc1Nn\x8c\x13\x1a1\xfa\x93Ӣt\a\x93.lM\xc6I\x8fݹ\x03\xc9E\xba\xae\x95)S\xe55\xec>)|\x05\xf3\x1d\x1e\x9e\xd9\xc9\xf3U\x98\xac\xb9\b\x14]y\n~N\xef\t\xfd\xf0\x91Ɇ\xf3Ɗ=\xfed\xb2\xd6M\xdb1\xfa\xbbs;\xd7\"\xa3PSJ\x9f\xfa D\xba\x9f\xd7]:\x14;\xc6*[\xbc\xe7\xd6d_\x84a_ޣ\x96罚$\xe2\xe9駀\xb8\x97\x05\xae\xbfT!\x91[\x95\xc2:$\xfe%\x82¢-\xfdy0\xaf=\x84\x95\x89\x94\xfep\x8a\xafE\xae\xe1q\xb6\xb8\x18\xebp\x97/)XbӴ:>\x0f\xafiŢ-\xa1\x84\xc4\xc6\xec\xc6V\xf5\bl]d\xa6h?t\xb4|\xd4\x15\xb5a\xe7<|\xf9\xd3\v_\xb9\xb9\xeb\x9f<)]\xe6\x8e\x15\xdf\xca\xf2\r\xb3\x00 (\xe3\xd97@cy\xabs\xc3~J&w\xfd\xf9|\x95\xda\xe6\x01).\xab\u05579_\x85\xab\vh\x03\x1e\xad\x01\x16\xd6q0@\xb00\a<\xa2\x06\xa3\xb9^\xc67\xb8\xc2=\xff\xd35\xfd\xfc\xb5\x05#\x96\xe3\xaaR\x19\x91'\xcbM\xf7L\xe3\xf5\xf0'\xf6G\xf6\x88\xf6ʍB䫪;c\x87\xc8?լ\x9d\xb1\x85\xf0\xb7\x90\v\x8f\xab\x01\x80\v\xfc\u0600Jq\xf1x\xe6\xea&O\t\xd6\xc1u\xe7t\x976\x14\x9e\vtN\xecӝ\xcdWrG{Դ\xc9\rT\x89b(\xd6\x14.\xbb\xf7\x17CF'2O\xf9o@-\xa6\xb0\xadYW}\x9bSfO\x196O\x8c7ƣ\u007f\x1ev$R{\xdcc7<·R\xday_~_O#\x8ep\xea\xce\x16\xde|@\x01\x95\xdcKr\x88$ؽ\xb0[\xb1\xc7Uf\x14\xe5Q\xd2\xe8S\x8c\xfe6r\rP\a\xbe\x8e\xd0#\xe8\xc7\xf6̔\bFe\x0eP\xd2\xc7\x12\xae\xe3\x8eJ\x12,\xc4_\x8d\xed\x1f\xd6\x14R\x1b\x1b\xc2\x17\x0e\xa1\xd3\xd2\xc5\xfe\x9c\xaf\xb5N\xe2\xfb@3\xeaө\x96\xaf¤L\xc3\xfb\xfc\xd0)\xc6\n\xbe\xe2\xe9\x16\x15\x0e&0\u007f\xae\xbf\xa2ћ\xb0\xd1\x0f\xd6\xec)\xe2\xeb\xfdt\x97\xbcR\xef\x97\aa\xbd\x14J\xbd\a\xf0#o\xed=\xfe\x82\xe4\x17F6\x82!\x06F̦y\x18'5!\xa5\xd4A\xd6|\x98\xb05\x95\xef\x18\\c\xb0=\x89\xa7\xf7\xad)O\xc4T7\x90]\x88\xb4\x03\xa2\xf3+\xdc\xed\x8c\xf5!~]\xad@\xee\xe2\xc6҃Jޙ+_\xe1k\f }\x93\xc55\xbaɱ\xa0E\xe1X7=\u007f\x11\x82\xcb\xce\"\xcb(>\xc1\x1b\xe7\x85\xea\xf9\x80o.w\xf1~Mڅ\xf9_z\xdbY\x8fɛ\xf6\xec\xbaϵ*\xb6hIS\x19X\xe0\x17\x1f\xed\x05\xaf\xa7\x86S\xba-\xa2\x86W+\xbd'\u007f\xd3.\b\x82'\x0f\xa3\x148\x03;1xgx\xdc\xe7\xf1\xaf\xc6\v\xb5\x19Kh\xbb!`=5\x91Ë\xfbD\x19\x12ÖI\x1f$'4wH\x97V\x92ಃ\xd0{R k\xaa\xfd!i\xe0\xc8N1\\ī\b!(U\xb5'\x95\x8e\x855_Y\xdd\xcaLc\xa9-o\xa1*\xb2\x17\xa8\xca\xe1\x93\xe7\xf0\xad\x98\xf8\xa9\x9f\x9bx\x17x\xb5\xb3\xa6XE\xfes\xcd\xec:V\xec\xac4\x142qN\x13\xaf㍀e\xb1\x97%j\x10.\xe22\xdbw2%\xc8\xf1D\xcd\v\xeb\x97\x05a\x8f\x9d\xa93\xf1\x17\xc3\xc5|\r\x8fX\n2\xb6\xbe\x11[S\xc0\xdd釖\xae)GO_\x15\n\x1f\x85\t\xa2\xa7\xbc\x96\xbf\xeea,\x86;x=\x88\x9d\x80\xaa\x13@uQ\xff\xfb\xc4N\xcdw\x96\xee磨\xe7\x93\xc9'\a)d\xc1\r\xbc\x14\xfb\xfcA\xee\xfa\xf9EY*\x99\x11\xb6\u007f\xfc\x95\x0eH\x8e\v\xa2\x8a\xabɀ\x82\xa3\x87:6\x80/XZ\xcc\xc8*\xfb\xc8?(\xa4\xfd\xde!v#\x95\xabŁ]7Et\x9f\xbdǢ\x1cx\xd7D\x8e\xd8,\x1as|\"M\xe8\x11\x90\xbef\x95@\xc5N\x80Ѥp1!u\xa8q\x0e!\xf5\xa21B\\\x95\x91\x03\xdaUC[Q\x9ds} U\xaf\xc2R\xa2=m=\xff\x11'\rd!q\xfd\xc7\xe6!\xad4$\xe1\xf7wJD\x06\xfc\xf8ɣ\xe6cv\x9f\x9a\xff\x98}\xab\xf8\xf1\xbac\xe8'co\x99\xb7L;\xa2\x12\x9f4\x05\x02\x91eH\xba\xfb\xf5\xf4;v\x97\x97\xfcO\xfaT\x1d\xff\x9b\x19\x1d\xf6Rw\v\xff\xf9_\x17\x10\xebL\xcf\t\x0fz\xf8\xff\x01\x00\x00\xff\xff\xff\x8cC\xfd\xf8O\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xbcXMsۼ\x11\xbe\xebW\xec\xb8\a_**y\xdbC\x877Eo3\x93։5\x96\xe3\x1e\xda\xce\x04\x02\x97\x12j\x10`\xf1!G\xed\xf4\xbfw\x16\x00?DR\x92\x93y\x13\x9cD`\xb5x\xf6\xd9\x0f,0\x9b\xcf\xe73V\x8b'4Vh\x95\x03\xab\x05~u\xa8\xe8\xcbf\xcf\u007f\xb2\x99Ћ\xc3\xdb-:\xf6v\xf6,T\x91\xc3\xca[\xa7\xab\a\xb4\xda\x1b\x8e\xbfb)\x94pB\xabY\x85\x8e\x15̱|\x06\xc0\x94ҎѴ\xa5O\x00\xae\x953ZJ4\xf3\x1d\xaa\xec\xd9oq\xeb\x85,Є\x1d\x9a\xfd\x0fo\xb2_\xb2?\xce\x00\xb8\xc1\xf0\xf7GQ\xa1u\xac\xaasP^\xca\x19\x80b\x15\xe6\xb0e\xfc\xd9\xd7\xd6i\xc3v(5\x8f{e\a\x94ht&\xf4\xcc\xd6\xc8\x03\x92\xa2\b\xf0\x98\\\x1b\xa1\x1c\x9a\x95\x96\xbe\x8a\xb0\xe6\xf0\x97\xcd\xfd\xa75s\xfb\x1c2\xeb\x98\xf36\xab\xf7\xccb\x80\\\xa0\xe5F\xd4.\x00{\x17\xf6\x83M\xdc\x10\xeeҎ\x10\xff\x05\xd6\xf3=0\v\xcb\x03\x13\x92m%.>+\xd6\xfc\x0e\xda\"\xecu\xab\xdd\x1dk\xcc\xc1:#\xd4\xee\f\x14ɬ{bR\x14-\x13c\\w#\x19\x10\x16\xdc\x1e\x81\xfe\r\x8e&\xe8+\xf2\x05D\x18B\xc3\x17\xbc0\x1bT\x02\x1c\xa2\x0e,z`I7<\x9d,D\xd4\xf4=\xc4\xdcx?\x1by\xae\xa7q\xb9ñ\x9a\x9dѾΡs]\x94N\x81\x13\x83.ҟ\xd8o\xc8\x0f\xebRX\xf7\xd7\xf32wº WKo\x98<\x178A\xc4\n\xb5\xf3\x92\x993B3\x80ڠEs\xc0\xcf\xeaY\xe9\x17\xf5^\xa0,l\x0e%\x93\xc1\xab\x96k\xb2\xeb\x13\xa1\xaf\x19\x0f\x9cY\xbf5)W\x92Eѻ9\xfc\xf7\u007f\xb3\x96w\xf2eX\xd45\xaa\xe5\xfa\xc3\xd3\x1f6|\x8f\x15˓{&bq`(\xb9\x9d\xf5<\xbbG\x83\xf0\x148\x8d^\xb7ɪ\xa4\x11@o\xff\x85\xdc5\x01P\x1b]\xa3q\xa2AI\xa3W\x19ڹ\x01\x96[\x02\x1be\xa0\xa0Z\x801\xfaRFc\x016\x18\x02\xba\x04\xb7\x17\x16\f\x06\x12\x95\xeb\\\xd8\x02*\x81\xa9\x04+\x83\r\x11m,ؽ\xf6\xb2\xa0\x02r@\xe3\xc0 \xd7;%\xfe\xd3j\xb6\xe0t\nx\x87\xc9\xd9\xcd\b\t\xaf\x98$\x9a=\xfe\x1e\x98*\xa0bG0H{\x80W=mA\xc4f\xf0\x912D\xa8R\xe7\xb0w\xae\xb6\xf9b\xb1\x13\xae\xa9\x85\\W\x95W\xc2\x1d\x17\xa1\xa2\x89\xadw\xda\xd8E\x81\a\x94\v+vsf\xf8^8\xe4\xce\x1b\\\xb0Z\xcc\x03p\x15\xcbSU\xfc\xae\r\x86\xdb\x1e\xd2A1\x88#D\xfeY\xde)\xe6\xa3\xcf\xe3\xdf\"\xfe\x8e^\x9a\"V\x1e\xfe\xbcy\x84f\xd3\xe0\x82S\xce\x03\xdb\xdd\xdflG<\x11%T\x89&:\xae4\xba\n\x1aQ\x15\xb5\x16ʅ\x0f.\x05\xaaSҭ\xdfV\u0091\xa7\xff\xed\xd1:\xf2O\x06\xabp\"\xc0\x16\xc1ס\x9cd\xf0A\xc1\x8aU(W\xcc\xe2\x0f\xa7\x9d\x18\xb6s\xa2\xf4:\xf1\xfd\x83\xecT0\xb2\xd5N7g̤\x87&\xb3tS#?ɓ\x02\xad0\x14ˎ9\f\x19\x90\x92\xf6\x84\xd2\xf3\xe5\xef|\xf2\x86\x04\xe6\x1c\xad\xfd\xa8\v<\x9d\x1f@]\xb6b'\xd8j4\x95\xb0\xa1\x15\x80R\x9b\xe19\xc2R1\uf3e6\xfed\x83\x15T\xbe\x1aB\x98\xc3\x03\xb2\xe2^\xc9\xe3\xe4\xc2ߌp\xc3\r&\xddE#\xc2\xda\x1c\x15_\xa3\x11\xba\xb8h\ueec1pk\xf4^\xbf@\x19\xc2V9y\xa4\xbab\x8f\x8a\x0f\xebf3\x96\xeb\x0fM\r\x8dɑr)q\x93\xc12\xe5\xa4.\xe1\r\x14\xc2R/`\x83\xca!=\xd4\xda\xd0j\x0e\xce\xf8W\x1b͵*\xc5nhj\xbfᙎ\x8a\x8bJ\a\\\xad\xc2\x1eTh(\x02j\xa3\x0f\xa2@3\xa7\xc8\x17\xa5\xe0\t\x837\xf1\xd4)Á8\xb4n2w\xa0->)\xac/\xba\xec\xbe/\xd95_\x11E\nW\x8b\x8e\xaa\x9e\x05\x85\x14\xce\xcc\f\xe3\nȣ\\+E^r\x1aXkϭ\x1d:o\xf0\xd7s\tFc\xeb\xf93\xba\xf1\xfc0\xea\x82Xӝ\xc5?\x11\no1p{\x19\xc0\x15\x9f\x01p\xb6Bs\x1d\xc5jIbm\xc43X-a\xebU!\xb1\xc1\xf2\xb2GEǷ(\x8ft\x86<\xdem&tB\xc3c(\x0e\xe9\x00n\u061c\xc2^jS1\x97\xc3\xf68Jꫦ\xd5\x06K\xf1\xf5\xaai\xeb \xd6\x10\\3\xb7\a\xa1\xac(\x10\xd8\x04\xdd\x13U\xb6\x19m\x02\xdf\xd71\x91\xbe\xd1\x19TA\xa8\xa8\x8f\v^\x84\xf1\xda\xf4h\xf8\xbc\x98\x19\xeb$\xd4\xda\xdd|\x87\x86kX\xb0\xa7Ss\u008a\xae/}\x1f\v\"?^\x84\xf14\x96\xbfPV\x9b\xdb\xc68A\xa9\xa5\xd0Ơ\xad\xb5*(\xfe^WT;\xb8\xbfEi\x9dr\xe0\xfc\xb4Z\x9d\xac4\x9c_\xed\x17b\xe7\xffm\x1dC\xbc`\xf6\xcfe\xbd\r\x97\x90^\xd3\xf0\x83\xfb\x83\x9b^\x83@-\xa7\x02\xaf\xbc\xc5\"\xd6\xfb\f\xfe\xa1\xe0Wj 95v9a\xa4^Ύ\xbc\xab\xf4\v\xfd\xb9\xa7-(\x00\xad\x82]\xa19\xa2\x16=\xf6\x9ba\xe9EHI]\xa3\xc1J\x1f\xd2%\xb4?\xa8\xc53(\x8ft\xf9\xd6%\x1c~\xc9\xded7?\xb9\xf9\xa0\x9b6u\x13X<\xe0A\f\xafKc6\xefF\xf2M\xf2\xb6\xa1M\x1f_\x9a>ta\x92ؗ\x91\xf9\xa5\x90\xd45Odzw\x15\x1c?\x06\xbc\xdb\xdc\xdd\xda\xf0$C\x1d\xffH\xe9\v\xb9\xcf\x06\x80t\x83ҩ\xd1\xf7֡\x99pv\xeb+aAi\x90Z\xedNR!\x8e\xd4\xf6\x836\x10CG\x1b(\x90:v\xcar\xbegj\x87\xddU.a\uf864\xc0\x18#=\x8d\x8e.\x1a\x84\x9a\x0e\x85W\xf8\xf0QT\x97\xb3\xe1\xeeDt\xfa\xb9\xa5E\x9d|)\xc79\xf9\n\xae\a\xd2\xcd\x19JD\xce]\xf3\x1cԍ\xef\xeb\"ǯLW\xad\xff\xee\a\xa7\xb1\xf9\xccvOO?\xdf\xf6\xf0\xd8w\xf9x%\x89\xc6B\xee\x8dA庺\x1b\x92i\xaa\xf6\xbe\xee\xfe\xb3TS?US\xb7\xa3\xa9\xba\xebI\xf4\x97\xd74~\xa5I+\xf9\xcc\xc6/\aT\x15\x84\xc2.{Ë*\r@b\x14\xe4=\xfe\x1e\x1eB|\f?\x13z'\x1dl\x8d\x17l\x00\xc4Ƅ\x1d\\\x97\xa8\x93\xb1\xe8\x1a\x80\xbd\xf1\xe4*\x9e1\x8f\x980\xfcxsu\xffݝ\xedq0\xa3\x10\xc0\xa1X\xa6T\xf5\x96r\x00\x1200E\x02\x1a\xa7\x00!\x06\x84\xc80DF\x18\xa3\x95v2\x998&d\xa5\x99`\xf9\x8e\xfa\xe7Yv\xe6\xfc}\x89n\xd4\x01W:\x06\x05\xb4G\x98\xea\x8e\x0e\xa4F\x0eq\vړ\x00c\xc5\x12\xc6\x1e:2\vE\xc5\x04\x88\x9b\xbf\xd0j\vw\x05\x1d\vH\x1f\xb3w\xa5\xcd\xf6\xc8\n\x8c6\xee\x02\xfd\xfblYJ~ť7:\x17x\xfe((r0\xbep\xcd\xf85\x98\xe0`0O\xc0X|@\x0eG֪\x8a\xb4\xf0[\x81Ca\x1b;\xe8U\x93t\xeb\xf5\x8et\x9e\x18\x1b\x87!\aҧu\xed{\xdad\x8d,k\x87{\xf4k\xa1\xddʰ\xedI\xd1jf\\\x9bD\xab\x1ax\xa8\x03\xd3\x0e\xee+\x9e\xc6K\xde\x1fE\xaaO\xa5\x13D\x99\xc2\xeeY\\{\xf8U\xee\xa5\u007f\xc72\x8f\xc7\xc6\xf8\x0fx\x8b\xa8P\xb9\xfdx\xf7\tf\xa7\xb5\x04\xa7\xcc+\xed\xc319\x80/\xa0(l\x91\xc7\xc2m9\x0e\xd5\"\x06\x97\"\x05\xad\v\xeb\t\xc3)tɛ\x81T\xe6\xf6+\xf5i\xe1\xb2\xde\x1b\xb0A\xc8\xc9\x19E\xd7\xc2U\x80K3\xa0\xbf4\x82_\x1c{!,\xab\x82\xf4m\xf0\xc7\xd7ݩ\xe2H\xebY<\xdfE\x8b\x15Z\x18˻\x84\xb6Ԭ\x80+giK\xb6\x8e\x01l#\xc3cO\xb6\x9f\xc7\xf2\x84\xe8\xf3\x00\xb7G⥁-\xdfh\xa0\xdc*\xa7\xf2W\x92\x85Z'b<\xe9\xb5Ց\x997)\xa8\xd1,\xff\x8bC=1\x93\xb0\x99\x19\x83Nv\xea-\xb0t\xe8srG\xe6\xc8r\x9e\xf7I8\x1f\xabJ\xfdk\x19\n\x02&t\xb1\xb1\x16\x93\xa2\xbb>\u007fN\xbc{w\xf2.\xa8K\x1b\x83\xa3\xf15\x04\u007f\xfcٌV\xd1\xdd\xcfq\x14\xe1\u007f\x01\x00\x00\xff\xff\xcb0\x9b\f\x8c\t\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WOoܶ\x13\xbd\xebS\f\xf2;\xe4W \xd26m\x0f\x85n\xad\x93\x02A\xd3 \xb0\x13_\x8a\x1e\xb8\xe4\xacĚ\"Y\xcep\x1d\xf7\xd3\x17CI\xfbG+\xdb\xe9\xa1{\xd3p8|||oȭ꺮T\xb4\xb7\x98\xc8\x06߂\x8a\x16\xbf0z\xf9\xa2\xe6\xeeGjl\xd8\xec_o\x91\xd5\xeb\xea\xcez\xd3\xc2U&\x0e\xc35R\xc8I\xe3\x1b\xdcYo\xd9\x06_\r\xc8\xca(Vm\x05\xa0\xbc\x0f\xac$L\xf2\t\xa0\x83\xe7\x14\x9c\xc3Tw蛻\xbc\xc5m\xb6\xce`*+\xcc\xeb\xef\xbfm\xbek~\xa8\x00t\xc22\xfd\x93\x1d\x90X\r\xb1\x05\x9f\x9d\xab\x00\xbc\x1a\xb0\x05\x13\xee\xbd\v\xca$\xfc+#15{t\x98BcCE\x11\xb5,ڥ\x90c\vǁq\xee\x04h\xdc̛\xa9\xcc\xf5X\xa6\x8c8K\xfc\xeb\xda\xe8{;eD\x97\x93r\x97 \xca Y\xdfe\xa7\xd2\xc5p\x05\x10\x13\x12\xa6=~\xf6w>\xdc\xfb_,:C-\xec\x94#\xac\x00H\x87\x88-|\x10\x94Qi4\x15\xc0^9k\n\x15#\xee\x10\xd1\xff\xf4\xf1\xdd\xed\xf77\xba\xc7A\x8dA\x00\x83\xa4\x93\x8d%o\x89\x1b,\x81\x82\t\x05p8\x00\x03\xe5A%\xb6;\xa5\x19v)\f\xb0U\xfa.ǩ&@\xd8\xfe\x89\x9a\x818$\xd5\xe1+\xa0\xac{PRmL\x04\x17:\xd8Y\x87\xcd4%\xa6\x101\xb1\x9dY\x96߉\xbe\x0e\xb1\x05\xe0\x97\xb2\xa31\a\x8c(\n\t\xb8G\x98t\x81\x06\xa8\xec\x16\xc2\x0e\xb8\xb7\x04\t\v\x95~\xd4\xd8IY\x90\x14\xe5'\xe4\r\xdc\b݉\x80\xfa\x90\x9d\x11\x19\xee11$ԡ\xf3\xf6\xefCe\x12^dI\xa7x\x16\xc2\xfc\xb3\x9e1y\xe5\xe4,2\xbe\x02\xe5\r\f\xea\x01\x12\x16v\xb2?\xa9VR\xa8\x81\xdfBB\xb0~\x17Z\xe8\x99#\xb5\x9bMgyv\x94\x0eÐ\xbd\xe5\x87M\xf1\x85\xddf\x0e\x896\x06\xf7\xe86d\xbbZ%\xdd[F\xcd9\xe1FE[\x17\xe0\xbe\x18\xaa\x19\xcc\xff\xd2d?zy\x82\x94\x1fD=\xc4\xc9\xfa\xee\x10.:\u007f\x94w\xd1\xf9(\x8fqڈ\xffH\xaf\x84\x84\x95\xeb\xb77\x9f`^\xb4\x1c\xc19\xe7\xa3N\x0e\xd3\xe8H\xbc\x10e\xfd\x0e\xd3xpEeR\x11\xbd\x89\xc1z.\x1f\xdaY\xf4\xe7\xa4S\xde\x0e\x96i\x96\xad\x9cO\x03W\xa5\xaf\xc0\x16!G\xa3\x18M\x03\xef<\\\xa9\x01ݕ\"\xfc\xcfi\x17\x86\xa9\x16J\x9f'\xfe\xb4\x1d\x9e'\x8el\x1d\xc2s\xbfZ=\xa1\x85\x95o\"j9/!M\xe6ٝ\xd5\xc5\x02\xb0\v\t\xd4\xd1\xd9\x13m\xcdI\xdd5o\x16P*u\xc8\xe7\xb1\x05\x8aO%E\x16\xbe\xef\xd5y\v\xf9?6]#}\x80&\bcg\xf8\xa6Y\xd4{l\xf55\x8d\xaeb\x98\xa5*[\x17\x1e\xc5\xe8\xd2zN\xd1,\x17\x95\x1f\xfa<\xac\x15\xaf\xe1\xe7\x82\xf4}\xe8\x9e\x18\xbd\n\x9eE\xd0O\xa4\xdc\x06\x97\a\xbc\xf1*R\x1f\x9e̜/\xcd\xc3E\xb2L\xbbFi\xb5\xf8\x18\xa4i\xf8\x1a)\xbbՅV\x858\xff\xca\xc5\xf9\x1c\xcbr\xf7\xcc,˄\xb1\xe3\"ȅ\x9d<2ұ\r\xdc[\xeeᾷ\xba_\xa9\neZ9 \xe9/DA\xdb\xe2\xd8\u007f\a[tl\x13^ȣ.\xa2\xb9\b\n\xe4j\xad\xf8\xc2s\xeb\x85\xeb\xc9\v\xcf:\x96\x15g\xfajϖ\xec\x99T\x9dSB\xcfS\x8dr[-'|\x8dig\xc5\u007f\xbe~\xff\xa4s\xdf\x1c\xf3\xca\x1bLY?\xe2\x88\tk\xb2\x9dܭ2&\xde-\xceZ\x120\xfeN\xef\xf8gO\r\xbfD\x9bN\x9e,\x8f@{{H\x1b\x1b\v\xfa\xf1\x8aX\xbe^J9\xa4r\xedj\xe5/\xb0m\x11\f:d4\xb0}\x18;\xe3\x031\x0eK\xbc\xbb\x90\x06\xc5-\xc8\xc5Q\xb3\xbd\x10\x8a\xbc/\xd5\xd6a\v\x9c\xf2\xba\x8aV6\x1b{E\x17\xb6:\xdb\xe7G\xc9X;\xfe\x83\xb9\x9e8\u007fx\xa4\x83\xd5\xf0\x01\xef/b\x1fS\xd0H\x84Kc<\x82~E܋\xd0\xf1a\xfe\xfa\xf8U\xa4XO\x0f\xf12\x00P\x9e\xb5愺\xe9\xcd8E\x8e\x8eQZcd4\x1f\x96O\xf1\x17/\xce\xde\xd6\xe5S\ao\xec\xf8/\x02~\xff\xa3\x1a\xab\xa2\xb9\x9dqH\xf0\x9f\x00\x00\x00\xff\xff\xbbظ3\xc4\f\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s۸\x11\u007fק\xd8\xc9=\xb87\x13RMz\xd3\xe9\xe8\xedb7\x1d\xb7w\x8e'\xf2\xe5%\x93\x87\x15\xb1\x12Q\x83\x00\x8a\x05\xa5\xa8\x9d~\xf7\xce\x02\xa4$J\xb4,_{)_l\x82\x8b\xc5\xfe\xdf\xdfB\x93\xa2(&\xe8\xf5'\n\xac\x9d\x9d\x01zM_#Yy\xe3\xf2\xf1O\\j7]\xbfYP\xc47\x93Gm\xd5\f\xae[\x8e\xae\xf9H\xec\xdaP\xd1\r-\xb5\xd5Q;;i(\xa2\u0088\xb3\t\x00Z\xeb\"\xca2\xcb+@\xe5l\f\xce\x18\nŊl\xf9\xd8.h\xd1j\xa3(\xa4\x13\xfa\xf3\u05ff/ߖ?L\x00\xaa@i\xfb\x83n\x88#6~\x06\xb65f\x02`\xb1\xa1\x19x\xa7\xd6δ\r-\xb0zl=\x97k2\x14\\\xa9݄=Ur\xe8*\xb8\xd6\xcf`\xff!\xef\xed\x04\xca\xca\xdc;\xf5)\xb1y\x97ؤ/Fs\xfc\xdb\xd8ן4\xc7D\xe1M\x1bМ\n\x91>\xb2\xb6\xab\xd6`8\xf9<\x01\xf0\x81\x98\u009a~\xb1\x8f\xd6m\xec{MF\xf1\f\x96h\x98&\x00\\9O3\xb8\x13)=V\xa4&\x00k4Z%Sd\xb9\x9d'\xfb\xe3\xfd\xed\xa7?̫\x9a\x1a̋\xc2\xd9y\nQ\xf7\xea\xc9s\xe0\xd8\xdd\x1a\x80\"\xae\x82\xf6\x89#\\\t\xabL\x03J\\I\f\xb1&\xe8\x1cB\n8\x1d\x03n\t\xb1\xd6\f\x81\x92\x0e6;\xf7\x80-\b\tZp\x8b\xbfS\x15K\x98\x8b\x9e\x81\x81k\xd7\x1a%\xfe_S\x88\x10\xa8r+\xab\xff\xb9\xe3\xcc\x10]:\xd2`\xa4ξ\xfd\xa3m\xa4`ш\x11Zz\rh\x154\xb8\x85@r\x06\xb4\xf6\x80[\"\xe1\x12~v\x81@ۥ\x9bA\x1d\xa3\xe7\xd9t\xbaұ\x0f\xe5\xca5Mku\xdcNS@\xeaE\x1b]\u0a625\x99)\xebU\x81\xa1\xaau\xa4*\xb6\x81\xa6\xe8u\x91\x04\xb7)\x92\xcbF}\x17\xba\xb8\xe7\xab\x03I\xe3V\xdc\xc61h\xbb\xda-\xa7\x00{\xd2\xee\x12`\xa0\x19\xb0ۖ\xe5ߛW\x96\xc4*\x1f\xff<\u007f\x80\xfe\xd0䂡͓\xb5\xf7\xdbxox1\x94\xb6K\n\xd9q\xcb\xe0\x9ađ\xac\xf2Nۘ^*\xa3\xc9\x0e\x8d\xce\xed\xa2\xd1Q<\xfd\x8f\x968\x8a\u007fJ\xb8N\t\r\v\x82\xd6+\x8c\xa4J\xb8\xb5p\x8d\r\x99kd\xfa\xcd\xcd.\x16\xe6BL\xfa\xbc\xe1\x0f\xebА0[k\xb7\xdc\x17\x8aQ\x0f\x1d\xe5\xfe\xdcS%\xfe\x12\xa3\xc9>\xbd\xd4UJ\x01X\xba\x00xL^\x1e\xb0\x1dKMyrU\x98G\x17pE?\xb9\xea ɟ\x90\xe9\xdd؎^*\xa9m9M\xa9c\r\x9c)\x8fX\x02\x98~릦@iG \x8e\xba\x92@r\xac\xa3\v[a+\xfbI\x95G\xfbG\x8d.\x8fu\x8a\xce\xca\u007f\xe7\x14\x8d\x89+\x1b!֘c\xf2ޥ\xcc\b\xad\xb5\x92\x05\xce^,\x80w\xea\xec\xf9\x1dg\x84@K\nd%\xa3r\xf1\xf1.\x95\xa8\x88\xda\xf6\x99\x97K7Dwb\xbeE60)\x18:\xfa\x9c\xb3\xe1\xc9z<*\xe9\x8f\xf7\xb7}\r\xee\x8d\xd4\xc9\x1c\x8fO|\xb8\xf90\xcbRI\b\xadR%\x95.\xb7Ԃ9\x04l\xe4\xce)1\x99\xcc\xd1\xe6\xe0\x88\x0e\xaa\x1a\xedHa\x85\x04Z\x92u\x97\xad\xf4\xb2\xf2\xea\xa5\xd9z\f\x1b\xfag\x04>\x1c\x17\x86\xffS\x13\xbeH\xad\x84ڟU\xeb\xee \x9eϪ%\xf3C\xb0\x14)i\xa6\\ŢTE>\xf2ԭ)\xac5m\xa6\x1b\x17\x1e\xb5]\x15\x12\x88E\x8e\x04\x9e\xa6\x11`\xfa]\xfa\xf3\xab\xb4H\xc8\xfc2U\x12\xe9\xb7\xd0G\xce\xe1\xe9\x8b\xd5\xe9q\xe5\xa5]\xe9j\xde!\x9f㝒\x12\x9bZWu?$\xec\xab\xe7h\x8e4\xa8r\xc9E\xbb\xfd\xcd\xc3V\f\xd9\x06\x91g[tch\x81V\xc9\xff\xac9\xca\xfa\x8b-\xd7\xea\v\x92\xf4\x97ۛo\x13̭~qF\x8e\x02\xe2\x1c\x13\xde\xdd*1\xdfRS8\v\xa7>\x0eH{`7\x82$w4\x17#\xb9\x88\xab\x13\x00\x85J\xa5\x8b\x064\xf7g@\xd6\x19\x9d\a\xc2?\xe0\x8a\x01\x03\x01B\x83^\xfc\xf4H\xdb\"7i\x8fZz\xac\xb4\xd1\x0e\xaf,\b\xd0{\xa3G\xdai\u05ca;\xb8\xd8!o\x19kq\xc5\xe3\xfa\x8eX=\xef>k\xed<^\x8c\xc1\xe7\xee\xe8\x8cKv\x10:\xba=P=\x8d\xdf\x13\xe0\xfa\x84\xddd\n\x14tu(Z1>\xba\f(\x04\xd2\x0f\x16\xbcS\x83\xf7a\x9c\r>e}\x9e\x9d\xde\"Ɩ/\x9e\xdf\x12uo\xbd\\\x0fb\xc7#a\x85_3\xc1UN\xb0\xe3\xf0\x9a\xea\x9c\v\xafO\xe9ӅHPY\xac\xa8\x1b\x89\xc7.\x866\xc8\xfd\t\xa7C\x18\x1c0\xcb\xfbR\xdd\x15^\xa4\x12\xb4\x13ԹDmHA\u007fGv\xbc\xe7\x84\xe7!\x8f\x05-\xa5T\xb5\xde8T\xfdPԉ\xd6_\xf2<\xc84\x9c\xee\x1b\xae\xf8I\x8e-\x93JS\xf2\x88\xfa\xc7\xeda\xe9B\x83q\x06\n#\x15#\fmk\f.\f\xcd \x86\xf6\xf8㓩\xdf\x103\xaeΧ\xd7ϙ&χ\xdd\x06\xc0\x85k\xe3n@\x1c\xa4\xf8\x15w\xd1s\xf9t:2\x82\rC\x16\x050s\a\x1f\x8dI;\x0e\xd3z\u007f\x89\x9a\xe4Y\x90\xb8\xe5\xbf\xcdp\x00_#\x9f7νP\x8c%Ϯ\x06\x9d\xc9\x1eH\x13a\xdb\x1c\x9fP\xc0\x1dmN\xd6n\xed}p\xab@|\x1c\x1aE\x1f?'\xca\x16\xf0>\xc5\xf9\xc5\xfav\a\x9cW\xb9#\x82ڙ>=]D\x03\xb6m\x16\x14D\xef\xc56\x12\x0f\x8b\xf0\xe9̟\xa6\x88\xbd\xd1\x0ev\xf7W\b\x99O7\x14Uh\xd3-\x9b\xe4Lt\xa04{\x83\xa7SQ\xafBB\x12\x922\x92\xd2\xfbh\xed\xd3\xd4SH\x9f^rK\x91\xa4\xb9qv\x14\xe3\xf6\xf9\xa9m\xfc\xe3\x0fO\"\x0em#\xad\x06E\xbd\xfb*\x06|'\xfc\xff\u05fc\x9fl\xacl\xd1s\xed\xe2\xed\xcdYo\xcfwd}\x94\xefAK\xaa]\xe9ޯ#\xea]>li\xf9\xc9apq\xeaq\xc4\x10/k\x1e\xf3\x01\xe93}#\xf1%U\u009c<\x06\x8c\xa7\x81\x99\ue0ef\x8f\u007fey\r\xacӵ\x98`\x9f\f\x86\xf2\xa8\xcb\xd2N\x04ڹ\x90c\xf5\x94\xe3\xa0\x11\f\n\xffP\xf4oQ\xf3G\xe2\xe1hi\xff\x93ӛ\xfd[\x8aˢ\xfb\x89)}\xe8\xd4R\a\x87w\xb7\xaa\xdd\xca\x1e\x86`%\x90\x9d\xd4\xdd\xf1\x8fL\xaf\xf2UI\xff\xabQz\xad\x9c\xcdh\x96g\xf0\xf9\xcb\x04\xba\xbb\xd6O\xbd\x1c\xb2\xf8\x9f\x00\x00\x00\xff\xff\x80\xb6\xf7)\x9e\x1b\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s۸\x11\u007fק\xd8\xf1=\xb87\x13RMz\xd3\xe9\xe8\xed\xcen:n\xef\x1cO\xe4\xcbK&\x0f\x10\xb1\x14Q\x93\x00\x8b]HV;\xfd\xee\x9d\x05HI\x94(Y\xce\xf4rzI\b,\x16\xbf\xfd\xed\x1f,\xe0I\x96e\x13՚O\xe8\xc98;\x03\xd5\x1a|f\xb4\xf2E\xf9\xd3_(7n\xbaz\xbb@Vo'O\xc6\xea\x19\xdc\x04b\xd7|Dr\xc1\x17x\x8b\xa5\xb1\x86\x8d\xb3\x93\x06Yi\xc5j6\x01P\xd6:V2L\xf2\tP8\xcb\xde\xd55\xfal\x896\u007f\n\v\\\x04Sk\xf4q\x87~\xff\xd5\x1f\xf3w\xf9\x0f\x13\x80\xc2c\\\xfeh\x1a$VM;\x03\x1b\xeaz\x02`U\x833h\x9d^\xb9:4\xe8\x91\xd8y\xa4|\x855z\x97\x1b7\xa1\x16\v\xd9u\xe9]hg\xb0\x9bH\x8b;Dɚ\a\xa7?E=\x1f\x93\x9e8U\x1b\xe2\u007f\x8cN\xffl\x88\xa3H[\a\xaf\xea\x11\x1cq\x96\x8c]\x86Z\xf9\xe3\xf9\t@\xeb\x91Я\xf0W\xfbd\xddھ7Xk\x9aA\xa9j\x92i*\\\x8b3\xb8\x17\xa4\xad*PO\x00V\xaa6:\U00091c3b\x16\xed\x8f\x0fw\x9f\xfe4/*lT\x1a\x14ͮEϦ7Q~{\xdeݎ\x01h\xa4\u009b6j\x84kQ\x95d@\x8b?\x91\x80+\x84\xce+\xa8\x81\xe26\xe0J\xe0\xca\x10x\x8c6\xd8\xe4\xe1=\xb5 \"ʂ[\xfc\x13\v\xcea.vz\x02\xaa\\\xa8\xb5\x04\xc1\n=\x83\xc7\xc2-\xad\xf9\xf7V3\x01\xbb\xb8e\xad\x18;\x86\xfb\x9f\xb1\x8cުZH\b\xf8\x06\x94\xd5Ш\rx\x94= \xd8=mQ\x84r\xf8\xc5y\x04cK7\x83\x8a\xb9\xa5\xd9t\xba4\xdc\xc7s\xe1\x9a&XÛi\x8cJ\xb3\b\xec\xdc\xf1,!\xf2+\xa5\xca?(\xae^\xdc\xf5\xfa\xaeL\xdbĊ\xc0\x0e\x14\xb4\x06\v\x1c\x94V0\x96\x18\x95N\x83#*\x01$q\xbf\xfb2\xc6\x19\xc0{\xe7\x01\x9fU\xd3\xd6\xf8\x06Lby[\xd0\xfa\xf80\x94\x88\xd8ꃵ\xe1ʌ\x1b\xae$\x8e:\x83\xd7\xd1PVO\b\xae34 \xd4\xe6\tgp%\x19\xbc\a\xf1?\x92:\xff\xbd\x1a\xd5\xf9\x87\x94\"W\"r\x95\x80mϬ\xfd\x8c\xdb\x01\xe4J1\xb07\xcb%z\x1cg3\x16b)p߃\xf3b\xbbu{\n\xa2Z\xf1Y\xaa3\xa8\x8f\x00\u007f~\xf7\xe5\x04\xda!O`\xac\xc6gx\a\xc6&VZ\xa7\xbf\xcf\xe11F\xc4Ʋz\x96}\x8a\xca\x11Zp\xb6ތ\xa3uP\xa9\x15\x02\xb9\x06a\x8du\x9d\xa5^A\xc3Zm\xc4\xfe\xde]\x12a\nZ\xe5y\xd8\r\x8cj}\xfcp\xfba\x96PI\b-c\x1d\x93S\xa64r\xe6\xcba\x9fN.\x89\xc9HGH\xc1\xc1\x0e\x8aJّ\xb2\x06\xb1i\x88\xec\x96AΒ\xfc\xfa\xb5\xd9zxl\xf7\xbf\x91\xe3\xfb\xb00\xfcN\x87\xe0Ef\xc5\xd6\xf9E\xb3\xee\xf7\xe2\xf9\xacY\xd2\xc4{\x8b\x8c\xd12\xed\n\x12\xa3\nl\x99\xa6n\x85~ep=];\xffd\xec2\x93@\xccR$\xd04\xb6\xe1\xd3\xef\xe2?_eE\xec\x8c/3%\x8a~\v{d\x1f\x9a\xbeڜ\xbe\xaf\xbb\xf4T\xba\x9ew\x8d\xc7\xe1JI\x89ue\x8a\xaao\xd2w\xd5s4G\x1a\xa5S\xc9Uv\U000db1ed\x10\x19\xbc\xe0\xd9d\xdd]0SV\xcb\xff\xc9\x10\xcb\xf8\xab\x99\v\xe6\x82$\xfd\xf5\xee\xf6\xdb\x04s0\xaf\xce\xc8ц4\xc5D\xeb\xee\xb4\xd0W\x1a\xf4g\xbb\xa9\x8f\x03Ѿ\v\x1c\xe9\xe3\xb62\x177rdUK\x95\xe3\xbb۳\b\xe6[\xb1~\xf7\x1d\xe5]\xfb\xd6k\x92\x10=ӷ\x9dD\x92ԜE\x91\xfa\xee\xb1.\xb8Ð:\x868\"\x1d\xe8W!\x91됴9\xfbH\xb2\xf1\x0e~ \xd1:=\xf8\x1e\xfaw0\xb5#}0\x9c\x8cx\xf12Ê\x03]~\x9d\x89\xe2=g)?\xb9S\x12\xcf\uebfa\xd0\x14N\x9a\xb9\xe1\xe3\xcd9\xcf\xdd\x1c\xcb\xc7\x17\x02\xaf\x13.6\r\xc6\xdbBD\x00kE\xfd\x16\xc7~\x83=mia\xac\x84\xa2\ful\xb6\xa4\x0f,\x95\xa9Q\xc3\xf6\xe9\b\x1e\xe5>\x17\xaf\xcc\xd7ǵ\xb2W\x13\bu\xbc\xe7\x8d\x00>\\U:\xdf(\x9e\x81\\\x933Qp0oC]\xabE\x8d3`\x1f\x0e'O\xa6A\x83Djy>\x0f~I2\xe9\x86\xd5-\x00\xb5p\x81\xb7W\xac.!:\xf3\xaf\xa9\xf3\xf8\xe5\x17\xbcJ\xd1y\x10\x0f\"1\x16Wۤ<\x17X\x10o/\xa19\xdc\"\x83{\\\x1f\x8d\xdd\xd9\a\xef\x96\x1e\xe9\xd0\aY﨣\xf6;\x83\xf71\x02.6\xb8\xdb\xe0\xbc͝\x10T\xae\xee#ױ\xaa\xc1\x86f\x81^\f_l\x18\xa9g\xa0O\xf4\xe3\x1bj\xecyw\xbc\xed\xd6\xf7\xd5*)\xea:\xf8B\xd9\xf8$#\xd1\xc9\x0e\xb4\xa1\xb6V\xc7-|oC<\xf6$8%Cvq\xd1g\x97\xa4t\x9c{͝:¹uv\xb4#\xebS\xc1X\xfe\xf3\x0f'\xcfGc\x19\x97\x83R\xd8\xcd\n\x85?\x89\xfe\xff\xb7\ue4c7/\xb1\xf2|Y\xe9\x9a\x0fD_\xaaZQ\xf1X\xcd\xda/?\xc7\xe5f\xb8ɷ\xa84#\xd4\x1c\f\xed\x1e\xec\xdf\uefa2\x8b\xb2\xee\x81>N@2K\xefm\xde=Fu#\xbb\x03K\x15\xd2k\xa1\xbe?|\xa1\xbf\xba\x1a<\xb8\xc7\xcf\xc2Ym\xd2_\x17\xe0\xf3\x97\ttOT\x9fz\x1c2\xf8\xbf\x00\x00\x00\xff\xff6\x10(\x86\xdc\x18\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4W\xcdn\xe36\x10\xbe\xfb)\x06\xdb\xc3^*\xb9i{(tk\xd3.\x104\t\x16\xce6\x97\xa2\a\x8a\x1a\xd9\xd3P$\xcb\x19:u\x9f\xbe %ٲ-{\x83\x05V7\x0e\x873\xdf|\xf3CjQ\x14\xc5Byz\xc6\xc0\xe4l\x05\xca\x13\xfe+hӊ˗\x9f\xb8$\xb7\xdc\xde\xd4(\xeaf\xf1B\xb6\xa9\xe06\xb2\xb8n\x85\xecb\xd0\xf8+\xb6dI\xc8\xd9E\x87\xa2\x1a%\xaaZ\x00(k\x9d\xa8$\xe6\xb4\x04\xd0\xceJp\xc6`(\xd6h˗Xc\x1d\xc94\x18\xb2\x87\xd1\xff\xf6\xbb\xf2\xfb\xf2\xc7\x05\x80\x0e\x98\x8f\u007f\xa2\x0eYT\xe7+\xb0ј\x05\x80U\x1dV\x10\x90\x85t@\xef\x98\xc4\x05B.\xb7h0\xb8\x92܂=\xea\xe4v\x1d\\\xf4\x15\x1c6\xfa\xd3\x03\xa4>\x9cU6\xb4\x1a\r\xed\xf2\x96!\x96\xdfg\xb7\xef\x89%\xabx\x13\x832s@\xf26\x93]G\xa3\u0099Br\xe0\x032\x86-\xfea_\xac{\xb5\x1f\bM\xc3\x15\xb4\xca0.\x00X;\x8f\x15<&\xa8^il\x16\x00[e\xa8Ɍ\xf4\xe0\x9dG\xfb\xf3ǻ\xe7\x1f\x9e\xf4\x06;\xd5\v\x93e\xe71\b\x8d1\xa6o\x92߽\f\xa0Aց|\xb6\b\uf4e9^\a\x9a\x94Qd\x90\r\u0090\x17l\x80\xb3\x1bp-Ȇ\x18\x02\xe6\x18l\x9f\xe3\x89YH*ʂ\xab\xffF-%<\xa58\x03\x03o\\4M*\x83-\x06\x81\x80ڭ-\xfd\xb7\xb7\xcc .\xbb4Jp\xa0x\xfc\xc8\n\x06\xabL\"!ⷠl\x03\x9d\xdaA\xc0\xe4\x03\xa2\x9dX\xcb*\\\u0083\v\bd[W\xc1F\xc4s\xb5\\\xaeIƊ֮\xeb\xa2%\xd9-s]R\x1d\xc5\x05^6\xb8E\xb3dZ\x17*\xe8\r\tj\x89\x01\x97\xcaS\x91\x81\xdb\\\xd0e\xd7|\x13\x86\xf2\xe7\xf7\x13\xa4\xb2Kic\td\xd7{q\xae\xb2\x8b\xbc\xa7\"\x03bPñ\x1e\xff\x81\xde$J\xac\xac~{\xfa\x04\xa3Ӝ\x82c\xce3ۇc| >\x11E\xb6\xc5\xd0'\xae\r\xae\xcb\x16\xd16ޑ\x95\xbcІ\xd0\x1e\x93α\xeeHR\xa6\xff\x89Ȓ\xf2S\xc2m\xeek\xa8\x11\xa2o\x94`S\u009d\x85[ա\xb9U\x8c_\x9d\xf6\xc40\x17\x89\xd2\xcf\x13?\x1dGNJ=[{\xf18-f3t\xda\xffO\x1euJXb-\x1d\xa4\x96t\xee\x01h]\x00u\xa6_N\f\xcf5g\xfaj\xa5_\xa2\u007f\x12\x17\xd4\x1a\uf75e\xb4\xf9\x05T\xbf̝\x18a\xa5\x11\xd77*\xce+\x9eX\x06\x90\x8d\x92I\x87\x8a\"\xbbo\xf3\x998.R\x9eiW\xa9]\xad\xb2\x1a?\xe4ڱzw5\x96\x87\x99\x03)\x94\x8d{\x05\xd7\nک\xc9\x11e\x8dgA\x84h\xdf\f\xb2\x9f\xc9wM*\xad\x960\\\x05\xb8:Q\x1eyn\xa31\x83\xa5B\xbb\xce+\xa1\xda\xe0\xd8ȭ\vg\x10\xa9\xb7\xb1\xeb\xbb\xfa\xcb\xf8\xdd:\x13;\xdc\xdf\rW\x91?\x1f\xebN\v\xa4\x17\f R\b\x10\x8e\xaf\xc0\xe97\xd4\x04\x83w\xcd\x00`(ZNq\xbe\x11{J.\x05<\x9a\x86\xc5|\xf1\x1fi\xccUԑ\xc2i6\x8f6O\xf8\xfa\xec0\x10%\x91\xdf>\x0e\xb2\xfaH\xac\x8e!\xa0\x95\xc1H\xbe\t\xbfh \x18\xc52i\x8b\xf4\x06\xba\x9a\xe7\xfbs\xfd\x11R2\x05\x92\x04\xd3.zU<\xd7/\xad\v\x9d\x92\n\xd2h/ҡ\x93\xfd\xf4\x02S\xb5\xc1\n$\xc4\xd3\xcd\xcb\x13\x01\x99\xd5\xfaz\x04\x0f\xbdN\u007f\x15\x0e\a@\xd5.\xca\x05b\xf3\xa5x\x85ګ\x88\xfcF\xf1u<\x1f\x93\xc6\\Z\xf1\xad\xce\xd1\xc6\xee\xd4E\x01\x8f\xf8z&[\xa1jN{\xae\x80G's\x1b\x17b\x9a\xa9\xe5\x13\xd1\xe1\x89}sX\xe5\xba+\x86'u\xde\x00\xc8/\xd3f\x92b\xee{s\x90\x1c\x1aDi\x8d^\xb0y<}R\xbf{w\xf4B\xceK\xedlC\xfd\xff\x00\xfc\xf9ע\xb7\x8a\xcd\xf3\x88#\t\xff\x0f\x00\x00\xff\xfft\x8f\x1aC\x8e\f\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4YMo\xf3\xb8\xf1\xbf\xfbS\f\xf2?<\xbb@\xac\xfc\x9f\xb6\x87·4O\x16\bv7\r\x92\xa7\xe9\xa1聖\xc66\x1b\x8a\xd4\xf2ʼn[\xf4\xbb\x173$\xf5bɲ\x17\xedb[]\fS\xc3\xe1̏\xf3\xae\xc5r\xb9\\\x88F\xbe\xa2u\xd2\xe8\x15\x88F\xe2\x87GM\xff\\\xf1\xf6{WHs\xb3\xff\xbcF/>/ޤ\xaeVp\x17\x9c7\xf53:\x13l\x89_p#\xb5\xf4\xd2\xe8E\x8d^T\u008b\xd5\x02@hm\xbc\xa0eG\u007f\x01J\xa3\xbd5J\xa1]nQ\x17oa\x8d\xeb U\x85\x96O\xc8\xe7\xef\xff\xbf\xf8M\xf1\xbb\x05@i\x91\xb7\u007f\x955:/\xeaf\x05:(\xb5\x00Т\xc6\x15Xt\xdeXt\xc5\x1e\x15ZSH\xb3p\r\x96t\xd8֚Ь\xa0{\x11\xf7$A\xa2\x12\xcfq;\xaf(\xe9\xfc\xf7\xfd\xd5\x1f\xa4\xf3\xfc\xa6Q\xc1\n\xd5\x1dƋN\xeamP¶\xcb\v\x80ƢC\xbb\xc7?\xe97m\xde\xf5w\x12U\xe5V\xb0\x11\xca\xd1kW\x9a\x06W\xf0HR4\xa2\xc4j\x01\xb0\x17JV\xacb\x94\xcb4\xa8o\x9f\x1e^\u007f\xfbR\xee\xb0\x16q\x11\xa0BWZ\xd90]\x96\x0f\xa4\x03\x01\xaf\xac\x1f\t\xc1\x17\x01~')\x0eX7\xfep\rB\xa9\xbe\x03\n\xdb\x01\xf8\xeb\x1aԅ\x8e\xf5pL}ƱN#46\x8e>F\x9d\xa5%\xba\x14Y\xff\v\x00Sb\x8d\xea\x05\x15\x96\xde\xd8Y\xb0~\xe8SF\xa0(/\xee?\x17\xc37\xde\xc0F*\x8f\x16ޥߍ\x14xߡN8QE\"u%\xf7\xb2\nB\r\xac\xac\x87R\a&\x18\vZ\xaa\xeb\x11O\xc28\xef\x1e`\n\u007fd\xe1\x85\xfaY>x*\xc5\xd2S\v_\xee\xee?\xa88r]\xf73\x03\xdb\xf1\x86\x88\\N_\f?\xb8\x8c\x1dUH\xd2b\xcdu\xd7\x04g\x80\xafle\x1d\x15\xeb{\xfb\xf8el@pڈFB\xde\xce\b\x92|\xa2\xbd^\xca.9\x11Or\x86T9_\x83\x807<\xc4\"\x9b\xea\xf8\x86Bifa\x91\xcbs\xbe\xe87<0Q\xaa\xb8'\xb9\xce]J|\xde\xf0p\xeaՑ\xbat^\xaa~\xa2\u07b4\xc0Rq=\x96U\xe5\xee\nO)I\x8f7\xd3\xc2¼\xa7\xe6'#r\xa1\xd8-\x80\xbd.\x90!\xfe\xe4\"\x9cd_;\x19\x1b\xbc\x19\xa9\x1d\xb2\xed\xe5\xfe\xe6\x95:Ֆy\xb4\xa8\a}\r\x8f\xc6\xd3\xcf\xfd\x87\xa4\x9a]\xe8q\x06\xed\x9e/\x06ݣ\xf1L\xfboA\x12\x85\xba\x10\x90H\xcc\x06\xaacl#\xbd\xfa\xed\x8f\xe3\xe8A\xb7\x9a\xf5\x9bQB:jA\x8c͚s\xdb\x1a\x8f\x88\xcc\xeb\xe0\xb8c\xd1F/9\"e\xee3L\xdbK\x93.Ci\xec\x00\xaf\x13\a\xcd\xf0\\#\xa4\xe3\xbfR#\x16\xf7\xc4VZ\x89\x12+\xa8\x02C\xc0\xad\xa0\xf0\xb8\x95%\xd4h\xb7sr6\x14\xa7N_\xddL$\x89\xcf\x05w{:\v\xe5'\x85\x9dj\xfa\xa0%\xd9\xfa\x897\xb3\xd7;٫]&\x15\x87oNp\x93ڋ\xaa\x921\xc3<\x9d\x89Og\xf0\x19\xe7\x8cxhJ\xb4\xa2!\xcb\xfe\a\x85S6\x94\u007fB#\xa4u\x05\xdc\xf2\xbcJM\xdfl\x9f>U\x1e}\xd6\xc4U: \xcc\xf7BQ\xa8\xa7\xc0\xa1\x01\x15\a\xfeI\x96f3\xcah\xd7\xf0\xbe3.F\xf1\x8dD\xc5S\x88\xab7<\\]\x0f<\x0f\xe4t(\xbdz\xd0W1I\x8c\xfc\xa0m\xf8\x8cV\a\xb8\xe2wW\xc5(\tN\xb2\x9dM\x8c3\x16q\xf2U[\xe9\xfe(\x9aF\xea\xed\xf1=_f\v3v0\xb0\x81ǣ\xd3\x06\x86\xd0/K\a%\xfc\xf8\xb88\xe6\x9b(\xf6m\x1e6jo\n\xb8Շ\x11WG\x1d\xe3D\xa9;\xec I\xa4w\xa9\x14E\xa5ijb\xa6}Fi\xb0\xe0D\x1d\xf9O\x0f\r&@O\x1c\x9f^\xe7+\xf9\xe7\x96l\xa2\x0f\xec)K\x95b\xab\xc0\xd3\xeb\xd8r\xb8\xf8tZ4ng<|\xb3\x97\"M\xb5L\xa8\x1ak\xf6\xd4\x0f~\xfb\x1f\xea\xe8\\\xb9\xc3*(<;\xb4y\xe9\x11\x9e\x1f\xdbd\xb6c[\xe8ph;\xb9\x8cV\x15=p8\x1eJ-L\xe2K\x97<\xd5D\xb7\f\xa39\x18\xc73Y\n'.\x94%:\xb7\t*w<<\xf6\xa7\xf6:\x92K\xd7J{\xe1\x18i*C,{ï\xb3\x13:/|pggtL\x05\xa5h|\xb0\xa9H-\x83\xb5\xacT|g6\xa31\xdd\x05S:\xb4\xd6\xd83\xd3\x1e&\x89\xee^\x9a\xa0\xb9V#\xbb\xe5\xbdP\xa3sb\x9b\xc7<\xefh\x11\xb6\xa8)\xc2N\x8c8R\x1d\x80\x1fX\x86\xf4\x91`اR$\x15\xa5\xa7\xf6+\x8a\xc6a\xb3u\xe2S9\x93\b\xc4\xf6ĝI\xedq\x8b\xc3L\xbc\x11R\x05\x8b\xcf(\xdc\xf0\xdb\xc1H\xfd\xef\xfa\x94\xa9\xb4\x8b\x9a\xc7\xceC\x04\x87U\x1a;{i\xf1\xe4l\x92\xfaP!G\x9d\xdf\xc9\xf8\xdb섛w\xc3'\xa2\xc8\xfe\xd77\x87\xd6\x03\x9f'eA\x1d\xeac\xc6Kx\xc4\xf7\xd1\x1a)\x8f\xd5k\xfb\xe9hD𠟬\xd9R\xe6\x1d\xbd\xba3u\xa3pl\x05Kx\x12\xd6K\xa1\xd4!\xb2?q\xea\xa58u\x1f\xb6\xee\xcf\x1b\xf3\xeb\x11\xf1р\x85̺\xe3\x97M\xf0\x1b9\x1e\xad\xa5/]k\x85\xdf\xfe:\x83\x92wa\xb5\xd4\xdbyu\xff\x9c\x88&\xbc7\xed\xff\xe5\xfc7\v8\xf4\xe0\x13\xb3\xbc\x9f\xeb\xc1\x13\xb1\xf4h\xa9\xfb\xc4\xfb\xb9\xfb\xc7h-\xd3']~Aݧ\xddc\xd5\xc3>\x89\x92V\xba\x00-\xca\x12\x1b\x9f&\x98\xfd\x8f\xbbWW\xfc'\u007f\xbd忥ѱ\xfar+\xf8\xcb_\x17\x90\x10x\xcdr\xd0\xe2\xbf\x02\x00\x00\xff\xffF\x9c\x18\xb7\x0e\x1f\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x1cMo,9\xf1\x9e_Q\n\x87\aRf\xc2\x03\x0ehno\xf3\xb2\"\xe2\xf1\xf6i\x13rA\x1c<\xdd5\x19\x93n\xbb\xb1ݓ\f\x88\xff\x8e\xaa\xec\xfe\x9c\xfepg\x13\xb4\xac\xe2S\xe2\xb1\xcb\xe5\xfav\xb9\xdcg\xab\xd5\xeaL\x14\xf2\x1e\x8d\x95Zm@\x14\x12\x9f\x1d*\xfaϮ\x1f\xffh\xd7R_\x1e>nщ\x8fg\x8fR\xa5\x1b\xb8*\xad\xd3\xf9\x8fhui\x12\xfc\x8c;\xa9\xa4\x93Z\x9d\xe5\xe8D*\x9c\u061c\x01\b\xa5\xb4\x13\xd4m\xe9_\x80D+gt\x96\xa1Y=\xa0Z?\x96[ܖ2K\xd1\xf0\n\xd5\xfa\x87߮\u007f\xb7\xfe\xc3\x19@b\x90\xa7\xdf\xc9\x1c\xad\x13y\xb1\x01Uf\xd9\x19\x80\x129n\xc0&{L\xcb\f\xed\xfa\x80\x19\x1a\xbd\x96\xfa\xcc\x16\x98\xd0j\x0fF\x97\xc5\x06\x9a\x1f\xfc\xa4\x80\x89\xdf\xc5m\x98\xcf]\x99\xb4\xeeϝ\xee/\xd2:\xfe\xa9\xc8J#\xb2\xd6z\xdck\xa5z(3a\x9a\xfe3\x80\u00a0Es\xc0\xbf\xaaG\xa5\x9f\xd4\xf7\x12\xb3\xd4n`'2K?\xdbD\x17\xb8\x81\xaf\x84I!\x12L\xcf\x00\x0e\"\x93)\xef\xd3\xe3\xa6\vT\x9f\xbe\xdd\xdc\xff\x9e\xf0ȅ\xef\x04H\xd1&F\x16<\xaeF\x11\xa4\x05\x01\xf7\xbcI0\x81\x1d\xe0\xf6\u0081A\xc6E9\x1aQ\x18\\UX\xa6\xa0M\x80\tP\xa0\x91:\x95\t|'\x92Dz\xf0S\xed^\x97Y\n[\x04S\xaau\x18[\x18]\xa0q\xb2\"!\xb5\x96\xd4\xd4}=L?\xd0V\xfc\x18HINЂ\xdb#\x04nc\xca\xd4\xcb\x05\xe8\x1d\xb8\xbd\xb4\r\xdeL\x92\x16X\xa0!B\x81\xde\xfe\x03\x13\xb7\x86[\xa2\xb3\xb1\x15\xb6\x89V\a4\xb4\xefD?(\xf9\xaf\x1a\xb2\x05\xa7y\xc9L8\f\x1c\xad\x9aT\x0e\x8d\x12\x191\xa1\xc4\v\x10*\x85\\\x1c\xc1 \xad\x01\xa5jA\xe3!v\r\u007f\xd1\x06A\xaa\x9d\xde\xc0\u07b9\xc2n./\x1f\xa4\xab\xf4$\xd1y^*鎗,\xedr[:m\xece\x8a\a\xcc.\xad|X\t\x93\xec\xa5\xc3ĕ\x06/E!W\x8c\xb8b5Y\xe7\xe9\xaf*.\xda\x0f-Lݑ\xc4\xc6:#\xd5C\xdd\xcdBh\xcb\xc4\x163\xb0\x98a\xe2\xb4\x19#\xcb<\xd3}\x8b\xb3\x85#\xf4\x1c\xb0\x8a\x8dݧ-7\x1b\x9c\x04\nd\xf2\x9f\xf62\xd9\xfb\xf8\x8ad\x8a!A\xaaѲ-\x10E\x91\x1d\xc77\v\xf3\x92\x10\x16\x9a6\aM\x9b5\f}\x98\xc3&\xa2iQ\xf6\xb4i3\x96\xb5K\xe7ZD\xde\xc9\\9\x8d\x17\t\xf4\xcd\xc9\xe4\xd7\x16h\"\xb0\xa4\xb3\xd5\xcd\x0e0/\xdc\xf1\x02\xa4\xabz\xe7aR\x18\xd4\xe0\xf0\x8b`\xd4K\xf4\xe1\xa6?\xf7\x95\xf5\xe1\x15\xb8T\xa3\xf0\u007f\xcd$v6\xb7\xc1\xd7,`З\xf6\xbc\v\x90\xbb\x9aA\xe9\x05\xecd\xe6\x90\xe3\x9ei\x14[\xaeo\x96S\xafE\x968\xafI-\x17.\xd9_\xd7G\xc8\xd9\xf1=\n\xf5\xa7\xfbX\xb9:It\x9d\xfc,d\xe0\f\x834\x98\xfb\xbc\xc5\x1d\xeb@\xd3Ñڧ\xaf\x9f1\x9d&\x14\xc4J\xe4\xc9v>\xf5Pn/\x1f\x8e\x01\xf1\x9b\t\x01U}\xc2\xf2\xf9\xa8\v\x10\xf0\x88G\x1f\x05\t\x05\xc4(AK\x8d\x1e$N\x89ĉ16\x11\x8fxd@!\xd7\x151?^4|{\xc4c\xdc\xc0\x1e)\t\xb3\x90\t\xf04\xa5\x0e&\b\xa7L\x96\x90\x118s\xc9\x1a\x02N\xc7l\x12\x96\x98\x9b\xaaU\x9cx\xd1vk6vҸ\x8fx\xfc`=\xc3H;\xf6\xb2\x88\xde0\x19`\xb0\xc8zTe2\xefE&\xd3z)\xaf\x0f7j*\xea\uedaf\xdaݨ\v\xb8~\x96\x96\xd0S)|\xd6h\xbfj\xc7=oFX\x8f\xfe\x8b\xc8꧲\xea)o\xe6\x89\x1e\xed\x04i\x94\xd0\xfbv\xe3O\x985\xab\xa4\x85\x1bEg\xa5@\x17Ns3\xccx\xb1d\x94\xf2\xd2r&Ti\xb5bG\xbb\x1eX+\x1af`\x8f6\x1d\xee\xb4\xd1k-\x1b\r\x95\x0et\x1e\xb5;\xf2=\x1e\x82O\xdfg\"\xc1\x14Ғ\x89*\xa2!Zg\x84\xc3\a\x99@\x8e\xe6\x01\xa1 _\x10ˍh\xfb\xec\xdbb\x99\x8b\r\r\xaa\x16\f}\x1a\x83Ҋ\xf4:j\\\xc5\xfe\x88\xc1\x83\xf9\xe8\xe9\xc11{c\a\xcdqL\x04\xb5E\x9ar\xc2Vd\xdf\x16y\x89E\xdc9\x8d\x1f#\xda\tx\x97\xe5\xdb\xc0\xcbUȳ\x81\xd894`\x9d6\xd5U\x1f\x19\xc9^ژ\xb8h\xe7\x0e\x1c\xc4\xd8:{\xe7\xc1\xd2a\xee\xbc\xd1oo\u007f\xcf\xfd\x1d \xfd=\a1\xe1\x00\x86!\x17F'h\xed\x9c\xd8DY\xf8\x99\xc4f\x9d\xd4\x14\xfe\xb0\xc4wk\xb3\xc2:\x97l\xadڒP\x98ȹ\xf88q\xfd\xdc\xca˒\xf9\xa0\xff\xe7Ev9v\xc0Z\x9f\xe7BE9\xb0\x13D\xaf\xfc\xdcJ\xc5\x02(\u007fD1\x0f%\x9b\x8b%\x91k\x10\xbe\x9fO0\x90KuË\xc0\xc77\t\x1fj\xa3\x8b/;>\\U\xb3\x1b\x16\xd4\x1d×\xa4c\xad\xd0|_a\xb0\xc3\xc9Ӭ\xfe\xa2\xb0Yi\xd7N}\x10\xe4B\xa7\x1f,줱\xaeA6\x1a\xa6\xb4|I\xfavg9um\xcc\v\x8fr?\xf8\xb9\xadd\xdc^?\xd5\x17\xfa\xe3\x17\xbfC\x8d\xaf\xc7\x10\xe4\x0e\xa4\x03T\x89.\x15'\x8d\xc8\x18\xf0\"\x9e\x1d\xf1\x82\f\xb1~\xafi\xa8\xca<\x96\x10+\x96D\xa9f\xf2K\xed\t\xdf\v\x99\xbd\x15\x1b\x9d\xccQ\x973\x8e\xb9i\xddz\x04?\xb7S\xa9\x91\x8bg\x99\x979\x88\x9c\x18\x11Mr\x8a6d\x8e]\x19\x80'!\x1d{$\x82\xcc\xee\xc9\xe9h\x90\x89\u038b\f\x1d\xc2\x16wڰ\xbe[\x99b\xed\xfa\x83\\\xe8\xf1{\xc7~\x13\xb0\x132+M\xb4\xd5]ȍe'\xa4`x^\xf7\xe0\x13\x8b\u008a\xc9\x17\x95\x8e\x8e\x0ei\xe7G\u007f\x8e\xc0&\xaa\x84`\x1a\xd9\xc9UB5\xccUVZ\x87&\xbe\xe6\xf6fx\xde@\xfdu⇬\xf8aΰl4\xe5\x16\x8d˪\x8bpI\xd9*E\xf1\xf5\xfa\xb3\xd1qdq\xedX\x9dv\\)\xd7\\\x01W\xb7\x06\xb9.\x9e\xaa\x8a\x90\x87\xadFX:p˿\xf8hW\x03u\xeb\xb082\xaf\xb0\xfd\x19\xd5'G\x95X\xcd\x14VM\x97p\xebj\x8d\x11*v\x12\xf0]\xf2\x99N\x19\xf1ϐz\xb3\xb5O\xe3\x15O\xe1F\x0e\x9d8|\\w\u007fq:\xd4?\xc1\x93t\xfb\xc1M\xf1\x1b\x14:.\xaa\x87vat%\x8b\xe1\x8dW\x9f\xaa\xa0\r(\x99\r\xd74\x10\xc1\xab\xf9\x1dr\xc3\x0f\x85?\x94\xbeH\u007f\xe7\x8eI\xb15R/\xae\x8c\xea\xd6=\x8d\x1a\xf8\xe5\x17xK\xca\xca\xe3k\x9f\xe6J\x95\x96T<\xb5\xab\x99&@\xc6\xd69ŝxgk\x9a^P\xc9\x14]W\xf9*וq\xb5JoQ\xa1\xb4\xa0.\xa9[o4\x03wY5R$\x99b*\x8f\x16\xd7\x1b\x85ڞ\x99\xfdDT\x19\x8dV\x0f̀\x1e\xa8c\x9a\xaf\x19\x9a#\u007f\a\x95W\xa9\x14zA}\xd0\xeb\xd6\x11\xbfV\xd4=U\xed\x13Q\xe3\x13\x11\x97\xcfa\x1aQų\xacv'\x82\x86/\xacө\xabpF\xd7^Z\x9dӭ\xbd\x19\x05\x1bS\x933Rq3\ns\xb2\x12'\xb6\xcef\x14\xfa\xac\xfb\x9e\x91\x9cɟ\xad\x12\x85\xdd\xeb\xeaI\xebl\xe4w\xdb\x1d?p\xf4\xaa\x1e\xb4&\x99.\xd3\x1a\xfe\xf0\xf6\xf8\xe5\xff\x11\xbeݳs\xe1\x87~I\xf3\x042\xb8\x8f*\x94뿐\x1c~\x9d\f?\xfd(f\x9d6\xe2\x01\xbf\xe8\xa4\xf5\xf9\x86)\x9at\xc7w^\xe7\a\xe6WɖP\x954\x1c\xb6\x86\x1d\xf5\xc159\xd6\xf0B\xb89\xaf\x12\xa6\xc3r1\xa9\xb9\xcee\xb3\x9b\xba\xbb\xfb\xe27\xe2d\x8e\xebϥ?\x06\xaf\na,\x12m\xab\r\xfaI\xdb1\x03\xb1\xd7O\x90\xe9\xb0\xfb\xef\xfa\xf8\x1b\xe4l.\x9f\xb7\x17\xef¿\x8e\xae\x04\xb2\"\u05fc\b\xdf\x0f\xcfkE\xde-\xa6\xf1\xd1oLv\xc7 \tku\"\x05\xbf\t\x95.<\xe3x\x8b\a\xbd\xe3\x0eaD\xe9\x87\xfc\xd8j\xe8\x01\xfd\xaa~\xcd\u007f6\x03\xd4:\xe1J;\xff9\x04\x1e\x06\x89(\\iB\x924)\r?\xed%\x10\xe8_\xc0.\xff B&\xac\xf3\x825\xf9݁/\xf5\xb0&J\xb7\xceg[+̓'a\xf9\x8b\x03>\xd7*m\xf7S2\xed6\xf2́\x9d6\xb9p\x1bH\x85\xc3\x15\xc1\xee\xfd>i\x99F\x99\xcdO\x9f'w\xf7\x8dF\xd47:\x81\xac<\xadz0=\xb2\x93\xa1\x94\xfd\n\xbe\xe2\xd3Iߵ\"\xc4\xfb\xb94\x9f\x95\xc7\xf4\xbe\xfe\xdaM즚\xef\xe3\xf0%ȉ\x02tu\xb67\xb8\x97\xa9\xa1\x13\u007f\x03\xcf_xX\xf8\xb5<5\xb4|\xfcJh'\xbf\xe9\xfd6\xa2\x85\x13\x1a8\xac}\x03J\xd2\xebj\xbe\x88\xf4\xb1\xf9\x8f\x97^\x85/ \x1d\xfc\xdd!\u007fr(m\xc9J\xf0L\xa1\xa7\xd1<\x91$X\xb8\x90\tl\u007f\n\xe9\xfc\x9c\xff\xa9\xbet\xc4\xff&Z\xf9\x18\xd0n\xe0o\u007f?\x83\xe0E\xee+<\xa8\xf3\xbf\x01\x00\x00\xff\xff|l\xf6\x1b=J\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VM\x93\xe34\x10\xbd\xfbWt-\x87\xbd`\x87\x01\x0e\x94o\xd4\x00US\xc0\xd4\xd4d\x99\v\xc5A\x91\xdaI3\xb2dԭ\f\xe1\xd7S\x92\xecI\xe28;\xbb\x87\xf5\xcd\xed\xfexz\xfd\xba\xad\xaa\xae\xebJ\r\xf4\x84\x81ɻ\x16\xd4@\xf8\xaf\xa0Ko\xdc<\xff\xc0\r\xf9\xd5\xfef\x83\xa2n\xaagr\xa6\x85\xdb\xc8\xe2\xfbGd\x1f\x83Ɵ\xb0#GB\xdeU=\x8a2JT[\x01(缨d\xe6\xf4\n\xa0\xbd\x93\xe0\xad\xc5Po\xd15\xcfq\x83\x9bH\xd6`\xc8\x15\xa6\xfa\xfbo\x9ao\x9b\xef+\x00\x1d0\x87\u007f\xa0\x1eYT?\xb4\u08b5\x15\x80S=\xb6\xc0\x18R\x90(\x89\x1c\xf0\x9f\x88,\xdc\xec\xd1b\xf0\r\xf9\x8a\aԩ\xf06\xf88\xb4p\xfcP\xe2GP\xe5@\xeb\x9cj\x9dS=\x96T\xf9\xab%\x96_\xafy\xfcF\xa3\xd7`cPv\x19Pv`r\xdbhUXt\xa9\x00\x86\x80\xf9\xc3\x1f\xee\xd9\xf9\x17\xf7\v\xa15\xdcB\xa7,c\x05\xc0\xda\x0f\xd8\xc2}B=(\x8d\xa6\x02\xd8+K&\xd3S\xce\xe1\at?>\xdc=}\xb7\xd6;\xecU1\x02\x18d\x1dh\xc8~Kg\x00bP0\"\x01\xf1\xa0\xb4Ff\xd01\x04t\x02\x05)\x90\xeb|\xe8s\xb911\x80\xda\xf8( ;\x84\xa7L\xedx\xb6ft\x18\x82\x1f0\bMD琣\xcc^m3\x8c\xef\xd3!\x8a\x0f\x98$,\xe4\\c\x94\a\x1a\xe0|@\xf0\x1dȎ\x18\x02f\xf6\x9c\x9c\xa3˜t\xa0\x1c\xf8\xcdߨ\xa5\x19O\xcf\xc0;\x1f\xadIj\xdcc\x10\b\xa8\xfd\xd6\xd1\u007f\xaf\x999ѐJZ%\x93\x0e\xa6\x87\x9c`p\xca&\xfa#~\r\xca\x19\xe8\xd5\x01\x02\xa6\x1a\x10\xddI\xb6\xec\xc2\r\xfc\xee\x03f\x02[؉\fܮV[\x92i\xb0\xb4\xef\xfb\xe8H\x0e\xab<\x1e\xb4\x89\xe2\x03\xaf\f\xeeѮ\x98\xb6\xb5\nzG\x82Zb\xc0\x95\x1a\xa8\xce\xc0]\x9e\xab\xa67_\x85q\n\xf9\xfd\tR9$\xc1\xb0\x04r\xdbWs\x96\xfaUޓ̋\x1aJX\xc1\u007f\xa47\x99\x12+\x8f?\xaf?\xc0T4\xb7\xe0\x9c\xf3\xcc\xf61\x8c\x8f\xc4'\xa2\xc8u\x18J\xe3\xba\xe0\xfb\x9c\x11\x9d\x19<\xb9\xa2%m\t\xdd9\xe9\x1c7=\tO*M\xfdi\xe06\xaf\x17\xd8 \xc4\xc1(A\xd3\xc0\x9d\x83[գ\xbdU\x8c_\x9c\xf6\xc40\u05c9ҷ\x89?݊玅\xadW\xf3\xb4\xb2\x16;\xb40\xbd\xeb\x01u\xeaY\".\xc5RG:\x8f\x01t>\x80Z\ni\xdeĐ\xbd?\vŸ#\n\x8e\xd9\xe6H3\xf8\x16\x8e\xa5U\x91\xed;\xc5xn\x9a\xa1yH\x1e\xf3ʖ:\xd4\am\xb1$(\x9b\x02\xdf\x02\x91\x1et\xb1\x9f\u05eb\xe1\x1e_.l\x0f\xc1\xa7=\x99W\xf1\xe9\xb3\xd8\u007f(\xff\x88-9\xfe\xf8i\x8aO\xfe뜮ܓU;\xa6\x81\x10\x9dK\x13\xe9]2ϒ\xc2\xf9F\x9e}%\xc1\xfe\x02\xc7\"\x92;\xd7\xf9\xfc\xd7V\xa9\xa4\x922'86u\xacQ\x10]\xa4\xbb\xd6\xd3\xf2\xccW\xd1'\x10X\x9e\xfc\xe7\xff\xfc\xc0\xb4:(\xe0B\xcd:cY0\xa7J\x17\xe6ʼn\x19\x91Ek\xd5\xc6b\v\x12\xe2<\xb2ĩ\x10\xd4\xe1\\\x15\x93\x8c\x8ew\x9c\x8f\n\xe4\xc2=i\xffe\x87\xee\x9a\xc2\xe1E\xf1RoJ\x1a\xd8\x1c\xae\x05\u07be^\xd6\xe6CRd\xd9Bں\xb5\xd0\x05K\x9f@\xc4B\x97\x8aT\x17n\a\x17$\xacO=\xa7\xd9?\x13\xfctY\x98#\xbfR|\xa1\xa93\xd3\xf1nzs|\xcb®ǻh\xfe0\x9e\u009c\x9c\x9c\xc5\a\xb5\x9d\xb88\xee\xd6t\xcd\x1a\x04\xcd\xfd\xfc&\xfa\xee\xddٕ2\xbfj\xef\f\x95\x8b4\xfc\xf9WU\xb2\xa2y\x9ap$\xe3\xff\x01\x00\x00\xff\xff\x8e\xadi\xa0\xc7\v\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4V\xc1\x8e\xdc6\f\xbd\xfb+\x88\xf4\x90K\xed\xe9\xb6=\x14\xbe\x05\xdb\x16\b\x9a\x06\x8bl2\x97\xa2\a\x8dDϰ+K\xaaH9\xdd~}!Y\xde\x19\xcf\xce$-\x8a\xf8&\x9a\"\x1f\x1f\x1f\t5m\xdb6*\xd0\x16#\x93w=\xa8@\xf8\x97\xa0\xcb'\xee\x1e~\xe0\x8e\xfcf\xba١\xa8\x9b恜\xe9\xe16\xb1\xf8\xf1\x1d\xb2OQ\xe3\x8f8\x90#!\xef\x9a\x11E\x19%\xaao\x00\x94s^T6s>\x02h\xef$zk1\xb6{t\xddC\xda\xe1.\x915\x18K\x86%\xff\xf4M\xf7m\xf7}\x03\xa0#\x96\xeb\xefiD\x165\x86\x1e\\\xb2\xb6\x01pj\xc4\x1e&oӈ\xecT\xe0\x83\x17\xeb\xf5\x9c\xac\x9b\xd0b\xf4\x1d\xf9\x86\x03\xea\x9c{\x1f}\n=\x1c\u007f\xcc!*\xae\xb9\xa6m\x89v_\xa3\xbd\xa9ъ\x83%\x96_>\xe1\xf4\x86X\x8ac\xb0)*{\x15Y\xf1ar\xfbdU\xbc\xe6\xd5\x00\x84\x88\x8cq\xc2\x0f\xee\xc1\xf9\x8f\xeegBk\xb8\x87AY\xc6\x06\x80\xb5\x0f\xd8\xc3\xdb\\AP\x1aM\x030)K\xa6ܟk\xf2\x01ݫ\xbb\xd7\xdb\xef\xee\xf5\x01G5\x1b\x01\f\xb2\x8e\x14\x8aߕb\x80\x18\x14,h\xe0\xe3\x01#¶0\a,>\"W\xe05$\xc0R\x01w\xd5\x14\xa2\x0f\x18\x85\x16\x82\xf3w\xa2\xb0'\xdb\x19\x9e\x97\x19\xf0\xec\x03&k\n\x19\xe4\x80P\x95\x81\x06\xb8\x14\x03~\x009\x10C\xc4\u0094\x93c\xab\x96\xcf\x0f\xa0\x1c\xf8\xdd\x1f\xa8\xa5\x83\xfb\xccfd\xe0\x83O\xd6d!N\x18\x05\"j\xbfw\xf4\xf7Sd\x06\xf1%\xa5U\x82\xb5\xa7\xcbGN0:e3\xd5\t\xbf\x06\xe5\f\x8c\xea\x11\"\xe6\x1c\x90\xdcI\xb4\xe2\xc2\x1d\xfc\xea#\x02\xb9\xc1\xf7p\x10\t\xdco6{\x92e\xa6\xb4\x1f\xc7\xe4H\x1e7e2h\x97\xc4G\xde\x18\x9c\xd0n\x98\xf6\xad\x8a\xfa@\x82ZRč\n\xd4\x16\xe0nV\xf9h\xbe\x8au\x00\xf9\xe5\tRy\xcc\xe2`\x89\xe4\xf6O\xe6\"\xf1\xab\xbcgm\xcfm\x9f\xaf\xcd\xf8\x8f\xf4fSf\xe5\xddO\xf7\xefaIZZ\xb0漰}\xbc\xc6G\xe23Q\xe4\x06\x8cs\xe3\x86\xe8\xc7\x12\x11\x9d\t\x9e\x9c\x94\x83\xb6\x84nM:\xa7\xddH\x92;\xfdgB\x96ܟ\x0en\xcbf\x81\x1dB\nF\t\x9a\x0e^;\xb8U#\xda[\xc5\xf8\xc5i\xcf\fs\x9b)\xfd<\xf1\xa7\vq\xed8\xb3u\x1c\xa2\xba\xaa.v\xe8\xf2\xa4\xde\aԫA\xc91h\xa0:\xb9\x83\x8f\xa0Vl\xd6)\xbe\x1c\xad;q\xbd4\xc00o\xf0\x81\xf6k\x1b\x802\xa6l\u007fe\xef\xaeܻJυZoK\x8e,\xc7\\@\x88~\"\x83\xb1]j\xab\x18R\xacE\x96\xdd\xd85\x97r\x9d1\\\v+\xe1\xce\xe1\xad\x10\xdcU\xa7\x8c!Ӻ\\\x9a\xf7\x0e\xd6\xf5W\x96\xa1\xda\xe3\xe5\xdc\xcf\xea\xcc\n\xa6\x88\xab)l\x9fB\u007fV\x1d\xa2$\xf1\u007f\xd5G\xb9T=wU#:ňNjD\xf0\xc3\n\xbe\xfa\xff\x1a\t\a\xc5\xf8I~/Ǿ\xcb\xf7\x16\xca-\r\xa8\x1f-\xce\xd1\xca6\u007f&\xa8\u007f\x8d4\u007f\xe8\xd2x\x0e\xaa\x85W\x93\"\xabv\x16\x9f\xfd\xf9\xe0ԕ\u007fW\xfa{\xa1mg\xa6\xe3\x03\xe7\xe6x*\xe4\xb5˃\xe6f~!\xe4\xa5iz\x90\x98\xe6\xe4Ui\xd5rԂ\xd2\x1a\x83\xa0y{\xfe\x96y\xf1b\xf5\x1c)G\xed\xdd<\xa6\xdc\xc3o\xbf7sT4\xdb\x05G6\xfe\x13\x00\x00\xff\xff\x9f\xfe\xa5\x85\f\n\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x85\xd57\xebf\xcc\xfa\xb9f\xccx\xbc./k\xd1\xff~X\x99\x1c\xf7ي\xb9\xe9-\xfcH\xc5$&J\n\xad7;\xc0\xa2\xf4\xef\xd7 }zJ\x91\x84\xe0\xc4p\x94=\xf5\xbb\u007fs\x828W\xa77\xa7\xeb>P\xa7\u007f\xa1\x14\xeaW\xfff\x84\xc0\xce\xfe1\xfa\xfa\x85\x02\xf8\xa9\xbd\xe6\x1a\xe4\xae\x16@~\r;\xa9<\xda\x13IL\x91k\xa6%\xf1KY0\xbfS\xd1(\x84\xcf\x0e\xf7o\x14\x1d\xb9\xa6\x9e\xb3\x88\x1b\xa7KCL\x99\xa2\xea\xeef:\t\x158\x19\x94\x16\x8b\x90b>1\a\x9b'\x1c\xf9|\xfe\xfa\x05\xf3q\xa6\xc0\x12\r\xeb\x91\xf0\xf9\x04\xcd\xf6kc\x88\xbc\x8c\x80\x18\xa4\xd4\xd9E(\x17\\\x83\x80\x17|\x0fх\xd0@\x02\x11\xf4\x1a\x9a<\v\xd1\"\xd7,X\xa1^\xf0\x9d\x81\xc42\xc4\xcc\xdae\xa2\x0f\xe3\x05\xdf\xe7'\x9d\xb0\x8d\xb0\x91.\x96U\x88\u007f\xf4\x80\x19\xc09\xecR\x96\x01\x17\x91\x92\x87\x99#\n\x96\xba\x884\x12\xb7\xcf&\xaf\x16SS\xf7\b\x82\xbcrA(\xa4\xed\aY.\"\x90\\'8d\x9bHE\xa4g\xa1d^\xbf&\xe8\xf7F_\xc3W\xe37z,X\xed\x8e\xfb7\xe9b\xed\xee\x8bA\xf7\xd5x~\xf2\xe1L\f(\x9f\xcd°\x8cMH\a7L\xf4\xb7kQ\xb3J\x1c\xc6&dX\xb5H\xa4\x83\x8d\xa6\x1c\"\xf0*T\x13\xc3˦\xbc}w\x14\x95\xe3b\x936zś\xddz\xe8=\x91\xc5\v\x15\xb9-\x85>Z\xf5+\xc3\xeb\x16A|\xa2}!\xac\x0e\x95Q%2\xcc!\xaf\x98\x89\\\xd9\x13\x1e\xf72\x83\x02\xed~|#h\x8f\x92|\xf6\x92\xd7/\xf2\xa5a\x9c\xa5OK\xb6\xe64\xa23\xce\xe7\xd0X\x91m\xce\xceI\xa2\x9d\x998X\xca\x1b\x9f8G\ao\x92\x1c7\xccpS\xe49\x1f\xb4\b\xf5\xb0\xd8{/\xe6|\u007f\xdf\x0e(\x85=\xae\x10\\\xa0\xfb_ڪXi\xff\x0fJ!\xed\xac\x85~\xe6\x13\x13\x85\x9d\x95\xb1*\xd4~\t\xc1\x97\x0eH\x9aG\xa1N\v\xc2\x03d\x19\xf2\x1a\xa8\xc26lv\xbdH\xe3\x1a^\x0fƅ]q'Q\xe5 \xa7\"-\x1a\x97/\xf8~yݳ\xf1ˍ\xbe\f\xdbs\xcfb\xd3^>\x03\xd8h\xf5\x0e\x97\xbc\xf2\xf2\xdbC\x97EZ\xb7`\x12\x1f\x9f-\vf)\x9bK\xbb8-\xab\xcf`(\x14\x1d\xc7v\x81Ε\xc6\xf9\x85H<\x18\xe7C\x85\xae\x13<\x0eԆ\xa6s\x9aX\x13\x02\xb1\v\xe7^Ʀ\x13\x0erd'\xa5J\x92\x92\xc3\xc1\x02g\x0fb\x1eA\n\xa5ಱ\xd1\xe0\x1f/ñ\a\xbfBd\x1c\x16L@$U(\xad\xc9й)u\x98\xf5\xbc3\x05\xb7\xba\xd8&BR\x11\x0e\x11\xa6\x8a{i,\r\x1b\x895g\x85\xd9\xf7o\xad\x1a \x996\xfd?\xadf\xe7a\x04|\x06]\x14B\xcfn\x16=\xe4\xeeºd\n\x11L\b\xd9\xed\xbeb3^\x1a\xe9E\xa5\xf9u7\xd8B\xea\r\x03\x87O\x1f\xba\x1dCr\x89x~H}\x97V6l\xae\x1f\x04\xdb,M\xbf\xe4>4^\x0fh\xb1#\xa9~e\x98\xc39m|+=_\xc6\xe8\x80Ǖ\x83\x9d\xb4η\x91t|\xb0\xf5\xf19\x8a\xbe\xb7\xf6\x1bR\x94\xbf\x86u\xad\x02\xd0\xc1\xbc\xa6\x93\u0091ù\xa1\xc1\xc7 \br\a\xd2\x03\xea\xccT\x9a\x8b\x18d\xa4\xfc\x82\xc0\xd2\xe0Lg7\xd90\x96\x186\r\xd4U\xb1\x84\xf0\x15k\x8f\xd4\x13\xb5\x8e\xf6\xe4\x1f\x85\x9c\xaaT\xa5q\x96\x98\xbc,\xd0T\x13\x9bZ3:bz\n\xeb:G\xbc\x85x\x93EU\x80(\x88ً8J;\xb3,\xb0+_x\x15ҳw'\xa8\xec\xea\xbd!\xa3(\x15\xfae\xd9\xc0\x16wƲ-:\x99c\xbdeF\x99\x1b\r\x02vB\xaa\xca.\xf2hgptyd\x1f\x8d\xfcc\x82\xf6%\xaf]1\xf9\xb3e\xcaE\xa1ڔW-\xed\xd2@\xed\xc1\xe2G\x86H\xa5\x95\xa43\xe6c\xa3\xa4\xa8JB\xbf\u007f\x0f\x93Z\xbc\xf9\x1e&\xf5\xc6\xf70\xa93\xbe\x87I\xdfä\xc9\xf1=L\xfa\x1e&\xfd^äiLV\\\xb7\x1a\xfci\xe6\xed\xb3G\xa8㈍B\x8e\xa7\xfaw\xa1\xf7zY_\xdefx\xcd@\xdfel\xe9^q\xc7y_\xce\xcd\xd1\u007f\xe3\xe6\xebF=R\xfe\xa4\xbc\xa1\xb1t\xb2uoA#\xdePo\xe6|{\xc9\\SI\xb7'\xb1n\xecHM\x89&\xbd\xa2G}\xead\xa70\xb3\xdd\xc1 \x94j\xf7\xa6\b\xdb0\xe5W\xeaW\x9cm\xfd\x98i\xf8\x98n\xdb\x1c\xe7\xd0Ih\xdfe\x91\xed\xb4\x18\xfe\xca\x1c\x9a\xec\xcb\x18\xefƈ'\x19\xe8\xc5\xf1Ӻ\xfb\x8b7\xb17\x03^\xa5?\xf4\b\xe0\xa6IJY\xf4\xbe\xdd\x1c\x99t*^\x1f8\xe5\x1c\x18\vZ\xaa\xeb\xc1\xbe\x98\xfafE\x9b\x9d\xf0\xd72$Eg\xd9\xdbTh\xbf\xa4w\xe3\x9b;6\xba=\x19\x83N\xf6\xbcÎ\xa5-\xa4\xcb{2\xba=\x17#\x9b̂N\x8c\xb3;-\xe6\xf3\xadɮ\x8ao\xe8\xa5H}\x12S\x1b\xeeD\ał\x98c\xbe[\xe2\x9bz$\xf80o\x02\xeb\xb3:#Z]\x0f\x13 \x97\xf5C,`\xc9\\\xef\xc3\xd9\x1d\x0f\xa7]\x06\x13D\xcc\xf59\x8c\xf70L\x00\x1d\xecnXҹ0\x01\xb3\xeei\xf8\xc0~\x85\x99.\x85\x8f\xe9$\xfc\xa5\xb1\xe7X\xcf\xc1L\xa7\xc1Ld:\x85\xd5L/\xc1\xf2\x0e\x82\x19\xfe|c\xb7@\xdd\x0f0\xf8\xces{\x04\xba]\x00\x83 \x17v\x06\x8c\x9c\xfd\x0f\x82\\\xd0\x0f0s\xe2?\bvrc\x9cЈџ\x9c\x16\xa5;\x98tak2Nz\xec\xce\x1dH.\xd2u\xadL\x99*\xafa\xf7I\xe1+\x98\xef\xf0\xf0\xccN\x9e\xaf\xc2d\xcdE\xa0\xe8\xcaS\xf0szO臏L6\x9c7V\xec\xf1'\x93\xb5nڎ\xd1ߝ۹\x16\x19\x85\x9aR\xfa\xd4\a!\xd2\xfd\xbc\xeeҡ\xd81V\xd9\xe2=\xb7&\xfb\"\f\xfb\xf2\x1e\xb5<\xef\xd5$\x11OO?\x05Ľ,p\xfd\xa5\n\x89ܪ\x14\xd6!\xf1/\x11\x14\x16m\xe9σy\xed!\xacL\xa4\xf4\x87S|-r\r\x8f\xb3\xc5\xc5X\x87\xbb|I\xc1\x12\x9b\xa6\xd5\xf1yxM+\x16m\t%$6f7\xb6\xaaG`\xeb\"3E\xfb\xa1\xa3壮\xa8\r;\xe7\xe1˟^\xf8\xca\xcd]\xff\xe4I\xe92w\xac\xf8V\x96o\x98\x05\x00A\x19Ͼ\x01\x1a\xcb[\x9d\x1b\xf6S2\xb9\xeb\xcf\xe7\xab\xd46\x0fHqY\xad\xbe\xcc\xf9*\\]@\x1b\xf0h\r\xb0\xb0\x8e\x83\x01\x82\x859\xe0\x115\x18\xcd\xf52\xbe\xc1\x15\xee\xf9\x9f\xae\xe9\xe7\xaf-\x18\xb1\x1cW\x95ʈ\x96p\x1dwT\x92`!\xfenl\xff\xb0\xa6\x90\xda\xd8\x10\xbep\b\x9d\x96.\xf6\xe7|\xadu\x12\xdf\a\x9aQ\x9fN\xb5|\x15&e\x1a\xde\xe7\x87N1V\xf0\x15O\xb7\xa8p0\x81\xf9s\xfd\x15\x8dބ\x8d~\xb0fO\x11_炙\xe4\x95z\xbf<\b\xeb\xa5P\xea=\x80\x1fyk\xef\xf1\x17$\xbf0\xb2\x11\f10b6\xcd\xc38\xa9\t)\xa5\x0e\xb2\xe6Ä\xad\xa9|\xc7\xe0\x1a\x83\xedI<\xbdoMy\"\xa6\xba\x81\xecB\xa4\x1d\x10\x9d_\xe1ng\xac\x0f\xf1\xebj\x05r\x177\x96\x1eT\xf2\xce\\\xf9\n_c\x00\xe9\x9b,\xae\xd1M\x8e\x05-\nǺ\xe9\xf9\x8b\x10\\v\x16YF\xf1\t\xde8/T\xcf\a|s\xb9\x8b\xf7k\xd2.\xcc\xff\xd6\xdb\xcezL\u07b4g\xd7}\xaeU\xb1EK\x9a\xca\xc0\x02\xbf\xf8h/x=5\x9c\xd2m\x115\xbcZ\xe9=\xf9\x9bvA\x10\x8f\u007f5^\xa8\xcdXB\xdb\r\x01멉\x1c^\xdc'ʐ\x18\xb6L\xfa 9\xa1\xb9C\xba\xb4\x92\x04\x97\x1d\x84ޓ\x02YS\xed\x0fI\x03Gv\x8a\xe1\"^E\bA\xa9\xaa=\xa9t,\xac\xf9\xca\xeaVf\x1aKmy\vU\x91\xbd@U\x0e\x9f<\x87o\xc5\xc4O\xfd\xdcĻ\xc0\xab\x9d5\xc5*\xf2\x9fkfױbg\xa5\xa1\x90\x89s\x9ax\x1do\x04,\x8b\xbd,Q\x83p\x11\x97پ\x93)A\x8e'j^X\xbf,\b{\xecL\x9d\x89\xbf\x18.\xe6kx\xc4R\x90\xb1\xf5\x8dؚ\x02\xeeN?\xb4tM9z\xfa\xaaP\xf8(L\x10=\xe5\xb5\xfcu\x0fc1\xdc\xc1\xebA\xec\x04T\x9d\x00\xaa\x8b\xfa?'vj\xbe\xb3t?\x1fE=\x9fL>9H!\vn\xe0\xa5\xd8\xe7\x0fr\xd7\xcf/\xcaRɌ\xb0\xfd\xe3\xaft@r\\\x10U\\M\x06\x14\x1c=Ա\x01|\xc1\xd2bFV\xd9G\xfeA!\xed\xf7\x0e\xb1\x1b\xa9\\-\x0e\xec\xba)\xa2\xfb\xec=\x16\xe5\xc0\xbb&r\xc4fј\xe3\x13iB\x8f\x80\xf45\xab\x04*v\x02\x8c&\x85\x8b\t\xa9C\x8ds\b\xa9\x17\x8d\x11⪌\x1cЮ\x1aڊ\xea\x9c\xeb\x03\xa9z\x15\x96\x12\xedi\xeb\xf9\x8f8i \v\x89\xeb?6\x0fi\xa5!\t\xbf\u007fR\"2\xe0\xc7O\x1e5\x1f\xb3\xfb\xd4\xfc\xc7\xec[ŏ\xd7\x1dC?\x19{˼e\xda\x11\x95\xf8\xa4)\x10\x88,C\xd2ݯ\xa7߱\xbb\xbc\xe4\u007fҧ\xea\xf8\xdf\xcc谗\xba[\xf8\xcf\xff\xba\x80XgzNx\xd0\xc3\xff\x0f\x00\x00\xff\xff\x1c\xe1(\xb0\xf8O\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xbcXMsۼ\x11\xbe\xebW\xec\xb8\a_*\xca\xe9{\xe9\xf0\xa6\xe8\xed;\x93։5\x96\xe3\x1e\xda\xce\x04\x02\x97\x12j\x10`\xf1!G\xed\xf4\xbfw\x16\x00?DR\x92\x93i\x82\x93\b\xac\x16\xcf>\xfb\x81\x05f\xf3\xf9|\xc6j\xf1\x8c\xc6\n\xadr`\xb5\xc0\xaf\x0e\x15}\xd9\xec\xe5\x8f6\x13zqx\xb7E\xc7\xde\xcd^\x84*rXy\xebt\xf5\x88V{\xc3\xf1W,\x85\x12Nh5\xabб\x829\x96\xcf\x00\x98R\xda1\x9a\xb6\xf4\t\xc0\xb5rFK\x89f\xbeC\x95\xbd\xf8-n\xbd\x90\x05\x9a\xb0C\xb3\xff\xe1.\xfb%\xbb\x9b\x01p\x83\xe1\xefO\xa2B\xebXU砼\x943\x00\xc5*\xcca\xcb\xf8\x8b\xaf\xadӆ\xedPj\x1e\xf7\xca\x0e(\xd1\xe8L虭\x91\a$E\x11\xe01\xb96B94+-}\x15a\xcd\xe1ϛ\x87Ok\xe6\xf69d\xd61\xe7mV\xef\x99\xc5\x00\xb9@ˍ\xa8]\x00\xf6>\xec\a\x9b\xb8!ܧ\x1d!\xfe\v\xac\xe7{`\x16\x96\a&$\xdbJ\\|V\xac\xf9\x1d\xb4E\xd8\xebV\xbb;֘\x83uF\xa8\xdd\x19(\x92Y\xf7̤(Z&Ƹ\xeeG2 ,\xb8=\x02\xfd\x1b\x1cM\xd0W\xe4\v\x880\x84\x86/xe6\xa8\x048D\x1dX\xf4\xc0\x92nx>Y\x88\xa8\xe9{\x88\xb9\xf1~6\xf2\\O\xe3r\x87c5;\xa3}\x9dC\xe7\xba(\x9d\x02'\x06]\xa4?\xb1ߐ\x1f֥\xb0\xee/\xe7e\xee\x85uA\xae\x96\xde0y.p\x82\x88\x15j\xe7%3g\x84f\x00\xb5A\x8b怟Ջү\xea7\x81\xb2\xb09\x94L\x06\xafZ\xaeɮO\x84\xbef)\xac/\xba\xec\xa1/\xd95_\x11E\nW\x8b\x8e\xaa\x9e\x05\x85\x14\xce\xcc\f\xe3\nȣ\\+E^r\x1aXkϭ\x1d:o\xf0\xd7s\tFc\xeb\xf9\v\xba\xf1\xfc0\xea\x82Xӝ\xc5?\x11\no1p{\x19\xc0\x15\x9f\x01p\xb6Bs\x1d\xc5jIbm\xc43X-a\xebU!\xb1\xc1\xf2\xbaGEǷ(\x8ft\x86<\xddo&tB\xc3c(\x0e\xe9\x00n\u061c\xc2^jS1\x97\xc3\xf68Jꫦ\xd5\x06K\xf1\xf5\xaai\xeb \xd6\x10\\3\xb7\a\xa1\xac(\x10\xd8\x04\xdd\x13U\xb6\x19m\x02?\xd41\x91\xbe\xd1\x19TA\xa8\xa8\x8f\v^\x84\xf1\xd6\xf4h\xf8\xbc\x98\x19\xeb$\xd4\xda\xdd|\x87\x86kX\xb0\xa7Ss\u008a\xae/\xfd-\x16D~\xbc\b\xe3y,\u007f\xa1\xac6\xb7\x8dq\x82RK\xa1\x8dA[kUP\xfc\xbd\xad\xa8vp\xff\x1f\xa5uʁ\xf3\xd3ju\xb2\xd2p~\xb5_\x88\x9d\xff\xb7u\f\xf1\x82\xd9?\x97\xf56\\BzM\xc3\x0f\xee\x0fnz\r\x02\xb5\x9c\n\xbc\xf2\x16\x8bX\xef3\xf8\xbb\x82_\xa9\x81\xe4\xd4\xd8儑z9;\xf2\xaeү\xf4瞶\xa0\x00\xb4\nv\x85\xe6\x88Z\xf4\xd8o\x86\xa5W!%u\x8d\x06+}H\x97\xd0\xfe\xa0\x16Ϡ<\xd2\xe5[\x97p\xf8Cv\x97\xdd\xfc\xe4\xe6\x83n\xda\xd4M`\xf1\x88\a1\xbc.\x8dټ\x1f\xc97\xc9ۆ6}|i\xfaЅIb_F\xe6\x97BR\xd7<\x91\xe9\xddUp\xfc\x18\xf0~s\u007fkÓ\fu\xfc#\xa5\xaf\xe4>\x1b\x00\xd2\rJ\xa7F\xdf[\x87f\xc2٭\xaf\x84\x05\xa5Aj\xb5;I\x858R\xdb\x0f\xda@\f\x1dm\xa0@\xea\xd8)\xcb\xf9\x9e\xa9\x1dvW\xb9\x84\xbd\x87\x92\x02c\x8c\xf44:\xbah\x10j:\x14\xde\xe0\xc3'Q]Ά\xfb\x13\xd1\xe9\xe7\x96\x16u\xf2\xa5\x1c\xe7\xe4\x1b\xb8\x1eH7g(\x119w\xcdsP7\xbe\xaf\x8b\x1c\xbf2]\xb5\xfe\xbb\x1f\x9c\xc6\xe63\xdb==\xfd|\xdb\xc3c\xdf\xe5\xe3\x95$\x1a\v\xb97\x06\x95\xeb\xeanH\xa6\xa9\xda\xfb\xb6\xfb\xcf\xf2䅰\xbf2|=\xbcj\xcb\xc4y3\x98\xea\xdeX\xdfu_\xe9\x194\xbe΅\x05\x80x\xb8\xf4\x88L\x15%\xcdt\x87\x18\x9d\x1e\xb5\xc3\xe2\xd3\xf0\xb5\xee\xe6\xe6\xe4\xc9-|r:\xcf\xe3\x830\xfc\xed\x1f\xb3\xa8\x15\x8b\xe7\x06\aM\xfe/\x00\x00\xff\xff\xf4\xc0lv\x8f\x16\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4\x96\xcdn\xe46\f\x80\xef~\nb{\xd8Kdz\xc1^\n\xdf\xda\xec\x16\b\xda\x06A\xb2ͥ\xe8A#q\xc6ldI%\xa9Iӧ/$ۙ\x9f8\xc8\xf6\xb0\xbe\x89\xa2\xf8\xf3\x91\x94լV\xab\xc6$\xbaG\x16\x8a\xa1\x03\x93\b\xffQ\fe%\xed\xc3\x0f\xd2R\\\xef/6\xa8\xe6\xa2y\xa0\xe0:\xb8̢q\xb8E\x89\x99-~\xc2-\x05R\x8a\xa1\x19P\x8d3j\xba\x06\xc0\x84\x10\xd5\x14\xb1\x94%\x80\x8dA9z\x8f\xbc\xdaah\x1f\xf2\x067\x99\xbcC\xae\x1ef\xff\xfb\x0f\xed\xc7\xf6C\x03`\x19\xeb\xf1/4\xa0\xa8\x19R\a!{\xdf\x00\x043`\a\x0e=*n\x8c}ȉ\xf1\uf322\xd2\xee\xd1#ǖb#\tmq\xbc\xe3\x98S\a\x87\x8d\xf1\xfc\x14ԘЧj\xea\xa7j\xeav4Uw=\x89\xfe\xf2\x9aƯ4i%\x9f\xd9\xf8倪\x82P\xd8eoxQ\xa5\x01H\x8c\x82\xbc\xc7\xdf\xc3C\x88\x8f\xe1gB賈\xad\xf1\x82\r\x80ؘ\xb0\x83\xeb\x12u2\x16]\x03\xb07\x9e\\\xc53\xe6\x11\x13\x86\x1fo\xae\xee?\xde\xd9\x1e\a3\n\x01\x1c\x8aeJUo)\a \x01\x03S$\xa0q\n\x10b@\x88\fCd\x841Zi'\x93\x89cBV\x9a\t\x96\xef\xa8\u007f\x9eeg\xceߗ\xe8F\x1dp\xa5cP@{\x84\xa9\xee\xe8@j\xe4\x10\xb7\xa0=\t0V,a\xec\xa1#\xb3PTL\x80\xb8\xf9\v\xad\xb6pWб\x80\xf41{W\xdal\x8f\xac\xc0h\xe3.пϖ\xa5\xe4W\\z\xa3s\x81珂\"\a\xe3\v\u05cc߃\t\x0e\x06\xf3\x04\x8c\xc5\a\xe4pd\xad\xaaH\v\xbf\x158\x14\xb6\xb1\x83^5I\xb7^\xefH牱q\x18r }Z\u05fe\xa7M\xd6Ȳv\xb8G\xbf\x16ڭ\f۞\x14\xadfƵI\xb4\xaa\x81\x87:0\xed\xe0\xbe\xe3i\xbc\xe4\xfdQ\xa4\xfaT:A\x94)\xec\x9eŵ\x87_\xe5^\xfaw,\xf3xl\x8c\xff\x80\xb7\x88\n\x95\xdb\xcfw_`vZKpʼ\xd2>\x1c\x93\x03\xf8\x02\x8a\xc2\x16y,ܖ\xe3P-bp)Rк\xb0\x9e0\x9cB\x97\xbc\x19Hen\xbfR\x9f\x16.\xeb\xbd\x01\x1b\x84\x9c\x9cQt-\\\x05\xb84\x03\xfaK#\xf8ͱ\x17²*H\xdf\x06\u007f|ݝ*\x8e\xb4\x9e\xc5\xf3]\xb4X\xa1\x85\xb1\xbcKhK\xcd\n\xb8r\x96\xb6d\xeb\x18\xc062<\xf6d\xfby,O\x88>\x0fp{$^\x1a\xd8\xf2\x8d\x06ʭr*\u007f%Y\xa8u\"Ɠ^[\x1d\x99y\x93\x82\x1a\xcd\xf2\xbf8\xd4\x133\t\x9b\x991\xe8d\xa7\xde\x02K\x87\xbe&wd\x8e,\xe7y\x9f\x84\xf3\xb9\xaaԿ\x96\xa1 `\xc2\xd3t\f\xb47\n\x8fȥ\xc5m\xcc\xe5\xee@\a.\x9f\xf1\x9aP\xf48\x16\xa5\x94/q\xb4(Ҟi\x91\xe2\xf0\"\x9aW\xebP\xbe\xf2'4\x1b\x8f\x1d(g\\\xac\x9fa6O';\xa97\xf2\xa2\xd8'I\xdf\x14\x8d%\xde8\xde\xcb\xf8\x16\xf0\n7\xe4\xe1\xdc\xcb\n\xae\xf1\xf1\x85\xec*\xdcp\xdc1\x8a\xbcغ\x19I՟\xddW0Yh\xb83\xd1\xe1\x81qqXU\xe8\xab\xe9AQ7\x00\xea\xaf\xd8\x1d\x81\x15\x8dlv3\xeaC\x17\x1bk1)\xba\xeb\xf3\xe7Ļw'\uf0ba\xb418\x1a_C\xf0ǟ\xcdh\x15\xdd\xfd\x1cG\x11\xfe\x17\x00\x00\xff\xff\"\xf7\xf4 \x8c\t\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WOoܶ\x13\xbd\xebS\f\xf2;\xe4W \xd2&ȥЭuR h\x1a\x04v\xe2K\xd1\x03\x97\x9c\x95XS$\xcb\x19\xae\xe3~\xfab(i\xffhe;=to\x1a\x0e\x87\x8f\x8f\xef\r\xb9U]ו\x8a\xf6\x16\x13\xd9\xe0[P\xd1\xe27F/_\xd4\xdc\xfdH\x8d\r\x9b\xfd\x9b-\xb2zS\xddYoZ\xb8\xca\xc4a\xb8F\n9i|\x87;\xeb-\xdb\xe0\xab\x01Y\x19Ū\xad\x00\x94\xf7\x81\x95\x84I>\x01t\xf0\x9c\x82s\x98\xea\x0e}s\x97\xb7\xb8\xcd\xd6\x19Le\x85y\xfd\xfd\xeb\xe6m\xf3\xba\x02\xd0\t\xcb\xf4/v@b5\xc4\x16|v\xae\x02\xf0j\xc0\x16L\xb8\xf7.(\x93\xf0\xaf\x8c\xc4\xd4\xec\xd1a\n\x8d\r\x15EԲh\x97B\x8e-\x1c\aƹ\x13\xa0q3\xef\xa62\xd7c\x992\xe2,\xf1\xafk\xa3\x1f\xed\x94\x11]N\xca]\x82(\x83d}\x97\x9dJ\x17\xc3\x15@LH\x98\xf6\xf8\xd5\xdf\xf9p\xef\u007f\xb1\xe8\f\xb5\xb0S\x8e\xb0\x02 \x1d\"\xb6\xf0IPF\xa5\xd1T\x00{\xe5\xac)T\x8c\xb8CD\xff\xd3\xe7\x0f\xb7oot\x8f\x83\x1a\x83\x00\x06I'\x1bK\xde\x127X\x02\x05\x13\n\xe0p\x00\x06ʃJlwJ3\xecR\x18`\xab\xf4]\x8eSM\x80\xb0\xfd\x135\x03qH\xaa\xc3W@Y\xf7\xa0\xa4ژ\b.t\xb0\xb3\x0e\x9biJL!bb;\xb3,\xbf\x13}\x1db\v\xc0/eGc\x0e\x18Q\x14\x12p\x8f0\xe9\x02\rP\xd9-\x84\x1dpo\t\x12\x16*\xfd\xa8\xb1\x93\xb2 )\xcaO\xc8\x1b\xb8\x11\xba\x13\x01\xf5!;#2\xdccbH\xa8C\xe7\xed߇\xca$\xbcȒN\xf1,\x84\xf9g=c\xf2\xca\xc9Yd|\x05\xca\x1b\x18\xd4\x03$,\xecd\u007fR\xad\xa4P\x03\xbf\x85\x84`\xfd.\xb4\xd03Gj7\x9b\xce\xf2\xec(\x1d\x86!{\xcb\x0f\x9b\xe2\v\xbb\xcd\x1c\x12m\f\xee\xd1m\xc8v\xb5J\xba\xb7\x8c\x9as\u008d\x8a\xb6.\xc0}1T3\x98\xff\xa5\xc9~\xf4\xf2\x04)?\x88z\x88\x93\xf5\xdd!\\t\xfe(\xef\xa2\xf3Q\x1e\xe3\xb4\x11\xff\x91^\t\t+\xd7\xefo\xbe\xc0\xbch9\x82s\xceG\x9d\x1c\xa6ёx!\xca\xfa\x1d\xa6\xf1\xe0\x8aʤ\"z\x13\x83\xf5\\>\xb4\xb3\xe8\xcfI\xa7\xbc\x1d,\xd3,[9\x9f\x06\xaeJ_\x81-B\x8eF1\x9a\x06>x\xb8R\x03\xba+E\xf8\x9f\xd3.\fS-\x94>O\xfci;<\x999_\x9a\x87\x8bd\x99v\x8d\xd2j\xf11H\xd3\xf05Rv\xab\v\xad\nq\xfe\x95\x8b\xf39\x96\xe5\xee\x99Y\x96\tc\xc7E\x90\v;yd\xa4c\x1b\xb8\xb7\xdc\xc3}ou\xbfR\x15ʴr@\xd2_\x88\x82\xb6ű\xff\x0e\xb6\xe8\xd8&\xbc\x90G]Ds\x11\x14\xc8\xd5Z\xf1\x85\xe7\xd6\vד\x17\x9eu,+\xce\xf4ݞ-\xd93\xa9:\xa7\x84\x9e\xa7\x1a\xe5\xb6ZN\xf8\x1e\xd3Ί\xffz\xfd\xf1I\xe7\xbe;\xe6\x957\x98\xb2~\xc4\x11\x13\xd6d;\xb9[eL\xbc[\x9c\xb5$`\xfc\x9d\xde\xf1Ϟ\x1a~\x8b6\x9d\xa7\xa0\x91\b\x97\xc6x\x04\xfd\x8a\xb8\x17\xa1\xe3\xc3\xfc\xcd\xf1\xabH\xb1\x9e\x1e\xe2e\x00\xa0-\x9f\xe2/^\x9c\xbd\xad˧\x0e\xde\xd8\xf1_\x04\xfc\xfeG5VEs;\xe3\x90\xe0?\x01\x00\x00\xff\xff\x045\xfb\x0f\xc4\f\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y\xdfs۸\xf1\u007f\xd7_\xb1\x93{\xf0\xf7fB\xea\x92\xfbN\xa7\xa3\xb7\x8b\xddt\xdc\xde9\x9eȗ\x97L\x1eV\xc4JD\r\x02(\x16\x94\xa2v\xfa\xbfw\x16 %Q\xa2e\xf9\xdaK\xf9b\x13\\,\xf6\xf7~\x16\x9a\x14E1A\xaf?Q`\xed\xec\f\xd0k\xfa\x1a\xc9\xca\x1b\x97\x8f\u007f\xe4R\xbb\xe9\xfa͂\"\xbe\x99\x94+\xd74\xad\xd5q;M\x01\xa9\x17mt\x81\xa7\x8a\xd6d\xa6\xacW\x05\x86\xaa֑\xaa\xd8\x06\x9a\xa2\xd7E\x12ܦH.\x1b\xf5]\xe8➯\x0e$\x8d[q\x1bǠ\xedj\xb7\x9c\x02\xecI\xbbK\x80\x81f\xc0n[\x96\u007fo^Y\x12\xab|\xfc\xd3\xfc\x01\xfaC\x93\v\x866O\xd6\xdeo\xe3\xbd\xe1\xc5P\xda.)d\xc7-\x83k\x12G\xb2\xca;mcz\xa9\x8c&;4:\xb7\x8bFG\xf1\xf4\xdf[\xe2(\xfe)\xe1:%4,\bZ\xaf0\x92*\xe1\xd6\xc256d\xae\x91\xe9w7\xbbX\x98\v1\xe9\xf3\x86?\xacCC\xc2l\xad\xddr_(F=t\x94\xfbsO\x95\xf8K\x8c&\xfb\xf4RW)\x05`\xe9\x02\xe01yy\xc0v,5\xe5\xc9Ua\x1e]\xc0\x15\xfd쪃$\u007fB\xa6wc;z\xa9\xa4\xb6\xe54\xa5\x8e5p\xa6\xf1\xacE\xe4YJ\x97\xb9\xc7X?{\xea\xd5\xed2\x1f\x93*Rt\x80\xe05U4(\xed\xa0-GB\x95\x17GX\x02H\xe2\x06\xea\xe8_\xe7\xfaӕ\xb9};\x10[\x03\xe6\xfe\x06\u007f\x99\u007f\xb8\x9b\xfe\xd9eYGybU\x11\v\x1b\x8cԐ\x8d\xaf\x81۪\x06dQA\aRs\xf9R6h\xf5\x928\x96\xdd\t\x14\xf8\xf3\xdb/c6\x03x\xef\x02\xd0Wl\xbc\xa1נ\xb3\x95w\x05\xb5\x0f\x10\xcd\xd9\x10;~\xb0ѱ\xd6㊣\x04R\xa7\xf0&)\x1a\xf1\x91\xc0u\x8a\xb6\x04F?\xd2\f^I\t9\x10\xf1\x9f\x92\r\xffz5\xca\xf3\xffr\x92\xbe\x12\x92WY\xb0]\xcfr\x0eO_\xacN\x8f+/\xedJW\xf3\x0e\xf9\x1c\uf514\xd8Ժ\xaa\xfb!a_=Gs\xa4A\x95K.\xda\xed\xef\x1e\xb6b\xc86\x88<ۢ\x1bC\v\xb4J\xfeg\xcdQ\xd6_l\xb9V_\x90\xa4\xbf\xde\xde|\x9b`n\xf5\x8b3r\x14\x10\xe7\x98\xf0\xeeV\x89\xf9\x96\x9a\xc2Y8\xf5q@\xda\x03\xbb\x11$\xb9\xa3\xb9\x18\xc9E\\\x9d\x00(T*]4\xa0\xb9?\x03\xb2\xce\xe8<\x10\xfe\x01W\f\x18\b\x10\x1a\xf4\xe2\xa7G\xda\x16\xb9I{\xd4\xd2c\xa5\x8dvxeA\x80\xde\x1b=\xd2N\xbbV\xdc\xc1\xc5\x0ey\xcbX\x8b+\x1e\xd7w\xc4\xeay\xf7Yk\xe7\xf1b\f>wGg\\\xb2\x83\xd0\xd1\xed\x81\xeai\xfc\x9e\x00\xd7'\xec&S\xa0\xa0\xabCъ\xf1\xd1e@!\x90~\xb0\xe0\x9d\x1a\xbc\x0f\xe3l\xf0)\xeb\xf3\xec\xf4\x161\xb6|\xf1\xfc\x96\xa8{\xeb\xe5z\x10;\x1e\t+\xfc\x96\t\xaer\x82\x1d\x87\xd7T\xe7\\x}J\x9f.D\x82\xcabE\xddH\xbd~\xc94y>\xec6\x00.\\\x1bw\x03\xe2 ů\xb8\x8b\x9e˧ӑ\x11l\x18\xb2(\x80\x99;\xf8hL\xdaq\x98\xd6\xfbK\xd4$ς\xc4-\xffi\x86\x03\xf8\x1a\xf9\xbcq\xee\x85b,yv5\xe8L\xf6@\x9a\b\xdb\xe6\xf8\x84\x02\xeehs\xb2vk\xef\x83[\x05\xe2\xe3\xd0(\xfa\xf89Q\xb6\x80\xf7)\xce/ַ;\xe0\xbc\xca\x1d\x11\xd4\xce\xf4\xe9\xe9\"\x1a\xb0m\xb3\xa0 z/\xb6\x91xX\x84Og\xfe4E\xec\x8dv\xb0\xbb\xbfB\xc8|\xba\xa1\xa8B\x9bn\xd9$g\xa2\x03\xa5\xd9\x1b<\x9d\x8az\x15\x12\x92\x90\x94\x91\x94\xdeGk\x9f\xa6\x9eB\xfa\xf4\x92[\x8a$͍\xb3\xa3\x18\xb7\xcfOm\xe3\x1f\xfe\xffIġm\xa4ՠ\xa8w_ŀ\xef\x84\xff\u007f\x9b\xf7\x93\x8d\x95-z\xae]\xbc\xbd9\xeb\xed\xf9\x8e\xac\x8f\xf2=hI\xb5+\xdd\xfbuD\xbdˇ--?9\f.N=\x8e\x18\xe2e\xcdc> }\xa6o$\xbe\xa4J\x98\x93ǀ\xf140\xd3}\xf0\xf5\xf1\xaf,\xaf\x81u\xba\x16\x13\xec\x93\xc1P\x1euYډ@;\x17r\xac\x9er\x1c4\x82A\xe1\x1f\x8a\xfe-j\xfeH<\x1c-\xed\u007frz\xb3\u007fKqYt?1\xa5\x0f\x9dZ\xea\xe0\xf0\xeeV\xb5[\xd9\xc3\x10\xac\x04\xb2\x93\xba;\xfe\x91\xe9U\xbe*\xe9\u007f5J\xaf\x95\xb3\x19\xcd\xf2\f>\u007f\x99@w\xd7\xfa\xa9\x97C\x16\xff\x1d\x00\x00\xff\xff\x81\x16-\x05\x9e\x1b\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s۸\x11\u007fק\xd8\xf1=\xb87\x13R\x97\\\xa7\xd3\xd1\u06dd\xddt\xdc\xde9\x9eȗ\x97L\x1e b)\xa2&\x01\x16\xbb\x90\xacv\xfa\xdd;\v\x90\x92(Q\xb2\x9c\xe9\xa5zI\b,\x16\xbf\xfd\xed\x1f,\xe0I\x96e\x13՚O\xe8\xc98;\x03\xd5\x1a|f\xb4\xf2E\xf9ӟ)7n\xbaz\xbb@Vo'O\xc6\xea\x19\xdc\x04b\xd7|Dr\xc1\x17x\x8b\xa5\xb1\x86\x8d\xb3\x93\x06Yi\xc5j6\x01P\xd6:V2L\xf2\tP8\xcb\xde\xd55\xfal\x896\u007f\n\v\\\x04Sk\xf4q\x87~\xff\xd5\x0f\xf9\x8f\xf9\x0f\x13\x80\xc2c\\\xfeh\x1a$VM;\x03\x1b\xeaz\x02`U\x833h\x9d^\xb9:4\xe8\x91\xd8y\xa4|\x855z\x97\x1b7\xa1\x16\v\xd9u\xe9]hg\xb0\x9bH\x8b;Dɚ\a\xa7?E=\x1f\x93\x9e8U\x1b⿏N\xffb\x88\xa3H[\a\xaf\xea\x11\x1cq\x96\x8c]\x86Z\xf9\xe3\xf9\t@\xeb\x91Я\xf07\xfbd\xddھ7Xk\x9aA\xa9j\x92i*\\\x8b3\xb8\x17\xa4\xad*PO\x00V\xaa6:\U00091c3b\x16\xedO\x0fw\x9f~\x9c\x17\x156*\r\x8afעgӛ(\xbf=\xefn\xc7\x004R\xe1M\x1b5µ\xa8J2\xa0şH\xc0\x15B\xe7\x15\xd4@q\x1bp%pe\bE\xe5\b-8[o\xc6\xd1:\xa8\xd4\n\x81\\\x83\xb0ƺ\xceR\xaf\xa0a\xad6b\u007f\xef.\x890\x05\xad\xf2<\xec\x06F\xb5>~\xb8\xfd0K\xa8$\x84\x96\xb1\x8e\xc9)S\x1a9\xf3\xe5\xb0O'\x97\xc4d\xa4#\xa4\xe0`\aE\xa5\xecHY\x83\xd84Dv\xcb gI~\xfd\xdal=<\xb6\xfb\xdf\xc8\xf1}X\x18\xfeO\x87\xe0Ef\xc5\xd6\xf9E\xb3\xee\xf7\xe2\xf9\xacY\xd2\xc4{\x8b\x8c\xd12\xed\n\x12\xa3\nl\x99\xa6n\x85~ep=];\xffd\xec2\x93@\xccR$\xd04\xb6\xe1\xd3\xef\xe2?_eE\xec\x8c/3%\x8a~\v{d\x1f\x9a\xbeڜ\xbe\xaf\xbb\xf4T\xba\x9ew\x8d\xc7\xe1JI\x89ue\x8a\xaao\xd2w\xd5s4G\x1a\xa5S\xc9Uv\U000fb1ed\x10\x19\xbc\xe0\xd9d\xdd]0SV\xcb\xff\xc9\x10\xcb\xf8\xab\x99\v\xe6\x82$\xfd\xed\xee\xf6\xdb\x04s0\xaf\xce\xc8ц4\xc5D\xeb\xee\xb4\xd0W\x1a\xf4g\xbb\xa9\x8f\x03Ѿ\v\x1c\xe9\xe3\xb62\x177rdUK\x95\xe3\xbb۳\b\xe6[\xb1~\xf7\x1d\xe5]\xfb\xd6k\x92\x10=ӷ\x9dD\x92ԜE\x91\xfa\xee\xb1.\xb8Ð:\x868\"\x1d\xe8W!\x91됴9\xfbH\xb2\xf1\x0e~ \xd1:=\xf8\x1e\xfaw0\xb5#}0\x9c\x8cx\xf12Ê\x03]~\x9d\x89\xe2=g)?\xb9S\x12\xcf\uebfa\xd0\x14N\x9a\xb9\xe1\xe3\xcd9\xcf\xdd\x1c\xcb\xc7\x17\x02\xaf\x13.6\r\xc6\xdbBD\x00kE\xfd\x16\xc7~\x83=mia\xac\x84\xa2\ful\xb6\xa4\x0f,\x95\xa9Q\xc3\xf6\xe9\b\x1e\xe5>\x17\xaf\xcc\xd7ǵ\xb2W\x13\bu\xbc\xe7\x8d\x00>\\U:\xdf(\x9e\x81\\\x933Qp0oC]\xabE\x8d3`\x1f\x0e'O\xa6A\x83Djy>\x0f~M2\xe9\x86\xd5-\x00\xb5p\x81\xb7W\xac.!:\xf3\xaf\xa9\xf3\xf8\xe5\x17\xbcJ\xd1y\x10\x0f\"1\x16Wۤ<\x17X\x10o/\xa19\xdc\"\x83{\\\x1f\x8d\xdd\xd9\a\xef\x96\x1e\xe9\xd0\aY﨣\xf6;\x83\xf71\x02.6\xb8\xdb\xe0\xbc͝\x10T\xae\xee#ױ\xaa\xc1\x86f\x81^\f_l\x18\xa9g\xa0O\xf4\xe3\x1bj\xecyw\xbc\xed\xd6\xf7\xd5*)\xea:\xf8B\xd9\xf8$#\xd1\xc9\x0e\xb4\xa1\xb6V\xc7-|oC<\xf6$8%Cvq\xd1g\x97\xa4t\x9c{͝:¹uv\xb4#\xebS\xc1X\xfe\xd3\x1fO\x9e\x8f\xc62.\a\xa5\xb0\x9b\x15\n\u007f\x16\xfd\xffk\xdd'\x0f_b\xe5\xf9\xb2\xd25\x1f\x88\xbeT\xb5\xa2ⱚ\xb5_~\x8e\xcb\xcdp\x93oQiF\xa89\x18\xda=ؿ\xdd}E\x17e\xdd\x03}\x9c\x80d\x96\xdeۼ{\x8c\xeaFv\a\x96*\xa4\xd7B}\u007f\xf8B\u007fu5xp\x8f\x9f\x85\xb3ڤ\xbf.\xc0\xe7/\x13螨>\xf58d\xf0\xbf\x01\x00\x00\xff\xff\x98\xaaEc\xdc\x18\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4W\xcdn\xe36\x10\xbe\xfb)\x06\xdb\xc3^*y\x83\xbd\x14\xba\xb5i\x17\b\x9a\x04\vg\x9bK\xd1\x03E\x8d\xeci(\x92\xe5\f\x9d\xbaO_\x90\x92lٖ\xbd\xc1\x02\xab\x1b\x87Ùo\xbe\xf9!\xb5(\x8ab\xa1<=c`r\xb6\x02\xe5\t\xff\x15\xb4i\xc5\xe5\xcbO\\\x92[noj\x14u\xb3x!\xdbTp\x1bY\\\xb7Bv1h\xfc\x15[\xb2$\xe4\xec\xa2CQ\x8d\x12U-\x00\x94\xb5NT\x12sZ\x02hg%8c0\x14k\xb4\xe5K\xac\xb1\x8ed\x1a\f\xd9\xc3\xe8\u007f\xfb\xa1\xfcX~X\x00\xe8\x80\xf9\xf8\x17\xea\x90Eu\xbe\x02\x1b\x8dY\x00X\xd5a\x05\x01YH\a\xf4\x8eI\\ \xe4r\x8b\x06\x83+\xc9-أNn\xd7\xc1E_\xc1a\xa3?=@\xea\xc3YeC\xab\xd1\xd0.o\x19b\xf9}v\xfb\x9eX\xb2\x8a71(3\a$o3\xd9u4*\x9c)$\a> c\xd8\xe2\x1f\xf6źW\xfb\x89\xd04\\A\xab\f\xe3\x02\x80\xb5\xf3X\xc1c\x82\xea\x95\xc6f\x01\xb0U\x86\x9a\xccH\x0f\xdey\xb4?\u007f\xbe{\xfe\xf8\xa47ة^\x98,;\x8fAh\x8c1}\x93\xfc\xeee\x00\r\xb2\x0e\xe4\xb3Ex\x9fL\xf5:Ф\x8c\"\x83l\x10\x86\xbc`\x03\x9c݀kA6\xc4\x100\xc7`\xfb\x1cO\xccBRQ\x16\\\xfd7j)\xe1)\xc5\x19\x18x\xe3\xa2iR\x19l1\b\x04\xd4nm\u9ffde\x06q٥Q\x82\x03\xc5\xe3GV0Xe\x12\t\x11\u007f\x04e\x1b\xe8\xd4\x0e\x02&\x1f\x10\xed\xc4ZV\xe1\x12\x1e\\@ ۺ\n6\"\x9e\xab\xe5rM2V\xb4v]\x17-\xc9n\x99\xeb\x92\xea(.\xf0\xb2\xc1-\x9a%ӺPAoHPK\f\xb8T\x9e\x8a\f\xdc\xe6\x82.\xbb\xe6\x870\x94?\xbf\x9f \x95]J\x1bK \xbbދs\x95]\xe4=\x15\x19\x10\x83\x1a\x8e\xf5\xf8\x0f\xf4&Qbe\xf5\xdb\xd3\x17\x18\x9d\xe6\x14\x1cs\x9e\xd9>\x1c\xe3\x03\xf1\x89(\xb2-\x86>qmp]\xb6\x88\xb6\xf1\x8e\xac\xe4\x856\x84\xf6\x98t\x8euG\x922\xfdOD\x96\x94\x9f\x12ns_C\x8d\x10}\xa3\x04\x9b\x12\xee,ܪ\x0eͭb\xfc\xee\xb4'\x86\xb9H\x94~\x9d\xf8\xe98:V\xec\xd9ڋ\xc7i1\x9b\xa1\xd3\xfe\u007f\xf2\xa8S\xc2\x12k\xe9 \xb5\xa4s\x0f@\xeb\x02\xa83\xfdrbx\xae9\xd3W+\xfd\x12\xfd\x93\xb8\xa0\xd6x\xef\xf4\xa4\xcd/\xa0\xfae\xee\xc4\b+\x8d\xb8\xbeQq^\xf1\xc42\x80l\x94L:T\x14\xd9}\x9b\xcf\xc4q\x91\xf2L\xbbJ\xedj\x95\xd5\xf8)\u05ceջ\xab\xb1<\xcc\x1cH\xa1l\xdc+\xb8V\xd0NM\x8e(k<\v\"D\xfbf\x90\xfdL\xbekRi\xb5\x84\xe1*\xc0Չ\xf2\xc8s\x1b\x8d\x19,\x15\xdau^\t\xd5\x06\xc7Fn]8\x83H\xbd\x8d]\xdf\xd5\xdf\xc6\xef֙\xd8\xe1\xfen\xb8\x8a\xfc\xf9XwZ \xbd`\x00\x91B\x80p|\x05N\xbf\xa1&\x18\xbck\x06\x00C\xd1r\x8a\xf3\x8d\xd8Sr)\xe0\xd14,\xe6\x8b\xffHc\xae\xa2\x8e\x14N\xb3y\xb4y\xc2\xd7W\x87\x81(\x89\xfc\xf6q\x90\xd5Gbu\f\x01\xad\fF\xf2M\xf8M\x03\xc1(\x96I[\xa47\xd0\xd5<ߟ돐\x92)\x90$\x98vѫ\xe2\xb9~i]\xe8\x94T\x90F{\x91\x0e\x9d\xec\xa7\x17\x98\xaa\rV !\x9en^\x9e\bȬ\xd6\xd7#x\xe8u\xfa\xabp8\x00\xaavQ.\x10\x9b/\xc5+\xd4^E\xe47\x8a\xaf\xe3\xf9\x9c4\xe6Ҋou\x8e6v\xa7.\nx\xc4\xd73\xd9\nUs\xdas\x05<:\x99۸\x10\xd3L-\x9f\x88\x0eO\xec\x9b\xc3*\xd7]1<\xa9\xf3\x06@~\x996\x93\x14sߛ\x83\xe4\xd0 Jk\xf4\x82\xcd\xe3\xe9\x93\xfaݻ\xa3\x17r^jg\x1b\xea\xff\a\xe0Ͽ\x16\xbdUl\x9eG\x1cI\xf8\u007f\x00\x00\x00\xff\xfflC\xbf\xee\x8e\f\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4YMo3\xb7\xf1\xbf\xebS\f\xfc?<\t`\xad\xf3 \x97?ts\xfd8\x80\x91\xc45\xec\xa7\xee\xa1\xe8\x81\xda\x1dI\xac\xb9\xe4\x86/\xb2բ߽\x98!\xb9/\xda\xd5JA\x1b\xa4\u074b \xeep8\xf3\xe3\xbc\xefb\xb9\\.D#_\xd1:i\xf4\nD#\xf1ã\xa6\u007f\xaex\xfb\u007fWHs\xb3\xff\xbcF/>/ޤ\xaeVp\x17\x9c7\xf53:\x13l\x89_p#\xb5\xf4\xd2\xe8E\x8d^T\u008b\xd5\x02@hm\xbc\xa0eG\u007f\x01J\xa3\xbd5J\xa1]nQ\x17oa\x8d\xeb U\x85\x96O\xc8\xe7\xef\xbf+\xbe/\xbe[\x00\x94\x16y\xfbWY\xa3\xf3\xa2nV\xa0\x83R\v\x00-j\\\x81E\xe7\x8dEW\xecQ\xa15\x854\v\xd7`I\x87m\xad\t\xcd\n\xba\x17qO\x12$*\xf1\x1c\xb7\xf3\x8a\x92\xce\xff\xd8_\xfdI:\xcfo\x1a\x15\xacP\xdda\xbc\xe8\xa4\xde\x06%l\xbb\xbc\x00h,:\xb4{\xfc\x93~\xd3\xe6]\xff QUn\x05\x1b\xa1\x1c\xbdv\xa5ip\x05\x8f$E#J\xac\x16\x00{\xa1d\xc5*F\xb9L\x83\xfa\xf6\xe9\xe1\xf5\xfb\x97r\x87\xb5\x88\x8b\x00\x15\xba\xd2ʆ\xe9\xb2| \x1d\bxe\xfdH\b\xbe\b\xf0;\xe1\xc1\"\x8b\xa2\xbd\x03\xbfC\x10M\xa3dɧ\x80\xd9$\x96\xd0\xeeq\xb0\xb1\xa6\xeex\xadE\xf9\x16\x1a\xf0\x06\x04xa\xb7\xe8\xe1ǰF\xabѣ\x83R\x05\xe7\xd1\x16\x89McM\x83\xd6\xcb\f,==Sj\u05cet\xf8DJF\x1a\xa8\xc8x0\x8a\x9aL\x00+p\f\x00\x98\r\xf8\x9dt\x9dJ\xacF\x8f-\x10\x89\xd0`\xd6\u007f\xc3\xd2\x17\xf0B7`\x1d\xb8\x9d\t\xaa\"\x8bۣ%HJ\xb3\xd5\xf2\xef-gG\nґJxL7\x9d\x1f\xa9=Z-\x14]O\xc0k\x10\xba\x82Z\x1c\xc0\"\x9d\x01A\xf7\xb81\x89+\xe0g\xbe\x12\xbd1+\xd8y߸\xd5\xcd\xcdV\xfa\xec<\xa5\xa9력?ܰ\v\xc8u\xf0ƺ\x9b\n\xf7\xa8n\x9c\xdc.\x85-w\xd2c\xe9\x83\xc5\x1b\xd1\xc8%\v\xae\xd9w\x8a\xba\xfa\xbf\xf6\xb2>\xf5$\xf5\a2(\xe7\xad\xd4\xdbv\x99M\xfb$\xeed\xe2\xd1r\xe2\xb6(\u007f\a/-\x11*\xcf\xf7/_\xfbV%\xdd\x10sF\xbbgh\x1d\xf0\x04\x94\xd4\x1b\xb4\xf1\xe2ض\x88#\xea\xaa1R{\xfeS*\x89z\b\xba\v\xebZz\xba\xe9_\x02:2]S\xc0\x1d\x87\x10X#\x84\xa6\x12\x1e\xab\x02\x1e4܉\x1a՝p\xf8\x9b\xc3N\b\xbb%Az\x1e\xf8~\xe4\x1b\x12F\xb4\xda\xe5\x1c\xa2&o(y\xf7K\x83\xe5\xc03h\x93\xdcd7\xde\x18;p~\xdaR\xf4XN\xb9%=ѷ)\x04\r\u05cf\x84\xf8CKF\xb6B\xc7\a-\u007f\t\xc8!4\xfa$\x8eÅ\xed\x85\xd3\xfeC&P\x1c\xadN\"H\x0f~\x94*TX\xb5a\xd2\xcdJz?\"\xe7$#\xa4&\x1b\xa7\xa0N\xe2\xea\xee-\aH1!%ٙԑ\x1bH\xcd*N K\x8f\xf4X\x8fĚ\xd1\t8k\x89\xb5\xc2\x15x\x1b\x8eώ\xfb\x84\xb5\xe20\tEβ\x97!\xd1R'7W\xb2\xe4+k\x9d\x99\xc1\xf8_\xc2!Is\x173\xcfeh\xa6!\x1bF\xd8^\x80\xd4\xda\x18\x85BOau\xa9\xfb<\x8cȏ\xac\xa6\xf5\x9cl6&\x1f1\xd2+F\xb9\x18\xf1Iq\xc0\xba\xf1\x87k\x10J\xf5\x1dP\xd8\x0e\xc0\xdfנ.t\xac\x87c\xea3\x8eu\x1a\xa1\xb1q\xf41\xea,-ѥ\xc8\xfa_\x00\x98\x12kT/\xa8\xb0\xf4\xc6\u0382\xf5S\x9f2\x02Eyq\xff\xb9\x18\xbe\xf1\x066Ry\xb4\xf0.\xfdn\xa4\xc0\xfb\x0eu\u0089*\x12\xa9+\xb9\x97U\x10j`e=\x94:0\xc1X\xd0R]\x8fx\x12\xc6y\xf7\x00S\xf8#\v/ԯ\xf2\xc1S)\x96\x9eZ\xf8rw\xffAő뺟\x19؎7D\xe4r\xfab\xf8\xc1e\xec\xa8B\x92\x16k\xae\xbb&8\x03|e+\xeb\xa8X\xdf\xdb\xc7/c\x03\x82\xd3F4\x12\xf2vF\x90\xe4\x13\xed\xf5Rvɉx\x923\xa4\xca\xf9\x1a\x04\xbc\xe1!\x16\xd9T\xc77\x14J3\v\x8b\\\x9e\xf3E\xbf၉R\xc5=\xc9u\xeeR\xe2\xf3\x86\x87S\xaf\x8eԥ\xf3R\xf5\x13\xf5\xa6\x05\x96\x8a뱬*wWxJIz\xbc\x99\x16\x16\xe6=5?\x19\x91\v\xc5n\x01\xecu\x81\f\xf1'\x17\xe1$\xfb\xda\xc9\xd8\xe0\xcdH\xed\x90m/\xf77\xafԩ\xb6̣E=\xe8kx4\x9e~\xee?$\xd5\xecB\x8f3h\xf7|1\xe8\x1e\x8dg\xda\u007f\v\x92(ԅ\x80Db6P\x1dc\x1b\xe9\xd5o\u007f\x1cG\x0f\xbaլߌ\x12\xd2Q\vbl֜\xdb\xd6xDd^\a\xc7\x1d\x8b6z\xc9\x11)s\x9fa\xda^\x9at\x19Jc\ax\x9d8h\x86\xe7\x1a!\x1d\xff\x95\x1a\xb1\xb8'\xb6\xd2J\x94XA\x15\x18\x02n\x05\x85ǭ,\xa1F\xbb\x9d\x93\xb3\xa18u\xfa\xeaf\"I|.\xb8\xdb\xd3Y(?)\xecT\xd3\a-\xc9\xd6O\xbc\x99\xbd\xde\xc9^\xed2\xa98|s\x82\x9b\xd4^T\x95\x8c\x19\xe6\xe9L|:\x83\xcf8g\xc4CS\xa2\x15\rY\xf6?(\x9c\xb2\xa1\xfc\x13\x1a!\xad+\xe0\x96\xe7Uj\xfaf\xfb\xf4\xa9\xf2\xe8\xb3&\xae\xd2\x01a\xbe\x17\x8aB=\x05\x0e\r\xa88\xf0O\xb24\x9bQF\xbb\x86\xf7\x9dq1\x8ao$*\x9eB\\\xbd\xe1\xe1\xeaz\xe0y \xa7C\xe9Ճ\xbe\x8aIb\xe4\am\xc3g\xb4:\xc0\x15\xbf\xbb*FIp\x92\xedlb\x9c\xb1\x88\x93\xaf\xdaJ\xf7g\xd14Ro\x8f\xef\xf92[\x98\xb1\x83\x81\r<\x1e\x9d60\x84~Y:(\xe1\xc7\xc7\xc51\xdfD\xb1o\xf3\xb0Q{S\xc0\xad>\x8c\xb8:\xea\x18'J\xdda\aI\"\xbdK\xa5(*%\x9e\x153\xed3J\x83\x05'\xea\xc8\u007fzh0\x01z\xe2\xf8\xf4:_\xc9?\xb7d\x13}`OY\xaa\x14[\x05\x9e^ǖ\xc3ŧӢq;\xe3\u16fd\x14i\xaaeB\xd5X\xb3\xa7~\xf0\xdb\xffPG\xe7\xca\x1dVA\xe1١\xcdK\x8f\xf0\xfc\xd8&\xb3\x1d\xdbB\x87C\xdb\xc9e\xb4\xaa\xe8\x81\xc3\xf1Pja\x12_\xba\xe4\xa9&\xbae\x18\xcd\xc18\x9e\xc9R8q\xa1,ѹMP\xb9\xe3\xe1\xb1?\xb5ב\\\xbaV\xda\v\xc7HS\x19b\xd9\x1b~\x9d\x9d\xd0y\xe1\x83;;\xa3c*(E\xe3\x83MEj\x19\xace\xa5\xe2;\xb3\x19\x8d\xe9.\x98ҡ\xb5ƞ\x99\xf60It\xf7\xd2\x04͵\x1a\xd9-\xef\x85\x1a\x9d\x13\xdb<\xe6yG\x8b\xb0EM\x11vbđ\xea\x00\xfc\xc02\xa4\x8f\x04\xc3>\x95\"\xa9(=\xb5_Q4\x0e\x9b\xad\x13\x9fʙD \xb6'\xeeLj\x8f[\x1cf⍐*X|F\xe1\x86\xdf\x0eF\xea\xffЧL\xa5]\xd4\x11E\xf6\xbf\xbe9\xb4\x1e\xf8<)\v\xeaP\x1f3^\xc2#\xbe\x8f\xd6Hy\xac^\xdbOG#\x82\a\xfdd͖2\xef\xe8՝\xa9\x1b\x85c+X\u0093\xb0^\n\xa5\x0e\x91\xfd\x89S/ũ\xfb\xb0u\u007fޘ_\x8f\x88\x8f\x06,d\xd6\x1d\xbfl\x82\xdf\xc8\xf1h-}\xe9Z+\xfc\xf6\xf7\x19\x94\xbc\v\xab\xa5\xdeΫ\xfb\xe7D4\xe1\xbdi\xffo\xe7\xbfY\xc0\xa1\a\x9f\x98\xe5\xfdZ\x0f\x9e\x88\xa5GK\xdd'\xde\xcf\xdd?Fk\x99>\xe9\xf2\v\xea>\xed\x1e\xab\x1e\xf6I\x94\xb4\xd2\x05hQ\x96\xd8\xf84\xc1\xec\u007fܽ\xba\xe2?\xf9\xeb-\xff-\x8d\x8e\u0557[\xc1_\xfe\xba\x80\x84\xc0k\x96\x83\x16\xff\x15\x00\x00\xff\xff\xba\xf0V\x1f\x0e\x1f\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x1c\xcbn#\xb9\xf1\xee\xaf(8\x87I\x00K\xde\xc1^\x02\xddf=^\xc4\xc8dv\xb0v|\tr\xa0\xbaK\x16\xe3n\xb2C\xb2e+A\xfe=\xa8\"\xfb\xa9~\xb0\xbdv\xb0Y\x98'\x9b\"\x8b\xc5z\xb3X\xec\xb3\xd5ju&\ny\x8f\xc6J\xad6 \n\x89\xcf\x0e\x15\xfdg\u05cf\u007f\xb4k\xa9/\x0f\x1f\xb7\xe8\xc4dzG\xa9\xd2\r\\\x95\xd6\xe9\xfcg\xb4\xba4\t~ƝT\xd2I\xad\xcert\"\x15Nl\xce\x00\x84R\xda\t\xea\xb6\xf4/@\xa2\x953:\xcbЬ\x1eP\xad\x1f\xcb-nK\x99\xa5hx\x85j\xfd\xc3w\xeb\xef\xd7ߝ\x01$\x06y\xfa\x9d\xcc\xd1:\x91\x17\x1bPe\x96\x9d\x01(\x91\xe3\x06l\xb2Ǵ\xccЮ\x0f\x98\xa1\xd1k\xa9\xcfl\x81\t\xad\xf6`tYl\xa0\xf9\xc1O\n\x98\xf8]܆\xf9ܕI\xeb\xfe\xdc\xe9\xfe\"\xad㟊\xac4\"k\xadǽV\xaa\x872\x13\xa6\xe9?\x03(\fZ4\a\xfc\xabzT\xfaI\xfd(1K\xed\x06v\"\xb3\xf4\xb3Mt\x81\x1b\xf8J\x98\x14\"\xc1\xf4\f\xe0 2\x99\xf2>=n\xba@\xf5\xe9\xdb\xcd\xfd\xf7\x84G.|'@\x8a61\xb2\xe0q5\x8a -\b\xb8\xe7M\x82\t\xec\x00\xb7\x17\x0e\f2.\xcaш\xc2\xe0\xaa\xc22\x05m\x02L\x80\x02\x8dԩL\xe0\a\x91<\x96\x85\x9fj\xf7\xba\xccR\xd8\"\x98R\xad\xc3\xd8\xc2\xe8\x02\x8d\x93\x15\t\xa9\xb5\xa4\xa6\xee\xeba\xfa\x81\xb6\xe2\xc7@Jr\x82\x16\xdc\x1e!p\x1bS\xa6^.@\xef\xc0\xed\xa5m\xf0f\x92\xb4\xc0\x02\r\x11\n\xf4\xf6\x1f\x98\xb85\xdc\x12\x9d\x8d\xad\xb0M\xb4:\xa0\xa1}'\xfaA\xc9\u007fՐ-8\xcdKf\xc2a\xe0hդrh\x94Ȉ\t%^\x80P)\xe4\xe2\b\x06i\r(U\v\x1a\x0f\xb1k\xf8\x8b6\bR\xed\xf4\x06\xf6\xce\x15vsy\xf9 ]\xa5'\x89\xce\xf3RIw\xbcdi\x97\xdb\xd2ic/S<`vi\xe5\xc3J\x98d/\x1d&\xae4x)\n\xb9b\xc4\x15\xab\xc9:O\u007fWq\xd1~ha\xea\x8e$6\xd6\x19\xa9\x1e\xean\x16\xe2Q\xba\x93,{\xf1\xf0\xd3<\xfe\ry\xa9\x8b\xa8\xf2\xf3\xf5\xed][t\xa4\xedҜ\xa9ݒ\xa6\x86\xf0D(\xa9vh<\xe3vF\xe7\f\x11UZh\xa9\x1c\xff\x93d\x12U\x97\xe8\xb6\xdc\xe6\xd2\x11\xa7\xffY\xa2uğ5\\\xb1\xb5 \x99+\x8bT8L\xd7p\xa3\xe0J\xe4\x98]\t\x8boNv\xa2\xb0]\x11I\xe7\t\xdf6r݁\x9eZuwe\x8c\x069T\xe9\xf0m\x81IG5h\x96\xdcɄ\x15\x00v\xda4*n\xdb\x16k\\/y\xed0\xb4\xdb;iG\xae\x8cV\x80\xcf\xc4\xe9F_IN\x9e\xf6\xa8H\x8bL\xa9\b\xc3\x1eD\b\xc6c\xdd\xeb\x1f\xa4\x1d\xff\x80yA\xca8\x89\xda]\x18D\xa8\x11U\xd2\xda\xc9xS\x81\xb5\xc9\xd2\xc1R\x81\x1eƮ0\xfa \xd3`\x0fzԛ\xa2\xa0Gi'\xca\xcc\xdd\xeb\xac\xcc\xd1\xde\xe9\x9f\xd1:\x99\x9c\x8e\xeb!\xffypZ\xc5Y\xb4DQ\xb7GC\x8a\xc7?\xb0\r\x1b\x80\n\xac\x11\x16S6b\xe2\x11A\xc0\xd6\uf6eca\x96A\xa1S8\xf8u`{\xac\x10\xee\xf3\xa2\xe1\xc7V\xeb\f\x85:\xf9\x1d\x9f\x93\xacL1\xad}\xd3\x005z\xbb\xbc>\x99\xc2.^HE\xd2D\x0e\x95\x90Tͯ\xe4]\x067)\f\x02\xa9\xbfT\x1e\"Hfe\xd8\xea\xd0f\xa4\xc3|\x10\xc3\t\xb9\xf3\x8dB\b\xb1\xcdp\x03Δ\xa7\xd2R\xcd\x17ƈ\xe3(\x95\xaa\xd0'\x9eH\xf5\x8c`\x943\x99 \x91\xa76\xbdL\xa7\xdf\x00\x89\xf6Z?Γ\xe5O4\xaaq+\x90pD\t[܋\x83\xd4\xc6\xf6#\x11|Ƥt8\xac#\xc2A*w;4\x04\xa9\xd8\v\x8b\xb62\x12\xe3\xe4\x99R{jf\x8a\xc5'\xfbi\xd8K\x8cb\x1a\x8cm\x81\xcd\xe9\bL`\x84\xc9\xe6\x96\x05H\x95ʃLK\x91\x81T\xd6\t\x95\xf8}\x89\x1a\xb7\xa1}\xc14\xebO0\xf7f\xb4\u009f\xf8\xd2\xf1HZ!h\x039\xb9\xdfӡvt\r\x18\xdd\xfeV\x90=\xf3\xc6\x1a\f\xc5\xd3a\xb1\x94\x9d]c/.&\x80\xd7\xdc\xf1A[&\xb6\x98\x81\xc5\f\x13\xa7\xcd\x18Y\xe6\x99\xee[\x9c-\x1c\xa1\xe7\x80Ul\xec>m\xb9\xd9\xe0$P \x93\xff\xb4\x97\xc9\xde\xc7W$S\f\tR\x8d\x96m\x81(\x8a\xec8\xbeY\x98\x97\x84\xb0д9hڬa\xe8\xc3\x1c6\x11M\x8b\xb2\xa7M\x9b\xb1\xac]:\xd7\"\xf2N\xe6\xcai\xbcH\xa0oN&\xbf\xb6@\x13\x81%\x9d\xadnv\x80y\xe1\x8e\x17 ]\xd5;\x0f\x93\u00a0\x06\x87\xdf\x04\xa3^\xa2\x0f7\xfd\xb9\xaf\xac\x0f\xaf\xc0\xa5\x1a\x85\xffk&\xb1\xb3\xb9\r\xbef\x01\x83\xbe\xb4\xe7]\x80\xdc\xd5\fJ/`'3\x87\x1c\xf7L\xa3\xd8r}\xb3\x9cz-\xb2\xc4yMj\xb9p\xc9\xfe\xba>BΎ\xefQ\xa8?\xdd\xc7\xca\xd5I\xa2\xeb\xe4g!\x03g\x18\xa4\xc1\xdc\xe7-\xeeX\a\x9a\x1e\x8e\xd4>}\xfd\x8c\xe94\xa1 V\"O\xb6\xf3\xa9\x87r{\xf9p\f\x88\xdfL\b\xa8\xea\x13\x96\xcfG]\x80\x80G<\xfa(H( F\tZj\xf4 qJ$N\x8c\xb1\x89x\xc4#\x03\n\xb9\xae\x88\xf9\xf1\xa2\xe1\xdb#\x1e\xe3\x06\xf6HI\x98\x85L\x80\xa7)u0A8e\xb2\x84\x8c\xc0\x99K\xd6\x10p:f\x93\xb0\xc4\xdcT\xad\xe2ċ\xb6[\xb3\xb1\x93\xc6}\xc4\xe3\a\xeb\x19Fڱ\x97E\xf4\x86\xc9\x00\x83E֣*\x93y/2\x99\xd6Ky}\xb8QSQw\xb7}\xd5\xeeF]\xc0\xf5\xb3\xb4\x84\x9eJ\xe1\xb3F\xfbU;\xeey3\xc2z\xf4_DV?\x95UOy3O\xf4h'H\xa3\x84\u07b7\x1b\u007f¬Y%-\xdc(:+\x05\xbap\x9a\x9baƋ%\xa3\x94\x97\x963\xa1J\xab\x15;\xda\xf5\xc0Z\xd10\x03{\xb4\xe9p\xa7\x8d^k\xd9h\xa8t\xa0\xf3\xa8ݑ\xef\xf1\x10|\xfa>\x13\t\xa6\x90\x96LT\x11\r\xd1:#\x1c>\xc8\x04r4\x0f\b\x05\xf9\x82XnD\xdbg\xdf\x16\xcb\\lhP\xb5`\xe8\xd3\x18\x94V\xa4\xd7Q\xe3*\xf6G\f\x1e\xccGO\x0f\x8e\xd9\x1b;h\x8ec\"\xa8-Ҕ\x13\xb6\"\xfb\xb6\xc8K,\xe2\xcei\xfc\xe0\xd1\xf3\xfe5\x17\x9c(\xfd7\xb9H\x16\xf6\xff@!\xa4\x89\xd2\xf2O|ŗagvȺ\xb5\x17\xa25\xa4\x05\xe2\xf8Ad\xfdێ\x91-j\xb2@\x98\xf9P@\xefN\"\x9f\vx\xdak\xeb=\xf2N\xe2Hr\xb8ۤ\x85\xf3G<\x9e_\x9cإ\xf3\x1bu\xeeC\x84\xbe\xd6G\x80\xad#\x0e\xad\xb2#\x9c\xf3\xec\xf3_\x16NEKg\xe4@\xbe\x0f\x8e\x0f\xc4\xe9$[E\x134\xb5\xbe|\xa4\x10z\x1a\xfbH\xd9,\xb4u\v\x10\xfa\xa6\xad\xf3\x19\xd1N\xc0\xbb,\xdf\x06^\xaeB\x9e\r\xc4Ρ\x01봩\xae\xfa\xc8H\xf6\xd2\xc6\xc4E;w\xe0 \xc6\xd6\xd9;\x0f\x96\x0es\xe7\x8d~{\xfb{\xee\xef\x00\xe9\xef9\x88\t\a0\f\xb90:Ak\xe7\xc4&\xca\xc2\xcf$6뤦\xf0\x87%\xbe[\x9b\x15ֹdkՖ\x84\xc2D\xce\xc5lj\xeb\xe7V^\x96\xcc\a\xfd?/\xb2˱\x03\xd6\xfa<\x17*ʁ\x9d z\xe5\xe7V*\x16@\xf9#\x8ay(\xd9\\,\x89\\\x83\xf0\xfdz\x82\x81\\\xaa\x1b^\x04>\xbeI\xf8P\x1b]|\xd9\xf1\u1a9aݰ\xa0\xee\x18\xbe$\x1dk\x85\xe6\xfb\n\x83\x1dN\x9ef\xf5\x17\x85\xcdJ\xbbv\xea\x83 \x17:\xfd`a'\x8du\r\xb2\xd10\xa5\xe5Kҷ;˩kc^x\x94\xfb\xc9\xcfm%\xe3\xf6\xfa\xa9\xbe\xd0\x1f\xbf\xf8\x1dj|=\x86 w \x1d\xa0Jt\xa98iDƀ\x17\xf1\xec\x88\x17d\x88\xf5{MCU汄X\xb1$J5\x93_jO\xf8Q\xc8\xec\xad\xd8\xe8d\x8e\xba\x9cq\xccM\xeb\xd6#\xf8\xb9\x9dJ\x8d\\<˼\xccA\xe4Ĉh\x92S\xb4!s\xec\xca\x00<\t\xe9\xd8#\x11dvONG\x83Lt^d\xe8\x10\xb6\xb8ӆ\xf5\xdd\xca\x14k\xd7\x1f\xe4B\x8f\xdf;\xf6\x9b\x80\x9d\x90Yi\xa2\xad\xeeBn,;!\x05\xc3\xf3\xba\a\x9fX\x14VL\xbe\xa8tttH;\xe7\t\n\xb3$\xa0\xfdf\xf0\xb5\xc3\xc7\xc2H\x92E=\x17A\xce@\xe4\xf8\xb2\x1bA\x06\x11\x15\xea8\x16B\xce\xc0d,\xdeC\xc8\xf7\x102\x0e\xee{\b\xf9\x1eBη\xf7\x10\xf2=\x84\x8c\x99\xf0\x1eB\xbe\x87\x90\xcbQ\xf8߇\x90\xf3\x98\xad8\xf79\xfas\x046Q%\x04\xd3\xc8N\xae\x12\xaaa\xae\xb2\xd2:4\xf15\xb77\xc3\xf3\x06\xea\xaf\x13?d\xc5\x0fs\x86e\xa3)\xb7h\\V]\x84K\xcaV)\x8a\xafן\x8d\x8e#\x8bk\xc7\xea\xb4\xe3J\xb9\xe6\n\xb8\xba5\xc8u\xf1TU\x849\xaa\xc4j\xa6\xb0j\xba\x84[Wk\x8cP\xb1\x93\x80\xef\x92\xcftʈ\u007f\x85ԛ\xad}\x1a\xafx\n7r\xe8\xc4\xe1\xe3\xba\xfb\x8bӡ\xfe\t\x9e\xa4\xdb\x0fn\x8aߠ\xd0qQ=\xb4\v\xa3+Y\fo\xbc\xfaT\x05m@\xc9l\xb8\xa6\x81\b^\xcd\xef\x90\x1b~*\xfc\xa1\xf4E\xfa;wL\x8a\xad\x91zqeT\xb7\xeei\xd4\xc0/\xbf\xc0[RV\x1e_\xfb4W\xaa\xb4\xa4\xe2\xa9]\xcd4\x012\xb6\xce)\xee\xc4;[\xd3\xf4\x82J\xa6\xe8\xba\xcaW\xb9\xae\x8c\xabUz\x8b\n\xa5\x05uI\xddz\xa3\x19\xb8˪\x91\"\xc9\x14Sy\xb4\xb8\xde(\xd4\xf6\xcc\xec'\xa2\xcah\xb4zh\x06\xf4@\x1d\xd3|\xcd\xd0\x1c\xf9;\xa8\xbcJ\xa5\xd0\v\xea\x83^\xb7\x8e\xf8\xb5\xa2\xee\xa9j\x9f\x88\x1a\x9f\x88\xb8|\x0eӈ*\x9ee\xb5;\x114|a\x9dN]\x853\xba\xf6\xd2\xea\x9cn\xed\xcd(ؘ\x9a\x9c\x91\x8a\x9bQ\x98\x93\x958\xb1u6\xa3\xd0g\xdd\xf7\x8c\xe4L\xfel\x95(\xec^WOZg#\xbf\xdb\xee\xf8\x81\xa3W\xf5\xa05\xc9t\x99\xd6\xf0\x87\xb7\xc7/\xff\x8f\xf0힝\v?\xf4K\x9a'\x90\xc1}T\xa1\\\xff\x85\xe4\xf0\xebd\xf8\xe5G1\xeb\xb4\x11\x0f\xf8E'\xad\xcf7LѤ;\xbe\xf3:?0\xbfJ\xb6\x84\xaa\xa4\xe1\xb05\xec\xa8\x0f\xaeɱ\x86\x17\xc2\xcdy\x950\x1d\x96\x8bI\xcdu.\x9b\xdd\xd4\xdd\xdd\x17\xbf\x11's\\\u007f.\xfd1xU\bc\x91h[m\xd0Oڎ\x19\x88\xbd~\x82L\x87\xdd\xff\xd0\xc7\xdf gs\xf9\xbc\xbdx\x17\xfeut%\x90\x15\xb9\xe6E\xf8~x^+\xf2n1\x8d\x8f~c\xb2;\x06IX\xab\x13)\xf8M\xa8t\xe1\x19\xc7[<\xe8\x1dw\b#J?\xe4\xc7VC\x0f\xe8W\xf5k\xfe\xb3\x19\xa0\xd6\tW\xda\xf9\xcf!\xf00HD\xe1J\x13\x92\xa4Ii\xf8i/\x81@\xff\x02v\xf9\a\x112a\x9d\x17\xac\xc9\xef\x0e|\xa9\x875Q\xbau>\xdbZi\x1e<\t\xcb_\x1c\xf0\xb9Vi\xbb\x9f\x92i\xb7\x91o\x0e\xec\xb4Ʌ\xdb@*\x1c\xae\bv\xef\xf7I\xcb4\xcal~\xfa<\xb9\xbbo4\xa2\xbe\xd1\td\xe5iՃ鑝\f\xa5\xecW\xf0\x15\x9fN\xfa\xae\x15!\xdeϥ\xf9\xac<\xa6\xf7\xf5\xd7nb7\xd5|\x1f\x87/AN\x14\xa0\xab\xb3\xbd\xc1\xbdL\r\x9d\xf8\x1bx\xfe\xc2\xc3\xc2\xef婡\xe5\xe3WB;\xf9C\xef\xb7\x11-\x9c\xd0\xc0a\xed\x1bP\x92^W\xf3E\xa4\x8f\xcd\u007f\xbc\xf4*|\x01\xe9\xe0\xef\x0e\xf9\x93CiKV\x82g\n=\x8d\xe6\x89$\xc1\u0085L`\xfbSH\xe7\xe7\xfcO\xf5\xa5#\xfe7\xd1\xcaǀv\x03\u007f\xfb\xfb\x19\x04/r_\xe1A\x9d\xff\r\x00\x00\xff\xfff\xf9\xa5\xc0=J\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VMo\xe36\x10\xbd\xebW\f\xb6\x87\xbdT\xf2\x06{)t+\xd2\x16\b\xda\x06A\xbcͥ\xe8\x81&G\xf64\x14\xa9r\x86N\xdd__\x90\x94b[\x967\xbb\x87\xd5M\xa3\xf9x|\xf3fĪ\xae\xebJ\r\xf4\x84\x81ɻ\x16\xd4@\xf8\xaf\xa0Ko\xdc<\xff\xc0\r\xf9\xd5\xfef\x83\xa2n\xaagr\xa6\x85\xdb\xc8\xe2\xfbGd\x1f\x83Ɵ\xb0#GB\xdeU=\x8a2JT[\x01(缨d\xe6\xf4\n\xa0\xbd\x93\xe0\xad\xc5Po\xd15\xcfq\x83\x9bH\xd6`\xc8\x15\xa6\xfa\xfb\x0f\xcd\xc7\xe6C\x05\xa0\x03\xe6\xf0O\xd4#\x8b\xea\x87\x16\\\xb4\xb6\x02p\xaa\xc7\x16\x18C\n\x12%\x91\x03\xfe\x13\x91\x85\x9b=Z\f\xbe!_\xf1\x80:\x15\xde\x06\x1f\x87\x16\x8e\x1fJ\xfc\b\xaa\x1ch\x9dS\xads\xaaǒ*\u007f\xb5\xc4\xf2\xeb5\x8f\xdfh\xf4\x1al\f\xca.\x03\xca\x0eLn\x1b\xad\n\x8b.\x15\xc0\x100\u007f\xf8\xc3=;\xff\xe2~!\xb4\x86[\xe8\x94e\xac\x00X\xfb\x01[\xb8O\xa8\a\xa5\xd1T\x00{e\xc9dz\xca9\xfc\x80\xeeLJ\xbb\xa7\x8fk\xbd\xc3^\x15#\x80Aց\x86\xec\xb7t\x06 \x06\x05#\x12\x10\x0fJkd\x06\x1dC@'P\x90\x02\xb9·>\x97\x1b\x13\x03\xa8\x8d\x8f\x02\xb2Cx\xcaԎgkF\x87!\xf8\x01\x83\xd0Dt\x0e9\xca\xec\xd56\xc3\xf8>\x1d\xa2\xf8\x80I\xc2B\xce5Fy\xa0\x01\xce\a\x04߁\xec\x88!`f\xcf\xc99\xba\xccI\aʁ\xdf\xfc\x8dZ\x9a\xf1\xf4\f\xbc\xf3њ\xa4\xc6=\x06\x81\x80\xdao\x1d\xfd\xf7\x9a\x99\x13\r\xa9\xa4U2\xe9`z\xc8\t\x06\xa7l\xa2?\xe2\xf7\xa0\x9c\x81^\x1d `\xaa\x01ѝd\xcb.\xdc\xc0\xef>`&\xb0\x85\x9d\xc8\xc0\xedj\xb5%\x99\x06K\xfb\xbe\x8f\x8e\xe4\xb0\xca\xe3A\x9b(>\xf0\xca\xe0\x1e\xed\x8ai[\xab\xa0w$\xa8%\x06\\\xa9\x81\xea\f\xdc\xe5\xb9jz\xf3]\x18\xa7\x90ߟ \x95C\x12\fK \xb7}5g\xa9_\xe5=ɼ\xa8\xa1\x84\x15\xfcGz\x93)\xb1\xf2\xf8\xf3\xfa\x13LEs\v\xce9\xcfl\x1f\xc3\xf8H|\"\x8a\\\x87\xa14\xae\v\xbe\xcf\x19љ\xc1\x93+ZҖН\x93\xceqӓ\xf0\xa4\xd2ԟ\x06n\xf3z\x81\rB\x1c\x8c\x124\r\xdc9\xb8U=\xda[\xc5\xf8\xcdiO\fs\x9d(}\x9b\xf8ӭx\xeeX\xd8z5O+k\xb1C\vӻ\x1eP\xa7\x9e%\xe2R,u\xa4\xf3\x18@\xe7\x03\xa8\xa5\x90\xe6M\f\xd9\xfb\xabP\x8c;\xa2\xe0\x98m\x8e4\x83o\xe1XZ\x15پS\x8c\xe7\xa6\x19\x9a\x87\xe41\xafl\xa9C}\xd0\x16K\x82\xb2)\xf0-\x10\xe9A\x17\xfby\xbd\x1a\xee\xf1\xe5\xc2\xf6\x10|ړy\x15\x9f>\x8b\xfd\x87\xf2\x8fؒ\xe3ϟ\xa6\xf8\xe4\xbf\xce\xe9\xca=Y\xb5c\x1a\bѹ4\x91\xde%\xf3,)\x9co\xe4\xd9W\x12\xec/p,\"\xb9s\x9d\xcf\u007fm\x95J*)s\x82cS\xc7\x1a\x05\xd1E\xbak=-\xcf|\x15}\x01\x81\xe5\xc9\u007f\xfe\xaf\x0fL\xab\x83\x02.Ԭ3\x96\x05s\xaata^\x9c\x98\x11Y\xb4Vm,\xb6 !\xce#K\x9c\nA\x1d\xceU1\xc9\xe8x\xc7\xf9\xac@.ܓ\xf6_v\xe8\xae)\x1c^\x14/\xf5\xa6\xa4\x81\xcd\xe1Z\xe0\xed\xebem>$E\x96-\xa4\xad[\v]\xb0\xf4\x05D,t\xa9Hu\xe1vpA\xc2\xfa\xd4s\x9a\xfd3\xc1O\x97\x859\xf2+\xc5\x17\x9a:3\x1d\xef\xa67Ƿ,\xecz\xbc\x8b\xe6\x0f\xe3)\xcc\xc9\xc9Y|Pۉ\x8b\xe3nM\u05ecA\xd0\xdc\xcfo\xa2\xefޝ])\xf3\xab\xf6\xceP\xb9Hß\u007fU%+\x9a\xa7\tG2\xfe\x1f\x00\x00\xff\xff\xee@m\x0f\xc7\v\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4V\xc1\x8e\xdc6\f\xbd\xfb+\x88\xf4\x90K\xed\xc9\"\x97·`\xdb\x02A\xd3`\x91M\xe6R\xf4\xa0\x91\xe8\x19veI\x15)\xa7ۯ/$\xcb;\xe3ٙ\xa4E\x11\xdfDS\xe4\xe3\xe3#\xa1\xa6m\xdbF\x05\xdabd\xf2\xae\a\x15\b\xff\x12t\xf9\xc4\xdd\xc3\x0fܑ\xdfL7;\x14u\xd3<\x903=\xdc&\x16?~@\xf6)j\xfc\x11\ar$\xe4]3\xa2(\xa3D\xf5\r\x80r\u038b\xcaf\xceG\x00\xed\x9dDo-\xc6v\x8f\xae{H;\xdc%\xb2\x06cɰ\xe4\x9f^u\xaf\xbbW\r\x80\x8eX\xae\u007f\xa4\x11Y\xd4\x18zp\xc9\xda\x06\xc0\xa9\x11{\x98\xbcM#\xb2S\x81\x0f^\xac\xd7s\xb2nB\x8b\xd1w\xe4\x1b\x0e\xa8s\xee}\xf4)\xf4p\xfc1\x87\xa8\xb8暶%\xda}\x8d\xf6\xaeF+\x0e\x96X~\xf9\x82\xd3;b)\x8e\xc1\xa6\xa8\xecUdŇ\xc9\xed\x93U\xf1\x9aW\x03\x10\"2\xc6\t?\xb9\a\xe7?\xbb\x9f\t\xad\xe1\x1e\x06e\x19\x1b\x00\xd6>`\x0f\xefs\x05Ai4\r\xc0\xa4,\x99r\u007f\xae\xc9\ato\xee\xden_\xdf\xeb\x03\x8ej6\x02\x18d\x1d)\x14\xbf+\xc5\x001(X\xd0\xc0\xe7\x03F\x84ma\x0eX|D\xae\xc0kH\x80\xa5\x02\xee\xaa)D\x1f0\n-\x04\xe7\xefDaO\xb63_\x9b\xf1\x1f\xe9ͦ\xccʇ\x9f\xee?\u0092\xb4\xb4`\xcdya\xfbx\x8d\x8f\xc4g\xa2\xc8\r\x18\xe7\xc6\rя%\":\x13<9)\am\tݚtN\xbb\x91$w\xfaτ,\xb9?\x1dܖ\xcd\x02;\x84\x14\x8c\x124\x1d\xbcup\xabF\xb4\xb7\x8a\xf1\x9bӞ\x19\xe66S\xfau\xe2O\x17\xe2\xdaqf\xeb8DuU]\xec\xd0\xe5I\xbd\x0f\xa8W\x83\x92c\xd0@ur\a\x1fA\xadجS|9Zw\xe2zi\x80a\xde\xe0\x03\xed\xd76\x00eL\xd9\xfe\xca\xde]\xb9w\x95\x9e\v\xb5ޖ\x1cY\x8e\xb9\x80\x10\xfdD\x06c\xbb\xd4V1\xa4X\x8b,\xbb\xb1k.\xe5:c\xb8\x16V\u009d\xc3[!\xb8\xabN\x19C\xa6u\xb94\xef\x1d\xac\xeb\xaf,C\xb5\xc7˹\x9fՙ\x15L\x11WS\xd8>\x85\xfe\xaa:DI\xe2\xff\xaa\x8fr\xa9z\xee\xaaFt\x8a\x11\x9dԈ\xe0\x87\x15|\xf5\xff5\x12\x0e\x8a\xf1\x8b\xfc^\x8e}\x97\xef-\x94[\x1aP?Z\x9c\xa3\x95m\xfeLP\xff\x1ai\xfeХ\xf1\x1cT\vo&EV\xed,>\xfb\xf3ɩ+\xff\xae\xf4\xf7B\xdb\xceL\xc7\a\xce\xcd\xf1T\xc8k\x97\a\xcd\xcd\xfcB\xc8K\xd3\xf4 1\xcdɫҪ\xe5\xa8\x05\xa55\x06A\xf3\xfe\xfc-\xf3\xe2\xc5\xea9R\x8eڻyL\xb9\x87\xdf~o\xe6\xa8h\xb6\v\x8el\xfc'\x00\x00\xff\xff\xbcn\x89\xa9\f\n\x00\x00"), } var CRDs = crds() diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml new file mode 100644 index 000000000..9406b2529 --- /dev/null +++ b/config/rbac/role.yaml @@ -0,0 +1,28 @@ + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: manager-role +rules: +- apiGroups: + - velero.io + resources: + - backupstoragelocations + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - velero.io + resources: + - backupstoragelocations/status + verbs: + - get + - patch + - update diff --git a/go.mod b/go.mod index 57696720d..e2aa4c19d 100644 --- a/go.mod +++ b/go.mod @@ -9,40 +9,75 @@ require ( github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 github.com/Azure/go-autorest/autorest/to v0.3.0 github.com/Azure/go-autorest/autorest/validation v0.2.0 // indirect - github.com/aws/aws-sdk-go v1.13.12 + github.com/aws/aws-sdk-go v1.28.2 github.com/docker/spdystream v0.0.0-20170912183627-bc6354cbbc29 // indirect github.com/evanphx/json-patch v4.5.0+incompatible - github.com/go-ini/ini v1.28.2 // indirect github.com/gobwas/glob v0.2.3 github.com/gofrs/uuid v3.2.0+incompatible github.com/golang/protobuf v1.4.2 github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd github.com/hashicorp/go-plugin v0.0.0-20190610192547-a1bc61569a26 - github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 // indirect github.com/joho/godotenv v1.3.0 - github.com/kubernetes-csi/external-snapshotter/v2 v2.1.0 + github.com/kubernetes-csi/external-snapshotter/v2 v2.2.0-rc1 github.com/onsi/ginkgo v1.13.0 github.com/onsi/gomega v1.10.1 github.com/pkg/errors v0.8.1 github.com/prometheus/client_golang v1.0.0 - github.com/robfig/cron v0.0.0-20170309132418-df38d32658d8 + github.com/robfig/cron v1.1.0 github.com/sirupsen/logrus v1.4.2 - github.com/smartystreets/goconvey v1.6.4 // indirect github.com/spf13/afero v1.2.2 github.com/spf13/cobra v0.0.5 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 - golang.org/x/net v0.0.0-20200625001655-4c5254603344 - golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect - golang.org/x/text v0.3.3 // indirect - google.golang.org/grpc v1.27.0 - google.golang.org/protobuf v1.25.0 // indirect - k8s.io/api v0.17.4 - k8s.io/apiextensions-apiserver v0.17.4 - k8s.io/apimachinery v0.17.4 - k8s.io/cli-runtime v0.17.4 - k8s.io/client-go v0.17.4 + golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7 + google.golang.org/grpc v1.28.0 + k8s.io/api v0.18.4 + k8s.io/apiextensions-apiserver v0.18.4 + k8s.io/apimachinery v0.18.4 + k8s.io/cli-runtime v0.18.4 + k8s.io/client-go v0.18.4 k8s.io/klog v1.0.0 - k8s.io/utils v0.0.0-20191218082557-f07c713de883 // indirect - sigs.k8s.io/controller-runtime v0.5.2 + sigs.k8s.io/controller-runtime v0.6.1 ) + +replace k8s.io/api => k8s.io/api v0.18.4 + +replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.18.4 + +replace k8s.io/apimachinery => k8s.io/apimachinery v0.18.4 + +replace k8s.io/apiserver => k8s.io/apiserver v0.18.4 + +replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.18.4 + +replace k8s.io/client-go => k8s.io/client-go v0.18.4 + +replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.18.4 + +replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.18.4 + +replace k8s.io/code-generator => k8s.io/code-generator v0.18.4 + +replace k8s.io/component-base => k8s.io/component-base v0.18.4 + +replace k8s.io/cri-api => k8s.io/cri-api v0.18.4 + +replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.18.4 + +replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.18.4 + +replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.18.4 + +replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.18.4 + +replace k8s.io/kubectl => k8s.io/kubectl v0.18.4 + +replace k8s.io/kubelet => k8s.io/kubelet v0.18.4 + +replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.18.4 + +replace k8s.io/metrics => k8s.io/metrics v0.18.4 + +replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.18.4 + +replace k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.18.4 diff --git a/go.sum b/go.sum index fa62da030..16d5a2ef9 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -9,6 +10,7 @@ cloud.google.com/go v0.46.2/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v42.0.0+incompatible h1:yz6sFf5bHZ+gEOQVuK5JhPqTTAmv+OvSLSaqgzqaCwY= github.com/Azure/azure-sdk-for-go v42.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -38,8 +40,10 @@ github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7 github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= github.com/Azure/go-autorest/autorest/to v0.3.0 h1:zebkZaadz7+wIQYgC7GXaz3Wb28yKYfVkkBKwc38VF8= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/autorest/validation v0.2.0 h1:15vMO4y76dehZSq7pAaOLQxC6dZYsSrj2GQpflyM/L4= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= @@ -48,8 +52,15 @@ github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VY github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/hcsshim v0.0.0-20190417211021-672e52e9209d/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OpenPeeDeeP/depguard v1.0.0/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -57,83 +68,127 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Rican7/retry v0.1.0/go.mod h1:FgOROf8P5bebcC1DS0PdOQiqGUridaZvikzUmkFW6gg= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.13.12 h1:+L7aikwNnPSzdbgbbcAc0M9spXpvD64Kug3w6CnJxnw= -github.com/aws/aws-sdk-go v1.13.12/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-sdk-go v1.28.2 h1:j5IXG9CdyLfcVfICqo1PXVv+rua+QQHbkXuvuU/JF+8= +github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/bazelbuild/bazel-gazelle v0.18.2/go.mod h1:D0ehMSbS+vesFsLGiD6JXu3mVEzOlfUl8wNnq+x/9p0= +github.com/bazelbuild/bazel-gazelle v0.19.1-0.20191105222053-70208cbdc798/go.mod h1:rPwzNHUqEzngx1iVBfO/2X2npKaT3tqPqqHW6rVsn/A= +github.com/bazelbuild/buildtools v0.0.0-20190731111112-f720930ceb60/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= +github.com/bazelbuild/buildtools v0.0.0-20190917191645-69366ca98f89/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= +github.com/bazelbuild/rules_go v0.0.0-20190719190356-6dae44dc5cab/go.mod h1:MC23Dc/wkXEyk3Wpq6lCqz0ZAYOZDw2DR5y3N1q2i7M= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/prettybench v0.0.0-20150116022406-03b8cfe5406c/go.mod h1:Xe6ZsFhtM8HrDku0pxJ3/Lr51rwykrzgFwpmTzleatY= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu v0.0.0-20181120144056-17b0214f6c48/go.mod h1:TrMrLQfeENAPYPRsJuq3jsqdlRh3lvi6trTZJG8+tho= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= github.com/container-storage-interface/spec v1.1.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/console v0.0.0-20170925154832-84eeaae905fa/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/containerd v1.0.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/typeurl v0.0.0-20190228175220-2a93cfde8c20/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coredns/corefile-migration v1.0.6/go.mod h1:OFwBp/Wc9dJt5cAZzHWMNhK1r5L0p0jDwIBc6j8NC8E= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.8.0-dev.2.0.20190925143933-c8a5fca4a652/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docker/spdystream v0.0.0-20170912183627-bc6354cbbc29 h1:llBx5m8Gk0lrAaiLud2wktkX/e8haX7Ru0oVfQqtZQ4= github.com/docker/spdystream v0.0.0-20170912183627-bc6354cbbc29/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e h1:p1yVGRW3nmb85p1Sh1ZJSDm4A4iKLS5QNbvUHMgGu/M= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-ini/ini v1.28.2 h1:drmmYv7psRpoGZkPtPKKTB+ZFSnvmwCMfNj5o1nLh2Y= -github.com/go-ini/ini v1.28.2/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= +github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/zapr v0.1.0 h1:h+WVe9j6HAA01niTJPA/kKH0i7e0rLZBCwauQFcRE54= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -177,48 +232,86 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.0.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/go-tools v0.0.0-20190318055746-e32c54105b7c/go.mod h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.18.0/go.mod h1:kaqo8l0OZKYPtjNmG4z4HrWLgcYNIJ9B9q3LWri9uLg= +github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547/go.mod h1:0qUabqiIQgfmlAmulqxyiGkkyF6/tOGSnY2cnPVwrzU= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.35.0/go.mod h1:1nql6U13uTHaLYB8rLS5x9IJc2qT6Xd/Tr1sTX6NE48= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= 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= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -229,15 +322,18 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ 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/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.2.0 h1:l6N3VoaVzTncYYW+9yOz2LJJammFZGBO13sqgEhpy9g= +github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= @@ -246,80 +342,127 @@ github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd h1:rNuUHR+CvK1I github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-plugin v0.0.0-20190610192547-a1bc61569a26 h1:sADP8l/FAtMyWJ9GIcQT/04Ae80ZZ75ogOrtW0DIZhc= github.com/hashicorp/go-plugin v0.0.0-20190610192547-a1bc61569a26/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= -github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 h1:12VvqtR6Aowv3l/EQUlocDHW2Cp4G9WJVH7uyH8QFJE= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kubernetes-csi/csi-lib-utils v0.7.0/go.mod h1:bze+2G9+cmoHxN6+WyG1qT4MDxgZJMLGwc7V4acPNm0= github.com/kubernetes-csi/csi-test v2.0.0+incompatible/go.mod h1:YxJ4UiuPWIhMBkxUKY5c267DyA0uDZ/MtAimhx/2TA0= -github.com/kubernetes-csi/external-snapshotter/v2 v2.1.0 h1:a1cpbNAdOTHO7Lk5UO5tjcbYPEEamIxmzATt+pKoDhc= -github.com/kubernetes-csi/external-snapshotter/v2 v2.1.0/go.mod h1:dV5oB3U62KBdlf9ADWkMmjGd3USauqQtwIm2OZb5mqI= +github.com/kubernetes-csi/external-snapshotter/v2 v2.2.0-rc1 h1:/71hejlH+46ySQJf7iZMOnuYaZNVNXq1lx6vIPqgUFE= +github.com/kubernetes-csi/external-snapshotter/v2 v2.2.0-rc1/go.mod h1:ArR2bKKq4dEfoRwRH69kt/xYOliLUlaqCZ+LM1teU8Q= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= +github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mesos/mesos-go v0.0.9/go.mod h1:kPYCMQ9gsOXVAle1OsoY4I1+9kPu8GHkf88aV59fDr4= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v2.1.1+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= +github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= @@ -327,126 +470,173 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.2 h1:uqH7bpe+ERSiDa34FDOF7RikN6RzXgduUF8yarlZp94= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.13.0 h1:M76yO2HkZASFjXL0HSoZJ1AYEmQxNJmY41Jx1zNUq1Y= github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.8.1 h1:C5Dqfs/LeauYDX0jJXIe2SWmwCbGzx9yF8C8xy3Lh34= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v1.0.0-rc10/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runtime-spec v1.0.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.3.1-0.20190929122143-5215b1806f52/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/pquerna/ffjson v0.0.0-20180717144149-af8b230fcd20/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.11 h1:DhHlBtkHWPYi8O2y31JkK0TF+DGM+51OopZjH/Ia5qI= +github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/robfig/cron v0.0.0-20170309132418-df38d32658d8 h1:b904/jbnmYuSPd5ojGzVTLjKPVTSj3t/e1vEPiPGjEg= -github.com/robfig/cron v0.0.0-20170309132418-df38d32658d8/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/robfig/cron v1.1.0 h1:jk4/Hud3TTdcrJgUOBgsqrZBarcxl6ADIjSC2iniwLY= +github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= +github.com/spf13/afero v1.1.0/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.2/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20190721030226-87058b9bfcec/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.1/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/quicktemplate v1.1.1/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +golang.org/x/build v0.0.0-20190927031335-2835ba2e683f/go.mod h1:fYw7AShPAhGMdXqA9gRadk/CcMsvLlClpE5oBwnS3dM= +golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190424203555-c05e17bb3b2d/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -460,18 +650,24 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190502183928-7f726cade0ab/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -479,55 +675,61 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7 h1:AeiKBIuRw3UomYXSbLy0Mc2dDLfdtbT/IVn4keq83P0= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20171026204733-164713f0dfce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190122071731-054c452bb702/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220220014-0732a990476f h1:72l8qCJ1nGxMGH26QVBVIxKd/D34cfGt0OvrPtpemyY= golang.org/x/sys v0.0.0-20191220220014-0732a990476f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -535,20 +737,29 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190121143147-24cd39ecf745/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190122202912-9c309ee22fab/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -556,18 +767,22 @@ golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190909030654-5b82db07426d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.0.1 h1:xyiBuvkD2g5n7cYzx6u2sxQvsAy4QJsZFCzGVdzOXZ0= gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -586,30 +801,24 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191220175831-5c49e3ecc1c1 h1:PlscBL5CvF+v1mNR82G+i4kACGq2JQvKDnNq7LSS65o= google.golang.org/genproto v0.0.0-20191220175831-5c49e3ecc1c1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/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= @@ -617,78 +826,100 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogR gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gotest.tools v2.1.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/gotestsum v0.3.5/go.mod h1:Mnf3e5FUzXbkCfynWBGOwLssY7gTQgCHObK9tMpAriY= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.2/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= -k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= -k8s.io/api v0.17.4 h1:HbwOhDapkguO8lTAE8OX3hdF2qp8GtpC9CW/MQATXXo= -k8s.io/api v0.17.4/go.mod h1:5qxx6vjmwUVG2nHQTKGlLts8Tbok8PzHl4vHtVFuZCA= -k8s.io/apiextensions-apiserver v0.17.2/go.mod h1:4KdMpjkEjjDI2pPfBA15OscyNldHWdBCfsWMDWAmSTs= -k8s.io/apiextensions-apiserver v0.17.4 h1:ZKFnw3cJrGZ/9s6y+DerTF4FL+dmK0a04A++7JkmMho= -k8s.io/apiextensions-apiserver v0.17.4/go.mod h1:rCbbbaFS/s3Qau3/1HbPlHblrWpFivoaLYccCffvQGI= -k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.1-beta.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.4 h1:UzM+38cPUJnzqSQ+E1PY4YxMHIzQyCg29LOoGfo79Zw= -k8s.io/apimachinery v0.17.4/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= -k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo= -k8s.io/apiserver v0.17.4/go.mod h1:5ZDQ6Xr5MNBxyi3iUZXS84QOhZl+W7Oq2us/29c0j9I= -k8s.io/cli-runtime v0.17.4 h1:ZIJdxpBEszZqUhydrCoiI5rLXS2J/1AF5xFok2QJ9bc= -k8s.io/cli-runtime v0.17.4/go.mod h1:IVW4zrKKx/8gBgNNkhiUIc7nZbVVNhc1+HcQh+PiNHc= -k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= -k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI= -k8s.io/client-go v0.17.4 h1:VVdVbpTY70jiNHS1eiFkUt7ZIJX3txd29nDxxXH4en8= -k8s.io/client-go v0.17.4/go.mod h1:ouF6o5pz3is8qU0/qYL2RnoxOPqgfuidYLowytyLJmc= -k8s.io/code-generator v0.0.0-20191121015212-c4c8f8345c7e/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.17.4/go.mod h1:l8BLVwASXQZTo2xamW5mQNFCe1XPiAesVq7Y1t7PiQQ= -k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc= -k8s.io/component-base v0.17.2/go.mod h1:zMPW3g5aH7cHJpKYQ/ZsGMcgbsA/VyhEugF3QT1awLs= -k8s.io/component-base v0.17.4/go.mod h1:5BRqHMbbQPm2kKu35v3G+CpVq4K0RJKC7TRioF0I9lE= +k8s.io/api v0.18.4 h1:8x49nBRxuXGUlDlwlWd3RMY1SayZrzFfxea3UZSkFw4= +k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4= +k8s.io/apiextensions-apiserver v0.18.4 h1:Y3HGERmS8t9u12YNUFoOISqefaoGRuTc43AYCLzWmWE= +k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio= +k8s.io/apimachinery v0.18.4 h1:ST2beySjhqwJoIFk6p7Hp5v5O0hYY6Gngq/gUYXTPIA= +k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= +k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8= +k8s.io/cli-runtime v0.18.4 h1:IUx7quIOb4gbQ4M+B1ksF/PTBovQuL5tXWzplX3t+FM= +k8s.io/cli-runtime v0.18.4/go.mod h1:9/hS/Cuf7NVzWR5F/5tyS6xsnclxoPLVtwhnkJG1Y4g= +k8s.io/client-go v0.18.4 h1:un55V1Q/B3JO3A76eS0kUSywgGK/WR3BQ8fHQjNa6Zc= +k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g= +k8s.io/cloud-provider v0.18.4/go.mod h1:JdI6cuSFPSPANEciv0v5qfwztkeyFCVc1S3krLYrw0E= +k8s.io/cluster-bootstrap v0.18.4/go.mod h1:hNG705ec9SMN2BGlJ81R2CnyJjNKfROtAxvI9JXZdiM= +k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= +k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vXfPk= +k8s.io/cri-api v0.18.4/go.mod h1:OJtpjDvfsKoLGhvcc0qfygved0S0dGX56IJzPbqTG1s= +k8s.io/csi-translation-lib v0.18.4/go.mod h1:FTci2m8/3oN8E+8OyblBXei8w4mwbiH4boNPeob4piE= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kubernetes v1.14.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20191218082557-f07c713de883 h1:TA8t8OLS8m3/0dtTckekO0pCQ7qMnD19fsZTQEgCSKQ= -k8s.io/utils v0.0.0-20191218082557-f07c713de883/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/klog/v2 v2.0.0 h1:Foj74zO6RbjjP4hBEKjnYtjjAhGg4jNynUdYF6fJrok= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/kube-aggregator v0.18.4/go.mod h1:xOVy4wqhpivXCt07Diwdms2gonG+SONVx+1e7O+GfC0= +k8s.io/kube-controller-manager v0.18.4/go.mod h1:GrY1S0F7zA0LQlt0ApOLt4iMpphKTk3mFrQl1+usrfs= +k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6 h1:Oh3Mzx5pJ+yIumsAD0MOECPVeXsVot0UkiaCGVyfGQY= +k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-proxy v0.18.4/go.mod h1:h2c+ckQC1XpybDs53mWhLCvvM6txduWVLPQwwvGqR9M= +k8s.io/kube-scheduler v0.18.4/go.mod h1:vRFb/8Yi7hh670beaPrXttMpjt7H8EooDkgwFm8ts4k= +k8s.io/kubectl v0.18.4/go.mod h1:EzB+nfeUWk6fm6giXQ8P4Fayw3dsN+M7Wjy23mTRtB0= +k8s.io/kubelet v0.18.4/go.mod h1:D0V9JYaTJRF+ry+9JfnM4uyg3ySRLQ02XjfQ5f2u4CM= +k8s.io/kubernetes v1.18.0/go.mod h1:z8xjOOO1Ljz+TaHpOxVGC7cxtF32TesIamoQ+BZrVS0= +k8s.io/legacy-cloud-providers v0.18.4/go.mod h1:Mnxtra7DxVrODfGZHPsrkLi22lwmZOlWkjyyO3vW+WM= +k8s.io/metrics v0.18.4/go.mod h1:luze4fyI9JG4eLDZy0kFdYEebqNfi0QrG4xNEbPkHOs= +k8s.io/repo-infra v0.0.1-alpha.1/go.mod h1:wO1t9WaB99V80ljbeENTnayuEEwNZt7gECYh/CEyOJ8= +k8s.io/sample-apiserver v0.18.4/go.mod h1:j5XH5FUmMd/ztoz+9ch0+hL+lsvWdgxnTV7l3P3Ijoo= +k8s.io/system-validators v1.0.4/go.mod h1:HgSgTg4NAGNoYYjKsUyk52gdNi2PVDswQ9Iyn66R7NI= +k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20200603063816-c1c6865ac451 h1:v8ud2Up6QK1lNOKFgiIVrZdMg7MpmSnvtrOieolJKoE= +k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -sigs.k8s.io/controller-runtime v0.5.2 h1:pyXbUfoTo+HA3jeIfr0vgi+1WtmNh0CwlcnQGLXwsSw= -sigs.k8s.io/controller-runtime v0.5.2/go.mod h1:JZUwSMVbxDupo0lTJSSFP5pimEyxGynROImSsqIOx1A= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= +sigs.k8s.io/controller-runtime v0.6.1 h1:LcK2+nk0kmaOnKGN+vBcWHqY5WDJNJNB/c5pW+sU8fc= +sigs.k8s.io/controller-runtime v0.6.1/go.mod h1:XRYBPdbf5XJu9kpS84VJiZ7h/u1hF3gEORz0efEja7A= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= -sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= 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= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/hack/build-image/Dockerfile b/hack/build-image/Dockerfile index 90cb4cd0d..caf4164f6 100644 --- a/hack/build-image/Dockerfile +++ b/hack/build-image/Dockerfile @@ -22,7 +22,7 @@ ENV GOPROXY=https://proxy.golang.org RUN mkdir -p /go/src/k8s.io WORKDIR /go/src/k8s.io RUN git config --global advice.detachedHead false -RUN git clone -b kubernetes-1.17.0 https://github.com/kubernetes/code-generator +RUN git clone -b v0.18.4 https://github.com/kubernetes/code-generator RUN wget --quiet https://github.com/kubernetes-sigs/kubebuilder/releases/download/v2.3.1/kubebuilder_2.3.1_linux_amd64.tar.gz && \ tar -zxvf kubebuilder_2.3.1_linux_amd64.tar.gz && \ @@ -32,7 +32,7 @@ RUN wget --quiet https://github.com/kubernetes-sigs/kubebuilder/releases/downloa rm kubebuilder_2.3.1_linux_amd64.tar.gz # get controller-tools -RUN go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.2.4 +RUN go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.3.0 # get goimports (the revision is pinned so we don't indiscriminately update, but the particular commit # is not important) diff --git a/pkg/backup/backup.go b/pkg/backup/backup.go index 026aba6b7..945e34e53 100644 --- a/pkg/backup/backup.go +++ b/pkg/backup/backup.go @@ -300,7 +300,7 @@ func (kb *kubernetesBackupper) Backup(log logrus.FieldLogger, backupRequest *Req backupRequest.Status.Progress = &velerov1api.BackupProgress{TotalItems: len(items)} patch := fmt.Sprintf(`{"status":{"progress":{"totalItems":%d}}}`, len(items)) - if _, err := kb.backupClient.Backups(backupRequest.Namespace).Patch(backupRequest.Name, types.MergePatchType, []byte(patch)); err != nil { + if _, err := kb.backupClient.Backups(backupRequest.Namespace).Patch(context.TODO(), backupRequest.Name, types.MergePatchType, []byte(patch), metav1.PatchOptions{}); err != nil { log.WithError(errors.WithStack((err))).Warn("Got error trying to update backup's status.progress.totalItems") } @@ -354,7 +354,7 @@ func (kb *kubernetesBackupper) Backup(log logrus.FieldLogger, backupRequest *Req backupRequest.Status.Progress.ItemsBackedUp = lastUpdate.itemsBackedUp patch := fmt.Sprintf(`{"status":{"progress":{"totalItems":%d,"itemsBackedUp":%d}}}`, lastUpdate.totalItems, lastUpdate.itemsBackedUp) - if _, err := kb.backupClient.Backups(backupRequest.Namespace).Patch(backupRequest.Name, types.MergePatchType, []byte(patch)); err != nil { + if _, err := kb.backupClient.Backups(backupRequest.Namespace).Patch(context.TODO(), backupRequest.Name, types.MergePatchType, []byte(patch), metav1.PatchOptions{}); err != nil { log.WithError(errors.WithStack((err))).Warn("Got error trying to update backup's status.progress") } lastUpdate = nil @@ -433,7 +433,7 @@ func (kb *kubernetesBackupper) Backup(log logrus.FieldLogger, backupRequest *Req backupRequest.Status.Progress.ItemsBackedUp = len(backupRequest.BackedUpItems) patch = fmt.Sprintf(`{"status":{"progress":{"totalItems":%d,"itemsBackedUp":%d}}}`, len(backupRequest.BackedUpItems), len(backupRequest.BackedUpItems)) - if _, err := kb.backupClient.Backups(backupRequest.Namespace).Patch(backupRequest.Name, types.MergePatchType, []byte(patch)); err != nil { + if _, err := kb.backupClient.Backups(backupRequest.Namespace).Patch(context.TODO(), backupRequest.Name, types.MergePatchType, []byte(patch), metav1.PatchOptions{}); err != nil { log.WithError(errors.WithStack((err))).Warn("Got error trying to update backup's status.progress") } diff --git a/pkg/backup/backup_test.go b/pkg/backup/backup_test.go index d4bdc9aa5..63d334a18 100644 --- a/pkg/backup/backup_test.go +++ b/pkg/backup/backup_test.go @@ -2706,9 +2706,9 @@ func (h *harness) addItems(t *testing.T, resource *test.APIResource) { unstructuredObj := &unstructured.Unstructured{Object: obj} if resource.Namespaced { - _, err = h.DynamicClient.Resource(resource.GVR()).Namespace(item.GetNamespace()).Create(unstructuredObj, metav1.CreateOptions{}) + _, err = h.DynamicClient.Resource(resource.GVR()).Namespace(item.GetNamespace()).Create(context.TODO(), unstructuredObj, metav1.CreateOptions{}) } else { - _, err = h.DynamicClient.Resource(resource.GVR()).Create(unstructuredObj, metav1.CreateOptions{}) + _, err = h.DynamicClient.Resource(resource.GVR()).Create(context.TODO(), unstructuredObj, metav1.CreateOptions{}) } require.NoError(t, err) } diff --git a/pkg/backup/rbac.go b/pkg/backup/rbac.go index 20cfaceea..456ae3864 100644 --- a/pkg/backup/rbac.go +++ b/pkg/backup/rbac.go @@ -17,6 +17,8 @@ limitations under the License. package backup import ( + "context" + "github.com/pkg/errors" rbac "k8s.io/api/rbac/v1" rbacbeta "k8s.io/api/rbac/v1beta1" @@ -45,7 +47,7 @@ type v1ClusterRoleBindingLister struct { } func (v1 v1ClusterRoleBindingLister) List() ([]ClusterRoleBinding, error) { - crbList, err := v1.client.List(metav1.ListOptions{}) + crbList, err := v1.client.List(context.TODO(), metav1.ListOptions{}) if err != nil { return nil, errors.WithStack(err) } @@ -62,7 +64,7 @@ type v1beta1ClusterRoleBindingLister struct { } func (v1beta1 v1beta1ClusterRoleBindingLister) List() ([]ClusterRoleBinding, error) { - crbList, err := v1beta1.client.List(metav1.ListOptions{}) + crbList, err := v1beta1.client.List(context.TODO(), metav1.ListOptions{}) if err != nil { return nil, errors.WithStack(err) } diff --git a/pkg/backup/remap_crd_version_action.go b/pkg/backup/remap_crd_version_action.go index be7b8f3d6..eaced726e 100644 --- a/pkg/backup/remap_crd_version_action.go +++ b/pkg/backup/remap_crd_version_action.go @@ -17,6 +17,7 @@ limitations under the License. package backup import ( + "context" "encoding/json" "github.com/pkg/errors" @@ -101,7 +102,7 @@ func (a *RemapCRDVersionAction) Execute(item runtime.Unstructured, backup *v1.Ba } func fetchV1beta1CRD(name string, betaCRDClient apiextv1beta1client.CustomResourceDefinitionInterface) (*unstructured.Unstructured, error) { - betaCRD, err := betaCRDClient.Get(name, metav1.GetOptions{}) + betaCRD, err := betaCRDClient.Get(context.TODO(), name, metav1.GetOptions{}) if err != nil { return nil, errors.Wrapf(err, "error fetching v1beta1 version of %s", name) } diff --git a/pkg/backup/remap_crd_version_action_test.go b/pkg/backup/remap_crd_version_action_test.go index 795414cd8..0a58fb08a 100644 --- a/pkg/backup/remap_crd_version_action_test.go +++ b/pkg/backup/remap_crd_version_action_test.go @@ -17,6 +17,7 @@ limitations under the License. package backup import ( + "context" "encoding/json" "fmt" "io/ioutil" @@ -45,7 +46,7 @@ func TestRemapCRDVersionAction(t *testing.T) { // keep the same one for all 3 tests, since there's little value in recreating it b := builder.ForCustomResourceDefinition("test.velero.io") c := b.Result() - _, err := betaClient.Create(c) + _, err := betaClient.Create(context.TODO(), c, metav1.CreateOptions{}) require.NoError(t, err) a := NewRemapCRDVersionAction(velerotest.NewLogger(), betaClient) @@ -162,7 +163,7 @@ func TestRemapCRDVersionActionData(t *testing.T) { err = json.Unmarshal([]byte(f), &crd) require.NoError(t, err) - _, err = betaClient.Create(&crd) + _, err = betaClient.Create(context.TODO(), &crd, metav1.CreateOptions{}) require.NoError(t, err) // Run method under test @@ -186,7 +187,7 @@ func TestRemapCRDVersionActionData(t *testing.T) { } // Clean up the item created in the test. - betaClient.Delete(crd.Name, &metav1.DeleteOptions{}) + betaClient.Delete(context.TODO(), crd.Name, metav1.DeleteOptions{}) }) } diff --git a/pkg/client/dynamic.go b/pkg/client/dynamic.go index ae8d3671c..63b41b5b6 100644 --- a/pkg/client/dynamic.go +++ b/pkg/client/dynamic.go @@ -17,6 +17,8 @@ limitations under the License. package client import ( + "context" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" @@ -97,21 +99,21 @@ type dynamicResourceClient struct { var _ Dynamic = &dynamicResourceClient{} func (d *dynamicResourceClient) Create(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) { - return d.resourceClient.Create(obj, metav1.CreateOptions{}) + return d.resourceClient.Create(context.TODO(), obj, metav1.CreateOptions{}) } func (d *dynamicResourceClient) List(options metav1.ListOptions) (*unstructured.UnstructuredList, error) { - return d.resourceClient.List(options) + return d.resourceClient.List(context.TODO(), options) } func (d *dynamicResourceClient) Watch(options metav1.ListOptions) (watch.Interface, error) { - return d.resourceClient.Watch(options) + return d.resourceClient.Watch(context.TODO(), options) } func (d *dynamicResourceClient) Get(name string, opts metav1.GetOptions) (*unstructured.Unstructured, error) { - return d.resourceClient.Get(name, opts) + return d.resourceClient.Get(context.TODO(), name, opts) } func (d *dynamicResourceClient) Patch(name string, data []byte) (*unstructured.Unstructured, error) { - return d.resourceClient.Patch(name, types.MergePatchType, data, metav1.PatchOptions{}) + return d.resourceClient.Patch(context.TODO(), name, types.MergePatchType, data, metav1.PatchOptions{}) } diff --git a/pkg/cmd/cli/backup/create.go b/pkg/cmd/cli/backup/create.go index fe310f962..ce8c36b33 100644 --- a/pkg/cmd/cli/backup/create.go +++ b/pkg/cmd/cli/backup/create.go @@ -170,7 +170,7 @@ func (o *CreateOptions) Validate(c *cobra.Command, args []string, f client.Facto } for _, loc := range o.SnapshotLocations { - if _, err := o.client.VeleroV1().VolumeSnapshotLocations(f.Namespace()).Get(loc, metav1.GetOptions{}); err != nil { + if _, err := o.client.VeleroV1().VolumeSnapshotLocations(f.Namespace()).Get(context.TODO(), loc, metav1.GetOptions{}); err != nil { return err } } @@ -245,7 +245,7 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { go backupInformer.Run(stop) } - _, err = o.client.VeleroV1().Backups(backup.Namespace).Create(backup) + _, err = o.client.VeleroV1().Backups(backup.Namespace).Create(context.TODO(), backup, metav1.CreateOptions{}) if err != nil { return err } @@ -285,7 +285,7 @@ func (o *CreateOptions) BuildBackup(namespace string) (*velerov1api.Backup, erro var backupBuilder *builder.BackupBuilder if o.FromSchedule != "" { - schedule, err := o.client.VeleroV1().Schedules(namespace).Get(o.FromSchedule, metav1.GetOptions{}) + schedule, err := o.client.VeleroV1().Schedules(namespace).Get(context.TODO(), o.FromSchedule, metav1.GetOptions{}) if err != nil { return nil, err } diff --git a/pkg/cmd/cli/backup/create_test.go b/pkg/cmd/cli/backup/create_test.go index f35b449f7..8315021bd 100644 --- a/pkg/cmd/cli/backup/create_test.go +++ b/pkg/cmd/cli/backup/create_test.go @@ -17,6 +17,7 @@ limitations under the License. package backup import ( + "context" "testing" "github.com/stretchr/testify/assert" @@ -60,7 +61,7 @@ func TestCreateOptions_BuildBackupFromSchedule(t *testing.T) { expectedBackupSpec := builder.ForBackup("test", testNamespace).IncludedNamespaces("test").Result().Spec schedule := builder.ForSchedule(testNamespace, "test").Template(expectedBackupSpec).ObjectMeta(builder.WithLabels("velero.io/test", "true")).Result() - o.client.VeleroV1().Schedules(testNamespace).Create(schedule) + o.client.VeleroV1().Schedules(testNamespace).Create(context.TODO(), schedule, metav1.CreateOptions{}) t.Run("existing schedule", func(t *testing.T) { backup, err := o.BuildBackup(testNamespace) diff --git a/pkg/cmd/cli/backup/delete.go b/pkg/cmd/cli/backup/delete.go index 302e34b4d..66ea03214 100644 --- a/pkg/cmd/cli/backup/delete.go +++ b/pkg/cmd/cli/backup/delete.go @@ -17,6 +17,7 @@ limitations under the License. package backup import ( + "context" "fmt" "github.com/pkg/errors" @@ -82,7 +83,7 @@ func Run(o *cli.DeleteOptions) error { switch { case len(o.Names) > 0: for _, name := range o.Names { - backup, err := o.Client.VeleroV1().Backups(o.Namespace).Get(name, metav1.GetOptions{}) + backup, err := o.Client.VeleroV1().Backups(o.Namespace).Get(context.TODO(), name, metav1.GetOptions{}) if err != nil { errs = append(errs, errors.WithStack(err)) continue @@ -96,7 +97,7 @@ func Run(o *cli.DeleteOptions) error { selector = o.Selector.String() } - res, err := o.Client.VeleroV1().Backups(o.Namespace).List(metav1.ListOptions{LabelSelector: selector}) + res, err := o.Client.VeleroV1().Backups(o.Namespace).List(context.TODO(), metav1.ListOptions{LabelSelector: selector}) if err != nil { return errors.WithStack(err) } @@ -114,7 +115,7 @@ func Run(o *cli.DeleteOptions) error { for _, b := range backups { deleteRequest := backup.NewDeleteBackupRequest(b.Name, string(b.UID)) - if _, err := o.Client.VeleroV1().DeleteBackupRequests(o.Namespace).Create(deleteRequest); err != nil { + if _, err := o.Client.VeleroV1().DeleteBackupRequests(o.Namespace).Create(context.TODO(), deleteRequest, metav1.CreateOptions{}); err != nil { errs = append(errs, err) continue } diff --git a/pkg/cmd/cli/backup/describe.go b/pkg/cmd/cli/backup/describe.go index 168af36f4..540055636 100644 --- a/pkg/cmd/cli/backup/describe.go +++ b/pkg/cmd/cli/backup/describe.go @@ -17,6 +17,7 @@ limitations under the License. package backup import ( + "context" "fmt" "os" @@ -59,25 +60,25 @@ func NewDescribeCommand(f client.Factory, use string) *cobra.Command { if len(args) > 0 { backups = new(velerov1api.BackupList) for _, name := range args { - backup, err := veleroClient.VeleroV1().Backups(f.Namespace()).Get(name, metav1.GetOptions{}) + backup, err := veleroClient.VeleroV1().Backups(f.Namespace()).Get(context.TODO(), name, metav1.GetOptions{}) cmd.CheckError(err) backups.Items = append(backups.Items, *backup) } } else { - backups, err = veleroClient.VeleroV1().Backups(f.Namespace()).List(listOptions) + backups, err = veleroClient.VeleroV1().Backups(f.Namespace()).List(context.TODO(), listOptions) cmd.CheckError(err) } first := true for _, backup := range backups.Items { deleteRequestListOptions := pkgbackup.NewDeleteBackupRequestListOptions(backup.Name, string(backup.UID)) - deleteRequestList, err := veleroClient.VeleroV1().DeleteBackupRequests(f.Namespace()).List(deleteRequestListOptions) + deleteRequestList, err := veleroClient.VeleroV1().DeleteBackupRequests(f.Namespace()).List(context.TODO(), deleteRequestListOptions) if err != nil { fmt.Fprintf(os.Stderr, "error getting DeleteBackupRequests for backup %s: %v\n", backup.Name, err) } opts := label.NewListOptionsForBackup(backup.Name) - podVolumeBackupList, err := veleroClient.VeleroV1().PodVolumeBackups(f.Namespace()).List(opts) + podVolumeBackupList, err := veleroClient.VeleroV1().PodVolumeBackups(f.Namespace()).List(context.TODO(), opts) if err != nil { fmt.Fprintf(os.Stderr, "error getting PodVolumeBackups for backup %s: %v\n", backup.Name, err) } @@ -92,7 +93,7 @@ func NewDescribeCommand(f client.Factory, use string) *cobra.Command { csiClient, err = snapshotv1beta1client.NewForConfig(clientConfig) cmd.CheckError(err) - vscList, err = csiClient.SnapshotV1beta1().VolumeSnapshotContents().List(opts) + vscList, err = csiClient.SnapshotV1beta1().VolumeSnapshotContents().List(context.TODO(), opts) if err != nil { fmt.Fprintf(os.Stderr, "error getting VolumeSnapshotContent objects for backup %s: %v\n", backup.Name, err) } diff --git a/pkg/cmd/cli/backup/download.go b/pkg/cmd/cli/backup/download.go index e1dbf152d..cecce1075 100644 --- a/pkg/cmd/cli/backup/download.go +++ b/pkg/cmd/cli/backup/download.go @@ -17,6 +17,7 @@ limitations under the License. package backup import ( + "context" "fmt" "os" "path/filepath" @@ -87,7 +88,7 @@ func (o *DownloadOptions) Validate(c *cobra.Command, args []string, f client.Fac veleroClient, err := f.Client() cmd.CheckError(err) - if _, err := veleroClient.VeleroV1().Backups(f.Namespace()).Get(o.Name, metav1.GetOptions{}); err != nil { + if _, err := veleroClient.VeleroV1().Backups(f.Namespace()).Get(context.TODO(), o.Name, metav1.GetOptions{}); err != nil { return err } diff --git a/pkg/cmd/cli/backup/get.go b/pkg/cmd/cli/backup/get.go index 376b2a92c..f47259a6c 100644 --- a/pkg/cmd/cli/backup/get.go +++ b/pkg/cmd/cli/backup/get.go @@ -17,6 +17,8 @@ limitations under the License. package backup import ( + "context" + "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -43,12 +45,12 @@ func NewGetCommand(f client.Factory, use string) *cobra.Command { if len(args) > 0 { backups = new(api.BackupList) for _, name := range args { - backup, err := veleroClient.VeleroV1().Backups(f.Namespace()).Get(name, metav1.GetOptions{}) + backup, err := veleroClient.VeleroV1().Backups(f.Namespace()).Get(context.TODO(), name, metav1.GetOptions{}) cmd.CheckError(err) backups.Items = append(backups.Items, *backup) } } else { - backups, err = veleroClient.VeleroV1().Backups(f.Namespace()).List(listOptions) + backups, err = veleroClient.VeleroV1().Backups(f.Namespace()).List(context.TODO(), listOptions) cmd.CheckError(err) } diff --git a/pkg/cmd/cli/backup/logs.go b/pkg/cmd/cli/backup/logs.go index 3e64b68ab..7d22d58ae 100644 --- a/pkg/cmd/cli/backup/logs.go +++ b/pkg/cmd/cli/backup/logs.go @@ -17,6 +17,7 @@ limitations under the License. package backup import ( + "context" "fmt" "os" "time" @@ -51,7 +52,7 @@ func NewLogsCommand(f client.Factory) *cobra.Command { veleroClient, err := f.Client() cmd.CheckError(err) - backup, err := veleroClient.VeleroV1().Backups(f.Namespace()).Get(backupName, metav1.GetOptions{}) + backup, err := veleroClient.VeleroV1().Backups(f.Namespace()).Get(context.TODO(), backupName, metav1.GetOptions{}) if apierrors.IsNotFound(err) { cmd.Exit("Backup %q does not exist.", backupName) } else if err != nil { diff --git a/pkg/cmd/cli/plugin/add.go b/pkg/cmd/cli/plugin/add.go index 943c240cc..24437fb54 100644 --- a/pkg/cmd/cli/plugin/add.go +++ b/pkg/cmd/cli/plugin/add.go @@ -17,6 +17,7 @@ limitations under the License. package plugin import ( + "context" "encoding/json" "fmt" "strings" @@ -56,7 +57,7 @@ func NewAddCommand(f client.Factory) *cobra.Command { cmd.CheckError(err) } - veleroDeploy, err := kubeClient.AppsV1().Deployments(f.Namespace()).Get(veleroDeployment, metav1.GetOptions{}) + veleroDeploy, err := kubeClient.AppsV1().Deployments(f.Namespace()).Get(context.TODO(), veleroDeployment, metav1.GetOptions{}) if err != nil { cmd.CheckError(err) } @@ -116,7 +117,7 @@ func NewAddCommand(f client.Factory) *cobra.Command { patchBytes, err := jsonpatch.CreateMergePatch(original, updated) cmd.CheckError(err) - _, err = kubeClient.AppsV1().Deployments(veleroDeploy.Namespace).Patch(veleroDeploy.Name, types.MergePatchType, patchBytes) + _, err = kubeClient.AppsV1().Deployments(veleroDeploy.Namespace).Patch(context.TODO(), veleroDeploy.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) cmd.CheckError(err) }, } diff --git a/pkg/cmd/cli/plugin/remove.go b/pkg/cmd/cli/plugin/remove.go index 91fd56311..755140a46 100644 --- a/pkg/cmd/cli/plugin/remove.go +++ b/pkg/cmd/cli/plugin/remove.go @@ -17,6 +17,7 @@ limitations under the License. package plugin import ( + "context" "encoding/json" jsonpatch "github.com/evanphx/json-patch" @@ -40,7 +41,7 @@ func NewRemoveCommand(f client.Factory) *cobra.Command { cmd.CheckError(err) } - veleroDeploy, err := kubeClient.AppsV1().Deployments(f.Namespace()).Get(veleroDeployment, metav1.GetOptions{}) + veleroDeploy, err := kubeClient.AppsV1().Deployments(f.Namespace()).Get(context.TODO(), veleroDeployment, metav1.GetOptions{}) if err != nil { cmd.CheckError(err) } @@ -72,7 +73,7 @@ func NewRemoveCommand(f client.Factory) *cobra.Command { patchBytes, err := jsonpatch.CreateMergePatch(original, updated) cmd.CheckError(err) - _, err = kubeClient.AppsV1().Deployments(veleroDeploy.Namespace).Patch(veleroDeploy.Name, types.MergePatchType, patchBytes) + _, err = kubeClient.AppsV1().Deployments(veleroDeploy.Namespace).Patch(context.TODO(), veleroDeploy.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) cmd.CheckError(err) }, } diff --git a/pkg/cmd/cli/restic/repo/get.go b/pkg/cmd/cli/restic/repo/get.go index 8dd3a9f3e..a58f77832 100644 --- a/pkg/cmd/cli/restic/repo/get.go +++ b/pkg/cmd/cli/restic/repo/get.go @@ -17,6 +17,8 @@ limitations under the License. package repo import ( + "context" + "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -43,12 +45,12 @@ func NewGetCommand(f client.Factory, use string) *cobra.Command { if len(args) > 0 { repos = new(api.ResticRepositoryList) for _, name := range args { - repo, err := veleroClient.VeleroV1().ResticRepositories(f.Namespace()).Get(name, metav1.GetOptions{}) + repo, err := veleroClient.VeleroV1().ResticRepositories(f.Namespace()).Get(context.TODO(), name, metav1.GetOptions{}) cmd.CheckError(err) repos.Items = append(repos.Items, *repo) } } else { - repos, err = veleroClient.VeleroV1().ResticRepositories(f.Namespace()).List(listOptions) + repos, err = veleroClient.VeleroV1().ResticRepositories(f.Namespace()).List(context.TODO(), listOptions) cmd.CheckError(err) } diff --git a/pkg/cmd/cli/restic/server.go b/pkg/cmd/cli/restic/server.go index d72fa242e..60e7ca4de 100644 --- a/pkg/cmd/cli/restic/server.go +++ b/pkg/cmd/cli/restic/server.go @@ -245,7 +245,7 @@ func (s *resticServer) validatePodVolumesHostPath() error { } } - pods, err := s.kubeClient.CoreV1().Pods("").List(metav1.ListOptions{FieldSelector: fmt.Sprintf("spec.nodeName=%s,status.phase=Running", os.Getenv("NODE_NAME"))}) + pods, err := s.kubeClient.CoreV1().Pods("").List(s.ctx, metav1.ListOptions{FieldSelector: fmt.Sprintf("spec.nodeName=%s,status.phase=Running", os.Getenv("NODE_NAME"))}) if err != nil { return errors.WithStack(err) } diff --git a/pkg/cmd/cli/restic/server_test.go b/pkg/cmd/cli/restic/server_test.go index d6948fbc8..1087804d8 100644 --- a/pkg/cmd/cli/restic/server_test.go +++ b/pkg/cmd/cli/restic/server_test.go @@ -16,6 +16,7 @@ limitations under the License. package restic import ( + "context" "os" "path/filepath" "testing" @@ -23,6 +24,7 @@ import ( "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" "github.com/vmware-tanzu/velero/pkg/builder" @@ -86,7 +88,7 @@ func Test_validatePodVolumesHostPath(t *testing.T) { kubeClient := fake.NewSimpleClientset() for _, pod := range tt.pods { - _, err := kubeClient.CoreV1().Pods(pod.GetNamespace()).Create(pod) + _, err := kubeClient.CoreV1().Pods(pod.GetNamespace()).Create(context.TODO(), pod, metav1.CreateOptions{}) if err != nil { t.Error(err) } diff --git a/pkg/cmd/cli/restore/create.go b/pkg/cmd/cli/restore/create.go index f30ee1307..f5a32d7ef 100644 --- a/pkg/cmd/cli/restore/create.go +++ b/pkg/cmd/cli/restore/create.go @@ -17,6 +17,7 @@ limitations under the License. package restore import ( + "context" "fmt" "sort" "time" @@ -167,11 +168,11 @@ func (o *CreateOptions) Validate(c *cobra.Command, args []string, f client.Facto switch { case o.BackupName != "": - if _, err := o.client.VeleroV1().Backups(f.Namespace()).Get(o.BackupName, metav1.GetOptions{}); err != nil { + if _, err := o.client.VeleroV1().Backups(f.Namespace()).Get(context.TODO(), o.BackupName, metav1.GetOptions{}); err != nil { return err } case o.ScheduleName != "": - backupItems, err := o.client.VeleroV1().Backups(f.Namespace()).List(metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", api.ScheduleNameLabel, o.ScheduleName)}) + backupItems, err := o.client.VeleroV1().Backups(f.Namespace()).List(context.TODO(), metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", api.ScheduleNameLabel, o.ScheduleName)}) if err != nil { return err } @@ -229,7 +230,7 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { // PartiallyFailed backup for the provided schedule, and use that specific backup // to restore from. if o.ScheduleName != "" && boolptr.IsSetToTrue(o.AllowPartiallyFailed.Value) { - backups, err := o.client.VeleroV1().Backups(f.Namespace()).List(metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", api.ScheduleNameLabel, o.ScheduleName)}) + backups, err := o.client.VeleroV1().Backups(f.Namespace()).List(context.TODO(), metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", api.ScheduleNameLabel, o.ScheduleName)}) if err != nil { return err } @@ -308,7 +309,7 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { go restoreInformer.Run(stop) } - restore, err := o.client.VeleroV1().Restores(restore.Namespace).Create(restore) + restore, err := o.client.VeleroV1().Restores(restore.Namespace).Create(context.TODO(), restore, metav1.CreateOptions{}) if err != nil { return err } diff --git a/pkg/cmd/cli/restore/delete.go b/pkg/cmd/cli/restore/delete.go index 779a18074..2e13bfbbf 100644 --- a/pkg/cmd/cli/restore/delete.go +++ b/pkg/cmd/cli/restore/delete.go @@ -17,6 +17,7 @@ limitations under the License. package restore import ( + "context" "fmt" "github.com/pkg/errors" @@ -77,7 +78,7 @@ func Run(o *cli.DeleteOptions) error { switch { case len(o.Names) > 0: for _, name := range o.Names { - restore, err := o.Client.VeleroV1().Restores(o.Namespace).Get(name, metav1.GetOptions{}) + restore, err := o.Client.VeleroV1().Restores(o.Namespace).Get(context.TODO(), name, metav1.GetOptions{}) if err != nil { errs = append(errs, errors.WithStack(err)) continue @@ -89,7 +90,7 @@ func Run(o *cli.DeleteOptions) error { if o.Selector.LabelSelector != nil { selector = o.Selector.String() } - res, err := o.Client.VeleroV1().Restores(o.Namespace).List(metav1.ListOptions{ + res, err := o.Client.VeleroV1().Restores(o.Namespace).List(context.TODO(), metav1.ListOptions{ LabelSelector: selector, }) if err != nil { @@ -105,7 +106,7 @@ func Run(o *cli.DeleteOptions) error { return nil } for _, r := range restores { - err := o.Client.VeleroV1().Restores(r.Namespace).Delete(r.Name, nil) + err := o.Client.VeleroV1().Restores(r.Namespace).Delete(context.TODO(), r.Name, metav1.DeleteOptions{}) if err != nil { errs = append(errs, errors.WithStack(err)) continue diff --git a/pkg/cmd/cli/restore/describe.go b/pkg/cmd/cli/restore/describe.go index e6028bcab..1e210a470 100644 --- a/pkg/cmd/cli/restore/describe.go +++ b/pkg/cmd/cli/restore/describe.go @@ -17,6 +17,7 @@ limitations under the License. package restore import ( + "context" "fmt" "os" @@ -54,19 +55,19 @@ func NewDescribeCommand(f client.Factory, use string) *cobra.Command { if len(args) > 0 { restores = new(api.RestoreList) for _, name := range args { - restore, err := veleroClient.VeleroV1().Restores(f.Namespace()).Get(name, metav1.GetOptions{}) + restore, err := veleroClient.VeleroV1().Restores(f.Namespace()).Get(context.TODO(), name, metav1.GetOptions{}) cmd.CheckError(err) restores.Items = append(restores.Items, *restore) } } else { - restores, err = veleroClient.VeleroV1().Restores(f.Namespace()).List(listOptions) + restores, err = veleroClient.VeleroV1().Restores(f.Namespace()).List(context.TODO(), listOptions) cmd.CheckError(err) } first := true for _, restore := range restores.Items { opts := restic.NewPodVolumeRestoreListOptions(restore.Name) - podvolumeRestoreList, err := veleroClient.VeleroV1().PodVolumeRestores(f.Namespace()).List(opts) + podvolumeRestoreList, err := veleroClient.VeleroV1().PodVolumeRestores(f.Namespace()).List(context.TODO(), opts) if err != nil { fmt.Fprintf(os.Stderr, "error getting PodVolumeRestores for restore %s: %v\n", restore.Name, err) } diff --git a/pkg/cmd/cli/restore/get.go b/pkg/cmd/cli/restore/get.go index ce3c7c8e2..c6c3e05a2 100644 --- a/pkg/cmd/cli/restore/get.go +++ b/pkg/cmd/cli/restore/get.go @@ -17,6 +17,8 @@ limitations under the License. package restore import ( + "context" + "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -43,12 +45,12 @@ func NewGetCommand(f client.Factory, use string) *cobra.Command { if len(args) > 0 { restores = new(api.RestoreList) for _, name := range args { - restore, err := veleroClient.VeleroV1().Restores(f.Namespace()).Get(name, metav1.GetOptions{}) + restore, err := veleroClient.VeleroV1().Restores(f.Namespace()).Get(context.TODO(), name, metav1.GetOptions{}) cmd.CheckError(err) restores.Items = append(restores.Items, *restore) } } else { - restores, err = veleroClient.VeleroV1().Restores(f.Namespace()).List(listOptions) + restores, err = veleroClient.VeleroV1().Restores(f.Namespace()).List(context.TODO(), listOptions) cmd.CheckError(err) } diff --git a/pkg/cmd/cli/restore/logs.go b/pkg/cmd/cli/restore/logs.go index 592884c5f..614734ae7 100644 --- a/pkg/cmd/cli/restore/logs.go +++ b/pkg/cmd/cli/restore/logs.go @@ -17,6 +17,7 @@ limitations under the License. package restore import ( + "context" "fmt" "os" "time" @@ -51,7 +52,7 @@ func NewLogsCommand(f client.Factory) *cobra.Command { veleroClient, err := f.Client() cmd.CheckError(err) - restore, err := veleroClient.VeleroV1().Restores(f.Namespace()).Get(restoreName, metav1.GetOptions{}) + restore, err := veleroClient.VeleroV1().Restores(f.Namespace()).Get(context.TODO(), restoreName, metav1.GetOptions{}) if apierrors.IsNotFound(err) { cmd.Exit("Restore %q does not exist.", restoreName) } else if err != nil { diff --git a/pkg/cmd/cli/schedule/create.go b/pkg/cmd/cli/schedule/create.go index f429daa0d..3a8dfd1d1 100644 --- a/pkg/cmd/cli/schedule/create.go +++ b/pkg/cmd/cli/schedule/create.go @@ -17,6 +17,7 @@ limitations under the License. package schedule import ( + "context" "fmt" "github.com/pkg/errors" @@ -141,7 +142,7 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { return err } - _, err = veleroClient.VeleroV1().Schedules(schedule.Namespace).Create(schedule) + _, err = veleroClient.VeleroV1().Schedules(schedule.Namespace).Create(context.TODO(), schedule, metav1.CreateOptions{}) if err != nil { return err } diff --git a/pkg/cmd/cli/schedule/delete.go b/pkg/cmd/cli/schedule/delete.go index 1ed2c6303..c9f28325f 100644 --- a/pkg/cmd/cli/schedule/delete.go +++ b/pkg/cmd/cli/schedule/delete.go @@ -17,6 +17,7 @@ limitations under the License. package schedule import ( + "context" "fmt" "github.com/pkg/errors" @@ -76,7 +77,7 @@ func Run(o *cli.DeleteOptions) error { switch { case len(o.Names) > 0: for _, name := range o.Names { - schedule, err := o.Client.VeleroV1().Schedules(o.Namespace).Get(name, metav1.GetOptions{}) + schedule, err := o.Client.VeleroV1().Schedules(o.Namespace).Get(context.TODO(), name, metav1.GetOptions{}) if err != nil { errs = append(errs, errors.WithStack(err)) continue @@ -88,7 +89,7 @@ func Run(o *cli.DeleteOptions) error { if o.Selector.LabelSelector != nil { selector = o.Selector.String() } - res, err := o.Client.VeleroV1().Schedules(o.Namespace).List(metav1.ListOptions{ + res, err := o.Client.VeleroV1().Schedules(o.Namespace).List(context.TODO(), metav1.ListOptions{ LabelSelector: selector, }) if err != nil { @@ -105,7 +106,7 @@ func Run(o *cli.DeleteOptions) error { } for _, s := range schedules { - err := o.Client.VeleroV1().Schedules(s.Namespace).Delete(s.Name, nil) + err := o.Client.VeleroV1().Schedules(s.Namespace).Delete(context.TODO(), s.Name, metav1.DeleteOptions{}) if err != nil { errs = append(errs, errors.WithStack(err)) continue diff --git a/pkg/cmd/cli/schedule/describe.go b/pkg/cmd/cli/schedule/describe.go index 8f16b9d55..b1b8d8f1f 100644 --- a/pkg/cmd/cli/schedule/describe.go +++ b/pkg/cmd/cli/schedule/describe.go @@ -17,6 +17,7 @@ limitations under the License. package schedule import ( + "context" "fmt" "github.com/spf13/cobra" @@ -42,12 +43,12 @@ func NewDescribeCommand(f client.Factory, use string) *cobra.Command { if len(args) > 0 { schedules = new(v1.ScheduleList) for _, name := range args { - schedule, err := veleroClient.VeleroV1().Schedules(f.Namespace()).Get(name, metav1.GetOptions{}) + schedule, err := veleroClient.VeleroV1().Schedules(f.Namespace()).Get(context.TODO(), name, metav1.GetOptions{}) cmd.CheckError(err) schedules.Items = append(schedules.Items, *schedule) } } else { - schedules, err = veleroClient.VeleroV1().Schedules(f.Namespace()).List(listOptions) + schedules, err = veleroClient.VeleroV1().Schedules(f.Namespace()).List(context.TODO(), listOptions) cmd.CheckError(err) } diff --git a/pkg/cmd/cli/schedule/get.go b/pkg/cmd/cli/schedule/get.go index e47a56716..bc66d459f 100644 --- a/pkg/cmd/cli/schedule/get.go +++ b/pkg/cmd/cli/schedule/get.go @@ -17,6 +17,8 @@ limitations under the License. package schedule import ( + "context" + "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -43,12 +45,12 @@ func NewGetCommand(f client.Factory, use string) *cobra.Command { if len(args) > 0 { schedules = new(api.ScheduleList) for _, name := range args { - schedule, err := veleroClient.VeleroV1().Schedules(f.Namespace()).Get(name, metav1.GetOptions{}) + schedule, err := veleroClient.VeleroV1().Schedules(f.Namespace()).Get(context.TODO(), name, metav1.GetOptions{}) cmd.CheckError(err) schedules.Items = append(schedules.Items, *schedule) } } else { - schedules, err = veleroClient.VeleroV1().Schedules(f.Namespace()).List(listOptions) + schedules, err = veleroClient.VeleroV1().Schedules(f.Namespace()).List(context.TODO(), listOptions) cmd.CheckError(err) } diff --git a/pkg/cmd/cli/serverstatus/server_status.go b/pkg/cmd/cli/serverstatus/server_status.go index 9d7d25380..4835926a0 100644 --- a/pkg/cmd/cli/serverstatus/server_status.go +++ b/pkg/cmd/cli/serverstatus/server_status.go @@ -17,6 +17,7 @@ limitations under the License. package serverstatus import ( + "context" "time" "github.com/pkg/errors" @@ -43,11 +44,11 @@ func (g *DefaultServerStatusGetter) GetServerStatus(client velerov1client.Server builder.WithGenerateName("velero-cli-"), ).Result() - created, err := client.ServerStatusRequests(g.Namespace).Create(req) + created, err := client.ServerStatusRequests(g.Namespace).Create(context.TODO(), req, metav1.CreateOptions{}) if err != nil { return nil, errors.WithStack(err) } - defer client.ServerStatusRequests(g.Namespace).Delete(created.Name, nil) + defer client.ServerStatusRequests(g.Namespace).Delete(context.TODO(), created.Name, metav1.DeleteOptions{}) listOptions := metav1.ListOptions{ // TODO: once the minimum supported Kubernetes version is v1.9.0, uncomment the following line. @@ -55,7 +56,7 @@ func (g *DefaultServerStatusGetter) GetServerStatus(client velerov1client.Server //FieldSelector: "metadata.name=" + req.Name ResourceVersion: created.ResourceVersion, } - watcher, err := client.ServerStatusRequests(g.Namespace).Watch(listOptions) + watcher, err := client.ServerStatusRequests(g.Namespace).Watch(context.TODO(), listOptions) if err != nil { return nil, errors.WithStack(err) } diff --git a/pkg/cmd/cli/snapshotlocation/create.go b/pkg/cmd/cli/snapshotlocation/create.go index 6abb15e2f..a808bb5bc 100644 --- a/pkg/cmd/cli/snapshotlocation/create.go +++ b/pkg/cmd/cli/snapshotlocation/create.go @@ -17,6 +17,7 @@ limitations under the License. package snapshotlocation import ( + "context" "fmt" "github.com/pkg/errors" @@ -110,7 +111,7 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { return err } - if _, err := client.VeleroV1().VolumeSnapshotLocations(volumeSnapshotLocation.Namespace).Create(volumeSnapshotLocation); err != nil { + if _, err := client.VeleroV1().VolumeSnapshotLocations(volumeSnapshotLocation.Namespace).Create(context.TODO(), volumeSnapshotLocation, metav1.CreateOptions{}); err != nil { return errors.WithStack(err) } diff --git a/pkg/cmd/cli/snapshotlocation/get.go b/pkg/cmd/cli/snapshotlocation/get.go index 9fdccbce2..b879d5887 100644 --- a/pkg/cmd/cli/snapshotlocation/get.go +++ b/pkg/cmd/cli/snapshotlocation/get.go @@ -17,6 +17,8 @@ limitations under the License. package snapshotlocation import ( + "context" + "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -40,12 +42,12 @@ func NewGetCommand(f client.Factory, use string) *cobra.Command { if len(args) > 0 { locations = new(api.VolumeSnapshotLocationList) for _, name := range args { - location, err := veleroClient.VeleroV1().VolumeSnapshotLocations(f.Namespace()).Get(name, metav1.GetOptions{}) + location, err := veleroClient.VeleroV1().VolumeSnapshotLocations(f.Namespace()).Get(context.TODO(), name, metav1.GetOptions{}) cmd.CheckError(err) locations.Items = append(locations.Items, *location) } } else { - locations, err = veleroClient.VeleroV1().VolumeSnapshotLocations(f.Namespace()).List(listOptions) + locations, err = veleroClient.VeleroV1().VolumeSnapshotLocations(f.Namespace()).List(context.TODO(), listOptions) cmd.CheckError(err) } _, err = output.PrintWithFormat(c, locations) diff --git a/pkg/cmd/server/server.go b/pkg/cmd/server/server.go index 87c06856f..88fb8c121 100644 --- a/pkg/cmd/server/server.go +++ b/pkg/cmd/server/server.go @@ -377,7 +377,7 @@ func (s *server) run() error { func (s *server) namespaceExists(namespace string) error { s.logger.WithField("namespace", namespace).Info("Checking existence of namespace") - if _, err := s.kubeClient.CoreV1().Namespaces().Get(namespace, metav1.GetOptions{}); err != nil { + if _, err := s.kubeClient.CoreV1().Namespaces().Get(s.ctx, namespace, metav1.GetOptions{}); err != nil { return errors.WithStack(err) } @@ -489,7 +489,7 @@ var defaultRestorePriorities = []string{ func (s *server) initRestic() error { // warn if restic daemonset does not exist - if _, err := s.kubeClient.AppsV1().DaemonSets(s.namespace).Get(restic.DaemonSet, metav1.GetOptions{}); apierrors.IsNotFound(err) { + if _, err := s.kubeClient.AppsV1().DaemonSets(s.namespace).Get(s.ctx, restic.DaemonSet, metav1.GetOptions{}); apierrors.IsNotFound(err) { s.logger.Warn("Velero restic daemonset not found; restic backups/restores will not work until it's created") } else if err != nil { s.logger.WithError(errors.WithStack(err)).Warn("Error checking for existence of velero restic daemonset") diff --git a/pkg/cmd/util/downloadrequest/downloadrequest.go b/pkg/cmd/util/downloadrequest/downloadrequest.go index 607a75cd2..bef8dd865 100644 --- a/pkg/cmd/util/downloadrequest/downloadrequest.go +++ b/pkg/cmd/util/downloadrequest/downloadrequest.go @@ -18,6 +18,7 @@ package downloadrequest import ( "compress/gzip" + "context" "crypto/tls" "crypto/x509" "fmt" @@ -53,17 +54,17 @@ func Stream(client velerov1client.DownloadRequestsGetter, namespace, name string }, } - req, err := client.DownloadRequests(namespace).Create(req) + req, err := client.DownloadRequests(namespace).Create(context.TODO(), req, metav1.CreateOptions{}) if err != nil { return errors.WithStack(err) } - defer client.DownloadRequests(namespace).Delete(req.Name, nil) + defer client.DownloadRequests(namespace).Delete(context.TODO(), req.Name, metav1.DeleteOptions{}) listOptions := metav1.ListOptions{ FieldSelector: "metadata.name=" + req.Name, ResourceVersion: req.ResourceVersion, } - watcher, err := client.DownloadRequests(namespace).Watch(listOptions) + watcher, err := client.DownloadRequests(namespace).Watch(context.TODO(), listOptions) if err != nil { return errors.WithStack(err) } diff --git a/pkg/controller/backup_controller.go b/pkg/controller/backup_controller.go index 7038cfad7..366e81951 100644 --- a/pkg/controller/backup_controller.go +++ b/pkg/controller/backup_controller.go @@ -313,7 +313,7 @@ func patchBackup(original, updated *velerov1api.Backup, client velerov1client.Ba return nil, errors.Wrap(err, "error creating json merge patch for backup") } - res, err := client.Backups(original.Namespace).Patch(original.Name, types.MergePatchType, patchBytes) + res, err := client.Backups(original.Namespace).Patch(context.TODO(), original.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return nil, errors.Wrap(err, "error patching backup") } diff --git a/pkg/controller/backup_controller_test.go b/pkg/controller/backup_controller_test.go index 354a568cc..42fb31119 100644 --- a/pkg/controller/backup_controller_test.go +++ b/pkg/controller/backup_controller_test.go @@ -203,7 +203,7 @@ func TestProcessBackupValidationFailures(t *testing.T) { require.NoError(t, c.processBackup(fmt.Sprintf("%s/%s", test.backup.Namespace, test.backup.Name))) - res, err := clientset.VeleroV1().Backups(test.backup.Namespace).Get(test.backup.Name, metav1.GetOptions{}) + res, err := clientset.VeleroV1().Backups(test.backup.Namespace).Get(context.TODO(), test.backup.Name, metav1.GetOptions{}) require.NoError(t, err) assert.Equal(t, velerov1api.BackupPhaseFailedValidation, res.Status.Phase) @@ -849,10 +849,13 @@ func TestProcessBackupCompletions(t *testing.T) { require.NoError(t, c.processBackup(fmt.Sprintf("%s/%s", test.backup.Namespace, test.backup.Name))) - res, err := clientset.VeleroV1().Backups(test.backup.Namespace).Get(test.backup.Name, metav1.GetOptions{}) + res, err := clientset.VeleroV1().Backups(test.backup.Namespace).Get(context.TODO(), test.backup.Name, metav1.GetOptions{}) require.NoError(t, err) assert.Equal(t, test.expectedResult, res) + + // reset defaultBackupLocation resourceVersion + defaultBackupLocation.ObjectMeta.ResourceVersion = "" }) } } diff --git a/pkg/controller/backup_deletion_controller.go b/pkg/controller/backup_deletion_controller.go index bee84abb0..2138b1746 100644 --- a/pkg/controller/backup_deletion_controller.go +++ b/pkg/controller/backup_deletion_controller.go @@ -201,7 +201,7 @@ func (c *backupDeletionController) processRequest(req *velerov1api.DeleteBackupR } // Get the backup we're trying to delete - backup, err := c.backupClient.Backups(req.Namespace).Get(req.Spec.BackupName, metav1.GetOptions{}) + backup, err := c.backupClient.Backups(req.Namespace).Get(context.TODO(), req.Spec.BackupName, metav1.GetOptions{}) if apierrors.IsNotFound(err) { // Couldn't find backup - update status to Processed and record the not-found error req, err = c.patchDeleteBackupRequest(req, func(r *velerov1api.DeleteBackupRequest) { @@ -365,7 +365,7 @@ func (c *backupDeletionController) processRequest(req *velerov1api.DeleteBackupR } restoreLog.Info("Deleting restore referencing backup") - if err := c.restoreClient.Restores(restore.Namespace).Delete(restore.Name, &metav1.DeleteOptions{}); err != nil { + if err := c.restoreClient.Restores(restore.Namespace).Delete(context.TODO(), restore.Name, metav1.DeleteOptions{}); err != nil { errs = append(errs, errors.Wrapf(err, "error deleting restore %s", kube.NamespaceAndName(restore)).Error()) } } @@ -373,7 +373,7 @@ func (c *backupDeletionController) processRequest(req *velerov1api.DeleteBackupR if len(errs) == 0 { // Only try to delete the backup object from kube if everything preceding went smoothly - err = c.backupClient.Backups(backup.Namespace).Delete(backup.Name, nil) + err = c.backupClient.Backups(backup.Namespace).Delete(context.TODO(), backup.Name, metav1.DeleteOptions{}) if err != nil { errs = append(errs, errors.Wrapf(err, "error deleting backup %s", kube.NamespaceAndName(backup)).Error()) } @@ -397,7 +397,7 @@ func (c *backupDeletionController) processRequest(req *velerov1api.DeleteBackupR // Everything deleted correctly, so we can delete all DeleteBackupRequests for this backup if len(errs) == 0 { listOptions := pkgbackup.NewDeleteBackupRequestListOptions(backup.Name, string(backup.UID)) - err = c.deleteBackupRequestClient.DeleteBackupRequests(req.Namespace).DeleteCollection(nil, listOptions) + err = c.deleteBackupRequestClient.DeleteBackupRequests(req.Namespace).DeleteCollection(context.TODO(), metav1.DeleteOptions{}, listOptions) if err != nil { // If this errors, all we can do is log it. c.logger.WithField("backup", kube.NamespaceAndName(backup)).Error("error deleting all associated DeleteBackupRequests after successfully deleting the backup") @@ -443,7 +443,7 @@ func (c *backupDeletionController) deleteExistingDeletionRequests(req *velerov1a continue } - if err := c.deleteBackupRequestClient.DeleteBackupRequests(req.Namespace).Delete(dbr.Name, nil); err != nil { + if err := c.deleteBackupRequestClient.DeleteBackupRequests(req.Namespace).Delete(context.TODO(), dbr.Name, metav1.DeleteOptions{}); err != nil { errs = append(errs, errors.WithStack(err)) } } @@ -477,7 +477,7 @@ func (c *backupDeletionController) deleteResticSnapshots(backup *velerov1api.Bac func setVolumeSnapshotContentDeletionPolicy(vscName string, csiClient snapshotter.SnapshotV1beta1Interface, log *logrus.Entry) error { log.Infof("Setting DeletionPolicy of CSI volumesnapshotcontent %s to Delete", vscName) pb := []byte(`{"spec":{"deletionPolicy":"Delete"}}`) - _, err := csiClient.VolumeSnapshotContents().Patch(vscName, types.MergePatchType, pb) + _, err := csiClient.VolumeSnapshotContents().Patch(context.TODO(), vscName, types.MergePatchType, pb, metav1.PatchOptions{}) if err != nil { return err } @@ -507,7 +507,7 @@ func deleteCSIVolumeSnapshots(backupName string, csiSnapshotLister snapshotv1bet continue } } - err := csiClient.VolumeSnapshots(csiVS.Namespace).Delete(csiVS.Name, &metav1.DeleteOptions{}) + err := csiClient.VolumeSnapshots(csiVS.Namespace).Delete(context.TODO(), csiVS.Name, metav1.DeleteOptions{}) if err != nil { errs = append(errs, err) } @@ -541,7 +541,7 @@ func deleteCSIVolumeSnapshotContents(backupName string, csiVSCLister snapshotv1b continue } log.Infof("Deleting volumesnapshotcontent %s", snapCont.Name) - err = csiClient.VolumeSnapshotContents().Delete(snapCont.Name, &metav1.DeleteOptions{}) + err = csiClient.VolumeSnapshotContents().Delete(context.TODO(), snapCont.Name, metav1.DeleteOptions{}) if err != nil && !apierrors.IsNotFound(err) { errs = append(errs, err) } @@ -575,7 +575,7 @@ func (c *backupDeletionController) deleteExpiredRequests() { reqLog := c.logger.WithFields(logrus.Fields{"namespace": req.Namespace, "name": req.Name}) reqLog.Info("Deleting expired DeleteBackupRequest") - err = c.deleteBackupRequestClient.DeleteBackupRequests(req.Namespace).Delete(req.Name, nil) + err = c.deleteBackupRequestClient.DeleteBackupRequests(req.Namespace).Delete(context.TODO(), req.Name, metav1.DeleteOptions{}) if err != nil { reqLog.WithError(err).Error("Error deleting DeleteBackupRequest") } @@ -604,7 +604,7 @@ func (c *backupDeletionController) patchDeleteBackupRequest(req *velerov1api.Del return nil, errors.Wrap(err, "error creating json merge patch for DeleteBackupRequest") } - req, err = c.deleteBackupRequestClient.DeleteBackupRequests(req.Namespace).Patch(req.Name, types.MergePatchType, patchBytes) + req, err = c.deleteBackupRequestClient.DeleteBackupRequests(req.Namespace).Patch(context.TODO(), req.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return nil, errors.Wrap(err, "error patching DeleteBackupRequest") } @@ -633,7 +633,7 @@ func (c *backupDeletionController) patchBackup(backup *velerov1api.Backup, mutat return nil, errors.Wrap(err, "error creating json merge patch for Backup") } - backup, err = c.backupClient.Backups(backup.Namespace).Patch(backup.Name, types.MergePatchType, patchBytes) + backup, err = c.backupClient.Backups(backup.Namespace).Patch(context.TODO(), backup.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return nil, errors.Wrap(err, "error patching Backup") } diff --git a/pkg/controller/backup_deletion_controller_test.go b/pkg/controller/backup_deletion_controller_test.go index 7b12b325a..02d8c81db 100644 --- a/pkg/controller/backup_deletion_controller_test.go +++ b/pkg/controller/backup_deletion_controller_test.go @@ -225,7 +225,7 @@ func TestBackupDeletionControllerProcessRequest(t *testing.T) { }, } require.NoError(t, td.sharedInformers.Velero().V1().DeleteBackupRequests().Informer().GetStore().Add(existing)) - _, err := td.client.VeleroV1().DeleteBackupRequests(td.req.Namespace).Create(existing) + _, err := td.client.VeleroV1().DeleteBackupRequests(td.req.Namespace).Create(context.TODO(), existing, metav1.CreateOptions{}) require.NoError(t, err) require.NoError(t, td.sharedInformers.Velero().V1().DeleteBackupRequests().Informer().GetStore().Add( @@ -958,7 +958,7 @@ func TestSetVolumeSnapshotContentDeletionPolicy(t *testing.T) { assert.NotNil(t, err) } else { assert.Nil(t, err) - actual, err := fakeClient.SnapshotV1beta1().VolumeSnapshotContents().Get(tc.inputVSCName, metav1.GetOptions{}) + actual, err := fakeClient.SnapshotV1beta1().VolumeSnapshotContents().Get(context.TODO(), tc.inputVSCName, metav1.GetOptions{}) assert.Nil(t, err) assert.Equal(t, snapshotv1beta1api.VolumeSnapshotContentDelete, actual.Spec.DeletionPolicy) } diff --git a/pkg/controller/backup_sync_controller.go b/pkg/controller/backup_sync_controller.go index fcf43f9a6..826ffbeea 100644 --- a/pkg/controller/backup_sync_controller.go +++ b/pkg/controller/backup_sync_controller.go @@ -223,7 +223,7 @@ func (c *backupSyncController) run() { backup.Labels[velerov1api.StorageLocationLabel] = label.GetValidName(backup.Spec.StorageLocation) // attempt to create backup custom resource via API - backup, err = c.backupClient.Backups(backup.Namespace).Create(backup) + backup, err = c.backupClient.Backups(backup.Namespace).Create(context.TODO(), backup, metav1.CreateOptions{}) switch { case err != nil && kuberrs.IsAlreadyExists(err): log.Debug("Backup already exists in cluster") @@ -260,7 +260,7 @@ func (c *backupSyncController) run() { podVolumeBackup.Namespace = backup.Namespace podVolumeBackup.ResourceVersion = "" - _, err = c.podVolumeBackupClient.PodVolumeBackups(backup.Namespace).Create(podVolumeBackup) + _, err = c.podVolumeBackupClient.PodVolumeBackups(backup.Namespace).Create(context.TODO(), podVolumeBackup, metav1.CreateOptions{}) switch { case err != nil && kuberrs.IsAlreadyExists(err): log.Debug("Pod volume backup already exists in cluster") @@ -287,7 +287,7 @@ func (c *backupSyncController) run() { for _, snapCont := range snapConts { // TODO: Reset ResourceVersion prior to persisting VolumeSnapshotContents snapCont.ResourceVersion = "" - created, err := c.csiSnapshotClient.SnapshotV1beta1().VolumeSnapshotContents().Create(snapCont) + created, err := c.csiSnapshotClient.SnapshotV1beta1().VolumeSnapshotContents().Create(context.TODO(), snapCont, metav1.CreateOptions{}) switch { case err != nil && kuberrs.IsAlreadyExists(err): log.Debugf("volumesnapshotcontent %s already exists in cluster", snapCont.Name) @@ -336,7 +336,7 @@ func (c *backupSyncController) deleteOrphanedBackups(locationName string, backup continue } - if err := c.backupClient.Backups(backup.Namespace).Delete(backup.Name, nil); err != nil { + if err := c.backupClient.Backups(backup.Namespace).Delete(context.TODO(), backup.Name, metav1.DeleteOptions{}); err != nil { log.WithError(errors.WithStack(err)).Error("Error deleting orphaned backup from cluster") } else { log.Debug("Deleted orphaned backup from cluster") diff --git a/pkg/controller/backup_sync_controller_test.go b/pkg/controller/backup_sync_controller_test.go index 8ff93736c..859632426 100644 --- a/pkg/controller/backup_sync_controller_test.go +++ b/pkg/controller/backup_sync_controller_test.go @@ -381,14 +381,14 @@ func TestBackupSyncControllerRun(t *testing.T) { for _, existingBackup := range test.existingBackups { require.NoError(t, sharedInformers.Velero().V1().Backups().Informer().GetStore().Add(existingBackup)) - _, err := client.VeleroV1().Backups(test.namespace).Create(existingBackup) + _, err := client.VeleroV1().Backups(test.namespace).Create(context.TODO(), existingBackup, metav1.CreateOptions{}) require.NoError(t, err) } for _, existingPodVolumeBackup := range test.existingPodVolumeBackups { require.NoError(t, sharedInformers.Velero().V1().PodVolumeBackups().Informer().GetStore().Add(existingPodVolumeBackup)) - _, err := client.VeleroV1().PodVolumeBackups(test.namespace).Create(existingPodVolumeBackup) + _, err := client.VeleroV1().PodVolumeBackups(test.namespace).Create(context.TODO(), existingPodVolumeBackup, metav1.CreateOptions{}) require.NoError(t, err) } client.ClearActions() @@ -409,7 +409,7 @@ func TestBackupSyncControllerRun(t *testing.T) { // process the cloud backups for _, cloudBackupData := range backupDataSet { - obj, err := client.VeleroV1().Backups(test.namespace).Get(cloudBackupData.backup.Name, metav1.GetOptions{}) + obj, err := client.VeleroV1().Backups(test.namespace).Get(context.TODO(), cloudBackupData.backup.Name, metav1.GetOptions{}) require.NoError(t, err) // did this cloud backup already exist in the cluster? @@ -444,7 +444,7 @@ func TestBackupSyncControllerRun(t *testing.T) { // process the cloud pod volume backups for this backup, if any for _, podVolumeBackup := range cloudBackupData.podVolumeBackups { - objPodVolumeBackup, err := client.VeleroV1().PodVolumeBackups(test.namespace).Get(podVolumeBackup.Name, metav1.GetOptions{}) + objPodVolumeBackup, err := client.VeleroV1().PodVolumeBackups(test.namespace).Get(context.TODO(), podVolumeBackup.Name, metav1.GetOptions{}) require.NoError(t, err) // did this cloud pod volume backup already exist in the cluster? @@ -585,7 +585,7 @@ func TestDeleteOrphanedBackups(t *testing.T) { require.NoError(t, sharedInformers.Velero().V1().Backups().Informer().GetStore().Add(backup), "Error adding backup to informer") // add test backup to client - _, err := client.VeleroV1().Backups(test.namespace).Create(backup) + _, err := client.VeleroV1().Backups(test.namespace).Create(context.TODO(), backup, metav1.CreateOptions{}) require.NoError(t, err, "Error adding backup to clientset") // if we expect this backup to be deleted, set up the expected DeleteAction @@ -678,7 +678,7 @@ func TestStorageLabelsInDeleteOrphanedBackups(t *testing.T) { require.NoError(t, sharedInformers.Velero().V1().Backups().Informer().GetStore().Add(backup), "Error adding backup to informer") // add test backup to client - _, err := client.VeleroV1().Backups(test.namespace).Create(backup) + _, err := client.VeleroV1().Backups(test.namespace).Create(context.TODO(), backup, metav1.CreateOptions{}) require.NoError(t, err, "Error adding backup to clientset") // if we expect this backup to be deleted, set up the expected DeleteAction @@ -717,7 +717,7 @@ func getDeleteActions(actions []core.Action) []core.Action { func numBackups(t *testing.T, c *fake.Clientset, ns string) (int, error) { t.Helper() - existingK8SBackups, err := c.VeleroV1().Backups(ns).List(metav1.ListOptions{}) + existingK8SBackups, err := c.VeleroV1().Backups(ns).List(context.TODO(), metav1.ListOptions{}) if err != nil { return 0, err } @@ -727,7 +727,7 @@ func numBackups(t *testing.T, c *fake.Clientset, ns string) (int, error) { func numPodVolumeBackups(t *testing.T, c *fake.Clientset, ns string) (int, error) { t.Helper() - existingK8SPodvolumeBackups, err := c.VeleroV1().PodVolumeBackups(ns).List(metav1.ListOptions{}) + existingK8SPodvolumeBackups, err := c.VeleroV1().PodVolumeBackups(ns).List(context.TODO(), metav1.ListOptions{}) if err != nil { return 0, err } diff --git a/pkg/controller/download_request_controller.go b/pkg/controller/download_request_controller.go index 51125c92f..5208c342a 100644 --- a/pkg/controller/download_request_controller.go +++ b/pkg/controller/download_request_controller.go @@ -198,7 +198,7 @@ func (c *downloadRequestController) deleteIfExpired(downloadRequest *velerov1api } log.Debug("DownloadRequest has expired - deleting") - return errors.WithStack(c.downloadRequestClient.DownloadRequests(downloadRequest.Namespace).Delete(downloadRequest.Name, nil)) + return errors.WithStack(c.downloadRequestClient.DownloadRequests(downloadRequest.Namespace).Delete(context.TODO(), downloadRequest.Name, metav1.DeleteOptions{})) } // resync requeues all the DownloadRequests in the lister's cache. This is mostly to handle deleting @@ -237,7 +237,7 @@ func patchDownloadRequest(original, updated *velerov1api.DownloadRequest, client return nil, errors.Wrap(err, "error creating json merge patch for download request") } - res, err := client.DownloadRequests(original.Namespace).Patch(original.Name, types.MergePatchType, patchBytes) + res, err := client.DownloadRequests(original.Namespace).Patch(context.TODO(), original.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return nil, errors.Wrap(err, "error patching download request") } diff --git a/pkg/controller/download_request_controller_test.go b/pkg/controller/download_request_controller_test.go index c17bd20fb..5f7d33ae2 100644 --- a/pkg/controller/download_request_controller_test.go +++ b/pkg/controller/download_request_controller_test.go @@ -17,6 +17,7 @@ limitations under the License. package controller import ( + "context" "testing" "time" @@ -271,7 +272,7 @@ func TestProcessDownloadRequest(t *testing.T) { if tc.downloadRequest != nil { require.NoError(t, harness.informerFactory.Velero().V1().DownloadRequests().Informer().GetStore().Add(tc.downloadRequest)) - _, err := harness.client.VeleroV1().DownloadRequests(tc.downloadRequest.Namespace).Create(tc.downloadRequest) + _, err := harness.client.VeleroV1().DownloadRequests(tc.downloadRequest.Namespace).Create(context.TODO(), tc.downloadRequest, metav1.CreateOptions{}) require.NoError(t, err) } @@ -303,7 +304,7 @@ func TestProcessDownloadRequest(t *testing.T) { } if tc.expectGetsURL { - output, err := harness.client.VeleroV1().DownloadRequests(tc.downloadRequest.Namespace).Get(tc.downloadRequest.Name, metav1.GetOptions{}) + output, err := harness.client.VeleroV1().DownloadRequests(tc.downloadRequest.Namespace).Get(context.TODO(), tc.downloadRequest.Name, metav1.GetOptions{}) require.NoError(t, err) assert.Equal(t, string(velerov1api.DownloadRequestPhaseProcessed), string(output.Status.Phase)) @@ -312,7 +313,7 @@ func TestProcessDownloadRequest(t *testing.T) { } if tc.downloadRequest != nil && tc.downloadRequest.Status.Phase == velerov1api.DownloadRequestPhaseProcessed { - res, err := harness.client.VeleroV1().DownloadRequests(tc.downloadRequest.Namespace).Get(tc.downloadRequest.Name, metav1.GetOptions{}) + res, err := harness.client.VeleroV1().DownloadRequests(tc.downloadRequest.Namespace).Get(context.TODO(), tc.downloadRequest.Name, metav1.GetOptions{}) if tc.expired { assert.True(t, apierrors.IsNotFound(err)) diff --git a/pkg/controller/gc_controller.go b/pkg/controller/gc_controller.go index 488589aa6..b6ae5728b 100644 --- a/pkg/controller/gc_controller.go +++ b/pkg/controller/gc_controller.go @@ -23,6 +23,7 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/clock" "k8s.io/client-go/tools/cache" @@ -172,7 +173,7 @@ func (c *gcController) processQueueItem(key string) error { log.Info("Creating a new deletion request") req := pkgbackup.NewDeleteBackupRequest(backup.Name, string(backup.UID)) - if _, err = c.deleteBackupRequestClient.DeleteBackupRequests(ns).Create(req); err != nil { + if _, err = c.deleteBackupRequestClient.DeleteBackupRequests(ns).Create(context.TODO(), req, metav1.CreateOptions{}); err != nil { return errors.Wrap(err, "error creating DeleteBackupRequest") } diff --git a/pkg/controller/pod_volume_backup_controller.go b/pkg/controller/pod_volume_backup_controller.go index 754fb2c41..87ec35c87 100644 --- a/pkg/controller/pod_volume_backup_controller.go +++ b/pkg/controller/pod_volume_backup_controller.go @@ -17,6 +17,7 @@ limitations under the License. package controller import ( + "context" "encoding/json" "fmt" "os" @@ -385,7 +386,7 @@ func (c *podVolumeBackupController) patchPodVolumeBackup(req *velerov1api.PodVol return nil, errors.Wrap(err, "error creating json merge patch for PodVolumeBackup") } - req, err = c.podVolumeBackupClient.PodVolumeBackups(req.Namespace).Patch(req.Name, types.MergePatchType, patchBytes) + req, err = c.podVolumeBackupClient.PodVolumeBackups(req.Namespace).Patch(context.TODO(), req.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return nil, errors.Wrap(err, "error patching PodVolumeBackup") } diff --git a/pkg/controller/pod_volume_restore_controller.go b/pkg/controller/pod_volume_restore_controller.go index a2b995e8f..03eecec9a 100644 --- a/pkg/controller/pod_volume_restore_controller.go +++ b/pkg/controller/pod_volume_restore_controller.go @@ -17,6 +17,7 @@ limitations under the License. package controller import ( + "context" "encoding/json" "fmt" "io/ioutil" @@ -423,7 +424,7 @@ func (c *podVolumeRestoreController) patchPodVolumeRestore(req *velerov1api.PodV return nil, errors.Wrap(err, "error creating json merge patch for PodVolumeRestore") } - req, err = c.podVolumeRestoreClient.PodVolumeRestores(req.Namespace).Patch(req.Name, types.MergePatchType, patchBytes) + req, err = c.podVolumeRestoreClient.PodVolumeRestores(req.Namespace).Patch(context.TODO(), req.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return nil, errors.Wrap(err, "error patching PodVolumeRestore") } diff --git a/pkg/controller/restic_repository_controller.go b/pkg/controller/restic_repository_controller.go index 3baf1df57..a3a4313fc 100644 --- a/pkg/controller/restic_repository_controller.go +++ b/pkg/controller/restic_repository_controller.go @@ -312,7 +312,7 @@ func (c *resticRepositoryController) patchResticRepository(req *velerov1api.Rest // patch, and if successful, update req var patched *velerov1api.ResticRepository - if patched, err = c.resticRepositoryClient.ResticRepositories(req.Namespace).Patch(req.Name, types.MergePatchType, patchBytes); err != nil { + if patched, err = c.resticRepositoryClient.ResticRepositories(req.Namespace).Patch(context.TODO(), req.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}); err != nil { return errors.Wrap(err, "error patching ResticRepository") } req = patched diff --git a/pkg/controller/restore_controller.go b/pkg/controller/restore_controller.go index 756a49eec..ef2f15dfa 100644 --- a/pkg/controller/restore_controller.go +++ b/pkg/controller/restore_controller.go @@ -31,6 +31,7 @@ import ( jsonpatch "github.com/evanphx/json-patch" "github.com/pkg/errors" "github.com/sirupsen/logrus" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" @@ -448,7 +449,7 @@ func (c *restoreController) runValidatedRestore(restore *api.Restore, info backu opts := label.NewListOptionsForBackup(restore.Spec.BackupName) - podVolumeBackupList, err := c.podVolumeBackupClient.PodVolumeBackups(c.namespace).List(opts) + podVolumeBackupList, err := c.podVolumeBackupClient.PodVolumeBackups(c.namespace).List(context.TODO(), opts) if err != nil { return errors.WithStack(err) } @@ -582,7 +583,7 @@ func patchRestore(original, updated *api.Restore, client velerov1client.Restores return nil, errors.Wrap(err, "error creating json merge patch for restore") } - res, err := client.Restores(original.Namespace).Patch(original.Name, types.MergePatchType, patchBytes) + res, err := client.Restores(original.Namespace).Patch(context.TODO(), original.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return nil, errors.Wrap(err, "error patching restore") } diff --git a/pkg/controller/restore_controller_test.go b/pkg/controller/restore_controller_test.go index 2a3ebd043..ed17701b0 100644 --- a/pkg/controller/restore_controller_test.go +++ b/pkg/controller/restore_controller_test.go @@ -406,6 +406,10 @@ func TestProcessQueueItem(t *testing.T) { defer restorer.AssertExpectations(t) defer backupStore.AssertExpectations(t) + defer func() { + // reset defaultStorageLocation resourceVersion + defaultStorageLocation.ObjectMeta.ResourceVersion = "" + }() c := NewRestoreController( velerov1api.DefaultNamespace, diff --git a/pkg/controller/schedule_controller.go b/pkg/controller/schedule_controller.go index 8f5101129..1e7327802 100644 --- a/pkg/controller/schedule_controller.go +++ b/pkg/controller/schedule_controller.go @@ -17,6 +17,7 @@ limitations under the License. package controller import ( + "context" "encoding/json" "fmt" "time" @@ -258,7 +259,7 @@ func (c *scheduleController) submitBackupIfDue(item *api.Schedule, cronSchedule // lead to performance issues). log.WithField("nextRunTime", nextRunTime).Info("Schedule is due, submitting Backup") backup := getBackup(item, now) - if _, err := c.backupsClient.Backups(backup.Namespace).Create(backup); err != nil { + if _, err := c.backupsClient.Backups(backup.Namespace).Create(context.TODO(), backup, metav1.CreateOptions{}); err != nil { return errors.Wrap(err, "error creating Backup") } @@ -313,7 +314,7 @@ func patchSchedule(original, updated *api.Schedule, client velerov1client.Schedu return nil, errors.Wrap(err, "error creating json merge patch for schedule") } - res, err := client.Schedules(original.Namespace).Patch(original.Name, types.MergePatchType, patchBytes) + res, err := client.Schedules(original.Namespace).Patch(context.TODO(), original.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return nil, errors.Wrap(err, "error patching schedule") } diff --git a/pkg/generated/clientset/versioned/clientset.go b/pkg/generated/clientset/versioned/clientset.go index febb07d61..c98ad605e 100644 --- a/pkg/generated/clientset/versioned/clientset.go +++ b/pkg/generated/clientset/versioned/clientset.go @@ -59,7 +59,7 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { if configShallowCopy.Burst <= 0 { - return nil, fmt.Errorf("Burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") } configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/backup.go b/pkg/generated/clientset/versioned/typed/velero/v1/backup.go index 34034ffc5..420bfc5c9 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/backup.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/backup.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type BackupsGetter interface { // BackupInterface has methods to work with Backup resources. type BackupInterface interface { - Create(*v1.Backup) (*v1.Backup, error) - Update(*v1.Backup) (*v1.Backup, error) - UpdateStatus(*v1.Backup) (*v1.Backup, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.Backup, error) - List(opts metav1.ListOptions) (*v1.BackupList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Backup, err error) + Create(ctx context.Context, backup *v1.Backup, opts metav1.CreateOptions) (*v1.Backup, error) + Update(ctx context.Context, backup *v1.Backup, opts metav1.UpdateOptions) (*v1.Backup, error) + UpdateStatus(ctx context.Context, backup *v1.Backup, opts metav1.UpdateOptions) (*v1.Backup, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Backup, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.BackupList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Backup, err error) BackupExpansion } @@ -64,20 +65,20 @@ func newBackups(c *VeleroV1Client, namespace string) *backups { } // Get takes name of the backup, and returns the corresponding backup object, and an error if there is any. -func (c *backups) Get(name string, options metav1.GetOptions) (result *v1.Backup, err error) { +func (c *backups) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Backup, err error) { result = &v1.Backup{} err = c.client.Get(). Namespace(c.ns). Resource("backups"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of Backups that match those selectors. -func (c *backups) List(opts metav1.ListOptions) (result *v1.BackupList, err error) { +func (c *backups) List(ctx context.Context, opts metav1.ListOptions) (result *v1.BackupList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *backups) List(opts metav1.ListOptions) (result *v1.BackupList, err erro Resource("backups"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested backups. -func (c *backups) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *backups) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *backups) Watch(opts metav1.ListOptions) (watch.Interface, error) { Resource("backups"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a backup and creates it. Returns the server's representation of the backup, and an error, if there is any. -func (c *backups) Create(backup *v1.Backup) (result *v1.Backup, err error) { +func (c *backups) Create(ctx context.Context, backup *v1.Backup, opts metav1.CreateOptions) (result *v1.Backup, err error) { result = &v1.Backup{} err = c.client.Post(). Namespace(c.ns). Resource("backups"). + VersionedParams(&opts, scheme.ParameterCodec). Body(backup). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a backup and updates it. Returns the server's representation of the backup, and an error, if there is any. -func (c *backups) Update(backup *v1.Backup) (result *v1.Backup, err error) { +func (c *backups) Update(ctx context.Context, backup *v1.Backup, opts metav1.UpdateOptions) (result *v1.Backup, err error) { result = &v1.Backup{} err = c.client.Put(). Namespace(c.ns). Resource("backups"). Name(backup.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(backup). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *backups) UpdateStatus(backup *v1.Backup) (result *v1.Backup, err error) { +func (c *backups) UpdateStatus(ctx context.Context, backup *v1.Backup, opts metav1.UpdateOptions) (result *v1.Backup, err error) { result = &v1.Backup{} err = c.client.Put(). Namespace(c.ns). Resource("backups"). Name(backup.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(backup). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the backup and deletes it. Returns an error if one occurs. -func (c *backups) Delete(name string, options *metav1.DeleteOptions) error { +func (c *backups) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("backups"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *backups) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *backups) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("backups"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched backup. -func (c *backups) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Backup, err error) { +func (c *backups) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Backup, err error) { result = &v1.Backup{} err = c.client.Patch(pt). Namespace(c.ns). Resource("backups"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/backupstoragelocation.go b/pkg/generated/clientset/versioned/typed/velero/v1/backupstoragelocation.go index 1862fe729..352c08ad2 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/backupstoragelocation.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/backupstoragelocation.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type BackupStorageLocationsGetter interface { // BackupStorageLocationInterface has methods to work with BackupStorageLocation resources. type BackupStorageLocationInterface interface { - Create(*v1.BackupStorageLocation) (*v1.BackupStorageLocation, error) - Update(*v1.BackupStorageLocation) (*v1.BackupStorageLocation, error) - UpdateStatus(*v1.BackupStorageLocation) (*v1.BackupStorageLocation, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.BackupStorageLocation, error) - List(opts metav1.ListOptions) (*v1.BackupStorageLocationList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.BackupStorageLocation, err error) + Create(ctx context.Context, backupStorageLocation *v1.BackupStorageLocation, opts metav1.CreateOptions) (*v1.BackupStorageLocation, error) + Update(ctx context.Context, backupStorageLocation *v1.BackupStorageLocation, opts metav1.UpdateOptions) (*v1.BackupStorageLocation, error) + UpdateStatus(ctx context.Context, backupStorageLocation *v1.BackupStorageLocation, opts metav1.UpdateOptions) (*v1.BackupStorageLocation, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.BackupStorageLocation, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.BackupStorageLocationList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.BackupStorageLocation, err error) BackupStorageLocationExpansion } @@ -64,20 +65,20 @@ func newBackupStorageLocations(c *VeleroV1Client, namespace string) *backupStora } // Get takes name of the backupStorageLocation, and returns the corresponding backupStorageLocation object, and an error if there is any. -func (c *backupStorageLocations) Get(name string, options metav1.GetOptions) (result *v1.BackupStorageLocation, err error) { +func (c *backupStorageLocations) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.BackupStorageLocation, err error) { result = &v1.BackupStorageLocation{} err = c.client.Get(). Namespace(c.ns). Resource("backupstoragelocations"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of BackupStorageLocations that match those selectors. -func (c *backupStorageLocations) List(opts metav1.ListOptions) (result *v1.BackupStorageLocationList, err error) { +func (c *backupStorageLocations) List(ctx context.Context, opts metav1.ListOptions) (result *v1.BackupStorageLocationList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *backupStorageLocations) List(opts metav1.ListOptions) (result *v1.Backu Resource("backupstoragelocations"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested backupStorageLocations. -func (c *backupStorageLocations) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *backupStorageLocations) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *backupStorageLocations) Watch(opts metav1.ListOptions) (watch.Interface Resource("backupstoragelocations"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a backupStorageLocation and creates it. Returns the server's representation of the backupStorageLocation, and an error, if there is any. -func (c *backupStorageLocations) Create(backupStorageLocation *v1.BackupStorageLocation) (result *v1.BackupStorageLocation, err error) { +func (c *backupStorageLocations) Create(ctx context.Context, backupStorageLocation *v1.BackupStorageLocation, opts metav1.CreateOptions) (result *v1.BackupStorageLocation, err error) { result = &v1.BackupStorageLocation{} err = c.client.Post(). Namespace(c.ns). Resource("backupstoragelocations"). + VersionedParams(&opts, scheme.ParameterCodec). Body(backupStorageLocation). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a backupStorageLocation and updates it. Returns the server's representation of the backupStorageLocation, and an error, if there is any. -func (c *backupStorageLocations) Update(backupStorageLocation *v1.BackupStorageLocation) (result *v1.BackupStorageLocation, err error) { +func (c *backupStorageLocations) Update(ctx context.Context, backupStorageLocation *v1.BackupStorageLocation, opts metav1.UpdateOptions) (result *v1.BackupStorageLocation, err error) { result = &v1.BackupStorageLocation{} err = c.client.Put(). Namespace(c.ns). Resource("backupstoragelocations"). Name(backupStorageLocation.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(backupStorageLocation). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *backupStorageLocations) UpdateStatus(backupStorageLocation *v1.BackupStorageLocation) (result *v1.BackupStorageLocation, err error) { +func (c *backupStorageLocations) UpdateStatus(ctx context.Context, backupStorageLocation *v1.BackupStorageLocation, opts metav1.UpdateOptions) (result *v1.BackupStorageLocation, err error) { result = &v1.BackupStorageLocation{} err = c.client.Put(). Namespace(c.ns). Resource("backupstoragelocations"). Name(backupStorageLocation.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(backupStorageLocation). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the backupStorageLocation and deletes it. Returns an error if one occurs. -func (c *backupStorageLocations) Delete(name string, options *metav1.DeleteOptions) error { +func (c *backupStorageLocations) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("backupstoragelocations"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *backupStorageLocations) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *backupStorageLocations) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("backupstoragelocations"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched backupStorageLocation. -func (c *backupStorageLocations) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.BackupStorageLocation, err error) { +func (c *backupStorageLocations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.BackupStorageLocation, err error) { result = &v1.BackupStorageLocation{} err = c.client.Patch(pt). Namespace(c.ns). Resource("backupstoragelocations"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/deletebackuprequest.go b/pkg/generated/clientset/versioned/typed/velero/v1/deletebackuprequest.go index 8da27afc7..e713e4df9 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/deletebackuprequest.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/deletebackuprequest.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type DeleteBackupRequestsGetter interface { // DeleteBackupRequestInterface has methods to work with DeleteBackupRequest resources. type DeleteBackupRequestInterface interface { - Create(*v1.DeleteBackupRequest) (*v1.DeleteBackupRequest, error) - Update(*v1.DeleteBackupRequest) (*v1.DeleteBackupRequest, error) - UpdateStatus(*v1.DeleteBackupRequest) (*v1.DeleteBackupRequest, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.DeleteBackupRequest, error) - List(opts metav1.ListOptions) (*v1.DeleteBackupRequestList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DeleteBackupRequest, err error) + Create(ctx context.Context, deleteBackupRequest *v1.DeleteBackupRequest, opts metav1.CreateOptions) (*v1.DeleteBackupRequest, error) + Update(ctx context.Context, deleteBackupRequest *v1.DeleteBackupRequest, opts metav1.UpdateOptions) (*v1.DeleteBackupRequest, error) + UpdateStatus(ctx context.Context, deleteBackupRequest *v1.DeleteBackupRequest, opts metav1.UpdateOptions) (*v1.DeleteBackupRequest, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.DeleteBackupRequest, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.DeleteBackupRequestList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.DeleteBackupRequest, err error) DeleteBackupRequestExpansion } @@ -64,20 +65,20 @@ func newDeleteBackupRequests(c *VeleroV1Client, namespace string) *deleteBackupR } // Get takes name of the deleteBackupRequest, and returns the corresponding deleteBackupRequest object, and an error if there is any. -func (c *deleteBackupRequests) Get(name string, options metav1.GetOptions) (result *v1.DeleteBackupRequest, err error) { +func (c *deleteBackupRequests) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.DeleteBackupRequest, err error) { result = &v1.DeleteBackupRequest{} err = c.client.Get(). Namespace(c.ns). Resource("deletebackuprequests"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of DeleteBackupRequests that match those selectors. -func (c *deleteBackupRequests) List(opts metav1.ListOptions) (result *v1.DeleteBackupRequestList, err error) { +func (c *deleteBackupRequests) List(ctx context.Context, opts metav1.ListOptions) (result *v1.DeleteBackupRequestList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *deleteBackupRequests) List(opts metav1.ListOptions) (result *v1.DeleteB Resource("deletebackuprequests"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested deleteBackupRequests. -func (c *deleteBackupRequests) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *deleteBackupRequests) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *deleteBackupRequests) Watch(opts metav1.ListOptions) (watch.Interface, Resource("deletebackuprequests"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a deleteBackupRequest and creates it. Returns the server's representation of the deleteBackupRequest, and an error, if there is any. -func (c *deleteBackupRequests) Create(deleteBackupRequest *v1.DeleteBackupRequest) (result *v1.DeleteBackupRequest, err error) { +func (c *deleteBackupRequests) Create(ctx context.Context, deleteBackupRequest *v1.DeleteBackupRequest, opts metav1.CreateOptions) (result *v1.DeleteBackupRequest, err error) { result = &v1.DeleteBackupRequest{} err = c.client.Post(). Namespace(c.ns). Resource("deletebackuprequests"). + VersionedParams(&opts, scheme.ParameterCodec). Body(deleteBackupRequest). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a deleteBackupRequest and updates it. Returns the server's representation of the deleteBackupRequest, and an error, if there is any. -func (c *deleteBackupRequests) Update(deleteBackupRequest *v1.DeleteBackupRequest) (result *v1.DeleteBackupRequest, err error) { +func (c *deleteBackupRequests) Update(ctx context.Context, deleteBackupRequest *v1.DeleteBackupRequest, opts metav1.UpdateOptions) (result *v1.DeleteBackupRequest, err error) { result = &v1.DeleteBackupRequest{} err = c.client.Put(). Namespace(c.ns). Resource("deletebackuprequests"). Name(deleteBackupRequest.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(deleteBackupRequest). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *deleteBackupRequests) UpdateStatus(deleteBackupRequest *v1.DeleteBackupRequest) (result *v1.DeleteBackupRequest, err error) { +func (c *deleteBackupRequests) UpdateStatus(ctx context.Context, deleteBackupRequest *v1.DeleteBackupRequest, opts metav1.UpdateOptions) (result *v1.DeleteBackupRequest, err error) { result = &v1.DeleteBackupRequest{} err = c.client.Put(). Namespace(c.ns). Resource("deletebackuprequests"). Name(deleteBackupRequest.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(deleteBackupRequest). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the deleteBackupRequest and deletes it. Returns an error if one occurs. -func (c *deleteBackupRequests) Delete(name string, options *metav1.DeleteOptions) error { +func (c *deleteBackupRequests) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("deletebackuprequests"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *deleteBackupRequests) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *deleteBackupRequests) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("deletebackuprequests"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched deleteBackupRequest. -func (c *deleteBackupRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DeleteBackupRequest, err error) { +func (c *deleteBackupRequests) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.DeleteBackupRequest, err error) { result = &v1.DeleteBackupRequest{} err = c.client.Patch(pt). Namespace(c.ns). Resource("deletebackuprequests"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/downloadrequest.go b/pkg/generated/clientset/versioned/typed/velero/v1/downloadrequest.go index 558fc1d7a..68e5011f7 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/downloadrequest.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/downloadrequest.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type DownloadRequestsGetter interface { // DownloadRequestInterface has methods to work with DownloadRequest resources. type DownloadRequestInterface interface { - Create(*v1.DownloadRequest) (*v1.DownloadRequest, error) - Update(*v1.DownloadRequest) (*v1.DownloadRequest, error) - UpdateStatus(*v1.DownloadRequest) (*v1.DownloadRequest, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.DownloadRequest, error) - List(opts metav1.ListOptions) (*v1.DownloadRequestList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DownloadRequest, err error) + Create(ctx context.Context, downloadRequest *v1.DownloadRequest, opts metav1.CreateOptions) (*v1.DownloadRequest, error) + Update(ctx context.Context, downloadRequest *v1.DownloadRequest, opts metav1.UpdateOptions) (*v1.DownloadRequest, error) + UpdateStatus(ctx context.Context, downloadRequest *v1.DownloadRequest, opts metav1.UpdateOptions) (*v1.DownloadRequest, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.DownloadRequest, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.DownloadRequestList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.DownloadRequest, err error) DownloadRequestExpansion } @@ -64,20 +65,20 @@ func newDownloadRequests(c *VeleroV1Client, namespace string) *downloadRequests } // Get takes name of the downloadRequest, and returns the corresponding downloadRequest object, and an error if there is any. -func (c *downloadRequests) Get(name string, options metav1.GetOptions) (result *v1.DownloadRequest, err error) { +func (c *downloadRequests) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.DownloadRequest, err error) { result = &v1.DownloadRequest{} err = c.client.Get(). Namespace(c.ns). Resource("downloadrequests"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of DownloadRequests that match those selectors. -func (c *downloadRequests) List(opts metav1.ListOptions) (result *v1.DownloadRequestList, err error) { +func (c *downloadRequests) List(ctx context.Context, opts metav1.ListOptions) (result *v1.DownloadRequestList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *downloadRequests) List(opts metav1.ListOptions) (result *v1.DownloadReq Resource("downloadrequests"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested downloadRequests. -func (c *downloadRequests) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *downloadRequests) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *downloadRequests) Watch(opts metav1.ListOptions) (watch.Interface, erro Resource("downloadrequests"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a downloadRequest and creates it. Returns the server's representation of the downloadRequest, and an error, if there is any. -func (c *downloadRequests) Create(downloadRequest *v1.DownloadRequest) (result *v1.DownloadRequest, err error) { +func (c *downloadRequests) Create(ctx context.Context, downloadRequest *v1.DownloadRequest, opts metav1.CreateOptions) (result *v1.DownloadRequest, err error) { result = &v1.DownloadRequest{} err = c.client.Post(). Namespace(c.ns). Resource("downloadrequests"). + VersionedParams(&opts, scheme.ParameterCodec). Body(downloadRequest). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a downloadRequest and updates it. Returns the server's representation of the downloadRequest, and an error, if there is any. -func (c *downloadRequests) Update(downloadRequest *v1.DownloadRequest) (result *v1.DownloadRequest, err error) { +func (c *downloadRequests) Update(ctx context.Context, downloadRequest *v1.DownloadRequest, opts metav1.UpdateOptions) (result *v1.DownloadRequest, err error) { result = &v1.DownloadRequest{} err = c.client.Put(). Namespace(c.ns). Resource("downloadrequests"). Name(downloadRequest.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(downloadRequest). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *downloadRequests) UpdateStatus(downloadRequest *v1.DownloadRequest) (result *v1.DownloadRequest, err error) { +func (c *downloadRequests) UpdateStatus(ctx context.Context, downloadRequest *v1.DownloadRequest, opts metav1.UpdateOptions) (result *v1.DownloadRequest, err error) { result = &v1.DownloadRequest{} err = c.client.Put(). Namespace(c.ns). Resource("downloadrequests"). Name(downloadRequest.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(downloadRequest). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the downloadRequest and deletes it. Returns an error if one occurs. -func (c *downloadRequests) Delete(name string, options *metav1.DeleteOptions) error { +func (c *downloadRequests) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("downloadrequests"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *downloadRequests) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *downloadRequests) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("downloadrequests"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched downloadRequest. -func (c *downloadRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DownloadRequest, err error) { +func (c *downloadRequests) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.DownloadRequest, err error) { result = &v1.DownloadRequest{} err = c.client.Patch(pt). Namespace(c.ns). Resource("downloadrequests"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_backup.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_backup.go index 4b5dc5c23..4045f4bb5 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_backup.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_backup.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var backupsResource = schema.GroupVersionResource{Group: "velero.io", Version: " var backupsKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "Backup"} // Get takes name of the backup, and returns the corresponding backup object, and an error if there is any. -func (c *FakeBackups) Get(name string, options v1.GetOptions) (result *velerov1.Backup, err error) { +func (c *FakeBackups) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.Backup, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(backupsResource, c.ns, name), &velerov1.Backup{}) @@ -50,7 +52,7 @@ func (c *FakeBackups) Get(name string, options v1.GetOptions) (result *velerov1. } // List takes label and field selectors, and returns the list of Backups that match those selectors. -func (c *FakeBackups) List(opts v1.ListOptions) (result *velerov1.BackupList, err error) { +func (c *FakeBackups) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.BackupList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(backupsResource, backupsKind, c.ns, opts), &velerov1.BackupList{}) @@ -72,14 +74,14 @@ func (c *FakeBackups) List(opts v1.ListOptions) (result *velerov1.BackupList, er } // Watch returns a watch.Interface that watches the requested backups. -func (c *FakeBackups) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeBackups) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(backupsResource, c.ns, opts)) } // Create takes the representation of a backup and creates it. Returns the server's representation of the backup, and an error, if there is any. -func (c *FakeBackups) Create(backup *velerov1.Backup) (result *velerov1.Backup, err error) { +func (c *FakeBackups) Create(ctx context.Context, backup *velerov1.Backup, opts v1.CreateOptions) (result *velerov1.Backup, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(backupsResource, c.ns, backup), &velerov1.Backup{}) @@ -90,7 +92,7 @@ func (c *FakeBackups) Create(backup *velerov1.Backup) (result *velerov1.Backup, } // Update takes the representation of a backup and updates it. Returns the server's representation of the backup, and an error, if there is any. -func (c *FakeBackups) Update(backup *velerov1.Backup) (result *velerov1.Backup, err error) { +func (c *FakeBackups) Update(ctx context.Context, backup *velerov1.Backup, opts v1.UpdateOptions) (result *velerov1.Backup, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(backupsResource, c.ns, backup), &velerov1.Backup{}) @@ -102,7 +104,7 @@ func (c *FakeBackups) Update(backup *velerov1.Backup) (result *velerov1.Backup, // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeBackups) UpdateStatus(backup *velerov1.Backup) (*velerov1.Backup, error) { +func (c *FakeBackups) UpdateStatus(ctx context.Context, backup *velerov1.Backup, opts v1.UpdateOptions) (*velerov1.Backup, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(backupsResource, "status", c.ns, backup), &velerov1.Backup{}) @@ -113,7 +115,7 @@ func (c *FakeBackups) UpdateStatus(backup *velerov1.Backup) (*velerov1.Backup, e } // Delete takes name of the backup and deletes it. Returns an error if one occurs. -func (c *FakeBackups) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeBackups) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(backupsResource, c.ns, name), &velerov1.Backup{}) @@ -121,15 +123,15 @@ func (c *FakeBackups) Delete(name string, options *v1.DeleteOptions) error { } // DeleteCollection deletes a collection of objects. -func (c *FakeBackups) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(backupsResource, c.ns, listOptions) +func (c *FakeBackups) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(backupsResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.BackupList{}) return err } // Patch applies the patch and returns the patched backup. -func (c *FakeBackups) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.Backup, err error) { +func (c *FakeBackups) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.Backup, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(backupsResource, c.ns, name, pt, data, subresources...), &velerov1.Backup{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_backupstoragelocation.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_backupstoragelocation.go index 650ddc7d3..4ad942d05 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_backupstoragelocation.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_backupstoragelocation.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var backupstoragelocationsResource = schema.GroupVersionResource{Group: "velero. var backupstoragelocationsKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "BackupStorageLocation"} // Get takes name of the backupStorageLocation, and returns the corresponding backupStorageLocation object, and an error if there is any. -func (c *FakeBackupStorageLocations) Get(name string, options v1.GetOptions) (result *velerov1.BackupStorageLocation, err error) { +func (c *FakeBackupStorageLocations) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.BackupStorageLocation, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(backupstoragelocationsResource, c.ns, name), &velerov1.BackupStorageLocation{}) @@ -50,7 +52,7 @@ func (c *FakeBackupStorageLocations) Get(name string, options v1.GetOptions) (re } // List takes label and field selectors, and returns the list of BackupStorageLocations that match those selectors. -func (c *FakeBackupStorageLocations) List(opts v1.ListOptions) (result *velerov1.BackupStorageLocationList, err error) { +func (c *FakeBackupStorageLocations) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.BackupStorageLocationList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(backupstoragelocationsResource, backupstoragelocationsKind, c.ns, opts), &velerov1.BackupStorageLocationList{}) @@ -72,14 +74,14 @@ func (c *FakeBackupStorageLocations) List(opts v1.ListOptions) (result *velerov1 } // Watch returns a watch.Interface that watches the requested backupStorageLocations. -func (c *FakeBackupStorageLocations) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeBackupStorageLocations) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(backupstoragelocationsResource, c.ns, opts)) } // Create takes the representation of a backupStorageLocation and creates it. Returns the server's representation of the backupStorageLocation, and an error, if there is any. -func (c *FakeBackupStorageLocations) Create(backupStorageLocation *velerov1.BackupStorageLocation) (result *velerov1.BackupStorageLocation, err error) { +func (c *FakeBackupStorageLocations) Create(ctx context.Context, backupStorageLocation *velerov1.BackupStorageLocation, opts v1.CreateOptions) (result *velerov1.BackupStorageLocation, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(backupstoragelocationsResource, c.ns, backupStorageLocation), &velerov1.BackupStorageLocation{}) @@ -90,7 +92,7 @@ func (c *FakeBackupStorageLocations) Create(backupStorageLocation *velerov1.Back } // Update takes the representation of a backupStorageLocation and updates it. Returns the server's representation of the backupStorageLocation, and an error, if there is any. -func (c *FakeBackupStorageLocations) Update(backupStorageLocation *velerov1.BackupStorageLocation) (result *velerov1.BackupStorageLocation, err error) { +func (c *FakeBackupStorageLocations) Update(ctx context.Context, backupStorageLocation *velerov1.BackupStorageLocation, opts v1.UpdateOptions) (result *velerov1.BackupStorageLocation, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(backupstoragelocationsResource, c.ns, backupStorageLocation), &velerov1.BackupStorageLocation{}) @@ -102,7 +104,7 @@ func (c *FakeBackupStorageLocations) Update(backupStorageLocation *velerov1.Back // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeBackupStorageLocations) UpdateStatus(backupStorageLocation *velerov1.BackupStorageLocation) (*velerov1.BackupStorageLocation, error) { +func (c *FakeBackupStorageLocations) UpdateStatus(ctx context.Context, backupStorageLocation *velerov1.BackupStorageLocation, opts v1.UpdateOptions) (*velerov1.BackupStorageLocation, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(backupstoragelocationsResource, "status", c.ns, backupStorageLocation), &velerov1.BackupStorageLocation{}) @@ -113,7 +115,7 @@ func (c *FakeBackupStorageLocations) UpdateStatus(backupStorageLocation *velerov } // Delete takes name of the backupStorageLocation and deletes it. Returns an error if one occurs. -func (c *FakeBackupStorageLocations) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeBackupStorageLocations) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(backupstoragelocationsResource, c.ns, name), &velerov1.BackupStorageLocation{}) @@ -121,15 +123,15 @@ func (c *FakeBackupStorageLocations) Delete(name string, options *v1.DeleteOptio } // DeleteCollection deletes a collection of objects. -func (c *FakeBackupStorageLocations) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(backupstoragelocationsResource, c.ns, listOptions) +func (c *FakeBackupStorageLocations) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(backupstoragelocationsResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.BackupStorageLocationList{}) return err } // Patch applies the patch and returns the patched backupStorageLocation. -func (c *FakeBackupStorageLocations) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.BackupStorageLocation, err error) { +func (c *FakeBackupStorageLocations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.BackupStorageLocation, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(backupstoragelocationsResource, c.ns, name, pt, data, subresources...), &velerov1.BackupStorageLocation{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_deletebackuprequest.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_deletebackuprequest.go index 3d299fa5f..50a8a466d 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_deletebackuprequest.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_deletebackuprequest.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var deletebackuprequestsResource = schema.GroupVersionResource{Group: "velero.io var deletebackuprequestsKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "DeleteBackupRequest"} // Get takes name of the deleteBackupRequest, and returns the corresponding deleteBackupRequest object, and an error if there is any. -func (c *FakeDeleteBackupRequests) Get(name string, options v1.GetOptions) (result *velerov1.DeleteBackupRequest, err error) { +func (c *FakeDeleteBackupRequests) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.DeleteBackupRequest, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(deletebackuprequestsResource, c.ns, name), &velerov1.DeleteBackupRequest{}) @@ -50,7 +52,7 @@ func (c *FakeDeleteBackupRequests) Get(name string, options v1.GetOptions) (resu } // List takes label and field selectors, and returns the list of DeleteBackupRequests that match those selectors. -func (c *FakeDeleteBackupRequests) List(opts v1.ListOptions) (result *velerov1.DeleteBackupRequestList, err error) { +func (c *FakeDeleteBackupRequests) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.DeleteBackupRequestList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(deletebackuprequestsResource, deletebackuprequestsKind, c.ns, opts), &velerov1.DeleteBackupRequestList{}) @@ -72,14 +74,14 @@ func (c *FakeDeleteBackupRequests) List(opts v1.ListOptions) (result *velerov1.D } // Watch returns a watch.Interface that watches the requested deleteBackupRequests. -func (c *FakeDeleteBackupRequests) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeDeleteBackupRequests) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(deletebackuprequestsResource, c.ns, opts)) } // Create takes the representation of a deleteBackupRequest and creates it. Returns the server's representation of the deleteBackupRequest, and an error, if there is any. -func (c *FakeDeleteBackupRequests) Create(deleteBackupRequest *velerov1.DeleteBackupRequest) (result *velerov1.DeleteBackupRequest, err error) { +func (c *FakeDeleteBackupRequests) Create(ctx context.Context, deleteBackupRequest *velerov1.DeleteBackupRequest, opts v1.CreateOptions) (result *velerov1.DeleteBackupRequest, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(deletebackuprequestsResource, c.ns, deleteBackupRequest), &velerov1.DeleteBackupRequest{}) @@ -90,7 +92,7 @@ func (c *FakeDeleteBackupRequests) Create(deleteBackupRequest *velerov1.DeleteBa } // Update takes the representation of a deleteBackupRequest and updates it. Returns the server's representation of the deleteBackupRequest, and an error, if there is any. -func (c *FakeDeleteBackupRequests) Update(deleteBackupRequest *velerov1.DeleteBackupRequest) (result *velerov1.DeleteBackupRequest, err error) { +func (c *FakeDeleteBackupRequests) Update(ctx context.Context, deleteBackupRequest *velerov1.DeleteBackupRequest, opts v1.UpdateOptions) (result *velerov1.DeleteBackupRequest, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(deletebackuprequestsResource, c.ns, deleteBackupRequest), &velerov1.DeleteBackupRequest{}) @@ -102,7 +104,7 @@ func (c *FakeDeleteBackupRequests) Update(deleteBackupRequest *velerov1.DeleteBa // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeDeleteBackupRequests) UpdateStatus(deleteBackupRequest *velerov1.DeleteBackupRequest) (*velerov1.DeleteBackupRequest, error) { +func (c *FakeDeleteBackupRequests) UpdateStatus(ctx context.Context, deleteBackupRequest *velerov1.DeleteBackupRequest, opts v1.UpdateOptions) (*velerov1.DeleteBackupRequest, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(deletebackuprequestsResource, "status", c.ns, deleteBackupRequest), &velerov1.DeleteBackupRequest{}) @@ -113,7 +115,7 @@ func (c *FakeDeleteBackupRequests) UpdateStatus(deleteBackupRequest *velerov1.De } // Delete takes name of the deleteBackupRequest and deletes it. Returns an error if one occurs. -func (c *FakeDeleteBackupRequests) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeDeleteBackupRequests) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(deletebackuprequestsResource, c.ns, name), &velerov1.DeleteBackupRequest{}) @@ -121,15 +123,15 @@ func (c *FakeDeleteBackupRequests) Delete(name string, options *v1.DeleteOptions } // DeleteCollection deletes a collection of objects. -func (c *FakeDeleteBackupRequests) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(deletebackuprequestsResource, c.ns, listOptions) +func (c *FakeDeleteBackupRequests) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(deletebackuprequestsResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.DeleteBackupRequestList{}) return err } // Patch applies the patch and returns the patched deleteBackupRequest. -func (c *FakeDeleteBackupRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.DeleteBackupRequest, err error) { +func (c *FakeDeleteBackupRequests) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.DeleteBackupRequest, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(deletebackuprequestsResource, c.ns, name, pt, data, subresources...), &velerov1.DeleteBackupRequest{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_downloadrequest.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_downloadrequest.go index 9a2b550ae..04e7f0e6e 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_downloadrequest.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_downloadrequest.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var downloadrequestsResource = schema.GroupVersionResource{Group: "velero.io", V var downloadrequestsKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "DownloadRequest"} // Get takes name of the downloadRequest, and returns the corresponding downloadRequest object, and an error if there is any. -func (c *FakeDownloadRequests) Get(name string, options v1.GetOptions) (result *velerov1.DownloadRequest, err error) { +func (c *FakeDownloadRequests) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.DownloadRequest, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(downloadrequestsResource, c.ns, name), &velerov1.DownloadRequest{}) @@ -50,7 +52,7 @@ func (c *FakeDownloadRequests) Get(name string, options v1.GetOptions) (result * } // List takes label and field selectors, and returns the list of DownloadRequests that match those selectors. -func (c *FakeDownloadRequests) List(opts v1.ListOptions) (result *velerov1.DownloadRequestList, err error) { +func (c *FakeDownloadRequests) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.DownloadRequestList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(downloadrequestsResource, downloadrequestsKind, c.ns, opts), &velerov1.DownloadRequestList{}) @@ -72,14 +74,14 @@ func (c *FakeDownloadRequests) List(opts v1.ListOptions) (result *velerov1.Downl } // Watch returns a watch.Interface that watches the requested downloadRequests. -func (c *FakeDownloadRequests) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeDownloadRequests) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(downloadrequestsResource, c.ns, opts)) } // Create takes the representation of a downloadRequest and creates it. Returns the server's representation of the downloadRequest, and an error, if there is any. -func (c *FakeDownloadRequests) Create(downloadRequest *velerov1.DownloadRequest) (result *velerov1.DownloadRequest, err error) { +func (c *FakeDownloadRequests) Create(ctx context.Context, downloadRequest *velerov1.DownloadRequest, opts v1.CreateOptions) (result *velerov1.DownloadRequest, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(downloadrequestsResource, c.ns, downloadRequest), &velerov1.DownloadRequest{}) @@ -90,7 +92,7 @@ func (c *FakeDownloadRequests) Create(downloadRequest *velerov1.DownloadRequest) } // Update takes the representation of a downloadRequest and updates it. Returns the server's representation of the downloadRequest, and an error, if there is any. -func (c *FakeDownloadRequests) Update(downloadRequest *velerov1.DownloadRequest) (result *velerov1.DownloadRequest, err error) { +func (c *FakeDownloadRequests) Update(ctx context.Context, downloadRequest *velerov1.DownloadRequest, opts v1.UpdateOptions) (result *velerov1.DownloadRequest, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(downloadrequestsResource, c.ns, downloadRequest), &velerov1.DownloadRequest{}) @@ -102,7 +104,7 @@ func (c *FakeDownloadRequests) Update(downloadRequest *velerov1.DownloadRequest) // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeDownloadRequests) UpdateStatus(downloadRequest *velerov1.DownloadRequest) (*velerov1.DownloadRequest, error) { +func (c *FakeDownloadRequests) UpdateStatus(ctx context.Context, downloadRequest *velerov1.DownloadRequest, opts v1.UpdateOptions) (*velerov1.DownloadRequest, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(downloadrequestsResource, "status", c.ns, downloadRequest), &velerov1.DownloadRequest{}) @@ -113,7 +115,7 @@ func (c *FakeDownloadRequests) UpdateStatus(downloadRequest *velerov1.DownloadRe } // Delete takes name of the downloadRequest and deletes it. Returns an error if one occurs. -func (c *FakeDownloadRequests) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeDownloadRequests) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(downloadrequestsResource, c.ns, name), &velerov1.DownloadRequest{}) @@ -121,15 +123,15 @@ func (c *FakeDownloadRequests) Delete(name string, options *v1.DeleteOptions) er } // DeleteCollection deletes a collection of objects. -func (c *FakeDownloadRequests) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(downloadrequestsResource, c.ns, listOptions) +func (c *FakeDownloadRequests) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(downloadrequestsResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.DownloadRequestList{}) return err } // Patch applies the patch and returns the patched downloadRequest. -func (c *FakeDownloadRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.DownloadRequest, err error) { +func (c *FakeDownloadRequests) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.DownloadRequest, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(downloadrequestsResource, c.ns, name, pt, data, subresources...), &velerov1.DownloadRequest{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_podvolumebackup.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_podvolumebackup.go index 59f3d5189..00c76f935 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_podvolumebackup.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_podvolumebackup.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var podvolumebackupsResource = schema.GroupVersionResource{Group: "velero.io", V var podvolumebackupsKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "PodVolumeBackup"} // Get takes name of the podVolumeBackup, and returns the corresponding podVolumeBackup object, and an error if there is any. -func (c *FakePodVolumeBackups) Get(name string, options v1.GetOptions) (result *velerov1.PodVolumeBackup, err error) { +func (c *FakePodVolumeBackups) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.PodVolumeBackup, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(podvolumebackupsResource, c.ns, name), &velerov1.PodVolumeBackup{}) @@ -50,7 +52,7 @@ func (c *FakePodVolumeBackups) Get(name string, options v1.GetOptions) (result * } // List takes label and field selectors, and returns the list of PodVolumeBackups that match those selectors. -func (c *FakePodVolumeBackups) List(opts v1.ListOptions) (result *velerov1.PodVolumeBackupList, err error) { +func (c *FakePodVolumeBackups) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.PodVolumeBackupList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(podvolumebackupsResource, podvolumebackupsKind, c.ns, opts), &velerov1.PodVolumeBackupList{}) @@ -72,14 +74,14 @@ func (c *FakePodVolumeBackups) List(opts v1.ListOptions) (result *velerov1.PodVo } // Watch returns a watch.Interface that watches the requested podVolumeBackups. -func (c *FakePodVolumeBackups) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakePodVolumeBackups) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(podvolumebackupsResource, c.ns, opts)) } // Create takes the representation of a podVolumeBackup and creates it. Returns the server's representation of the podVolumeBackup, and an error, if there is any. -func (c *FakePodVolumeBackups) Create(podVolumeBackup *velerov1.PodVolumeBackup) (result *velerov1.PodVolumeBackup, err error) { +func (c *FakePodVolumeBackups) Create(ctx context.Context, podVolumeBackup *velerov1.PodVolumeBackup, opts v1.CreateOptions) (result *velerov1.PodVolumeBackup, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(podvolumebackupsResource, c.ns, podVolumeBackup), &velerov1.PodVolumeBackup{}) @@ -90,7 +92,7 @@ func (c *FakePodVolumeBackups) Create(podVolumeBackup *velerov1.PodVolumeBackup) } // Update takes the representation of a podVolumeBackup and updates it. Returns the server's representation of the podVolumeBackup, and an error, if there is any. -func (c *FakePodVolumeBackups) Update(podVolumeBackup *velerov1.PodVolumeBackup) (result *velerov1.PodVolumeBackup, err error) { +func (c *FakePodVolumeBackups) Update(ctx context.Context, podVolumeBackup *velerov1.PodVolumeBackup, opts v1.UpdateOptions) (result *velerov1.PodVolumeBackup, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(podvolumebackupsResource, c.ns, podVolumeBackup), &velerov1.PodVolumeBackup{}) @@ -102,7 +104,7 @@ func (c *FakePodVolumeBackups) Update(podVolumeBackup *velerov1.PodVolumeBackup) // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakePodVolumeBackups) UpdateStatus(podVolumeBackup *velerov1.PodVolumeBackup) (*velerov1.PodVolumeBackup, error) { +func (c *FakePodVolumeBackups) UpdateStatus(ctx context.Context, podVolumeBackup *velerov1.PodVolumeBackup, opts v1.UpdateOptions) (*velerov1.PodVolumeBackup, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(podvolumebackupsResource, "status", c.ns, podVolumeBackup), &velerov1.PodVolumeBackup{}) @@ -113,7 +115,7 @@ func (c *FakePodVolumeBackups) UpdateStatus(podVolumeBackup *velerov1.PodVolumeB } // Delete takes name of the podVolumeBackup and deletes it. Returns an error if one occurs. -func (c *FakePodVolumeBackups) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakePodVolumeBackups) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(podvolumebackupsResource, c.ns, name), &velerov1.PodVolumeBackup{}) @@ -121,15 +123,15 @@ func (c *FakePodVolumeBackups) Delete(name string, options *v1.DeleteOptions) er } // DeleteCollection deletes a collection of objects. -func (c *FakePodVolumeBackups) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(podvolumebackupsResource, c.ns, listOptions) +func (c *FakePodVolumeBackups) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(podvolumebackupsResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.PodVolumeBackupList{}) return err } // Patch applies the patch and returns the patched podVolumeBackup. -func (c *FakePodVolumeBackups) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.PodVolumeBackup, err error) { +func (c *FakePodVolumeBackups) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.PodVolumeBackup, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(podvolumebackupsResource, c.ns, name, pt, data, subresources...), &velerov1.PodVolumeBackup{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_podvolumerestore.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_podvolumerestore.go index 604eedb40..da1238797 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_podvolumerestore.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_podvolumerestore.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var podvolumerestoresResource = schema.GroupVersionResource{Group: "velero.io", var podvolumerestoresKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "PodVolumeRestore"} // Get takes name of the podVolumeRestore, and returns the corresponding podVolumeRestore object, and an error if there is any. -func (c *FakePodVolumeRestores) Get(name string, options v1.GetOptions) (result *velerov1.PodVolumeRestore, err error) { +func (c *FakePodVolumeRestores) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.PodVolumeRestore, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(podvolumerestoresResource, c.ns, name), &velerov1.PodVolumeRestore{}) @@ -50,7 +52,7 @@ func (c *FakePodVolumeRestores) Get(name string, options v1.GetOptions) (result } // List takes label and field selectors, and returns the list of PodVolumeRestores that match those selectors. -func (c *FakePodVolumeRestores) List(opts v1.ListOptions) (result *velerov1.PodVolumeRestoreList, err error) { +func (c *FakePodVolumeRestores) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.PodVolumeRestoreList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(podvolumerestoresResource, podvolumerestoresKind, c.ns, opts), &velerov1.PodVolumeRestoreList{}) @@ -72,14 +74,14 @@ func (c *FakePodVolumeRestores) List(opts v1.ListOptions) (result *velerov1.PodV } // Watch returns a watch.Interface that watches the requested podVolumeRestores. -func (c *FakePodVolumeRestores) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakePodVolumeRestores) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(podvolumerestoresResource, c.ns, opts)) } // Create takes the representation of a podVolumeRestore and creates it. Returns the server's representation of the podVolumeRestore, and an error, if there is any. -func (c *FakePodVolumeRestores) Create(podVolumeRestore *velerov1.PodVolumeRestore) (result *velerov1.PodVolumeRestore, err error) { +func (c *FakePodVolumeRestores) Create(ctx context.Context, podVolumeRestore *velerov1.PodVolumeRestore, opts v1.CreateOptions) (result *velerov1.PodVolumeRestore, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(podvolumerestoresResource, c.ns, podVolumeRestore), &velerov1.PodVolumeRestore{}) @@ -90,7 +92,7 @@ func (c *FakePodVolumeRestores) Create(podVolumeRestore *velerov1.PodVolumeResto } // Update takes the representation of a podVolumeRestore and updates it. Returns the server's representation of the podVolumeRestore, and an error, if there is any. -func (c *FakePodVolumeRestores) Update(podVolumeRestore *velerov1.PodVolumeRestore) (result *velerov1.PodVolumeRestore, err error) { +func (c *FakePodVolumeRestores) Update(ctx context.Context, podVolumeRestore *velerov1.PodVolumeRestore, opts v1.UpdateOptions) (result *velerov1.PodVolumeRestore, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(podvolumerestoresResource, c.ns, podVolumeRestore), &velerov1.PodVolumeRestore{}) @@ -102,7 +104,7 @@ func (c *FakePodVolumeRestores) Update(podVolumeRestore *velerov1.PodVolumeResto // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakePodVolumeRestores) UpdateStatus(podVolumeRestore *velerov1.PodVolumeRestore) (*velerov1.PodVolumeRestore, error) { +func (c *FakePodVolumeRestores) UpdateStatus(ctx context.Context, podVolumeRestore *velerov1.PodVolumeRestore, opts v1.UpdateOptions) (*velerov1.PodVolumeRestore, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(podvolumerestoresResource, "status", c.ns, podVolumeRestore), &velerov1.PodVolumeRestore{}) @@ -113,7 +115,7 @@ func (c *FakePodVolumeRestores) UpdateStatus(podVolumeRestore *velerov1.PodVolum } // Delete takes name of the podVolumeRestore and deletes it. Returns an error if one occurs. -func (c *FakePodVolumeRestores) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakePodVolumeRestores) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(podvolumerestoresResource, c.ns, name), &velerov1.PodVolumeRestore{}) @@ -121,15 +123,15 @@ func (c *FakePodVolumeRestores) Delete(name string, options *v1.DeleteOptions) e } // DeleteCollection deletes a collection of objects. -func (c *FakePodVolumeRestores) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(podvolumerestoresResource, c.ns, listOptions) +func (c *FakePodVolumeRestores) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(podvolumerestoresResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.PodVolumeRestoreList{}) return err } // Patch applies the patch and returns the patched podVolumeRestore. -func (c *FakePodVolumeRestores) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.PodVolumeRestore, err error) { +func (c *FakePodVolumeRestores) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.PodVolumeRestore, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(podvolumerestoresResource, c.ns, name, pt, data, subresources...), &velerov1.PodVolumeRestore{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_resticrepository.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_resticrepository.go index a08d38f72..aeda0c9cb 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_resticrepository.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_resticrepository.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var resticrepositoriesResource = schema.GroupVersionResource{Group: "velero.io", var resticrepositoriesKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "ResticRepository"} // Get takes name of the resticRepository, and returns the corresponding resticRepository object, and an error if there is any. -func (c *FakeResticRepositories) Get(name string, options v1.GetOptions) (result *velerov1.ResticRepository, err error) { +func (c *FakeResticRepositories) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.ResticRepository, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(resticrepositoriesResource, c.ns, name), &velerov1.ResticRepository{}) @@ -50,7 +52,7 @@ func (c *FakeResticRepositories) Get(name string, options v1.GetOptions) (result } // List takes label and field selectors, and returns the list of ResticRepositories that match those selectors. -func (c *FakeResticRepositories) List(opts v1.ListOptions) (result *velerov1.ResticRepositoryList, err error) { +func (c *FakeResticRepositories) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.ResticRepositoryList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(resticrepositoriesResource, resticrepositoriesKind, c.ns, opts), &velerov1.ResticRepositoryList{}) @@ -72,14 +74,14 @@ func (c *FakeResticRepositories) List(opts v1.ListOptions) (result *velerov1.Res } // Watch returns a watch.Interface that watches the requested resticRepositories. -func (c *FakeResticRepositories) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeResticRepositories) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(resticrepositoriesResource, c.ns, opts)) } // Create takes the representation of a resticRepository and creates it. Returns the server's representation of the resticRepository, and an error, if there is any. -func (c *FakeResticRepositories) Create(resticRepository *velerov1.ResticRepository) (result *velerov1.ResticRepository, err error) { +func (c *FakeResticRepositories) Create(ctx context.Context, resticRepository *velerov1.ResticRepository, opts v1.CreateOptions) (result *velerov1.ResticRepository, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(resticrepositoriesResource, c.ns, resticRepository), &velerov1.ResticRepository{}) @@ -90,7 +92,7 @@ func (c *FakeResticRepositories) Create(resticRepository *velerov1.ResticReposit } // Update takes the representation of a resticRepository and updates it. Returns the server's representation of the resticRepository, and an error, if there is any. -func (c *FakeResticRepositories) Update(resticRepository *velerov1.ResticRepository) (result *velerov1.ResticRepository, err error) { +func (c *FakeResticRepositories) Update(ctx context.Context, resticRepository *velerov1.ResticRepository, opts v1.UpdateOptions) (result *velerov1.ResticRepository, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(resticrepositoriesResource, c.ns, resticRepository), &velerov1.ResticRepository{}) @@ -102,7 +104,7 @@ func (c *FakeResticRepositories) Update(resticRepository *velerov1.ResticReposit // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeResticRepositories) UpdateStatus(resticRepository *velerov1.ResticRepository) (*velerov1.ResticRepository, error) { +func (c *FakeResticRepositories) UpdateStatus(ctx context.Context, resticRepository *velerov1.ResticRepository, opts v1.UpdateOptions) (*velerov1.ResticRepository, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(resticrepositoriesResource, "status", c.ns, resticRepository), &velerov1.ResticRepository{}) @@ -113,7 +115,7 @@ func (c *FakeResticRepositories) UpdateStatus(resticRepository *velerov1.ResticR } // Delete takes name of the resticRepository and deletes it. Returns an error if one occurs. -func (c *FakeResticRepositories) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeResticRepositories) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(resticrepositoriesResource, c.ns, name), &velerov1.ResticRepository{}) @@ -121,15 +123,15 @@ func (c *FakeResticRepositories) Delete(name string, options *v1.DeleteOptions) } // DeleteCollection deletes a collection of objects. -func (c *FakeResticRepositories) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(resticrepositoriesResource, c.ns, listOptions) +func (c *FakeResticRepositories) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(resticrepositoriesResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.ResticRepositoryList{}) return err } // Patch applies the patch and returns the patched resticRepository. -func (c *FakeResticRepositories) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.ResticRepository, err error) { +func (c *FakeResticRepositories) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.ResticRepository, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(resticrepositoriesResource, c.ns, name, pt, data, subresources...), &velerov1.ResticRepository{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_restore.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_restore.go index 9c3505bc7..73e00128a 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_restore.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_restore.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var restoresResource = schema.GroupVersionResource{Group: "velero.io", Version: var restoresKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "Restore"} // Get takes name of the restore, and returns the corresponding restore object, and an error if there is any. -func (c *FakeRestores) Get(name string, options v1.GetOptions) (result *velerov1.Restore, err error) { +func (c *FakeRestores) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.Restore, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(restoresResource, c.ns, name), &velerov1.Restore{}) @@ -50,7 +52,7 @@ func (c *FakeRestores) Get(name string, options v1.GetOptions) (result *velerov1 } // List takes label and field selectors, and returns the list of Restores that match those selectors. -func (c *FakeRestores) List(opts v1.ListOptions) (result *velerov1.RestoreList, err error) { +func (c *FakeRestores) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.RestoreList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(restoresResource, restoresKind, c.ns, opts), &velerov1.RestoreList{}) @@ -72,14 +74,14 @@ func (c *FakeRestores) List(opts v1.ListOptions) (result *velerov1.RestoreList, } // Watch returns a watch.Interface that watches the requested restores. -func (c *FakeRestores) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeRestores) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(restoresResource, c.ns, opts)) } // Create takes the representation of a restore and creates it. Returns the server's representation of the restore, and an error, if there is any. -func (c *FakeRestores) Create(restore *velerov1.Restore) (result *velerov1.Restore, err error) { +func (c *FakeRestores) Create(ctx context.Context, restore *velerov1.Restore, opts v1.CreateOptions) (result *velerov1.Restore, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(restoresResource, c.ns, restore), &velerov1.Restore{}) @@ -90,7 +92,7 @@ func (c *FakeRestores) Create(restore *velerov1.Restore) (result *velerov1.Resto } // Update takes the representation of a restore and updates it. Returns the server's representation of the restore, and an error, if there is any. -func (c *FakeRestores) Update(restore *velerov1.Restore) (result *velerov1.Restore, err error) { +func (c *FakeRestores) Update(ctx context.Context, restore *velerov1.Restore, opts v1.UpdateOptions) (result *velerov1.Restore, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(restoresResource, c.ns, restore), &velerov1.Restore{}) @@ -102,7 +104,7 @@ func (c *FakeRestores) Update(restore *velerov1.Restore) (result *velerov1.Resto // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeRestores) UpdateStatus(restore *velerov1.Restore) (*velerov1.Restore, error) { +func (c *FakeRestores) UpdateStatus(ctx context.Context, restore *velerov1.Restore, opts v1.UpdateOptions) (*velerov1.Restore, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(restoresResource, "status", c.ns, restore), &velerov1.Restore{}) @@ -113,7 +115,7 @@ func (c *FakeRestores) UpdateStatus(restore *velerov1.Restore) (*velerov1.Restor } // Delete takes name of the restore and deletes it. Returns an error if one occurs. -func (c *FakeRestores) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeRestores) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(restoresResource, c.ns, name), &velerov1.Restore{}) @@ -121,15 +123,15 @@ func (c *FakeRestores) Delete(name string, options *v1.DeleteOptions) error { } // DeleteCollection deletes a collection of objects. -func (c *FakeRestores) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(restoresResource, c.ns, listOptions) +func (c *FakeRestores) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(restoresResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.RestoreList{}) return err } // Patch applies the patch and returns the patched restore. -func (c *FakeRestores) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.Restore, err error) { +func (c *FakeRestores) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.Restore, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(restoresResource, c.ns, name, pt, data, subresources...), &velerov1.Restore{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_schedule.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_schedule.go index 0d5fb39d4..5789e7e9e 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_schedule.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_schedule.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var schedulesResource = schema.GroupVersionResource{Group: "velero.io", Version: var schedulesKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "Schedule"} // Get takes name of the schedule, and returns the corresponding schedule object, and an error if there is any. -func (c *FakeSchedules) Get(name string, options v1.GetOptions) (result *velerov1.Schedule, err error) { +func (c *FakeSchedules) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.Schedule, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(schedulesResource, c.ns, name), &velerov1.Schedule{}) @@ -50,7 +52,7 @@ func (c *FakeSchedules) Get(name string, options v1.GetOptions) (result *velerov } // List takes label and field selectors, and returns the list of Schedules that match those selectors. -func (c *FakeSchedules) List(opts v1.ListOptions) (result *velerov1.ScheduleList, err error) { +func (c *FakeSchedules) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.ScheduleList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(schedulesResource, schedulesKind, c.ns, opts), &velerov1.ScheduleList{}) @@ -72,14 +74,14 @@ func (c *FakeSchedules) List(opts v1.ListOptions) (result *velerov1.ScheduleList } // Watch returns a watch.Interface that watches the requested schedules. -func (c *FakeSchedules) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeSchedules) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(schedulesResource, c.ns, opts)) } // Create takes the representation of a schedule and creates it. Returns the server's representation of the schedule, and an error, if there is any. -func (c *FakeSchedules) Create(schedule *velerov1.Schedule) (result *velerov1.Schedule, err error) { +func (c *FakeSchedules) Create(ctx context.Context, schedule *velerov1.Schedule, opts v1.CreateOptions) (result *velerov1.Schedule, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(schedulesResource, c.ns, schedule), &velerov1.Schedule{}) @@ -90,7 +92,7 @@ func (c *FakeSchedules) Create(schedule *velerov1.Schedule) (result *velerov1.Sc } // Update takes the representation of a schedule and updates it. Returns the server's representation of the schedule, and an error, if there is any. -func (c *FakeSchedules) Update(schedule *velerov1.Schedule) (result *velerov1.Schedule, err error) { +func (c *FakeSchedules) Update(ctx context.Context, schedule *velerov1.Schedule, opts v1.UpdateOptions) (result *velerov1.Schedule, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(schedulesResource, c.ns, schedule), &velerov1.Schedule{}) @@ -102,7 +104,7 @@ func (c *FakeSchedules) Update(schedule *velerov1.Schedule) (result *velerov1.Sc // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeSchedules) UpdateStatus(schedule *velerov1.Schedule) (*velerov1.Schedule, error) { +func (c *FakeSchedules) UpdateStatus(ctx context.Context, schedule *velerov1.Schedule, opts v1.UpdateOptions) (*velerov1.Schedule, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(schedulesResource, "status", c.ns, schedule), &velerov1.Schedule{}) @@ -113,7 +115,7 @@ func (c *FakeSchedules) UpdateStatus(schedule *velerov1.Schedule) (*velerov1.Sch } // Delete takes name of the schedule and deletes it. Returns an error if one occurs. -func (c *FakeSchedules) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeSchedules) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(schedulesResource, c.ns, name), &velerov1.Schedule{}) @@ -121,15 +123,15 @@ func (c *FakeSchedules) Delete(name string, options *v1.DeleteOptions) error { } // DeleteCollection deletes a collection of objects. -func (c *FakeSchedules) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(schedulesResource, c.ns, listOptions) +func (c *FakeSchedules) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(schedulesResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.ScheduleList{}) return err } // Patch applies the patch and returns the patched schedule. -func (c *FakeSchedules) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.Schedule, err error) { +func (c *FakeSchedules) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.Schedule, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(schedulesResource, c.ns, name, pt, data, subresources...), &velerov1.Schedule{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_serverstatusrequest.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_serverstatusrequest.go index c90d19669..dc0c9e4ee 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_serverstatusrequest.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_serverstatusrequest.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var serverstatusrequestsResource = schema.GroupVersionResource{Group: "velero.io var serverstatusrequestsKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "ServerStatusRequest"} // Get takes name of the serverStatusRequest, and returns the corresponding serverStatusRequest object, and an error if there is any. -func (c *FakeServerStatusRequests) Get(name string, options v1.GetOptions) (result *velerov1.ServerStatusRequest, err error) { +func (c *FakeServerStatusRequests) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.ServerStatusRequest, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(serverstatusrequestsResource, c.ns, name), &velerov1.ServerStatusRequest{}) @@ -50,7 +52,7 @@ func (c *FakeServerStatusRequests) Get(name string, options v1.GetOptions) (resu } // List takes label and field selectors, and returns the list of ServerStatusRequests that match those selectors. -func (c *FakeServerStatusRequests) List(opts v1.ListOptions) (result *velerov1.ServerStatusRequestList, err error) { +func (c *FakeServerStatusRequests) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.ServerStatusRequestList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(serverstatusrequestsResource, serverstatusrequestsKind, c.ns, opts), &velerov1.ServerStatusRequestList{}) @@ -72,14 +74,14 @@ func (c *FakeServerStatusRequests) List(opts v1.ListOptions) (result *velerov1.S } // Watch returns a watch.Interface that watches the requested serverStatusRequests. -func (c *FakeServerStatusRequests) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeServerStatusRequests) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(serverstatusrequestsResource, c.ns, opts)) } // Create takes the representation of a serverStatusRequest and creates it. Returns the server's representation of the serverStatusRequest, and an error, if there is any. -func (c *FakeServerStatusRequests) Create(serverStatusRequest *velerov1.ServerStatusRequest) (result *velerov1.ServerStatusRequest, err error) { +func (c *FakeServerStatusRequests) Create(ctx context.Context, serverStatusRequest *velerov1.ServerStatusRequest, opts v1.CreateOptions) (result *velerov1.ServerStatusRequest, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(serverstatusrequestsResource, c.ns, serverStatusRequest), &velerov1.ServerStatusRequest{}) @@ -90,7 +92,7 @@ func (c *FakeServerStatusRequests) Create(serverStatusRequest *velerov1.ServerSt } // Update takes the representation of a serverStatusRequest and updates it. Returns the server's representation of the serverStatusRequest, and an error, if there is any. -func (c *FakeServerStatusRequests) Update(serverStatusRequest *velerov1.ServerStatusRequest) (result *velerov1.ServerStatusRequest, err error) { +func (c *FakeServerStatusRequests) Update(ctx context.Context, serverStatusRequest *velerov1.ServerStatusRequest, opts v1.UpdateOptions) (result *velerov1.ServerStatusRequest, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(serverstatusrequestsResource, c.ns, serverStatusRequest), &velerov1.ServerStatusRequest{}) @@ -102,7 +104,7 @@ func (c *FakeServerStatusRequests) Update(serverStatusRequest *velerov1.ServerSt // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeServerStatusRequests) UpdateStatus(serverStatusRequest *velerov1.ServerStatusRequest) (*velerov1.ServerStatusRequest, error) { +func (c *FakeServerStatusRequests) UpdateStatus(ctx context.Context, serverStatusRequest *velerov1.ServerStatusRequest, opts v1.UpdateOptions) (*velerov1.ServerStatusRequest, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(serverstatusrequestsResource, "status", c.ns, serverStatusRequest), &velerov1.ServerStatusRequest{}) @@ -113,7 +115,7 @@ func (c *FakeServerStatusRequests) UpdateStatus(serverStatusRequest *velerov1.Se } // Delete takes name of the serverStatusRequest and deletes it. Returns an error if one occurs. -func (c *FakeServerStatusRequests) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeServerStatusRequests) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(serverstatusrequestsResource, c.ns, name), &velerov1.ServerStatusRequest{}) @@ -121,15 +123,15 @@ func (c *FakeServerStatusRequests) Delete(name string, options *v1.DeleteOptions } // DeleteCollection deletes a collection of objects. -func (c *FakeServerStatusRequests) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(serverstatusrequestsResource, c.ns, listOptions) +func (c *FakeServerStatusRequests) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(serverstatusrequestsResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.ServerStatusRequestList{}) return err } // Patch applies the patch and returns the patched serverStatusRequest. -func (c *FakeServerStatusRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.ServerStatusRequest, err error) { +func (c *FakeServerStatusRequests) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.ServerStatusRequest, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(serverstatusrequestsResource, c.ns, name, pt, data, subresources...), &velerov1.ServerStatusRequest{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_volumesnapshotlocation.go b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_volumesnapshotlocation.go index 550701430..c5a7b4fb2 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_volumesnapshotlocation.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/fake/fake_volumesnapshotlocation.go @@ -19,6 +19,8 @@ limitations under the License. package fake import ( + "context" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" @@ -39,7 +41,7 @@ var volumesnapshotlocationsResource = schema.GroupVersionResource{Group: "velero var volumesnapshotlocationsKind = schema.GroupVersionKind{Group: "velero.io", Version: "v1", Kind: "VolumeSnapshotLocation"} // Get takes name of the volumeSnapshotLocation, and returns the corresponding volumeSnapshotLocation object, and an error if there is any. -func (c *FakeVolumeSnapshotLocations) Get(name string, options v1.GetOptions) (result *velerov1.VolumeSnapshotLocation, err error) { +func (c *FakeVolumeSnapshotLocations) Get(ctx context.Context, name string, options v1.GetOptions) (result *velerov1.VolumeSnapshotLocation, err error) { obj, err := c.Fake. Invokes(testing.NewGetAction(volumesnapshotlocationsResource, c.ns, name), &velerov1.VolumeSnapshotLocation{}) @@ -50,7 +52,7 @@ func (c *FakeVolumeSnapshotLocations) Get(name string, options v1.GetOptions) (r } // List takes label and field selectors, and returns the list of VolumeSnapshotLocations that match those selectors. -func (c *FakeVolumeSnapshotLocations) List(opts v1.ListOptions) (result *velerov1.VolumeSnapshotLocationList, err error) { +func (c *FakeVolumeSnapshotLocations) List(ctx context.Context, opts v1.ListOptions) (result *velerov1.VolumeSnapshotLocationList, err error) { obj, err := c.Fake. Invokes(testing.NewListAction(volumesnapshotlocationsResource, volumesnapshotlocationsKind, c.ns, opts), &velerov1.VolumeSnapshotLocationList{}) @@ -72,14 +74,14 @@ func (c *FakeVolumeSnapshotLocations) List(opts v1.ListOptions) (result *velerov } // Watch returns a watch.Interface that watches the requested volumeSnapshotLocations. -func (c *FakeVolumeSnapshotLocations) Watch(opts v1.ListOptions) (watch.Interface, error) { +func (c *FakeVolumeSnapshotLocations) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. InvokesWatch(testing.NewWatchAction(volumesnapshotlocationsResource, c.ns, opts)) } // Create takes the representation of a volumeSnapshotLocation and creates it. Returns the server's representation of the volumeSnapshotLocation, and an error, if there is any. -func (c *FakeVolumeSnapshotLocations) Create(volumeSnapshotLocation *velerov1.VolumeSnapshotLocation) (result *velerov1.VolumeSnapshotLocation, err error) { +func (c *FakeVolumeSnapshotLocations) Create(ctx context.Context, volumeSnapshotLocation *velerov1.VolumeSnapshotLocation, opts v1.CreateOptions) (result *velerov1.VolumeSnapshotLocation, err error) { obj, err := c.Fake. Invokes(testing.NewCreateAction(volumesnapshotlocationsResource, c.ns, volumeSnapshotLocation), &velerov1.VolumeSnapshotLocation{}) @@ -90,7 +92,7 @@ func (c *FakeVolumeSnapshotLocations) Create(volumeSnapshotLocation *velerov1.Vo } // Update takes the representation of a volumeSnapshotLocation and updates it. Returns the server's representation of the volumeSnapshotLocation, and an error, if there is any. -func (c *FakeVolumeSnapshotLocations) Update(volumeSnapshotLocation *velerov1.VolumeSnapshotLocation) (result *velerov1.VolumeSnapshotLocation, err error) { +func (c *FakeVolumeSnapshotLocations) Update(ctx context.Context, volumeSnapshotLocation *velerov1.VolumeSnapshotLocation, opts v1.UpdateOptions) (result *velerov1.VolumeSnapshotLocation, err error) { obj, err := c.Fake. Invokes(testing.NewUpdateAction(volumesnapshotlocationsResource, c.ns, volumeSnapshotLocation), &velerov1.VolumeSnapshotLocation{}) @@ -102,7 +104,7 @@ func (c *FakeVolumeSnapshotLocations) Update(volumeSnapshotLocation *velerov1.Vo // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeVolumeSnapshotLocations) UpdateStatus(volumeSnapshotLocation *velerov1.VolumeSnapshotLocation) (*velerov1.VolumeSnapshotLocation, error) { +func (c *FakeVolumeSnapshotLocations) UpdateStatus(ctx context.Context, volumeSnapshotLocation *velerov1.VolumeSnapshotLocation, opts v1.UpdateOptions) (*velerov1.VolumeSnapshotLocation, error) { obj, err := c.Fake. Invokes(testing.NewUpdateSubresourceAction(volumesnapshotlocationsResource, "status", c.ns, volumeSnapshotLocation), &velerov1.VolumeSnapshotLocation{}) @@ -113,7 +115,7 @@ func (c *FakeVolumeSnapshotLocations) UpdateStatus(volumeSnapshotLocation *veler } // Delete takes name of the volumeSnapshotLocation and deletes it. Returns an error if one occurs. -func (c *FakeVolumeSnapshotLocations) Delete(name string, options *v1.DeleteOptions) error { +func (c *FakeVolumeSnapshotLocations) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. Invokes(testing.NewDeleteAction(volumesnapshotlocationsResource, c.ns, name), &velerov1.VolumeSnapshotLocation{}) @@ -121,15 +123,15 @@ func (c *FakeVolumeSnapshotLocations) Delete(name string, options *v1.DeleteOpti } // DeleteCollection deletes a collection of objects. -func (c *FakeVolumeSnapshotLocations) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(volumesnapshotlocationsResource, c.ns, listOptions) +func (c *FakeVolumeSnapshotLocations) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(volumesnapshotlocationsResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &velerov1.VolumeSnapshotLocationList{}) return err } // Patch applies the patch and returns the patched volumeSnapshotLocation. -func (c *FakeVolumeSnapshotLocations) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *velerov1.VolumeSnapshotLocation, err error) { +func (c *FakeVolumeSnapshotLocations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *velerov1.VolumeSnapshotLocation, err error) { obj, err := c.Fake. Invokes(testing.NewPatchSubresourceAction(volumesnapshotlocationsResource, c.ns, name, pt, data, subresources...), &velerov1.VolumeSnapshotLocation{}) diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/podvolumebackup.go b/pkg/generated/clientset/versioned/typed/velero/v1/podvolumebackup.go index 51ba3e69c..836d78b58 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/podvolumebackup.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/podvolumebackup.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type PodVolumeBackupsGetter interface { // PodVolumeBackupInterface has methods to work with PodVolumeBackup resources. type PodVolumeBackupInterface interface { - Create(*v1.PodVolumeBackup) (*v1.PodVolumeBackup, error) - Update(*v1.PodVolumeBackup) (*v1.PodVolumeBackup, error) - UpdateStatus(*v1.PodVolumeBackup) (*v1.PodVolumeBackup, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.PodVolumeBackup, error) - List(opts metav1.ListOptions) (*v1.PodVolumeBackupList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PodVolumeBackup, err error) + Create(ctx context.Context, podVolumeBackup *v1.PodVolumeBackup, opts metav1.CreateOptions) (*v1.PodVolumeBackup, error) + Update(ctx context.Context, podVolumeBackup *v1.PodVolumeBackup, opts metav1.UpdateOptions) (*v1.PodVolumeBackup, error) + UpdateStatus(ctx context.Context, podVolumeBackup *v1.PodVolumeBackup, opts metav1.UpdateOptions) (*v1.PodVolumeBackup, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.PodVolumeBackup, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.PodVolumeBackupList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.PodVolumeBackup, err error) PodVolumeBackupExpansion } @@ -64,20 +65,20 @@ func newPodVolumeBackups(c *VeleroV1Client, namespace string) *podVolumeBackups } // Get takes name of the podVolumeBackup, and returns the corresponding podVolumeBackup object, and an error if there is any. -func (c *podVolumeBackups) Get(name string, options metav1.GetOptions) (result *v1.PodVolumeBackup, err error) { +func (c *podVolumeBackups) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.PodVolumeBackup, err error) { result = &v1.PodVolumeBackup{} err = c.client.Get(). Namespace(c.ns). Resource("podvolumebackups"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of PodVolumeBackups that match those selectors. -func (c *podVolumeBackups) List(opts metav1.ListOptions) (result *v1.PodVolumeBackupList, err error) { +func (c *podVolumeBackups) List(ctx context.Context, opts metav1.ListOptions) (result *v1.PodVolumeBackupList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *podVolumeBackups) List(opts metav1.ListOptions) (result *v1.PodVolumeBa Resource("podvolumebackups"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested podVolumeBackups. -func (c *podVolumeBackups) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *podVolumeBackups) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *podVolumeBackups) Watch(opts metav1.ListOptions) (watch.Interface, erro Resource("podvolumebackups"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a podVolumeBackup and creates it. Returns the server's representation of the podVolumeBackup, and an error, if there is any. -func (c *podVolumeBackups) Create(podVolumeBackup *v1.PodVolumeBackup) (result *v1.PodVolumeBackup, err error) { +func (c *podVolumeBackups) Create(ctx context.Context, podVolumeBackup *v1.PodVolumeBackup, opts metav1.CreateOptions) (result *v1.PodVolumeBackup, err error) { result = &v1.PodVolumeBackup{} err = c.client.Post(). Namespace(c.ns). Resource("podvolumebackups"). + VersionedParams(&opts, scheme.ParameterCodec). Body(podVolumeBackup). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a podVolumeBackup and updates it. Returns the server's representation of the podVolumeBackup, and an error, if there is any. -func (c *podVolumeBackups) Update(podVolumeBackup *v1.PodVolumeBackup) (result *v1.PodVolumeBackup, err error) { +func (c *podVolumeBackups) Update(ctx context.Context, podVolumeBackup *v1.PodVolumeBackup, opts metav1.UpdateOptions) (result *v1.PodVolumeBackup, err error) { result = &v1.PodVolumeBackup{} err = c.client.Put(). Namespace(c.ns). Resource("podvolumebackups"). Name(podVolumeBackup.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(podVolumeBackup). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *podVolumeBackups) UpdateStatus(podVolumeBackup *v1.PodVolumeBackup) (result *v1.PodVolumeBackup, err error) { +func (c *podVolumeBackups) UpdateStatus(ctx context.Context, podVolumeBackup *v1.PodVolumeBackup, opts metav1.UpdateOptions) (result *v1.PodVolumeBackup, err error) { result = &v1.PodVolumeBackup{} err = c.client.Put(). Namespace(c.ns). Resource("podvolumebackups"). Name(podVolumeBackup.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(podVolumeBackup). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the podVolumeBackup and deletes it. Returns an error if one occurs. -func (c *podVolumeBackups) Delete(name string, options *metav1.DeleteOptions) error { +func (c *podVolumeBackups) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("podvolumebackups"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *podVolumeBackups) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *podVolumeBackups) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("podvolumebackups"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched podVolumeBackup. -func (c *podVolumeBackups) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PodVolumeBackup, err error) { +func (c *podVolumeBackups) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.PodVolumeBackup, err error) { result = &v1.PodVolumeBackup{} err = c.client.Patch(pt). Namespace(c.ns). Resource("podvolumebackups"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/podvolumerestore.go b/pkg/generated/clientset/versioned/typed/velero/v1/podvolumerestore.go index 421cf39ec..dffd51b1b 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/podvolumerestore.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/podvolumerestore.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type PodVolumeRestoresGetter interface { // PodVolumeRestoreInterface has methods to work with PodVolumeRestore resources. type PodVolumeRestoreInterface interface { - Create(*v1.PodVolumeRestore) (*v1.PodVolumeRestore, error) - Update(*v1.PodVolumeRestore) (*v1.PodVolumeRestore, error) - UpdateStatus(*v1.PodVolumeRestore) (*v1.PodVolumeRestore, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.PodVolumeRestore, error) - List(opts metav1.ListOptions) (*v1.PodVolumeRestoreList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PodVolumeRestore, err error) + Create(ctx context.Context, podVolumeRestore *v1.PodVolumeRestore, opts metav1.CreateOptions) (*v1.PodVolumeRestore, error) + Update(ctx context.Context, podVolumeRestore *v1.PodVolumeRestore, opts metav1.UpdateOptions) (*v1.PodVolumeRestore, error) + UpdateStatus(ctx context.Context, podVolumeRestore *v1.PodVolumeRestore, opts metav1.UpdateOptions) (*v1.PodVolumeRestore, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.PodVolumeRestore, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.PodVolumeRestoreList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.PodVolumeRestore, err error) PodVolumeRestoreExpansion } @@ -64,20 +65,20 @@ func newPodVolumeRestores(c *VeleroV1Client, namespace string) *podVolumeRestore } // Get takes name of the podVolumeRestore, and returns the corresponding podVolumeRestore object, and an error if there is any. -func (c *podVolumeRestores) Get(name string, options metav1.GetOptions) (result *v1.PodVolumeRestore, err error) { +func (c *podVolumeRestores) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.PodVolumeRestore, err error) { result = &v1.PodVolumeRestore{} err = c.client.Get(). Namespace(c.ns). Resource("podvolumerestores"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of PodVolumeRestores that match those selectors. -func (c *podVolumeRestores) List(opts metav1.ListOptions) (result *v1.PodVolumeRestoreList, err error) { +func (c *podVolumeRestores) List(ctx context.Context, opts metav1.ListOptions) (result *v1.PodVolumeRestoreList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *podVolumeRestores) List(opts metav1.ListOptions) (result *v1.PodVolumeR Resource("podvolumerestores"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested podVolumeRestores. -func (c *podVolumeRestores) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *podVolumeRestores) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *podVolumeRestores) Watch(opts metav1.ListOptions) (watch.Interface, err Resource("podvolumerestores"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a podVolumeRestore and creates it. Returns the server's representation of the podVolumeRestore, and an error, if there is any. -func (c *podVolumeRestores) Create(podVolumeRestore *v1.PodVolumeRestore) (result *v1.PodVolumeRestore, err error) { +func (c *podVolumeRestores) Create(ctx context.Context, podVolumeRestore *v1.PodVolumeRestore, opts metav1.CreateOptions) (result *v1.PodVolumeRestore, err error) { result = &v1.PodVolumeRestore{} err = c.client.Post(). Namespace(c.ns). Resource("podvolumerestores"). + VersionedParams(&opts, scheme.ParameterCodec). Body(podVolumeRestore). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a podVolumeRestore and updates it. Returns the server's representation of the podVolumeRestore, and an error, if there is any. -func (c *podVolumeRestores) Update(podVolumeRestore *v1.PodVolumeRestore) (result *v1.PodVolumeRestore, err error) { +func (c *podVolumeRestores) Update(ctx context.Context, podVolumeRestore *v1.PodVolumeRestore, opts metav1.UpdateOptions) (result *v1.PodVolumeRestore, err error) { result = &v1.PodVolumeRestore{} err = c.client.Put(). Namespace(c.ns). Resource("podvolumerestores"). Name(podVolumeRestore.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(podVolumeRestore). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *podVolumeRestores) UpdateStatus(podVolumeRestore *v1.PodVolumeRestore) (result *v1.PodVolumeRestore, err error) { +func (c *podVolumeRestores) UpdateStatus(ctx context.Context, podVolumeRestore *v1.PodVolumeRestore, opts metav1.UpdateOptions) (result *v1.PodVolumeRestore, err error) { result = &v1.PodVolumeRestore{} err = c.client.Put(). Namespace(c.ns). Resource("podvolumerestores"). Name(podVolumeRestore.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(podVolumeRestore). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the podVolumeRestore and deletes it. Returns an error if one occurs. -func (c *podVolumeRestores) Delete(name string, options *metav1.DeleteOptions) error { +func (c *podVolumeRestores) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("podvolumerestores"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *podVolumeRestores) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *podVolumeRestores) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("podvolumerestores"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched podVolumeRestore. -func (c *podVolumeRestores) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PodVolumeRestore, err error) { +func (c *podVolumeRestores) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.PodVolumeRestore, err error) { result = &v1.PodVolumeRestore{} err = c.client.Patch(pt). Namespace(c.ns). Resource("podvolumerestores"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/resticrepository.go b/pkg/generated/clientset/versioned/typed/velero/v1/resticrepository.go index c7ea267b0..44d5c0760 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/resticrepository.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/resticrepository.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type ResticRepositoriesGetter interface { // ResticRepositoryInterface has methods to work with ResticRepository resources. type ResticRepositoryInterface interface { - Create(*v1.ResticRepository) (*v1.ResticRepository, error) - Update(*v1.ResticRepository) (*v1.ResticRepository, error) - UpdateStatus(*v1.ResticRepository) (*v1.ResticRepository, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.ResticRepository, error) - List(opts metav1.ListOptions) (*v1.ResticRepositoryList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ResticRepository, err error) + Create(ctx context.Context, resticRepository *v1.ResticRepository, opts metav1.CreateOptions) (*v1.ResticRepository, error) + Update(ctx context.Context, resticRepository *v1.ResticRepository, opts metav1.UpdateOptions) (*v1.ResticRepository, error) + UpdateStatus(ctx context.Context, resticRepository *v1.ResticRepository, opts metav1.UpdateOptions) (*v1.ResticRepository, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ResticRepository, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ResticRepositoryList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ResticRepository, err error) ResticRepositoryExpansion } @@ -64,20 +65,20 @@ func newResticRepositories(c *VeleroV1Client, namespace string) *resticRepositor } // Get takes name of the resticRepository, and returns the corresponding resticRepository object, and an error if there is any. -func (c *resticRepositories) Get(name string, options metav1.GetOptions) (result *v1.ResticRepository, err error) { +func (c *resticRepositories) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ResticRepository, err error) { result = &v1.ResticRepository{} err = c.client.Get(). Namespace(c.ns). Resource("resticrepositories"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of ResticRepositories that match those selectors. -func (c *resticRepositories) List(opts metav1.ListOptions) (result *v1.ResticRepositoryList, err error) { +func (c *resticRepositories) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ResticRepositoryList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *resticRepositories) List(opts metav1.ListOptions) (result *v1.ResticRep Resource("resticrepositories"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested resticRepositories. -func (c *resticRepositories) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *resticRepositories) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *resticRepositories) Watch(opts metav1.ListOptions) (watch.Interface, er Resource("resticrepositories"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a resticRepository and creates it. Returns the server's representation of the resticRepository, and an error, if there is any. -func (c *resticRepositories) Create(resticRepository *v1.ResticRepository) (result *v1.ResticRepository, err error) { +func (c *resticRepositories) Create(ctx context.Context, resticRepository *v1.ResticRepository, opts metav1.CreateOptions) (result *v1.ResticRepository, err error) { result = &v1.ResticRepository{} err = c.client.Post(). Namespace(c.ns). Resource("resticrepositories"). + VersionedParams(&opts, scheme.ParameterCodec). Body(resticRepository). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a resticRepository and updates it. Returns the server's representation of the resticRepository, and an error, if there is any. -func (c *resticRepositories) Update(resticRepository *v1.ResticRepository) (result *v1.ResticRepository, err error) { +func (c *resticRepositories) Update(ctx context.Context, resticRepository *v1.ResticRepository, opts metav1.UpdateOptions) (result *v1.ResticRepository, err error) { result = &v1.ResticRepository{} err = c.client.Put(). Namespace(c.ns). Resource("resticrepositories"). Name(resticRepository.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(resticRepository). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *resticRepositories) UpdateStatus(resticRepository *v1.ResticRepository) (result *v1.ResticRepository, err error) { +func (c *resticRepositories) UpdateStatus(ctx context.Context, resticRepository *v1.ResticRepository, opts metav1.UpdateOptions) (result *v1.ResticRepository, err error) { result = &v1.ResticRepository{} err = c.client.Put(). Namespace(c.ns). Resource("resticrepositories"). Name(resticRepository.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(resticRepository). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the resticRepository and deletes it. Returns an error if one occurs. -func (c *resticRepositories) Delete(name string, options *metav1.DeleteOptions) error { +func (c *resticRepositories) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("resticrepositories"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *resticRepositories) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *resticRepositories) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("resticrepositories"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched resticRepository. -func (c *resticRepositories) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ResticRepository, err error) { +func (c *resticRepositories) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ResticRepository, err error) { result = &v1.ResticRepository{} err = c.client.Patch(pt). Namespace(c.ns). Resource("resticrepositories"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/restore.go b/pkg/generated/clientset/versioned/typed/velero/v1/restore.go index 18d02be92..a43b823a6 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/restore.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/restore.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type RestoresGetter interface { // RestoreInterface has methods to work with Restore resources. type RestoreInterface interface { - Create(*v1.Restore) (*v1.Restore, error) - Update(*v1.Restore) (*v1.Restore, error) - UpdateStatus(*v1.Restore) (*v1.Restore, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.Restore, error) - List(opts metav1.ListOptions) (*v1.RestoreList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Restore, err error) + Create(ctx context.Context, restore *v1.Restore, opts metav1.CreateOptions) (*v1.Restore, error) + Update(ctx context.Context, restore *v1.Restore, opts metav1.UpdateOptions) (*v1.Restore, error) + UpdateStatus(ctx context.Context, restore *v1.Restore, opts metav1.UpdateOptions) (*v1.Restore, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Restore, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.RestoreList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Restore, err error) RestoreExpansion } @@ -64,20 +65,20 @@ func newRestores(c *VeleroV1Client, namespace string) *restores { } // Get takes name of the restore, and returns the corresponding restore object, and an error if there is any. -func (c *restores) Get(name string, options metav1.GetOptions) (result *v1.Restore, err error) { +func (c *restores) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Restore, err error) { result = &v1.Restore{} err = c.client.Get(). Namespace(c.ns). Resource("restores"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of Restores that match those selectors. -func (c *restores) List(opts metav1.ListOptions) (result *v1.RestoreList, err error) { +func (c *restores) List(ctx context.Context, opts metav1.ListOptions) (result *v1.RestoreList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *restores) List(opts metav1.ListOptions) (result *v1.RestoreList, err er Resource("restores"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested restores. -func (c *restores) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *restores) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *restores) Watch(opts metav1.ListOptions) (watch.Interface, error) { Resource("restores"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a restore and creates it. Returns the server's representation of the restore, and an error, if there is any. -func (c *restores) Create(restore *v1.Restore) (result *v1.Restore, err error) { +func (c *restores) Create(ctx context.Context, restore *v1.Restore, opts metav1.CreateOptions) (result *v1.Restore, err error) { result = &v1.Restore{} err = c.client.Post(). Namespace(c.ns). Resource("restores"). + VersionedParams(&opts, scheme.ParameterCodec). Body(restore). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a restore and updates it. Returns the server's representation of the restore, and an error, if there is any. -func (c *restores) Update(restore *v1.Restore) (result *v1.Restore, err error) { +func (c *restores) Update(ctx context.Context, restore *v1.Restore, opts metav1.UpdateOptions) (result *v1.Restore, err error) { result = &v1.Restore{} err = c.client.Put(). Namespace(c.ns). Resource("restores"). Name(restore.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(restore). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *restores) UpdateStatus(restore *v1.Restore) (result *v1.Restore, err error) { +func (c *restores) UpdateStatus(ctx context.Context, restore *v1.Restore, opts metav1.UpdateOptions) (result *v1.Restore, err error) { result = &v1.Restore{} err = c.client.Put(). Namespace(c.ns). Resource("restores"). Name(restore.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(restore). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the restore and deletes it. Returns an error if one occurs. -func (c *restores) Delete(name string, options *metav1.DeleteOptions) error { +func (c *restores) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("restores"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *restores) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *restores) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("restores"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched restore. -func (c *restores) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Restore, err error) { +func (c *restores) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Restore, err error) { result = &v1.Restore{} err = c.client.Patch(pt). Namespace(c.ns). Resource("restores"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/schedule.go b/pkg/generated/clientset/versioned/typed/velero/v1/schedule.go index 665c8eacb..8a003b008 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/schedule.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/schedule.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type SchedulesGetter interface { // ScheduleInterface has methods to work with Schedule resources. type ScheduleInterface interface { - Create(*v1.Schedule) (*v1.Schedule, error) - Update(*v1.Schedule) (*v1.Schedule, error) - UpdateStatus(*v1.Schedule) (*v1.Schedule, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.Schedule, error) - List(opts metav1.ListOptions) (*v1.ScheduleList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Schedule, err error) + Create(ctx context.Context, schedule *v1.Schedule, opts metav1.CreateOptions) (*v1.Schedule, error) + Update(ctx context.Context, schedule *v1.Schedule, opts metav1.UpdateOptions) (*v1.Schedule, error) + UpdateStatus(ctx context.Context, schedule *v1.Schedule, opts metav1.UpdateOptions) (*v1.Schedule, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Schedule, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ScheduleList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Schedule, err error) ScheduleExpansion } @@ -64,20 +65,20 @@ func newSchedules(c *VeleroV1Client, namespace string) *schedules { } // Get takes name of the schedule, and returns the corresponding schedule object, and an error if there is any. -func (c *schedules) Get(name string, options metav1.GetOptions) (result *v1.Schedule, err error) { +func (c *schedules) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Schedule, err error) { result = &v1.Schedule{} err = c.client.Get(). Namespace(c.ns). Resource("schedules"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of Schedules that match those selectors. -func (c *schedules) List(opts metav1.ListOptions) (result *v1.ScheduleList, err error) { +func (c *schedules) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ScheduleList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *schedules) List(opts metav1.ListOptions) (result *v1.ScheduleList, err Resource("schedules"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested schedules. -func (c *schedules) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *schedules) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *schedules) Watch(opts metav1.ListOptions) (watch.Interface, error) { Resource("schedules"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a schedule and creates it. Returns the server's representation of the schedule, and an error, if there is any. -func (c *schedules) Create(schedule *v1.Schedule) (result *v1.Schedule, err error) { +func (c *schedules) Create(ctx context.Context, schedule *v1.Schedule, opts metav1.CreateOptions) (result *v1.Schedule, err error) { result = &v1.Schedule{} err = c.client.Post(). Namespace(c.ns). Resource("schedules"). + VersionedParams(&opts, scheme.ParameterCodec). Body(schedule). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a schedule and updates it. Returns the server's representation of the schedule, and an error, if there is any. -func (c *schedules) Update(schedule *v1.Schedule) (result *v1.Schedule, err error) { +func (c *schedules) Update(ctx context.Context, schedule *v1.Schedule, opts metav1.UpdateOptions) (result *v1.Schedule, err error) { result = &v1.Schedule{} err = c.client.Put(). Namespace(c.ns). Resource("schedules"). Name(schedule.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(schedule). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *schedules) UpdateStatus(schedule *v1.Schedule) (result *v1.Schedule, err error) { +func (c *schedules) UpdateStatus(ctx context.Context, schedule *v1.Schedule, opts metav1.UpdateOptions) (result *v1.Schedule, err error) { result = &v1.Schedule{} err = c.client.Put(). Namespace(c.ns). Resource("schedules"). Name(schedule.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(schedule). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the schedule and deletes it. Returns an error if one occurs. -func (c *schedules) Delete(name string, options *metav1.DeleteOptions) error { +func (c *schedules) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("schedules"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *schedules) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *schedules) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("schedules"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched schedule. -func (c *schedules) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Schedule, err error) { +func (c *schedules) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Schedule, err error) { result = &v1.Schedule{} err = c.client.Patch(pt). Namespace(c.ns). Resource("schedules"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/serverstatusrequest.go b/pkg/generated/clientset/versioned/typed/velero/v1/serverstatusrequest.go index d7a44427e..c8a16d80f 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/serverstatusrequest.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/serverstatusrequest.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type ServerStatusRequestsGetter interface { // ServerStatusRequestInterface has methods to work with ServerStatusRequest resources. type ServerStatusRequestInterface interface { - Create(*v1.ServerStatusRequest) (*v1.ServerStatusRequest, error) - Update(*v1.ServerStatusRequest) (*v1.ServerStatusRequest, error) - UpdateStatus(*v1.ServerStatusRequest) (*v1.ServerStatusRequest, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.ServerStatusRequest, error) - List(opts metav1.ListOptions) (*v1.ServerStatusRequestList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ServerStatusRequest, err error) + Create(ctx context.Context, serverStatusRequest *v1.ServerStatusRequest, opts metav1.CreateOptions) (*v1.ServerStatusRequest, error) + Update(ctx context.Context, serverStatusRequest *v1.ServerStatusRequest, opts metav1.UpdateOptions) (*v1.ServerStatusRequest, error) + UpdateStatus(ctx context.Context, serverStatusRequest *v1.ServerStatusRequest, opts metav1.UpdateOptions) (*v1.ServerStatusRequest, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ServerStatusRequest, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ServerStatusRequestList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ServerStatusRequest, err error) ServerStatusRequestExpansion } @@ -64,20 +65,20 @@ func newServerStatusRequests(c *VeleroV1Client, namespace string) *serverStatusR } // Get takes name of the serverStatusRequest, and returns the corresponding serverStatusRequest object, and an error if there is any. -func (c *serverStatusRequests) Get(name string, options metav1.GetOptions) (result *v1.ServerStatusRequest, err error) { +func (c *serverStatusRequests) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ServerStatusRequest, err error) { result = &v1.ServerStatusRequest{} err = c.client.Get(). Namespace(c.ns). Resource("serverstatusrequests"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of ServerStatusRequests that match those selectors. -func (c *serverStatusRequests) List(opts metav1.ListOptions) (result *v1.ServerStatusRequestList, err error) { +func (c *serverStatusRequests) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ServerStatusRequestList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *serverStatusRequests) List(opts metav1.ListOptions) (result *v1.ServerS Resource("serverstatusrequests"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested serverStatusRequests. -func (c *serverStatusRequests) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *serverStatusRequests) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *serverStatusRequests) Watch(opts metav1.ListOptions) (watch.Interface, Resource("serverstatusrequests"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a serverStatusRequest and creates it. Returns the server's representation of the serverStatusRequest, and an error, if there is any. -func (c *serverStatusRequests) Create(serverStatusRequest *v1.ServerStatusRequest) (result *v1.ServerStatusRequest, err error) { +func (c *serverStatusRequests) Create(ctx context.Context, serverStatusRequest *v1.ServerStatusRequest, opts metav1.CreateOptions) (result *v1.ServerStatusRequest, err error) { result = &v1.ServerStatusRequest{} err = c.client.Post(). Namespace(c.ns). Resource("serverstatusrequests"). + VersionedParams(&opts, scheme.ParameterCodec). Body(serverStatusRequest). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a serverStatusRequest and updates it. Returns the server's representation of the serverStatusRequest, and an error, if there is any. -func (c *serverStatusRequests) Update(serverStatusRequest *v1.ServerStatusRequest) (result *v1.ServerStatusRequest, err error) { +func (c *serverStatusRequests) Update(ctx context.Context, serverStatusRequest *v1.ServerStatusRequest, opts metav1.UpdateOptions) (result *v1.ServerStatusRequest, err error) { result = &v1.ServerStatusRequest{} err = c.client.Put(). Namespace(c.ns). Resource("serverstatusrequests"). Name(serverStatusRequest.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(serverStatusRequest). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *serverStatusRequests) UpdateStatus(serverStatusRequest *v1.ServerStatusRequest) (result *v1.ServerStatusRequest, err error) { +func (c *serverStatusRequests) UpdateStatus(ctx context.Context, serverStatusRequest *v1.ServerStatusRequest, opts metav1.UpdateOptions) (result *v1.ServerStatusRequest, err error) { result = &v1.ServerStatusRequest{} err = c.client.Put(). Namespace(c.ns). Resource("serverstatusrequests"). Name(serverStatusRequest.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(serverStatusRequest). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the serverStatusRequest and deletes it. Returns an error if one occurs. -func (c *serverStatusRequests) Delete(name string, options *metav1.DeleteOptions) error { +func (c *serverStatusRequests) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("serverstatusrequests"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *serverStatusRequests) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *serverStatusRequests) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("serverstatusrequests"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched serverStatusRequest. -func (c *serverStatusRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ServerStatusRequest, err error) { +func (c *serverStatusRequests) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ServerStatusRequest, err error) { result = &v1.ServerStatusRequest{} err = c.client.Patch(pt). Namespace(c.ns). Resource("serverstatusrequests"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/clientset/versioned/typed/velero/v1/volumesnapshotlocation.go b/pkg/generated/clientset/versioned/typed/velero/v1/volumesnapshotlocation.go index 2fadc328a..a4c11e93a 100644 --- a/pkg/generated/clientset/versioned/typed/velero/v1/volumesnapshotlocation.go +++ b/pkg/generated/clientset/versioned/typed/velero/v1/volumesnapshotlocation.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" "time" v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -37,15 +38,15 @@ type VolumeSnapshotLocationsGetter interface { // VolumeSnapshotLocationInterface has methods to work with VolumeSnapshotLocation resources. type VolumeSnapshotLocationInterface interface { - Create(*v1.VolumeSnapshotLocation) (*v1.VolumeSnapshotLocation, error) - Update(*v1.VolumeSnapshotLocation) (*v1.VolumeSnapshotLocation, error) - UpdateStatus(*v1.VolumeSnapshotLocation) (*v1.VolumeSnapshotLocation, error) - Delete(name string, options *metav1.DeleteOptions) error - DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error - Get(name string, options metav1.GetOptions) (*v1.VolumeSnapshotLocation, error) - List(opts metav1.ListOptions) (*v1.VolumeSnapshotLocationList, error) - Watch(opts metav1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.VolumeSnapshotLocation, err error) + Create(ctx context.Context, volumeSnapshotLocation *v1.VolumeSnapshotLocation, opts metav1.CreateOptions) (*v1.VolumeSnapshotLocation, error) + Update(ctx context.Context, volumeSnapshotLocation *v1.VolumeSnapshotLocation, opts metav1.UpdateOptions) (*v1.VolumeSnapshotLocation, error) + UpdateStatus(ctx context.Context, volumeSnapshotLocation *v1.VolumeSnapshotLocation, opts metav1.UpdateOptions) (*v1.VolumeSnapshotLocation, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.VolumeSnapshotLocation, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.VolumeSnapshotLocationList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.VolumeSnapshotLocation, err error) VolumeSnapshotLocationExpansion } @@ -64,20 +65,20 @@ func newVolumeSnapshotLocations(c *VeleroV1Client, namespace string) *volumeSnap } // Get takes name of the volumeSnapshotLocation, and returns the corresponding volumeSnapshotLocation object, and an error if there is any. -func (c *volumeSnapshotLocations) Get(name string, options metav1.GetOptions) (result *v1.VolumeSnapshotLocation, err error) { +func (c *volumeSnapshotLocations) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.VolumeSnapshotLocation, err error) { result = &v1.VolumeSnapshotLocation{} err = c.client.Get(). Namespace(c.ns). Resource("volumesnapshotlocations"). Name(name). VersionedParams(&options, scheme.ParameterCodec). - Do(). + Do(ctx). Into(result) return } // List takes label and field selectors, and returns the list of VolumeSnapshotLocations that match those selectors. -func (c *volumeSnapshotLocations) List(opts metav1.ListOptions) (result *v1.VolumeSnapshotLocationList, err error) { +func (c *volumeSnapshotLocations) List(ctx context.Context, opts metav1.ListOptions) (result *v1.VolumeSnapshotLocationList, err error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -88,13 +89,13 @@ func (c *volumeSnapshotLocations) List(opts metav1.ListOptions) (result *v1.Volu Resource("volumesnapshotlocations"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Do(). + Do(ctx). Into(result) return } // Watch returns a watch.Interface that watches the requested volumeSnapshotLocations. -func (c *volumeSnapshotLocations) Watch(opts metav1.ListOptions) (watch.Interface, error) { +func (c *volumeSnapshotLocations) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { var timeout time.Duration if opts.TimeoutSeconds != nil { timeout = time.Duration(*opts.TimeoutSeconds) * time.Second @@ -105,87 +106,90 @@ func (c *volumeSnapshotLocations) Watch(opts metav1.ListOptions) (watch.Interfac Resource("volumesnapshotlocations"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). - Watch() + Watch(ctx) } // Create takes the representation of a volumeSnapshotLocation and creates it. Returns the server's representation of the volumeSnapshotLocation, and an error, if there is any. -func (c *volumeSnapshotLocations) Create(volumeSnapshotLocation *v1.VolumeSnapshotLocation) (result *v1.VolumeSnapshotLocation, err error) { +func (c *volumeSnapshotLocations) Create(ctx context.Context, volumeSnapshotLocation *v1.VolumeSnapshotLocation, opts metav1.CreateOptions) (result *v1.VolumeSnapshotLocation, err error) { result = &v1.VolumeSnapshotLocation{} err = c.client.Post(). Namespace(c.ns). Resource("volumesnapshotlocations"). + VersionedParams(&opts, scheme.ParameterCodec). Body(volumeSnapshotLocation). - Do(). + Do(ctx). Into(result) return } // Update takes the representation of a volumeSnapshotLocation and updates it. Returns the server's representation of the volumeSnapshotLocation, and an error, if there is any. -func (c *volumeSnapshotLocations) Update(volumeSnapshotLocation *v1.VolumeSnapshotLocation) (result *v1.VolumeSnapshotLocation, err error) { +func (c *volumeSnapshotLocations) Update(ctx context.Context, volumeSnapshotLocation *v1.VolumeSnapshotLocation, opts metav1.UpdateOptions) (result *v1.VolumeSnapshotLocation, err error) { result = &v1.VolumeSnapshotLocation{} err = c.client.Put(). Namespace(c.ns). Resource("volumesnapshotlocations"). Name(volumeSnapshotLocation.Name). + VersionedParams(&opts, scheme.ParameterCodec). Body(volumeSnapshotLocation). - Do(). + Do(ctx). Into(result) return } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *volumeSnapshotLocations) UpdateStatus(volumeSnapshotLocation *v1.VolumeSnapshotLocation) (result *v1.VolumeSnapshotLocation, err error) { +func (c *volumeSnapshotLocations) UpdateStatus(ctx context.Context, volumeSnapshotLocation *v1.VolumeSnapshotLocation, opts metav1.UpdateOptions) (result *v1.VolumeSnapshotLocation, err error) { result = &v1.VolumeSnapshotLocation{} err = c.client.Put(). Namespace(c.ns). Resource("volumesnapshotlocations"). Name(volumeSnapshotLocation.Name). SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). Body(volumeSnapshotLocation). - Do(). + Do(ctx). Into(result) return } // Delete takes name of the volumeSnapshotLocation and deletes it. Returns an error if one occurs. -func (c *volumeSnapshotLocations) Delete(name string, options *metav1.DeleteOptions) error { +func (c *volumeSnapshotLocations) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("volumesnapshotlocations"). Name(name). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // DeleteCollection deletes a collection of objects. -func (c *volumeSnapshotLocations) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { +func (c *volumeSnapshotLocations) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). Namespace(c.ns). Resource("volumesnapshotlocations"). - VersionedParams(&listOptions, scheme.ParameterCodec). + VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). - Body(options). - Do(). + Body(&opts). + Do(ctx). Error() } // Patch applies the patch and returns the patched volumeSnapshotLocation. -func (c *volumeSnapshotLocations) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.VolumeSnapshotLocation, err error) { +func (c *volumeSnapshotLocations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.VolumeSnapshotLocation, err error) { result = &v1.VolumeSnapshotLocation{} err = c.client.Patch(pt). Namespace(c.ns). Resource("volumesnapshotlocations"). - SubResource(subresources...). Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). Body(data). - Do(). + Do(ctx). Into(result) return } diff --git a/pkg/generated/crds/crds.go b/pkg/generated/crds/crds.go index 3cd478009..4f393f599 100644 --- a/pkg/generated/crds/crds.go +++ b/pkg/generated/crds/crds.go @@ -29,17 +29,17 @@ import ( ) var rawCRDs = [][]byte{ - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xecwà\x18C\xe7\xf2(\xf3J(\x90\xday\xa1\xb3@\x87\xa8q:\xa5\x03\xc6\xc5\xd9\xc36\xb8\xb5\x843\xf1\xbe\xe3\xe2\x8cF0\x16\n\xf2\xe6\xfd\xa9n\x10>\x8c\x92\xbb\x15\xe4kLPC[)t\xf1E9{\xceƮ\xafG\x00\xd7R\b{\xbf\x12[T\xe0Pa\xe6\x8d\x1dbôPØ\xf7Q#\xbc\x1b\xf0V\x8d\xff%\x12ێʌ\xc2\x04x=\xc8\xec\x10\xb6e\xd2\x17\x86\x02\xb9A\xc7\xf6+\xcaR\xbd\x0f\x13\aӒ\x0ec\u0084\x9b1i̧\xb0\xfaf\u074cY?\u05cc\x19\x8f\xd7\xe5e-\xfa\xdf\x0f+\x93\xe3>[17\xbd\x85\x1f\xa9\x98\xc4DI\xa1\xf5f\aX\x94\xfe\xfd\x1a\xa4OO)\x92\x10\x9c\x18\x8e\xb2\xa7~\xf7oN\x10\xe7\xea\xf4\xe6t\xdd\a\xea\xf4/\x94B\xfd\xeaߌ\x10\xd8\xd9?F_\xbfP\x00?\xb5\xd7\\\x83\xdc\xd5\x02ȯa'\x95G{\"\x89)rʹ$~)\v\xe6w*\x1a\x85\xf0\xd9\xe1\xfe\x8d\xa2#\xd7\xd4s\x16q\xe3ti\x88)ST\xdd\xddL'\xa1\x02'\x83\xd2b\x11R\xcc'\xe6`\xf3\x84#\x9f\xcf_\xbf`>\xce\x14X\xa2a=\x12>\x9f\xa0\xd9~m\f\x91\x97\x11\x10\x83\x94:\xbb\b\xe5\x82k\x10\xf0\x82\xef!\xba\x10\x1aH \x82^C\x93g!Z\xe4\x9a\x05+\xd4\v\xbe3\x90X\x86\x98Y\xbbL\xf4a\xbc\xe0\xfb\xfc\xa4\x13\xb6\x116\xd2Ų\n\xf1\x8f\x1e0\x038\x87]\xca2\xe0\"R\xf20sD\xc1R\x17\x91F\xe2\xf6\xd9\xe4\xd5bj\xea\x1eA\x90W.\b\x85\xb4\xfd \xcbE\x04\x92\xeb\x04\x87l\x13\xa9\x88\xf4,\x94\xcc\xeb\xd7\x04\xfd\xde\xe8k\xf8j\xfcF\x8f\x05\xab\xddq\xff&]\xac\xdd}1\xe8\xbe\x1a\xcfO>\x9c\x89\x01\xe5\xb3Y\x18\x96\xb1\t\xe9\xe0\x86\x89\xfev-jV\x89\xc3\u0604\f\xab\x16\x89t\xb0єC\x04^\x85jbxٔ\xb7\uf3a2r\\l\xd2F\xafx\xb3[\x0f\xbd'\xb2x\xa1\"\xb7\xa5\xd0G\xab~ex\xdd\"\x88O\xb4/\x84ա2\xaaD\x869\xe4\x153\x91+{\xc2\xe3^fP\xa0ݏo\x04\xedQ\x92\xcf^\xf2\xfaE\xbe4\x8c\xb3\xf4i\xc9֜Ft\xc6\xf9\x1c\x1a+\xb2\xcd\xd99I\xb43\x13\aKy\xe3\x13\xe7\xe8\xe0M\x92\xe3\x86\x19n\x8a<\xe7\x83\x16\xa1\x1e\x16{\xefŜ\xef\xef\xdb\x01\xa5\xb0\xc7\x15\x82\vt\xffK[\x15+\xed\xffA)\xa4\x9d\xb5\xd0\xcf|b\xa2\xb0\xb32V\x85\xda/!\xf8\xd2\x01I\xf3(\xd4iAx\x80,C^\x03U؆ͮ\x17i\\\xc3\xeb\xc1\xb8\xb0+\xee$\xaa\x1c\xe4T\xa4E\xe3\xf2\x05\xdf/\xaf{6~\xb9їa{\xeeYl\xda\xcbg\x00\x1b\xad\xde\xe1\x92W^~{\xe8\xb2H\xeb\x16L\xe2\xe3\xb3e\xc1,esi\x17\xa7e\xf5\x19\f\x85\xa2\xe3\xd8.й\xd28\xbf\x10\x89\a\xe3|\xa8\xd0u\x82ǁ\xda\xd0tN\x13kB v\xe1\xdc\xcb\xd8t\xc2A\x8e\xec\xa4TIRr8X\xe0\xecA\xcc#H\xa1\x14\\66\x1a\xfc\xe3e8\xf6\xe0W\x88\x8cÂ\t\x88\xa4\n\xa55\x19:7\xa5\x0e\xb3\x9ew\xa6\xe0V\x17\xdbDH*\xc2!\xc2Tq/\x8d\xa5a#\xb1\xe6\xac0\xfb\xfe\xadU\x03$Ӧ\xff\xa7\xd5\xec<\x8c\x80Ϡ\x8bB\xe8\xd9͢\x87\xdc]X\x97L!\x82\t!\xbb\xddWl\xc6K#\xbd\xa84\xbf\xee\x06[H\xbda\xe0\xf0\xe9C\xb7cH.\x11\xcf\x0f\xa9\xef\xd2ʆ\xcd\xf5\x83`\x9b\xa5\xe9\x97܇\xc6\xeb\x01-v$կ\fs8\xa7\x8do\xa5\xe7\xcb\x18\x1d\xf0\xb8r\xb0\x93\xd6\xf96\x92\x8e\x0f\xb6>>G\xd1\xf7\xd6~C\x8a\xf2簮U\x00:\x98\xd7tR8r874\xf8\x18\x04A\xee@z@\x9d\x99Js\x11\x83\x8c\x94_\x10X\x1a\x9c\xe9\xec&\x1b\xc6\x12æ\x81\xba*\x96\x10\xbeb\xed\x91z\xa2\xd6ў\xfc\xa3\x90S\x95\xaa4\xce\x12\x93\x97\x05\x9ajbSkFGLOa]爷\x10o\xb2\xa8\n\x10\x051{\x11Gig\x96\x05v\xe5\v\xafBz\xf6\xee\x04\x95]\xbd7d\x14\xa5B\xbf,\x1b\xd8\xe2\xceX\xb6E's\xac\xb7\xcc(s\xa3A\xc0NHU\xd9E\x1e\xed\f\x8e.\x8f죑\u007fLо\xe4\xb5+&\u007f\xb6L\xb9(T\x9b\xf2\xaa\xa5]\x1a\xa8=X\xfc\xc8\x10\xa9\xb4\x92t\xc6|l\x94\x14UI\xe8\xf7\xefaR\x8b7\xdfä\xde\xf8\x1e&u\xc6\xf70\xe9{\x9849\xbe\x87I\xdfä\xdfk\x984\x8dɊ\xebV\x83?ͼ}\xf6\bu\x1c\xb1Q\xc8\xf1T\xff.\xf4^/\xeb\xcb\xdb\f\xaf\x19軌-\xdd+\xee8\xef˹9\xfao\xdc|ݨGʟ\x9474\x96N\xb6\xee-h\xc4\x1b\xea͜o/\x99k*\xe9\xf6$֍\x1d\xa9)ѤW\xf4\xa8O\x9d\xec\x14f\xb6;\x18\x84R\xed\xde\x14a\x1b\xa6\xfcJ\xfd\x8a\xb3\xad\x1f3\r\x1f\xd3m\x9b\xe3\x1c:\t\xed\xbb,\xb2\x9d\x16\xc3_\x99C\x93}\x19\xe3\xdd\x18\xf1$\x03\xbd8~Zw\u007f\xf1&\xf6f\xc0\xab\xf4\x87\x1e\x01\xdc4I)\x8b\u07b7\x9b#\x93N\xc5\xeb\x03\xa7\x9c\x03cAKu=\xd8\x17S߬h\xb3\x13\xfe\\\x86\xa4\xe8,{\x9b\n\xed\x97\xf4n|s\xc7F\xb7'c\xd0ɞwر\xb4\x85tyOF\xb7\xe7bd\x93YЉqv\xa7\xc5|\xbe5\xd9U\xf1\r\xbd\x14\xa9ObjÝ\xe8\xa0X\x10s\xccwK|S\x8f\x04\x1f\xe6M`}VgD\xab\xeba\x02\xe4\xb2~\x88\x05,\x99\xeb}8\xbb\xe3\xe1\xb4\xcb`\x82\x88\xb9>\x87\xf1\x1e\x86\t\xa0\x83\xdd\rK:\x17&`\xd6=\r\x1fد0ӥ\xf01\x9d\x84\xbf4\xf6\x1c\xeb9\x98\xe94\x98\x89L\xa7\xb0\x9a\xe9%X\xdeA0ßo\xec\x16\xa8\xfb\x01\x06\xdfyn\x8f@\xb7\v`\x10\xe4\xc2\u0380\x91\xb3\xffA\x90\v\xfa\x01fN\xfc\a\xc1Nn\x8c\x13\x1a1\xfa\x93Ӣt\a\x93.lM\xc6I\x8fݹ\x03\xc9E\xba\xae\x95)S\xe55\xec>)|\x05\xf3\x1d\x1e\x9e\xd9\xc9\xf3U\x98\xac\xb9\b\x14]y\n~N\xef\t\xfd\xf0\x91Ɇ\xf3Ɗ=\xfed\xb2\xd6M\xdb1\xfa\xbbs;\xd7\"\xa3PSJ\x9f\xfa D\xba\x9f\xd7]:\x14;\xc6*[\xbc\xe7\xd6d_\x84a_ޣ\x96罚$\xe2\xe9駀\xb8\x97\x05\xae\xbfT!\x91[\x95\xc2:$\xfe%\x82¢-\xfdy0\xaf=\x84\x95\x89\x94\xfep\x8a\xafE\xae\xe1q\xb6\xb8\x18\xebp\x97/)XbӴ:>\x0f\xafiŢ-\xa1\x84\xc4\xc6\xec\xc6V\xf5\bl]d\xa6h?t\xb4|\xd4\x15\xb5a\xe7<|\xf9\xd3\v_\xb9\xb9\xeb\x9f<)]\xe6\x8e\x15\xdf\xca\xf2\r\xb3\x00 (\xe3\xd97@cy\xabs\xc3~J&w\xfd\xf9|\x95\xda\xe6\x01).\xab\u05579_\x85\xab\vh\x03\x1e\xad\x01\x16\xd6q0@\xb00\a<\xa2\x06\xa3\xb9^\xc67\xb8\xc2=\xff\xd35\xfd\xfc\xb5\x05#\x96\xe3\xaaR\x19\x91'\xcbM\xf7L\xe3\xf5\xf0'\xf6G\xf6\x88\xf6ʍB䫪;c\x87\xc8?լ\x9d\xb1\x85\xf0\xb7\x90\v\x8f\xab\x01\x80\v\xfc\u0600Jq\xf1x\xe6\xea&O\t\xd6\xc1u\xe7t\x976\x14\x9e\vtN\xecӝ\xcdWrG{Դ\xc9\rT\x89b(\xd6\x14.\xbb\xf7\x17CF'2O\xf9o@-\xa6\xb0\xadYW}\x9bSfO\x196O\x8c7ƣ\u007f\x1ev$R{\xdcc7<·R\xday_~_O#\x8ep\xea\xce\x16\xde|@\x01\x95\xdcKr\x88$ؽ\xb0[\xb1\xc7Uf\x14\xe5Q\xd2\xe8S\x8c\xfe6r\rP\a\xbe\x8e\xd0#\xe8\xc7\xf6̔\bFe\x0eP\xd2\xc7\x12\xae\xe3\x8eJ\x12,\xc4_\x8d\xed\x1f\xd6\x14R\x1b\x1b\xc2\x17\x0e\xa1\xd3\xd2\xc5\xfe\x9c\xaf\xb5N\xe2\xfb@3\xeaө\x96\xaf¤L\xc3\xfb\xfc\xd0)\xc6\n\xbe\xe2\xe9\x16\x15\x0e&0\u007f\xae\xbf\xa2ћ\xb0\xd1\x0f\xd6\xec)\xe2\xeb\xfdt\x97\xbcR\xef\x97\aa\xbd\x14J\xbd\a\xf0#o\xed=\xfe\x82\xe4\x17F6\x82!\x06F̦y\x18'5!\xa5\xd4A\xd6|\x98\xb05\x95\xef\x18\\c\xb0=\x89\xa7\xf7\xad)O\xc4T7\x90]\x88\xb4\x03\xa2\xf3+\xdc\xed\x8c\xf5!~]\xad@\xee\xe2\xc6҃Jޙ+_\xe1k\f }\x93\xc55\xbaɱ\xa0E\xe1X7=\u007f\x11\x82\xcb\xce\"\xcb(>\xc1\x1b\xe7\x85\xea\xf9\x80o.w\xf1~Mڅ\xf9_z\xdbY\x8fɛ\xf6\xec\xbaϵ*\xb6hIS\x19X\xe0\x17\x1f\xed\x05\xaf\xa7\x86S\xba-\xa2\x86W+\xbd'\u007f\xd3.\b\x82'\x0f\xa3\x148\x03;1xgx\xdc\xe7\xf1\xaf\xc6\v\xb5\x19Kh\xbb!`=5\x91Ë\xfbD\x19\x12ÖI\x1f$'4wH\x97V\x92ಃ\xd0{R k\xaa\xfd!i\xe0\xc8N1\\ī\b!(U\xb5'\x95\x8e\x855_Y\xdd\xcaLc\xa9-o\xa1*\xb2\x17\xa8\xca\xe1\x93\xe7\xf0\xad\x98\xf8\xa9\x9f\x9bx\x17x\xb5\xb3\xa6XE\xfes\xcd\xec:V\xec\xac4\x142qN\x13\xaf㍀e\xb1\x97%j\x10.\xe22\xdbw2%\xc8\xf1D\xcd\v\xeb\x97\x05a\x8f\x9d\xa93\xf1\x17\xc3\xc5|\r\x8fX\n2\xb6\xbe\x11[S\xc0\xdd釖\xae)GO_\x15\n\x1f\x85\t\xa2\xa7\xbc\x96\xbf\xeea,\x86;x=\x88\x9d\x80\xaa\x13@uQ\xff\xfb\xc4N\xcdw\x96\xee磨\xe7\x93\xc9'\a)d\xc1\r\xbc\x14\xfb\xfcA\xee\xfa\xf9EY*\x99\x11\xb6\u007f\xfc\x95\x0eH\x8e\v\xa2\x8a\xabɀ\x82\xa3\x87:6\x80/XZ\xcc\xc8*\xfb\xc8?(\xa4\xfd\xde!v#\x95\xabŁ]7Et\x9f\xbdǢ\x1cx\xd7D\x8e\xd8,\x1as|\"M\xe8\x11\x90\xbef\x95@\xc5N\x80Ѥp1!u\xa8q\x0e!\xf5\xa21B\\\x95\x91\x03\xdaUC[Q\x9ds} U\xaf\xc2R\xa2=m=\xff\x11'\rd!q\xfd\xc7\xe6!\xad4$\xe1\xf7wJD\x06\xfc\xf8ɣ\xe6cv\x9f\x9a\xff\x98}\xab\xf8\xf1\xbac\xe8'co\x99\xb7L;\xa2\x12\x9f4\x05\x02\x91eH\xba\xfb\xf5\xf4;v\x97\x97\xfcO\xfaT\x1d\xff\x9b\x19\x1d\xf6Rw\v\xff\xf9_\x17\x10\xebL\xcf\t\x0fz\xf8\xff\x01\x00\x00\xff\xff\xff\x8cC\xfd\xf8O\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xbcX\xcdr\xdb6\x10\xbe\xeb)v܃/\x15\x95\xa4=txs\x94v&S'\xf1X\x89{h;\x13\bXJ\xa8A\x80\xc5\x02rԧ\xef,\bR\"E\xd9\xceLS\xde\b,\x17\xdf~\xfb\v\xce\xe6\xf3\xf9L4\xfa\x0e=igK\x10\x8d\xc6/\x01-\xbfQq\xff\x13\x15\xda-v/\xd7\x18\xc4\xcbٽ\xb6\xaa\x84e\xa4\xe0\xea[$\x17\xbd\xc47Xi\xab\x83vvVc\x10J\x04Q\xce\x00\x84\xb5.\b^&~\x05\x90\xce\x06\xef\x8cA?ߠ-\xee\xe3\x1a\xd7Q\x1b\x85>\x9dН\xbf{Q\xbc*~\x9c\x01H\x8f\xe9\xf3\x8f\xbaF\n\xa2nJ\xb0ј\x19\x80\x155\x96\xb0\x16\xf2>6\x14\x9c\x17\x1b4N\xb6g\x15;4\xe8]\xa1\u074c\x1a\x94|\xf4ƻؔp\xd8h5dX\xadI\xaf\x93\xb2U\xab\xec:+K\xfbFS\xf8\xf5\xbc̵\xa6\x90\xe4\x1a\x13\xbd0\xe7`%\x11\xd2v\x13\x8d\xf0g\x84f\x00\x8dGB\xbf\xc3O\xf6\u07ba\a\xfb\x8bF\xa3\xa8\x84J\x18\xc2\x19\x00I\xd7`\t\xef\x19}#$\xaa\x19\xc0N\x18\xad\xd2\xf7\xad=\xaeA{u\xf3\xf6\ue1d5\xdcb-\xdaE\x00\x85$\xbdn\x92ܴ%\xa0\t\x04t`\xe0a\x8b\x1e\xe1.\x91\x06\x8c\x14)\xc3\xce\x1a\x01\xdc\xfa/\x94\x81\x8a\xbc\xd0xנ\x0f\xbac\x96\x9f\xa3\xc8\xea\xd7F`.\x19m+\x03\x8ac\t\t\xc2\x16!G\x04*\xa0d\t\xb8\n\xc2V\x13xL4\xd9ppR\x8f\xa8\x02a3\xae\x02VL\xa5'\xa0\xad\x8bFq\x00\xee\xd0\a\xf0(\xdd\xc6\xea\u007fz\xcd\x04\xc1\xa5#\x8d\b\x98\xdd\xd9=\xda\x06\xf4V\x18\xe69\xe2\xf7 \xac\x82Z\xec\xc1#\x9f\x01\xd1\x1eiK\"T\xc0;\xe7\x11\xb4\xad\\\t\xdb\x10\x1a*\x17\x8b\x8d\x0e].IW\xd7\xd1\xea\xb0_\xa4\x8c\xd0\xeb\x18\x9c\xa7\x85\xc2\x1d\x9a\x05\xe9\xcd\\x\xb9\xd5\x01e\x88\x1e\x17\xa2\xd1\xf3\x04ܶ\xe1]\xab\xef|N<\xba\xa3\x03\xf1L\x94\xb6\x15\xfa\xd6q\x95wu҈V5Nې^\xa4\xd1h\x87\xa4S\\\xd7:\xb0\xa7\xff\x8eH\x81\xfdS\xc02U\x14X#\xc4F\x89\x80\xaa\x80\xb7\x16\x96\xa2F\xb3\x14\x84ߜvf\x98\xe6L\xe9\xd3\xc4\x1f\x17¡`\xcbV\xbf\xdcըI\x0fM\xa6\xe9\xaaA9\xc8\x13V\xa1+\x9dӶr\x1eDN\xdb\x01\xa7\x93ʊ#\x91\xa9\xf4M),%\x12\xbds\n\x87\xeb#\xb0W\xbd\xd8\x00]\x83\xbe֔\x9aI\xc2\xc6km\x19\x81\\\xfeFJ\xa1/A\xc5h\am\xac\xc7\x10\xe6p\x8bB}\xb0f?\xb9\xf1\x9b\xd7a|\xc0\xa4\xc3\xf8ia\xad\xf6Vޠ\xd7N=j\xee\xeb\x91po\xf4\xd6=@\x95\x02\xd7\x06\xb3\xe7\xcaB{+ǥ\xb3{\xaen\xdeve\xb4M\x8f\x9cM\x99\x9b\x02\xaerV\xba\n^\x80\xd2$\xd6\x06)\xa9\x1c\xd3\xc3͑wK\b>>\xdbh\xe9l\xa57cS\x85R\xa9\xa3\vss&*\x1eU:\xe2j\x99\xce\xe0R\xc3\x11\xd0x\xb7\xd3\n\xfd\xbc\v܌!\xfa\x1c\xc1\xa9鍭\x9b\xcc\x1e\xe8\xcbO\x8e\xebG]\xf6\xe1X\xb2\xefz\x19E\x97L\x18\xb8\xee\x11X\xe4p\x16~\x1cW\xc0\x1e\x95\xceZ\xf6Rp z{.i\xec\xbcѧ\xe7\x12\x8c\x9fu\x94\xf7\x18N\xd7\xc7Q\x97ĘɔG\xed[p\x10\t\x13\xb7\x8f\x03x\xc2g\x00R,\xd1?\x8dby\xc5b}\xc4\vX^\xc1:Ze\xb0\xc3\xf2\xb0E\xcb\r\\W{\xee\"\x1f\xafW\x13:\xa1\xe31\x15\x87܂;6\xa7\xb0W\xce\xd7\"\x94\xb0ޟ$\xf5\x93\xa65\x1e+\xfd\xe5I\xd3n\x92XGp#\xc2\x16\xb4%\xad\x10\xc4\x04\xdd\x13e\xb6{\xfa\x04\xfeд\x89\xf4\x95\xce\xe0\n\xa2=\x9e\x14\xa1y\x86\xf1\xdc\xf4\xe8\xf8|43n\xb2Pow\xf7\x9eF\xaeq\xc1\x9eN\xcd\x13+\xa6,\x98\x0f\xd3u\xb0\xd3\x1d\xfad\xcb\f\"D\xfaʦ\x99\xbeɂ\xeb\x9c\xeb2z\x8f6d\x85\xe0\xaaa\xdb\xebf\xdfo\xdd8/\x8e:'Oc\x16\xa2\x8d\x84\xaa-\x84\x05\xfca\xe1\r\xcfV\x92g\x9e\x92\x91\xf3\x98C'\xe1d\xdd\x03\u007f|\xa4-)\x00g\x93\xb5in\xe0\xe9\xb5\x1d\xc5\xd2փ6\x86\a*\x8f\xb5ۥ\xdb\xc4\xf0\xe1\xe9ǣك`z`\xf7\xaaxQ\\\xfc\xcf]\xd9\b\n\xdcfQ\xdd\xe2N\x8fo\x12\xa7l^\x9f\xc8wQ\xdd7R~\xf9܍h\v\x9f\xc5>\x9f\x98_i\xc3\x03\xe5D\n\x1c\xaeI\xed\xb5\x81\x02\x04]cz{\xbd\xba\xbe\xa4t\xdb\xe5a\xf8D\xe9\x03\xbb\x8f\x12@\xbe\\\xb8<\x03G\n\xe8'\x9c\xdd\xfbJ\x13X\a\xc6\xd9\xcd E\xda'O\xc4\xe0<\xb4\xa1\xe3<(\xe4a\x96˯\xdc\n\xbb\xc1\xc3-'c?BɁq\x8at\x18\x1d\x87h\xd0v:\x14\x9e\xe1C\xbe\xcc?\xea\xbf\xeb\x81h\xe7\xba!\xc3=\xea\xecKs|_\u007f6\xd7#鮹0\x91s>\xea?\x19\xaf\x9a\xad\xa0\xc7\r\xbea\x89\xce\xce\xe3\x92ԇ\xea\x93\x05\bΦ\xe1\xd5N\xe8\x84\xfad\xe7\x93\x15g\xf6\xce\xd82Q\x8bGK\x87_8/\x0fo\xa9&\xce\xf3/\x9b\xb4\x01\x90~q\xa8#\"sV\xe5\x95C\x81\xe7\n\xda\x04T\xefǿk..\x06\xff\\ҫt\xb6\x1dZ\xa9\x84\xdf\xff\x9c\xb5ZQ\xddu8x\xf1\xdf\x00\x00\x00\xff\xff\xc1e\xcb@\xee\x12\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4\x96\xcdr$5\f\x80\xef\xfd\x14\xaa\xe5\xb0\x17\xa6\x87\x00\a\xaao\x90]\xaaR@*\x95,\xb9P\x1c<\xb6fZ\xc4m\x1bI\x9e\x10\x9e\x9e\xb2\xbb;\xf3\x93Ne9l\xdf,\xcb\xfa\xf9$\xb9ݬV\xab\xc6$\xbaG\x16\x8a\xa1\x03\x93\b\xffQ\fe%\xed\xc3\x0f\xd2R\\\xef/6\xa8\xe6\xa2y\xa0\xe0:\xb8̢q\xb8E\x89\x99-~\xc0-\x05R\x8a\xa1\x19P\x8d3j\xba\x06\xc0\x84\x10\xd5\x14\xb1\x94%\x80\x8dA9z\x8f\xbc\xdaah\x1f\xf2\x067\x99\xbcC\xae\x1ef\xff\xfbo\xdao\xdb\xef\x1b\x00\xcbX\x8f\u007f\xa2\x01E͐:\b\xd9\xfb\x06 \x98\x01;p\xe8Qqc\xecCN\x8c\u007fg\x14\x95v\x8f\x1e9\xb6\x14\x1bIh\x8b\xe3\x1dǜ:8l\x8c秠Ƅ>TS?US\xb7\xa3\xa9\xba\xebI\xf4\x97\xd74~\xa5I+\xf9\xcc\xc6/\aT\x15\x84\xc2.{Ë*\r@b\x14\xe4=\xfe\x1e\x1eB|\f?\x13z'\x1dl\x8d\x17l\x00\xc4Ƅ\x1d\\\x97\xa8\x93\xb1\xe8\x1a\x80\xbd\xf1\xe4*\x9e1\x8f\x980\xfcxsu\xffݝ\xedq0\xa3\x10\xc0\xa1X\xa6T\xf5\x96r\x00\x1200E\x02\x1a\xa7\x00!\x06\x84\xc80DF\x18\xa3\x95v2\x998&d\xa5\x99`\xf9\x8e\xfa\xe7Yv\xe6\xfc}\x89n\xd4\x01W:\x06\x05\xb4G\x98\xea\x8e\x0e\xa4F\x0eq\vړ\x00c\xc5\x12\xc6\x1e:2\vE\xc5\x04\x88\x9b\xbf\xd0j\vw\x05\x1d\vH\x1f\xb3w\xa5\xcd\xf6\xc8\n\x8c6\xee\x02\xfd\xfblYJ~ť7:\x17x\xfe((r0\xbep\xcd\xf85\x98\xe0`0O\xc0X|@\x0eG֪\x8a\xb4\xf0[\x81Ca\x1b;\xe8U\x93t\xeb\xf5\x8et\x9e\x18\x1b\x87!\aҧu\xed{\xdad\x8d,k\x87{\xf4k\xa1\xddʰ\xedI\xd1jf\\\x9bD\xab\x1ax\xa8\x03\xd3\x0e\xee+\x9e\xc6K\xde\x1fE\xaaO\xa5\x13D\x99\xc2\xeeY\\{\xf8U\xee\xa5\u007f\xc72\x8f\xc7\xc6\xf8\x0fx\x8b\xa8P\xb9\xfdx\xf7\tf\xa7\xb5\x04\xa7\xcc+\xed\xc319\x80/\xa0(l\x91\xc7\xc2m9\x0e\xd5\"\x06\x97\"\x05\xad\v\xeb\t\xc3)tɛ\x81T\xe6\xf6+\xf5i\xe1\xb2\xde\x1b\xb0A\xc8\xc9\x19E\xd7\xc2U\x80K3\xa0\xbf4\x82_\x1c{!,\xab\x82\xf4m\xf0\xc7\xd7ݩ\xe2H\xebY<\xdfE\x8b\x15Z\x18˻\x84\xb6Ԭ\x80+giK\xb6\x8e\x01l#\xc3cO\xb6\x9f\xc7\xf2\x84\xe8\xf3\x00\xb7G⥁-\xdfh\xa0\xdc*\xa7\xf2W\x92\x85Z'b<\xe9\xb5Ց\x997)\xa8\xd1,\xff\x8bC=1\x93\xb0\x99\x19\x83Nv\xea-\xb0t\xe8srG\xe6\xc8r\x9e\xf7I8\x1f\xabJ\xfdk\x19\n\x02&t\xb1\xb1\x16\x93\xa2\xbb>\u007fN\xbc{w\xf2.\xa8K\x1b\x83\xa3\xf15\x04\u007f\xfcٌV\xd1\xdd\xcfq\x14\xe1\u007f\x01\x00\x00\xff\xff\xcb0\x9b\f\x8c\t\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WOoܶ\x13\xbd\xebS\f\xf2;\xe4W \xd26m\x0f\x85n\xad\x93\x02A\xd3 \xb0\x13_\x8a\x1e\xb8\xe4\xacĚ\"Y\xcep\x1d\xf7\xd3\x17CI\xfbG+\xdb\xe9\xa1{\xd3p8|||oȭ꺮T\xb4\xb7\x98\xc8\x06߂\x8a\x16\xbf0z\xf9\xa2\xe6\xeeGjl\xd8\xec_o\x91\xd5\xeb\xea\xcez\xd3\xc2U&\x0e\xc35R\xc8I\xe3\x1b\xdcYo\xd9\x06_\r\xc8\xca(Vm\x05\xa0\xbc\x0f\xac$L\xf2\t\xa0\x83\xe7\x14\x9c\xc3Tw蛻\xbc\xc5m\xb6\xce`*+\xcc\xeb\xef\xbfm\xbek~\xa8\x00t\xc22\xfd\x93\x1d\x90X\r\xb1\x05\x9f\x9d\xab\x00\xbc\x1a\xb0\x05\x13\xee\xbd\v\xca$\xfc+#15{t\x98BcCE\x11\xb5,ڥ\x90c\vǁq\xee\x04h\xdc̛\xa9\xcc\xf5X\xa6\x8c8K\xfc\xeb\xda\xe8{;eD\x97\x93r\x97 \xca Y\xdfe\xa7\xd2\xc5p\x05\x10\x13\x12\xa6=~\xf6w>\xdc\xfb_,:C-\xec\x94#\xac\x00H\x87\x88-|\x10\x94Qi4\x15\xc0^9k\n\x15#\xee\x10\xd1\xff\xf4\xf1\xdd\xed\xf77\xba\xc7A\x8dA\x00\x83\xa4\x93\x8d%o\x89\x1b,\x81\x82\t\x05p8\x00\x03\xe5A%\xb6;\xa5\x19v)\f\xb0U\xfa.ǩ&@\xd8\xfe\x89\x9a\x818$\xd5\xe1+\xa0\xac{PRmL\x04\x17:\xd8Y\x87\xcd4%\xa6\x101\xb1\x9dY\x96߉\xbe\x0e\xb1\x05\xe0\x97\xb2\xa31\a\x8c(\n\t\xb8G\x98t\x81\x06\xa8\xec\x16\xc2\x0e\xb8\xb7\x04\t\v\x95~\xd4\xd8IY\x90\x14\xe5'\xe4\r\xdc\b݉\x80\xfa\x90\x9d\x11\x19\xee11$ԡ\xf3\xf6\xefCe\x12^dI\xa7x\x16\xc2\xfc\xb3\x9e1y\xe5\xe4,2\xbe\x02\xe5\r\f\xea\x01\x12\x16v\xb2?\xa9VR\xa8\x81\xdfBB\xb0~\x17Z\xe8\x99#\xb5\x9bMgyv\x94\x0eÐ\xbd\xe5\x87M\xf1\x85\xddf\x0e\x896\x06\xf7\xe86d\xbbZ%\xdd[F\xcd9\xe1FE[\x17\xe0\xbe\x18\xaa\x19\xcc\xff\xd2d?zy\x82\x94\x1fD=\xc4\xc9\xfa\xee\x10.:\u007f\x94w\xd1\xf9(\x8fqڈ\xffH\xaf\x84\x84\x95\xeb\xb77\x9f`^\xb4\x1c\xc19\xe7\xa3N\x0e\xd3\xe8H\xbc\x10e\xfd\x0e\xd3xpEeR\x11\xbd\x89\xc1z.\x1f\xdaY\xf4\xe7\xa4S\xde\x0e\x96i\x96\xad\x9cO\x03W\xa5\xaf\xc0\x16!G\xa3\x18M\x03\xef<\\\xa9\x01ݕ\"\xfc\xcfi\x17\x86\xa9\x16J\x9f'\xfe\xb4\x1d\x9e'\x8el\x1d\xc2s\xbfZ=\xa1\x85\x95o\"j9/!M\xe6ٝ\xd5\xc5\x02\xb0\v\t\xd4\xd1\xd9\x13m\xcdI\xdd5o\x16P*u\xc8\xe7\xb1\x05\x8aO%E\x16\xbe\xef\xd5y\v\xf9?6]#}\x80&\bcg\xf8\xa6Y\xd4{l\xf55\x8d\xaeb\x98\xa5*[\x17\x1e\xc5\xe8\xd2zN\xd1,\x17\x95\x1f\xfa<\xac\x15\xaf\xe1\xe7\x82\xf4}\xe8\x9e\x18\xbd\n\x9eE\xd0O\xa4\xdc\x06\x97\a\xbc\xf1*R\x1f\x9e̜/\xcd\xc3E\xb2L\xbbFi\xb5\xf8\x18\xa4i\xf8\x1a)\xbbՅV\x858\xff\xca\xc5\xf9\x1c\xcbr\xf7\xcc,˄\xb1\xe3\"ȅ\x9d<2ұ\r\xdc[\xeeᾷ\xba_\xa9\neZ9 \xe9/DA\xdb\xe2\xd8\u007f\a[tl\x13^ȣ.\xa2\xb9\b\n\xe4j\xad\xf8\xc2s\xeb\x85\xeb\xc9\v\xcf:\x96\x15g\xfajϖ\xec\x99T\x9dSB\xcfS\x8dr[-'|\x8dig\xc5\u007f\xbe~\xff\xa4s\xdf\x1c\xf3\xca\x1bLY?\xe2\x88\tk\xb2\x9dܭ2&\xde-\xceZ\x120\xfeN\xef\xf8gO\r\xbfD\x9bN\x9e,\x8f@{{H\x1b\x1b\v\xfa\xf1\x8aX\xbe^J9\xa4r\xedj\xe5/\xb0m\x11\f:d4\xb0}\x18;\xe3\x031\x0eK\xbc\xbb\x90\x06\xc5-\xc8\xc5Q\xb3\xbd\x10\x8a\xbc/\xd5\xd6a\v\x9c\xf2\xba\x8aV6\x1b{E\x17\xb6:\xdb\xe7G\xc9X;\xfe\x83\xb9\x9e8\u007fx\xa4\x83\xd5\xf0\x01\xef/b\x1fS\xd0H\x84Kc<\x82~E܋\xd0\xf1a\xfe\xfa\xf8U\xa4XO\x0f\xf12\x00P\x9e\xb5愺\xe9\xcd8E\x8e\x8eQZcd4\x1f\x96O\xf1\x17/\xce\xde\xd6\xe5S\ao\xec\xf8/\x02~\xff\xa3\x1a\xab\xa2\xb9\x9dqH\xf0\x9f\x00\x00\x00\xff\xff\xbbظ3\xc4\f\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s۸\x11\u007fק\xd8\xc9=\xb87\x13RMz\xd3\xe9\xe8\xedb7\x1d\xb7w\x8e'\xf2\xe5%\x93\x87\x15\xb1\x12Q\x83\x00\x8a\x05\xa5\xa8\x9d~\xf7\xce\x02\xa4$J\xb4,_{)_l\x82\x8b\xc5\xfe\xdf\xdfB\x93\xa2(&\xe8\xf5'\n\xac\x9d\x9d\x01zM_#Yy\xe3\xf2\xf1O\\j7]\xbfYP\xc47\x93Gm\xd5\f\xae[\x8e\xae\xf9H\xec\xdaP\xd1\r-\xb5\xd5Q;;i(\xa2\u0088\xb3\t\x00Z\xeb\"\xca2\xcb+@\xe5l\f\xce\x18\nŊl\xf9\xd8.h\xd1j\xa3(\xa4\x13\xfa\xf3\u05ff/ߖ?L\x00\xaa@i\xfb\x83n\x88#6~\x06\xb65f\x02`\xb1\xa1\x19x\xa7\xd6δ\r-\xb0zl=\x97k2\x14\\\xa9݄=Ur\xe8*\xb8\xd6\xcf`\xff!\xef\xed\x04\xca\xca\xdc;\xf5)\xb1y\x97ؤ/Fs\xfc\xdb\xd8ן4\xc7D\xe1M\x1bМ\n\x91>\xb2\xb6\xab\xd6`8\xf9<\x01\xf0\x81\x98\u009a~\xb1\x8f\xd6m\xec{MF\xf1\f\x96h\x98&\x00\\9O3\xb8\x13)=V\xa4&\x00k4Z%Sd\xb9\x9d'\xfb\xe3\xfd\xed\xa7?̫\x9a\x1a̋\xc2\xd9y\nQ\xf7\xea\xc9s\xe0\xd8\xdd\x1a\x80\"\xae\x82\xf6\x89#\\\t\xabL\x03J\\I\f\xb1&\xe8\x1cB\n8\x1d\x03n\t\xb1\xd6\f\x81\x92\x0e6;\xf7\x80-\b\tZp\x8b\xbfS\x15K\x98\x8b\x9e\x81\x81k\xd7\x1a%\xfe_S\x88\x10\xa8r+\xab\xff\xb9\xe3\xcc\x10]:\xd2`\xa4ξ\xfd\xa3m\xa4`ш\x11Zz\rh\x154\xb8\x85@r\x06\xb4\xf6\x80[\"\xe1\x12~v\x81@ۥ\x9bA\x1d\xa3\xe7\xd9t\xbaұ\x0f\xe5\xca5Mku\xdcNS@\xeaE\x1b]\u0a625\x99)\xebU\x81\xa1\xaau\xa4*\xb6\x81\xa6\xe8u\x91\x04\xb7)\x92\xcbF}\x17\xba\xb8\xe7\xab\x03I\xe3V\xdc\xc61h\xbb\xda-\xa7\x00{\xd2\xee\x12`\xa0\x19\xb0ۖ\xe5ߛW\x96\xc4*\x1f\xff<\u007f\x80\xfe\xd0䂡͓\xb5\xf7\xdbxox1\x94\xb6K\n\xd9q\xcb\xe0\x9ađ\xac\xf2Nۘ^*\xa3\xc9\x0e\x8d\xce\xed\xa2\xd1Q<\xfd\x8f\x968\x8a\u007fJ\xb8N\t\r\v\x82\xd6+\x8c\xa4J\xb8\xb5p\x8d\r\x99kd\xfa\xcd\xcd.\x16\xe6BL\xfa\xbc\xe1\x0f\xebА0[k\xb7\xdc\x17\x8aQ\x0f\x1d\xe5\xfe\xdcS%\xfe\x12\xa3\xc9>\xbd\xd4UJ\x01X\xba\x00xL^\x1e\xb0\x1dKMyrU\x98G\x17pE?\xb9\xea ɟ\x90\xe9\xdd؎^*\xa9m9M\xa9c\r\x9c)\x8fX\x02\x98~릦@iG \x8e\xba\x92@r\xac\xa3\v[a+\xfbI\x95G\xfbG\x8d.\x8fu\x8a\xce\xca\u007f\xe7\x14\x8d\x89+\x1b!֘c\xf2ޥ\xcc\b\xad\xb5\x92\x05\xce^,\x80w\xea\xec\xf9\x1dg\x84@K\nd%\xa3r\xf1\xf1.\x95\xa8\x88\xda\xf6\x99\x97K7Dwb\xbeE60)\x18:\xfa\x9c\xb3\xe1\xc9z<*\xe9\x8f\xf7\xb7}\r\xee\x8d\xd4\xc9\x1c\x8fO|\xb8\xf90\xcbRI\b\xadR%\x95.\xb7Ԃ9\x04l\xe4\xce)1\x99\xcc\xd1\xe6\xe0\x88\x0e\xaa\x1a\xedHa\x85\x04Z\x92u\x97\xad\xf4\xb2\xf2\xea\xa5\xd9z\f\x1b\xfag\x04>\x1c\x17\x86\xffS\x13\xbeH\xad\x84ڟU\xeb\xee \x9eϪ%\xf3C\xb0\x14)i\xa6\\ŢTE>\xf2ԭ)\xac5m\xa6\x1b\x17\x1e\xb5]\x15\x12\x88E\x8e\x04\x9e\xa6\x11`\xfa]\xfa\xf3\xab\xb4H\xc8\xfc2U\x12\xe9\xb7\xd0G\xce\xe1\xe9\x8b\xd5\xe9q\xe5\xa5]\xe9j\xde!\x9f㝒\x12\x9bZWu?$\xec\xab\xe7h\x8e4\xa8r\xc9E\xbb\xfd\xcd\xc3V\f\xd9\x06\x91g[tch\x81V\xc9\xff\xac9\xca\xfa\x8b-\xd7\xea\v\x92\xf4\x97ۛo\x13̭~qF\x8e\x02\xe2\x1c\x13\xde\xdd*1\xdfRS8\v\xa7>\x0eH{`7\x82$w4\x17#\xb9\x88\xab\x13\x00\x85J\xa5\x8b\x064\xf7g@\xd6\x19\x9d\a\xc2?\xe0\x8a\x01\x03\x01B\x83^\xfc\xf4H\xdb\"7i\x8fZz\xac\xb4\xd1\x0e\xaf,\b\xd0{\xa3G\xdai\u05ca;\xb8\xd8!o\x19kq\xc5\xe3\xfa\x8eX=\xef>k\xed<^\x8c\xc1\xe7\xee\xe8\x8cKv\x10:\xba=P=\x8d\xdf\x13\xe0\xfa\x84\xddd\n\x14tu(Z1>\xba\f(\x04\xd2\x0f\x16\xbcS\x83\xf7a\x9c\r>e}\x9e\x9d\xde\"Ɩ/\x9e\xdf\x12uo\xbd\\\x0fb\xc7#a\x85_3\xc1UN\xb0\xe3\xf0\x9a\xea\x9c\v\xafO\xe9ӅHPY\xac\xa8\x1b\x89\xc7.\x866\xc8\xfd\t\xa7C\x18\x1c0\xcb\xfbR\xdd\x15^\xa4\x12\xb4\x13ԹDmHA\u007fGv\xbc\xe7\x84\xe7!\x8f\x05-\xa5T\xb5\xde8T\xfdPԉ\xd6_\xf2<\xc84\x9c\xee\x1b\xae\xf8I\x8e-\x93JS\xf2\x88\xfa\xc7\xeda\xe9B\x83q\x06\n#\x15#\fmk\f.\f\xcd \x86\xf6\xf8㓩\xdf\x103\xaeΧ\xd7ϙ&χ\xdd\x06\xc0\x85k\xe3n@\x1c\xa4\xf8\x15w\xd1s\xf9t:2\x82\rC\x16\x050s\a\x1f\x8dI;\x0e\xd3z\u007f\x89\x9a\xe4Y\x90\xb8\xe5\xbf\xcdp\x00_#\x9f7νP\x8c%Ϯ\x06\x9d\xc9\x1eH\x13a\xdb\x1c\x9fP\xc0\x1dmN\xd6n\xed}p\xab@|\x1c\x1aE\x1f?'\xca\x16\xf0>\xc5\xf9\xc5\xfav\a\x9cW\xb9#\x82ڙ>=]D\x03\xb6m\x16\x14D\xef\xc56\x12\x0f\x8b\xf0\xe9̟\xa6\x88\xbd\xd1\x0ev\xf7W\b\x99O7\x14Uh\xd3-\x9b\xe4Lt\xa04{\x83\xa7SQ\xafBB\x12\x922\x92\xd2\xfbh\xed\xd3\xd4SH\x9f^rK\x91\xa4\xb9qv\x14\xe3\xf6\xf9\xa9m\xfc\xe3\x0fO\"\x0em#\xad\x06E\xbd\xfb*\x06|'\xfc\xff\u05fc\x9fl\xacl\xd1s\xed\xe2\xed\xcdYo\xcfwd}\x94\xefAK\xaa]\xe9ޯ#\xea]>li\xf9\xc9apq\xeaq\xc4\x10/k\x1e\xf3\x01\xe93}#\xf1%U\u009c<\x06\x8c\xa7\x81\x99\ue0ef\x8f\u007fey\r\xacӵ\x98`\x9f\f\x86\xf2\xa8\xcb\xd2N\x04ڹ\x90c\xf5\x94\xe3\xa0\x11\f\n\xffP\xf4oQ\xf3G\xe2\xe1hi\xff\x93ӛ\xfd[\x8aˢ\xfb\x89)}\xe8\xd4R\a\x87w\xb7\xaa\xdd\xca\x1e\x86`%\x90\x9d\xd4\xdd\xf1\x8fL\xaf\xf2UI\xff\xabQz\xad\x9c\xcdh\x96g\xf0\xf9\xcb\x04\xba\xbb\xd6O\xbd\x1c\xb2\xf8\x9f\x00\x00\x00\xff\xff\x80\xb6\xf7)\x9e\x1b\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s۸\x11\u007fק\xd8\xf1=\xb87\x13RMz\xd3\xe9\xe8\xed\xcen:n\xef\x1cO\xe4\xcbK&\x0f\x10\xb1\x14Q\x93\x00\x8b]HV;\xfd\xee\x9d\x05HI\x94(Y\xce\xf4rzI\b,\x16\xbf\xfd\xed\x1f,\xe0I\x96e\x13՚O\xe8\xc98;\x03\xd5\x1a|f\xb4\xf2E\xf9\xd3_(7n\xbaz\xbb@Vo'O\xc6\xea\x19\xdc\x04b\xd7|Dr\xc1\x17x\x8b\xa5\xb1\x86\x8d\xb3\x93\x06Yi\xc5j6\x01P\xd6:V2L\xf2\tP8\xcb\xde\xd55\xfal\x896\u007f\n\v\\\x04Sk\xf4q\x87~\xff\xd5\x1f\xf3w\xf9\x0f\x13\x80\xc2c\\\xfeh\x1a$VM;\x03\x1b\xeaz\x02`U\x833h\x9d^\xb9:4\xe8\x91\xd8y\xa4|\x855z\x97\x1b7\xa1\x16\v\xd9u\xe9]hg\xb0\x9bH\x8b;Dɚ\a\xa7?E=\x1f\x93\x9e8U\x1b\xe2\u007f\x8cN\xffl\x88\xa3H[\a\xaf\xea\x11\x1cq\x96\x8c]\x86Z\xf9\xe3\xf9\t@\xeb\x91Я\xf0W\xfbd\xddھ7Xk\x9aA\xa9j\x92i*\\\x8b3\xb8\x17\xa4\xad*PO\x00V\xaa6:\U00091c3b\x16\xed\x8f\x0fw\x9f\xfe4/*lT\x1a\x14ͮEϦ7Q~{\xdeݎ\x01h\xa4\u009b6j\x84kQ\x95d@\x8b?\x91\x80+\x84\xce+\xa8\x81\xe26\xe0J\xe0\xca\x10x\x8c6\xd8\xe4\xe1=\xb5 \"ʂ[\xfc\x13\v\xcea.vz\x02\xaa\\\xa8\xb5\x04\xc1\n=\x83\xc7\xc2-\xad\xf9\xf7V3\x01\xbb\xb8e\xad\x18;\x86\xfb\x9f\xb1\x8cުZH\b\xf8\x06\x94\xd5Ш\rx\x94= \xd8=mQ\x84r\xf8\xc5y\x04cK7\x83\x8a\xb9\xa5\xd9t\xba4\xdc\xc7s\xe1\x9a&XÛi\x8cJ\xb3\b\xec\xdc\xf1,!\xf2+\xa5\xca?(\xae^\xdc\xf5\xfa\xaeL\xdbĊ\xc0\x0e\x14\xb4\x06\v\x1c\x94V0\x96\x18\x95N\x83#*\x01$q\xbf\xfb2\xc6\x19\xc0{\xe7\x01\x9fU\xd3\xd6\xf8\x06Lby[\xd0\xfa\xf80\x94\x88\xd8ꃵ\xe1ʌ\x1b\xae$\x8e:\x83\xd7\xd1PVO\b\xae34 \xd4\xe6\tgp%\x19\xbc\a\xf1?\x92:\xff\xbd\x1a\xd5\xf9\x87\x94\"W\"r\x95\x80mϬ\xfd\x8c\xdb\x01\xe4J1\xb07\xcb%z\x1cg3\x16b)p߃\xf3b\xbbu{\n\xa2Z\xf1Y\xaa3\xa8\x8f\x00\u007f~\xf7\xe5\x04\xda!O`\xac\xc6gx\a\xc6&VZ\xa7\xbf\xcf\xe11F\xc4Ʋz\x96}\x8a\xca\x11Zp\xb6ތ\xa3uP\xa9\x15\x02\xb9\x06a\x8du\x9d\xa5^A\xc3Zm\xc4\xfe\xde]\x12a\nZ\xe5y\xd8\r\x8cj}\xfcp\xfba\x96PI\b-c\x1d\x93S\xa64r\xe6\xcba\x9fN.\x89\xc9HGH\xc1\xc1\x0e\x8aJّ\xb2\x06\xb1i\x88\xec\x96AΒ\xfc\xfa\xb5\xd9zxl\xf7\xbf\x91\xe3\xfb\xb00\xfcN\x87\xe0Ef\xc5\xd6\xf9E\xb3\xee\xf7\xe2\xf9\xacY\xd2\xc4{\x8b\x8c\xd12\xed\n\x12\xa3\nl\x99\xa6n\x85~ep=];\xffd\xec2\x93@\xccR$\xd04\xb6\xe1\xd3\xef\xe2?_eE\xec\x8c/3%\x8a~\v{d\x1f\x9a\xbeڜ\xbe\xaf\xbb\xf4T\xba\x9ew\x8d\xc7\xe1JI\x89ue\x8a\xaao\xd2w\xd5s4G\x1a\xa5S\xc9Uv\U000db1ed\x10\x19\xbc\xe0\xd9d\xdd]0SV\xcb\xff\xc9\x10\xcb\xf8\xab\x99\v\xe6\x82$\xfd\xf5\xee\xf6\xdb\x04s0\xaf\xce\xc8ц4\xc5D\xeb\xee\xb4\xd0W\x1a\xf4g\xbb\xa9\x8f\x03Ѿ\v\x1c\xe9\xe3\xb62\x177rdUK\x95\xe3\xbb۳\b\xe6[\xb1~\xf7\x1d\xe5]\xfb\xd6k\x92\x10=ӷ\x9dD\x92ԜE\x91\xfa\xee\xb1.\xb8Ð:\x868\"\x1d\xe8W!\x91됴9\xfbH\xb2\xf1\x0e~ \xd1:=\xf8\x1e\xfaw0\xb5#}0\x9c\x8cx\xf12Ê\x03]~\x9d\x89\xe2=g)?\xb9S\x12\xcf\uebfa\xd0\x14N\x9a\xb9\xe1\xe3\xcd9\xcf\xdd\x1c\xcb\xc7\x17\x02\xaf\x13.6\r\xc6\xdbBD\x00kE\xfd\x16\xc7~\x83=mia\xac\x84\xa2\ful\xb6\xa4\x0f,\x95\xa9Q\xc3\xf6\xe9\b\x1e\xe5>\x17\xaf\xcc\xd7ǵ\xb2W\x13\bu\xbc\xe7\x8d\x00>\\U:\xdf(\x9e\x81\\\x933Qp0oC]\xabE\x8d3`\x1f\x0e'O\xa6A\x83Djy>\x0f~I2\xe9\x86\xd5-\x00\xb5p\x81\xb7W\xac.!:\xf3\xaf\xa9\xf3\xf8\xe5\x17\xbcJ\xd1y\x10\x0f\"1\x16Wۤ<\x17X\x10o/\xa19\xdc\"\x83{\\\x1f\x8d\xdd\xd9\a\xef\x96\x1e\xe9\xd0\aY﨣\xf6;\x83\xf71\x02.6\xb8\xdb\xe0\xbc͝\x10T\xae\xee#ױ\xaa\xc1\x86f\x81^\f_l\x18\xa9g\xa0O\xf4\xe3\x1bj\xecyw\xbc\xed\xd6\xf7\xd5*)\xea:\xf8B\xd9\xf8$#\xd1\xc9\x0e\xb4\xa1\xb6V\xc7-|oC<\xf6$8%Cvq\xd1g\x97\xa4t\x9c{͝:¹uv\xb4#\xebS\xc1X\xfe\xf3\x0f'\xcfGc\x19\x97\x83R\xd8\xcd\n\x85?\x89\xfe\xff\xb7\ue4c7/\xb1\xf2|Y\xe9\x9a\x0fD_\xaaZQ\xf1X\xcd\xda/?\xc7\xe5f\xb8ɷ\xa84#\xd4\x1c\f\xed\x1e\xec\xdf\uefa2\x8b\xb2\xee\x81>N@2K\xefm\xde=Fu#\xbb\x03K\x15\xd2k\xa1\xbe?|\xa1\xbf\xba\x1a<\xb8\xc7\xcf\xc2Ym\xd2_\x17\xe0\xf3\x97\ttOT\x9fz\x1c2\xf8\xbf\x00\x00\x00\xff\xff6\x10(\x86\xdc\x18\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4W\xcdn\xe36\x10\xbe\xfb)\x06\xdb\xc3^*\xb9i{(tk\xd3.\x104\t\x16\xce6\x97\xa2\a\x8a\x1a\xd9\xd3P$\xcb\x19:u\x9f\xbe %ٲ-{\x83\x05V7\x0e\x873\xdf|\xf3CjQ\x14\xc5Byz\xc6\xc0\xe4l\x05\xca\x13\xfe+hӊ˗\x9f\xb8$\xb7\xdc\xde\xd4(\xeaf\xf1B\xb6\xa9\xe06\xb2\xb8n\x85\xecb\xd0\xf8+\xb6dI\xc8\xd9E\x87\xa2\x1a%\xaaZ\x00(k\x9d\xa8$\xe6\xb4\x04\xd0\xceJp\xc6`(\xd6h˗Xc\x1d\xc94\x18\xb2\x87\xd1\xff\xf6\xbb\xf2\xfb\xf2\xc7\x05\x80\x0e\x98\x8f\u007f\xa2\x0eYT\xe7+\xb0ј\x05\x80U\x1dV\x10\x90\x85t@\xef\x98\xc4\x05B.\xb7h0\xb8\x92܂=\xea\xe4v\x1d\\\xf4\x15\x1c6\xfa\xd3\x03\xa4>\x9cU6\xb4\x1a\r\xed\xf2\x96!\x96\xdfg\xb7\xef\x89%\xabx\x13\x832s@\xf26\x93]G\xa3\u0099Br\xe0\x032\x86-\xfea_\xac{\xb5\x1f\bM\xc3\x15\xb4\xca0.\x00X;\x8f\x15<&\xa8^il\x16\x00[e\xa8Ɍ\xf4\xe0\x9dG\xfb\xf3ǻ\xe7\x1f\x9e\xf4\x06;\xd5\v\x93e\xe71\b\x8d1\xa6o\x92߽\f\xa0Aց|\xb6\b\uf4e9^\a\x9a\x94Qd\x90\r\u0090\x17l\x80\xb3\x1bp-Ȇ\x18\x02\xe6\x18l\x9f\xe3\x89YH*ʂ\xab\xffF-%<\xa58\x03\x03o\\4M*\x83-\x06\x81\x80ڭ-\xfd\xb7\xb7\xcc .\xbb4Jp\xa0x\xfc\xc8\n\x06\xabL\"!ⷠl\x03\x9d\xdaA\xc0\xe4\x03\xa2\x9dX\xcb*\\\u0083\v\bd[W\xc1F\xc4s\xb5\\\xaeIƊ֮\xeb\xa2%\xd9-s]R\x1d\xc5\x05^6\xb8E\xb3dZ\x17*\xe8\r\tj\x89\x01\x97\xcaS\x91\x81\xdb\\\xd0e\xd7|\x13\x86\xf2\xe7\xf7\x13\xa4\xb2Kic\td\xd7{q\xae\xb2\x8b\xbc\xa7\"\x03bPñ\x1e\xff\x81\xde$J\xac\xac~{\xfa\x04\xa3Ӝ\x82c\xce3ۇc| >\x11E\xb6\xc5\xd0'\xae\r\xae\xcb\x16\xd16ޑ\x95\xbcІ\xd0\x1e\x93α\xeeHR\xa6\xff\x89Ȓ\xf2S\xc2m\xeek\xa8\x11\xa2o\x94`S\u009d\x85[ա\xb9U\x8c_\x9d\xf6\xc40\x17\x89\xd2\xcf\x13?\x1dGNJ=[{\xf18-f3t\xda\xffO\x1euJXb-\x1d\xa4\x96t\xee\x01h]\x00u\xa6_N\f\xcf5g\xfaj\xa5_\xa2\u007f\x12\x17\xd4\x1a\uf75e\xb4\xf9\x05T\xbf̝\x18a\xa5\x11\xd77*\xce+\x9eX\x06\x90\x8d\x92I\x87\x8a\"\xbbo\xf3\x998.R\x9eiW\xa9]\xad\xb2\x1a?\xe4ڱzw5\x96\x87\x99\x03)\x94\x8d{\x05\xd7\nک\xc9\x11e\x8dgA\x84h\xdf\f\xb2\x9f\xc9wM*\xad\x960\\\x05\xb8:Q\x1eyn\xa31\x83\xa5B\xbb\xce+\xa1\xda\xe0\xd8ȭ\vg\x10\xa9\xb7\xb1\xeb\xbb\xfa\xcb\xf8\xdd:\x13;\xdc\xdf\rW\x91?\x1f\xebN\v\xa4\x17\f R\b\x10\x8e\xaf\xc0\xe97\xd4\x04\x83w\xcd\x00`(ZNq\xbe\x11{J.\x05<\x9a\x86\xc5|\xf1\x1fi\xccUԑ\xc2i6\x8f6O\xf8\xfa\xec0\x10%\x91\xdf>\x0e\xb2\xfaH\xac\x8e!\xa0\x95\xc1H\xbe\t\xbfh \x18\xc52i\x8b\xf4\x06\xba\x9a\xe7\xfbs\xfd\x11R2\x05\x92\x04\xd3.zU<\xd7/\xad\v\x9d\x92\n\xd2h/ҡ\x93\xfd\xf4\x02S\xb5\xc1\n$\xc4\xd3\xcd\xcb\x13\x01\x99\xd5\xfaz\x04\x0f\xbdN\u007f\x15\x0e\a@\xd5.\xca\x05b\xf3\xa5x\x85ګ\x88\xfcF\xf1u<\x1f\x93\xc6\\Z\xf1\xad\xce\xd1\xc6\xee\xd4E\x01\x8f\xf8z&[\xa1jN{\xae\x80G's\x1b\x17b\x9a\xa9\xe5\x13\xd1\xe1\x89}sX\xe5\xba+\x86'u\xde\x00\xc8/\xd3f\x92b\xee{s\x90\x1c\x1aDi\x8d^\xb0y<}R\xbf{w\xf4B\xceK\xedlC\xfd\xff\x00\xfc\xf9ע\xb7\x8a\xcd\xf3\x88#\t\xff\x0f\x00\x00\xff\xfft\x8f\x1aC\x8e\f\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4YMo\xf3\xb8\xf1\xbf\xfbS\f\xf2?<\xbb@\xac\xfc\x9f\xb6\x87·4O\x16\bv7\r\x92\xa7\xe9\xa1聖\xc66\x1b\x8a\xd4\xf2ʼn[\xf4\xbb\x173$\xf5bɲ\x17\xedb[]\fS\xc3\xe1̏\xf3\xae\xc5r\xb9\\\x88F\xbe\xa2u\xd2\xe8\x15\x88F\xe2\x87GM\xff\\\xf1\xf6{WHs\xb3\xff\xbcF/>/ޤ\xaeVp\x17\x9c7\xf53:\x13l\x89_p#\xb5\xf4\xd2\xe8E\x8d^T\u008b\xd5\x02@hm\xbc\xa0eG\u007f\x01J\xa3\xbd5J\xa1]nQ\x17oa\x8d\xeb U\x85\x96O\xc8\xe7\xef\xff\xbf\xf8M\xf1\xbb\x05@i\x91\xb7\u007f\x955:/\xeaf\x05:(\xb5\x00Т\xc6\x15Xt\xdeXt\xc5\x1e\x15ZSH\xb3p\r\x96t\xd8֚Ь\xa0{\x11\xf7$A\xa2\x12\xcfq;\xaf(\xe9\xfc\xf7\xfd\xd5\x1f\xa4\xf3\xfc\xa6Q\xc1\n\xd5\x1dƋN\xeamP¶\xcb\v\x80ƢC\xbb\xc7?\xe97m\xde\xf5w\x12U\xe5V\xb0\x11\xca\xd1kW\x9a\x06W\xf0HR4\xa2\xc4j\x01\xb0\x17JV\xacb\x94\xcb4\xa8o\x9f\x1e^\u007f\xfbR\xee\xb0\x16q\x11\xa0BWZ\xd90]\x96\x0f\xa4\x03\x01\xaf\xac\x1f\t\xc1\x17\x01~')\x0eX7\xfep\rB\xa9\xbe\x03\n\xdb\x01\xf8\xeb\x1aԅ\x8e\xf5pL}ƱN#46\x8e>F\x9d\xa5%\xba\x14Y\xff\v\x00Sb\x8d\xea\x05\x15\x96\xde\xd8Y\xb0~\xe8SF\xa0(/\xee?\x17\xc37\xde\xc0F*\x8f\x16ޥߍ\x14xߡN8QE\"u%\xf7\xb2\nB\r\xac\xac\x87R\a&\x18\vZ\xaa\xeb\x11O\xc28\xef\x1e`\n\u007fd\xe1\x85\xfaY>x*\xc5\xd2S\v_\xee\xee?\xa88r]\xf73\x03\xdb\xf1\x86\x88\\N_\f?\xb8\x8c\x1dUH\xd2b\xcdu\xd7\x04g\x80\xafle\x1d\x15\xeb{\xfb\xf8el@pڈFB\xde\xce\b\x92|\xa2\xbd^\xca.9\x11Or\x86T9_\x83\x807<\xc4\"\x9b\xea\xf8\x86Bifa\x91\xcbs\xbe\xe87<0Q\xaa\xb8'\xb9\xce]J|\xde\xf0p\xeaՑ\xbat^\xaa~\xa2\u07b4\xc0Rq=\x96U\xe5\xee\nO)I\x8f7\xd3\xc2¼\xa7\xe6'#r\xa1\xd8-\x80\xbd.\x90!\xfe\xe4\"\x9cd_;\x19\x1b\xbc\x19\xa9\x1d\xb2\xed\xe5\xfe\xe6\x95:Ֆy\xb4\xa8\a}\r\x8f\xc6\xd3\xcf\xfd\x87\xa4\x9a]\xe8q\x06\xed\x9e/\x06ݣ\xf1L\xfboA\x12\x85\xba\x10\x90H\xcc\x06\xaacl#\xbd\xfa\xed\x8f\xe3\xe8A\xb7\x9a\xf5\x9bQB:jA\x8c͚s\xdb\x1a\x8f\x88\xcc\xeb\xe0\xb8c\xd1F/9\"e\xee3L\xdbK\x93.Ci\xec\x00\xaf\x13\a\xcd\xf0\\#\xa4\xe3\xbfR#\x16\xf7\xc4VZ\x89\x12+\xa8\x02C\xc0\xad\xa0\xf0\xb8\x95%\xd4h\xb7sr6\x14\xa7N_\xddL$\x89\xcf\x05w{:\v\xe5'\x85\x9dj\xfa\xa0%\xd9\xfa\x897\xb3\xd7;٫]&\x15\x87oNp\x93ڋ\xaa\x921\xc3<\x9d\x89Og\xf0\x19\xe7\x8cxhJ\xb4\xa2!\xcb\xfe\a\x85S6\x94\u007fB#\xa4u\x05\xdc\xf2\xbcJM\xdfl\x9f>U\x1e}\xd6\xc4U: \xcc\xf7BQ\xa8\xa7\xc0\xa1\x01\x15\a\xfeI\x96f3\xcah\xd7\xf0\xbe3.F\xf1\x8dD\xc5S\x88\xab7<\\]\x0f<\x0f\xe4t(\xbdz\xd0W1I\x8c\xfc\xa0m\xf8\x8cV\a\xb8\xe2wW\xc5(\tN\xb2\x9dM\x8c3\x16q\xf2U[\xe9\xfe(\x9aF\xea\xed\xf1=_f\v3v0\xb0\x81ǣ\xd3\x06\x86\xd0/K\a%\xfc\xf8\xb88\xe6\x9b(\xf6m\x1e6jo\n\xb8Շ\x11WG\x1d\xe3D\xa9;\xec I\xa4w\xa9\x14E\xa5ijb\xa6}Fi\xb0\xe0D\x1d\xf9O\x0f\r&@O\x1c\x9f^\xe7+\xf9\xe7\x96l\xa2\x0f\xec)K\x95b\xab\xc0\xd3\xeb\xd8r\xb8\xf8tZ4ng<|\xb3\x97\"M\xb5L\xa8\x1ak\xf6\xd4\x0f~\xfb\x1f\xea\xe8\\\xb9\xc3*(<;\xb4y\xe9\x11\x9e\x1f\xdbd\xb6c[\xe8ph;\xb9\x8cV\x15=p8\x1eJ-L\xe2K\x97<\xd5D\xb7\f\xa39\x18\xc73Y\n'.\x94%:\xb7\t*w<<\xf6\xa7\xf6:\x92K\xd7J{\xe1\x18i*C,{ï\xb3\x13:/|pggtL\x05\xa5h|\xb0\xa9H-\x83\xb5\xacT|g6\xa31\xdd\x05S:\xb4\xd6\xd83\xd3\x1e&\x89\xee^\x9a\xa0\xb9V#\xbb\xe5\xbdP\xa3sb\x9b\xc7<\xefh\x11\xb6\xa8)\xc2N\x8c8R\x1d\x80\x1fX\x86\xf4\x91`اR$\x15\xa5\xa7\xf6+\x8a\xc6a\xb3u\xe2S9\x93\b\xc4\xf6ĝI\xedq\x8b\xc3L\xbc\x11R\x05\x8b\xcf(\xdc\xf0\xdb\xc1H\xfd\xef\xfa\x94\xa9\xb4\x8b\x9a\xc7\xceC\x04\x87U\x1a;{i\xf1\xe4l\x92\xfaP!G\x9d\xdf\xc9\xf8\xdb섛w\xc3'\xa2\xc8\xfe\xd77\x87\xd6\x03\x9f'eA\x1d\xeac\xc6Kx\xc4\xf7\xd1\x1a)\x8f\xd5k\xfb\xe9hD𠟬\xd9R\xe6\x1d\xbd\xba3u\xa3pl\x05Kx\x12\xd6K\xa1\xd4!\xb2?q\xea\xa58u\x1f\xb6\xee\xcf\x1b\xf3\xeb\x11\xf1р\x85̺\xe3\x97M\xf0\x1b9\x1e\xad\xa5/]k\x85\xdf\xfe:\x83\x92wa\xb5\xd4\xdbyu\xff\x9c\x88&\xbc7\xed\xff\xe5\xfc7\v8\xf4\xe0\x13\xb3\xbc\x9f\xeb\xc1\x13\xb1\xf4h\xa9\xfb\xc4\xfb\xb9\xfb\xc7h-\xd3']~Aݧ\xddc\xd5\xc3>\x89\x92V\xba\x00-\xca\x12\x1b\x9f&\x98\xfd\x8f\xbbWW\xfc'\u007f\xbd忥ѱ\xfar+\xf8\xcb_\x17\x90\x10x\xcdr\xd0\xe2\xbf\x02\x00\x00\xff\xffF\x9c\x18\xb7\x0e\x1f\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x1cMo,9\xf1\x9e_Q\n\x87\aRf\xc2\x03\x0ehno\xf3\xb2\"\xe2\xf1\xf6i\x13rA\x1c<\xdd5\x19\x93n\xbb\xb1ݓ\f\x88\xff\x8e\xaa\xec\xfe\x9c\xfepg\x13\xb4\xac\xe2S\xe2\xb1\xcb\xe5\xfav\xb9\xdcg\xab\xd5\xeaL\x14\xf2\x1e\x8d\x95Zm@\x14\x12\x9f\x1d*\xfaϮ\x1f\xffh\xd7R_\x1e>nщ\x8fg\x8fR\xa5\x1b\xb8*\xad\xd3\xf9\x8fhui\x12\xfc\x8c;\xa9\xa4\x93Z\x9d\xe5\xe8D*\x9c\u061c\x01\b\xa5\xb4\x13\xd4m\xe9_\x80D+gt\x96\xa1Y=\xa0Z?\x96[ܖ2K\xd1\xf0\n\xd5\xfa\x87߮\u007f\xb7\xfe\xc3\x19@b\x90\xa7\xdf\xc9\x1c\xad\x13y\xb1\x01Uf\xd9\x19\x80\x129n\xc0&{L\xcb\f\xed\xfa\x80\x19\x1a\xbd\x96\xfa\xcc\x16\x98\xd0j\x0fF\x97\xc5\x06\x9a\x1f\xfc\xa4\x80\x89\xdf\xc5m\x98\xcf]\x99\xb4\xeeϝ\xee/\xd2:\xfe\xa9\xc8J#\xb2\xd6z\xdck\xa5z(3a\x9a\xfe3\x80\u00a0Es\xc0\xbf\xaaG\xa5\x9f\xd4\xf7\x12\xb3\xd4n`'2K?\xdbD\x17\xb8\x81\xaf\x84I!\x12L\xcf\x00\x0e\"\x93)\xef\xd3\xe3\xa6\vT\x9f\xbe\xdd\xdc\xff\x9e\xf0ȅ\xef\x04H\xd1&F\x16<\xaeF\x11\xa4\x05\x01\xf7\xbcI0\x81\x1d\xe0\xf6\u0081A\xc6E9\x1aQ\x18\\UX\xa6\xa0M\x80\tP\xa0\x91:\x95\t|'\x92Dz\xf0S\xed^\x97Y\n[\x04S\xaau\x18[\x18]\xa0q\xb2\"!\xb5\x96\xd4\xd4}=L?\xd0V\xfc\x18HINЂ\xdb#\x04nc\xca\xd4\xcb\x05\xe8\x1d\xb8\xbd\xb4\r\xdeL\x92\x16X\xa0!B\x81\xde\xfe\x03\x13\xb7\x86[\xa2\xb3\xb1\x15\xb6\x89V\a4\xb4\xefD?(\xf9\xaf\x1a\xb2\x05\xa7y\xc9L8\f\x1c\xad\x9aT\x0e\x8d\x12\x191\xa1\xc4\v\x10*\x85\\\x1c\xc1 \xad\x01\xa5jA\xe3!v\r\u007f\xd1\x06A\xaa\x9d\xde\xc0\u07b9\xc2n./\x1f\xa4\xab\xf4$\xd1y^*鎗,\xedr[:m\xece\x8a\a\xcc.\xad|X\t\x93\xec\xa5\xc3ĕ\x06/E!W\x8c\xb8b5Y\xe7\xe9\xaf*.\xda\x0f-Lݑ\xc4\xc6:#\xd5C\xdd\xcdBh\xcb\xc4\x163\xb0\x98a\xe2\xb4\x19#\xcb<\xd3}\x8b\xb3\x85#\xf4\x1c\xb0\x8a\x8dݧ-7\x1b\x9c\x04\nd\xf2\x9f\xf62\xd9\xfb\xf8\x8ad\x8a!A\xaaѲ-\x10E\x91\x1d\xc77\v\xf3\x92\x10\x16\x9a6\aM\x9b5\f}\x98\xc3&\xa2iQ\xf6\xb4i3\x96\xb5K\xe7ZD\xde\xc9\\9\x8d\x17\t\xf4\xcd\xc9\xe4\xd7\x16h\"\xb0\xa4\xb3\xd5\xcd\x0e0/\xdc\xf1\x02\xa4\xabz\xe7aR\x18\xd4\xe0\xf0\x8b`\xd4K\xf4\xe1\xa6?\xf7\x95\xf5\xe1\x15\xb8T\xa3\xf0\u007f\xcd$v6\xb7\xc1\xd7,`З\xf6\xbc\v\x90\xbb\x9aA\xe9\x05\xecd\xe6\x90\xe3\x9ei\x14[\xaeo\x96S\xafE\x968\xafI-\x17.\xd9_\xd7G\xc8\xd9\xf1=\n\xf5\xa7\xfbX\xb9:It\x9d\xfc,d\xe0\f\x834\x98\xfb\xbc\xc5\x1d\xeb@\xd3Ñڧ\xaf\x9f1\x9d&\x14\xc4J\xe4\xc9v>\xf5Pn/\x1f\x8e\x01\xf1\x9b\t\x01U}\xc2\xf2\xf9\xa8\v\x10\xf0\x88G\x1f\x05\t\x05\xc4(AK\x8d\x1e$N\x89ĉ16\x11\x8fxd@!\xd7\x151?^4|{\xc4c\xdc\xc0\x1e)\t\xb3\x90\t\xf04\xa5\x0e&\b\xa7L\x96\x90\x118s\xc9\x1a\x02N\xc7l\x12\x96\x98\x9b\xaaU\x9cx\xd1vk6vҸ\x8fx\xfc`=\xc3H;\xf6\xb2\x88\xde0\x19`\xb0\xc8zTe2\xefE&\xd3z)\xaf\x0f7j*\xea\uedaf\xdaݨ\v\xb8~\x96\x96\xd0S)|\xd6h\xbfj\xc7=oFX\x8f\xfe\x8b\xc8꧲\xea)o\xe6\x89\x1e\xed\x04i\x94\xd0\xfbv\xe3O\x985\xab\xa4\x85\x1bEg\xa5@\x17Ns3\xccx\xb1d\x94\xf2\xd2r&Ti\xb5bG\xbb\x1eX+\x1af`\x8f6\x1d\xee\xb4\xd1k-\x1b\r\x95\x0et\x1e\xb5;\xf2=\x1e\x82O\xdfg\"\xc1\x14Ғ\x89*\xa2!Zg\x84\xc3\a\x99@\x8e\xe6\x01\xa1 _\x10ˍh\xfb\xec\xdbb\x99\x8b\r\r\xaa\x16\f}\x1a\x83Ҋ\xf4:j\\\xc5\xfe\x88\xc1\x83\xf9\xe8\xe9\xc11{c\a\xcdqL\x04\xb5E\x9ar\xc2Vd\xdf\x16y\x89E\xdc9\x8d\x1f#\xda\tx\x97\xe5\xdb\xc0\xcbUȳ\x81\xd894`\x9d6\xd5U\x1f\x19\xc9^ژ\xb8h\xe7\x0e\x1c\xc4\xd8:{\xe7\xc1\xd2a\xee\xbc\xd1oo\u007f\xcf\xfd\x1d \xfd=\a1\xe1\x00\x86!\x17F'h\xed\x9c\xd8DY\xf8\x99\xc4f\x9d\xd4\x14\xfe\xb0\xc4wk\xb3\xc2:\x97l\xadڒP\x98ȹ\xf88q\xfd\xdc\xca˒\xf9\xa0\xff\xe7Ev9v\xc0Z\x9f\xe7BE9\xb0\x13D\xaf\xfc\xdcJ\xc5\x02(\u007fD1\x0f%\x9b\x8b%\x91k\x10\xbe\x9fO0\x90KuË\xc0\xc77\t\x1fj\xa3\x8b/;>\\U\xb3\x1b\x16\xd4\x1d×\xa4c\xad\xd0|_a\xb0\xc3\xc9Ӭ\xfe\xa2\xb0Yi\xd7N}\x10\xe4B\xa7\x1f,줱\xaeA6\x1a\xa6\xb4|I\xfavg9um\xcc\v\x8fr?\xf8\xb9\xadd\xdc^?\xd5\x17\xfa\xe3\x17\xbfC\x8d\xaf\xc7\x10\xe4\x0e\xa4\x03T\x89.\x15'\x8d\xc8\x18\xf0\"\x9e\x1d\xf1\x82\f\xb1~\xafi\xa8\xca<\x96\x10+\x96D\xa9f\xf2K\xed\t\xdf\v\x99\xbd\x15\x1b\x9d\xccQ\x973\x8e\xb9i\xddz\x04?\xb7S\xa9\x91\x8bg\x99\x979\x88\x9c\x18\x11Mr\x8a6d\x8e]\x19\x80'!\x1d{$\x82\xcc\xee\xc9\xe9h\x90\x89\u038b\f\x1d\xc2\x16wڰ\xbe[\x99b\xed\xfa\x83\\\xe8\xf1{\xc7~\x13\xb0\x132+M\xb4\xd5]ȍe'\xa4`x^\xf7\xe0\x13\x8b\u008a\xc9\x17\x95\x8e\x8e\x0ei\xe7G\u007f\x8e\xc0&\xaa\x84`\x1a\xd9\xc9UB5\xccUVZ\x87&\xbe\xe6\xf6fx\xde@\xfdu⇬\xf8aΰl4\xe5\x16\x8d˪\x8bpI\xd9*E\xf1\xf5\xfa\xb3\xd1qdq\xedX\x9dv\\)\xd7\\\x01W\xb7\x06\xb9.\x9e\xaa\x8a\x90\x87\xadFX:p˿\xf8hW\x03u\xeb\xb082\xaf\xb0\xfd\x19\xd5'G\x95X\xcd\x14VM\x97p\xebj\x8d\x11*v\x12\xf0]\xf2\x99N\x19\xf1ϐz\xb3\xb5O\xe3\x15O\xe1F\x0e\x9d8|\\w\u007fq:\xd4?\xc1\x93t\xfb\xc1M\xf1\x1b\x14:.\xaa\x87vat%\x8b\xe1\x8dW\x9f\xaa\xa0\r(\x99\r\xd74\x10\xc1\xab\xf9\x1dr\xc3\x0f\x85?\x94\xbeH\u007f\xe7\x8eI\xb15R/\xae\x8c\xea\xd6=\x8d\x1a\xf8\xe5\x17xK\xca\xca\xe3k\x9f\xe6J\x95\x96T<\xb5\xab\x99&@\xc6\xd69ŝxgk\x9a^P\xc9\x14]W\xf9*וq\xb5JoQ\xa1\xb4\xa0.\xa9[o4\x03wY5R$\x99b*\x8f\x16\xd7\x1b\x85ڞ\x99\xfdDT\x19\x8dV\x0f̀\x1e\xa8c\x9a\xaf\x19\x9a#\u007f\a\x95W\xa9\x14zA}\xd0\xeb\xd6\x11\xbfV\xd4=U\xed\x13Q\xe3\x13\x11\x97\xcfa\x1aQų\xacv'\x82\x86/\xacө\xabpF\xd7^Z\x9dӭ\xbd\x19\x05\x1bS\x933Rq3\ns\xb2\x12'\xb6\xcef\x14\xfa\xac\xfb\x9e\x91\x9cɟ\xad\x12\x85\xdd\xeb\xeaI\xebl\xe4w\xdb\x1d?p\xf4\xaa\x1e\xb4&\x99.\xd3\x1a\xfe\xf0\xf6\xf8\xe5\xff\x11\xbeݳs\xe1\x87~I\xf3\x042\xb8\x8f*\x94뿐\x1c~\x9d\f?\xfd(f\x9d6\xe2\x01\xbf\xe8\xa4\xf5\xf9\x86)\x9at\xc7w^\xe7\a\xe6WɖP\x954\x1c\xb6\x86\x1d\xf5\xc159\xd6\xf0B\xb89\xaf\x12\xa6\xc3r1\xa9\xb9\xcee\xb3\x9b\xba\xbb\xfb\xe27\xe2d\x8e\xebϥ?\x06\xaf\na,\x12m\xab\r\xfaI\xdb1\x03\xb1\xd7O\x90\xe9\xb0\xfb\xef\xfa\xf8\x1b\xe4l.\x9f\xb7\x17\xef¿\x8e\xae\x04\xb2\"\u05fc\b\xdf\x0f\xcfkE\xde-\xa6\xf1\xd1oLv\xc7 \tku\"\x05\xbf\t\x95.<\xe3x\x8b\a\xbd\xe3\x0eaD\xe9\x87\xfc\xd8j\xe8\x01\xfd\xaa~\xcd\u007f6\x03\xd4:\xe1J;\xff9\x04\x1e\x06\x89(\\iB\x924)\r?\xed%\x10\xe8_\xc0.\xff B&\xac\xf3\x825\xf9݁/\xf5\xb0&J\xb7\xceg[+̓'a\xf9\x8b\x03>\xd7*m\xf7S2\xed6\xf2́\x9d6\xb9p\x1bH\x85\xc3\x15\xc1\xee\xfd>i\x99F\x99\xcdO\x9f'w\xf7\x8dF\xd47:\x81\xac<\xadz0=\xb2\x93\xa1\x94\xfd\n\xbe\xe2\xd3Iߵ\"\xc4\xfb\xb94\x9f\x95\xc7\xf4\xbe\xfe\xdaM즚\xef\xe3\xf0%ȉ\x02tu\xb67\xb8\x97\xa9\xa1\x13\u007f\x03\xcf_xX\xf8\xb5<5\xb4|\xfcJh'\xbf\xe9\xfd6\xa2\x85\x13\x1a8\xac}\x03J\xd2\xebj\xbe\x88\xf4\xb1\xf9\x8f\x97^\x85/ \x1d\xfc\xdd!\u007fr(m\xc9J\xf0L\xa1\xa7\xd1<\x91$X\xb8\x90\tl\u007f\n\xe9\xfc\x9c\xff\xa9\xbet\xc4\xff&Z\xf9\x18\xd0n\xe0o\u007f?\x83\xe0E\xee+<\xa8\xf3\xbf\x01\x00\x00\xff\xff|l\xf6\x1b=J\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VM\x93\xe34\x10\xbd\xfbWt-\x87\xbd`\x87\x01\x0e\x94o\xd4\x00US\xc0\xd4\xd4d\x99\v\xc5A\x91\xdaI3\xb2dԭ\f\xe1\xd7S\x92\xecI\xe28;\xbb\x87\xf5\xcd\xed\xfexz\xfd\xba\xad\xaa\xae\xebJ\r\xf4\x84\x81ɻ\x16\xd4@\xf8\xaf\xa0Ko\xdc<\xff\xc0\r\xf9\xd5\xfef\x83\xa2n\xaagr\xa6\x85\xdb\xc8\xe2\xfbGd\x1f\x83Ɵ\xb0#GB\xdeU=\x8a2JT[\x01(缨d\xe6\xf4\n\xa0\xbd\x93\xe0\xad\xc5Po\xd15\xcfq\x83\x9bH\xd6`\xc8\x15\xa6\xfa\xfbo\x9ao\x9b\xef+\x00\x1d0\x87\u007f\xa0\x1eYT?\xb4\u08b5\x15\x80S=\xb6\xc0\x18R\x90(\x89\x1c\xf0\x9f\x88,\xdc\xec\xd1b\xf0\r\xf9\x8a\aԩ\xf06\xf88\xb4p\xfcP\xe2GP\xe5@\xeb\x9cj\x9dS=\x96T\xf9\xab%\x96_\xafy\xfcF\xa3\xd7`cPv\x19Pv`r\xdbhUXt\xa9\x00\x86\x80\xf9\xc3\x1f\xee\xd9\xf9\x17\xf7\v\xa15\xdcB\xa7,c\x05\xc0\xda\x0f\xd8\xc2}B=(\x8d\xa6\x02\xd8+K&\xd3S\xce\xe1\at?>\xdc=}\xb7\xd6;\xecU1\x02\x18d\x1dh\xc8~Kg\x00bP0\"\x01\xf1\xa0\xb4Ff\xd01\x04t\x02\x05)\x90\xeb|\xe8s\xb911\x80\xda\xf8( ;\x84\xa7L\xedx\xb6ft\x18\x82\x1f0\bMD琣\xcc^m3\x8c\xef\xd3!\x8a\x0f\x98$,\xe4\\c\x94\a\x1a\xe0|@\xf0\x1dȎ\x18\x02f\xf6\x9c\x9c\xa3˜t\xa0\x1c\xf8\xcdߨ\xa5\x19O\xcf\xc0;\x1f\xadIj\xdcc\x10\b\xa8\xfd\xd6\xd1\u007f\xaf\x999ѐJZ%\x93\x0e\xa6\x87\x9c`p\xca&\xfa#~\r\xca\x19\xe8\xd5\x01\x02\xa6\x1a\x10\xddI\xb6\xec\xc2\r\xfc\xee\x03f\x02[؉\fܮV[\x92i\xb0\xb4\xef\xfb\xe8H\x0e\xab<\x1e\xb4\x89\xe2\x03\xaf\f\xeeѮ\x98\xb6\xb5\nzG\x82Zb\xc0\x95\x1a\xa8\xce\xc0]\x9e\xab\xa67_\x85q\n\xf9\xfd\tR9$\xc1\xb0\x04r\xdbWs\x96\xfaUޓ̋\x1aJX\xc1\u007f\xa47\x99\x12+\x8f?\xaf?\xc0T4\xb7\xe0\x9c\xf3\xcc\xf61\x8c\x8f\xc4'\xa2\xc8u\x18J\xe3\xba\xe0\xfb\x9c\x11\x9d\x19<\xb9\xa2%m\t\xdd9\xe9\x1c7=\tO*M\xfdi\xe06\xaf\x17\xd8 \xc4\xc1(A\xd3\xc0\x9d\x83[գ\xbdU\x8c_\x9c\xf6\xc40\u05c9ҷ\x89?݊玅\xadW\xf3\xb4\xb2\x16;\xb40\xbd\xeb\x01u\xeaY\".\xc5RG:\x8f\x01t>\x80Z\ni\xdeĐ\xbd?\vŸ#\n\x8e\xd9\xe6H3\xf8\x16\x8e\xa5U\x91\xed;\xc5xn\x9a\xa1yH\x1e\xf3ʖ:\xd4\am\xb1$(\x9b\x02\xdf\x02\x91\x1et\xb1\x9f\u05eb\xe1\x1e_.l\x0f\xc1\xa7=\x99W\xf1\xe9\xb3\xd8\u007f(\xff\x88-9\xfe\xf8i\x8aO\xfe뜮ܓU;\xa6\x81\x10\x9dK\x13\xe9]2ϒ\xc2\xf9F\x9e}%\xc1\xfe\x02\xc7\"\x92;\xd7\xf9\xfc\xd7V\xa9\xa4\x922'86u\xacQ\x10]\xa4\xbb\xd6\xd3\xf2\xccW\xd1'\x10X\x9e\xfc\xe7\xff\xfc\xc0\xb4:(\xe0B\xcd:cY0\xa7J\x17\xe6ʼn\x19\x91Ek\xd5\xc6b\v\x12\xe2<\xb2ĩ\x10\xd4\xe1\\\x15\x93\x8c\x8ew\x9c\x8f\n\xe4\xc2=i\xffe\x87\xee\x9a\xc2\xe1E\xf1RoJ\x1a\xd8\x1c\xae\x05\u07be^\xd6\xe6CRd\xd9Bں\xb5\xd0\x05K\x9f@\xc4B\x97\x8aT\x17n\a\x17$\xacO=\xa7\xd9?\x13\xfctY\x98#\xbfR|\xa1\xa93\xd3\xf1nzs|\xcb®ǻh\xfe0\x9e\u009c\x9c\x9c\xc5\a\xb5\x9d\xb88\xee\xd6t\xcd\x1a\x04\xcd\xfd\xfc&\xfa\xee\xddٕ2\xbfj\xef\f\x95\x8b4\xfc\xf9WU\xb2\xa2y\x9ap$\xe3\xff\x01\x00\x00\xff\xff\x8e\xadi\xa0\xc7\v\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4V\xc1\x8e\xdc6\f\xbd\xfb+\x88\xf4\x90K\xed\xe9\xb6=\x14\xbe\x05\xdb\x16\b\x9a\x06\x8bl2\x97\xa2\a\x8dDϰ+K\xaaH9\xdd~}!Y\xde\x19\xcf\xce$-\x8a\xf8&\x9a\"\x1f\x1f\x1f\t5m\xdb6*\xd0\x16#\x93w=\xa8@\xf8\x97\xa0\xcb'\xee\x1e~\xe0\x8e\xfcf\xba١\xa8\x9b恜\xe9\xe16\xb1\xf8\xf1\x1d\xb2OQ\xe3\x8f8\x90#!\xef\x9a\x11E\x19%\xaao\x00\x94s^T6s>\x02h\xef$zk1\xb6{t\xddC\xda\xe1.\x915\x18K\x86%\xff\xf4M\xf7m\xf7}\x03\xa0#\x96\xeb\xefiD\x165\x86\x1e\\\xb2\xb6\x01pj\xc4\x1e&oӈ\xecT\xe0\x83\x17\xeb\xf5\x9c\xac\x9b\xd0b\xf4\x1d\xf9\x86\x03\xea\x9c{\x1f}\n=\x1c\u007f\xcc!*\xae\xb9\xa6m\x89v_\xa3\xbd\xa9ъ\x83%\x96_>\xe1\xf4\x86X\x8ac\xb0)*{\x15Y\xf1ar\xfbdU\xbc\xe6\xd5\x00\x84\x88\x8cq\xc2\x0f\xee\xc1\xf9\x8f\xeegBk\xb8\x87AY\xc6\x06\x80\xb5\x0f\xd8\xc3\xdb\\AP\x1aM\x030)K\xa6ܟk\xf2\x01ݫ\xbb\xd7\xdb\xef\xee\xf5\x01G5\x1b\x01\f\xb2\x8e\x14\x8aߕb\x80\x18\x14,h\xe0\xe3\x01#¶0\a,>\"W\xe05$\xc0R\x01w\xd5\x14\xa2\x0f\x18\x85\x16\x82\xf3w\xa2\xb0'\xdb\x19\x9e\x97\x19\xf0\xec\x03&k\n\x19\xe4\x80P\x95\x81\x06\xb8\x14\x03~\x009\x10C\xc4\u0094\x93c\xab\x96\xcf\x0f\xa0\x1c\xf8\xdd\x1f\xa8\xa5\x83\xfb\xccfd\xe0\x83O\xd6d!N\x18\x05\"j\xbfw\xf4\xf7Sd\x06\xf1%\xa5U\x82\xb5\xa7\xcbGN0:e3\xd5\t\xbf\x06\xe5\f\x8c\xea\x11\"\xe6\x1c\x90\xdcI\xb4\xe2\xc2\x1d\xfc\xea#\x02\xb9\xc1\xf7p\x10\t\xdco6{\x92e\xa6\xb4\x1f\xc7\xe4H\x1e7e2h\x97\xc4G\xde\x18\x9c\xd0n\x98\xf6\xad\x8a\xfa@\x82ZRč\n\xd4\x16\xe0nV\xf9h\xbe\x8au\x00\xf9\xe5\tRy\xcc\xe2`\x89\xe4\xf6O\xe6\"\xf1\xab\xbcgm\xcfm\x9f\xaf\xcd\xf8\x8f\xf4fSf\xe5\xddO\xf7\xefaIZZ\xb0漰}\xbc\xc6G\xe23Q\xe4\x06\x8cs\xe3\x86\xe8\xc7\x12\x11\x9d\t\x9e\x9c\x94\x83\xb6\x84nM:\xa7\xddH\x92;\xfdgB\x96ܟ\x0en\xcbf\x81\x1dB\nF\t\x9a\x0e^;\xb8U#\xda[\xc5\xf8\xc5i\xcf\fs\x9b)\xfd<\xf1\xa7\vq\xed8\xb3u\x1c\xa2\xba\xaa.v\xe8\xf2\xa4\xde\aԫA\xc91h\xa0:\xb9\x83\x8f\xa0Vl\xd6)\xbe\x1c\xad;q\xbd4\xc00o\xf0\x81\xf6k\x1b\x802\xa6l\u007fe\xef\xaeܻJυZoK\x8e,\xc7\\@\x88~\"\x83\xb1]j\xab\x18R\xacE\x96\xdd\xd85\x97r\x9d1\\\v+\xe1\xce\xe1\xad\x10\xdcU\xa7\x8c!Ӻ\\\x9a\xf7\x0e\xd6\xf5W\x96\xa1\xda\xe3\xe5\xdc\xcf\xea\xcc\n\xa6\x88\xab)l\x9fB\u007fV\x1d\xa2$\xf1\u007f\xd5G\xb9T=wU#:ňNjD\xf0\xc3\n\xbe\xfa\xff\x1a\t\a\xc5\xf8I~/Ǿ\xcb\xf7\x16\xca-\r\xa8\x1f-\xce\xd1\xca6\u007f&\xa8\u007f\x8d4\u007f\xe8\xd2x\x0e\xaa\x85W\x93\"\xabv\x16\x9f\xfd\xf9\xe0ԕ\u007fW\xfa{\xa1mg\xa6\xe3\x03\xe7\xe6x*\xe4\xb5˃\xe6f~!\xe4\xa5iz\x90\x98\xe6\xe4Ui\xd5rԂ\xd2\x1a\x83\xa0y{\xfe\x96y\xf1b\xf5\x1c)G\xed\xdd<\xa6\xdc\xc3o\xbf7sT4\xdb\x05G6\xfe\x13\x00\x00\xff\xff\x9f\xfe\xa5\x85\f\n\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xecf\a,Dx\b\x90\xa3ˬ,y^D\x0e\xa4\x03\x01\xcfL\x1a\xd8(\x02\xf0\a\xe1\xe9?FE{\a\xfe\x80\x90\x89\xd2W\x16\xc1\xec\xe0O\xd5\x16\xadF\x8f.B\x06\xc8T\xe5Ƃ1%\xa6a\xc7\xc4\xd6ÿ\x11\x99\xb0\x18\xe8\x1dC\x19^\x0f\xa8\x19\x99>wà\x9dX\xe7\xf2(\xf3J(\x90\xday\xa1\xb3@\x87\xa8q:\xa5\x03\xc6\xc5\xd9\xc36\x18\u007f\u0099x\xdfq\x04F#\x18\v\x05\xf9\xbc\xfeT7\b\x1fF\xc9\xdd\n\x879\x98\xa0\x86\xb6R\xe8\xe2\x8br\xf6/\x8d]_\x8f\x00\xae\xa5\x10vH%\xb6\xa8\xc0\xa1\xc2\xcc\x1b;Ći\xa1\x861\xef\xa3Fx7ୢӌ.\xb4\xed\xa8\xcc(L\x80׃\xcc\x0ea\xf3\"}a(\x90\x1btl\xbf\xa2,\xd5\xfb0q0-\xe90&L\xb8\x19\x93\xc6|\n\xabo\xd6͘\xf5s͘\xf1x]^֢\xff\xe7aer\xdcg+榷\xf0#\x15\x93\x98()\x00\xdd\xec\x00\x8bҿ_\x83\xf4\xe9)Ÿ\x82ӧQ\xf6\xd4\xef\xfe\xcd\t\xe2\\\x9dޜ\xae\xfb@\x9d\xfe\x95R\xa8_\xfd\x9b\x11\x02;\xfb\xc7\xe8\xeb\x17\n\xe0\x97\xf6\x9ak\x90\xbbZ\x00\xf95\xec\xa4\xf2hO$1E\xae\x99\x96įe\xc1\xfcNE\xa3\x10>;ܿQt䚪\xc7\"n\x9c.\r1e\x8a\xaa\xbb\x9b\xe9$T\xe0\x94IZ,B\"\xf6\xc4\x1cl\x9ep\xe4\xf3\xf9\xeb\x17\xccǙ\x02K4\xacG\xc2\xe7\x134ۯ\x8d!\xf22\x02b\x90Rg\x17!\xa9\xbe\x06\x01/\xf8\x1e\xa2\vJ\xf1K\xb4\x82^C\x93g!Z\xe4̞\x15\xea\x05\xdf\x19HL\xd6g\xd6.\x13}\x18/\xf8>?\xe9\x84m\x84\x8dt\xb1\xf8@\xfc\xa3\a\xcc\x00\xce\xf4\x96\xb2\f\xb8Ԓ<\xcc\x1cQ\xb0\xd4E\xa4\x91\xb8}6y\xb5\x98\x9a\xea@\x10\xe4\x95\vB!m?\xc8r\x11\x81\xe4:\xc1!\xdbD*\xb5<\v%\xf3\xfa5A\xbf7\xfa\x1a\xbe\x1a\xbf\xd1c\xc1jwܿI\x17+\\_\f\xba\xaf\xc6\xf3\x93\x0fgb@\xf9l\x16\x86elB:\xb8a\xa2\xbf]\xb1\x99U\xe206!êE\"\x1dl4\xe5\x10\x81W\xa1\xe6\x16^6\xe5\xed\xbb\xa3\xa8\x1c\x97d\xb4\xd1+\xde\xec\xd6C\xef\x89,^\xa8\xc8m)\xf4Ѫ_\x19^\xb7\b\xe2\x13\xed\vau\xa8\x1f*\x91a\x0ey\xc5L\xe4\xfa\x97\xf0\xb8\x97\x19\x14h\xf7\xe3\x1bA{\x94䳗\xbc~\x91/\r\xe3,}Z\xb25\xa7\x11\x9dq>\x87ƊlsvN\x12\xed\xcc\xc4\xc1\x82\xd7\xf8\xc49:x\x93\xe4\xb8a\x86\x9b\"\xcf\xf98B\xa8\x87\xc5\xde{1\xe7\xfb\xfbv@)\xecq\x85(\xc9:\xff\x97\xb6*V\xda\xff\x83RH;k\xa1\x9f\xf9\\Aage\xac\n\xb5_B\xf0\xa5\x03\x92\xe6Q\xa8Ӳ\xe9\x00Y\x86\xbc\x06\xaa\xb0\r\x9b]/Ҹ\x86׃qaW\xdcIT9ȩH\x8b\xc6\xe5\v\xbe_^\xf7l\xfcr\xa3/\xc3\xf6ܳش\x97\xcf\x006Z\xbd\xc3%\xaf\xbc\xfc\xf6\xd0e\x91\xd6-\x98ćL˂Y\xca\xe6\xd2.N\xcb\xea\x93\n\nEDZ]\xa0s\xa5q~!\x12\x0f\xc6\xf9P\xa1\xeb\x04\x8f\x03\xb5\xa1\xe9\x9c&ք@\xec\xc2鐱\xe9\x1c\x80\x1c\xd9I\xa9\x92\xa4\xe4p\xb0\xc0ك\x98G\x90B)\xb8ll4\xf8\xc7\xcbp8\xc0\xaf\x10\x19\x87\x05\x13\x10I\x15Jk2tnJ\x1df=\xefL\xc1\xad.\xb6\x89\x90T\x84R\xfbTq/\x8d\xa5a#\xb1\xe6\xac0\xfb\xfe\xadU\x03$Ӧ\xff\xa7\xd5\xec<\x8c\x80Oj\x8bB\xe8\xd9͢\x87\xdc]X\x97L!\x82\t!\xbb\xddWl\xc6K#\xbd\xa84\xdfw\x83-\xa4\xde0p\xf8\xf4\xa1\xdb1$\x97\x88\xe7\x87\xd4wie\xc3\xe6\xfaA\xb0\xcd\xd2\xf4K\xeeC\xe3\xf5\x80\x16;\x92\xeaW\x869\x9c\xd3Ʒ\xd2\xf3e\x8c\x0ex\\9\xd8I\xeb|\x1bI\aդն\x80\x9c\x95\xa3\xe8{k\xbf!E\xf9sX\xd7*\x00\x1d\xcck:O\v\fYD1\x1f\x83 \xc8\x1dH\x0f\xa83Si.b\x90\x91\xf2\v\x02K\x833\x9d\xddd\xc3Xb\xd84PW\xc5\x12\xc2W\xac=RO\xd4:ړ\u007f\x16r\xaaR\x95\xc6Yb\xf2\xb2@SMlj\xcd\xe8\x88\xe9)\xac\xeb\x1c\x84\x16\xe2M\x16U\x01\xa2 f/\xe2(\xed̲\xc0\xae|\xe1UH\xcfޝ\xa0\xb2\xab\xf7\x86\x8c\xa2T\xe8\x97e\x03[\xdc\x19˶\xe8d\x8e\xf5\x96\x19en4\b\xd8\t\xa9*\xbbȣ\x9d\xc1\xd1\xe5\x91}4\xf2\x8f\tڗ\xbcv\xc5\xe4ϖ)\x17\x85jS^\xb5\xb4K\x03\xb5\a\x8b\x1f\x19\"\x95V\x92Θ\x8f\x8d\x92\xa2*\t\xfd\xfe#Lj\xf1\xe6G\x98\xd4\x1b?¤\xce\xf8\x11&\xfd\b\x93&Ǐ0\xe9G\x98\xf4\xcf\x1a&Mc\xb2\xe2\xba\xd5\xe0O3o\x9f=B\x1dGl\x14r<տ\v\x1d\xca\xcb\xfa\xf26\xc3kZ\xfe\xea\xf5\x80\xfe\x8065>\xaf\xb8/\xbb/\xe7\xe6\xe8\xbfq\xf3u\xa3\x1e)\u007fR\xde\xd0~9ٺ\xb7\xa0\x11ok\x8cB\xa1\x87\xe8_ڛ9\xd0T\xd2\xedI\xac\x1b;RS\xa2I\xaf\xe8Q\x9f\xfa\xbd)\xcclw0\b\xa5ڽ)\xc26L\xf9N\xfd\x8a\xb3\xad\x1f3\r\x1f\xd3m\x9b\xe3\x1c:\t\xed\xbb,\xb2\x9d\x16\xc3\xef̡ɾ\x8c\xf1n\x8cx\x92\x81^\x1c?\xad\xbb\xbfx\x13{3\xe0U\xfaC\x8f\x00n\x9a\xa4\x94E\xef\xdb͑I\xa7b\x93\xfd)\xe7\xc0X\xd0R]\x0f\xf6\xc5\xd4\xf7\x0f\xda\xec\x84?\x97!):\xcbަB\xfb%\xbd\x1b\xdfܱ\xd1\xed\xc9\x18t\xb2\xe7\x1dv,m!]ޓ\xd1\xed\xb9\x18\xd9d\x16tb\x9c\xddi1\x9foMvU|C/Eꓘ\xdap':(\x16\xc4\x1c\xf3\xdd\x12\xdf\xd4#\xc1\x87y\x13X\x9f\xd5\x19\xd1\xeaz\x98\x00\xb9\xac\x1fb\x01K\xe6z\x1f\xce\xeex8\xed2\x98 b\xae\xcfa\xbc\x87a\x02\xe8`wÒ΅\t\x98uO\xc3\a\xf6+\xcct)|L'ᯍ=\xc7z\x0ef:\rf\"\xd3)\xacfz\t\x96w\x10\xcc\xf0\xe7\x1b\xbb\x05\xea~\x80\xc1w\x9e\xdb#\xd0\xed\x02\x18\x04\xb9\xb03`\xe4\xec\u007f\x10\xe4\x82~\x80\x99\x13\xffA\xb0\x93\x1b\xe3\x84F\x8c\xfe\xe4\xb4(\xdd\xc1\xf8g\xbe\xd28\x1dE>v\xe7\x0e$\x17\x14\xe3\x88\x17\x84L\x99*\xafa\xf7Iዊ\xef\xf0\xf0\xccN\x9e\xaf\xc2d\xcdE\xa0\xe8\xcaS\xf0szO觏L6\x9c7V\xec\xf1\x17\x93\xb5\ue8ce\xd1ߝ۹<\x18\x85\x9aR\xfa\xd4\a!\xd2-\xb6\xeeҡ\xd81V\xd9B|\xd8ʾ\bþ\xbcG-\xcf{5I\xc4\xd3\xd3/\x01q/\v\\\u007f\xa9B\"\xb7*\x85uH\xfcK\x04\x85E[\xfa\xf3`^{\b+\x13)\xfd\xe9\x14_\x8b\\\xc3\xe3lq1\xd6\xe1FmR\xb0Ħiu|\x1e^ӊE[B\t\x89\x8dٍ\xad\xea\x11غ\xeeK\xd1~\xe8h\xf9\xa8+j\xc3\xcey\xf8\x8a\xa4\x17\xbers\x97$yR\xba\xf2\x1c+\xbe\x95\xe5\x1bf\x01@PƳ\xefI\xc6\xf2V\xe7\x1e\xfa\x94L\xee\xfa\xf3\xf9±\xcd\x03R\\V\x13I\xc9_\x85\xab\vh\x03\x1e\xad\x01\x16\xd6q0@\xb00\a<\xa2\x06\xa3\xb9^\xc67\xb8\xc2m\xf8\xd35\xfd\xfc\xb5\x05#\x96\xe3\xaaR\x19\x91'ˍ\xa8\xa5K\xd4O\xec\x8f\xec\x11\xed\x95\x1b\x85X\xb9X\x1c\x19 \xffT\xb3v\xc6\x16\xc2\xdfB.<\xae\x06\x00.\xf0c\x03*\xc5\xc5㙫\x9b<%X\aםY%\x94\x8a\x85\xe7\x02\x9d\x13\xfbtg\xf3\x95\xdc\xd1\x1e5mr\x03U\xa2\x18\x8a5\x85\xcb\xee\xfdŐщ\xccS\xfe\x1bP\x8b)lk\xd6U\xdf\xe6\x94\xd9S\x86\xcd\x13\xe3\xbd\xea蟇\x1d\x89\xd4\x1e\xf7\xd8\r\x8f\xf0\xad\x94vޗ\xdf\xd7ӈ#\x9c\xba\xb3\x857\x9f\x19@%\xf7\x92\x1c\"\tv/\xecV\xecq\x95\x19Ey\x944\xfa\x14\xa3\xbf\x8f\\\x03ԁo\b\xf4\b\xfa\xb9=3%\x82Q\x99\x03\x94\xf4I\x81븣\x92\x04\v\xf17c\xfb\x875\x85\xd4Ɔ\xf0\x85C\xe8\xb4t\xb1?\xe7k\xad\x93\xf8>Ќ\xfat\xaa\xe5\xab0)\xd3\xf0>?t\x8a\xb1\x82\xafx\xbaE\x85\x83\t̟\xeboM\xf4&l\xf4\x835{\x8a\xf8z?\xdd%\xaf\xd4\xfb\xe5AX/\x85R\xef\x01\xfc\xc8[{\x8f\xbf \xf9\x85\x91\x8d`\x88\x81\x11\xb3i\x1e\xc6IMH)u\x905\x1f&lM\xe5;\x06\xd7\x18lO\xe2\xe9}k\xca\x131\xd5\rd\x17\"\xed\x80\xe8\xfc\nw;c}\x88_W+\x90\xbb\xb8\xb1\xf4\xa0\x92w\xe6\xcaW\xf8f\x01H\xdfdq\x8dnr,hQ8\xd6M\xcf\xdfMಳ\xc82\x8aO\xf0\xc6y\xa1z>\xe0\x9b\xcb]\xbc_\x93va\xfe\xd7\xdev\xd6c\xf2\xa6=\xbb\xees\xad\x8a-Z\xd2T\x06\x16\xf8\xc5G{\xc1\xeb\xa9\xe1\x94n\x8b\xa8\xe1\xd5J\xef\xc9ߴ\v\x82\xe0\xc9\xc3(\x05\xce\xc0N\f\xde\x19\x1e\xf7y\xfc\xab\xf1Bm\xc6\x12\xdan\bXOM\xe4\xf0\xe2>Q\x86İe\xd2\a\xc9\t\xcd\x1dҥ\x95$\xb8\xec \xf4\x9e\x14Țj\u007fH\x1a8\xb2S\f\x17\xf1*B\bJU\xedI\xa5ca\xcdWV\xb72\xd3Xj\xcb[\xa8\x8a\xec\x05\xaar\xf8\xe49|Q%~\x10\xe7&\xde\x05^\xed\xac)V\x91\xff\\3\xbb\x8e\x15;+\r\x85L\x9c\xd3\xc4\xebx#`Y\xece\x89\x1a\x84\x8b\xb8\xcc\xf6\x9dL\tr\x91&\xf4\bH\xdf|J\xa0b'\xc0hR\xb8\x98\x90:\xd48\x87\x90z\xd1\x18!\xae\xca\xc8\x01\xed\xaa\xa1\xad\xa8ι>\x90\xaaWa)ў\xb6\x9e\xff\x88\x93\x06\xb2\x90\xb8\xfec\xf3\x90V\x1a\x92\xf0\xfb\a%\"\x03~\xfc\xe4Q\xf3ɷO\xcd\u007f̾U\xfc\xc4\xdb1\xf4\x93\xb1\xb7\xcc[\xa6\x1dQ\x89O\x9a\x02\x81\xc82$\xdd\xfdz\xfa\xb5\xb7\xcbK\xfe'}Ѝ\xff͌\x0e{\xa9\xbb\x85\xff\xfc\xaf\v\x88u\xa6\xe7\x84\a=\xfc\xff\x00\x00\x00\xff\xffu/\x10$\x1eO\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xbcXMs\xdb6\x13\xbe\xebW\xec\xf8=\xf8\xf2\x8ar\x9aK\x877Gig2u\x12\x8f\x95\xb8\x87\xb63\x81\x80\xa5\x84\x1a\x04X, G\xfd\xf5\x9d\x05AJ\xa4(ۙi\xca\x1b\x81\xe5\xe2\xd9g?\xc1\xd9|>\x9f\x89Fߣ'\xedl\t\xa2\xd1\xf85\xa0\xe57*\x1e~\xa4B\xbb\xc5\xee\xd5\x1a\x83x5{\xd0V\x95\xb0\x8c\x14\\}\x87䢗\xf8\x16+mu\xd0\xce\xcej\fB\x89 \xca\x19\x80\xb0\xd6\x05\xc1\xcbį\x00\xd2\xd9\xe0\x9d1\xe8\xe7\x1b\xb4\xc5C\\\xe3:j\xa3Ч\x13\xba\xf3wW\xc5\xeb\xe2j\x06 =\xa6\xcf?\xe9\x1a)\x88\xba)\xc1Fcf\x00V\xd4X\xc2Zȇ\xd8Pp^l\xd08ٞU\xecРw\x85v3jP\xf2\xd1\x1b\xefbS\xc2a\xa3Րa\xb5&\xbdI\xcaV\xad\xb2\x9b\xac,\xed\x1bM\xe1\x97\xf327\x9aB\x92kL\xf4\u009c\x83\x95DH\xdbM4\u009f\x11\x9a\x014\x1e\t\xfd\x0e?\xdb\a\xeb\x1e\xed\xcf\x1a\x8d\xa2\x12*a\bg\x00$]\x83%|`\U0010d428f\x00;a\xb4J߷\xf6\xb8\x06\xed\xf5\xed\xbb\xfb\xd7+\xb9\xc5Z\xb4\x8b\x00\nIz\xdd$\xb9iK@\x13\b\xe8\xc0\xc0\xe3\x16=\xc2}\"\r\x18)R\x86\x9d5\x02\xb8\xf5\x9f(\x03\x15y\xa1\xf1\xaeA\x1ft\xc7,?G\x91կ\x8d\xc0\\2\xdaV\x06\x14\xc7\x12\x12\x84-B\x8e\bT@\xc9\x12p\x15\x84\xad&\xf0\x98h\xb2\xe1\xe0\xa4\x1eQ\x05\xc2f\\\x05\xac\x98JO@[\x17\x8d\xe2\x00ܡ\x0f\xe0Q\xba\x8d\xd5\u007f\xf7\x9a\t\x82KG\x1a\x110\xbb\xb3{\xb4\r\xe8\xad0\xccs\xc4\xff\x83\xb0\nj\xb1\a\x8f|\x06D{\xa4-\x89P\x01\xef\x9dGжr%lCh\xa8\\,6:t\xb9$]]G\xab\xc3~\x912B\xafcp\x9e\x16\nwh\x16\xa47s\xe1\xe5V\a\x94!z\\\x88F\xcf\x13pۆw\xad\xfe\xe7s\xe2\xd1\xe5\x11Ұ\xe7Ƞ\xe0\xb5\xdd\xf4\xcb)\xb6\xcf\xf2\xceQ\xdd:\xbd\xfd\xac\xc5\u007f\xa0\x97\x97\x98\x95\xbb\x9fV\x9f\xa0;4\xb9`\xc8yb\xfb\xf0\x19\x1d\x88g\xa2\xb4\xadз\x8e\xab\xbc\xab\x93F\xb4\xaaqچ\xf4\"\x8dF;$\x9d\xe2\xbaց=\xfdWD\n\xec\x9f\x02\x96\xa9\xa2\xc0\x1a!6J\x04T\x05\xbc\xb3\xb0\x145\x9a\xa5 \xfc\xee\xb43\xc34gJ\x9f'\xfe\xb8\x10\x0e\x05[\xb6\xfa\xe5\xaeFMzh2MW\r\xcaA\x9e\xb0\n]霶\x95\xf3 r\xda\x0e8\x9dTV\x1c\x89L\xa5oJa)\x91\xe8\xbdS8\\\x1f\x81\xbd\xee\xc5\x06\xe8\x1a\xf4\xb5\xa6\xd4L\x126^k\xcb\b\xe4\xf27R\n}\t*F;hc=\x860\x87;\x14\xea\xa35\xfbɍ_\xbd\x0e\xe3\x03&\x1d\xc6O\vk\xb5\xb7\xf2\x16\xbdv\xeaIsߌ\x84{\xa3\xb7\xee\x11\xaa\x14\xb86\x98=W\x16\xda[9.\x9d\xdds}\xfb\xae+\xa3mz\xe4l\xca\xdc\x14p\x9d\xb3\xd2Up\x05J\x93X\x1b\xa4\xa4rL\x0f7G\xde-!\xf8\xf8b\xa3\xa5\xb3\x95ތM\x15J\xa5\x8e.\xcc홨xR鈫e:\x83K\rG@\xe3\xddN+\xf4\xf3.p3\x86\xe8s\x04\xa7\xa67\xb6n2{\xa0/?9\xae\x9ft\xd9\xc7cɾ\xebe\x14]2a\xe0\xbaG`\x91\xc3Y\xf8q\\\x01{T:k\xd9K\xc1\x81\xe8\xed\xb9\xa4\xb1\xf3F\x9f\x9eK0~\xd6Q>`8]\x1fG]\x12c&S\x1e\xb5o\xc1A$L\xdc>\r\xe0\x19\x9f\x01H\xb1D\xff<\x8a\xe55\x8b\xf5\x11/`y\r\xebh\x95\xc1\x0e\xcb\xe3\x16-7p]\xed\xb9\x8b|\xbaYM脎\xc7T\x1cr\v\xee\u061c\xc2^9_\x8bP\xc2z\u007f\x92\xd4Ϛ\xd6x\xac\xf4\xd7gM\xbbMb\x1d\xc1\x8d\b[Ж\xb4B\x10\x13tO\x94\xd9\xee\xe9\x13\xf8c\xd3&\xd27:\x83+\x88\xf6xR\x84\xe6\x19\xc6Kӣ\xe3\xf3\xc9̸\xcdB\xbd\xdd\xdd{\x1a\xb9\xc6\x05{:5O\xac\x98\xb2`>L\xd7\xc1Nw\xe8\xb3-3\x88\x10\xe9\x1b\x9bf\xfa&\v\xaes\xae\xcb\xe8=ڐ\x15\x82\xab\x86m\xaf\x9b}\xbfw\xe3\xbc8\xea\x9c<\x8dY\x886\x12\xaa\xb6\x10\x16\U0003b177<[I\x9eyJF\xcec\x0e\x9d\x84\x93u\x8f\xfc\U00051da4\x00\x9cM֦\xb9\x81\xa7\xd7v\x14K[\x8f\xda\x18\x1e\xa8<\xd6n\x97n\x13Ç\xa7\x1f\x8ff\x0f\x82\xe9\x81\xdd\x0f\xc5Uq\xf1\x1fwe#(p\x9bEu\x87;=\xbeI\x9c\xb2ys\"\xdfEu\xdfH\xf9\xe5K7\xa2-|\x16\xfbrb~\xa5\r\x0f\x94\x13)p\xb8&\xb5\xd7\x06\n\x10t\x8d\xe9\xed\xcd\xea\xe6\x92\xd2m\x97\x87\xe1\x13\xa5\x8f\xec>J\x00\xf9r\xe1\xf2\f\x1c)\xa0\x9fpv\xef+M`\x1d\x18g7\x83\x14i\x9f<\x11\x83\xf3І\x8e\U000e0407Y.\xbfr+\xec\x06\x0f\xb7\x9c\x8c\xfd\b%\a\xc6)\xd2at\x1c\xa2A\xdb\xe9Px\x81\x0f\xf92\xff\xa4\xffn\x06\xa2\x9d\xeb\x86\f\xf7\xa8\xb3/\xcd\xf1}\xfd\xc5\\\x8f\xa4\xbb\xe6\xc2D\xce\xf9\xa8\u007fe\xbcj\xb6\x82\x9e6\xf8\x96%:;\x8fKR\x1f\xaa\xcf\x16 8\x9b\x86\xd7;\xa1\x13ꓝ\xcfV\x9c\xd9;c\xcbD-\x1e-\x1d~\xe1\xbc:\xbc\xa5\x9a8Ͽl\xd2\x06@\xfaš\x8e\x88\xccY\x95W\x0e\x05\x9e+h\x13P}\x18\xff\xae\xb9\xb8\x18\xfcsI\xaf\xd2\xd9vh\xa5\x12~\xfbc\xd6jEu\xdf\xe1\xe0\xc5\u007f\x02\x00\x00\xff\xffa\xd52\a\xee\x12\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4\x96\xcdn\xe46\f\x80\xef~\nb{\xd8Kdz\xc1^\n\xdf\xda\xec\x16\b\xda\x06A\xb2ͥ\xe8A#q\xc6ldI%\xa9Iӧ/$ۙ\x9f8\xc8\xf6\xb0\xbe\x89\xa2\xf8\xf3\x91\x94լV\xab\xc6$\xbaG\x16\x8a\xa1\x03\x93\b\xffQ\fe%\xed\xc3\x0f\xd2R\\\xef/6\xa8\xe6\xa2y\xa0\xe0:\xb8̢q\xb8E\x89\x99-~\xc2-\x05R\x8a\xa1\x19P\x8d3j\xba\x06\xc0\x84\x10\xd5\x14\xb1\x94%\x80\x8dA9z\x8f\xbc\xdaah\x1f\xf2\x067\x99\xbcC\xae\x1ef\xff\xfb\x0f\xed\xc7\xf6C\x03`\x19\xeb\xf1/4\xa0\xa8\x19R\a!{\xdf\x00\x043`\a\x0e=*n\x8c}ȉ\xf1\uf322\xd2\xee\xd1#ǖb#\tmq\xbc\xe3\x98S\a\x87\x8d\xf1\xfc\x14ԘЧj\xea\xa7j\xeav4Uw=\x89\xfe\xf2\x9aƯ4i%\x9f\xd9\xf8倪\x82P\xd8eoxQ\xa5\x01H\x8c\x82\xbc\xc7\xdf\xc3C\x88\x8f\xe1gB賈\xad\xf1\x82\r\x80ؘ\xb0\x83\xeb\x12u2\x16]\x03\xb07\x9e\\\xc53\xe6\x11\x13\x86\x1fo\xae\xee?\xde\xd9\x1e\a3\n\x01\x1c\x8aeJUo)\a \x01\x03S$\xa0q\n\x10b@\x88\fCd\x841Zi'\x93\x89cBV\x9a\t\x96\xef\xa8\u007f\x9eeg\xceߗ\xe8F\x1dp\xa5cP@{\x84\xa9\xee\xe8@j\xe4\x10\xb7\xa0=\t0V,a\xec\xa1#\xb3PTL\x80\xb8\xf9\v\xad\xb6pWб\x80\xf41{W\xdal\x8f\xac\xc0h\xe3.пϖ\xa5\xe4W\\z\xa3s\x81珂\"\a\xe3\v\u05cc߃\t\x0e\x06\xf3\x04\x8c\xc5\a\xe4pd\xad\xaaH\v\xbf\x158\x14\xb6\xb1\x83^5I\xb7^\xefH牱q\x18r }Z\u05fe\xa7M\xd6Ȳv\xb8G\xbf\x16ڭ\f۞\x14\xadfƵI\xb4\xaa\x81\x87:0\xed\xe0\xbe\xe3i\xbc\xe4\xfdQ\xa4\xfaT:A\x94)\xec\x9eŵ\x87_\xe5^\xfaw,\xf3xl\x8c\xff\x80\xb7\x88\n\x95\xdb\xcfw_`vZKpʼ\xd2>\x1c\x93\x03\xf8\x02\x8a\xc2\x16y,ܖ\xe3P-bp)Rк\xb0\x9e0\x9cB\x97\xbc\x19Hen\xbfR\x9f\x16.\xeb\xbd\x01\x1b\x84\x9c\x9cQt-\\\x05\xb84\x03\xfaK#\xf8ͱ\x17²*H\xdf\x06\u007f|ݝ*\x8e\xb4\x9e\xc5\xf3]\xb4X\xa1\x85\xb1\xbcKhK\xcd\n\xb8r\x96\xb6d\xeb\x18\xc062<\xf6d\xfby,O\x88>\x0fp{$^\x1a\xd8\xf2\x8d\x06ʭr*\u007f%Y\xa8u\"Ɠ^[\x1d\x99y\x93\x82\x1a\xcd\xf2\xbf8\xd4\x133\t\x9b\x991\xe8d\xa7\xde\x02K\x87\xbe&wd\x8e,\xe7y\x9f\x84\xf3\xb9\xaaԿ\x96\xa1 `\xc2\xd3t\f\xb47\n\x8fȥ\xc5m\xcc\xe5\xee@\a.\x9f\xf1\x9aP\xf48\x16\xa5\x94/q\xb4(Ҟi\x91\xe2\xf0\"\x9aW\xebP\xbe\xf2'4\x1b\x8f\x1d(g\\\xac\x9fa6O';\xa97\xf2\xa2\xd8'I\xdf\x14\x8d%\xde8\xde\xcb\xf8\x16\xf0\n7\xe4\xe1\xdc\xcb\n\xae\xf1\xf1\x85\xec*\xdcp\xdc1\x8a\xbcغ\x19I՟\xddW0Yh\xb83\xd1\xe1\x81qqXU\xe8\xab\xe9AQ7\x00\xea\xaf\xd8\x1d\x81\x15\x8dlv3\xeaC\x17\x1bk1)\xba\xeb\xf3\xe7Ļw'\uf0ba\xb418\x1a_C\xf0ǟ\xcdh\x15\xdd\xfd\x1cG\x11\xfe\x17\x00\x00\xff\xff\"\xf7\xf4 \x8c\t\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WOoܶ\x13\xbd\xebS\f\xf2;\xe4W \xd2&ȥЭuR h\x1a\x04v\xe2K\xd1\x03\x97\x9c\x95XS$\xcb\x19\xae\xe3~\xfab(i\xffhe;=to\x1a\x0e\x87\x8f\x8f\xef\r\xb9U]ו\x8a\xf6\x16\x13\xd9\xe0[P\xd1\xe27F/_\xd4\xdc\xfdH\x8d\r\x9b\xfd\x9b-\xb2zS\xddYoZ\xb8\xca\xc4a\xb8F\n9i|\x87;\xeb-\xdb\xe0\xab\x01Y\x19Ū\xad\x00\x94\xf7\x81\x95\x84I>\x01t\xf0\x9c\x82s\x98\xea\x0e}s\x97\xb7\xb8\xcd\xd6\x19Le\x85y\xfd\xfd\xeb\xe6m\xf3\xba\x02\xd0\t\xcb\xf4/v@b5\xc4\x16|v\xae\x02\xf0j\xc0\x16L\xb8\xf7.(\x93\xf0\xaf\x8c\xc4\xd4\xec\xd1a\n\x8d\r\x15EԲh\x97B\x8e-\x1c\aƹ\x13\xa0q3\xef\xa62\xd7c\x992\xe2,\xf1\xafk\xa3\x1f\xed\x94\x11]N\xca]\x82(\x83d}\x97\x9dJ\x17\xc3\x15@LH\x98\xf6\xf8\xd5\xdf\xf9p\xef\u007f\xb1\xe8\f\xb5\xb0S\x8e\xb0\x02 \x1d\"\xb6\xf0IPF\xa5\xd1T\x00{\xe5\xac)T\x8c\xb8CD\xff\xd3\xe7\x0f\xb7oot\x8f\x83\x1a\x83\x00\x06I'\x1bK\xde\x127X\x02\x05\x13\n\xe0p\x00\x06ʃJlwJ3\xecR\x18`\xab\xf4]\x8eSM\x80\xb0\xfd\x135\x03qH\xaa\xc3W@Y\xf7\xa0\xa4ژ\b.t\xb0\xb3\x0e\x9biJL!bb;\xb3,\xbf\x13}\x1db\v\xc0/eGc\x0e\x18Q\x14\x12p\x8f0\xe9\x02\rP\xd9-\x84\x1dpo\t\x12\x16*\xfd\xa8\xb1\x93\xb2 )\xcaO\xc8\x1b\xb8\x11\xba\x13\x01\xf5!;#2\xdccbH\xa8C\xe7\xed߇\xca$\xbcȒN\xf1,\x84\xf9g=c\xf2\xca\xc9Yd|\x05\xca\x1b\x18\xd4\x03$,\xecd\u007fR\xad\xa4P\x03\xbf\x85\x84`\xfd.\xb4\xd03Gj7\x9b\xce\xf2\xec(\x1d\x86!{\xcb\x0f\x9b\xe2\v\xbb\xcd\x1c\x12m\f\xee\xd1m\xc8v\xb5J\xba\xb7\x8c\x9as\u008d\x8a\xb6.\xc0}1T3\x98\xff\xa5\xc9~\xf4\xf2\x04)?\x88z\x88\x93\xf5\xdd!\\t\xfe(\xef\xa2\xf3Q\x1e\xe3\xb4\x11\xff\x91^\t\t+\xd7\xefo\xbe\xc0\xbch9\x82s\xceG\x9d\x1c\xa6ёx!\xca\xfa\x1d\xa6\xf1\xe0\x8aʤ\"z\x13\x83\xf5\\>\xb4\xb3\xe8\xcfI\xa7\xbc\x1d,\xd3,[9\x9f\x06\xaeJ_\x81-B\x8eF1\x9a\x06>x\xb8R\x03\xba+E\xf8\x9f\xd3.\fS-\x94>O\xfci;<\x999_\x9a\x87\x8bd\x99v\x8d\xd2j\xf11H\xd3\xf05Rv\xab\v\xad\nq\xfe\x95\x8b\xf39\x96\xe5\xee\x99Y\x96\tc\xc7E\x90\v;yd\xa4c\x1b\xb8\xb7\xdc\xc3}ou\xbfR\x15ʴr@\xd2_\x88\x82\xb6ű\xff\x0e\xb6\xe8\xd8&\xbc\x90G]Ds\x11\x14\xc8\xd5Z\xf1\x85\xe7\xd6\vד\x17\x9eu,+\xce\xf4ݞ-\xd93\xa9:\xa7\x84\x9e\xa7\x1a\xe5\xb6ZN\xf8\x1e\xd3Ί\xffz\xfd\xf1I\xe7\xbe;\xe6\x957\x98\xb2~\xc4\x11\x13\xd6d;\xb9[eL\xbc[\x9c\xb5$`\xfc\x9d\xde\xf1Ϟ\x1a~\x8b6\x9d\xa7\xa0\x91\b\x97\xc6x\x04\xfd\x8a\xb8\x17\xa1\xe3\xc3\xfc\xcd\xf1\xabH\xb1\x9e\x1e\xe2e\x00\xa0-\x9f\xe2/^\x9c\xbd\xad˧\x0e\xde\xd8\xf1_\x04\xfc\xfeG5VEs;\xe3\x90\xe0?\x01\x00\x00\xff\xff\x045\xfb\x0f\xc4\f\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y\xdfs۸\xf1\u007f\xd7_\xb1\x93{\xf0\xf7fB\xea\x92\xfbN\xa7\xa3\xb7\x8b\xddt\xdc\xde9\x9eȗ\x97L\x1eV\xc4JD\r\x02(\x16\x94\xa2v\xfa\xbfw\x16 %Q\xa2e\xf9\xdaK\xf9b\x13\\,\xf6\xf7~\x16\x9a\x14E1A\xaf?Q`\xed\xec\f\xd0k\xfa\x1a\xc9\xca\x1b\x97\x8f\u007f\xe4R\xbb\xe9\xfa͂\"\xbe\x99\x94+\xd74\xad\xd5q;M\x01\xa9\x17mt\x81\xa7\x8a\xd6d\xa6\xacW\x05\x86\xaa֑\xaa\xd8\x06\x9a\xa2\xd7E\x12ܦH.\x1b\xf5]\xe8➯\x0e$\x8d[q\x1bǠ\xedj\xb7\x9c\x02\xecI\xbbK\x80\x81f\xc0n[\x96\u007fo^Y\x12\xab|\xfc\xd3\xfc\x01\xfaC\x93\v\x866O\xd6\xdeo\xe3\xbd\xe1\xc5P\xda.)d\xc7-\x83k\x12G\xb2\xca;mcz\xa9\x8c&;4:\xb7\x8bFG\xf1\xf4\xdf[\xe2(\xfe)\xe1:%4,\bZ\xaf0\x92*\xe1\xd6\xc256d\xae\x91\xe9w7\xbbX\x98\v1\xe9\xf3\x86?\xacCC\xc2l\xad\xddr_(F=t\x94\xfbsO\x95\xf8K\x8c&\xfb\xf4RW)\x05`\xe9\x02\xe01yy\xc0v,5\xe5\xc9Ua\x1e]\xc0\x15\xfd쪃$\u007fB\xa6wc;z\xa9\xa4\xb6\xe54\xa5\x8e5p\xa6\xf1\xacE\xe4YJ\x97\xb9\xc7X?{\xea\xd5\xed2\x1f\x93*Rt\x80\xe05U4(\xed\xa0-GB\x95\x17GX\x02H\xe2\x06\xea\xe8_\xe7\xfaӕ\xb9};\x10[\x03\xe6\xfe\x06\u007f\x99\u007f\xb8\x9b\xfe\xd9eYGybU\x11\v\x1b\x8cԐ\x8d\xaf\x81۪\x06dQA\aRs\xf9R6h\xf5\x928\x96\xdd\t\x14\xf8\xf3\xdb/c6\x03x\xef\x02\xd0Wl\xbc\xa1נ\xb3\x95w\x05\xb5\x0f\x10\xcd\xd9\x10;~\xb0ѱ\xd6㊣\x04R\xa7\xf0&)\x1a\xf1\x91\xc0u\x8a\xb6\x04F?\xd2\f^I\t9\x10\xf1\x9f\x92\r\xffz5\xca\xf3\xffr\x92\xbe\x12\x92WY\xb0]\xcfr\x0eO_\xacN\x8f+/\xedJW\xf3\x0e\xf9\x1c\uf514\xd8Ժ\xaa\xfb!a_=Gs\xa4A\x95K.\xda\xed\xef\x1e\xb6b\xc86\x88<ۢ\x1bC\v\xb4J\xfeg\xcdQ\xd6_l\xb9V_\x90\xa4\xbf\xde\xde|\x9b`n\xf5\x8b3r\x14\x10\xe7\x98\xf0\xeeV\x89\xf9\x96\x9a\xc2Y8\xf5q@\xda\x03\xbb\x11$\xb9\xa3\xb9\x18\xc9E\\\x9d\x00(T*]4\xa0\xb9?\x03\xb2\xce\xe8<\x10\xfe\x01W\f\x18\b\x10\x1a\xf4\xe2\xa7G\xda\x16\xb9I{\xd4\xd2c\xa5\x8dvxeA\x80\xde\x1b=\xd2N\xbbV\xdc\xc1\xc5\x0ey\xcbX\x8b+\x1e\xd7w\xc4\xeay\xf7Yk\xe7\xf1b\f>wGg\\\xb2\x83\xd0\xd1\xed\x81\xeai\xfc\x9e\x00\xd7'\xec&S\xa0\xa0\xabCъ\xf1\xd1e@!\x90~\xb0\xe0\x9d\x1a\xbc\x0f\xe3l\xf0)\xeb\xf3\xec\xf4\x161\xb6|\xf1\xfc\x96\xa8{\xeb\xe5z\x10;\x1e\t+\xfc\x96\t\xaer\x82\x1d\x87\xd7T\xe7\\x}J\x9f.D\x82\xcabE\xddH\xbd~\xc94y>\xec6\x00.\\\x1bw\x03\xe2 ů\xb8\x8b\x9e˧ӑ\x11l\x18\xb2(\x80\x99;\xf8hL\xdaq\x98\xd6\xfbK\xd4$ς\xc4-\xffi\x86\x03\xf8\x1a\xf9\xbcq\xee\x85b,yv5\xe8L\xf6@\x9a\b\xdb\xe6\xf8\x84\x02\xeehs\xb2vk\xef\x83[\x05\xe2\xe3\xd0(\xfa\xf89Q\xb6\x80\xf7)\xce/ַ;\xe0\xbc\xca\x1d\x11\xd4\xce\xf4\xe9\xe9\"\x1a\xb0m\xb3\xa0 z/\xb6\x91xX\x84Og\xfe4E\xec\x8dv\xb0\xbb\xbfB\xc8|\xba\xa1\xa8B\x9bn\xd9$g\xa2\x03\xa5\xd9\x1b<\x9d\x8az\x15\x12\x92\x90\x94\x91\x94\xdeGk\x9f\xa6\x9eB\xfa\xf4\x92[\x8a$͍\xb3\xa3\x18\xb7\xcfOm\xe3\x1f\xfe\xffIġm\xa4ՠ\xa8w_ŀ\xef\x84\xff\u007f\x9b\xf7\x93\x8d\x95-z\xae]\xbc\xbd9\xeb\xed\xf9\x8e\xac\x8f\xf2=hI\xb5+\xdd\xfbuD\xbdˇ--?9\f.N=\x8e\x18\xe2e\xcdc> }\xa6o$\xbe\xa4J\x98\x93ǀ\xf140\xd3}\xf0\xf5\xf1\xaf,\xaf\x81u\xba\x16\x13\xec\x93\xc1P\x1euYډ@;\x17r\xac\x9er\x1c4\x82A\xe1\x1f\x8a\xfe-j\xfeH<\x1c-\xed\u007frz\xb3\u007fKqYt?1\xa5\x0f\x9dZ\xea\xe0\xf0\xeeV\xb5[\xd9\xc3\x10\xac\x04\xb2\x93\xba;\xfe\x91\xe9U\xbe*\xe9\u007f5J\xaf\x95\xb3\x19\xcd\xf2\f>\u007f\x99@w\xd7\xfa\xa9\x97C\x16\xff\x1d\x00\x00\xff\xff\x81\x16-\x05\x9e\x1b\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s۸\x11\u007fק\xd8\xf1=\xb87\x13R\x97\\\xa7\xd3\xd1\u06dd\xddt\xdc\xde9\x9eȗ\x97L\x1e b)\xa2&\x01\x16\xbb\x90\xacv\xfa\xdd;\v\x90\x92(Q\xb2\x9c\xe9\xa5zI\b,\x16\xbf\xfd\xed\x1f,\xe0I\x96e\x13՚O\xe8\xc98;\x03\xd5\x1a|f\xb4\xf2E\xf9ӟ)7n\xbaz\xbb@Vo'O\xc6\xea\x19\xdc\x04b\xd7|Dr\xc1\x17x\x8b\xa5\xb1\x86\x8d\xb3\x93\x06Yi\xc5j6\x01P\xd6:V2L\xf2\tP8\xcb\xde\xd55\xfal\x896\u007f\n\v\\\x04Sk\xf4q\x87~\xff\xd5\x0f\xf9\x8f\xf9\x0f\x13\x80\xc2c\\\xfeh\x1a$VM;\x03\x1b\xeaz\x02`U\x833h\x9d^\xb9:4\xe8\x91\xd8y\xa4|\x855z\x97\x1b7\xa1\x16\v\xd9u\xe9]hg\xb0\x9bH\x8b;Dɚ\a\xa7?E=\x1f\x93\x9e8U\x1b⿏N\xffb\x88\xa3H[\a\xaf\xea\x11\x1cq\x96\x8c]\x86Z\xf9\xe3\xf9\t@\xeb\x91Я\xf07\xfbd\xddھ7Xk\x9aA\xa9j\x92i*\\\x8b3\xb8\x17\xa4\xad*PO\x00V\xaa6:\U00091c3b\x16\xedO\x0fw\x9f~\x9c\x17\x156*\r\x8afעgӛ(\xbf=\xefn\xc7\x004R\xe1M\x1b5µ\xa8J2\xa0şH\xc0\x15B\xe7\x15\xd4@q\x1bp%pe\bE\xe5\b-8[o\xc6\xd1:\xa8\xd4\n\x81\\\x83\xb0ƺ\xceR\xaf\xa0a\xad6b\u007f\xef.\x890\x05\xad\xf2<\xec\x06F\xb5>~\xb8\xfd0K\xa8$\x84\x96\xb1\x8e\xc9)S\x1a9\xf3\xe5\xb0O'\x97\xc4d\xa4#\xa4\xe0`\aE\xa5\xecHY\x83\xd84Dv\xcb gI~\xfd\xdal=<\xb6\xfb\xdf\xc8\xf1}X\x18\xfeO\x87\xe0Ef\xc5\xd6\xf9E\xb3\xee\xf7\xe2\xf9\xacY\xd2\xc4{\x8b\x8c\xd12\xed\n\x12\xa3\nl\x99\xa6n\x85~ep=];\xffd\xec2\x93@\xccR$\xd04\xb6\xe1\xd3\xef\xe2?_eE\xec\x8c/3%\x8a~\v{d\x1f\x9a\xbeڜ\xbe\xaf\xbb\xf4T\xba\x9ew\x8d\xc7\xe1JI\x89ue\x8a\xaao\xd2w\xd5s4G\x1a\xa5S\xc9Uv\U000fb1ed\x10\x19\xbc\xe0\xd9d\xdd]0SV\xcb\xff\xc9\x10\xcb\xf8\xab\x99\v\xe6\x82$\xfd\xed\xee\xf6\xdb\x04s0\xaf\xce\xc8ц4\xc5D\xeb\xee\xb4\xd0W\x1a\xf4g\xbb\xa9\x8f\x03Ѿ\v\x1c\xe9\xe3\xb62\x177rdUK\x95\xe3\xbb۳\b\xe6[\xb1~\xf7\x1d\xe5]\xfb\xd6k\x92\x10=ӷ\x9dD\x92ԜE\x91\xfa\xee\xb1.\xb8Ð:\x868\"\x1d\xe8W!\x91됴9\xfbH\xb2\xf1\x0e~ \xd1:=\xf8\x1e\xfaw0\xb5#}0\x9c\x8cx\xf12Ê\x03]~\x9d\x89\xe2=g)?\xb9S\x12\xcf\uebfa\xd0\x14N\x9a\xb9\xe1\xe3\xcd9\xcf\xdd\x1c\xcb\xc7\x17\x02\xaf\x13.6\r\xc6\xdbBD\x00kE\xfd\x16\xc7~\x83=mia\xac\x84\xa2\ful\xb6\xa4\x0f,\x95\xa9Q\xc3\xf6\xe9\b\x1e\xe5>\x17\xaf\xcc\xd7ǵ\xb2W\x13\bu\xbc\xe7\x8d\x00>\\U:\xdf(\x9e\x81\\\x933Qp0oC]\xabE\x8d3`\x1f\x0e'O\xa6A\x83Djy>\x0f~M2\xe9\x86\xd5-\x00\xb5p\x81\xb7W\xac.!:\xf3\xaf\xa9\xf3\xf8\xe5\x17\xbcJ\xd1y\x10\x0f\"1\x16Wۤ<\x17X\x10o/\xa19\xdc\"\x83{\\\x1f\x8d\xdd\xd9\a\xef\x96\x1e\xe9\xd0\aY﨣\xf6;\x83\xf71\x02.6\xb8\xdb\xe0\xbc͝\x10T\xae\xee#ױ\xaa\xc1\x86f\x81^\f_l\x18\xa9g\xa0O\xf4\xe3\x1bj\xecyw\xbc\xed\xd6\xf7\xd5*)\xea:\xf8B\xd9\xf8$#\xd1\xc9\x0e\xb4\xa1\xb6V\xc7-|oC<\xf6$8%Cvq\xd1g\x97\xa4t\x9c{͝:¹uv\xb4#\xebS\xc1X\xfe\xd3\x1fO\x9e\x8f\xc62.\a\xa5\xb0\x9b\x15\n\u007f\x16\xfd\xffk\xdd'\x0f_b\xe5\xf9\xb2\xd25\x1f\x88\xbeT\xb5\xa2ⱚ\xb5_~\x8e\xcb\xcdp\x93oQiF\xa89\x18\xda=ؿ\xdd}E\x17e\xdd\x03}\x9c\x80d\x96\xdeۼ{\x8c\xeaFv\a\x96*\xa4\xd7B}\u007f\xf8B\u007fu5xp\x8f\x9f\x85\xb3ڤ\xbf.\xc0\xe7/\x13螨>\xf58d\xf0\xbf\x01\x00\x00\xff\xff\x98\xaaEc\xdc\x18\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4W\xcdn\xe36\x10\xbe\xfb)\x06\xdb\xc3^*y\x83\xbd\x14\xba\xb5i\x17\b\x9a\x04\vg\x9bK\xd1\x03E\x8d\xeci(\x92\xe5\f\x9d\xbaO_\x90\x92lٖ\xbd\xc1\x02\xab\x1b\x87Ùo\xbe\xf9!\xb5(\x8ab\xa1<=c`r\xb6\x02\xe5\t\xff\x15\xb4i\xc5\xe5\xcbO\\\x92[noj\x14u\xb3x!\xdbTp\x1bY\\\xb7Bv1h\xfc\x15[\xb2$\xe4\xec\xa2CQ\x8d\x12U-\x00\x94\xb5NT\x12sZ\x02hg%8c0\x14k\xb4\xe5K\xac\xb1\x8ed\x1a\f\xd9\xc3\xe8\u007f\xfb\xa1\xfcX~X\x00\xe8\x80\xf9\xf8\x17\xea\x90Eu\xbe\x02\x1b\x8dY\x00X\xd5a\x05\x01YH\a\xf4\x8eI\\ \xe4r\x8b\x06\x83+\xc9-أNn\xd7\xc1E_\xc1a\xa3?=@\xea\xc3YeC\xab\xd1\xd0.o\x19b\xf9}v\xfb\x9eX\xb2\x8a71(3\a$o3\xd9u4*\x9c)$\a> c\xd8\xe2\x1f\xf6źW\xfb\x89\xd04\\A\xab\f\xe3\x02\x80\xb5\xf3X\xc1c\x82\xea\x95\xc6f\x01\xb0U\x86\x9a\xccH\x0f\xdey\xb4?\u007f\xbe{\xfe\xf8\xa47ة^\x98,;\x8fAh\x8c1}\x93\xfc\xeee\x00\r\xb2\x0e\xe4\xb3Ex\x9fL\xf5:Ф\x8c\"\x83l\x10\x86\xbc`\x03\x9c݀kA6\xc4\x100\xc7`\xfb\x1cO\xccBRQ\x16\\\xfd7j)\xe1)\xc5\x19\x18x\xe3\xa2iR\x19l1\b\x04\xd4nm\u9ffde\x06q٥Q\x82\x03\xc5\xe3GV0Xe\x12\t\x11\u007f\x04e\x1b\xe8\xd4\x0e\x02&\x1f\x10\xed\xc4ZV\xe1\x12\x1e\\@ ۺ\n6\"\x9e\xab\xe5rM2V\xb4v]\x17-\xc9n\x99\xeb\x92\xea(.\xf0\xb2\xc1-\x9a%ӺPAoHPK\f\xb8T\x9e\x8a\f\xdc\xe6\x82.\xbb\xe6\x870\x94?\xbf\x9f \x95]J\x1bK \xbbދs\x95]\xe4=\x15\x19\x10\x83\x1a\x8e\xf5\xf8\x0f\xf4&Qbe\xf5\xdb\xd3\x17\x18\x9d\xe6\x14\x1cs\x9e\xd9>\x1c\xe3\x03\xf1\x89(\xb2-\x86>qmp]\xb6\x88\xb6\xf1\x8e\xac\xe4\x856\x84\xf6\x98t\x8euG\x922\xfdOD\x96\x94\x9f\x12ns_C\x8d\x10}\xa3\x04\x9b\x12\xee,ܪ\x0eͭb\xfc\xee\xb4'\x86\xb9H\x94~\x9d\xf8\xe98:V\xec\xd9ڋ\xc7i1\x9b\xa1\xd3\xfe\u007f\xf2\xa8S\xc2\x12k\xe9 \xb5\xa4s\x0f@\xeb\x02\xa83\xfdrbx\xae9\xd3W+\xfd\x12\xfd\x93\xb8\xa0\xd6x\xef\xf4\xa4\xcd/\xa0\xfae\xee\xc4\b+\x8d\xb8\xbeQq^\xf1\xc42\x80l\x94L:T\x14\xd9}\x9b\xcf\xc4q\x91\xf2L\xbbJ\xedj\x95\xd5\xf8)\u05ceջ\xab\xb1<\xcc\x1cH\xa1l\xdc+\xb8V\xd0NM\x8e(k<\v\"D\xfbf\x90\xfdL\xbekRi\xb5\x84\xe1*\xc0Չ\xf2\xc8s\x1b\x8d\x19,\x15\xdau^\t\xd5\x06\xc7Fn]8\x83H\xbd\x8d]\xdf\xd5\xdf\xc6\xef֙\xd8\xe1\xfen\xb8\x8a\xfc\xf9XwZ \xbd`\x00\x91B\x80p|\x05N\xbf\xa1&\x18\xbck\x06\x00C\xd1r\x8a\xf3\x8d\xd8Sr)\xe0\xd14,\xe6\x8b\xffHc\xae\xa2\x8e\x14N\xb3y\xb4y\xc2\xd7W\x87\x81(\x89\xfc\xf6q\x90\xd5Gbu\f\x01\xad\fF\xf2M\xf8M\x03\xc1(\x96I[\xa47\xd0\xd5<ߟ돐\x92)\x90$\x98vѫ\xe2\xb9~i]\xe8\x94T\x90F{\x91\x0e\x9d\xec\xa7\x17\x98\xaa\rV !\x9en^\x9e\bȬ\xd6\xd7#x\xe8u\xfa\xabp8\x00\xaavQ.\x10\x9b/\xc5+\xd4^E\xe47\x8a\xaf\xe3\xf9\x9c4\xe6Ҋou\x8e6v\xa7.\nx\xc4\xd73\xd9\nUs\xdas\x05<:\x99۸\x10\xd3L-\x9f\x88\x0eO\xec\x9b\xc3*\xd7]1<\xa9\xf3\x06@~\x996\x93\x14sߛ\x83\xe4\xd0 Jk\xf4\x82\xcd\xe3\xe9\x93\xfaݻ\xa3\x17r^jg\x1b\xea\xff\a\xe0Ͽ\x16\xbdUl\x9eG\x1cI\xf8\u007f\x00\x00\x00\xff\xfflC\xbf\xee\x8e\f\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4YMo3\xb7\xf1\xbf\xebS\f\xfc?<\t`\xad\xf3 \x97?ts\xfd8\x80\x91\xc45\xec\xa7\xee\xa1\xe8\x81\xda\x1dI\xac\xb9\xe4\x86/\xb2բ߽\x98!\xb9/\xda\xd5JA\x1b\xa4\u074b \xeep8\xf3\xe3\xbc\xefb\xb9\\.D#_\xd1:i\xf4\nD#\xf1ã\xa6\u007f\xaex\xfb\u007fWHs\xb3\xff\xbcF/>/ޤ\xaeVp\x17\x9c7\xf53:\x13l\x89_p#\xb5\xf4\xd2\xe8E\x8d^T\u008b\xd5\x02@hm\xbc\xa0eG\u007f\x01J\xa3\xbd5J\xa1]nQ\x17oa\x8d\xeb U\x85\x96O\xc8\xe7\xef\xbf+\xbe/\xbe[\x00\x94\x16y\xfbWY\xa3\xf3\xa2nV\xa0\x83R\v\x00-j\\\x81E\xe7\x8dEW\xecQ\xa15\x854\v\xd7`I\x87m\xad\t\xcd\n\xba\x17qO\x12$*\xf1\x1c\xb7\xf3\x8a\x92\xce\xff\xd8_\xfdI:\xcfo\x1a\x15\xacP\xdda\xbc\xe8\xa4\xde\x06%l\xbb\xbc\x00h,:\xb4{\xfc\x93~\xd3\xe6]\xff QUn\x05\x1b\xa1\x1c\xbdv\xa5ip\x05\x8f$E#J\xac\x16\x00{\xa1d\xc5*F\xb9L\x83\xfa\xf6\xe9\xe1\xf5\xfb\x97r\x87\xb5\x88\x8b\x00\x15\xba\xd2ʆ\xe9\xb2| \x1d\bxe\xfdH\b\xbe\b\xf0;\xe1\xc1\"\x8b\xa2\xbd\x03\xbfC\x10M\xa3dɧ\x80\xd9$\x96\xd0\xeeq\xb0\xb1\xa6\xeex\xadE\xf9\x16\x1a\xf0\x06\x04xa\xb7\xe8\xe1ǰF\xabѣ\x83R\x05\xe7\xd1\x16\x89McM\x83\xd6\xcb\f,==Sj\u05cet\xf8DJF\x1a\xa8\xc8x0\x8a\x9aL\x00+p\f\x00\x98\r\xf8\x9dt\x9dJ\xacF\x8f-\x10\x89\xd0`\xd6\u007f\xc3\xd2\x17\xf0B7`\x1d\xb8\x9d\t\xaa\"\x8bۣ%HJ\xb3\xd5\xf2\xef-gG\nґJxL7\x9d\x1f\xa9=Z-\x14]O\xc0k\x10\xba\x82Z\x1c\xc0\"\x9d\x01A\xf7\xb81\x89+\xe0g\xbe\x12\xbd1+\xd8y߸\xd5\xcd\xcdV\xfa\xec<\xa5\xa9력?ܰ\v\xc8u\xf0ƺ\x9b\n\xf7\xa8n\x9c\xdc.\x85-w\xd2c\xe9\x83\xc5\x1b\xd1\xc8%\v\xae\xd9w\x8a\xba\xfa\xbf\xf6\xb2>\xf5$\xf5\a2(\xe7\xad\xd4\xdbv\x99M\xfb$\xeed\xe2\xd1r\xe2\xb6(\u007f\a/-\x11*\xcf\xf7/_\xfbV%\xdd\x10sF\xbbgh\x1d\xf0\x04\x94\xd4\x1b\xb4\xf1\xe2ض\x88#\xea\xaa1R{\xfeS*\x89z\b\xba\v\xebZz\xba\xe9_\x02:2]S\xc0\x1d\x87\x10X#\x84\xa6\x12\x1e\xab\x02\x1e4܉\x1a՝p\xf8\x9b\xc3N\b\xbb%Az\x1e\xf8~\xe4\x1b\x12F\xb4\xda\xe5\x1c\xa2&o(y\xf7K\x83\xe5\xc03h\x93\xdcd7\xde\x18;p~\xdaR\xf4XN\xb9%=ѷ)\x04\r\u05cf\x84\xf8CKF\xb6B\xc7\a-\u007f\t\xc8!4\xfa$\x8eÅ\xed\x85\xd3\xfeC&P\x1c\xadN\"H\x0f~\x94*TX\xb5a\xd2\xcdJz?\"\xe7$#\xa4&\x1b\xa7\xa0N\xe2\xea\xee-\aH1!%ٙԑ\x1bH\xcd*N K\x8f\xf4X\x8fĚ\xd1\t8k\x89\xb5\xc2\x15x\x1b\x8eώ\xfb\x84\xb5\xe20\tEβ\x97!\xd1R'7W\xb2\xe4+k\x9d\x99\xc1\xf8_\xc2!Is\x173\xcfeh\xa6!\x1bF\xd8^\x80\xd4\xda\x18\x85BOau\xa9\xfb<\x8cȏ\xac\xa6\xf5\x9cl6&\x1f1\xd2+F\xb9\x18\xf1Iq\xc0\xba\xf1\x87k\x10J\xf5\x1dP\xd8\x0e\xc0\xdfנ.t\xac\x87c\xea3\x8eu\x1a\xa1\xb1q\xf41\xea,-ѥ\xc8\xfa_\x00\x98\x12kT/\xa8\xb0\xf4\xc6\u0382\xf5S\x9f2\x02Eyq\xff\xb9\x18\xbe\xf1\x066Ry\xb4\xf0.\xfdn\xa4\xc0\xfb\x0eu\u0089*\x12\xa9+\xb9\x97U\x10j`e=\x94:0\xc1X\xd0R]\x8fx\x12\xc6y\xf7\x00S\xf8#\v/ԯ\xf2\xc1S)\x96\x9eZ\xf8rw\xffAő뺟\x19؎7D\xe4r\xfab\xf8\xc1e\xec\xa8B\x92\x16k\xae\xbb&8\x03|e+\xeb\xa8X\xdf\xdb\xc7/c\x03\x82\xd3F4\x12\xf2vF\x90\xe4\x13\xed\xf5Rvɉx\x923\xa4\xca\xf9\x1a\x04\xbc\xe1!\x16\xd9T\xc77\x14J3\v\x8b\\\x9e\xf3E\xbf၉R\xc5=\xc9u\xeeR\xe2\xf3\x86\x87S\xaf\x8eԥ\xf3R\xf5\x13\xf5\xa6\x05\x96\x8a뱬*wWxJIz\xbc\x99\x16\x16\xe6=5?\x19\x91\v\xc5n\x01\xecu\x81\f\xf1'\x17\xe1$\xfb\xda\xc9\xd8\xe0\xcdH\xed\x90m/\xf77\xafԩ\xb6̣E=\xe8kx4\x9e~\xee?$\xd5\xecB\x8f3h\xf7|1\xe8\x1e\x8dg\xda\u007f\v\x92(ԅ\x80Db6P\x1dc\x1b\xe9\xd5o\u007f\x1cG\x0f\xbaլߌ\x12\xd2Q\vbl֜\xdb\xd6xDd^\a\xc7\x1d\x8b6z\xc9\x11)s\x9fa\xda^\x9at\x19Jc\ax\x9d8h\x86\xe7\x1a!\x1d\xff\x95\x1a\xb1\xb8'\xb6\xd2J\x94XA\x15\x18\x02n\x05\x85ǭ,\xa1F\xbb\x9d\x93\xb3\xa18u\xfa\xeaf\"I|.\xb8\xdb\xd3Y(?)\xecT\xd3\a-\xc9\xd6O\xbc\x99\xbd\xde\xc9^\xed2\xa98|s\x82\x9b\xd4^T\x95\x8c\x19\xe6\xe9L|:\x83\xcf8g\xc4CS\xa2\x15\rY\xf6?(\x9c\xb2\xa1\xfc\x13\x1a!\xad+\xe0\x96\xe7Uj\xfaf\xfb\xf4\xa9\xf2\xe8\xb3&\xae\xd2\x01a\xbe\x17\x8aB=\x05\x0e\r\xa88\xf0O\xb24\x9bQF\xbb\x86\xf7\x9dq1\x8ao$*\x9eB\\\xbd\xe1\xe1\xeaz\xe0y \xa7C\xe9Ճ\xbe\x8aIb\xe4\am\xc3g\xb4:\xc0\x15\xbf\xbb*FIp\x92\xedlb\x9c\xb1\x88\x93\xaf\xdaJ\xf7g\xd14Ro\x8f\xef\xf92[\x98\xb1\x83\x81\r<\x1e\x9d60\x84~Y:(\xe1\xc7\xc7\xc51\xdfD\xb1o\xf3\xb0Q{S\xc0\xad>\x8c\xb8:\xea\x18'J\xdda\aI\"\xbdK\xa5(*%\x9e\x153\xed3J\x83\x05'\xea\xc8\u007fzh0\x01z\xe2\xf8\xf4:_\xc9?\xb7d\x13}`OY\xaa\x14[\x05\x9e^ǖ\xc3ŧӢq;\xe3\u16fd\x14i\xaaeB\xd5X\xb3\xa7~\xf0\xdb\xffPG\xe7\xca\x1dVA\xe1١\xcdK\x8f\xf0\xfc\xd8&\xb3\x1d\xdbB\x87C\xdb\xc9e\xb4\xaa\xe8\x81\xc3\xf1Pja\x12_\xba\xe4\xa9&\xbae\x18\xcd\xc18\x9e\xc9R8q\xa1,ѹMP\xb9\xe3\xe1\xb1?\xb5ב\\\xbaV\xda\v\xc7HS\x19b\xd9\x1b~\x9d\x9d\xd0y\xe1\x83;;\xa3c*(E\xe3\x83MEj\x19\xace\xa5\xe2;\xb3\x19\x8d\xe9.\x98ҡ\xb5ƞ\x99\xf60It\xf7\xd2\x04͵\x1a\xd9-\xef\x85\x1a\x9d\x13\xdb<\xe6yG\x8b\xb0EM\x11vbđ\xea\x00\xfc\xc02\xa4\x8f\x04\xc3>\x95\"\xa9(=\xb5_Q4\x0e\x9b\xad\x13\x9fʙD \xb6'\xeeLj\x8f[\x1cf⍐*X|F\xe1\x86\xdf\x0eF\xea\xffЧL\xa5]\xd4\x11E\xf6\xbf\xbe9\xb4\x1e\xf8<)\v\xeaP\x1f3^\xc2#\xbe\x8f\xd6Hy\xac^\xdbOG#\x82\a\xfdd͖2\xef\xe8՝\xa9\x1b\x85c+X\u0093\xb0^\n\xa5\x0e\x91\xfd\x89S/ũ\xfb\xb0u\u007fޘ_\x8f\x88\x8f\x06,d\xd6\x1d\xbfl\x82\xdf\xc8\xf1h-}\xe9Z+\xfc\xf6\xf7\x19\x94\xbc\v\xab\xa5\xdeΫ\xfb\xe7D4\xe1\xbdi\xffo\xe7\xbfY\xc0\xa1\a\x9f\x98\xe5\xfdZ\x0f\x9e\x88\xa5GK\xdd'\xde\xcf\xdd?Fk\x99>\xe9\xf2\v\xea>\xed\x1e\xab\x1e\xf6I\x94\xb4\xd2\x05hQ\x96\xd8\xf84\xc1\xec\u007fܽ\xba\xe2?\xf9\xeb-\xff-\x8d\x8e\u0557[\xc1_\xfe\xba\x80\x84\xc0k\x96\x83\x16\xff\x15\x00\x00\xff\xff\xba\xf0V\x1f\x0e\x1f\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x1c\xcbn#\xb9\xf1\xee\xaf(8\x87I\x00K\xde\xc1^\x02\xddf=^\xc4\xc8dv\xb0\xe3\xf8\x12\xe4@u\x97,F\xddd\x87d\xcbV\x82\xfc{PE\xf6S\xfd`{=\xc1fa\x9el\x8a,\x16\xeb\xcdb\xb1/V\xabՅ(\xe4\x03\x1a+\xb5ڀ($>;T\xf4\x9f]\x1f\xfeh\xd7R_\x1f\xdfoщ\xf7\x17\a\xa9\xd2\rܔ\xd6\xe9\xfcg\xb4\xba4\t~ĝT\xd2I\xad.rt\"\x15Nl.\x00\x84R\xda\t\xea\xb6\xf4/@\xa2\x953:\xcbЬ\x1eQ\xad\x0f\xe5\x16\xb7\xa5\xccR4\xbcB\xb5\xfe\xf1\xbb\xf5\xf7\xeb\xef.\x00\x12\x83<\xfd^\xe6h\x9dȋ\r\xa82\xcb.\x00\x94\xc8q\x036\xd9cZfh\xd7G\xcc\xd0\xe8\xb5\xd4\x17\xb6\xc0\x84V{4\xba,6\xd0\xfc\xe0'\x05L\xfc.\xbe\x86\xf9ܕI\xeb\xfe\xdc\xe9\xfe$\xad㟊\xac4\"k\xadǽV\xaa\xc72\x13\xa6\xe9\xbf\x00(\fZ4G\xfc\xab:(\xfd\xa4~\x94\x98\xa5v\x03;\x91Y\xfa\xd9&\xba\xc0\r|&L\n\x91`z\x01p\x14\x99Ly\x9f\x1e7]\xa0\xfa\xf0\xe5\xee\xe1{\xc2#\x17\xbe\x13 E\x9b\x18Y\xf0\xb8\x1aE\x90\x16\x04<\xf0&\xc1\x04v\x80\xdb\v\a\x06\x19\x17\xe5hDapUa\x99\x826\x01&@\x81F\xeaT&\xf0\x83H\x0ee\xe1\xa7ڽ.\xb3\x14\xb6\b\xa6T\xeb0\xb60\xba@\xe3dEBj-\xa9\xa9\xfbz\x98\xbe\xa3\xad\xf81\x90\x92\x9c\xa0\x05\xb7G\b\xdcƔ\xa9\x97\v\xd0;p{i\x1b\xbc\x99$-\xb0@C\x84\x02\xbd\xfd\a&n\r_\x89\xce\xc6V\xd8&Z\x1d\xd1о\x13\xfd\xa8\xe4\xbfj\xc8\x16\x9c\xe6%3\xe10p\xb4jR94JdĄ\x12\xaf@\xa8\x14rq\x02\x83\xb4\x06\x94\xaa\x05\x8d\x87\xd85\xfcE\x1b\x04\xa9vz\x03{\xe7\n\xbb\xb9\xbe~\x94\xaeғD\xe7y\xa9\xa4;]\xb3\xb4\xcbm鴱\xd7)\x1e1\xbb\xb6\xf2q%L\xb2\x97\x0e\x13W\x1a\xbc\x16\x85\\1\xe2\x8a\xd5d\x9d\xa7\xbf\xab\xb8hߵ0u'\x12\x1b\xeb\x8cT\x8fu7\v\xf1(\xddI\x96\xbdx\xf8i\x1e\xff\x86\xbc\xd4ET\xf9\xf9\xf6\xeb}[t\xa4\xedҜ\xa9ݒ\xa6\x86\xf0D(\xa9vh<\xe3vF\xe7\f\x11UZh\xa9\x1c\xff\x93d\x12U\x97\xe8\xb6\xdc\xe6\xd2\x11\xa7\xffY\xa2uğ5ܰ\xb5 \x99+\x8bT8L\xd7p\xa7\xe0F\xe4\x98\xdd\b\x8bߜ\xecDa\xbb\"\x92\xce\x13\xbem\xe4\xba\x03=\xb5\xea\xee\xca\x18\rr\xa8\xd2\xe1\xaf\x05&\x1dՠYr'\x13V\x00\xd8iӨ\xb8m[\xacq\xbd\xe4\xb5\xc3\xd0n\xef\xa4\x1d\xb91Z\x01>\x13\xa7\x1b}%9yڣ\"-2\xa5\"\f{\x10!\x18\x8fu\xaf\u007f\x90v\xfc\x03\xe6\x05)\xe3$j\xf7a\x10\xa1FTIk'\xe3M\x05\xd6&K\aK\x05z\x18\xbb\xc2\xe8\xa3L\x83=\xe8Qo\x8a\x82\xd4\xf09\xc9\xca\x14\xd3\xdab\x0f\x8c\xe9!~{6\x85\x1d\x9f\x90\x8ahLn\x866\xa0\x9a_\xc9\xe6\x0e\x00\x05\x10\x06\x81\x94B*\x0f\x11$o\x10\xb6\x83\xe4\xa6&\x1d\xe6\x83\x18Np\xc37r\xacb\x9b\xe1\x06\x9c)\xcfiX\xcd\x17ƈ\xd3(\x95\xaa\x80 \x9eH\xf5\x8c`\xaa2\x99 \x91\xa76HL\xa7\xdf\x00\x89\xf6Z\x1f\xe6\xc9\xf2'\x1a\xd5\x18[H8\u0382-\xee\xc5Qjc\xfb\xfe\x19\x9f1)\x1d\x87\x11\x03\xb4q\x90\xca\xdd\x0e\rA*\xf6¢\xadTg\x9cԎ\xae\x01\xa3\xdb\xdf\nK\xa1\x99\x17_CQfX,e\x17\xd0؋\xab\t\xe05w|(\x93\x89-f`1\xc3\xc4i3F\x96y\xa6\xfb\x16g\vG\xe89`\x15\x83\x9f\v^\xaf\xd9\xe0$P {\xff\xb4\x97\xc9\xdeG\x1d$S\f\tR\x8d\x96m\x81(\x8a\xec4\xbeY\x98\x97\x84\xb0д9hڬa\xe8\xc3\x1c6\x11M\x8b\xb2\xa7M\x9b\xb1\xac]:\xd7\"\xf2F\xe6\xcai\xbcH\xa0\xef\xce&\xbf\xb6@\x13\x81%\x9d8\xeev\x80y\xe1NW ]\xd5;\x0fSdY\v\x87\xdf\x04\xa3^\xa2\x0fw\xfd\xb9\xaf\xac\x0f\xaf\xc0\xa5\x1a\x85\xffk&\xb1\xb3\xf9\x1a|\xcd\x02\x06}jϻ\x02\xb9\xab\x19\x94^\xc1Nf\x0e9\xee\x99F\xb1\xe5\xfaf9\xf5Zd\x89\xf3\x9a\xd4r\xe1\x92\xfdm}\xb0\x9a\x1dߣP\u007f\xba\x8f\x95\xab\x93D\xd7\xc9\xcfB\x06>wK\x83\xb9?\xcd߳\x0e4=\x1c\xa9}\xf8\xfc\x11\xd3iBA\xacD\x9em\xe7C\x0f\xe5\xf6\xf2\xe1\x18\x10\xbf\x99\x10P\xd5',\x9f\xa5\xb9\x02\x01\a<\xf9(H( F\tZj\xf4 qN$N\x17\xb1\x898\xe0\x89\x01\x85\fP\xc4\xfcx\xd1\xf0퀧\xb8\x81=R\x12f\xe1|\xeciJ\x1dL\x10N$,!#p>\x8f5\x04\x9c\x8e\xd9$,17U\xab8\xf1\xa2\xed\xd6l\xec$7\x0fxzg=\xc3H;\xf6\xb2\x88\xde0\x19`\xb0\xc8zT\xe5\xf7\x1eD&\xd3z)\xaf\x0fwj*\xea\xee\xb6\xcf\xdaݩ+\xb8}\x96\x96\xd0S)|\xd4h?k\xc7=ߌ\xb0\x1e\xfd\x17\x91\xd5Oe\xd5S\xde\xcc\x13=\xdai\xc3(\xa1\xf7\xedΟ0kVI\vw\x8a\xceJ\x81.\x9c\xfce\x98\xf1b\xc9(\xe5\xa5\xe5\xfc\xa0\xd2jŎv=\xb0V4\xcc\xc0\x1em:\xdci\xa3\xd7Z6\x1a*\x1d\xe8W\xf0\xb4\xd7\xd6{\xe4\x9d\xc4l8\xf1\xd5m\xd2\xc2\xe5\x01O\x97Wgv\xe9\xf2N]\xfa\x10\xa1\xaf\xf5\x11`\xeb\x88C\xab\xec\x04\x97<\xfb\xf2\x97\x85S\xd1\xd2\x199\x90oI\xe3\x03q:\xc9V\xd1\x04M\xad\xaf\xe4(\x84\x9e\xc6>R6\vm\xdd\x02\x84\xbeh\xeb|F\xb4\x13\xf0.˷\x81\x97\xab\x90g\x03\xb1sh\xc0:m\xaa\v02\x92\xbd\xb41q\xd1\xce\x1d8\x88\xb1u\xf6\u0383\xa5\xc3\xdce\xa3\xdf\xde\xfe^\xfa\x9b1\xfa{\x0eb\xc2\x01\fC.\x8cN\xd0\xda9\xb1\x89\xb2\xf03\x89\xcd:\xa9)\xfca\x89o\x9cf\x85u.\xd9Z\xb5%\xa10\x91s\xf1q\xe2\xf6\xb9\x95\x97%\xf3A\xffϋ\xecr쀵>υ\x8ar`g\x88\xde\xf8\xb9\x95\x8a\x05P\xfe\x88b\x1eK6\x17K\"\xd7 |\xbf\x9e` \x97\xea\x8e\x17\x81\xf7\xdf$|\xa8\x8d.\xbe\xec\xf8pS\xcdnXPw\f_\x1d\x8e\xb5B\xf3}\x85\xc1\x0e'ϳ\xfa\x8b\xc2f\xa5];\xf5A\x90\v\x9d\xbe\xb3\xb0\x93ƺ\x06\xd9h\x98\xd2B9kA\x9a\xb6\xfc,\xa7n\x8dy\xe1Q\xee'?\xb7\x95\x8c\xdb\xeb\xa7\xfa\x9a\x9b\t\xb9 \xeaދ#\x82܁t\x80*ѥ\xe2\xa4\x11\x19\x03^ij#^\x90!\xd6\xef5\rU\x99\xc7\x12bŒ(\xd5L~\xa9=\xe1G!\xb3o\xc5F's\xd4\xe5\x8ccnZ\xf7\x96\xde\xcf\xed\xd4/\xe4\xe2Y\xe6e\x0e\"'FD\x93\x9c\xa2\r\x99cW\x06\xe0IH\xc7\x1e\x89 \xb3{r:\x1ad\xa2\xf3\"C\x87\xb0ŝ6\xac\xefV\xa6X\xbb\xfe \x17z\xfcޱ\xdf\x04\xec\x84\xccJ\x13mu\x17rc\xd9\t)\x18\x9e\xd7=\xf8Ģ\xb0b\xf2E\xa5\xa3\xa3C\xda9OP\x98%\x01\xed\x17\x83\xaf\x1d>\x16F\x92,\xea\xb9\br\x06\"Ǘ\xdd\b2\x88\xa8P\xa7\xb1\x10r\x06&c\xf1\x16B\xbe\x85\x90qp\xdfBȷ\x10r\xbe\xbd\x85\x90o!d̄\xb7\x10\xf2-\x84\\\x8e\xc2\xff>\x84\x9c\xc7lŹ\xcfџ#\xb0\x89*!\x98Fvr\x95P\rs\x93\x95֡\x89\xaf\xb9\xbd\x1b\x9eײ\x9fO{t{4\x90\xf8!+~\xae2,\x1bM\xb9E\xe3\xb2\xea\"\\R\xb6JQ|\x15\xfblt\x1cY\\\xbb\xd5:Cq\xaelq\xa5\\s\x05\\\xdd\x1a\xe4\xbax\xaa*B\x1e\xb6\x1aa\xe9\xc0-\xff\x0e\xa2]\rԭ\xc3\xe2ȼ\xc2\xf6WT\x9f\x1cUb5SX5]\u00ad\xab5F\xa8\xd8I\xc0w\xc9g:eĿB\xea\xcd\xd6>\x8dW<\x85\x1b9t\xe2\xf8~\xdd\xfd\xc5\xe9P\xff\x04O\xd2\xed\a7\xc5/3踨\x1eۅѕ,\x86\x97O}\xaa\x826\xa0d6\\\xd3@\x04\xaf\xe6w\xc8\r?\x15\xfeP\xfa\"\xfd\x9d;&\xc5\xd6H\xbd\xb82\xaa[\xf74j\xe0\x97_\xe0-)+\x8f\xaf}\x9a+UZR\xf1Ԯf\x9a\x00\x19[\xe7\x14w❭izA%St]\xe5\xab\\W\xc6\xd5*}\x8b\n\xa5\x05uI\xddz\xa3\x19\xb8˪\x91\"\xc9\x14Sy\xb4\xb8\xde(\xd4\xf6\xcc\xec'\xa2\xcah\xb4zh\x06\xf4@\x1d\xd3|\xcd\xd0\x1c\xf9;\xa8\xbcJ\xa5\xd0\v\xea\x83^\xb7\x8e\xf8\xb5\xa2\xee\xa9j\x9f\x88\x1a\x9f\x88\xb8|\x0eӈ*\x9ee\xb5;\x114|a\x9dN]\x853\xba\xf6\xd2\xea\x9cn\xed\xcd(ؘ\x9a\x9c\x91\x8a\x9bQ\x98\x93\x958\xb1u6\xa3\xd0g\xdd\xf7\x8c\xe4L\xfel\x95(\xec^\xbb\a\x9d\x95yD\xcc\xfc\xb5;~\xe0\xe8E\x11\x9b8 $\x99.\xd3\x1a\xfe\xf0\xf6\xf8=\xfc\t\xbe<\xb0s\xe1\x87~I\xf3\x042\xb8\x8f*\x94뿐\x1c~\xb3\v\xbf\xfc(f\x9d6\xe2\x11?\xe9\xa4\xf5Q\x83)\x9at\xc7wެ\a\xe6WɖP\x954\x1c\xb6\x86\x1d\xf5\xc159V\x1f\x05\xb7Ϋ\x84\xe9\xb0\\Lj\xaes\xd9\xec\xa6\xee\xef?\xf9\x8d8\x99\xe3\xfac\xe9\x8f\xc1\xabB\x18\x8bD\xdbj\x83~\xd2v\xcc@\xec\xf5\x13d:\xec\xfe\x87>\xfe\x069\x9b\xcb\xe7\xedŻ8\xb2\bV\x02Y\x91k^\x84\x1f\x86\xe7\xb5\"\xef\x16\xd3\xf8\xe87&\xbbc\x90\x84\xb5:\x91\x82߄J\x17\x9eq|\x8b\a\xbd\xe3\x0eaD\xe9\x87\xfc\xd8j\xe8Y\xf9\xaa~\xe3~1\x03\xd4:\xe1J;\xff\x91\x00\x1e\x06\x89(\\iB\x924)\r?\xed%\x10\xe8_\xc0.\xffL@&\xac\xf3\x825\xf9\x1a\xffS=\xac\x89ҭ\xf3\xd9\xd6J\xf3\xe0IX~\x87\xefs\xad\xd2v?\xb0\xd2n#/\xf1w\xda\xe4\xc2m \x15\x0eW\x04\xbb\xf7\xfb\xa4e\x1ae6?}\x9e\xdc\xdd\x17\x1aQ\xdf\xe8\x04\xb2\xf2\xb4\xea\xc1\xf4\xc8N\x86R\xf6+\xf8\x8cOg}\xb7\x8a\x10\xef\xe7\xd2|V\x1eӇ\xfa\x1b0\xb1\x9bj\xbe\x1a× g\n\xd0\xd5\xd9\xde\xe0^\xa6\x86N\xfc\r<\u007f\xe1a\xe1\xf7\xf2\xdc\xd0\xf2\xf1+\xa1\x9d\xfc\xa1\xf7ۈ\x16Nh\xe0\xb0\xf6\r(I\xaf\xab\xf9N\xd0\xfb\xe6?^z\x15\xbe\vt\xf4w\x87\xfc!\x9e\xb4%+\xc13\x85\x9eF\xf3D\x92`\xe1B&\xb0\xfd\x81\xa0\xcbK\xfe\xa7\xfa\xfe\x0f\xff\x9bh\xe5c@\xbb\x81\xbf\xfd\xfd\x02\x82\x17y\xa8\xf0\xa0\xce\xff\x06\x00\x00\xff\xffso\x10\x1eSI\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VMo\xe36\x10\xbd\xebW\f\xb6\x87\xbdT\xf2\x06{)t+\xd2\x16\b\xda\x06A\xbcͥ\xe8\x81&G\xf64\x14\xa9r\x86N\xdd__\x90\x94b[\x967\xbb\x87\xd5M\xa3\xf9x|\xf3fĪ\xae\xebJ\r\xf4\x84\x81ɻ\x16\xd4@\xf8\xaf\xa0Ko\xdc<\xff\xc0\r\xf9\xd5\xfef\x83\xa2n\xaagr\xa6\x85\xdb\xc8\xe2\xfbGd\x1f\x83Ɵ\xb0#GB\xdeU=\x8a2JT[\x01(缨d\xe6\xf4\n\xa0\xbd\x93\xe0\xad\xc5Po\xd15\xcfq\x83\x9bH\xd6`\xc8\x15\xa6\xfa\xfb\x0f\xcd\xc7\xe6C\x05\xa0\x03\xe6\xf0O\xd4#\x8b\xea\x87\x16\\\xb4\xb6\x02p\xaa\xc7\x16\x18C\n\x12%\x91\x03\xfe\x13\x91\x85\x9b=Z\f\xbe!_\xf1\x80:\x15\xde\x06\x1f\x87\x16\x8e\x1fJ\xfc\b\xaa\x1ch\x9dS\xads\xaaǒ*\u007f\xb5\xc4\xf2\xeb5\x8f\xdfh\xf4\x1al\f\xca.\x03\xca\x0eLn\x1b\xad\n\x8b.\x15\xc0\x100\u007f\xf8\xc3=;\xff\xe2~!\xb4\x86[\xe8\x94e\xac\x00X\xfb\x01[\xb8O\xa8\a\xa5\xd1T\x00{e\xc9dz\xca9\xfc\x80\xeeLJ\xbb\xa7\x8fk\xbd\xc3^\x15#\x80Aց\x86\xec\xb7t\x06 \x06\x05#\x12\x10\x0fJkd\x06\x1dC@'P\x90\x02\xb9·>\x97\x1b\x13\x03\xa8\x8d\x8f\x02\xb2Cx\xcaԎgkF\x87!\xf8\x01\x83\xd0Dt\x0e9\xca\xec\xd56\xc3\xf8>\x1d\xa2\xf8\x80I\xc2B\xce5Fy\xa0\x01\xce\a\x04߁\xec\x88!`f\xcf\xc99\xba\xccI\aʁ\xdf\xfc\x8dZ\x9a\xf1\xf4\f\xbc\xf3њ\xa4\xc6=\x06\x81\x80\xdao\x1d\xfd\xf7\x9a\x99\x13\r\xa9\xa4U2\xe9`z\xc8\t\x06\xa7l\xa2?\xe2\xf7\xa0\x9c\x81^\x1d `\xaa\x01ѝd\xcb.\xdc\xc0\xef>`&\xb0\x85\x9d\xc8\xc0\xedj\xb5%\x99\x06K\xfb\xbe\x8f\x8e\xe4\xb0\xca\xe3A\x9b(>\xf0\xca\xe0\x1e\xed\x8ai[\xab\xa0w$\xa8%\x06\\\xa9\x81\xea\f\xdc\xe5\xb9jz\xf3]\x18\xa7\x90ߟ \x95C\x12\fK \xb7}5g\xa9_\xe5=ɼ\xa8\xa1\x84\x15\xfcGz\x93)\xb1\xf2\xf8\xf3\xfa\x13LEs\v\xce9\xcfl\x1f\xc3\xf8H|\"\x8a\\\x87\xa14\xae\v\xbe\xcf\x19љ\xc1\x93+ZҖН\x93\xceqӓ\xf0\xa4\xd2ԟ\x06n\xf3z\x81\rB\x1c\x8c\x124\r\xdc9\xb8U=\xda[\xc5\xf8\xcdiO\fs\x9d(}\x9b\xf8ӭx\xeeX\xd8z5O+k\xb1C\vӻ\x1eP\xa7\x9e%\xe2R,u\xa4\xf3\x18@\xe7\x03\xa8\xa5\x90\xe6M\f\xd9\xfb\xabP\x8c;\xa2\xe0\x98m\x8e4\x83o\xe1XZ\x15پS\x8c\xe7\xa6\x19\x9a\x87\xe41\xafl\xa9C}\xd0\x16K\x82\xb2)\xf0-\x10\xe9A\x17\xfby\xbd\x1a\xee\xf1\xe5\xc2\xf6\x10|ړy\x15\x9f>\x8b\xfd\x87\xf2\x8fؒ\xe3ϟ\xa6\xf8\xe4\xbf\xce\xe9\xca=Y\xb5c\x1a\bѹ4\x91\xde%\xf3,)\x9co\xe4\xd9W\x12\xec/p,\"\xb9s\x9d\xcf\u007fm\x95J*)s\x82cS\xc7\x1a\x05\xd1E\xbak=-\xcf|\x15}\x01\x81\xe5\xc9\u007f\xfe\xaf\x0fL\xab\x83\x02.Ԭ3\x96\x05s\xaata^\x9c\x98\x11Y\xb4Vm,\xb6 !\xce#K\x9c\nA\x1d\xceU1\xc9\xe8x\xc7\xf9\xac@.ܓ\xf6_v\xe8\xae)\x1c^\x14/\xf5\xa6\xa4\x81\xcd\xe1Z\xe0\xed\xebem>$E\x96-\xa4\xad[\v]\xb0\xf4\x05D,t\xa9Hu\xe1vpA\xc2\xfa\xd4s\x9a\xfd3\xc1O\x97\x859\xf2+\xc5\x17\x9a:3\x1d\xef\xa67Ƿ,\xecz\xbc\x8b\xe6\x0f\xe3)\xcc\xc9\xc9Y|Pۉ\x8b\xe3nM\u05ecA\xd0\xdc\xcfo\xa2\xefޝ])\xf3\xab\xf6\xceP\xb9Hß\u007fU%+\x9a\xa7\tG2\xfe\x1f\x00\x00\xff\xff\xee@m\x0f\xc7\v\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4V\xc1\x8e\xdc6\f\xbd\xfb+\x88\xf4\x90K\xed\xc9\"\x97·`\xdb\x02A\xd3`\x91M\xe6R\xf4\xa0\x91\xe8\x19veI\x15)\xa7ۯ/$\xcb;\xe3ٙ\xa4E\x11\xdfDS\xe4\xe3\xe3#\xa1\xa6m\xdbF\x05\xdabd\xf2\xae\a\x15\b\xff\x12t\xf9\xc4\xdd\xc3\x0fܑ\xdfL7;\x14u\xd3<\x903=\xdc&\x16?~@\xf6)j\xfc\x11\ar$\xe4]3\xa2(\xa3D\xf5\r\x80r\u038b\xcaf\xceG\x00\xed\x9dDo-\xc6v\x8f\xae{H;\xdc%\xb2\x06cɰ\xe4\x9f^u\xaf\xbbW\r\x80\x8eX\xae\u007f\xa4\x11Y\xd4\x18zp\xc9\xda\x06\xc0\xa9\x11{\x98\xbcM#\xb2S\x81\x0f^\xac\xd7s\xb2nB\x8b\xd1w\xe4\x1b\x0e\xa8s\xee}\xf4)\xf4p\xfc1\x87\xa8\xb8暶%\xda}\x8d\xf6\xaeF+\x0e\x96X~\xf9\x82\xd3;b)\x8e\xc1\xa6\xa8\xecUdŇ\xc9\xed\x93U\xf1\x9aW\x03\x10\"2\xc6\t?\xb9\a\xe7?\xbb\x9f\t\xad\xe1\x1e\x06e\x19\x1b\x00\xd6>`\x0f\xefs\x05Ai4\r\xc0\xa4,\x99r\u007f\xae\xc9\ato\xee\xden_\xdf\xeb\x03\x8ej6\x02\x18d\x1d)\x14\xbf+\xc5\x001(X\xd0\xc0\xe7\x03F\x84ma\x0eX|D\xae\xc0kH\x80\xa5\x02\xee\xaa)D\x1f0\n-\x04\xe7\xefDaO\xb63_\x9b\xf1\x1f\xe9ͦ\xccʇ\x9f\xee?\u0092\xb4\xb4`\xcdya\xfbx\x8d\x8f\xc4g\xa2\xc8\r\x18\xe7\xc6\rя%\":\x13<9)\am\tݚtN\xbb\x91$w\xfaτ,\xb9?\x1dܖ\xcd\x02;\x84\x14\x8c\x124\x1d\xbcup\xabF\xb4\xb7\x8a\xf1\x9bӞ\x19\xe66S\xfau\xe2O\x17\xe2\xdaqf\xeb8DuU]\xec\xd0\xe5I\xbd\x0f\xa8W\x83\x92c\xd0@ur\a\x1fA\xadجS|9Zw\xe2zi\x80a\xde\xe0\x03\xed\xd76\x00eL\xd9\xfe\xca\xde]\xb9w\x95\x9e\v\xb5ޖ\x1cY\x8e\xb9\x80\x10\xfdD\x06c\xbb\xd4V1\xa4X\x8b,\xbb\xb1k.\xe5:c\xb8\x16V\u009d\xc3[!\xb8\xabN\x19C\xa6u\xb94\xef\x1d\xac\xeb\xaf,C\xb5\xc7˹\x9fՙ\x15L\x11WS\xd8>\x85\xfe\xaa:DI\xe2\xff\xaa\x8fr\xa9z\xee\xaaFt\x8a\x11\x9dԈ\xe0\x87\x15|\xf5\xff5\x12\x0e\x8a\xf1\x8b\xfc^\x8e}\x97\xef-\x94[\x1aP?Z\x9c\xa3\x95m\xfeLP\xff\x1ai\xfeХ\xf1\x1cT\vo&EV\xed,>\xfb\xf3ɩ+\xff\xae\xf4\xf7B\xdb\xceL\xc7\a\xce\xcd\xf1T\xc8k\x97\a\xcd\xcd\xfcB\xc8K\xd3\xf4 1\xcdɫҪ\xe5\xa8\x05\xa55\x06A\xf3\xfe\xfc-\xf3\xe2\xc5\xea9R\x8eڻyL\xb9\x87\xdf~o\xe6\xa8h\xb6\v\x8el\xfc'\x00\x00\xff\xff\xbcn\x89\xa9\f\n\x00\x00"), } var CRDs = crds() diff --git a/pkg/generated/crds/manifests/velero.io_backups.yaml b/pkg/generated/crds/manifests/velero.io_backups.yaml index b527f7513..45d8434fe 100644 --- a/pkg/generated/crds/manifests/velero.io_backups.yaml +++ b/pkg/generated/crds/manifests/velero.io_backups.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: backups.velero.io spec: diff --git a/pkg/generated/crds/manifests/velero.io_schedules.yaml b/pkg/generated/crds/manifests/velero.io_schedules.yaml index e612fc11d..4ba21fc9a 100644 --- a/pkg/generated/crds/manifests/velero.io_schedules.yaml +++ b/pkg/generated/crds/manifests/velero.io_schedules.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.4 + controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: schedules.velero.io spec: diff --git a/pkg/generated/informers/externalversions/velero/v1/backup.go b/pkg/generated/informers/externalversions/velero/v1/backup.go index 9be8bdcd5..f874a2090 100644 --- a/pkg/generated/informers/externalversions/velero/v1/backup.go +++ b/pkg/generated/informers/externalversions/velero/v1/backup.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredBackupInformer(client versioned.Interface, namespace string, res if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().Backups(namespace).List(options) + return client.VeleroV1().Backups(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().Backups(namespace).Watch(options) + return client.VeleroV1().Backups(namespace).Watch(context.TODO(), options) }, }, &velerov1.Backup{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/backupstoragelocation.go b/pkg/generated/informers/externalversions/velero/v1/backupstoragelocation.go index 7e356339b..4c732c8e6 100644 --- a/pkg/generated/informers/externalversions/velero/v1/backupstoragelocation.go +++ b/pkg/generated/informers/externalversions/velero/v1/backupstoragelocation.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredBackupStorageLocationInformer(client versioned.Interface, namesp if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().BackupStorageLocations(namespace).List(options) + return client.VeleroV1().BackupStorageLocations(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().BackupStorageLocations(namespace).Watch(options) + return client.VeleroV1().BackupStorageLocations(namespace).Watch(context.TODO(), options) }, }, &velerov1.BackupStorageLocation{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/deletebackuprequest.go b/pkg/generated/informers/externalversions/velero/v1/deletebackuprequest.go index 47e380927..7019d3bff 100644 --- a/pkg/generated/informers/externalversions/velero/v1/deletebackuprequest.go +++ b/pkg/generated/informers/externalversions/velero/v1/deletebackuprequest.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredDeleteBackupRequestInformer(client versioned.Interface, namespac if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().DeleteBackupRequests(namespace).List(options) + return client.VeleroV1().DeleteBackupRequests(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().DeleteBackupRequests(namespace).Watch(options) + return client.VeleroV1().DeleteBackupRequests(namespace).Watch(context.TODO(), options) }, }, &velerov1.DeleteBackupRequest{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/downloadrequest.go b/pkg/generated/informers/externalversions/velero/v1/downloadrequest.go index 8ee7ab266..23d91e399 100644 --- a/pkg/generated/informers/externalversions/velero/v1/downloadrequest.go +++ b/pkg/generated/informers/externalversions/velero/v1/downloadrequest.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredDownloadRequestInformer(client versioned.Interface, namespace st if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().DownloadRequests(namespace).List(options) + return client.VeleroV1().DownloadRequests(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().DownloadRequests(namespace).Watch(options) + return client.VeleroV1().DownloadRequests(namespace).Watch(context.TODO(), options) }, }, &velerov1.DownloadRequest{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/podvolumebackup.go b/pkg/generated/informers/externalversions/velero/v1/podvolumebackup.go index b302042cc..d2835b2ea 100644 --- a/pkg/generated/informers/externalversions/velero/v1/podvolumebackup.go +++ b/pkg/generated/informers/externalversions/velero/v1/podvolumebackup.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredPodVolumeBackupInformer(client versioned.Interface, namespace st if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().PodVolumeBackups(namespace).List(options) + return client.VeleroV1().PodVolumeBackups(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().PodVolumeBackups(namespace).Watch(options) + return client.VeleroV1().PodVolumeBackups(namespace).Watch(context.TODO(), options) }, }, &velerov1.PodVolumeBackup{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/podvolumerestore.go b/pkg/generated/informers/externalversions/velero/v1/podvolumerestore.go index b3ec646fb..eccad43b2 100644 --- a/pkg/generated/informers/externalversions/velero/v1/podvolumerestore.go +++ b/pkg/generated/informers/externalversions/velero/v1/podvolumerestore.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredPodVolumeRestoreInformer(client versioned.Interface, namespace s if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().PodVolumeRestores(namespace).List(options) + return client.VeleroV1().PodVolumeRestores(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().PodVolumeRestores(namespace).Watch(options) + return client.VeleroV1().PodVolumeRestores(namespace).Watch(context.TODO(), options) }, }, &velerov1.PodVolumeRestore{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/resticrepository.go b/pkg/generated/informers/externalversions/velero/v1/resticrepository.go index c6b78a509..f92565554 100644 --- a/pkg/generated/informers/externalversions/velero/v1/resticrepository.go +++ b/pkg/generated/informers/externalversions/velero/v1/resticrepository.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredResticRepositoryInformer(client versioned.Interface, namespace s if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().ResticRepositories(namespace).List(options) + return client.VeleroV1().ResticRepositories(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().ResticRepositories(namespace).Watch(options) + return client.VeleroV1().ResticRepositories(namespace).Watch(context.TODO(), options) }, }, &velerov1.ResticRepository{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/restore.go b/pkg/generated/informers/externalversions/velero/v1/restore.go index 1b438e6ab..691d1b7e8 100644 --- a/pkg/generated/informers/externalversions/velero/v1/restore.go +++ b/pkg/generated/informers/externalversions/velero/v1/restore.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredRestoreInformer(client versioned.Interface, namespace string, re if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().Restores(namespace).List(options) + return client.VeleroV1().Restores(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().Restores(namespace).Watch(options) + return client.VeleroV1().Restores(namespace).Watch(context.TODO(), options) }, }, &velerov1.Restore{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/schedule.go b/pkg/generated/informers/externalversions/velero/v1/schedule.go index 431d659af..31114d809 100644 --- a/pkg/generated/informers/externalversions/velero/v1/schedule.go +++ b/pkg/generated/informers/externalversions/velero/v1/schedule.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredScheduleInformer(client versioned.Interface, namespace string, r if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().Schedules(namespace).List(options) + return client.VeleroV1().Schedules(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().Schedules(namespace).Watch(options) + return client.VeleroV1().Schedules(namespace).Watch(context.TODO(), options) }, }, &velerov1.Schedule{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/serverstatusrequest.go b/pkg/generated/informers/externalversions/velero/v1/serverstatusrequest.go index c9767d97b..53290d408 100644 --- a/pkg/generated/informers/externalversions/velero/v1/serverstatusrequest.go +++ b/pkg/generated/informers/externalversions/velero/v1/serverstatusrequest.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredServerStatusRequestInformer(client versioned.Interface, namespac if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().ServerStatusRequests(namespace).List(options) + return client.VeleroV1().ServerStatusRequests(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().ServerStatusRequests(namespace).Watch(options) + return client.VeleroV1().ServerStatusRequests(namespace).Watch(context.TODO(), options) }, }, &velerov1.ServerStatusRequest{}, diff --git a/pkg/generated/informers/externalversions/velero/v1/volumesnapshotlocation.go b/pkg/generated/informers/externalversions/velero/v1/volumesnapshotlocation.go index 7aa424c3c..3b6c1eca1 100644 --- a/pkg/generated/informers/externalversions/velero/v1/volumesnapshotlocation.go +++ b/pkg/generated/informers/externalversions/velero/v1/volumesnapshotlocation.go @@ -19,6 +19,7 @@ limitations under the License. package v1 import ( + "context" time "time" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -61,13 +62,13 @@ func NewFilteredVolumeSnapshotLocationInformer(client versioned.Interface, names if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().VolumeSnapshotLocations(namespace).List(options) + return client.VeleroV1().VolumeSnapshotLocations(namespace).List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.VeleroV1().VolumeSnapshotLocations(namespace).Watch(options) + return client.VeleroV1().VolumeSnapshotLocations(namespace).Watch(context.TODO(), options) }, }, &velerov1.VolumeSnapshotLocation{}, diff --git a/pkg/restic/backupper.go b/pkg/restic/backupper.go index 432b414e0..03e64f84c 100644 --- a/pkg/restic/backupper.go +++ b/pkg/restic/backupper.go @@ -138,7 +138,7 @@ func (b *backupper) BackupPodVolumes(backup *velerov1api.Backup, pod *corev1api. var pvc *corev1api.PersistentVolumeClaim if volume.PersistentVolumeClaim != nil { - pvc, err = b.pvcClient.PersistentVolumeClaims(pod.Namespace).Get(volume.PersistentVolumeClaim.ClaimName, metav1.GetOptions{}) + pvc, err = b.pvcClient.PersistentVolumeClaims(pod.Namespace).Get(context.TODO(), volume.PersistentVolumeClaim.ClaimName, metav1.GetOptions{}) if err != nil { errs = append(errs, errors.Wrap(err, "error getting persistent volume claim for volume")) continue @@ -158,7 +158,7 @@ func (b *backupper) BackupPodVolumes(backup *velerov1api.Backup, pod *corev1api. } volumeBackup := newPodVolumeBackup(backup, pod, volume, repo.Spec.ResticIdentifier, pvc) - if volumeBackup, err = b.repoManager.veleroClient.VeleroV1().PodVolumeBackups(volumeBackup.Namespace).Create(volumeBackup); err != nil { + if volumeBackup, err = b.repoManager.veleroClient.VeleroV1().PodVolumeBackups(volumeBackup.Namespace).Create(context.TODO(), volumeBackup, metav1.CreateOptions{}); err != nil { errs = append(errs, err) continue } @@ -190,11 +190,11 @@ ForEachVolume: } type pvcGetter interface { - Get(name string, opts metav1.GetOptions) (*corev1api.PersistentVolumeClaim, error) + Get(ctx context.Context, name string, opts metav1.GetOptions) (*corev1api.PersistentVolumeClaim, error) } type pvGetter interface { - Get(name string, opts metav1.GetOptions) (*corev1api.PersistentVolume, error) + Get(ctx context.Context, name string, opts metav1.GetOptions) (*corev1api.PersistentVolume, error) } // isHostPathVolume returns true if the volume is either a hostPath pod volume or a persistent @@ -208,7 +208,7 @@ func isHostPathVolume(volume *corev1api.Volume, pvc *corev1api.PersistentVolumeC return false, nil } - pv, err := pvGetter.Get(pvc.Spec.VolumeName, metav1.GetOptions{}) + pv, err := pvGetter.Get(context.TODO(), pvc.Spec.VolumeName, metav1.GetOptions{}) if err != nil { return false, errors.WithStack(err) } diff --git a/pkg/restic/backupper_test.go b/pkg/restic/backupper_test.go index 8b1e03458..8969f6efa 100644 --- a/pkg/restic/backupper_test.go +++ b/pkg/restic/backupper_test.go @@ -17,6 +17,7 @@ limitations under the License. package restic import ( + "context" "testing" "github.com/pkg/errors" @@ -131,7 +132,7 @@ type fakePVGetter struct { pv *corev1api.PersistentVolume } -func (g *fakePVGetter) Get(name string, opts metav1.GetOptions) (*corev1api.PersistentVolume, error) { +func (g *fakePVGetter) Get(ctx context.Context, name string, opts metav1.GetOptions) (*corev1api.PersistentVolume, error) { if g.pv != nil { return g.pv, nil } diff --git a/pkg/restic/repository_ensurer.go b/pkg/restic/repository_ensurer.go index f0e503c80..d80dcb6eb 100644 --- a/pkg/restic/repository_ensurer.go +++ b/pkg/restic/repository_ensurer.go @@ -170,7 +170,7 @@ func (r *repositoryEnsurer) EnsureRepo(ctx context.Context, namespace, volumeNam close(repoChan) }() - if _, err := r.repoClient.ResticRepositories(namespace).Create(repo); err != nil { + if _, err := r.repoClient.ResticRepositories(namespace).Create(context.TODO(), repo, metav1.CreateOptions{}); err != nil { return nil, errors.Wrapf(err, "unable to create restic repository resource") } diff --git a/pkg/restic/repository_keys.go b/pkg/restic/repository_keys.go index e6b302f31..5d9527ccd 100644 --- a/pkg/restic/repository_keys.go +++ b/pkg/restic/repository_keys.go @@ -17,6 +17,8 @@ limitations under the License. package restic import ( + "context" + "github.com/pkg/errors" corev1api "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -33,7 +35,7 @@ const ( ) func EnsureCommonRepositoryKey(secretClient corev1client.SecretsGetter, namespace string) error { - _, err := secretClient.Secrets(namespace).Get(CredentialsSecretName, metav1.GetOptions{}) + _, err := secretClient.Secrets(namespace).Get(context.TODO(), CredentialsSecretName, metav1.GetOptions{}) if err != nil && !apierrors.IsNotFound(err) { return errors.WithStack(err) } @@ -54,7 +56,7 @@ func EnsureCommonRepositoryKey(secretClient corev1client.SecretsGetter, namespac }, } - if _, err = secretClient.Secrets(namespace).Create(secret); err != nil { + if _, err = secretClient.Secrets(namespace).Create(context.TODO(), secret, metav1.CreateOptions{}); err != nil { return errors.Wrapf(err, "error creating %s secret", CredentialsSecretName) } @@ -74,7 +76,7 @@ func NewClientSecretGetter(client corev1client.SecretsGetter) SecretGetter { } func (c *clientSecretGetter) GetSecret(namespace, name string) (*corev1api.Secret, error) { - secret, err := c.client.Secrets(namespace).Get(name, metav1.GetOptions{}) + secret, err := c.client.Secrets(namespace).Get(context.TODO(), name, metav1.GetOptions{}) if err != nil { return nil, errors.WithStack(err) } diff --git a/pkg/restic/restorer.go b/pkg/restic/restorer.go index ff403d9f4..a17cfeea2 100644 --- a/pkg/restic/restorer.go +++ b/pkg/restic/restorer.go @@ -121,7 +121,7 @@ func (r *restorer) RestorePodVolumes(data RestoreData) []error { for volume, snapshot := range volumesToRestore { volumeRestore := newPodVolumeRestore(data.Restore, data.Pod, data.BackupLocation, volume, snapshot, repo.Spec.ResticIdentifier) - if err := errorOnly(r.repoManager.veleroClient.VeleroV1().PodVolumeRestores(volumeRestore.Namespace).Create(volumeRestore)); err != nil { + if err := errorOnly(r.repoManager.veleroClient.VeleroV1().PodVolumeRestores(volumeRestore.Namespace).Create(context.TODO(), volumeRestore, metav1.CreateOptions{})); err != nil { errs = append(errs, errors.WithStack(err)) continue } diff --git a/pkg/restore/change_pvc_node_selector.go b/pkg/restore/change_pvc_node_selector.go index cbc7f8936..0b1db0478 100644 --- a/pkg/restore/change_pvc_node_selector.go +++ b/pkg/restore/change_pvc_node_selector.go @@ -17,6 +17,8 @@ limitations under the License. package restore import ( + "context" + "github.com/pkg/errors" "github.com/sirupsen/logrus" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -144,7 +146,7 @@ func getNewNodeFromConfigMap(client corev1client.ConfigMapInterface, node string // isNodeExist check if node resource exist or not func isNodeExist(nodeClient corev1client.NodeInterface, name string) (bool, error) { - _, err := nodeClient.Get(name, metav1.GetOptions{}) + _, err := nodeClient.Get(context.TODO(), name, metav1.GetOptions{}) if err != nil { if k8serrors.IsNotFound(err) { return false, nil diff --git a/pkg/restore/change_pvc_node_selector_test.go b/pkg/restore/change_pvc_node_selector_test.go index cb8d9e625..c97e9b410 100644 --- a/pkg/restore/change_pvc_node_selector_test.go +++ b/pkg/restore/change_pvc_node_selector_test.go @@ -17,6 +17,7 @@ limitations under the License. package restore import ( + "context" "fmt" "testing" @@ -24,6 +25,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" corev1api "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes/fake" @@ -133,12 +135,12 @@ func TestChangePVCNodeSelectorActionExecute(t *testing.T) { // set up test data if tc.configMap != nil { - _, err := clientset.CoreV1().ConfigMaps(tc.configMap.Namespace).Create(tc.configMap) + _, err := clientset.CoreV1().ConfigMaps(tc.configMap.Namespace).Create(context.TODO(), tc.configMap, metav1.CreateOptions{}) require.NoError(t, err) } if tc.node != nil { - _, err := clientset.CoreV1().Nodes().Create(tc.node) + _, err := clientset.CoreV1().Nodes().Create(context.TODO(), tc.node, metav1.CreateOptions{}) require.NoError(t, err) } unstructuredMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(tc.pvc) diff --git a/pkg/restore/change_storageclass_action.go b/pkg/restore/change_storageclass_action.go index 1589c7462..effa83dbc 100644 --- a/pkg/restore/change_storageclass_action.go +++ b/pkg/restore/change_storageclass_action.go @@ -17,6 +17,8 @@ limitations under the License. package restore import ( + "context" + "github.com/pkg/errors" "github.com/sirupsen/logrus" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -103,7 +105,7 @@ func (a *ChangeStorageClassAction) Execute(input *velero.RestoreItemActionExecut } // validate that new storage class exists - if _, err := a.storageClassClient.Get(newStorageClass, metav1.GetOptions{}); err != nil { + if _, err := a.storageClassClient.Get(context.TODO(), newStorageClass, metav1.GetOptions{}); err != nil { return nil, errors.Wrapf(err, "error getting storage class %s from API", newStorageClass) } diff --git a/pkg/restore/change_storageclass_action_test.go b/pkg/restore/change_storageclass_action_test.go index 815b4dc11..9e6005851 100644 --- a/pkg/restore/change_storageclass_action_test.go +++ b/pkg/restore/change_storageclass_action_test.go @@ -17,6 +17,7 @@ limitations under the License. package restore import ( + "context" "testing" "github.com/pkg/errors" @@ -25,6 +26,7 @@ import ( "github.com/stretchr/testify/require" corev1api "k8s.io/api/core/v1" storagev1api "k8s.io/api/storage/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes/fake" @@ -150,12 +152,12 @@ func TestChangeStorageClassActionExecute(t *testing.T) { // set up test data if tc.configMap != nil { - _, err := clientset.CoreV1().ConfigMaps(tc.configMap.Namespace).Create(tc.configMap) + _, err := clientset.CoreV1().ConfigMaps(tc.configMap.Namespace).Create(context.TODO(), tc.configMap, metav1.CreateOptions{}) require.NoError(t, err) } if tc.storageClass != nil { - _, err := clientset.StorageV1().StorageClasses().Create(tc.storageClass) + _, err := clientset.StorageV1().StorageClasses().Create(context.TODO(), tc.storageClass, metav1.CreateOptions{}) require.NoError(t, err) } diff --git a/pkg/restore/restic_restore_action.go b/pkg/restore/restic_restore_action.go index ec02fdb77..1dace423b 100644 --- a/pkg/restore/restic_restore_action.go +++ b/pkg/restore/restic_restore_action.go @@ -17,6 +17,7 @@ limitations under the License. package restore import ( + "context" "fmt" "strings" @@ -77,7 +78,7 @@ func (a *ResticRestoreAction) Execute(input *velero.RestoreItemActionExecuteInpu log := a.logger.WithField("pod", kube.NamespaceAndName(&pod)) opts := label.NewListOptionsForBackup(input.Restore.Spec.BackupName) - podVolumeBackupList, err := a.podVolumeBackupClient.List(opts) + podVolumeBackupList, err := a.podVolumeBackupClient.List(context.TODO(), opts) if err != nil { return nil, errors.WithStack(err) } @@ -219,7 +220,7 @@ func getPluginConfig(kind framework.PluginKind, name string, client corev1client LabelSelector: fmt.Sprintf("velero.io/plugin-config,%s=%s", name, kind), } - list, err := client.List(opts) + list, err := client.List(context.TODO(), opts) if err != nil { return nil, errors.WithStack(err) } diff --git a/pkg/restore/restic_restore_action_test.go b/pkg/restore/restic_restore_action_test.go index 9db3ed9ec..a85ae9b3b 100644 --- a/pkg/restore/restic_restore_action_test.go +++ b/pkg/restore/restic_restore_action_test.go @@ -17,6 +17,7 @@ limitations under the License. package restore import ( + "context" "fmt" "sort" "testing" @@ -25,6 +26,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" corev1api "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes/fake" @@ -199,7 +201,7 @@ func TestResticRestoreActionExecute(t *testing.T) { clientsetVelero := velerofake.NewSimpleClientset() for _, podVolumeBackup := range tc.podVolumeBackups { - _, err := clientsetVelero.VeleroV1().PodVolumeBackups(veleroNs).Create(podVolumeBackup) + _, err := clientsetVelero.VeleroV1().PodVolumeBackups(veleroNs).Create(context.TODO(), podVolumeBackup, metav1.CreateOptions{}) require.NoError(t, err) } diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 299f1ac3f..94eba2b3a 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -197,7 +197,7 @@ func (kr *kubernetesRestorer) Restore( snapshotLocationLister: snapshotLocationLister, } - restoreCtx := &context{ + restoreCtx := &restoreContext{ backup: req.Backup, backupReader: req.BackupReader, restore: req.Restore, @@ -289,7 +289,7 @@ func resolveActions(actions []velero.RestoreItemAction, helper discovery.Helper) return resolved, nil } -type context struct { +type restoreContext struct { backup *velerov1api.Backup backupReader io.Reader restore *velerov1api.Restore @@ -339,7 +339,7 @@ func getOrderedResources(resourcePriorities []string, backupResources map[string return append(resourcePriorities, orderedBackupResources...) } -func (ctx *context) execute() (Result, Result) { +func (ctx *restoreContext) execute() (Result, Result) { warnings, errs := Result{}, Result{} ctx.log.Infof("Starting restore of backup %s", kube.NamespaceAndName(ctx.backup)) @@ -533,7 +533,7 @@ func getNamespace(logger logrus.FieldLogger, path, remappedName string) *v1.Name } } -func (ctx *context) getApplicableActions(groupResource schema.GroupResource, namespace string) []resolvedAction { +func (ctx *restoreContext) getApplicableActions(groupResource schema.GroupResource, namespace string) []resolvedAction { var actions []resolvedAction for _, action := range ctx.actions { if !action.resourceIncludesExcludes.ShouldInclude(groupResource.String()) { @@ -554,7 +554,7 @@ func (ctx *context) getApplicableActions(groupResource schema.GroupResource, nam return actions } -func (ctx *context) shouldRestore(name string, pvClient client.Dynamic) (bool, error) { +func (ctx *restoreContext) shouldRestore(name string, pvClient client.Dynamic) (bool, error) { pvLogger := ctx.log.WithField("pvName", name) var shouldRestore bool @@ -619,7 +619,7 @@ func (ctx *context) shouldRestore(name string, pvClient client.Dynamic) (bool, e } // Check the namespace associated with the claimRef to see if it's deleting/terminating before proceeding - ns, err := ctx.namespaceClient.Get(namespace, metav1.GetOptions{}) + ns, err := ctx.namespaceClient.Get(go_context.TODO(), namespace, metav1.GetOptions{}) if apierrors.IsNotFound(err) { pvLogger.Debugf("namespace %s for PV not found, waiting", namespace) // namespace not found but the PV still exists, so continue to wait @@ -648,7 +648,7 @@ func (ctx *context) shouldRestore(name string, pvClient client.Dynamic) (bool, e } // crdAvailable waits for a CRD to be available for use before letting the restore continue. -func (ctx *context) crdAvailable(name string, crdClient client.Dynamic) (bool, error) { +func (ctx *restoreContext) crdAvailable(name string, crdClient client.Dynamic) (bool, error) { crdLogger := ctx.log.WithField("crdName", name) var available bool @@ -685,7 +685,7 @@ func (ctx *context) crdAvailable(name string, crdClient client.Dynamic) (bool, e // restoreResource restores the specified cluster or namespace scoped resource. If namespace is // empty we are restoring a cluster level resource, otherwise into the specified namespace. -func (ctx *context) restoreResource(resource, targetNamespace, originalNamespace string, items []string) (Result, Result) { +func (ctx *restoreContext) restoreResource(resource, targetNamespace, originalNamespace string, items []string) (Result, Result) { warnings, errs := Result{}, Result{} if targetNamespace == "" && boolptr.IsSetToFalse(ctx.restore.Spec.IncludeClusterResources) { @@ -731,7 +731,7 @@ func (ctx *context) restoreResource(resource, targetNamespace, originalNamespace return warnings, errs } -func (ctx *context) getResourceClient(groupResource schema.GroupResource, obj *unstructured.Unstructured, namespace string) (client.Dynamic, error) { +func (ctx *restoreContext) getResourceClient(groupResource schema.GroupResource, obj *unstructured.Unstructured, namespace string) (client.Dynamic, error) { key := resourceClientKey{ resource: groupResource.WithVersion(obj.GroupVersionKind().Version), namespace: namespace, @@ -767,7 +767,7 @@ func getResourceID(groupResource schema.GroupResource, namespace, name string) s return fmt.Sprintf("%s/%s/%s", groupResource.String(), namespace, name) } -func (ctx *context) restoreItem(obj *unstructured.Unstructured, groupResource schema.GroupResource, namespace string) (Result, Result) { +func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupResource schema.GroupResource, namespace string) (Result, Result) { warnings, errs := Result{}, Result{} resourceID := getResourceID(groupResource, namespace, obj.GetName()) @@ -1158,7 +1158,7 @@ func (ctx *context) restoreItem(obj *unstructured.Unstructured, groupResource sc // given a new name if and only if (a) a PV with the original name already exists in-cluster, and // (b) in the backup, the PV is claimed by a PVC in a namespace that's being remapped during the // restore. -func shouldRenamePV(ctx *context, obj *unstructured.Unstructured, client client.Dynamic) (bool, error) { +func shouldRenamePV(ctx *restoreContext, obj *unstructured.Unstructured, client client.Dynamic) (bool, error) { if len(ctx.restore.Spec.NamespaceMapping) == 0 { ctx.log.Debugf("Persistent volume does not need to be renamed because restore is not remapping any namespaces") return false, nil @@ -1193,7 +1193,7 @@ func shouldRenamePV(ctx *context, obj *unstructured.Unstructured, client client. } // restorePodVolumeBackups restores the PodVolumeBackups for the given restored pod -func restorePodVolumeBackups(ctx *context, createdObj *unstructured.Unstructured, originalNamespace string) { +func restorePodVolumeBackups(ctx *restoreContext, createdObj *unstructured.Unstructured, originalNamespace string) { if ctx.resticRestorer == nil { ctx.log.Warn("No restic restorer, not restoring pod's volumes") } else { @@ -1238,7 +1238,7 @@ func hasSnapshot(pvName string, snapshots []*volume.Snapshot) bool { return false } -func hasResticBackup(unstructuredPV *unstructured.Unstructured, ctx *context) bool { +func hasResticBackup(unstructuredPV *unstructured.Unstructured, ctx *restoreContext) bool { if len(ctx.podVolumeBackups) == 0 { return false } @@ -1336,7 +1336,7 @@ func isCompleted(obj *unstructured.Unstructured, groupResource schema.GroupResou // unmarshal reads the specified file, unmarshals the JSON contained within it // and returns an Unstructured object. -func (ctx *context) unmarshal(filePath string) (*unstructured.Unstructured, error) { +func (ctx *restoreContext) unmarshal(filePath string) (*unstructured.Unstructured, error) { var obj unstructured.Unstructured bytes, err := ctx.fileSystem.ReadFile(filePath) diff --git a/pkg/restore/restore_test.go b/pkg/restore/restore_test.go index 57ee63b31..8fd3112d0 100644 --- a/pkg/restore/restore_test.go +++ b/pkg/restore/restore_test.go @@ -20,7 +20,7 @@ import ( "archive/tar" "bytes" "compress/gzip" - ctx "context" + "context" "encoding/json" "fmt" "io" @@ -1635,7 +1635,7 @@ func TestShouldRestore(t *testing.T) { t.Run(tc.name, func(t *testing.T) { h := newHarness(t) - ctx := &context{ + ctx := &restoreContext{ log: h.log, dynamicFactory: client.NewDynamicFactory(h.DynamicClient), namespaceClient: h.KubeClient.CoreV1().Namespaces(), @@ -1647,7 +1647,7 @@ func TestShouldRestore(t *testing.T) { } for _, ns := range tc.namespaces { - _, err := ctx.namespaceClient.Create(ns) + _, err := ctx.namespaceClient.Create(context.TODO(), ns, metav1.CreateOptions{}) require.NoError(t, err) } @@ -1684,7 +1684,7 @@ func assertRestoredItems(t *testing.T, h *harness, want []*test.APIResource) { client = resourceClient } - res, err := client.Get(item.GetName(), metav1.GetOptions{}) + res, err := client.Get(context.TODO(), item.GetName(), metav1.GetOptions{}) if !assert.NoError(t, err) { continue } @@ -2361,7 +2361,7 @@ type fakeResticRestorerFactory struct { restorer *resticmocks.Restorer } -func (f *fakeResticRestorerFactory) NewRestorer(ctx.Context, *velerov1api.Restore) (restic.Restorer, error) { +func (f *fakeResticRestorerFactory) NewRestorer(context.Context, *velerov1api.Restore) (restic.Restorer, error) { return f.restorer, nil } @@ -2714,7 +2714,7 @@ func assertAPIContents(t *testing.T, h *harness, want map[*test.APIResource][]st t.Helper() for r, want := range want { - res, err := h.DynamicClient.Resource(r.GVR()).List(metav1.ListOptions{}) + res, err := h.DynamicClient.Resource(r.GVR()).List(context.TODO(), metav1.ListOptions{}) assert.NoError(t, err) if err != nil { continue @@ -2863,9 +2863,9 @@ func (h *harness) addItems(t *testing.T, resource *test.APIResource) { unstructured.RemoveNestedField(unstructuredObj.Object, "status") if resource.Namespaced { - _, err = h.DynamicClient.Resource(resource.GVR()).Namespace(item.GetNamespace()).Create(unstructuredObj, metav1.CreateOptions{}) + _, err = h.DynamicClient.Resource(resource.GVR()).Namespace(item.GetNamespace()).Create(context.TODO(), unstructuredObj, metav1.CreateOptions{}) } else { - _, err = h.DynamicClient.Resource(resource.GVR()).Create(unstructuredObj, metav1.CreateOptions{}) + _, err = h.DynamicClient.Resource(resource.GVR()).Create(context.TODO(), unstructuredObj, metav1.CreateOptions{}) } require.NoError(t, err) } diff --git a/pkg/serverstatusrequest/process.go b/pkg/serverstatusrequest/process.go index 9ae67ddc3..76c57b038 100644 --- a/pkg/serverstatusrequest/process.go +++ b/pkg/serverstatusrequest/process.go @@ -17,6 +17,7 @@ limitations under the License. package serverstatusrequest import ( + "context" "encoding/json" "time" @@ -61,7 +62,7 @@ func Process(req *velerov1api.ServerStatusRequest, client velerov1client.ServerS } log.Debug("ServerStatusRequest has expired, deleting it") - if err := client.ServerStatusRequests(req.Namespace).Delete(req.Name, nil); err != nil { + if err := client.ServerStatusRequests(req.Namespace).Delete(context.TODO(), req.Name, metav1.DeleteOptions{}); err != nil { return errors.WithStack(err) } @@ -89,7 +90,7 @@ func patch(client velerov1client.ServerStatusRequestsGetter, req *velerov1api.Se return errors.WithStack(err) } - _, err = client.ServerStatusRequests(req.Namespace).Patch(req.Name, types.MergePatchType, patchBytes) + _, err = client.ServerStatusRequests(req.Namespace).Patch(context.TODO(), req.Name, types.MergePatchType, patchBytes, metav1.PatchOptions{}) if err != nil { return errors.WithStack(err) } diff --git a/pkg/serverstatusrequest/process_test.go b/pkg/serverstatusrequest/process_test.go index f3fdb3f45..bebc70796 100644 --- a/pkg/serverstatusrequest/process_test.go +++ b/pkg/serverstatusrequest/process_test.go @@ -17,6 +17,7 @@ limitations under the License. package serverstatusrequest import ( + "context" "sort" "testing" "time" @@ -161,7 +162,7 @@ func TestProcess(t *testing.T) { assert.EqualError(t, err, tc.expectedErrMsg) } - res, err := client.VeleroV1().ServerStatusRequests(tc.req.Namespace).Get(tc.req.Name, metav1.GetOptions{}) + res, err := client.VeleroV1().ServerStatusRequests(tc.req.Namespace).Get(context.TODO(), tc.req.Name, metav1.GetOptions{}) if tc.expected == nil { assert.Nil(t, res) assert.True(t, apierrors.IsNotFound(err)) diff --git a/pkg/test/fake_namespace.go b/pkg/test/fake_namespace.go index b14e13696..686e2a43a 100644 --- a/pkg/test/fake_namespace.go +++ b/pkg/test/fake_namespace.go @@ -17,6 +17,8 @@ limitations under the License. package test import ( + "context" + "github.com/stretchr/testify/mock" corev1api "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -31,47 +33,47 @@ type FakeNamespaceClient struct { var _ corev1.NamespaceInterface = &FakeNamespaceClient{} -func (c *FakeNamespaceClient) List(options metav1.ListOptions) (*corev1api.NamespaceList, error) { +func (c *FakeNamespaceClient) List(ctx context.Context, options metav1.ListOptions) (*corev1api.NamespaceList, error) { args := c.Called(options) return args.Get(0).(*corev1api.NamespaceList), args.Error(1) } -func (c *FakeNamespaceClient) Create(obj *corev1api.Namespace) (*corev1api.Namespace, error) { +func (c *FakeNamespaceClient) Create(ctx context.Context, obj *corev1api.Namespace, options metav1.CreateOptions) (*corev1api.Namespace, error) { args := c.Called(obj) return args.Get(0).(*corev1api.Namespace), args.Error(1) } -func (c *FakeNamespaceClient) Watch(options metav1.ListOptions) (watch.Interface, error) { +func (c *FakeNamespaceClient) Watch(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) { args := c.Called(options) return args.Get(0).(watch.Interface), args.Error(1) } -func (c *FakeNamespaceClient) Get(name string, opts metav1.GetOptions) (*corev1api.Namespace, error) { +func (c *FakeNamespaceClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*corev1api.Namespace, error) { args := c.Called(name, opts) return args.Get(0).(*corev1api.Namespace), args.Error(1) } -func (c *FakeNamespaceClient) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (*corev1api.Namespace, error) { +func (c *FakeNamespaceClient) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (*corev1api.Namespace, error) { args := c.Called(name, pt, data, subresources) return args.Get(0).(*corev1api.Namespace), args.Error(1) } -func (c *FakeNamespaceClient) Delete(name string, opts *metav1.DeleteOptions) error { +func (c *FakeNamespaceClient) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { args := c.Called(name, opts) return args.Error(1) } -func (c *FakeNamespaceClient) Finalize(item *corev1api.Namespace) (*corev1api.Namespace, error) { +func (c *FakeNamespaceClient) Finalize(ctx context.Context, item *corev1api.Namespace, options metav1.UpdateOptions) (*corev1api.Namespace, error) { args := c.Called(item) return args.Get(0).(*corev1api.Namespace), args.Error(1) } -func (c *FakeNamespaceClient) Update(namespace *corev1api.Namespace) (*corev1api.Namespace, error) { +func (c *FakeNamespaceClient) Update(ctx context.Context, namespace *corev1api.Namespace, options metav1.UpdateOptions) (*corev1api.Namespace, error) { args := c.Called(namespace) return args.Get(0).(*corev1api.Namespace), args.Error(1) } -func (c *FakeNamespaceClient) UpdateStatus(namespace *corev1api.Namespace) (*corev1api.Namespace, error) { +func (c *FakeNamespaceClient) UpdateStatus(ctx context.Context, namespace *corev1api.Namespace, options metav1.UpdateOptions) (*corev1api.Namespace, error) { args := c.Called(namespace) return args.Get(0).(*corev1api.Namespace), args.Error(1) } diff --git a/pkg/util/kube/utils.go b/pkg/util/kube/utils.go index 8e27974c8..56bd33dba 100644 --- a/pkg/util/kube/utils.go +++ b/pkg/util/kube/utils.go @@ -17,6 +17,7 @@ limitations under the License. package kube import ( + "context" "fmt" "time" @@ -47,7 +48,7 @@ func NamespaceAndName(objMeta metav1.Object) string { func EnsureNamespaceExistsAndIsReady(namespace *corev1api.Namespace, client corev1client.NamespaceInterface, timeout time.Duration) (bool, error) { var ready bool err := wait.PollImmediate(time.Second, timeout, func() (bool, error) { - clusterNS, err := client.Get(namespace.Name, metav1.GetOptions{}) + clusterNS, err := client.Get(context.TODO(), namespace.Name, metav1.GetOptions{}) if apierrors.IsNotFound(err) { // Namespace isn't in cluster, we're good to create. @@ -79,7 +80,7 @@ func EnsureNamespaceExistsAndIsReady(namespace *corev1api.Namespace, client core return true, nil } - clusterNS, err := client.Create(namespace) + clusterNS, err := client.Create(context.TODO(), namespace, metav1.CreateOptions{}) if apierrors.IsAlreadyExists(err) { if clusterNS != nil && (clusterNS.GetDeletionTimestamp() != nil || clusterNS.Status.Phase == corev1api.NamespaceTerminating) { // Somehow created after all our polling and marked for deletion, return an error