diff --git a/go.mod b/go.mod index 93e82483f0..bd4cd3fa94 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/mikefarah/yq/v3 v3.0.0-20201202084205-8846255d1c37 github.com/onsi/ginkgo/v2 v2.9.5 github.com/openshift/api v3.9.0+incompatible - github.com/operator-framework/api v0.17.7 + github.com/operator-framework/api v0.17.8-0.20230803152844-704ae942c4a9 github.com/operator-framework/operator-lifecycle-manager v0.0.0-00010101000000-000000000000 github.com/operator-framework/operator-registry v1.27.1 github.com/sirupsen/logrus v1.9.2 @@ -68,7 +68,7 @@ require ( github.com/distribution/distribution v2.7.1+incompatible // indirect github.com/docker/cli v23.0.1+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v23.0.1+incompatible // indirect + github.com/docker/docker v23.0.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect diff --git a/go.sum b/go.sum index 4b95109810..7bcffd9de7 100644 --- a/go.sum +++ b/go.sum @@ -185,8 +185,8 @@ github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v0.0.0-20191216044856-a8371794149d h1:jC8tT/S0OGx2cswpeUTn4gOIea8P08lD3VFQT0cOZ50= github.com/docker/distribution v0.0.0-20191216044856-a8371794149d/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= -github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= +github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= diff --git a/manifests/0000_50_olm_00-catalogsources.crd.yaml b/manifests/0000_50_olm_00-catalogsources.crd.yaml index 37d2d38a53..8b6a6a6888 100644 --- a/manifests/0000_50_olm_00-catalogsources.crd.yaml +++ b/manifests/0000_50_olm_00-catalogsources.crd.yaml @@ -534,6 +534,13 @@ spec: topologyKey: description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. type: string + memoryTarget: + description: "MemoryTarget configures the $GOMEMLIMIT value for the gRPC catalog Pod. This is a soft memory limit for the server, which the runtime will attempt to meet but makes no guarantees that it will do so. If this value is set, the Pod will have the following modifications made to the container running the server: - the $GOMEMLIMIT environment variable will be set to this value in bytes - the memory request will be set to this value - the memory limit will be set to 200% of this value \n This field should be set if it's desired to reduce the footprint of a catalog server as much as possible, or if a catalog being served is very large and needs more than the default allocation. If your index image has a file- system cache, determine a good approximation for this value by doubling the size of the package cache at /tmp/cache/cache/packages.json in the index image. \n This field is best-effort; if unset, no default will be used and no Pod memory limit or $GOMEMLIMIT value will be set." + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true nodeSelector: description: NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. type: object diff --git a/staging/api/.github/workflows/go.yaml b/staging/api/.github/workflows/go.yaml index 2da8edbf35..a9d155e57d 100644 --- a/staging/api/.github/workflows/go.yaml +++ b/staging/api/.github/workflows/go.yaml @@ -33,7 +33,6 @@ jobs: - uses: codecov/codecov-action@v3 with: files: cover.out - fail_ci_if_error: true functionalities: fixes go-apidiff: diff --git a/staging/api/crds/operators.coreos.com_catalogsources.yaml b/staging/api/crds/operators.coreos.com_catalogsources.yaml index e42010c7ad..c3e2f6ce18 100644 --- a/staging/api/crds/operators.coreos.com_catalogsources.yaml +++ b/staging/api/crds/operators.coreos.com_catalogsources.yaml @@ -532,6 +532,13 @@ spec: topologyKey: description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. type: string + memoryTarget: + description: "MemoryTarget configures the $GOMEMLIMIT value for the gRPC catalog Pod. This is a soft memory limit for the server, which the runtime will attempt to meet but makes no guarantees that it will do so. If this value is set, the Pod will have the following modifications made to the container running the server: - the $GOMEMLIMIT environment variable will be set to this value in bytes - the memory request will be set to this value - the memory limit will be set to 200% of this value \n This field should be set if it's desired to reduce the footprint of a catalog server as much as possible, or if a catalog being served is very large and needs more than the default allocation. If your index image has a file- system cache, determine a good approximation for this value by doubling the size of the package cache at /tmp/cache/cache/packages.json in the index image. \n This field is best-effort; if unset, no default will be used and no Pod memory limit or $GOMEMLIMIT value will be set." + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true nodeSelector: description: NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. type: object diff --git a/staging/api/crds/zz_defs.go b/staging/api/crds/zz_defs.go index 6a98bd4bd7..a391fce34b 100644 --- a/staging/api/crds/zz_defs.go +++ b/staging/api/crds/zz_defs.go @@ -85,7 +85,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xfb\x73\xdc\x36\x92\xff\xef\xfe\x2b\xba\xf4\xfd\x56\x49\xca\xcd\x50\x76\xb2\x95\xdb\xd5\xe6\x51\x5a\x39\xce\xa9\x12\xdb\x2a\xcb\xc9\xd6\xad\xe5\x3b\x63\xc8\x1e\x0e\x22\x12\x60\x00\x50\xf2\x24\x95\xff\xfd\xaa\x1b\x00\xc9\x79\x3f\x64\xc7\x76\x2d\xf9\x8b\x35\x24\x9e\x8d\x46\xf7\xa7\x1f\x80\x45\x25\x7f\x46\x63\xa5\x56\xa7\x20\x2a\x89\x6f\x1d\x2a\xfa\x65\x93\x9b\xbf\xda\x44\xea\x93\xdb\x47\x0f\x6e\xa4\xca\x4e\xe1\xbc\xb6\x4e\x97\x2f\xd0\xea\xda\xa4\xf8\x18\xc7\x52\x49\x27\xb5\x7a\x50\xa2\x13\x99\x70\xe2\xf4\x01\x80\x50\x4a\x3b\x41\xaf\x2d\xfd\x04\x48\xb5\x72\x46\x17\x05\x9a\x61\x8e\x2a\xb9\xa9\x47\x38\xaa\x65\x91\xa1\xe1\xc6\x63\xd7\xb7\x0f\x93\xbf\x25\x0f\x1f\x00\xa4\x06\xb9\xfa\x4b\x59\xa2\x75\xa2\xac\x4e\x41\xd5\x45\xf1\x00\x40\x89\x12\x4f\x21\x15\x4e\x14\x3a\xf7\x83\xb0\x89\xae\xd0\x08\xa7\x8d\x4d\x52\x6d\x50\xd3\x3f\xe5\x03\x5b\x61\x4a\xbd\xe7\x46\xd7\xd5\x29\x2c\x2d\xe3\xdb\x8b\x83\x14\x0e\x73\x6d\x64\xfc\x0d\x30\x04\x5d\x94\xfc\x77\x98\xbc\xef\xf6\x8a\xbb\xe5\xf7\x85\xb4\xee\x87\xc5\x6f\x3f\x4a\xeb\xf8\x7b\x55\xd4\x46\x14\xf3\x03\xe6\x4f\x76\xa2\x8d\x7b\xd6\x76\x4f\xdd\xa5\xc2\x59\x93\xfa\xcf\x52\xe5\x75\x21\xcc\x5c\xdd\x07\x00\x36\xd5\x15\x9e\x02\x57\xad\x44\x8a\xd9\x03\x80\x40\xc2\xd0\xd4\x10\x44\x96\xf1\xb2\x88\xe2\xd2\x48\xe5\xd0\x9c\xeb\xa2\x2e\x55\xd3\x15\x95\xc9\xd0\xa6\x46\x56\x8e\x49\xff\x72\x82\x50\x19\x74\x6e\xca\x24\x01\x3d\x06\x37\xc1\xd8\x77\x53\x0b\xe0\x17\xab\xd5\xa5\x70\x93\x53\x48\x88\xc2\x49\x26\x6d\x55\x88\x29\x8d\xa6\x53\xca\x2f\xd3\x63\xff\xad\xf3\xde\x4d\x69\xe8\xd6\x19\xa9\xf2\x75\x43\xa1\x72\xdb\x8f\xc1\x93\xe6\xe5\xb4\x5a\x1c\xc2\xdc\xcb\x6d\xfb\xaf\xea\x51\x21\xed\x04\xcd\xf6\x83\x68\xaa\x2c\x8c\xe1\x72\xc9\x97\x15\x03\xe9\x34\x1a\x37\x54\xb2\xb0\x19\x16\x3a\x38\xcb\x17\xe7\x98\x09\x17\x5f\xfa\x42\xb7\x8f\x44\x51\x4d\xc4\xa3\xf0\xd2\xa6\x13\x2c\x45\xcb\x0f\xba\x42\x75\x76\x79\xf1\xf3\x17\x57\x73\x1f\x60\x96\x3a\x33\x7c\x0e\xd2\x82\x00\x83\x95\xb6\xd2\x69\x33\x25\x6a\x9d\x5f\xfd\x6c\x07\x70\xfe\xe2\xb1\x1d\x80\x50\x59\xb3\xf1\xa0\x12\xe9\x8d\xc8\xd1\x26\x0b\x63\xd5\xa3\x5f\x30\x75\x9d\xd7\x06\x7f\xad\xa5\xc1\xac\x3b\x0a\x22\x4f\xa4\xc9\xdc\x6b\xa2\x7f\xe7\x55\x65\xa8\x4f\xd7\xd9\xc8\xfe\xe9\x48\xb9\x99\xf7\x73\x33\x3c\x24\x32\xf8\x72\x90\x91\x80\x43\xcb\x2c\x10\xf6\x18\x66\x81\x76\x9e\x35\xa4\xa5\xf9\x1b\xb4\xa8\xbc\xc8\xa3\xd7\x42\x85\x39\x25\x70\x85\x86\x2a\xd2\x76\xaf\x8b\x8c\x24\xe1\x2d\x1a\x07\x06\x53\x9d\x2b\xf9\x5b\xd3\x9a\x05\xa7\xb9\x9b\x42\x38\xb4\x0e\x78\xd7\x2a\x51\xc0\xad\x28\x6a\xf4\xa4\x2c\xc5\x14\x0c\x52\xbb\x50\xab\x4e\x0b\x5c\xc4\x26\xf0\x54\x1b\x04\xa9\xc6\xfa\x14\x26\xce\x55\xf6\xf4\xe4\x24\x97\x2e\xca\xf0\x54\x97\x65\xad\xa4\x9b\x9e\xb0\x38\x96\xa3\x9a\xc4\xe1\x49\x86\xb7\x58\x9c\x58\x99\x0f\x85\x49\x27\xd2\x61\xea\x6a\x83\x27\xa2\x92\x43\x1e\xac\x62\x39\x9e\x94\xd9\xff\x33\x41\xea\xdb\xc3\x39\xf2\x2d\x65\x66\x88\x62\x73\x2d\xad\x49\x78\x7a\x2e\xf2\xd5\xfd\x5c\x5a\x92\xd2\x2b\xa2\xca\x8b\xef\xae\x5e\x42\x1c\x80\x27\xbb\xa7\x70\x5b\xd4\xb6\xc4\x26\x42\x49\x35\x46\xe3\x4b\x8e\x8d\x2e\xb9\x15\x54\x59\xa5\xa5\x72\x7e\x4b\x17\x12\x95\x03\x5b\x8f\x4a\xe9\x2c\xf3\x1c\x5a\x47\xeb\x90\xc0\x39\xab\x30\x18\x21\xd4\x15\xed\xa4\x2c\x81\x0b\x05\xe7\xa2\xc4\xe2\x5c\x58\x7c\xef\xa4\x26\x8a\xda\x21\x91\x6f\x7b\x62\x77\x35\xf0\x62\x85\x85\x3d\x06\x10\x35\xe4\x56\x85\x57\x6d\x4a\xf0\x3b\x70\x99\x04\x86\x35\x7b\x91\x1e\x91\x65\x06\xed\x92\x0f\x0b\x1b\xd2\x17\xf4\x7c\x32\xd1\x96\xd6\x4f\x38\x78\xfe\xe3\x53\x48\x85\x82\xda\x22\x6d\x9e\x54\x2b\x45\x0c\xe1\x34\x08\xd2\x65\x43\x7c\x2b\x2d\x33\x90\xc1\x5c\x5a\x67\xa6\x09\x3c\xd1\xa6\x14\xee\x14\xbe\x8a\xaf\x86\xdc\x9c\x36\x20\xab\x6f\x4e\xbf\xaa\xb4\x71\xdf\xc0\x73\x55\x4c\xa9\xd1\x0c\xee\x26\xa8\xe0\xaa\x99\x1b\x7c\xdd\xf9\xf1\xbd\xa9\xd2\x04\x2e\x72\xa5\x4d\x2c\x49\x5c\x75\x51\x8a\x1c\x61\x2c\xb1\x60\xbe\xb6\xe8\x92\xf9\x15\x5c\xbb\x8a\xe0\xe1\xd2\x58\xe6\x4f\x45\xb5\x91\x34\xe7\xb1\x24\xf5\x45\xdd\x77\x95\x77\xfb\xd1\x69\x66\x65\x9a\x12\xfd\x29\xd2\x1b\x10\xa1\x97\x52\x54\x43\xcb\xdb\xa6\x43\xa6\xed\x28\x70\x1e\x1b\x20\xfa\xb5\xaf\x2f\x82\xe4\x4a\x76\x9d\x76\x77\x66\x3b\xd7\x6d\x61\xc8\x46\xa2\x3d\x5d\xa6\x45\xb6\xe8\x23\x37\x55\x7a\xa9\x33\x3f\xed\x8d\xbd\x7c\xdf\x2d\x0d\xf8\xb6\xd2\x16\x2d\x64\x72\x3c\x46\x43\x72\x47\xdf\xa2\x31\x32\x43\x0b\x63\x6d\x78\xbd\x2a\x9d\xf1\x9e\x6c\xd6\x6f\x46\xd5\x5e\xea\x6c\xdb\x85\xa1\xae\x59\x61\x78\x66\x0c\x6c\xb8\x72\xba\x4b\x77\x3b\x6c\xd8\xbc\xf4\x88\x31\xc3\xff\xe9\xf2\xaf\x73\xf4\x38\x0b\x85\x23\xa7\x06\x44\x15\x44\xc7\xa1\xa5\xe9\x1f\xda\xa6\xcd\x65\xc3\xdd\x62\xc8\xdb\x0c\x9b\x1e\xa5\x33\x3c\xdb\x30\xfc\x85\x29\x3c\xe6\x1f\x23\xb4\x5c\xbd\x19\x2a\x6b\xf0\xac\x2e\x58\xd4\xd4\xc5\xec\x8a\xae\x9a\xc7\x96\x73\xd9\x76\x3e\xbe\x1c\x8e\xd1\x18\xcc\x1e\xd7\xc4\xbf\x57\xcd\xa8\x82\x90\xf2\xaf\xbf\x7b\x8b\x69\xbd\x6a\x8f\xad\x9c\x3a\x81\xe2\x30\x4d\x34\x70\x27\x8b\x22\x74\x47\x02\x25\x7e\xa0\xf9\x32\x8e\x21\xf2\x58\x2f\xa4\xad\x70\xd2\x8e\xa7\x4c\x8e\x86\x60\xf8\x96\x74\x36\x5b\x2c\xcc\xf1\x72\x2c\x31\x83\xd1\x34\xa8\x6b\x12\x9e\x03\x18\xd5\x0e\xa4\x63\x5d\x9e\x4e\xb4\xb6\x08\xc2\xd3\x9d\xdb\xbd\x95\x9a\x91\x12\x68\x85\x24\x7f\x4a\x52\xc8\x61\xe3\x74\x9a\x4f\x78\xe4\x6d\x35\x69\xa1\x24\x89\xdf\xd0\x2a\xb2\x23\x35\x73\x27\xdd\x84\x7f\xe4\x04\xb9\x09\x85\xd9\xba\xa4\x46\xef\x50\xe6\x13\x67\x07\x20\x13\x4c\x78\x75\x51\xa4\x93\x4e\xb3\x25\xa2\xb3\x20\x8a\x22\x0e\xa1\xcb\x12\x5e\x6f\x96\x04\x51\xe0\xa8\xc1\x30\x01\x6f\x0c\x1a\xbd\x3a\xbf\x6a\x4b\xc9\x35\x00\x74\x69\x72\x3c\x80\x54\x97\x55\xed\x88\x26\x34\xc6\xd1\x14\xa4\x23\x9c\xed\xf1\x92\xd1\x75\xee\x67\x82\x45\xe8\x38\x82\x55\xaf\x99\x48\x38\x90\x8d\xa8\x72\x38\xf0\x93\x3b\x88\xf8\x93\x9a\x93\x7e\x12\x3c\xbf\x52\xb8\x74\x12\x20\x70\xaa\x8d\x41\x5b\x69\xc5\x35\xf9\xcb\x77\xed\xd8\xfe\xde\x54\x3a\xb2\xc7\x2d\x31\x27\x32\x9f\x44\x5a\x0a\x83\xfc\x6e\x76\x0d\xd6\xed\x91\x76\x9f\x08\x63\x66\x6c\xc9\x65\x8f\x74\x58\x6e\xd8\x25\x0b\xac\x7d\xa6\x00\xcb\xca\x4d\x3b\x3c\xd1\x59\x3d\x87\xa6\x6c\x68\xc0\x0b\xcc\xdb\xd5\xfa\xf9\xc9\xb2\x2a\x64\x2a\x5d\xe0\x10\x78\x08\x47\xcc\x22\xd2\x91\x28\x03\xa5\x87\xba\x3a\x4e\xe0\x8c\xdd\x17\x5b\x74\xa0\x74\xd3\x7e\x68\x88\x3a\xb5\xba\x6d\x6b\xe3\xdc\xb6\x14\x2a\xfe\x59\x8d\xe9\x16\x9f\x61\x18\x3f\xaa\x74\x1e\xe5\x2d\x2f\xee\x69\xb2\xb1\xe8\xb6\xe2\x2d\x96\x8e\x63\xd8\xa6\xf4\xfc\x52\x7b\x96\xb6\x58\x60\x4a\x26\x29\xd1\x7e\x00\xc2\x5a\x9d\x4a\x42\xf9\x2d\xd3\xce\x72\xba\x9f\xc9\x66\xda\xc3\xae\xf4\x87\x9d\xe7\x4f\xcf\xfc\xc6\xdb\xb6\xde\x02\x35\x0a\x49\xe0\x77\x3c\x47\x95\x19\x81\x35\x9a\xf2\xd7\x43\x0b\x85\x18\x61\x61\xb7\x23\x02\xec\xb4\x6b\xdb\x67\xcb\xfd\xbb\x72\x42\x2b\x27\x12\x6c\xcc\x66\xe1\x49\x68\x93\x6d\x26\xa4\xb2\xc1\x7e\x1e\x80\x80\x1b\x9c\x7a\x53\x9b\x2c\xf8\xe8\xb8\xe0\xc2\x06\xbd\xba\x21\xe6\xb8\xc1\x29\x17\x0a\x76\xf7\x0e\xc3\xdd\x99\x39\xfc\xb3\xcb\x36\x6d\x9f\x21\x0d\x74\xc7\x1a\x71\xd2\x3b\x54\xdb\x9d\x7f\xfd\x73\x83\x6b\x91\xd7\xb2\x67\x01\x92\x30\x4f\xf2\x7a\xf0\x22\xb1\xfe\x8a\x6b\x2c\xaa\xaa\x90\xc8\xf6\xfc\x8e\xdd\xac\xb5\x02\xd6\x3d\x91\x7a\xf7\x9a\xd7\x8b\xc6\xa1\xe1\x19\xf2\xd0\x7a\xe6\xa3\x9d\x3e\x91\x95\xb7\x6f\x2d\xf2\xc6\x8d\x9e\x9f\x9f\x45\x21\x5b\x57\x9b\x65\x3d\x7b\xa1\x06\xf0\x4c\x3b\xfa\xe7\x3b\xb2\x84\xed\x00\x1e\x6b\xb4\xcf\xb4\xe3\x9f\x09\x7c\xef\x3c\xaf\xff\xb8\xa5\x64\x7b\x07\x04\xf2\xe3\xbd\x17\x79\xce\x94\x97\x29\x34\xfd\xae\xcf\xc8\x26\x70\xe1\x61\x4b\xb3\x71\xa5\x85\x0b\x45\xe0\x30\x90\x81\xbd\x78\x5c\x36\x34\x51\xd6\x96\x9d\x3c\x4a\xab\x21\x63\x80\xa5\x6d\x78\xea\x51\x3b\x5d\xfa\xad\x69\x6e\x75\x53\xdf\xb3\xaf\xe1\xc7\x95\x95\x27\xe2\x96\x21\x9d\x54\x79\xd1\x80\xb7\x01\xdc\x4d\x64\x3a\xf1\xa8\x7b\x84\xde\x35\x58\x19\x24\x85\x25\x2c\x89\x2a\x7a\x93\xa3\x21\xb0\x2b\x63\x7b\xde\x31\x59\x88\x14\x33\xc8\x18\x5a\x7a\x27\x9b\x70\x98\xcb\x14\x4a\x34\x39\x42\x45\x9a\x64\xbf\xd5\xdf\x4d\xb0\xfb\x67\x67\xf1\xde\xed\x70\x27\x76\x63\x15\xf9\x84\xb0\xee\x9f\xa4\x1d\x19\x57\xf7\xda\xb1\xd7\x8e\x73\x4f\xaf\x1d\x9b\xa7\xd7\x8e\x1b\x9e\x5e\x3b\xf6\xda\xf1\xbd\x6b\x47\x6f\xcb\xee\x61\x3c\xff\xd3\xbb\x38\xe6\xad\x65\xd6\xb4\x31\x4c\x37\x6b\x36\x93\xbe\xb9\x0a\x02\xe7\x25\x9b\xda\xd2\x07\x49\x8c\x50\x39\xc2\xa3\xe1\xa3\x87\x0f\x77\x31\xaa\xc3\x42\x6e\x55\x63\x1c\x22\x3d\x52\xb9\x2f\x3e\x5f\x5b\x63\x95\xff\xed\x1d\x78\x4d\x03\x8f\x37\x8e\xbc\x19\xec\xb0\xc2\xf1\xc9\xd2\x49\x69\x07\x25\x3a\x10\x6e\xc6\x55\x24\x4b\x1c\x34\xa1\x02\x66\xf8\x10\xa5\x8c\x1e\xd8\x0c\xb4\x0a\x7e\x3c\x22\x7e\xb2\xdf\x08\x52\x14\x3e\xa4\x36\xc2\x66\x14\xba\xa4\x5e\xa5\x72\x71\xbb\xd0\x10\x30\x52\x05\x8e\x30\xc9\x13\xc8\x6a\xae\x26\x54\x08\x9b\x1e\xfb\xd1\xda\xa9\x75\x58\xb2\x27\x57\x1b\xfe\x87\x86\xed\xcc\x94\x0a\xe3\x2d\x2a\x57\x8b\xa2\x98\x02\xde\xca\xd4\x35\xf3\xe3\xa8\xad\x74\xde\xd9\xbe\x9d\x8b\x70\x2b\xe8\xb0\x3d\x5c\x18\x2e\x70\xb0\xdd\x50\x67\x17\x6d\xbf\xd0\xf6\x36\x7b\x72\x4e\x17\xfa\x99\x24\x2b\xc1\xaa\xa3\x76\xbd\x0f\x9c\xff\x64\xe6\x7a\xfe\x62\xb3\xcb\x15\x76\x96\x64\x3b\x48\xaf\x79\x58\x5a\x17\x05\x31\x86\xf7\xc2\x2e\x4e\x60\x89\x77\xd4\x4f\x69\x86\x99\xbd\xe3\xdd\xbb\x98\xcf\x9e\x3d\x26\xaa\x50\x99\x97\xba\xd2\x85\xce\xa7\x5d\x4a\xfb\xf4\x22\x59\x56\xd1\x39\x2e\xc0\xd6\xa3\x00\x1a\x88\xfd\x9e\xcd\x2d\x4d\xef\xf9\xeb\x3d\x7f\xbd\x6d\xb3\xf0\xf4\xb6\x4d\xf3\xf4\xb6\xcd\x86\xa7\xb7\x6d\x7a\xdb\xa6\xf7\xfc\x41\xaf\x1d\xd7\xd0\xa4\xd7\x8e\xd0\x6b\xc7\x95\xf3\xea\xb5\xe3\x5a\xf2\xf4\xda\xb1\xd7\x8e\xcb\x9e\x4a\x67\xf7\x48\x74\xac\x74\xb6\x26\xcf\xd1\x7b\x7d\x52\x3d\x2c\x74\x2a\x5c\xc8\xcb\xa7\x2a\xc1\xcf\x67\x45\xe9\x1d\x51\x03\xf8\x4d\x2b\xf4\xc9\x6b\xb4\x36\xec\x4e\xd2\x6e\x82\x86\x8a\x1f\xd9\xe3\xb5\x89\x4d\x7d\x9e\x64\x9f\x27\xf9\xd1\xe7\x49\x4e\x84\xf5\xeb\xea\x85\xd2\xea\xb4\xc9\xce\x86\x7c\x89\xa6\xfc\x44\xb3\x26\x89\x5d\xc2\x72\xf3\x89\xa7\x76\x49\xfd\xcc\xb3\x10\x2f\xc0\xec\x72\x76\xbe\x01\x2f\xf3\xa4\x44\x96\x61\x06\x15\x9a\xa1\x67\x11\x0d\x63\xa9\xb2\x25\x73\x8d\xf4\xf9\xa0\xd9\x8f\xb3\xf3\xf8\x80\x29\x90\xb3\x03\xd9\xc3\xe7\xda\x75\x1c\xcf\x48\xf8\x8f\x22\x21\x72\x57\x54\x3f\x04\x17\x9c\xbc\x3f\x6c\x89\xeb\x77\x87\xe6\x0c\xa8\xa3\x4b\x78\x7f\xbb\x92\x61\xf9\xaf\x35\x9a\x29\x9f\xff\x68\x01\x6b\x73\xb6\x2e\xc4\xc8\xa4\x85\x54\x58\xaf\x29\x76\x35\x2d\x77\x34\xa3\xf6\xb3\x53\xf6\xf7\x44\xc3\x3c\x5d\xe6\x9b\xf2\x36\x69\xb4\xc1\x3d\xcd\x96\x1a\xe1\x4b\xa2\x00\xad\xf7\x7f\xa7\xf1\xec\x0b\xdd\xf6\x02\x6e\x4b\x99\xe2\x23\x36\xce\x61\x7f\x03\x1d\xf6\x36\xd2\x61\x2f\x43\x1d\xf6\x35\xd6\xe1\x1e\x06\x3b\xec\x67\xb4\xc3\x3c\x2b\xd0\x0a\x05\x94\xf5\x7e\xec\x77\xb8\x8f\x89\x0a\xf7\xb0\xe3\x61\x7e\xaa\x0d\x9b\x9a\xf7\x65\xd4\x33\xaf\xcf\xd8\xf5\x7f\x36\xb1\xf6\xb3\xe9\x61\x9e\x54\xc1\x18\x96\x6c\xd0\x7e\x22\x16\xfe\x9f\x62\x6e\xc3\xbd\x4c\x6e\xd8\xdf\xec\x86\xfd\x39\x83\x55\xdd\x8f\x1c\x4e\xbd\xaf\xc2\xf4\xad\x78\x15\xc1\x67\x70\xc7\xf0\x3b\x69\x02\x5e\x97\x3f\xa0\x12\xd2\x58\xc2\x77\xc1\x67\xd2\xfd\x16\xac\xf3\x6e\x33\xa5\x3f\x42\x4c\xa2\xfa\x56\x14\xa4\x7b\x7c\x1e\x47\xb0\x8b\xa8\xf5\x79\x35\x3d\x80\xbb\x09\x59\x9b\x24\xa5\x9a\xf3\xce\x07\x37\x38\x3d\x18\x2c\x30\xd2\xc1\x85\x3a\xf0\x3a\x6a\x81\x75\x1a\x85\xa6\x55\x31\x85\x03\xfe\x76\xf0\xae\x35\xfb\x1e\x8a\xab\x7b\x85\xca\xbe\x7a\x61\x0f\x2e\x51\xf1\x5a\x97\x77\x0f\x36\xbd\x16\xf1\x81\x8d\xd8\x8b\x6d\x15\x0c\xa7\x5a\x74\x94\x4b\x93\x35\xc2\x3c\xc6\xef\xb3\x68\xfc\xd6\x2a\xdc\x74\x11\xcf\x9c\x87\xc6\xbc\x92\x5a\x4c\x69\x0a\x0b\xaf\x15\x5a\x06\x76\xd8\xb8\x88\x3a\x95\xb9\x6c\xe2\xd3\x41\x5a\x6d\xa7\xb2\xf9\x04\x91\xb6\x06\x63\xc4\x12\x85\xb2\x70\x10\x7d\x4f\x87\xb6\x2d\x71\x90\xb4\xa7\xfb\x9a\x16\x8f\x7e\xff\xe3\x78\xe6\x44\x5f\xdb\x60\x8f\xb4\x7b\xa4\xdd\x23\xed\x1d\x6a\xf5\x48\x7b\xf5\xd3\x23\xed\x1d\x9e\x1e\x69\xf7\x48\x7b\x5d\xc7\x3d\xd2\xee\x91\xf6\xe6\xce\xf7\x43\xda\xfb\xe6\x09\x75\x71\x6f\x08\xce\xf9\x8b\xcc\x84\x93\x69\x9b\x43\x14\x4b\xf9\xbf\xde\x2d\xde\xee\x62\xe9\xe5\x68\xbb\x8b\xc8\x17\x6c\x8b\x64\x03\xb4\x6e\xc0\xf7\x42\xcd\xf5\xa8\xfb\xe3\xca\x85\xda\x83\x37\x3a\x01\x85\x3d\x99\xe3\x65\x0c\x85\x87\x8b\xff\x46\xd8\xc6\xc9\x33\x38\x8a\x11\x97\x63\x22\xbe\xd2\x6e\xf6\xa3\x72\x72\xd8\x96\x68\x62\x30\x1c\x5e\x9c\x39\x6f\x33\x13\x96\x68\xa2\xee\x4d\xa4\xb8\x5d\x4f\x12\x21\x68\x66\xc6\x20\x6d\xb8\xde\x90\xb3\x25\x4c\xad\x14\xb5\xaa\x55\x0c\x1f\x7b\x99\xe3\xef\xe3\x0b\x9c\xe7\xc1\x12\x8f\x87\x11\x53\x4b\xa5\x4e\xbc\x53\x38\x7f\x05\x62\x48\xe5\xd7\x2a\x44\x44\xe9\x4d\x8c\xfa\x46\xa6\xe4\x19\xc9\xa6\xf7\x04\xbe\x63\x3e\xec\x36\x2c\x2d\xd3\x47\x14\x85\xbe\xdb\x45\x24\xfd\x59\xc7\xa2\xee\x76\x3e\x16\x35\x17\xbf\xeb\x4f\x45\xfd\x9b\x9c\x8a\xe2\x8f\x7e\x0b\xbd\xf3\xe3\x51\xf0\xcf\x70\x01\xa1\x41\x26\x55\x59\x17\x4e\x56\x6d\xae\x94\xf5\x5d\x15\x1e\x65\x8e\x43\xe6\xc9\x2c\x5f\x52\x6f\x22\x9d\xcc\xf3\x27\xb7\xc7\xb9\x55\x96\x37\x6d\xc8\xee\x10\x45\x11\xce\x14\x45\x48\xea\x53\x58\xe4\x87\xce\x4c\x78\x1c\xee\x6c\x6d\xac\x19\x16\x32\x47\x24\x0b\x0b\x5a\x50\x92\x6a\x6b\x84\xa8\x37\x8a\x6e\x31\xaa\xde\x5c\xde\xa2\x6a\x25\xe9\x91\x3d\x3e\x8e\x3a\xfc\x9d\x4a\xf8\xf7\x22\xa1\xbf\xea\x48\xd2\x6f\xb6\x91\xd1\x3c\xa1\x46\x4a\xb7\xe4\x6b\x65\xf4\x87\x4c\xc1\xd8\x25\xce\xbf\x9b\x8f\x61\x8f\xf8\xfe\x9f\x18\xdb\xff\x74\x4e\x96\x7d\x60\x0f\xe3\x87\xc8\xad\xff\xe8\xbd\x8a\x7d\x72\x7d\xfb\xdc\x37\xb9\xfe\xbd\x7b\x0e\x3f\x6c\x8e\xfd\x27\xe0\x2d\xfc\x90\x39\xf6\xbd\x87\x70\xed\xa2\x7c\x6c\xa9\xef\xb3\xcf\x5e\x1e\xc1\xde\x1b\xb8\xb7\x16\xde\x51\xe1\xdc\xd7\x0b\xb8\x23\x47\xec\x19\x67\xef\x63\xec\x7f\x4e\x8c\xbd\x47\xbc\x5b\x3e\x3d\xe2\x5d\x49\x94\x1e\xf1\x42\x8f\x78\x37\x4d\xaf\x47\xbc\x6b\xc9\xd3\x23\xde\xb5\x8b\xd2\x23\xde\x1e\xf1\xc2\xa7\x86\x78\xf7\xb9\xa5\xab\x8f\x75\xdf\x2b\xd6\xbd\xab\xb4\xd8\x49\x46\xec\xc8\x07\x3b\xc7\xb6\xfb\xb8\xf6\xc7\x12\xd7\xde\xfa\xc0\xbf\x72\xf2\xbe\x87\xfe\xbb\x6b\xb5\xea\xe4\xbf\xb8\xd5\x32\x83\xaa\x76\xe1\x3c\x75\x7f\xfa\xff\x5d\x9c\xfe\x9f\xa1\x7c\x7f\x05\xc0\x56\x57\x00\xac\xa2\x59\x7f\x0f\x40\x7f\x0f\xc0\x3b\x0e\x42\xf7\xf7\x00\xf4\xf7\x00\xf4\xf7\x00\xc4\xa7\x3f\x9d\x04\xfd\xe9\xa4\xad\x9e\xfe\x74\xd2\xea\xa7\x3f\x9d\xf4\xd1\x7a\x5f\xa1\x3f\x9d\xf4\x71\x7b\x62\xa1\x3f\x9d\xd4\x7b\x67\xb7\x5c\xa8\x4f\xf0\x74\x52\x7f\x0f\xc0\xc7\x9a\xa3\x00\x3d\xd2\xee\x91\x76\x8f\xb4\x7b\xa4\xbd\xfe\xe9\x91\xf6\x0e\x4f\x8f\xb4\x7b\xa4\xbd\xae\xe3\x1e\x69\xf7\x48\x7b\x73\xe7\xfd\x3d\x00\x9f\x50\x6e\x04\xf4\xf7\x00\xf4\xf9\x12\xfd\x3d\x00\xff\xbe\xf7\x00\xcc\xc4\xee\x3f\xdc\x65\x00\xbb\x0f\xa3\xbf\x11\xa0\xbf\x11\xa0\xbf\x11\xa0\xbf\x11\x20\x3e\xfd\x8d\x00\xfe\xf9\x98\x7c\x8d\xfd\xf9\xa8\x95\x44\xe9\xcf\x47\x41\x7f\x3e\x6a\xd3\xf4\x3e\x01\xbf\x61\x7f\x3e\xea\x23\xf4\x15\xf6\xe7\xa3\x7a\xbf\xe0\xfc\xe2\x7c\x22\xe7\xa3\xfa\x1b\x01\x3e\xc6\x68\x7b\x8f\x78\xb7\x7c\x7a\xc4\xbb\x92\x28\x3d\xe2\x85\x1e\xf1\x6e\x9a\x5e\x8f\x78\xd7\x92\xa7\x47\xbc\x6b\x17\xa5\x47\xbc\x3d\xe2\x85\x4f\x0d\xf1\xf6\x37\x02\xf4\x37\x02\xf4\x37\x02\x7c\x8a\x11\xee\x8d\x2b\x4d\x23\xdb\x64\xd0\xce\x2c\xe7\xb3\x4e\x85\x39\xf0\x1e\x4e\x34\x07\xdd\xea\x4c\x8d\x7c\xc0\x3b\xc6\x1f\xf9\xd8\xae\x6b\xe9\x9a\xc0\xd5\x92\x9a\x4c\xbe\x50\xe2\xd0\x7a\x42\xdb\xf9\x76\xe6\xe2\xb5\x9e\xd6\xdc\xe6\x8a\x29\x6c\x21\x6e\x77\x13\xae\x1b\x09\x5b\x19\xa9\x8d\x74\xd3\xf3\x42\x58\xfb\x4c\x94\xb8\x15\x75\x2f\xc6\x2d\xd3\x0e\x40\xaa\x4c\xa6\x8d\x75\xe3\x05\x49\x6c\x97\x01\x10\xf1\x43\xa7\x7c\xa4\x50\x2c\xe3\x03\xdc\x23\x24\xf6\x16\x75\xe1\x68\x8b\xfd\x86\x46\x87\x03\xe9\x06\x3d\x4f\xc5\xcf\xeb\x89\xb7\x66\xae\x16\xd3\x9a\xe7\xaa\x95\xc3\xb7\xee\x5c\xab\xb1\xcc\xb7\x9a\xef\xc1\xd5\xb2\xaa\x90\x0a\x45\xc3\xe6\x0b\x09\xc6\xf0\xa6\xc0\x5c\xa4\xd3\x37\x34\xfc\x37\x06\x69\x20\xb4\x67\xde\x78\xa5\x70\x2e\x9c\x28\x74\x7e\xc5\x11\xb3\xc3\x70\xc3\x84\x05\x94\x7c\x81\x84\x54\xbf\xf8\x0d\xd6\xc8\x0e\xc3\x79\x18\x95\xce\x12\xa2\x5c\x32\x37\x76\x96\xea\xcd\xc7\x00\x00\xd0\xbc\xfa\xec\xf5\x42\xc9\x00\x15\x08\x8c\xd0\x96\xec\xf2\xa7\xa9\x15\xc9\xa0\x4b\x9d\x41\x9c\x20\x9c\x65\xa5\x64\x74\x02\x47\x97\x57\x67\xc7\x33\x33\x81\x92\xaf\xc1\xd0\x06\x32\x8d\x56\x1d\x3a\xb6\x1b\xdc\x04\x6d\x8b\x48\x78\xe7\x73\x40\xd0\xef\x16\x8e\x08\xc6\x3e\x89\x60\x0c\x52\x46\xd8\x74\x7e\x75\x06\x6f\x46\xc2\x62\x21\x15\x7a\xda\x55\x46\xde\xca\x02\x73\xea\xb1\xe3\x5f\x81\xf3\xda\x18\x54\xae\x98\xc6\x9b\x0a\x96\xaf\x8a\xb4\x50\xab\x39\x76\x8b\x9c\xd5\x48\xc7\x66\xb1\xa8\xb4\xc5\x2c\x81\x2b\xae\x31\xf5\x50\x3a\x94\xe3\xb5\x71\x13\xa1\x56\x2e\x2e\x18\xb4\xd4\xb0\x54\xbe\x96\xcc\xd8\xb2\x02\x34\x86\x54\x33\x67\x2f\xd4\x96\x05\x75\x91\xa1\x81\xd4\xb3\x01\xc8\x52\xe4\x5e\xca\x33\x91\x58\xe5\x84\x14\x8f\x40\x98\x25\x84\x5f\x3d\xe7\x56\x69\xf1\x8a\xe8\x66\xbc\x09\x5c\x2b\x32\x5a\x04\x8c\x6b\x57\x1b\x84\x5b\x34\xbc\xba\xbc\xe7\xba\xa4\x89\x9b\x30\x36\xd0\xe9\x7e\xd0\x0c\xbb\x14\x32\xb0\x9a\x8d\x7d\x1a\x1c\xd5\xb2\x60\xb4\x22\x9b\xf9\x59\xcf\xc8\xa2\xe9\x4e\x8f\x41\x57\x65\xb8\x26\xa4\xae\x2a\x6d\x5c\xab\xc3\xd2\xee\xde\x08\x3a\x66\x09\x01\x68\x58\x95\xc1\x8a\x70\x6c\x90\xb4\x16\x21\x9d\x08\x95\x13\x7b\x5c\x2b\x78\xaa\x39\xa5\xc3\xe7\x05\x51\xb7\x62\xa4\x6b\xc7\x3c\x16\xf6\xea\x58\xd7\x2a\x03\x12\x2a\xa7\x30\x71\xae\xb2\xa7\x27\x27\x37\xf5\x08\x8d\x42\x87\x36\x91\xfa\x24\xd3\xa9\x3d\x49\xb5\x4a\xb1\x72\xf6\x24\xee\xa6\x93\x4a\x67\xc3\xf8\x63\x28\xe2\x26\x39\x39\x3c\xd8\x57\x1a\x41\xa4\xfc\x29\xf8\xb5\x5a\x51\x0a\x55\xbd\xe6\x52\x84\xe1\xfa\xca\x54\xa0\x25\xe3\xd2\x42\x4e\x17\x7c\x85\xc8\x1a\x4f\xe1\x2c\x50\x6a\xcb\x37\x57\x79\x44\xf6\xb0\x1d\xe9\x76\x68\xbb\x4d\xaf\x17\xda\xeb\x00\xe4\x06\xc8\xb8\x70\x8d\x07\xcb\x36\x02\x73\xed\x40\x19\x00\x38\x27\xf8\x22\x0f\x42\xe3\xfe\x0b\x89\x2b\x35\x05\xe2\x67\x17\x6e\x75\xe9\x5c\x73\xe2\x0c\xe7\x19\x7d\xd5\x58\x7d\x03\x1c\x8f\x31\x75\xdf\x84\xfd\xdc\xd8\x7f\xbc\xb9\xa3\xa5\xf6\x55\xfc\xeb\x9b\xd5\xc8\x67\x2b\xa3\x6a\x3b\xb7\x98\x1f\xd2\x7a\xb8\x3b\x43\xa1\xef\xb8\xc2\x9c\xca\xf6\x14\xf0\x6d\x11\x7d\x78\x5a\x11\xdb\x79\x23\x21\xe0\x1d\x92\x19\x9d\xc2\x36\x48\xb8\x8e\xb4\x0d\xb8\xaf\xb5\x50\x11\x9e\xe9\x90\x70\x87\x03\xb8\xe4\x3b\x50\xda\x37\xac\xc8\x9e\x69\x9f\x7a\xb7\x12\x17\x75\xe9\xb6\xd1\x1e\xd8\xe8\x18\x9c\x21\xc8\x0f\xad\x1b\xd0\xcf\x6c\xc6\x0d\xd8\x72\xf0\x8c\x95\xb7\x8e\x32\x37\x38\x6d\x5d\x47\xc1\xc9\xc8\x96\xd9\xa0\xe5\x92\x08\x3e\xbd\x27\xe8\xef\x21\x77\x46\x97\x23\xa9\x7c\x67\xbe\xe9\xb8\x14\xdc\x7a\x24\xa8\xca\xf8\x27\x77\xf3\x2e\xc8\xb5\x9d\xb7\x71\x86\x66\xcf\x77\xf0\x2d\x36\xde\x8a\xe5\x5e\xc5\x8e\x2b\xf1\xbb\x5f\x6b\x51\x24\xf0\xd8\x4b\x45\x9e\x7d\x78\x15\x0a\x2d\x78\x57\xee\x64\x91\xa5\xc2\x64\xac\x0d\xfc\x1e\x05\xab\xfd\xea\x89\x06\x70\xc4\xdd\xde\xae\x91\xbf\xe3\x07\x2a\x61\x9c\x4c\xeb\x42\xb0\xda\xc2\x5c\x9b\xe9\x3b\xa1\x68\xcb\x34\x57\x98\x6a\x95\x6d\x30\x78\x57\x48\xd7\x50\xb7\x4b\x63\x86\x51\x68\x64\x48\x65\x93\x25\xce\x33\xe9\xd1\xac\x71\xa3\xc7\x71\x57\x37\x5b\x6c\xe0\x51\xcd\x9d\x64\x58\xd6\xf8\x1b\xa4\x05\xe9\x73\x61\x8f\x3b\xe2\xb1\xd9\x15\x09\xfc\x63\x1a\xf5\xd5\x00\xa4\x8b\x56\x9e\x45\x17\x31\x4c\x64\xd9\x40\xec\x76\x43\x8d\xb5\xc1\x5b\x34\x70\x94\x69\xae\xc3\xe9\x9e\xc7\x09\xfc\x8b\x20\x3e\x7b\x27\x30\xf7\x99\x89\x81\xc5\x23\x12\x71\x7c\x29\x17\x5b\xbb\x0f\xe1\xc8\x67\x89\xca\xb2\xc4\x4c\x0a\x87\xc5\xf4\xd8\x07\x0a\x63\x9e\xe9\x36\x4b\xb7\x4d\x72\x71\x27\xa9\xf8\xcb\xbf\xac\x29\xc9\x83\xdd\x61\x65\x7f\x66\x48\x39\x23\x6a\x3c\xca\x9c\x5b\xc2\x46\x07\xe9\x35\xce\xe3\x8e\xb3\xb8\x83\xfd\xa2\x98\x69\x16\xf8\x17\xe2\x03\x01\x06\x73\xe6\x72\xcf\xb9\xf7\xe0\x71\x99\x2e\x4f\x8e\xde\xa0\xd1\xd6\xc7\x9f\x86\x40\xf0\xff\xcb\xbf\x64\xc2\x89\x15\x05\xfc\x9a\x4f\x2b\x5c\xf2\x7d\x93\xa2\x6c\x1b\x5f\xb5\x58\x1b\xb7\x75\xd3\xfd\x5e\x2d\x30\xd4\x5f\x56\x73\xd6\xa4\xa6\x52\x21\x1e\x11\xd7\x7b\x68\x30\x97\xd6\x99\xc6\xc5\x4b\x96\x22\x97\x73\x1a\xa4\xb2\x4e\x28\x27\x59\xb2\x41\x2c\x39\xb4\x68\x6e\xf9\xd6\x3e\x37\x49\xe0\x39\xd9\x5a\x64\xde\xc0\x1d\xa9\x69\x0f\xb0\x5f\x4e\x2b\x84\xaf\x3b\x3f\xbe\x37\x55\xca\xbc\x16\x04\x8d\x67\x2e\x91\x65\x06\xed\xa2\x7c\x58\xc6\x3e\x6b\xe7\x1f\xcd\xfc\x8d\x24\x38\xbc\x8c\x0e\x81\xe0\x03\xb5\x56\xe6\x84\x32\xe3\xa9\x84\xa0\x4e\x66\xd1\xa6\xb7\x0a\xb8\xa2\xfc\x8d\x77\x53\xd9\x28\x01\xe9\x22\xee\x4f\xb5\xb2\x75\x19\x93\x0b\xc8\xea\xa9\x50\x65\xa8\xd2\x29\xa7\xb1\x16\xb7\x68\x12\xf8\xc9\xd2\x4a\xc1\x7f\xc9\x9c\xec\xbe\xd0\x69\x17\x2a\xc5\xec\xe8\xb9\x11\x48\xdb\xb9\xdb\x8d\xd3\x25\x08\x03\xc5\x16\x30\x9b\x2b\x6f\x63\xc8\x66\x7e\x10\x9c\x5c\x1f\x1c\xf7\x7c\x7a\x22\xb8\xdf\x1a\x47\x89\xdf\xf0\x34\xa5\x5c\xfb\x44\xf9\x4a\x5b\x19\xb3\xba\x1b\x39\x3a\x73\x02\x43\x8f\xfd\xf9\x08\xdf\xee\xac\x21\xcc\xb1\xbf\xb9\xc9\xb0\xe1\x56\x2b\x4f\x7c\xec\x7a\x69\xa2\x98\x79\xe8\x9b\x5a\x56\xcf\xc5\x0b\x33\x67\x87\xdc\xca\x74\x23\xd4\x0d\x66\x50\xe0\x5b\x99\xea\xdc\x88\x6a\x22\x53\x3e\x04\x40\xdb\x94\x9d\x64\x9c\xfa\x2f\x4a\x4c\x0e\x57\x32\xda\x2a\x31\x5e\xd5\xa3\x42\xda\x09\x2e\xc5\x32\x6b\x79\xd4\x62\x6a\xd0\x2d\x95\x20\x33\x2c\x7a\xe5\xcb\xb5\x4a\x39\x46\x4e\x43\x03\x21\x33\xc0\xf3\x1c\x6f\x3c\x22\x71\x9a\xd2\x46\xf2\x47\x67\x94\x6b\x2f\x66\x6c\x68\x98\xc0\x05\xab\xd4\x11\x5a\xe6\xf2\x1b\xc4\xca\x73\x1a\xbb\xf0\x6d\xc9\x3e\x15\x2b\x55\x8a\xfe\x28\x83\x3f\x12\x82\x18\xdd\x8c\xce\x48\xf4\x30\x88\x54\xed\xb4\x59\x1b\x54\x6e\x39\xa8\x59\x6f\x77\xad\xb1\xb9\xd6\x93\xb1\x91\x29\x9b\x29\xd9\xca\xa2\xa8\x13\xe9\x6f\x22\x25\x7f\xd9\x75\x05\xfd\xc9\x93\x2b\x1f\x02\xdd\x2c\x6b\x7e\x9a\x29\x1e\x1c\xeb\x16\x26\xfa\x2e\xb4\x34\xbf\x69\x83\xc7\x26\xae\x6d\x26\x6d\x4a\x3b\x1d\x33\x38\xd7\xca\xc6\xe3\x27\x42\xf9\x13\x25\xb7\xa2\xf0\xac\x10\x1b\xae\x74\xc1\x27\x7b\xb2\x3a\x9a\x13\x3e\x4b\x04\xcb\x11\xf2\xb5\x91\x36\x0e\x65\x85\x9a\xdb\xa0\x62\x37\x69\xc1\xa8\x1f\x2e\x75\x51\xac\xd7\x62\x6b\xed\xd2\x6d\xac\xd2\x48\x80\xad\xaf\xec\xbd\x88\x14\x0b\xbe\x38\xe2\xe9\x0c\x1d\x9a\x52\xaa\x00\x8f\x08\xea\x36\x84\x1d\xa1\xbb\x43\x54\x90\x4e\x30\xbd\xb1\x6d\xac\x83\x2f\x70\x9d\x5b\xb5\xe0\x7f\x9a\x95\x58\x0d\x9e\xa2\x55\x61\x43\xc3\x22\x82\x24\x9b\x40\xe1\x5d\xd7\x67\xb5\x44\xdd\x90\x8a\xbe\x15\xb2\x10\xa3\xc2\x1f\xbb\x6a\x7e\x0d\xba\xe3\x90\x51\x9f\x57\x75\x51\xa0\x0f\xe8\xe5\x2f\x2e\xcf\xc1\x19\x31\x1e\xcb\x94\xc3\x39\xd2\x78\xaf\x6f\x50\x6c\x4b\xa7\xb0\xf9\x52\xe1\x25\x3b\xc2\x3a\xe1\xea\x85\x35\x5a\xb3\xc0\xeb\x16\x96\xec\x10\xb9\xd2\x41\x34\x77\x15\xe7\x8c\xb1\x42\xc3\x40\x6f\x6c\xcd\xf8\xbf\x13\x78\xa6\x5d\xb8\x49\xf7\x29\x5a\x52\xbb\x4c\xa0\x17\x28\xac\x56\x1d\xe9\xca\xe8\xd7\xc8\x5c\x2a\x51\x84\x49\x75\xfd\x7b\x8d\xed\x21\xd8\xa5\x5c\xca\xdc\x08\xd7\x08\xc5\x76\xdc\x41\xbb\x04\xbd\xe8\x3d\xa1\x09\x9c\xa9\x29\xaf\xf7\x18\x05\xbd\xa0\x96\x9d\xd1\x59\x9d\x62\x38\x73\x57\xdb\x6e\x23\xef\x54\x8c\xce\x86\x17\xce\x63\x27\x6d\x2c\x3f\x43\x27\x64\x08\x29\x69\x85\x20\x6c\x45\x76\x5c\xe4\x49\xef\x0a\x6f\x09\xcc\xca\xe2\xec\xf2\x02\x5e\x84\x43\x39\x09\x0c\x87\x43\x1f\xd5\xb4\xce\xd4\x29\xeb\x17\xda\x42\x2a\x0b\x9a\xc2\x73\x1f\x4f\x52\x74\xd2\x60\x82\xe7\xc3\x43\xb0\x4a\xb8\x09\x24\x9e\xf0\x49\x87\x14\x00\x4f\x48\xd7\xbc\x15\x65\x45\x7c\x7f\xad\xbc\xf4\x7e\xa2\xf5\x95\x5f\x24\xdf\xe7\xef\x70\x72\x32\xcf\x13\x7a\x44\x10\x35\x38\x10\x99\x35\xc6\x5a\x1f\xda\xd9\x29\x25\x54\xf1\x07\xa5\xef\xd4\xb2\xde\xb9\x2f\x61\xf0\x14\xae\x0f\xce\xe2\xee\xbb\x3e\x18\xc0\xf5\xc1\xa5\xd1\x39\xa7\x57\xa8\xfc\x3a\xe4\x4b\x5c\x1f\x3c\xc6\xdc\x88\x0c\xb3\xeb\x03\x6a\xf6\x3f\x38\x2f\xe6\x29\x9a\x1c\x7f\xc0\xe9\xd7\xdc\x58\xf3\x3a\x6a\x84\xaf\x7d\x0a\x0d\xbd\x27\x15\x4c\x7a\xea\xeb\x52\x54\xcd\x8b\xa7\xa2\x6a\x2a\x9f\xb7\x7c\xf6\xea\x75\x89\x4e\xdc\x3e\x4a\xda\x15\x7d\xf3\x8b\xd5\xea\xf4\xfa\xa0\x1d\xff\x40\x97\xc4\x19\x95\x9b\x5e\x1f\xc0\x4c\xaf\xa7\xd7\x07\xdc\x6f\x7c\x1f\x07\x79\x7a\x7d\x40\x3d\xd1\x6b\xa3\x9d\x1e\xd5\xe3\xd3\xeb\x83\xd1\xd4\xa1\x1d\x3c\x1a\x18\xac\x06\x04\x98\xbe\x6e\x7b\xb8\x3e\x78\x43\x6b\x72\x72\x12\x42\x18\xe1\x92\xe2\x3f\x96\x3b\xab\x37\xca\xfd\x4d\xf9\x83\x43\x28\x84\x75\x2f\x8d\x50\x96\xfb\x7f\x29\xcb\x65\x2a\x0c\x82\x2d\xc7\xfb\x7d\xe5\x77\xc3\x32\x60\xe5\x67\xcf\x0d\x2b\x3f\xaf\xd0\x9e\xdb\x68\xae\xc5\x39\x6c\xe9\x75\x5e\xac\xd8\x26\x16\x12\x9e\x8b\x7e\x9a\x66\x7d\x48\x07\x84\xd2\x18\x0e\xbc\xd2\x16\x0f\xf2\x8d\xd3\x86\x78\xdd\x42\xca\x57\x6b\xe0\xdf\x85\xc3\xb0\x50\xab\x0c\x4d\xc1\xc1\xaa\xb6\x55\x1f\x09\xc9\x12\xf0\x7e\x03\xd1\x78\x69\x6e\x68\x23\xb1\x76\x52\x1d\xe7\x35\x8f\xab\x69\x91\x64\x47\x38\x0f\xec\x9b\x61\x45\x97\xa6\x58\x39\xd6\x74\xfb\x87\x98\xa1\xe3\x54\x21\x64\x35\x74\xab\xd9\x23\x30\xc7\x96\x84\x0f\xa5\x7d\x7c\x7f\x52\x97\x82\x54\x87\xc8\x68\xbc\xed\x37\x6f\xbe\x79\x73\xcb\x8b\x54\x1f\x14\xf2\x3e\xfe\xb8\x0e\x81\xd4\x41\x91\x88\x26\xf1\x7b\x83\xc7\x64\xab\xc9\x97\xe2\xed\x8f\xa8\x72\x37\x39\x85\x2f\x3e\xff\xcf\x2f\xff\xba\xa2\xa0\x17\x8c\x98\x7d\x8f\x2a\xf8\x82\xb6\x24\xc3\x62\xc5\x79\xa7\x61\x42\x52\x29\x13\x4e\x24\x79\x5b\xa6\x71\x72\xb7\x1c\x74\x27\x2c\x1b\x34\x5e\x5d\xd6\x15\xd1\xe5\x09\x27\xaa\x58\x27\x54\x8a\x03\x02\x49\x4b\x1b\x93\x8d\x00\x2f\xa6\xf0\xe8\x73\x7f\x99\x3f\x77\xbd\x20\xbe\x5f\xbd\x7d\x9d\x2c\x19\xb2\xb4\xf0\xb7\xc1\xdc\x78\xa4\x05\x5a\x2a\x3d\x66\xc6\xf1\x26\xa6\x41\xaf\x09\xa3\x33\x60\x51\x13\x62\x33\xde\x4d\x0b\xb7\xc9\x1f\xb8\x9d\x2f\xb0\x94\x4a\x96\x75\x79\x0a\x0f\x57\x14\xf1\x22\x6d\xcb\xd5\xf4\x85\x5b\x20\x20\x48\x74\xe5\x46\x94\x25\xa7\xa4\xc9\x0c\x95\x93\x63\xc9\x49\x03\x0d\x6b\xb3\xb9\xef\x2b\xc6\x1c\x94\x86\x8a\x9c\x9e\x42\x72\xa8\xc3\xec\x97\x1e\xe7\x18\xd6\xc0\x21\x7a\x93\x76\x05\xd4\xb4\x42\xbf\x1b\xbc\x01\x03\xf8\xb6\xf2\x50\xb5\x13\x86\x28\x51\x28\xa9\xf2\x98\xf6\xd2\xfe\x47\x0e\xf4\xf1\x6e\x82\x21\x7a\x8e\xdd\x58\x50\x4a\xc6\x52\xc6\x76\x93\x80\xbc\x16\x46\x28\x47\x66\xec\xd9\xe5\x85\xc7\xe8\xf3\x3e\x4d\x42\x8e\x25\x16\xe7\xc2\x62\xdc\x8d\x7e\xab\x7a\x61\x15\x6f\x15\x68\xb2\x64\xdf\xd9\x56\x7d\xf4\xf0\xf3\xb5\x4b\xde\x94\x5b\x1d\xc2\x13\xce\xa1\x51\xa7\xf0\x3f\xaf\xce\x86\xff\x12\xc3\xdf\x5e\x1f\x85\x3f\x1e\x0e\xff\xf6\xbf\x83\xd3\xd7\x9f\x75\x7e\xbe\x3e\xfe\xf6\xff\xaf\x68\x69\x39\x98\x5f\xc1\x3e\x41\x89\x44\x9c\x18\x57\x74\x10\xb3\x54\x5e\x9a\x1a\x07\xf0\x44\x14\x16\x07\xf0\x93\x62\xd5\x70\x4f\xa2\xad\x8f\x50\x93\x56\x3e\xa0\x5e\x57\x45\xca\x43\x11\x1e\xd2\xfa\x32\x61\xb8\xeb\xcc\xd7\xed\x88\x14\x5d\x0d\x1d\x49\xa3\x3a\x7c\xe6\x53\xf3\xc6\x5a\x27\x01\xe1\x26\xa9\x2e\x4f\x9a\xef\x1e\x5a\x3f\x15\x6a\x0a\xad\x58\xf3\xa0\x74\x9e\xd3\xad\x23\xd9\x24\x52\xa3\xad\x6d\xcf\xcb\x43\x21\x6f\x10\xce\x5a\xbb\x91\x84\xe5\x08\x53\xc1\x58\xdc\x8c\xa4\x33\xc2\x3b\x7d\x23\xae\x6c\x3d\x4a\xe3\xba\x80\x23\x32\x57\x13\x4e\x24\x5b\x90\xae\xe1\xee\x0d\x31\x92\x05\xff\x17\x08\x64\x4a\xa7\x5a\x8d\x0b\x19\x4c\x80\xb2\xd2\xc6\x09\xe5\x62\x82\x70\x8e\x6f\xfd\xff\xba\xe2\xc3\x0e\xd2\xc2\x51\xa6\xec\xa3\x47\x9f\x7f\x71\x55\x8f\x32\x5d\x0a\xa9\x9e\x94\xee\xe4\xf8\xdb\xa3\x5f\x6b\x51\x70\x94\xf7\x99\x28\xf1\x49\xe9\x56\xff\xff\x15\x3b\xab\xc5\x47\x5f\x6e\xb1\x8b\x8e\x5e\xf9\xbd\xf2\xfa\xe8\xd5\x30\xfc\xf5\x59\x7c\x75\xfc\xed\xd1\x75\xb2\xf6\xfb\xf1\x67\x34\x87\xce\x0e\x7c\xfd\x6a\xd8\x6e\xbf\xe4\xf5\x67\xc7\xdf\x76\xbe\x1d\x2f\xdb\x8c\x6f\x87\x6d\xaa\xc8\x90\xac\x80\x61\x29\xaa\xe1\x0d\x4e\x57\x6c\xce\x95\x70\x74\xb1\x21\x4f\xb1\x52\x54\xcb\xac\xef\xb1\xcc\x9f\x8a\xea\x05\x8e\xd1\xa0\x4a\x97\x32\xf9\x3d\x23\x30\x64\x3f\xac\xf9\xc4\x19\x58\x7b\x78\x9d\x48\xef\x78\x4f\xdb\x3a\x38\xbd\x05\xb7\x6c\x87\x1f\xd5\x9a\xfc\xc5\xcd\x29\xa6\x71\x9e\x7b\xb7\x10\xf7\xf7\xcf\xde\x7f\xb4\x77\x3b\xb5\x5c\x69\x69\xcd\xfa\x30\x2f\x1e\x7b\xe8\xcb\xa2\x87\xe1\xdc\x44\x93\x9d\x57\x2b\xf9\x6b\x8d\x70\xf1\xb8\x39\x9a\x26\x55\x5a\xd4\x7c\x19\xce\x4f\x3f\x5d\x3c\x26\xfb\xfd\x1f\x41\xdc\xdc\x21\x64\x5a\x1d\x3a\x78\xfe\xec\xc7\xff\x66\x67\x00\x97\x18\x78\x85\x1e\xce\xc7\x14\x52\x78\x37\x59\x50\xc0\xf0\x0f\xf4\x79\x72\xdc\x73\x2a\xaa\xc6\x7f\xc2\xe2\x8e\x33\xac\x8a\x8a\x00\xc4\x0d\x82\xad\x4d\x18\x1d\x35\xec\x23\xbe\x9c\x45\x1f\xe2\xc1\x39\xf2\x59\xba\x71\x21\xdc\xea\x7c\xe1\xb5\x44\x4b\xb5\x52\x98\x72\xd0\x9c\x50\xe0\x7b\xd8\x1f\xc4\xc8\xcf\x03\x66\xe5\x3e\xf6\xd8\x0c\x21\xa0\xb6\x37\x5b\xd0\x18\xce\xfd\x4c\xdf\xfb\x4e\x5a\x98\xef\x5e\x3d\x7a\x7f\x26\x47\x36\x5f\x6c\xf0\x3f\x2f\xa4\x71\xcd\x9a\xce\x33\xde\xc3\xe0\x5b\x6d\x82\xa3\x13\x61\x61\x84\xa8\xd8\x9d\xeb\xbd\x7f\xa8\x02\xd7\x61\xeb\x88\xad\xab\xa1\xd3\xc3\x6c\xf9\xe2\x6d\xa0\xdc\x66\xaa\xad\xb1\x5c\xe7\x4e\x99\xee\x6a\xa8\xde\x4d\xa6\xcb\x68\x60\xdb\x4b\x77\x1a\x0c\xb2\xeb\xc4\x56\x1b\x26\x73\x5e\x5d\xb6\x2c\x82\x53\x23\xd8\x19\x8b\x43\x22\xeb\x71\xc6\xb3\xe1\x34\x47\xf3\x66\x3d\x7b\xbb\x8f\xd1\x2f\xf3\x15\x9a\x5b\xb9\x97\xf2\xdb\xb4\x31\x53\x9f\x67\x72\xf6\xfe\xb7\x15\x41\xaf\xbd\x3b\x61\xd7\x5f\xaa\x37\x84\x6f\xd6\xe6\xbf\x33\x05\xd7\x65\xf9\xef\xd2\xc6\xae\xca\xd2\x4b\x93\x53\x3e\x71\x11\x5f\x39\x6d\x38\xe4\xde\x7d\x57\x8f\x1a\xa0\xdc\xb6\x1e\x6c\x20\xf8\xfd\x8f\x07\xff\x17\x00\x00\xff\xff\x25\x01\x0e\x3b\xe7\xe7\x00\x00") +var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x73\xdc\x36\x16\xe0\x77\xff\x8a\x57\xda\xd9\x92\x94\x74\x53\x76\x32\x95\x9d\x68\x72\x94\x46\x3e\x56\x15\x1f\x2a\x4b\xc9\xd4\x8e\xe5\xdd\xa0\xc9\xd7\xdd\x88\x48\x80\x01\x40\x49\x9d\xe3\xbf\x6f\xbd\x07\x80\x64\xdf\x87\xec\xd8\xae\x21\x3f\x24\x6a\x12\xe7\xbb\x2f\xc0\xa2\x94\x3f\xa1\xb1\x52\xab\x63\x10\xa5\xc4\x3b\x87\x8a\x7e\xd9\xe4\xfa\x1f\x36\x91\xfa\xe8\xe6\xd1\x83\x6b\xa9\xb2\x63\x38\xad\xac\xd3\xc5\x6b\xb4\xba\x32\x29\x3e\xc6\xa1\x54\xd2\x49\xad\x1e\x14\xe8\x44\x26\x9c\x38\x7e\x00\x20\x94\xd2\x4e\xd0\x6b\x4b\x3f\x01\x52\xad\x9c\xd1\x79\x8e\xa6\x3f\x42\x95\x5c\x57\x03\x1c\x54\x32\xcf\xd0\xf0\xe0\x71\xea\x9b\x87\xc9\xd7\xc9\xc3\x07\x00\xa9\x41\xee\x7e\x29\x0b\xb4\x4e\x14\xe5\x31\xa8\x2a\xcf\x1f\x00\x28\x51\xe0\x31\xa4\xc2\x89\x5c\x8f\xfc\x22\x6c\xa2\x4b\x34\xc2\x69\x63\x93\x54\x1b\xd4\xf4\xbf\xe2\x81\x2d\x31\xa5\xd9\x47\x46\x57\xe5\x31\x2c\x6c\xe3\xc7\x8b\x8b\x14\x0e\x47\xda\xc8\xf8\x1b\xa0\x0f\x3a\x2f\xf8\xef\xb0\x79\x3f\xed\x05\x4f\xcb\xef\x73\x69\xdd\x0f\xf3\xdf\x9e\x4b\xeb\xf8\x7b\x99\x57\x46\xe4\xb3\x0b\xe6\x4f\x76\xac\x8d\x7b\xd9\x4c\x4f\xd3\xa5\xc2\x59\x93\xfa\xcf\x52\x8d\xaa\x5c\x98\x99\xbe\x0f\x00\x6c\xaa\x4b\x3c\x06\xee\x5a\x8a\x14\xb3\x07\x00\x01\x84\x61\xa8\x3e\x88\x2c\x63\xb4\x88\xfc\xdc\x48\xe5\xd0\x9c\xea\xbc\x2a\x54\x3d\x15\xb5\xc9\xd0\xa6\x46\x96\x8e\x41\x7f\x39\x46\x28\x0d\x3a\x37\x61\x90\x80\x1e\x82\x1b\x63\x9c\xbb\xee\x05\xf0\x8b\xd5\xea\x5c\xb8\xf1\x31\x24\x04\xe1\x24\x93\xb6\xcc\xc5\x84\x56\xd3\x6a\xe5\xd1\xf4\xd8\x7f\x6b\xbd\x77\x13\x5a\xba\x75\x46\xaa\xd1\xaa\xa5\x50\xbb\xcd\xd7\xe0\x41\x73\x39\x29\xe7\x97\x30\xf3\x72\xd3\xf9\xcb\x6a\x90\x4b\x3b\x46\xb3\xf9\x22\xea\x2e\x73\x6b\x38\x5f\xf0\x65\xc9\x42\x5a\x83\x46\x86\x4a\xe6\x98\x61\x6e\x82\x93\xd1\xfc\x1e\x33\xe1\xe2\x4b\xdf\xe8\xe6\x91\xc8\xcb\xb1\x78\x14\x5e\xda\x74\x8c\x85\x68\xe8\x41\x97\xa8\x4e\xce\xcf\x7e\xfa\xf2\x62\xe6\x03\x4c\x43\x67\x8a\xce\x41\x5a\x10\x60\xb0\xd4\x56\x3a\x6d\x26\x04\xad\xd3\x8b\x9f\x6c\x0f\x4e\x5f\x3f\xb6\x3d\x10\x2a\xab\x19\x0f\x4a\x91\x5e\x8b\x11\xda\x64\x6e\xad\x7a\xf0\x0b\xa6\xae\xf5\xda\xe0\xaf\x95\x34\x98\xb5\x57\x41\xe0\x89\x30\x99\x79\x4d\xf0\x6f\xbd\x2a\x0d\xcd\xe9\x5a\x8c\xec\x9f\x96\x94\x9b\x7a\x3f\xb3\xc3\x7d\x02\x83\x6f\x07\x19\x09\x38\xb4\x4c\x02\x81\xc7\x30\x0b\xb0\xf3\xa4\x21\x2d\xed\xdf\xa0\x45\xe5\x45\x1e\xbd\x16\x2a\xec\x29\x81\x0b\x34\xd4\x91\xd8\xbd\xca\x33\x92\x84\x37\x68\x1c\x18\x4c\xf5\x48\xc9\xdf\xea\xd1\x2c\x38\xcd\xd3\xe4\xc2\xa1\x75\xc0\x5c\xab\x44\x0e\x37\x22\xaf\xd0\x83\xb2\x10\x13\x30\x48\xe3\x42\xa5\x5a\x23\x70\x13\x9b\xc0\x0b\x6d\x10\xa4\x1a\xea\x63\x18\x3b\x57\xda\xe3\xa3\xa3\x91\x74\x51\x86\xa7\xba\x28\x2a\x25\xdd\xe4\x88\xc5\xb1\x1c\x54\x24\x0e\x8f\x32\xbc\xc1\xfc\xc8\xca\x51\x5f\x98\x74\x2c\x1d\xa6\xae\x32\x78\x24\x4a\xd9\xe7\xc5\x2a\x96\xe3\x49\x91\xfd\x0f\x13\xa4\xbe\xdd\x9f\x01\xdf\x42\x62\x86\x28\x36\x57\xc2\x9a\x84\xa7\xa7\x22\xdf\xdd\xef\xa5\x01\x29\xbd\x22\xa8\xbc\x7e\x72\x71\x09\x71\x01\x1e\xec\x1e\xc2\x4d\x53\xdb\x00\x9b\x00\x25\xd5\x10\x8d\x6f\x39\x34\xba\xe0\x51\x50\x65\xa5\x96\xca\x79\x96\xce\x25\x2a\x07\xb6\x1a\x14\xd2\x59\xa6\x39\xb4\x8e\xf0\x90\xc0\x29\xab\x30\x18\x20\x54\x25\x71\x52\x96\xc0\x99\x82\x53\x51\x60\x7e\x2a\x2c\xbe\x77\x50\x13\x44\x6d\x9f\xc0\xb7\x39\xb0\xdb\x1a\x78\xbe\xc3\x1c\x8f\x01\x44\x0d\xb9\x51\xe3\x65\x4c\x09\x9e\x03\x17\x49\x60\x58\xc1\x8b\xf4\x88\x2c\x33\x68\x17\x7c\x98\x63\x48\xdf\xd0\xd3\xc9\x58\x5b\xc2\x9f\x70\xf0\xea\xf9\x0b\x48\x85\x82\xca\x22\x31\x4f\xaa\x95\x22\x82\x70\x1a\x04\xe9\xb2\x3e\xde\x49\xcb\x04\x64\x70\x24\xad\x33\x93\x04\x9e\x6a\x53\x08\x77\x0c\xdf\xc4\x57\x7d\x1e\x4e\x1b\x90\xe5\x77\xc7\xdf\x94\xda\xb8\xef\xe0\x95\xca\x27\x34\x68\x06\xb7\x63\x54\x70\x51\xef\x0d\xbe\x6d\xfd\x78\x66\xca\x34\x81\xb3\x91\xd2\x26\xb6\x24\xaa\x3a\x2b\xc4\x08\x61\x28\x31\x67\xba\xb6\xe8\x92\x59\x0c\xae\xc4\x22\x78\x73\x69\x28\x47\x2f\x44\xb9\x16\x34\xa7\xb1\x25\xcd\x45\xd3\xb7\x95\x77\xf3\xd1\x69\x26\x65\xda\x12\xfd\x29\xd2\x6b\x10\x61\x96\x42\x94\x7d\xcb\x6c\xd3\x02\xd3\x66\x10\x38\x8d\x03\x10\xfc\x9a\xd7\x67\x41\x72\x25\xdb\x6e\xbb\xbd\xb3\xad\xfb\x36\x66\xc8\x5a\xa0\xbd\x58\xa4\x45\x36\x98\x63\x64\xca\xf4\x5c\x67\x7e\xdb\x6b\x67\x79\xd6\x6e\x0d\x78\x57\x6a\x8b\x16\x32\x39\x1c\xa2\x21\xb9\xa3\x6f\xd0\x18\x99\xa1\x85\xa1\x36\x8c\xaf\x52\x67\xcc\x93\x35\xfe\xa6\x54\xed\xb9\xce\x36\x45\x0c\x4d\xcd\x0a\xc3\x13\x63\x20\xc3\xa5\xdb\x5d\xc8\xed\xb0\x86\x79\xe9\x11\x43\x36\xff\x27\x8b\xbf\xce\xc0\xe3\x24\x34\x8e\x94\x1a\x2c\xaa\x20\x3a\xf6\x2d\x6d\x7f\xdf\xd6\x63\x2e\x5a\xee\x06\x4b\xde\x64\xd9\xf4\x28\x9d\xe1\xc9\x9a\xe5\xcf\x6d\xe1\x31\xff\x18\xa0\xe5\xee\xf5\x52\x59\x83\x67\x55\xce\xa2\xa6\xca\xa7\x31\xba\x6c\x1f\x1b\xee\x65\xd3\xfd\xf8\x76\x38\x44\x63\x30\x7b\x5c\x11\xfd\x5e\xd4\xab\x0a\x42\xca\xbf\x7e\x72\x87\x69\xb5\x8c\xc7\x96\x6e\x9d\x8c\xe2\xb0\x4d\x34\x70\x2b\xf3\x3c\x4c\x47\x02\x25\x7e\xa0\xfd\xb2\x1d\x43\xe0\xb1\x5e\x48\x5b\xe1\xa4\x1d\x4e\x18\x1c\x35\xc0\xf0\x8e\x74\x36\x7b\x2c\x4c\xf1\x72\x28\x31\x83\xc1\x24\xa8\x6b\x12\x9e\x3d\x18\x54\x0e\xa4\x63\x5d\x9e\x8e\xb5\xb6\x08\xc2\xc3\x9d\xc7\xbd\x91\x9a\x2d\x25\xd0\x0a\x49\xfe\x14\xa4\x90\x03\xe3\xb4\x86\x4f\x78\xe5\x4d\x37\x69\xa1\x20\x89\x5f\xc3\x2a\x92\x23\x0d\x73\x2b\xdd\x98\x7f\x8c\xc8\xe4\x26\x2b\xcc\x56\x05\x0d\x7a\x8b\x72\x34\x76\xb6\x07\x32\xc1\x84\xb1\x8b\x22\x1d\xb7\x86\x2d\x10\x9d\x05\x91\xe7\x71\x09\x6d\x92\xf0\x7a\xb3\x20\x13\x05\x0e\x6a\x1b\x26\xd8\x1b\xbd\x5a\xaf\xce\x62\x6d\x21\xb8\x7a\x80\x2e\x4d\x0e\x7b\x90\xea\xa2\xac\x1c\xc1\x84\xd6\x38\x98\x80\x74\x64\x67\x7b\x7b\xc9\xe8\x6a\xe4\x77\x82\x79\x98\x38\x1a\xab\x5e\x33\x91\x70\x20\x1f\x51\x8d\x60\xcf\x6f\x6e\x2f\xda\x9f\x34\x9c\xf4\x9b\xe0\xfd\x15\xc2\xa5\xe3\x60\x02\xa7\xda\x18\xb4\xa5\x56\xdc\x93\xbf\x3c\x69\xd6\xf6\xcf\xba\xd3\x81\x3d\x6c\x80\x39\x96\xa3\x71\x84\xa5\x30\xc8\xef\xa6\x71\xb0\x8a\x47\x1a\x3e\x11\xc6\x4c\xf9\x92\x8b\x1e\xe9\xb0\x58\xc3\x25\x73\xa4\x7d\xa2\x00\x8b\xd2\x4d\x5a\x34\xd1\xc2\x9e\x43\x53\xd4\x30\x60\x04\x33\xbb\x5a\xbf\x3f\x59\x94\xb9\x4c\xa5\x0b\x14\x02\x0f\xe1\x80\x49\x44\x3a\x12\x65\xa0\x74\x5f\x97\x87\x09\x9c\x70\xf8\x62\x83\x09\x94\xae\xc7\x0f\x03\xd1\xa4\x56\x37\x63\xad\xdd\xdb\x86\x42\xc5\x3f\xcb\x6d\xba\xf9\xa7\x1f\xd6\x8f\x2a\x9d\xb5\xf2\x16\x37\xf7\x30\x59\xdb\x74\x53\xf1\x16\x5b\xc7\x35\x6c\xd2\x7a\x16\xd5\x9e\xa4\x2d\xe6\x98\x92\x4b\x4a\xb0\xef\x81\xb0\x56\xa7\x92\xac\xfc\x86\x68\xa7\x29\xdd\xef\x64\x3d\xec\x61\x5b\xf8\xc3\xd6\xfb\xa7\x67\x96\xf1\x36\xed\x37\x07\x8d\x5c\x92\xf1\x3b\x9c\x81\xca\x94\xc0\x1a\x4c\xf8\xeb\xbe\x85\x5c\x0c\x30\xb7\x9b\x01\x01\xb6\xe2\xda\xe6\xd9\x90\x7f\x97\x6e\x68\xe9\x46\x82\x8f\x59\x23\x9e\x84\x36\xf9\x66\x42\x2a\x1b\xfc\xe7\x1e\x08\xb8\xc6\x89\x77\xb5\xc9\x83\x8f\x81\x0b\x6e\x6c\xd0\xab\x1b\x22\x8e\x6b\x9c\x70\xa3\xe0\x77\x6f\xb1\xdc\xad\x89\xc3\x3f\xdb\xb0\x69\xf3\xf4\x69\xa1\x5b\xf6\x88\x9b\xde\xa2\xdb\xf6\xf4\xeb\x9f\x6b\x5c\x69\x79\x2d\x7a\xe6\x4c\x12\xa6\x49\xc6\x07\x23\x89\xf5\x57\xc4\xb1\x28\xcb\x5c\x22\xfb\xf3\x5b\x4e\xb3\xd2\x0b\x58\xf5\x44\xe8\xdd\x6b\x5f\xaf\xeb\x80\x86\x27\xc8\x7d\xeb\x89\x8f\x38\x7d\x2c\x4b\xef\xdf\x5a\x64\xc6\x8d\x91\x9f\x9f\x44\x2e\x9b\x50\x9b\x65\x3d\x7b\xa6\x7a\xf0\x52\x3b\xfa\xdf\x13\xf2\x84\x6d\x0f\x1e\x6b\xb4\x2f\xb5\xe3\x9f\x09\x3c\x73\x9e\xd6\x9f\x6f\x28\xd9\xde\x01\x80\xfc\x7a\xef\x05\x9e\x13\xe5\x65\x0a\x6d\xbf\x1d\x33\xb2\x09\x9c\x79\xb3\xa5\x66\x5c\x69\xe1\x4c\x91\x71\x18\xc0\xc0\x51\x3c\x6e\x1b\x86\x28\x2a\xcb\x41\x1e\xa5\x55\x9f\x6d\x80\x85\x63\x78\xe8\xd1\x38\x6d\xf8\xad\x18\x6e\xf9\x50\xcf\x38\xd6\xf0\x7c\x69\xe7\xb1\xb8\x61\x93\x4e\xaa\x51\x5e\x1b\x6f\x3d\xb8\x1d\xcb\x74\xec\xad\xee\x01\xfa\xd0\x60\x69\x90\x14\x96\xb0\x24\xaa\xe8\xcd\x08\x0d\x19\xbb\x32\x8e\xe7\x03\x93\xb9\x48\x31\x83\x8c\x4d\x4b\x1f\x64\x13\x0e\x47\x32\x85\x02\xcd\x08\xa1\x24\x4d\xb2\x1b\xf6\xb7\x13\xec\xfe\xd9\x5a\xbc\xb7\x27\xdc\x8a\xdc\x58\x45\x3e\x25\x5b\xf7\x2f\xd2\x8e\x6c\x57\x77\xda\xb1\xd3\x8e\x33\x4f\xa7\x1d\xeb\xa7\xd3\x8e\x6b\x9e\x4e\x3b\x76\xda\xf1\xbd\x6b\x47\xef\xcb\xee\xe0\x3c\xff\xdb\x87\x38\x66\xbd\x65\xd6\xb4\x31\x4d\x37\xed\x36\x93\xbe\xb9\x08\x02\xe7\x92\x5d\x6d\xe9\x93\x24\x46\xa8\x11\xc2\xa3\xfe\xa3\x87\x0f\xb7\x71\xaa\x03\x22\x37\xea\x31\x0c\x99\x1e\xa9\xdc\x97\x5f\xac\xec\xb1\x2c\xfe\xf6\x0e\xa2\xa6\x81\xc6\xeb\x40\xde\x94\xed\xb0\x24\xf0\xc9\xd2\x49\x69\x07\x05\x3a\x10\x6e\x2a\x54\x24\x0b\xec\xd5\xa9\x02\x26\xf8\x90\xa5\x8c\x11\xd8\x0c\xb4\x0a\x71\x3c\x02\x7e\xb2\xdb\x0a\x52\x14\x3e\xa5\x36\xc0\x7a\x15\xba\xa0\x59\xa5\x72\x91\x5d\x68\x09\x18\xa1\x02\x07\x98\x8c\x12\xc8\x2a\xee\x26\x54\x48\x9b\x1e\xfa\xd5\xda\x89\x75\x58\x70\x24\x57\x1b\xfe\x1f\x2d\xdb\x99\x09\x35\xc6\x1b\x54\xae\x12\x79\x3e\x01\xbc\x91\xa9\xab\xf7\xc7\x59\x5b\xe9\x7c\xb0\x7d\xb3\x10\xe1\x46\xa6\xc3\xe6\xe6\x42\x7f\x8e\x82\xed\x9a\x3e\xdb\x68\xfb\xb9\xb1\x37\xe1\xc9\x19\x5d\xe8\x77\x92\x2c\x35\x56\x1d\x8d\xeb\x63\xe0\xfc\x27\x13\xd7\xab\xd7\xeb\x43\xae\xb0\xb5\x24\xdb\x42\x7a\xcd\x9a\xa5\x55\x9e\x13\x61\xf8\x28\xec\xfc\x06\x16\x44\x47\xfd\x96\xa6\x88\xd9\x07\xde\x7d\x88\xf9\xe4\xe5\x63\x82\x0a\xb5\xb9\xd4\xa5\xce\xf5\x68\xd2\x86\xb4\x2f\x2f\x92\x45\x19\x83\xe3\x02\x6c\x35\x08\x46\x03\x91\xdf\xcb\x19\xd4\x74\x91\xbf\x2e\xf2\xd7\xf9\x36\x73\x4f\xe7\xdb\xd4\x4f\xe7\xdb\xac\x79\x3a\xdf\xa6\xf3\x6d\xba\xc8\x1f\x74\xda\x71\x05\x4c\x3a\xed\x08\x9d\x76\x5c\xba\xaf\x4e\x3b\xae\x04\x4f\xa7\x1d\x3b\xed\xb8\xe8\x29\x75\x76\x8f\x42\xc7\x52\x67\x2b\xea\x1c\x7d\xd4\x27\xd5\xfd\x5c\xa7\xc2\x85\xba\x7c\xea\x12\xe2\x7c\x56\x14\x3e\x10\xd5\x83\xdf\xb4\x42\x5f\xbc\x46\xb8\xe1\x70\x92\x76\x63\x34\xd4\xfc\xc0\x1e\xae\x2c\x6c\xea\xea\x24\xbb\x3a\xc9\x8f\xbe\x4e\x72\x2c\xac\xc7\xab\x17\x4a\xcb\xcb\x26\x5b\x0c\x79\x89\xa6\xf8\x44\xab\x26\x89\x5c\x02\xba\xf9\xc4\x53\x83\x52\xbf\xf3\x2c\xe4\x0b\x30\x3b\x9f\xde\x6f\xb0\x97\x79\x53\x22\xcb\x30\x83\x12\x4d\xdf\x93\x88\x86\xa1\x54\xd9\x82\xbd\x46\xf8\x7c\xd0\xea\xc7\xe9\x7d\x7c\xc0\x12\xc8\xe9\x85\xec\x10\x73\x6d\x07\x8e\xa7\x24\xfc\x47\x51\x10\xb9\xad\x55\xdf\x07\x17\x82\xbc\x3f\x6c\x68\xd7\x6f\x6f\x9a\xb3\x41\x1d\x43\xc2\xbb\xfb\x95\x6c\x96\xff\x5a\xa1\x99\xf0\xf9\x8f\xc6\x60\xad\xcf\xd6\x85\x1c\x99\xb4\x90\x0a\xeb\x35\xc5\xb6\xae\xe5\x96\x6e\xd4\x6e\x7e\xca\xee\x91\x68\x98\x85\xcb\xec\x50\xde\x27\x8d\x3e\xb8\x87\xd9\x42\x27\x7c\x41\x16\xa0\x89\xfe\x6f\xb5\x9e\x5d\x4d\xb7\x9d\x0c\xb7\x85\x44\xf1\x11\x3b\xe7\xb0\xbb\x83\x0e\x3b\x3b\xe9\xb0\x93\xa3\x0e\xbb\x3a\xeb\x70\x0f\x87\x1d\x76\x73\xda\x61\x96\x14\x08\x43\xc1\xca\x7a\x3f\xfe\x3b\xdc\xc7\x45\x85\x7b\xf8\xf1\x30\xbb\xd5\x9a\x4c\xcd\xfb\x72\xea\x99\xd6\xa7\xfc\xfa\xbf\x1a\x58\xbb\xf9\xf4\x30\x0b\xaa\xe0\x0c\x4b\x76\x68\x3f\x11\x0f\xff\x2f\x71\xb7\xe1\x5e\x2e\x37\xec\xee\x76\xc3\xee\x94\xc1\xaa\xee\x39\xa7\x53\xef\xab\x30\xfd\x28\x5e\x45\xf0\x19\xdc\x21\xfc\x4e\x9a\x80\xf1\xf2\x27\x94\x42\x1a\x4b\xf6\x5d\x88\x99\xb4\xbf\x05\xef\xbc\x3d\x4c\xe1\x8f\x10\x93\xa8\xbe\x11\x39\xe9\x1e\x5f\xc7\x11\xfc\x22\x1a\x7d\x56\x4d\xf7\xe0\x76\x4c\xde\x26\x49\xa9\xfa\xbc\xf3\xde\x35\x4e\xf6\x7a\x73\x84\xb4\x77\xa6\xf6\xbc\x8e\x9a\x23\x9d\x5a\xa1\x69\x95\x4f\x60\x8f\xbf\xed\xbd\x6b\xcd\xbe\x83\xe2\x6a\x5f\xa1\xb2\xab\x5e\xd8\x81\x4a\x54\xbc\xd6\xe5\xdd\x1b\x9b\x5e\x8b\xf8\xc4\x46\x9c\xc5\x36\x0a\x86\x4b\x2d\x5a\xca\xa5\xae\x1a\x61\x1a\xe3\xf7\x59\x74\x7e\x2b\x15\x6e\xba\x88\x67\xce\xc3\x60\x5e\x49\xcd\x97\x34\x05\xc4\x6b\x85\x96\x0d\x3b\xac\x43\x44\xad\xce\xdc\x36\xf1\xe5\x20\x8d\xb6\x53\xd9\x6c\x81\x48\xd3\x83\x6d\xc4\x02\x85\xb2\xb0\x17\x63\x4f\xfb\xb6\x69\xb1\x97\x34\xa7\xfb\xea\x11\x0f\x7e\xff\xf3\x70\xea\x44\x5f\x33\x60\x67\x69\x77\x96\x76\x67\x69\x6f\xd1\xab\xb3\xb4\x97\x3f\x9d\xa5\xbd\xc5\xd3\x59\xda\x9d\xa5\xbd\x6a\xe2\xce\xd2\xee\x2c\xed\xf5\x93\xef\x66\x69\xef\x5a\x27\xd4\xb6\x7b\x43\x72\xce\x5f\x64\x26\x9c\x4c\x9b\x1a\xa2\xd8\xca\xff\xf5\x6e\xed\xed\xb6\x2d\xbd\xd8\xda\x6e\x5b\xe4\x73\xbe\x45\xb2\xc6\xb4\xae\x8d\xef\xb9\x9e\xab\xad\xee\x8f\xab\x16\x6a\x07\xda\x68\x25\x14\x76\x24\x8e\xcb\x98\x0a\x0f\x17\xff\x0d\xb0\xc9\x93\x67\x70\x10\x33\x2e\x87\x04\x7c\xa5\xdd\xf4\x47\xe5\x64\xbf\x69\x51\xe7\x60\x38\xbd\x38\x75\xde\x66\x2a\x2d\x51\x67\xdd\xeb\x4c\x71\x83\x4f\x12\x21\x68\xa6\xd6\x20\x6d\xb8\xde\x90\xab\x25\x4c\xa5\x14\x8d\xaa\x55\x4c\x1f\x7b\x99\xe3\xef\xe3\x0b\x94\xe7\x8d\x25\x5e\x0f\x5b\x4c\x0d\x94\x5a\xf9\x4e\xe1\xfc\x15\x88\xa1\x94\x5f\xab\x90\x11\xa5\x37\x31\xeb\x1b\x89\x92\x77\x24\xeb\xd9\x13\x78\xc2\x74\xd8\x1e\x58\x5a\x86\x8f\xc8\x73\x7d\xbb\x8d\x48\xfa\xab\x8e\x45\xdd\x6e\x7d\x2c\x6a\x26\x7f\xd7\x9d\x8a\xfa\x2f\x39\x15\xc5\x1f\x3d\x0b\xbd\xf3\xe3\x51\xf0\xef\x70\x01\xa1\x41\x06\x55\x51\xe5\x4e\x96\x4d\xad\x94\xf5\x53\xe5\xde\xca\x1c\x86\xca\x93\x69\xba\xa4\xd9\x44\x3a\x9e\xa5\x4f\x1e\x8f\x6b\xab\x2c\x33\x6d\xa8\xee\x10\x79\x1e\xce\x14\x45\x93\xd4\x97\xb0\xc8\x0f\x5d\x99\xf0\x38\xdc\xd9\x5a\x7b\x33\x2c\x64\x0e\x48\x16\xe6\x84\x50\x92\x6a\x2b\x84\xa8\x77\x8a\x6e\x30\xaa\xde\x91\xbc\x41\xd5\x48\xd2\x03\x7b\x78\x18\x75\xf8\x3b\x95\xf0\xef\x45\x42\x7f\xd3\x92\xa4\xdf\x6d\x22\xa3\x79\x43\xb5\x94\x6e\xc0\xd7\xc8\xe8\x0f\x59\x82\xb1\x4d\x9e\x7f\xbb\x18\xc3\x0e\xf9\xfd\xbf\x30\xb7\xff\xe9\x9c\x2c\xfb\xc0\x11\xc6\x0f\x51\x5b\xff\xd1\x47\x15\xbb\xe2\xfa\xe6\xb9\x6f\x71\xfd\x7b\x8f\x1c\x7e\xd8\x1a\xfb\x4f\x20\x5a\xf8\x21\x6b\xec\xbb\x08\xe1\x4a\xa4\x7c\x6c\xa5\xef\xd3\xcf\x4e\x11\xc1\x2e\x1a\xb8\xb3\x16\xde\x52\xe1\xdc\x37\x0a\xb8\x25\x45\xec\x98\x67\xef\x72\xec\x7f\x4d\x8e\xbd\xb3\x78\x37\x7c\x3a\x8b\x77\x29\x50\x3a\x8b\x17\x3a\x8b\x77\xdd\xf6\x3a\x8b\x77\x25\x78\x3a\x8b\x77\x25\x52\x3a\x8b\xb7\xb3\x78\xe1\x53\xb3\x78\x77\xb9\xa5\xab\xcb\x75\xdf\x2b\xd7\xbd\xad\xb4\xd8\x4a\x46\x6c\x49\x07\x5b\xe7\xb6\xbb\xbc\xf6\xc7\x92\xd7\xde\xf8\xc0\xbf\x72\xf2\xbe\x87\xfe\xdb\xb8\x5a\x76\xf2\x5f\xdc\x68\x99\x41\x59\xb9\x70\x9e\xba\x3b\xfd\xff\x2e\x4e\xff\x4f\x41\xbe\xbb\x02\x60\xa3\x2b\x00\x96\xc1\xac\xbb\x07\xa0\xbb\x07\xe0\x1d\x27\xa1\xbb\x7b\x00\xba\x7b\x00\xba\x7b\x00\xe2\xd3\x9d\x4e\x82\xee\x74\xd2\x46\x4f\x77\x3a\x69\xf9\xd3\x9d\x4e\xfa\x68\xa3\xaf\xd0\x9d\x4e\xfa\xb8\x23\xb1\xd0\x9d\x4e\xea\xa2\xb3\x1b\x22\xea\x13\x3c\x9d\xd4\xdd\x03\xf0\xb1\xd6\x28\x40\x67\x69\x77\x96\x76\x67\x69\x77\x96\xf6\xea\xa7\xb3\xb4\xb7\x78\x3a\x4b\xbb\xb3\xb4\x57\x4d\xdc\x59\xda\x9d\xa5\xbd\x7e\xf2\xee\x1e\x80\x4f\xa8\x36\x02\xba\x7b\x00\xba\x7a\x89\xee\x1e\x80\xff\xde\x7b\x00\xa6\x72\xf7\x1f\xee\x32\x80\xed\x97\xd1\xdd\x08\xd0\xdd\x08\xd0\xdd\x08\xd0\xdd\x08\x10\x9f\xee\x46\x00\xff\x7c\x4c\xb1\xc6\xee\x7c\xd4\x52\xa0\x74\xe7\xa3\xa0\x3b\x1f\xb5\x6e\x7b\x9f\x40\xdc\xb0\x3b\x1f\xf5\x11\xc6\x0a\xbb\xf3\x51\x5d\x5c\x70\x16\x39\x9f\xc8\xf9\xa8\xee\x46\x80\x8f\x31\xdb\xde\x59\xbc\x1b\x3e\x9d\xc5\xbb\x14\x28\x9d\xc5\x0b\x9d\xc5\xbb\x6e\x7b\x9d\xc5\xbb\x12\x3c\x9d\xc5\xbb\x12\x29\x9d\xc5\xdb\x59\xbc\xf0\xa9\x59\xbc\xdd\x8d\x00\xdd\x8d\x00\xdd\x8d\x00\x9f\x62\x86\x7b\x2d\xa6\x0b\x2c\xb4\x99\x5c\x0a\x33\xc2\xa5\x59\xed\x29\x74\xee\xbd\x68\xf5\x20\x09\x39\x94\xa3\xca\x04\x03\xfc\x6f\xcf\x5e\xbd\x78\xf2\xe2\xf9\xd9\x8b\xb3\xcb\x00\xaf\xa1\xf6\x2e\xee\xe8\xf5\xf9\x29\xa4\xc2\x89\x5c\x8f\xe0\x5c\x67\x41\xe9\x7a\xeb\x5f\x0f\x5d\x58\x08\xe4\xb2\x90\xae\xee\x65\xd1\xdc\xa0\xe9\x05\xb8\x71\xf2\xbb\x52\x4e\x16\xe8\x53\xb7\xc2\x39\x62\x4d\x92\x03\x05\xa2\xe3\x73\xee\x85\xb8\x46\x02\x14\x8c\x2a\x61\x84\x72\x18\x51\x21\x9d\xef\x94\x69\xb0\x3a\x98\x0f\x32\xf8\x18\xb4\x0e\x8b\xc1\x52\x38\x8f\x99\xe1\xb1\xb8\xf1\x07\xaa\x87\x9a\x60\x4e\x44\x51\xe8\x4c\x0e\x65\xea\x8d\x3c\x28\x44\x56\x67\xfd\x82\xae\x40\x53\x13\x50\xb3\x81\x63\xe8\xcf\x81\x07\xd5\x8d\x34\x5a\xb1\x06\xbb\x11\x46\x8a\x41\x1e\x76\x35\xf0\x01\x01\x1e\xb7\x59\xa0\x82\xc1\x84\xfc\x1c\x3f\x52\x80\x56\x38\xf9\xbe\xa2\xdf\x54\x73\x0f\xdc\x99\xc6\x5f\x3c\x7c\xf8\x3f\xeb\xe3\xec\xbe\xd3\x95\xf2\xd8\xf1\x12\xb3\xe1\x5b\xea\x21\x87\x20\xdd\x3e\x71\x8c\x25\xcf\x87\x46\x30\x98\x55\x69\x84\x94\x76\xa5\x91\x5e\x2b\x8b\x1a\xe1\x1e\x0c\xc4\x5d\x45\x45\x0c\x40\x02\xc1\x5a\x39\xc8\xb1\x47\x6c\x2f\xdb\x6d\x07\x48\xc0\xe3\x1e\xcc\x9a\x37\x48\x2b\x27\x72\xf3\x12\x17\x91\x78\x5f\xf3\x59\x77\xe1\xf9\x3c\xc3\xa1\xa8\x72\xcf\x1a\x1e\x37\x8c\xdf\x89\xae\x48\x14\x64\x78\x07\xb2\x10\x23\x7f\xf6\x5e\xc0\x50\xe6\xd8\x8f\x39\xf4\x54\xa4\x63\xec\x41\x86\xa4\x5b\xa4\x42\x10\x30\xd2\x3a\x23\x15\x63\xf4\x9d\x2c\x78\xb4\x40\x8f\x35\x7c\x06\x13\xc8\x74\x35\xc8\x6b\x2c\xcb\xdf\x6a\xc9\x50\x8a\xf4\x9a\xe6\xe2\x81\x41\x38\x38\x72\x45\x79\xc4\xbf\xc2\x7f\x43\x0b\x9b\xfc\x62\xb5\x8a\xa2\xaa\xb5\xcc\x64\x06\xfe\xd2\xc2\x00\xad\xeb\xe3\x70\xa8\x8d\xfb\x27\x41\xab\x52\x4c\xad\x4a\xd7\x5b\x8f\x48\xad\x2c\x7a\x1d\xa7\x34\x13\xf2\x14\xe6\xb5\x59\xc0\xa1\x2d\x72\x48\xf6\x96\x48\x80\x92\x38\xcd\xa8\x63\xf8\xbf\x07\x57\x9f\xff\xd1\x3f\xfc\xfe\xe0\xe0\xcd\xc3\xfe\xd7\x6f\x3f\x3f\xb8\x4a\xf8\x8f\xcf\x0e\xbf\x3f\xfc\x23\xfe\xf8\xfc\xf0\xf0\xe0\xe0\xcd\x0f\x2f\x9e\x5d\x9e\x3f\x79\x2b\x0f\xff\x78\xa3\xaa\xe2\xda\xff\xfa\xe3\xe0\x0d\x3e\x79\xbb\xe1\x20\x87\x87\xdf\xff\x6d\xc9\x82\x84\x9a\xbc\x1a\x2e\x57\x46\xfd\x0d\x6b\x5e\xfa\x9b\xa8\xc2\xbb\xfe\x75\x35\x40\xa3\xd0\xa1\xed\x4b\xe5\xfa\xda\xf4\x7d\x87\x63\x70\xa6\xc2\x85\xdd\x48\xe2\xaf\x0b\x14\x4e\xc9\xd5\x97\xad\x0e\x33\x41\x91\x70\x53\x44\xf0\x59\x68\xca\x5a\x40\x92\x5e\xe5\xeb\x10\x5c\xa3\xaf\x12\xb8\x58\xd0\x93\xd5\x52\x68\xb1\x6f\xbd\x02\xb3\xb3\xe3\xcc\xd4\xc1\x78\xc1\xc9\x63\x2e\xd9\xc2\x06\x66\xec\x76\x46\xeb\x5a\x7c\x94\x46\x6a\x23\xdd\xe4\x34\x17\xd6\xbe\x14\x05\x6e\x04\xdd\xb3\x61\x63\x0c\xf4\x88\xd9\x48\x86\x07\xa5\xe5\x0d\xb4\x38\x2e\x4b\x0e\xd2\xb3\xad\xf6\x11\x42\xb1\x4d\xcd\x33\x91\xfb\xb4\x81\xdf\xd0\xe8\x70\xd1\x87\x41\xaf\xab\xe3\xe7\xd5\xc0\x5b\xb1\x57\x8b\x69\xc5\x7b\xd5\xca\xe1\x9d\x3b\x65\x65\xbb\x99\x96\xbe\x58\xd4\x15\x52\xa1\x68\xd9\x7c\xd1\xcb\x10\x7e\xce\x71\x24\xd2\xc9\xcf\xb4\xfc\x9f\x0d\xd2\x42\xc8\x16\xf9\xd9\x1b\xdb\xa7\x5e\x1e\x5f\x70\x25\xc2\x7e\xb8\xb9\xc7\x02\x4a\xbe\x98\x47\xaa\x5f\xbc\xe1\x52\xdb\x64\x86\xeb\xdb\x4a\x9d\x25\x04\xb9\x64\x66\xed\x2c\x93\xea\x8f\xb5\xb2\x7c\xf3\xd9\xdb\xb9\x96\xc1\x05\x23\x27\x8f\xd4\x6e\x9b\x3e\x4d\xc5\x02\x93\x04\x5b\xdc\x20\x9c\x64\x85\x64\xaf\x0f\x0e\xce\x2f\x4e\x0e\xa7\x76\x42\xfa\xda\xab\x98\x4c\xa3\x55\xfb\xce\x2b\xbd\x31\xda\xc6\xd3\x63\xb5\xc1\x85\x16\x9e\x5b\xb8\xd2\x22\xce\x49\x00\x63\xe7\x6f\x80\xf5\xe4\x17\x27\xf0\xf3\x40\x58\xcc\xa5\x42\x0f\xbb\xd2\xc8\x1b\x99\xe3\x88\x66\x6c\xc5\xad\xe1\xb4\x32\x06\x95\xcb\x27\xf1\x06\x98\xc5\x58\x91\x96\x04\xfa\x34\xb9\x45\xca\xaa\xad\xce\x1a\x59\xd4\xda\x62\x96\xc0\x05\xf7\x98\xf8\x10\x45\x68\xc7\xb8\x61\xbd\xb8\x0c\xb9\x60\xd0\xd2\xc0\x52\xf9\x5e\x32\xf3\x2a\x0e\x8d\x21\x97\x87\xab\xc2\x2a\xcb\x06\x70\x9e\xa1\xa9\xd5\x32\xab\x26\x1b\x4d\xb1\x94\x4d\x82\x50\x3a\x17\x00\xb3\x00\xf0\xcb\xf7\x3c\x6d\x54\x38\x5d\xaf\x97\xb5\xdf\x19\x2d\x6e\x58\xb9\xca\x20\xe9\x7f\xc6\x2e\xf3\x5c\x1b\x34\x33\x76\x4c\x7b\xfa\x5e\xbd\xec\x42\xc8\x40\x6a\x36\xce\x69\x70\x50\xc9\x9c\xbd\x40\x59\xef\xcf\x7a\x42\x16\xf5\x74\x7a\x08\xba\x2c\xc2\xf5\x4b\x55\x59\x6a\xe3\x1a\xdf\x20\x6d\xf3\x46\xb0\xdd\x17\x00\x80\x96\x55\x1a\x2c\x85\xa9\x25\xb6\x45\x48\xc7\x42\x91\xfa\xa7\x8d\xbe\xd0\x5c\x2a\xe7\xeb\x2d\x69\x5a\x31\xd0\x95\x63\x1a\x0b\xbc\x3a\xd4\x95\xca\x80\x84\xca\x31\x8c\x9d\x2b\xed\xf1\xd1\x51\xa3\x8f\x12\xa9\x8f\x32\x9d\xda\xa3\x54\xab\x14\x4b\x67\x8f\x22\x37\x1d\x95\x3a\xeb\xc7\x1f\x7d\x11\x99\xe4\x68\x7f\x99\x8e\xdf\x40\x13\x06\xc8\x1f\x83\xc7\xd5\x92\x56\xa8\xaa\x15\x97\xcd\xf4\x57\x77\xa6\x06\x0d\x18\x17\x36\x72\x3a\xe7\xab\x99\x56\x64\x60\xa6\x1d\xd0\xa6\x7d\x7d\x45\x52\x6d\x98\xb6\xa4\xdb\xbe\x6d\x0f\xbd\x5a\x68\xaf\x72\xcc\xd7\xb8\xe2\x73\xd7\x23\xb1\x6c\x23\x73\xaf\x59\x28\x1b\x00\xce\x09\xbe\x20\x89\x0c\x7a\xff\x85\xc4\x95\x9a\x00\xd1\xb3\x0b\xb7\x65\xb5\xae\x8f\x72\x86\xeb\x37\xbf\xa9\xa3\x69\x3d\x1c\x0e\x31\x75\xdf\x05\x7e\xae\xe3\x6a\xcc\xdc\x31\x02\xf6\x4d\xfc\xeb\xbb\xe5\x1e\xe5\x46\xc1\xaa\xcd\xd2\x0d\x7e\x49\xab\xc3\x08\x53\x10\x7a\xc2\x1d\x66\x54\xb6\x87\x80\x1f\x8b\xbd\x3f\x0e\xc8\x06\x9f\xd9\x07\x5f\x82\xbd\x43\x32\xa3\xd5\xd8\x06\x09\xd7\x92\xb6\xc1\x9f\x6e\x22\x7f\x08\x2f\x75\x28\x64\xc6\x1e\x9c\xf3\xdd\x52\xcd\x1b\x56\x64\x2f\xb5\x2f\x69\x5e\x6a\x17\xb5\xe1\xb6\x36\xce\xb2\x36\xe1\x32\x05\x90\x1f\x9a\xf4\x8a\xdf\xd9\x54\x7a\xa5\xa1\xe0\xa9\xe8\xd9\x2a\xc8\x5c\xe3\xa4\x09\xc9\x87\xe4\x0d\x47\xbc\x7a\x0d\x95\x44\xe3\xd3\x47\xd8\xff\x19\x6a\x12\x75\x31\x90\xca\x4f\xe6\x87\x8e\xa8\xe0\xd1\x23\x40\x55\xc6\x3f\x79\x9a\x77\x01\xae\xcd\xb2\x38\x53\x30\x7b\xb5\x45\xce\xa6\x8e\x02\x2f\xce\xd6\xb4\x52\x34\x4f\x7e\xad\x44\x9e\xc0\x63\x2f\x15\x79\xf7\xe1\x55\x68\x34\x17\xb5\xbe\x95\x79\x96\x0a\x93\xb1\x36\xf0\x3c\x0a\x56\x7b\xec\x89\xda\xe0\x88\xdc\xde\xe0\xc8\xdf\x9d\x06\xa5\x30\x4e\xa6\x55\x2e\x58\x6d\xe1\x48\x9b\xc9\x3b\x81\x68\x43\x34\x17\x98\x6a\x95\xad\x09\x24\x2e\x91\xae\xa1\x6f\x1b\xc6\x6c\x46\xa1\x91\xa1\x44\x58\x16\x38\x4b\xa4\x07\xd3\xce\x8d\x1e\x46\xae\xae\x59\xac\xe7\xad\x9a\x5b\xc9\x66\x59\xdb\x2b\x96\xfe\x8c\xc1\x61\x4b\x3c\xd6\x5c\x91\xc0\xbf\x26\x51\x5f\xf5\x40\xba\x18\x3d\x63\xbf\x39\xcc\x19\x48\x36\x00\xbb\x61\xa8\xa1\x36\x78\x83\x06\x0e\x32\xcd\x7d\xb8\x8c\xfe\x30\x81\xff\x90\x89\xef\x63\x10\x23\x5f\xf1\x1d\x48\x3c\x5a\x22\x8e\x2f\x3b\xe4\x28\xe2\x43\x38\xf0\xd5\xf7\xb2\x28\x30\x93\xc2\x61\x3e\x39\xf4\x05\x18\xb1\x7e\x7f\x13\xd4\x6d\x72\x68\xa3\x75\x58\xe3\xab\xbf\xaf\x68\xc9\x8b\xdd\x02\xb3\x3f\xc5\xc8\x58\x03\x19\x6f\x65\xce\xa0\xb0\xd6\x41\x7a\x45\x52\xae\x95\x84\x6b\xd9\x7e\x51\xcc\xd4\x08\xfe\x85\xe8\x40\x80\xc1\x11\x53\xb9\xa7\xdc\x7b\xd0\xb8\x4c\x17\x1f\x3a\x59\xa3\xd1\x56\xe7\xf5\xfb\x40\xe6\xff\x57\x7f\xcf\x84\x13\x4b\x1a\x78\x9c\x4f\xca\x45\xc1\x81\x75\x8a\xb2\x19\x7c\x19\xb2\x36\x88\xea\x86\xe9\x77\x1a\x81\x4d\xfd\x45\x3d\xa7\x5d\x6a\x0e\xa9\xf9\x3c\x6f\xc4\x77\xdf\xe0\x48\x5a\x67\x26\xad\x70\xa8\x0f\xbd\x39\x0d\x52\x59\x27\x94\x93\x2c\xd9\x20\xb6\xec\x87\xd8\x20\x99\xdf\x09\xbc\x22\x5f\x8b\x63\x58\xb7\xa4\xa6\xbd\x81\x7d\x39\x29\x11\xbe\x6d\xfd\x78\x66\xca\x94\x69\x2d\x08\x1a\x4f\x5c\x22\xcb\x0c\xda\x79\xf9\xb0\x88\x7c\x56\xee\x3f\xba\xf9\x6b\x41\xb0\x7f\x1e\x03\x02\x21\xb7\x64\xad\x1c\x91\x95\x19\x4f\x7b\xc5\xd8\xf0\x94\xb5\xe9\xbd\x02\xee\x28\x7f\x63\x6e\x2a\x6a\x25\x20\x5d\xb4\xfb\x53\xad\x6c\x55\xc4\xa2\x2d\xf2\x7a\x4a\x54\x19\xaa\x74\xc2\xc7\x03\xf2\x1b\x34\x09\xfc\x68\x09\x53\xf0\xbf\xe5\x88\xfc\xbe\x30\x69\xdb\x54\x8a\xa7\x4e\x66\x56\x20\x6d\xeb\xce\x4c\x2e\x43\x23\x1b\x28\x8e\x80\xd9\x4c\x7b\x1b\x53\xe1\xb3\x8b\xa8\x7c\xac\xf5\xb2\x3e\x95\x16\x83\xa0\x11\x2e\x9e\xe1\x69\x4b\x23\xed\x0f\x20\x95\xda\xca\x78\x5a\xa6\x96\xa3\x53\x27\xdb\xf4\xd0\x9f\x3b\xf3\xe3\x4e\x3b\xc2\x5c\x53\x31\xb3\x19\x76\xdc\x2a\xe5\x81\x8f\xed\x28\x4d\x14\x33\x0f\xfd\x50\x8b\xfa\xb9\x78\x11\xf1\xf4\x92\x1b\x99\x6e\x84\xba\xc6\x0c\x72\xbc\x93\xa9\x1e\x19\x51\x8e\x65\xca\x87\xab\x88\x4d\x39\x48\xc6\x47\xaa\x44\x81\xc9\xfe\x52\x42\x5b\x26\xc6\xcb\x6a\x90\x4b\x3b\xc6\x85\xb6\xcc\x4a\x1a\xb5\x98\x1a\x74\x0b\x25\xc8\x14\x89\x5e\xf8\x76\x8d\x52\x8e\x15\x29\x61\x80\x50\x71\xe5\x69\x8e\x19\x8f\x40\x9c\xa6\xc4\x48\x31\xad\xd1\x5c\x78\x5b\xc3\x30\x81\x33\x17\x03\xd3\xd4\xe3\x1a\xb1\xf4\x94\xc6\xa9\x51\x5b\x70\x4c\xc5\x4a\x95\xa2\x3f\x22\xe6\x8f\xda\x21\xc6\x30\xa3\x33\x12\xbd\x19\x84\x1c\xe0\x8f\xb8\x41\xe5\x16\x1b\x35\xab\xfd\xae\x15\x3e\xd7\x6a\x30\xd6\x32\x65\x3d\x24\x1b\x59\x14\x75\x22\xfd\x4d\xa0\xe4\x2f\xdb\x62\xd0\x9f\xe8\xbb\xf0\xa5\x25\xeb\x65\xcd\x8f\x53\xcd\x43\xc2\xd2\xc2\x58\xdf\x86\x91\x66\x99\x36\x44\x6c\x22\x6e\x33\x69\x53\xe2\x74\xcc\xe0\x54\x2b\x1b\x8f\xf5\x09\xe5\x4f\xea\xdd\x88\xdc\x93\x42\x1c\xb8\xd4\x39\xe7\x37\xb2\x2a\xba\x13\xbe\xfa\x0e\x8b\x01\xf2\x75\xbc\x36\x2e\x65\x89\x9a\x5b\xa3\x62\xd7\x69\xc1\xa8\x1f\xce\x75\x9e\xaf\xd6\x62\x2b\xfd\xd2\x4d\xbc\xd2\x08\x80\x8d\xaf\x42\x3f\x8b\x10\x0b\xb1\x38\xa2\xe9\x26\x83\xc4\xa4\x41\xa6\x6e\x0d\xd8\x01\xba\x5b\x44\x05\xe9\x18\xd3\x6b\xdb\xe4\x90\xf9\x62\xec\x19\xac\x85\xf8\xd3\xb4\xc4\xaa\xed\x29\xc2\x0a\x3b\x1a\x16\xd1\xa7\xcd\x14\xde\xb6\x63\x56\x0b\xd4\x0d\xa9\xe8\x1b\x21\x73\x31\xc8\xfd\x71\xd6\xfa\x57\xaf\xbd\x0e\x19\xf5\x79\x59\xe5\x79\x48\x22\x71\xd6\xd6\x19\x31\x1c\xca\x94\xd3\xe4\xd2\xf8\xa8\x6f\x50\x6c\x0b\xb7\xb0\xfe\xb2\xf6\x05\x1c\x61\x9d\x70\xd5\x1c\x8e\x56\x20\x78\x15\x62\xc9\x0f\x91\x4b\x03\x44\x33\x57\x1c\x4f\x39\x2b\xb4\x0c\xf4\xce\xd6\x54\xfc\x3b\x81\x97\xda\x85\x1b\xca\x5f\xa0\x25\xb5\xcb\x00\x7a\x8d\xc2\x6a\xd5\x92\xae\x6c\xfd\x1a\x39\x92\x4a\xe4\x61\x53\xed\xf8\x5e\xed\x7b\x08\x0e\x29\x17\x72\x64\x84\xab\x85\x62\xb3\xee\xa0\x5d\x82\x5e\xf4\x91\xd0\x04\x4e\xd4\x84\xf1\x3d\x44\xe1\x38\xe7\x2e\x95\x33\x3a\xab\x52\x0c\x19\xeb\xca\xb6\x07\x79\xa7\x62\x74\x3a\xbd\x70\x1a\x27\x69\x6a\xa4\x32\x74\x42\x86\x94\x92\x56\x08\xc2\x96\xe4\xc7\x45\x9a\xf4\xa1\xf0\x06\xc0\xac\x2c\x4e\xce\xcf\xe0\x75\x38\xec\x98\x40\xbf\xdf\xf7\x79\x4f\xeb\x4c\x95\xb2\x7e\x21\x16\x52\x59\xd0\x14\x9e\xfa\x78\x93\xa2\x55\x5e\x18\x22\x1f\xde\x04\x2b\x85\x1b\x43\xe2\x01\x9f\xb4\x40\x01\xf0\x94\x74\xcd\x9d\x28\x4a\xa2\xfb\x2b\xe5\xa5\xf7\x53\xad\x2f\x3c\x92\xfc\x9c\xbf\xc3\xd1\xd1\x2c\x4d\xe8\x01\x99\xa8\x21\x80\xc8\xa4\x31\xd4\x7a\xdf\x4e\x6f\x29\xa1\x8e\x3f\x28\x7d\xab\x16\xcd\xce\x73\x09\x83\xc7\x70\xb5\x77\x12\xb9\xef\x6a\xaf\x07\x57\x7b\xe7\x46\x8f\xb8\x6c\x4d\x8d\xae\x42\x1d\xda\xd5\xde\x63\x1c\x19\x91\x61\x76\xb5\x47\xc3\x7e\xce\xf5\x86\x2f\xd0\x8c\xf0\x07\x9c\x7c\xcb\x83\xd5\xaf\xa3\x46\xf8\xd6\x97\x26\xd2\x7b\x52\xc1\xa4\xa7\xbe\x2d\x44\x59\xbf\x78\x21\xca\xba\xf3\x69\x43\x67\x6f\xde\x16\xe8\xc4\xcd\xa3\xa4\xc1\xe8\xcf\xbf\x58\xad\x8e\xaf\xf6\x9a\xf5\xf7\x74\x21\xb9\xd2\x62\x72\xb5\x07\x53\xb3\x1e\x5f\xed\xf1\xbc\xf1\x7d\x5c\xe4\xf1\xd5\x1e\xcd\x44\xaf\x8d\x76\x7a\x50\x0d\x8f\xaf\xf6\xb8\x80\xa1\xf7\xa8\x67\xb0\xec\x91\xc1\xf4\x6d\x33\xc3\xd5\xde\xcf\x84\x93\xa3\xa3\x90\xc2\x08\x97\xbf\xff\xb9\x38\x58\xbd\x56\xee\xaf\xab\xcb\xee\x43\x2e\xac\xbb\x34\x42\x59\x9e\xff\x52\x16\x8b\xd3\xb8\xde\x97\x63\x7e\x5f\xfa\xdd\xb0\x0c\x58\xfa\xd9\x53\xc3\xd2\xcf\x4b\xb4\xe7\x26\x9a\x6b\x7e\x0f\x1b\x46\x9d\xe7\x3b\x36\x05\xdb\x64\xcf\xc5\x38\x4d\x8d\x1f\xd2\x01\xa1\x35\x86\x8b\x04\x88\xc5\x83\x7c\xe3\x72\x4c\xc6\x5b\xa8\xea\x69\x1c\xfc\xdb\x70\xc9\x00\x54\x2a\x43\x93\x73\xb2\xaa\x19\xd5\x67\x42\xb2\x04\x7c\xdc\x40\xd4\x51\x9a\x6b\x62\x24\xd6\x4e\xaa\x15\xbc\xf6\x85\x3f\x71\x44\x92\x1d\xe1\x9e\x05\x3f\x0c\x2b\xba\x34\xc5\xd2\xb1\xa6\xdb\x3d\xc5\x0c\xad\xa0\x0a\x59\x56\x7d\xb7\x9c\x3c\x02\x71\x6c\x08\xf8\xd0\xda\xe7\xf7\xc7\x55\x21\x48\x75\x88\x8c\x6b\x7f\xea\x6f\xde\x7d\xf3\xee\x96\x17\xa9\x3e\x29\xe4\x63\xfc\x11\x0f\x01\xd4\x41\x91\x88\xfa\x40\xcd\x9a\x88\xc9\x46\x9b\x2f\xc4\xdd\x73\x54\x23\x37\x3e\x86\x2f\xbf\xf8\x5f\x5f\xfd\x63\x49\x43\x2f\x18\x31\x7b\x86\x2a\xc4\x82\x36\x04\xc3\x7c\xc7\xd9\xa0\x61\x42\x52\x29\x13\x4e\x24\xa3\xa6\x4d\x1d\xe4\x6e\x28\xe8\x56\x70\xe1\x56\x50\x97\x55\x49\x70\x79\xca\x05\x80\xd6\x09\x95\x62\x8f\x8c\xa4\x85\x83\xc9\x5a\x80\xe7\x13\x78\xf4\x85\xff\x47\x52\x78\xea\x39\xf1\xfd\xe6\xee\x6d\xb2\x60\xc9\xd2\xc2\xd7\xbd\x99\xf5\x48\x0b\x84\x2a\x3d\x64\xc2\xf1\x2e\xa6\x41\xaf\x09\x63\x30\x60\x5e\x13\x62\xbd\xde\x75\x88\x5b\x17\x0f\xdc\x2c\x16\x58\x48\x25\x8b\xaa\x38\x86\x87\x4b\x9a\x78\x91\xb6\x21\x36\x7d\xe3\xc6\x10\x10\x24\xba\x46\x46\x14\x05\x97\xfa\xca\x0c\x95\x93\x43\xc9\x45\x03\x35\x69\xb3\xbb\xef\x3b\xc6\x1a\x94\x1a\x8a\x5c\x9e\x42\x72\xa8\x45\xec\xe7\xde\xce\x31\xac\x81\x43\xf6\x26\x6d\x0b\xa8\x49\x89\x9e\x1b\xbc\x03\x03\x78\x57\x7a\x53\xb5\x95\x86\x28\x50\x28\xa9\x46\xb6\xa9\xe7\x0a\xff\x40\x0e\x7d\xbc\x1d\x63\xc8\x9e\x63\x3b\x17\x94\x92\xb3\x94\xb1\xdf\x24\x9a\x9a\xc2\x8c\xc4\x8f\xb7\xd1\x67\x63\x9a\x64\x39\x16\x98\x9f\x0a\x8b\x91\x1b\xdb\xd5\x5c\xf1\xb6\x96\xfa\xf4\xc1\x3b\x63\xd5\x47\x0f\xbf\x58\x89\xf2\xba\xdd\xf2\x14\x5e\x5d\xe6\xf5\xe6\xa4\xff\x1f\xd1\xff\xed\xed\x41\xf8\xe3\x61\xff\xeb\xff\xd7\x3b\x7e\xfb\x59\xeb\xe7\xdb\xe5\xd5\x59\x8b\x8d\xf9\x25\xe4\x13\x94\x48\xb4\x13\x23\x46\x7b\xb1\x4a\xe5\xd2\x54\xd8\x83\xa7\x22\xb7\xd8\x83\x1f\x15\xab\x86\x7b\x02\x6d\x75\x86\x9a\xb4\xf2\x1e\xcd\xba\x2c\x53\x1e\x9a\xf0\x92\x56\xb7\x09\xcb\x5d\xe5\xbe\x6e\x06\xa4\x18\x6a\x68\x49\x1a\xd5\xa2\x33\x5f\xf2\x3c\xd4\x3a\x09\x16\x6e\x92\xea\xe2\xa8\xfe\xee\x4d\xeb\x17\x42\x4d\xa0\x11\x6b\xde\x28\x9d\xa5\x74\xeb\x48\x36\x89\xd4\x68\x6b\x9b\x7b\x48\x20\x97\xd7\x08\x27\x8d\xdf\x48\xc2\x72\x80\xa9\x60\x5b\xdc\x0c\xa4\x33\xc2\x07\x7d\xa3\x5d\xd9\x44\x94\x86\x55\x0e\x07\xe4\xae\x26\x5c\x48\x36\x27\x5d\xc3\x9d\x46\x62\x20\x73\xfe\xa7\x65\xc8\x95\x4e\xb5\x1a\xe6\x32\xb8\x00\x45\xa9\x8d\x13\xca\xc5\x83\x17\x23\xbc\xf3\xff\x9a\x95\x4f\x3b\x48\x0b\x07\x99\xb2\x8f\x1e\x7d\xf1\xe5\x45\x35\xc8\x74\x21\xa4\x7a\x5a\xb8\xa3\xc3\xef\x0f\x7e\xad\x44\xce\x59\xde\x97\xa2\xc0\xa7\x85\x5b\xfe\xef\x02\x6d\xad\x16\x1f\x7d\xb5\x01\x17\x1d\xbc\xf1\xbc\xf2\xf6\xe0\x4d\x3f\xfc\xf5\x59\x7c\x75\xf8\xfd\xc1\x55\xb2\xf2\xfb\xe1\x67\x47\x5c\x23\x59\xb3\xdc\xdb\x37\xfd\x86\xfd\x92\xb7\x9f\x1d\x7e\xdf\xfa\x76\xb8\x88\x19\xa7\x4a\x17\xc9\x0b\xe8\x17\xa2\xec\x5f\xe3\x64\x09\x73\x2e\x35\x47\xe7\x07\xf2\x10\x2b\x44\xb9\xc8\xfb\x1e\xca\xd1\x0b\x51\xbe\xc6\x21\x1a\x54\xe9\x42\x22\xbf\x67\x06\x86\xfc\x87\x15\x9f\xb8\x02\x6b\x87\xa8\x13\xe9\x1d\x1f\x69\x5b\x65\x4e\x6f\x40\x2d\x9b\xd9\x8f\x6a\x45\xfd\xe2\xda\x49\xea\x7d\xee\x3c\x42\xe4\xef\x9f\x7c\xfc\x68\xe7\x71\x2a\xb9\xd4\xd3\x9a\x8e\x61\x9e\x3d\xf6\xa6\x2f\x8b\x1e\x36\xe7\xc6\x9a\xfc\xbc\x4a\xc9\x5f\x2b\x84\xb3\xc7\xf5\x91\x5f\xa9\xd2\xbc\xe2\x4b\xc6\x7e\xfc\xf1\xec\x31\xf9\xef\xff\x0a\xe2\xe6\x16\x21\xd3\x6a\xdf\xc1\xab\x97\xcf\xff\x0f\x07\x03\xb8\x45\xcf\x2b\xf4\x70\xee\x30\x97\xc2\x87\xc9\x82\x02\x86\x7f\xa1\xaf\x93\xe3\x99\x53\x51\xd6\xf1\x13\x16\x77\x5c\x61\x95\x97\x96\x4f\x0f\x80\xad\x4c\x58\x1d\x0d\xec\x33\xbe\x7c\x3a\x29\xe4\x83\xe3\xc1\x87\x5c\xb8\xe5\xe7\x30\x56\x02\x2d\xd5\x4a\x61\xca\x49\x73\xb2\x02\xdf\x03\x7f\x10\x21\xbf\x0a\x36\x2b\xcf\xb1\x03\x33\x84\x84\xda\xce\x64\x41\x6b\x38\xf5\x3b\x7d\xef\x9c\x34\xb7\xdf\x9d\x66\xf4\xf1\x4c\xce\x6c\xbe\x5e\x13\x7f\x9e\x2b\xe3\x9a\x76\x9d\xa7\xa2\x87\x21\xb6\x5a\x27\x47\xc7\xc2\xc2\x00\x51\x71\x38\xd7\x47\xff\x50\x05\xaa\xc3\x26\x10\x5b\x95\x7d\xa7\xfb\xd9\x62\xe4\xad\x81\xdc\x7a\xa8\xad\xf0\x5c\x67\x4e\xef\x6f\xeb\xa8\xde\x8e\x27\x8b\x60\x60\x9b\xcb\xcc\x6a\x1b\x64\xdb\x8d\x2d\x77\x4c\x66\xa2\xba\xec\x59\x84\xa0\x46\xf0\x33\xe6\x97\x44\xde\xe3\x54\x64\xc3\x69\xce\xe6\x4d\x47\xf6\xb6\x5f\xa3\x47\xf3\x05\x9a\x1b\xb9\x93\xf2\x5b\xc7\x98\xa9\xaf\x33\x39\x79\xff\x6c\x45\xa6\xd7\xce\x93\x70\xe8\x2f\xd5\x6b\xd2\x37\x2b\xeb\xdf\x19\x82\xab\xaa\xfc\xb7\x19\x63\x5b\x65\xe9\xa5\xc9\xd4\x21\x0f\xeb\xb4\xe1\x94\x7b\xfb\x5d\x35\xa8\x0d\xe5\x66\xf4\xe0\x03\xc1\xef\x7f\x3e\xf8\xff\x01\x00\x00\xff\xff\x3e\xcb\x2d\xc0\x3f\xed\x00\x00") func operatorsCoreosCom_catalogsourcesYamlBytes() ([]byte, error) { return bindataRead( diff --git a/staging/api/pkg/operators/v1alpha1/catalogsource_types.go b/staging/api/pkg/operators/v1alpha1/catalogsource_types.go index c4c7662d37..53bd40ca40 100644 --- a/staging/api/pkg/operators/v1alpha1/catalogsource_types.go +++ b/staging/api/pkg/operators/v1alpha1/catalogsource_types.go @@ -7,6 +7,7 @@ import ( "github.com/sirupsen/logrus" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ) @@ -145,6 +146,21 @@ type GrpcPodConfig struct { // +kubebuilder:validation:Enum=legacy;restricted // +kubebuilder:default:=legacy SecurityContextConfig SecurityConfig `json:"securityContextConfig,omitempty"` + + // MemoryTarget configures the $GOMEMLIMIT value for the gRPC catalog Pod. This is a soft memory limit for the server, + // which the runtime will attempt to meet but makes no guarantees that it will do so. If this value is set, the Pod + // will have the following modifications made to the container running the server: + // - the $GOMEMLIMIT environment variable will be set to this value in bytes + // - the memory request will be set to this value + // - the memory limit will be set to 200% of this value + // + // This field should be set if it's desired to reduce the footprint of a catalog server as much as possible, or if + // a catalog being served is very large and needs more than the default allocation. If your index image has a file- + // system cache, determine a good approximation for this value by doubling the size of the package cache at + // /tmp/cache/cache/packages.json in the index image. + // + // This field is best-effort; if unset, no default will be used and no Pod memory limit or $GOMEMLIMIT value will be set. + MemoryTarget *resource.Quantity `json:"memoryTarget,omitempty"` } // UpdateStrategy holds all the different types of catalog source update strategies diff --git a/staging/api/pkg/operators/v1alpha1/clusterserviceversion.go b/staging/api/pkg/operators/v1alpha1/clusterserviceversion.go index ffc357b12b..a4c8d17469 100644 --- a/staging/api/pkg/operators/v1alpha1/clusterserviceversion.go +++ b/staging/api/pkg/operators/v1alpha1/clusterserviceversion.go @@ -120,12 +120,19 @@ func (c *ClusterServiceVersion) IsObsolete() bool { // IsCopied returns true if the CSV has been copied and false otherwise. func (c *ClusterServiceVersion) IsCopied() bool { - operatorNamespace, ok := c.GetAnnotations()[OperatorGroupNamespaceAnnotationKey] - if c.Status.Reason == CSVReasonCopied || ok && c.GetNamespace() != operatorNamespace { - return true + return c.Status.Reason == CSVReasonCopied || IsCopied(c) +} + +func IsCopied(o metav1.Object) bool { + annotations := o.GetAnnotations() + if annotations != nil { + operatorNamespace, ok := annotations[OperatorGroupNamespaceAnnotationKey] + if ok && o.GetNamespace() != operatorNamespace { + return true + } } - if labels := c.GetLabels(); labels != nil { + if labels := o.GetLabels(); labels != nil { if _, ok := labels[CopiedLabelKey]; ok { return true } diff --git a/staging/api/pkg/operators/v1alpha1/clusterserviceversion_test.go b/staging/api/pkg/operators/v1alpha1/clusterserviceversion_test.go index 26136c99d9..0f73c906b4 100644 --- a/staging/api/pkg/operators/v1alpha1/clusterserviceversion_test.go +++ b/staging/api/pkg/operators/v1alpha1/clusterserviceversion_test.go @@ -430,3 +430,68 @@ func helperNewConditions(count int) []ClusterServiceVersionCondition { return conditions } + +func TestIsCopied(t *testing.T) { + var testCases = []struct { + name string + input metav1.Object + expected bool + }{ + { + name: "no labels or annotations", + input: &metav1.ObjectMeta{}, + expected: false, + }, + { + name: "no labels, has annotations but missing operatorgroup namespace annotation", + input: &metav1.ObjectMeta{ + Annotations: map[string]string{}, + }, + expected: false, + }, + { + name: "no labels, has operatorgroup namespace annotation matching self", + input: &metav1.ObjectMeta{ + Namespace: "whatever", + Annotations: map[string]string{ + "olm.operatorNamespace": "whatever", + }, + }, + expected: false, + }, + { + name: "no labels, has operatorgroup namespace annotation not matching self", + input: &metav1.ObjectMeta{ + Namespace: "whatever", + Annotations: map[string]string{ + "olm.operatorNamespace": "other", + }, + }, + expected: true, + }, + { + name: "no annotations, labels missing copied key", + input: &metav1.ObjectMeta{ + Labels: map[string]string{}, + }, + expected: false, + }, + { + name: "no annotations, labels has copied key", + input: &metav1.ObjectMeta{ + Labels: map[string]string{ + "olm.copiedFrom": "whatever", + }, + }, + expected: true, + }, + } + + for _, testCase := range testCases { + t.Run(testCase.name, func(t *testing.T) { + if got, expected := IsCopied(testCase.input), testCase.expected; got != expected { + t.Errorf("got %v, expected %v", got, expected) + } + }) + } +} diff --git a/staging/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go b/staging/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go index cf01001f5c..b4459a00a4 100644 --- a/staging/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go +++ b/staging/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go @@ -733,6 +733,11 @@ func (in *GrpcPodConfig) DeepCopyInto(out *GrpcPodConfig) { *out = new(string) **out = **in } + if in.MemoryTarget != nil { + in, out := &in.MemoryTarget, &out.MemoryTarget + x := (*in).DeepCopy() + *out = &x + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GrpcPodConfig. diff --git a/staging/api/pkg/validation/internal/csv.go b/staging/api/pkg/validation/internal/csv.go index b5b7683c0c..f0c1853851 100644 --- a/staging/api/pkg/validation/internal/csv.go +++ b/staging/api/pkg/validation/internal/csv.go @@ -3,6 +3,7 @@ package internal import ( "encoding/json" "fmt" + "github.com/blang/semver/v4" "io" "reflect" "strings" @@ -45,6 +46,8 @@ func validateCSV(csv *v1alpha1.ClusterServiceVersion) errors.ManifestResult { result.Add(validateExamplesAnnotations(csv)...) // validate installModes result.Add(validateInstallModes(csv)...) + // validate min Kubernetes version + result.Add(validateMinKubeVersion(*csv)...) // check missing optional/mandatory fields. result.Add(checkFields(*csv)...) // validate case sensitive annotation names @@ -240,3 +243,15 @@ func validateVersionKind(csv *v1alpha1.ClusterServiceVersion) (errs []errors.Err } return } + +// validateMinKubeVersion checks format of spec.minKubeVersion field +func validateMinKubeVersion(csv v1alpha1.ClusterServiceVersion) (errs []errors.Error) { + if len(strings.TrimSpace(csv.Spec.MinKubeVersion)) == 0 { + errs = append(errs, errors.WarnInvalidCSV(minKubeVersionWarnMessage, csv.GetName())) + } else { + if _, err := semver.Parse(csv.Spec.MinKubeVersion); err != nil { + errs = append(errs, errors.ErrInvalidCSV(fmt.Sprintf("csv.Spec.MinKubeVersion has an invalid value: %s", csv.Spec.MinKubeVersion), csv.GetName())) + } + } + return errs +} diff --git a/staging/api/pkg/validation/internal/csv_test.go b/staging/api/pkg/validation/internal/csv_test.go index 44f1ae8700..6925216aad 100644 --- a/staging/api/pkg/validation/internal/csv_test.go +++ b/staging/api/pkg/validation/internal/csv_test.go @@ -6,8 +6,9 @@ import ( "path/filepath" "testing" - "github.com/ghodss/yaml" operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" + + "github.com/ghodss/yaml" "github.com/operator-framework/api/pkg/validation/errors" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -107,6 +108,16 @@ func TestValidateCSV(t *testing.T) { }, filepath.Join("testdata", "correct.csv.olm.properties.annotation.yaml"), }, + { + validatorFuncTest{ + description: "should fail when spec.minKubeVersion is not in semantic version format", + wantErr: true, + errors: []errors.Error{ + errors.ErrInvalidCSV(`csv.Spec.MinKubeVersion has an invalid value: 1.21`, "test-operator.v0.0.1"), + }, + }, + filepath.Join("testdata", "invalid_min_kube_version.csv.yaml"), + }, } for _, c := range cases { diff --git a/staging/api/pkg/validation/internal/operatorhub.go b/staging/api/pkg/validation/internal/operatorhub.go index f5da37a274..e82d102875 100644 --- a/staging/api/pkg/validation/internal/operatorhub.go +++ b/staging/api/pkg/validation/internal/operatorhub.go @@ -240,7 +240,7 @@ func checkSpecMinKubeVersion(checks CSVChecks) CSVChecks { if len(strings.TrimSpace(checks.csv.Spec.MinKubeVersion)) == 0 { checks.warns = append(checks.warns, fmt.Errorf(minKubeVersionWarnMessage)) } else { - if _, err := semver.ParseTolerant(checks.csv.Spec.MinKubeVersion); err != nil { + if _, err := semver.Parse(checks.csv.Spec.MinKubeVersion); err != nil { checks.errs = append(checks.errs, fmt.Errorf("csv.Spec.MinKubeVersion has an invalid value: %s", checks.csv.Spec.MinKubeVersion)) } } diff --git a/staging/api/pkg/validation/internal/operatorhub_test.go b/staging/api/pkg/validation/internal/operatorhub_test.go index 6e34062838..d8c049180f 100644 --- a/staging/api/pkg/validation/internal/operatorhub_test.go +++ b/staging/api/pkg/validation/internal/operatorhub_test.go @@ -218,7 +218,7 @@ func TestCheckSpecMinKubeVersion(t *testing.T) { }{ { name: "should work with a valid value", - args: args{minKubeVersion: "1.16"}, + args: args{minKubeVersion: "1.16.0"}, }, { name: "should return a warning when the minKubeVersion is not informed ", diff --git a/staging/api/pkg/validation/internal/testdata/badAnnotationNames.csv.yaml b/staging/api/pkg/validation/internal/testdata/badAnnotationNames.csv.yaml index af2c3e74fc..f95a02c6cb 100644 --- a/staging/api/pkg/validation/internal/testdata/badAnnotationNames.csv.yaml +++ b/staging/api/pkg/validation/internal/testdata/badAnnotationNames.csv.yaml @@ -14,6 +14,7 @@ metadata: alm-examples: '[{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdCluster","metadata":{"name":"example","namespace":"default"},"spec":{"size":3,"version":"3.2.13"}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdRestore","metadata":{"name":"example-etcd-cluster"},"spec":{"etcdCluster":{"name":"example-etcd-cluster"},"backupStorageType":"S3","s3":{"path":"","awsSecret":""}}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdBackup","metadata":{"name":"example-etcd-cluster-backup"},"spec":{"etcdEndpoints":[""],"storageType":"S3","s3":{"path":"","awsSecret":""}}}]' description: etcd is a distributed key value store providing a reliable way to store data across a cluster of machines. spec: + minKubeVersion: 1.21.0 displayName: etcd description: | etcd is a distributed key value store that provides a reliable way to store data across a cluster of machines. It’s open-source and available on GitHub. etcd gracefully handles leader elections during network partitions and will tolerate machine failure, including the leader. Your applications can read and write data into etcd. diff --git a/staging/api/pkg/validation/internal/testdata/badName.csv.yaml b/staging/api/pkg/validation/internal/testdata/badName.csv.yaml index 582aa8d933..ad306cc26a 100644 --- a/staging/api/pkg/validation/internal/testdata/badName.csv.yaml +++ b/staging/api/pkg/validation/internal/testdata/badName.csv.yaml @@ -11,6 +11,7 @@ metadata: alm-examples: '[{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdCluster","metadata":{"name":"example","namespace":"default"},"spec":{"size":3,"version":"3.2.13"}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdRestore","metadata":{"name":"example-etcd-cluster"},"spec":{"etcdCluster":{"name":"example-etcd-cluster"},"backupStorageType":"S3","s3":{"path":"","awsSecret":""}}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdBackup","metadata":{"name":"example-etcd-cluster-backup"},"spec":{"etcdEndpoints":[""],"storageType":"S3","s3":{"path":"","awsSecret":""}}}]' description: etcd is a distributed key value store providing a reliable way to store data across a cluster of machines. spec: + minKubeVersion: 1.21.0 displayName: etcd description: something keywords: ['etcd', 'key value', 'database', 'coreos', 'open source'] diff --git a/staging/api/pkg/validation/internal/testdata/correct.csv.empty.example.yaml b/staging/api/pkg/validation/internal/testdata/correct.csv.empty.example.yaml index 2aa19870d8..6c1db26e85 100644 --- a/staging/api/pkg/validation/internal/testdata/correct.csv.empty.example.yaml +++ b/staging/api/pkg/validation/internal/testdata/correct.csv.empty.example.yaml @@ -8,6 +8,7 @@ metadata: annotations: "alm-examples": "" spec: + minKubeVersion: 1.21.0 version: 0.9.0 installModes: - type: AllNamespaces diff --git a/staging/api/pkg/validation/internal/testdata/correct.csv.olm.properties.annotation.yaml b/staging/api/pkg/validation/internal/testdata/correct.csv.olm.properties.annotation.yaml index 6794c5121e..2d9773a5e6 100644 --- a/staging/api/pkg/validation/internal/testdata/correct.csv.olm.properties.annotation.yaml +++ b/staging/api/pkg/validation/internal/testdata/correct.csv.olm.properties.annotation.yaml @@ -9,6 +9,7 @@ metadata: alm-examples: '[{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdCluster","metadata":{"name":"example","namespace":"default"},"spec":{"size":3,"version":"3.2.13"}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdRestore","metadata":{"name":"example-etcd-cluster"},"spec":{"etcdCluster":{"name":"example-etcd-cluster"},"backupStorageType":"S3","s3":{"path":"","awsSecret":""}}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdBackup","metadata":{"name":"example-etcd-cluster-backup"},"spec":{"etcdEndpoints":[""],"storageType":"S3","s3":{"path":"","awsSecret":""}}}]' olm.properties: '[{"type": "foo", "value": "bar"}]' spec: + minKubeVersion: 1.21.0 version: 0.9.0 installModes: - type: AllNamespaces diff --git a/staging/api/pkg/validation/internal/testdata/correct.csv.with.conversion.webhook.yaml b/staging/api/pkg/validation/internal/testdata/correct.csv.with.conversion.webhook.yaml index 2bef1ecb2d..fc791c472d 100644 --- a/staging/api/pkg/validation/internal/testdata/correct.csv.with.conversion.webhook.yaml +++ b/staging/api/pkg/validation/internal/testdata/correct.csv.with.conversion.webhook.yaml @@ -11,6 +11,7 @@ metadata: alm-examples: '[{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdCluster","metadata":{"name":"example","namespace":"default"},"spec":{"size":3,"version":"3.2.13"}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdRestore","metadata":{"name":"example-etcd-cluster"},"spec":{"etcdCluster":{"name":"example-etcd-cluster"},"backupStorageType":"S3","s3":{"path":"","awsSecret":""}}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdBackup","metadata":{"name":"example-etcd-cluster-backup"},"spec":{"etcdEndpoints":[""],"storageType":"S3","s3":{"path":"","awsSecret":""}}}]' description: etcd is a distributed key value store providing a reliable way to store data across a cluster of machines. spec: + minKubeVersion: 1.21.0 displayName: etcd description: | etcd is a distributed key value store that provides a reliable way to store data across a cluster of machines. It’s open-source and available on GitHub. etcd gracefully handles leader elections during network partitions and will tolerate machine failure, including the leader. Your applications can read and write data into etcd. diff --git a/staging/api/pkg/validation/internal/testdata/correct.csv.yaml b/staging/api/pkg/validation/internal/testdata/correct.csv.yaml index 4dad396639..9ba9a487da 100644 --- a/staging/api/pkg/validation/internal/testdata/correct.csv.yaml +++ b/staging/api/pkg/validation/internal/testdata/correct.csv.yaml @@ -11,6 +11,7 @@ metadata: alm-examples: '[{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdCluster","metadata":{"name":"example","namespace":"default"},"spec":{"size":3,"version":"3.2.13"}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdRestore","metadata":{"name":"example-etcd-cluster"},"spec":{"etcdCluster":{"name":"example-etcd-cluster"},"backupStorageType":"S3","s3":{"path":"","awsSecret":""}}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdBackup","metadata":{"name":"example-etcd-cluster-backup"},"spec":{"etcdEndpoints":[""],"storageType":"S3","s3":{"path":"","awsSecret":""}}}]' description: etcd is a distributed key value store providing a reliable way to store data across a cluster of machines. spec: + minKubeVersion: 1.21.0 displayName: etcd description: | etcd is a distributed key value store that provides a reliable way to store data across a cluster of machines. It’s open-source and available on GitHub. etcd gracefully handles leader elections during network partitions and will tolerate machine failure, including the leader. Your applications can read and write data into etcd. diff --git a/staging/api/pkg/validation/internal/testdata/dataTypeMismatch.csv.yaml b/staging/api/pkg/validation/internal/testdata/dataTypeMismatch.csv.yaml index a915b115c7..5c65ee045b 100644 --- a/staging/api/pkg/validation/internal/testdata/dataTypeMismatch.csv.yaml +++ b/staging/api/pkg/validation/internal/testdata/dataTypeMismatch.csv.yaml @@ -11,6 +11,7 @@ metadata: alm-examples: '[{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdCluster","metadata":{"name":"example","namespace":"default"},"spec":{"size":3,"version":"3.2.13"}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdRestore","metadata":{"name":"example-etcd-cluster"},"spec":{"etcdCluster":{"name":"example-etcd-cluster"},"backupStorageType":"S3","s3":{"path":"","awsSecret":""}}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdBackup","metadata":{"name":"example-etcd-cluster-backup"},"spec":{"etcdEndpoints":[""],"storageType":"S3","s3":{"path":"","awsSecret":""}}}]' description: etcd is a distributed key value store providing a reliable way to store data across a cluster of machines. spec: + minKubeVersion: 1.21.0 displayName: etcd description: | etcd is a distributed key value store that provides a reliable way to store data across a cluster of machines. It’s open-source and available on GitHub. etcd gracefully handles leader elections during network partitions and will tolerate machine failure, including the leader. Your applications can read and write data into etcd. diff --git a/staging/api/pkg/validation/internal/testdata/invalid.alm-examples.csv.yaml b/staging/api/pkg/validation/internal/testdata/invalid.alm-examples.csv.yaml index 1d6bfc13bd..2eb8e9adb0 100644 --- a/staging/api/pkg/validation/internal/testdata/invalid.alm-examples.csv.yaml +++ b/staging/api/pkg/validation/internal/testdata/invalid.alm-examples.csv.yaml @@ -7,6 +7,7 @@ metadata: name: test-operator.v0.0.1 namespace: placeholder spec: + minKubeVersion: 1.21.0 displayName: test-operator install: strategy: deployment diff --git a/staging/api/pkg/validation/internal/testdata/invalid_min_kube_version.csv.yaml b/staging/api/pkg/validation/internal/testdata/invalid_min_kube_version.csv.yaml new file mode 100644 index 0000000000..a46f55ec79 --- /dev/null +++ b/staging/api/pkg/validation/internal/testdata/invalid_min_kube_version.csv.yaml @@ -0,0 +1,32 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + name: test-operator.v0.0.1 + namespace: placeholder +spec: + minKubeVersion: 1.21 + displayName: test-operator + install: + strategy: deployment + installModes: + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - test-operator + links: + - name: Test Operator + url: https://test-operator.domain + maintainers: + - email: your@email.com + name: Maintainer Name + maturity: alpha + provider: + name: Provider Name + url: https://your.domain + version: 0.0.1 \ No newline at end of file diff --git a/staging/api/pkg/validation/internal/testdata/noInstallMode.csv.yaml b/staging/api/pkg/validation/internal/testdata/noInstallMode.csv.yaml index f6d3e92977..db5eeae446 100644 --- a/staging/api/pkg/validation/internal/testdata/noInstallMode.csv.yaml +++ b/staging/api/pkg/validation/internal/testdata/noInstallMode.csv.yaml @@ -11,6 +11,7 @@ metadata: alm-examples: '[{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdCluster","metadata":{"name":"example","namespace":"default"},"spec":{"size":3,"version":"3.2.13"}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdRestore","metadata":{"name":"example-etcd-cluster"},"spec":{"etcdCluster":{"name":"example-etcd-cluster"},"backupStorageType":"S3","s3":{"path":"","awsSecret":""}}},{"apiVersion":"etcd.database.coreos.com/v1beta2","kind":"EtcdBackup","metadata":{"name":"example-etcd-cluster-backup"},"spec":{"etcdEndpoints":[""],"storageType":"S3","s3":{"path":"","awsSecret":""}}}]' description: etcd is a distributed key value store providing a reliable way to store data across a cluster of machines. spec: + minKubeVersion: 1.21.0 displayName: etcd description: | etcd is a distributed key value store that provides a reliable way to store data across a cluster of machines. It’s open-source and available on GitHub. etcd gracefully handles leader elections during network partitions and will tolerate machine failure, including the leader. Your applications can read and write data into etcd. diff --git a/staging/operator-lifecycle-manager/OWNERS b/staging/operator-lifecycle-manager/OWNERS index 1b8bbde740..8a849d2c6c 100644 --- a/staging/operator-lifecycle-manager/OWNERS +++ b/staging/operator-lifecycle-manager/OWNERS @@ -9,6 +9,7 @@ approvers: - dinhxuanvu - perdasilva - grokspawn + - joelanford # review == this code is good /lgtm reviewers: - ecordell diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml index 321b99467b..f678b426c3 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml @@ -532,6 +532,13 @@ spec: topologyKey: description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. type: string + memoryTarget: + description: "MemoryTarget configures the $GOMEMLIMIT value for the gRPC catalog Pod. This is a soft memory limit for the server, which the runtime will attempt to meet but makes no guarantees that it will do so. If this value is set, the Pod will have the following modifications made to the container running the server: - the $GOMEMLIMIT environment variable will be set to this value in bytes - the memory request will be set to this value - the memory limit will be set to 200% of this value \n This field should be set if it's desired to reduce the footprint of a catalog server as much as possible, or if a catalog being served is very large and needs more than the default allocation. If your index image has a file- system cache, determine a good approximation for this value by doubling the size of the package cache at /tmp/cache/cache/packages.json in the index image. \n This field is best-effort; if unset, no default will be used and no Pod memory limit or $GOMEMLIMIT value will be set." + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true nodeSelector: description: NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. type: object diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml index 77422915c5..e5a35991bd 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml @@ -687,7 +687,7 @@ spec: description: Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. type: string template: - description: Template describes the pods that will be created. + description: Template describes the pods that will be created. The only allowed template.spec.restartPolicy value is "Always". type: object properties: metadata: @@ -1340,7 +1340,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -1405,7 +1405,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -1455,7 +1455,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -1487,7 +1487,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -1591,7 +1591,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -1623,7 +1623,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -1675,12 +1675,29 @@ spec: description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' type: integer format: int32 + resizePolicy: + description: Resources resize policy for the container. + type: array + items: + description: ContainerResizePolicy represents resource resize policy for the container. + type: object + required: + - resourceName + - restartPolicy + properties: + resourceName: + description: 'Name of the resource to which this resource resize policy applies. Supported values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when specified resource is resized. If not specified, it defaults to NotRequired. + type: string + x-kubernetes-list-type: atomic resources: description: 'Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object properties: claims: - description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable." + description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable. It can only be set for containers." type: array items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. @@ -1704,7 +1721,7 @@ spec: - type: string x-kubernetes-int-or-string: true requests: - description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object additionalProperties: pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ @@ -1817,7 +1834,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -1849,7 +1866,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -2167,7 +2184,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -2232,7 +2249,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -2282,7 +2299,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -2314,7 +2331,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -2418,7 +2435,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -2450,7 +2467,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -2502,12 +2519,29 @@ spec: description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' type: integer format: int32 + resizePolicy: + description: Resources resize policy for the container. + type: array + items: + description: ContainerResizePolicy represents resource resize policy for the container. + type: object + required: + - resourceName + - restartPolicy + properties: + resourceName: + description: 'Name of the resource to which this resource resize policy applies. Supported values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when specified resource is resized. If not specified, it defaults to NotRequired. + type: string + x-kubernetes-list-type: atomic resources: description: Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources already allocated to the pod. type: object properties: claims: - description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable." + description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable. It can only be set for containers." type: array items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. @@ -2531,7 +2565,7 @@ spec: - type: string x-kubernetes-int-or-string: true requests: - description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object additionalProperties: pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ @@ -2644,7 +2678,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -2676,7 +2710,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -3005,7 +3039,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -3070,7 +3104,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -3120,7 +3154,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -3152,7 +3186,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -3256,7 +3290,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -3288,7 +3322,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -3340,12 +3374,29 @@ spec: description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' type: integer format: int32 + resizePolicy: + description: Resources resize policy for the container. + type: array + items: + description: ContainerResizePolicy represents resource resize policy for the container. + type: object + required: + - resourceName + - restartPolicy + properties: + resourceName: + description: 'Name of the resource to which this resource resize policy applies. Supported values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when specified resource is resized. If not specified, it defaults to NotRequired. + type: string + x-kubernetes-list-type: atomic resources: description: 'Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object properties: claims: - description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable." + description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable. It can only be set for containers." type: array items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. @@ -3369,7 +3420,7 @@ spec: - type: string x-kubernetes-int-or-string: true requests: - description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object additionalProperties: pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ @@ -3482,7 +3533,7 @@ spec: type: integer format: int32 grpc: - description: GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate. + description: GRPC specifies an action involving a GRPC port. type: object required: - port @@ -3514,7 +3565,7 @@ spec: - value properties: name: - description: The header field name + description: The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header. type: string value: description: The header field value @@ -3703,7 +3754,7 @@ spec: - name x-kubernetes-list-type: map restartPolicy: - description: 'Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' + description: 'Restart policy for all containers within the pod. One of Always, OnFailure, Never. In some contexts, only a subset of those values may be permitted. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' type: string runtimeClassName: description: 'RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class' @@ -3712,7 +3763,7 @@ spec: description: If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. type: string schedulingGates: - description: "SchedulingGates is an opaque list of values that if specified will block scheduling the pod. More info: https://git.k8s.io/enhancements/keps/sig-scheduling/3521-pod-scheduling-readiness. \n This is an alpha-level feature enabled by PodSchedulingReadiness feature gate." + description: "SchedulingGates is an opaque list of values that if specified will block scheduling the pod. If schedulingGates is not empty, the pod will stay in the SchedulingGated state and the scheduler will not attempt to schedule the pod. \n SchedulingGates can only be set at pod creation time, and be removed only afterwards. \n This is a beta feature enabled by the PodSchedulingReadiness feature gate." type: array items: description: PodSchedulingGate is associated to a Pod to guard its scheduling. @@ -3898,7 +3949,7 @@ spec: additionalProperties: type: string matchLabelKeys: - description: MatchLabelKeys is a set of pod label keys to select the pods over which spreading will be calculated. The keys are used to lookup values from the incoming pod labels, those key-value labels are ANDed with labelSelector to select the group of existing pods over which spreading will be calculated for the incoming pod. Keys that don't exist in the incoming pod labels will be ignored. A null or empty list means only match against labelSelector. + description: "MatchLabelKeys is a set of pod label keys to select the pods over which spreading will be calculated. The keys are used to lookup values from the incoming pod labels, those key-value labels are ANDed with labelSelector to select the group of existing pods over which spreading will be calculated for the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. MatchLabelKeys cannot be set when LabelSelector isn't set. Keys that don't exist in the incoming pod labels will be ignored. A null or empty list means only match against labelSelector. \n This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default)." type: array items: type: string @@ -4172,7 +4223,7 @@ spec: description: 'medium represents what type of storage medium should back this directory. The default is "" which means to use the node''s default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' type: string sizeLimit: - description: 'sizeLimit is the total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + description: 'sizeLimit is the total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ anyOf: - type: integer @@ -4240,7 +4291,7 @@ spec: type: object properties: claims: - description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable." + description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable. It can only be set for containers." type: array items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. @@ -4264,7 +4315,7 @@ spec: - type: string x-kubernetes-int-or-string: true requests: - description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object additionalProperties: pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml index 02411590d9..31e7ae877a 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml @@ -644,7 +644,7 @@ spec: type: object properties: claims: - description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable." + description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable. It can only be set for containers." type: array items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. @@ -668,7 +668,7 @@ spec: - type: string x-kubernetes-int-or-string: true requests: - description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object additionalProperties: pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ @@ -1002,7 +1002,7 @@ spec: description: 'medium represents what type of storage medium should back this directory. The default is "" which means to use the node''s default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' type: string sizeLimit: - description: 'sizeLimit is the total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + description: 'sizeLimit is the total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ anyOf: - type: integer @@ -1070,7 +1070,7 @@ spec: type: object properties: claims: - description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable." + description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. \n This field is immutable. It can only be set for containers." type: array items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. @@ -1094,7 +1094,7 @@ spec: - type: string x-kubernetes-int-or-string: true requests: - description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object additionalProperties: pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ diff --git a/staging/operator-lifecycle-manager/go.mod b/staging/operator-lifecycle-manager/go.mod index 66cd3d1558..496e1851e3 100644 --- a/staging/operator-lifecycle-manager/go.mod +++ b/staging/operator-lifecycle-manager/go.mod @@ -24,20 +24,20 @@ require ( github.com/onsi/gomega v1.27.7 github.com/openshift/api v3.9.0+incompatible github.com/openshift/client-go v0.0.0-20220525160904-9e1acff93e4a - github.com/operator-framework/api v0.17.6 + github.com/operator-framework/api v0.17.8-0.20230803152844-704ae942c4a9 github.com/operator-framework/operator-registry v1.27.1 github.com/otiai10/copy v1.2.0 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.15.1 github.com/prometheus/client_model v0.4.0 github.com/prometheus/common v0.42.0 - github.com/sirupsen/logrus v1.9.0 - github.com/spf13/cobra v1.6.1 + github.com/sirupsen/logrus v1.9.2 + github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.2 + github.com/stretchr/testify v1.8.3 golang.org/x/net v0.10.0 golang.org/x/time v0.3.0 - google.golang.org/grpc v1.53.0 + google.golang.org/grpc v1.54.0 gopkg.in/yaml.v2 v2.4.0 helm.sh/helm/v3 v3.12.2 k8s.io/api v0.27.2 @@ -73,7 +73,7 @@ require ( github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/adrg/xdg v0.4.0 // indirect github.com/alessio/shellescape v1.4.1 // indirect - github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect + github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v4 v4.2.0 // indirect @@ -89,7 +89,7 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/docker/cli v23.0.1+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v23.0.1+incompatible // indirect + github.com/docker/docker v23.0.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -118,7 +118,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/btree v1.0.1 // indirect - github.com/google/cel-go v0.12.6 // indirect + github.com/google/cel-go v0.15.3 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect @@ -136,7 +136,7 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/huandu/xstrings v1.4.0 // indirect github.com/imdario/mergo v0.3.13 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/itchyny/astgen-go v0.0.0-20200519013840-cf3ea398f645 // indirect github.com/jmoiron/sqlx v1.3.5 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -204,6 +204,7 @@ require ( go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.24.0 // indirect golang.org/x/crypto v0.7.0 // indirect + golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect golang.org/x/mod v0.10.0 // indirect golang.org/x/oauth2 v0.5.0 // indirect @@ -215,7 +216,7 @@ require ( golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect + google.golang.org/genproto v0.0.0-20230525154841-bd750badd5c6 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect diff --git a/staging/operator-lifecycle-manager/go.sum b/staging/operator-lifecycle-manager/go.sum index ae6760a140..116c4919f6 100644 --- a/staging/operator-lifecycle-manager/go.sum +++ b/staging/operator-lifecycle-manager/go.sum @@ -25,7 +25,7 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= @@ -86,8 +86,8 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves= -github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= 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= @@ -185,8 +185,8 @@ github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m3 github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190103212154-2b7e084dc98b/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v0.7.3-0.20190817195342-4760db040282/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= -github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= +github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -349,8 +349,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.12.6 h1:kjeKudqV0OygrAqA9fX6J55S8gj+Jre2tckIm5RoG4M= -github.com/google/cel-go v0.12.6/go.mod h1:Jk7ljRzLBhkmiAwBoUxB1sZSCVBAzkqPF25olK/iRDw= +github.com/google/cel-go v0.15.3 h1:W1wIeGuEs81+lBVU+cQRg1hkRT58Q6bNxvM5yn008S8= +github.com/google/cel-go v0.15.3/go.mod h1:YzWEoI07MC/a/wj9in8GeVatqfypkldgBlwXh9bCwqY= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -469,8 +469,8 @@ github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/itchyny/astgen-go v0.0.0-20200519013840-cf3ea398f645 h1:3gyXljUyTWWTv/NMFPvwgxJSdE9Mamg2r3x8HMBl+Uo= github.com/itchyny/astgen-go v0.0.0-20200519013840-cf3ea398f645/go.mod h1:296z3W7Xsrp2mlIY88ruDKscuvrkL6zXCNRtaYVshzw= github.com/itchyny/go-flags v1.5.0/go.mod h1:lenkYuCobuxLBAd/HGFE4LRoW8D3B6iXRQfWYJ+MNbA= @@ -664,8 +664,8 @@ github.com/openshift/api v0.0.0-20221021112143-4226c2167e40/go.mod h1:aQ6LDasvHM github.com/openshift/client-go v0.0.0-20221019143426-16aed247da5c h1:CV76yFOTXmq9VciBR3Bve5ZWzSxdft7gaMVB3kS0rwg= github.com/openshift/client-go v0.0.0-20221019143426-16aed247da5c/go.mod h1:lFMO8mLHXWFzSdYvGNo8ivF9SfF6zInA8ZGw4phRnUE= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/operator-framework/api v0.17.6 h1:E6+vlvYUKafvoXYtCuHlDZrXX4vl8AT+r93OxNlzjpU= -github.com/operator-framework/api v0.17.6/go.mod h1:l/cuwtPxkVUY7fzYgdust2m9tlmb8I4pOvbsUufRb24= +github.com/operator-framework/api v0.17.8-0.20230803152844-704ae942c4a9 h1:0rOIH8rbWsjhiZb14DD7V8Ohl0CjPkTYIbm/0G/nv1s= +github.com/operator-framework/api v0.17.8-0.20230803152844-704ae942c4a9/go.mod h1:lnurXgadLnoZ7pufKMHkErr2BVOIZSpHtvEkHBcKvdk= github.com/operator-framework/operator-registry v1.27.1 h1:yU4atKR69XKH/GHlhgTdKTOAv4qRZUIFVHgrJE4FyiE= github.com/operator-framework/operator-registry v1.27.1/go.mod h1:zVsP+QdutDReiSpASIYqbrixjoNEHZKAyBOgLz1jaXk= github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= @@ -756,8 +756,8 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV 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.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y= +github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= 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= @@ -773,8 +773,8 @@ github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHN github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= 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 v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -799,8 +799,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tebeka/strftime v0.1.3 h1:5HQXOqWKYRFfNyBMNVc9z5+QzuBtIXy03psIhtdJYto= github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ= @@ -924,6 +924,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/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-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -1275,8 +1277,8 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230525154841-bd750badd5c6 h1:62QuyPXKEkZpjZesyj5K5jABl6MnSnWl+vNuT5oz90E= +google.golang.org/genproto v0.0.0-20230525154841-bd750badd5c6/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/staging/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler.go b/staging/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler.go index dfb7b87049..88a421a713 100644 --- a/staging/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler.go +++ b/staging/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler.go @@ -219,6 +219,24 @@ func Pod(source *operatorsv1alpha1.CatalogSource, name string, img string, saNam if grpcPodConfig.Affinity != nil { pod.Spec.Affinity = grpcPodConfig.Affinity.DeepCopy() } + + // Add memory targets + if grpcPodConfig.MemoryTarget != nil { + pod.Spec.Containers[0].Resources.Requests[corev1.ResourceMemory] = *grpcPodConfig.MemoryTarget + + if pod.Spec.Containers[0].Resources.Limits == nil { + pod.Spec.Containers[0].Resources.Limits = map[corev1.ResourceName]resource.Quantity{} + } + double := *grpcPodConfig.MemoryTarget + double.Add(double.DeepCopy()) + pod.Spec.Containers[0].Resources.Limits[corev1.ResourceMemory] = double + + grpcPodConfig.MemoryTarget.Format = resource.BinarySI + pod.Spec.Containers[0].Env = append(pod.Spec.Containers[0].Env, corev1.EnvVar{ + Name: "GOMEMLIMIT", + Value: grpcPodConfig.MemoryTarget.String() + "B", // k8s resources use Mi, GOMEMLIMIT wants MiB + }) + } } // Set priorityclass if its annotation exists diff --git a/staging/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler_test.go b/staging/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler_test.go index eafb629f48..7535107a60 100644 --- a/staging/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler_test.go +++ b/staging/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler_test.go @@ -3,8 +3,11 @@ package reconciler import ( "testing" + "github.com/google/go-cmp/cmp" + "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/image" "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/pointer" @@ -13,6 +16,166 @@ import ( const workloadUserID = 1001 +func TestPodMemoryTarget(t *testing.T) { + q := resource.MustParse("5Mi") + var testCases = []struct { + name string + input *v1alpha1.CatalogSource + expected *corev1.Pod + }{ + { + name: "no memory target set", + input: &v1alpha1.CatalogSource{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test", + Namespace: "testns", + }, + }, + expected: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + GenerateName: "test-", + Namespace: "testns", + Labels: map[string]string{"olm.pod-spec-hash": "68d7885bb7"}, + Annotations: map[string]string{"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"}, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "name", + Image: "image", + Ports: []corev1.ContainerPort{{Name: "grpc", ContainerPort: 50051}}, + ReadinessProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + Exec: &corev1.ExecAction{ + Command: []string{"grpc_health_probe", "-addr=:50051"}, + }, + }, + InitialDelaySeconds: 0, + TimeoutSeconds: 5, + }, + LivenessProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + Exec: &corev1.ExecAction{ + Command: []string{"grpc_health_probe", "-addr=:50051"}, + }, + }, + InitialDelaySeconds: 0, + TimeoutSeconds: 5, + }, + StartupProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + Exec: &corev1.ExecAction{ + Command: []string{"grpc_health_probe", "-addr=:50051"}, + }, + }, + FailureThreshold: 10, + PeriodSeconds: 10, + TimeoutSeconds: 5, + }, + Resources: corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("10m"), + corev1.ResourceMemory: resource.MustParse("50Mi"), + }, + }, + SecurityContext: &corev1.SecurityContext{ + ReadOnlyRootFilesystem: pointer.Bool(false), + }, + ImagePullPolicy: image.InferImagePullPolicy("image"), + TerminationMessagePolicy: "FallbackToLogsOnError", + }, + }, + NodeSelector: map[string]string{"kubernetes.io/os": "linux"}, + ServiceAccountName: "service-account", + }, + }, + }, + { + name: "memory target set", + input: &v1alpha1.CatalogSource{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test", + Namespace: "testns", + }, + Spec: v1alpha1.CatalogSourceSpec{ + GrpcPodConfig: &v1alpha1.GrpcPodConfig{ + MemoryTarget: &q, + }, + }, + }, + expected: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + GenerateName: "test-", + Namespace: "testns", + Labels: map[string]string{"olm.pod-spec-hash": "855b6c6cf6"}, + Annotations: map[string]string{"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"}, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "name", + Image: "image", + Ports: []corev1.ContainerPort{{Name: "grpc", ContainerPort: 50051}}, + Env: []corev1.EnvVar{{Name: "GOMEMLIMIT", Value: "5MiB"}}, + ReadinessProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + Exec: &corev1.ExecAction{ + Command: []string{"grpc_health_probe", "-addr=:50051"}, + }, + }, + InitialDelaySeconds: 0, + TimeoutSeconds: 5, + }, + LivenessProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + Exec: &corev1.ExecAction{ + Command: []string{"grpc_health_probe", "-addr=:50051"}, + }, + }, + InitialDelaySeconds: 0, + TimeoutSeconds: 5, + }, + StartupProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + Exec: &corev1.ExecAction{ + Command: []string{"grpc_health_probe", "-addr=:50051"}, + }, + }, + FailureThreshold: 10, + PeriodSeconds: 10, + TimeoutSeconds: 5, + }, + Resources: corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("10m"), + corev1.ResourceMemory: resource.MustParse("5Mi"), + }, + Limits: corev1.ResourceList{ + corev1.ResourceMemory: resource.MustParse("10Mi"), + }, + }, + SecurityContext: &corev1.SecurityContext{ + ReadOnlyRootFilesystem: pointer.Bool(false), + }, + ImagePullPolicy: image.InferImagePullPolicy("image"), + TerminationMessagePolicy: "FallbackToLogsOnError", + }, + }, + NodeSelector: map[string]string{"kubernetes.io/os": "linux"}, + ServiceAccountName: "service-account", + }, + }, + }, + } + + for _, testCase := range testCases { + pod := Pod(testCase.input, "name", "image", "service-account", map[string]string{}, map[string]string{}, int32(0), int32(0), int64(workloadUserID)) + if diff := cmp.Diff(pod, testCase.expected); diff != "" { + t.Errorf("got incorrect pod: %v", diff) + } + } +} + func TestPodNodeSelector(t *testing.T) { catsrc := &v1alpha1.CatalogSource{ ObjectMeta: metav1.ObjectMeta{ diff --git a/staging/operator-registry/.gitignore b/staging/operator-registry/.gitignore index e8d67186f6..e36468cc81 100644 --- a/staging/operator-registry/.gitignore +++ b/staging/operator-registry/.gitignore @@ -473,3 +473,6 @@ certs/* # ignore temp artifacts of building images pkg/lib/indexer/index.Dockerfile* +# ignore vendor since we don't commit it +vendor/* + diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml index e42010c7ad..c3e2f6ce18 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml @@ -532,6 +532,13 @@ spec: topologyKey: description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. type: string + memoryTarget: + description: "MemoryTarget configures the $GOMEMLIMIT value for the gRPC catalog Pod. This is a soft memory limit for the server, which the runtime will attempt to meet but makes no guarantees that it will do so. If this value is set, the Pod will have the following modifications made to the container running the server: - the $GOMEMLIMIT environment variable will be set to this value in bytes - the memory request will be set to this value - the memory limit will be set to 200% of this value \n This field should be set if it's desired to reduce the footprint of a catalog server as much as possible, or if a catalog being served is very large and needs more than the default allocation. If your index image has a file- system cache, determine a good approximation for this value by doubling the size of the package cache at /tmp/cache/cache/packages.json in the index image. \n This field is best-effort; if unset, no default will be used and no Pod memory limit or $GOMEMLIMIT value will be set." + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true nodeSelector: description: NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. type: object diff --git a/vendor/github.com/operator-framework/api/crds/zz_defs.go b/vendor/github.com/operator-framework/api/crds/zz_defs.go index 6a98bd4bd7..a391fce34b 100644 --- a/vendor/github.com/operator-framework/api/crds/zz_defs.go +++ b/vendor/github.com/operator-framework/api/crds/zz_defs.go @@ -85,7 +85,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xfb\x73\xdc\x36\x92\xff\xef\xfe\x2b\xba\xf4\xfd\x56\x49\xca\xcd\x50\x76\xb2\x95\xdb\xd5\xe6\x51\x5a\x39\xce\xa9\x12\xdb\x2a\xcb\xc9\xd6\xad\xe5\x3b\x63\xc8\x1e\x0e\x22\x12\x60\x00\x50\xf2\x24\x95\xff\xfd\xaa\x1b\x00\xc9\x79\x3f\x64\xc7\x76\x2d\xf9\x8b\x35\x24\x9e\x8d\x46\xf7\xa7\x1f\x80\x45\x25\x7f\x46\x63\xa5\x56\xa7\x20\x2a\x89\x6f\x1d\x2a\xfa\x65\x93\x9b\xbf\xda\x44\xea\x93\xdb\x47\x0f\x6e\xa4\xca\x4e\xe1\xbc\xb6\x4e\x97\x2f\xd0\xea\xda\xa4\xf8\x18\xc7\x52\x49\x27\xb5\x7a\x50\xa2\x13\x99\x70\xe2\xf4\x01\x80\x50\x4a\x3b\x41\xaf\x2d\xfd\x04\x48\xb5\x72\x46\x17\x05\x9a\x61\x8e\x2a\xb9\xa9\x47\x38\xaa\x65\x91\xa1\xe1\xc6\x63\xd7\xb7\x0f\x93\xbf\x25\x0f\x1f\x00\xa4\x06\xb9\xfa\x4b\x59\xa2\x75\xa2\xac\x4e\x41\xd5\x45\xf1\x00\x40\x89\x12\x4f\x21\x15\x4e\x14\x3a\xf7\x83\xb0\x89\xae\xd0\x08\xa7\x8d\x4d\x52\x6d\x50\xd3\x3f\xe5\x03\x5b\x61\x4a\xbd\xe7\x46\xd7\xd5\x29\x2c\x2d\xe3\xdb\x8b\x83\x14\x0e\x73\x6d\x64\xfc\x0d\x30\x04\x5d\x94\xfc\x77\x98\xbc\xef\xf6\x8a\xbb\xe5\xf7\x85\xb4\xee\x87\xc5\x6f\x3f\x4a\xeb\xf8\x7b\x55\xd4\x46\x14\xf3\x03\xe6\x4f\x76\xa2\x8d\x7b\xd6\x76\x4f\xdd\xa5\xc2\x59\x93\xfa\xcf\x52\xe5\x75\x21\xcc\x5c\xdd\x07\x00\x36\xd5\x15\x9e\x02\x57\xad\x44\x8a\xd9\x03\x80\x40\xc2\xd0\xd4\x10\x44\x96\xf1\xb2\x88\xe2\xd2\x48\xe5\xd0\x9c\xeb\xa2\x2e\x55\xd3\x15\x95\xc9\xd0\xa6\x46\x56\x8e\x49\xff\x72\x82\x50\x19\x74\x6e\xca\x24\x01\x3d\x06\x37\xc1\xd8\x77\x53\x0b\xe0\x17\xab\xd5\xa5\x70\x93\x53\x48\x88\xc2\x49\x26\x6d\x55\x88\x29\x8d\xa6\x53\xca\x2f\xd3\x63\xff\xad\xf3\xde\x4d\x69\xe8\xd6\x19\xa9\xf2\x75\x43\xa1\x72\xdb\x8f\xc1\x93\xe6\xe5\xb4\x5a\x1c\xc2\xdc\xcb\x6d\xfb\xaf\xea\x51\x21\xed\x04\xcd\xf6\x83\x68\xaa\x2c\x8c\xe1\x72\xc9\x97\x15\x03\xe9\x34\x1a\x37\x54\xb2\xb0\x19\x16\x3a\x38\xcb\x17\xe7\x98\x09\x17\x5f\xfa\x42\xb7\x8f\x44\x51\x4d\xc4\xa3\xf0\xd2\xa6\x13\x2c\x45\xcb\x0f\xba\x42\x75\x76\x79\xf1\xf3\x17\x57\x73\x1f\x60\x96\x3a\x33\x7c\x0e\xd2\x82\x00\x83\x95\xb6\xd2\x69\x33\x25\x6a\x9d\x5f\xfd\x6c\x07\x70\xfe\xe2\xb1\x1d\x80\x50\x59\xb3\xf1\xa0\x12\xe9\x8d\xc8\xd1\x26\x0b\x63\xd5\xa3\x5f\x30\x75\x9d\xd7\x06\x7f\xad\xa5\xc1\xac\x3b\x0a\x22\x4f\xa4\xc9\xdc\x6b\xa2\x7f\xe7\x55\x65\xa8\x4f\xd7\xd9\xc8\xfe\xe9\x48\xb9\x99\xf7\x73\x33\x3c\x24\x32\xf8\x72\x90\x91\x80\x43\xcb\x2c\x10\xf6\x18\x66\x81\x76\x9e\x35\xa4\xa5\xf9\x1b\xb4\xa8\xbc\xc8\xa3\xd7\x42\x85\x39\x25\x70\x85\x86\x2a\xd2\x76\xaf\x8b\x8c\x24\xe1\x2d\x1a\x07\x06\x53\x9d\x2b\xf9\x5b\xd3\x9a\x05\xa7\xb9\x9b\x42\x38\xb4\x0e\x78\xd7\x2a\x51\xc0\xad\x28\x6a\xf4\xa4\x2c\xc5\x14\x0c\x52\xbb\x50\xab\x4e\x0b\x5c\xc4\x26\xf0\x54\x1b\x04\xa9\xc6\xfa\x14\x26\xce\x55\xf6\xf4\xe4\x24\x97\x2e\xca\xf0\x54\x97\x65\xad\xa4\x9b\x9e\xb0\x38\x96\xa3\x9a\xc4\xe1\x49\x86\xb7\x58\x9c\x58\x99\x0f\x85\x49\x27\xd2\x61\xea\x6a\x83\x27\xa2\x92\x43\x1e\xac\x62\x39\x9e\x94\xd9\xff\x33\x41\xea\xdb\xc3\x39\xf2\x2d\x65\x66\x88\x62\x73\x2d\xad\x49\x78\x7a\x2e\xf2\xd5\xfd\x5c\x5a\x92\xd2\x2b\xa2\xca\x8b\xef\xae\x5e\x42\x1c\x80\x27\xbb\xa7\x70\x5b\xd4\xb6\xc4\x26\x42\x49\x35\x46\xe3\x4b\x8e\x8d\x2e\xb9\x15\x54\x59\xa5\xa5\x72\x7e\x4b\x17\x12\x95\x03\x5b\x8f\x4a\xe9\x2c\xf3\x1c\x5a\x47\xeb\x90\xc0\x39\xab\x30\x18\x21\xd4\x15\xed\xa4\x2c\x81\x0b\x05\xe7\xa2\xc4\xe2\x5c\x58\x7c\xef\xa4\x26\x8a\xda\x21\x91\x6f\x7b\x62\x77\x35\xf0\x62\x85\x85\x3d\x06\x10\x35\xe4\x56\x85\x57\x6d\x4a\xf0\x3b\x70\x99\x04\x86\x35\x7b\x91\x1e\x91\x65\x06\xed\x92\x0f\x0b\x1b\xd2\x17\xf4\x7c\x32\xd1\x96\xd6\x4f\x38\x78\xfe\xe3\x53\x48\x85\x82\xda\x22\x6d\x9e\x54\x2b\x45\x0c\xe1\x34\x08\xd2\x65\x43\x7c\x2b\x2d\x33\x90\xc1\x5c\x5a\x67\xa6\x09\x3c\xd1\xa6\x14\xee\x14\xbe\x8a\xaf\x86\xdc\x9c\x36\x20\xab\x6f\x4e\xbf\xaa\xb4\x71\xdf\xc0\x73\x55\x4c\xa9\xd1\x0c\xee\x26\xa8\xe0\xaa\x99\x1b\x7c\xdd\xf9\xf1\xbd\xa9\xd2\x04\x2e\x72\xa5\x4d\x2c\x49\x5c\x75\x51\x8a\x1c\x61\x2c\xb1\x60\xbe\xb6\xe8\x92\xf9\x15\x5c\xbb\x8a\xe0\xe1\xd2\x58\xe6\x4f\x45\xb5\x91\x34\xe7\xb1\x24\xf5\x45\xdd\x77\x95\x77\xfb\xd1\x69\x66\x65\x9a\x12\xfd\x29\xd2\x1b\x10\xa1\x97\x52\x54\x43\xcb\xdb\xa6\x43\xa6\xed\x28\x70\x1e\x1b\x20\xfa\xb5\xaf\x2f\x82\xe4\x4a\x76\x9d\x76\x77\x66\x3b\xd7\x6d\x61\xc8\x46\xa2\x3d\x5d\xa6\x45\xb6\xe8\x23\x37\x55\x7a\xa9\x33\x3f\xed\x8d\xbd\x7c\xdf\x2d\x0d\xf8\xb6\xd2\x16\x2d\x64\x72\x3c\x46\x43\x72\x47\xdf\xa2\x31\x32\x43\x0b\x63\x6d\x78\xbd\x2a\x9d\xf1\x9e\x6c\xd6\x6f\x46\xd5\x5e\xea\x6c\xdb\x85\xa1\xae\x59\x61\x78\x66\x0c\x6c\xb8\x72\xba\x4b\x77\x3b\x6c\xd8\xbc\xf4\x88\x31\xc3\xff\xe9\xf2\xaf\x73\xf4\x38\x0b\x85\x23\xa7\x06\x44\x15\x44\xc7\xa1\xa5\xe9\x1f\xda\xa6\xcd\x65\xc3\xdd\x62\xc8\xdb\x0c\x9b\x1e\xa5\x33\x3c\xdb\x30\xfc\x85\x29\x3c\xe6\x1f\x23\xb4\x5c\xbd\x19\x2a\x6b\xf0\xac\x2e\x58\xd4\xd4\xc5\xec\x8a\xae\x9a\xc7\x96\x73\xd9\x76\x3e\xbe\x1c\x8e\xd1\x18\xcc\x1e\xd7\xc4\xbf\x57\xcd\xa8\x82\x90\xf2\xaf\xbf\x7b\x8b\x69\xbd\x6a\x8f\xad\x9c\x3a\x81\xe2\x30\x4d\x34\x70\x27\x8b\x22\x74\x47\x02\x25\x7e\xa0\xf9\x32\x8e\x21\xf2\x58\x2f\xa4\xad\x70\xd2\x8e\xa7\x4c\x8e\x86\x60\xf8\x96\x74\x36\x5b\x2c\xcc\xf1\x72\x2c\x31\x83\xd1\x34\xa8\x6b\x12\x9e\x03\x18\xd5\x0e\xa4\x63\x5d\x9e\x4e\xb4\xb6\x08\xc2\xd3\x9d\xdb\xbd\x95\x9a\x91\x12\x68\x85\x24\x7f\x4a\x52\xc8\x61\xe3\x74\x9a\x4f\x78\xe4\x6d\x35\x69\xa1\x24\x89\xdf\xd0\x2a\xb2\x23\x35\x73\x27\xdd\x84\x7f\xe4\x04\xb9\x09\x85\xd9\xba\xa4\x46\xef\x50\xe6\x13\x67\x07\x20\x13\x4c\x78\x75\x51\xa4\x93\x4e\xb3\x25\xa2\xb3\x20\x8a\x22\x0e\xa1\xcb\x12\x5e\x6f\x96\x04\x51\xe0\xa8\xc1\x30\x01\x6f\x0c\x1a\xbd\x3a\xbf\x6a\x4b\xc9\x35\x00\x74\x69\x72\x3c\x80\x54\x97\x55\xed\x88\x26\x34\xc6\xd1\x14\xa4\x23\x9c\xed\xf1\x92\xd1\x75\xee\x67\x82\x45\xe8\x38\x82\x55\xaf\x99\x48\x38\x90\x8d\xa8\x72\x38\xf0\x93\x3b\x88\xf8\x93\x9a\x93\x7e\x12\x3c\xbf\x52\xb8\x74\x12\x20\x70\xaa\x8d\x41\x5b\x69\xc5\x35\xf9\xcb\x77\xed\xd8\xfe\xde\x54\x3a\xb2\xc7\x2d\x31\x27\x32\x9f\x44\x5a\x0a\x83\xfc\x6e\x76\x0d\xd6\xed\x91\x76\x9f\x08\x63\x66\x6c\xc9\x65\x8f\x74\x58\x6e\xd8\x25\x0b\xac\x7d\xa6\x00\xcb\xca\x4d\x3b\x3c\xd1\x59\x3d\x87\xa6\x6c\x68\xc0\x0b\xcc\xdb\xd5\xfa\xf9\xc9\xb2\x2a\x64\x2a\x5d\xe0\x10\x78\x08\x47\xcc\x22\xd2\x91\x28\x03\xa5\x87\xba\x3a\x4e\xe0\x8c\xdd\x17\x5b\x74\xa0\x74\xd3\x7e\x68\x88\x3a\xb5\xba\x6d\x6b\xe3\xdc\xb6\x14\x2a\xfe\x59\x8d\xe9\x16\x9f\x61\x18\x3f\xaa\x74\x1e\xe5\x2d\x2f\xee\x69\xb2\xb1\xe8\xb6\xe2\x2d\x96\x8e\x63\xd8\xa6\xf4\xfc\x52\x7b\x96\xb6\x58\x60\x4a\x26\x29\xd1\x7e\x00\xc2\x5a\x9d\x4a\x42\xf9\x2d\xd3\xce\x72\xba\x9f\xc9\x66\xda\xc3\xae\xf4\x87\x9d\xe7\x4f\xcf\xfc\xc6\xdb\xb6\xde\x02\x35\x0a\x49\xe0\x77\x3c\x47\x95\x19\x81\x35\x9a\xf2\xd7\x43\x0b\x85\x18\x61\x61\xb7\x23\x02\xec\xb4\x6b\xdb\x67\xcb\xfd\xbb\x72\x42\x2b\x27\x12\x6c\xcc\x66\xe1\x49\x68\x93\x6d\x26\xa4\xb2\xc1\x7e\x1e\x80\x80\x1b\x9c\x7a\x53\x9b\x2c\xf8\xe8\xb8\xe0\xc2\x06\xbd\xba\x21\xe6\xb8\xc1\x29\x17\x0a\x76\xf7\x0e\xc3\xdd\x99\x39\xfc\xb3\xcb\x36\x6d\x9f\x21\x0d\x74\xc7\x1a\x71\xd2\x3b\x54\xdb\x9d\x7f\xfd\x73\x83\x6b\x91\xd7\xb2\x67\x01\x92\x30\x4f\xf2\x7a\xf0\x22\xb1\xfe\x8a\x6b\x2c\xaa\xaa\x90\xc8\xf6\xfc\x8e\xdd\xac\xb5\x02\xd6\x3d\x91\x7a\xf7\x9a\xd7\x8b\xc6\xa1\xe1\x19\xf2\xd0\x7a\xe6\xa3\x9d\x3e\x91\x95\xb7\x6f\x2d\xf2\xc6\x8d\x9e\x9f\x9f\x45\x21\x5b\x57\x9b\x65\x3d\x7b\xa1\x06\xf0\x4c\x3b\xfa\xe7\x3b\xb2\x84\xed\x00\x1e\x6b\xb4\xcf\xb4\xe3\x9f\x09\x7c\xef\x3c\xaf\xff\xb8\xa5\x64\x7b\x07\x04\xf2\xe3\xbd\x17\x79\xce\x94\x97\x29\x34\xfd\xae\xcf\xc8\x26\x70\xe1\x61\x4b\xb3\x71\xa5\x85\x0b\x45\xe0\x30\x90\x81\xbd\x78\x5c\x36\x34\x51\xd6\x96\x9d\x3c\x4a\xab\x21\x63\x80\xa5\x6d\x78\xea\x51\x3b\x5d\xfa\xad\x69\x6e\x75\x53\xdf\xb3\xaf\xe1\xc7\x95\x95\x27\xe2\x96\x21\x9d\x54\x79\xd1\x80\xb7\x01\xdc\x4d\x64\x3a\xf1\xa8\x7b\x84\xde\x35\x58\x19\x24\x85\x25\x2c\x89\x2a\x7a\x93\xa3\x21\xb0\x2b\x63\x7b\xde\x31\x59\x88\x14\x33\xc8\x18\x5a\x7a\x27\x9b\x70\x98\xcb\x14\x4a\x34\x39\x42\x45\x9a\x64\xbf\xd5\xdf\x4d\xb0\xfb\x67\x67\xf1\xde\xed\x70\x27\x76\x63\x15\xf9\x84\xb0\xee\x9f\xa4\x1d\x19\x57\xf7\xda\xb1\xd7\x8e\x73\x4f\xaf\x1d\x9b\xa7\xd7\x8e\x1b\x9e\x5e\x3b\xf6\xda\xf1\xbd\x6b\x47\x6f\xcb\xee\x61\x3c\xff\xd3\xbb\x38\xe6\xad\x65\xd6\xb4\x31\x4c\x37\x6b\x36\x93\xbe\xb9\x0a\x02\xe7\x25\x9b\xda\xd2\x07\x49\x8c\x50\x39\xc2\xa3\xe1\xa3\x87\x0f\x77\x31\xaa\xc3\x42\x6e\x55\x63\x1c\x22\x3d\x52\xb9\x2f\x3e\x5f\x5b\x63\x95\xff\xed\x1d\x78\x4d\x03\x8f\x37\x8e\xbc\x19\xec\xb0\xc2\xf1\xc9\xd2\x49\x69\x07\x25\x3a\x10\x6e\xc6\x55\x24\x4b\x1c\x34\xa1\x02\x66\xf8\x10\xa5\x8c\x1e\xd8\x0c\xb4\x0a\x7e\x3c\x22\x7e\xb2\xdf\x08\x52\x14\x3e\xa4\x36\xc2\x66\x14\xba\xa4\x5e\xa5\x72\x71\xbb\xd0\x10\x30\x52\x05\x8e\x30\xc9\x13\xc8\x6a\xae\x26\x54\x08\x9b\x1e\xfb\xd1\xda\xa9\x75\x58\xb2\x27\x57\x1b\xfe\x87\x86\xed\xcc\x94\x0a\xe3\x2d\x2a\x57\x8b\xa2\x98\x02\xde\xca\xd4\x35\xf3\xe3\xa8\xad\x74\xde\xd9\xbe\x9d\x8b\x70\x2b\xe8\xb0\x3d\x5c\x18\x2e\x70\xb0\xdd\x50\x67\x17\x6d\xbf\xd0\xf6\x36\x7b\x72\x4e\x17\xfa\x99\x24\x2b\xc1\xaa\xa3\x76\xbd\x0f\x9c\xff\x64\xe6\x7a\xfe\x62\xb3\xcb\x15\x76\x96\x64\x3b\x48\xaf\x79\x58\x5a\x17\x05\x31\x86\xf7\xc2\x2e\x4e\x60\x89\x77\xd4\x4f\x69\x86\x99\xbd\xe3\xdd\xbb\x98\xcf\x9e\x3d\x26\xaa\x50\x99\x97\xba\xd2\x85\xce\xa7\x5d\x4a\xfb\xf4\x22\x59\x56\xd1\x39\x2e\xc0\xd6\xa3\x00\x1a\x88\xfd\x9e\xcd\x2d\x4d\xef\xf9\xeb\x3d\x7f\xbd\x6d\xb3\xf0\xf4\xb6\x4d\xf3\xf4\xb6\xcd\x86\xa7\xb7\x6d\x7a\xdb\xa6\xf7\xfc\x41\xaf\x1d\xd7\xd0\xa4\xd7\x8e\xd0\x6b\xc7\x95\xf3\xea\xb5\xe3\x5a\xf2\xf4\xda\xb1\xd7\x8e\xcb\x9e\x4a\x67\xf7\x48\x74\xac\x74\xb6\x26\xcf\xd1\x7b\x7d\x52\x3d\x2c\x74\x2a\x5c\xc8\xcb\xa7\x2a\xc1\xcf\x67\x45\xe9\x1d\x51\x03\xf8\x4d\x2b\xf4\xc9\x6b\xb4\x36\xec\x4e\xd2\x6e\x82\x86\x8a\x1f\xd9\xe3\xb5\x89\x4d\x7d\x9e\x64\x9f\x27\xf9\xd1\xe7\x49\x4e\x84\xf5\xeb\xea\x85\xd2\xea\xb4\xc9\xce\x86\x7c\x89\xa6\xfc\x44\xb3\x26\x89\x5d\xc2\x72\xf3\x89\xa7\x76\x49\xfd\xcc\xb3\x10\x2f\xc0\xec\x72\x76\xbe\x01\x2f\xf3\xa4\x44\x96\x61\x06\x15\x9a\xa1\x67\x11\x0d\x63\xa9\xb2\x25\x73\x8d\xf4\xf9\xa0\xd9\x8f\xb3\xf3\xf8\x80\x29\x90\xb3\x03\xd9\xc3\xe7\xda\x75\x1c\xcf\x48\xf8\x8f\x22\x21\x72\x57\x54\x3f\x04\x17\x9c\xbc\x3f\x6c\x89\xeb\x77\x87\xe6\x0c\xa8\xa3\x4b\x78\x7f\xbb\x92\x61\xf9\xaf\x35\x9a\x29\x9f\xff\x68\x01\x6b\x73\xb6\x2e\xc4\xc8\xa4\x85\x54\x58\xaf\x29\x76\x35\x2d\x77\x34\xa3\xf6\xb3\x53\xf6\xf7\x44\xc3\x3c\x5d\xe6\x9b\xf2\x36\x69\xb4\xc1\x3d\xcd\x96\x1a\xe1\x4b\xa2\x00\xad\xf7\x7f\xa7\xf1\xec\x0b\xdd\xf6\x02\x6e\x4b\x99\xe2\x23\x36\xce\x61\x7f\x03\x1d\xf6\x36\xd2\x61\x2f\x43\x1d\xf6\x35\xd6\xe1\x1e\x06\x3b\xec\x67\xb4\xc3\x3c\x2b\xd0\x0a\x05\x94\xf5\x7e\xec\x77\xb8\x8f\x89\x0a\xf7\xb0\xe3\x61\x7e\xaa\x0d\x9b\x9a\xf7\x65\xd4\x33\xaf\xcf\xd8\xf5\x7f\x36\xb1\xf6\xb3\xe9\x61\x9e\x54\xc1\x18\x96\x6c\xd0\x7e\x22\x16\xfe\x9f\x62\x6e\xc3\xbd\x4c\x6e\xd8\xdf\xec\x86\xfd\x39\x83\x55\xdd\x8f\x1c\x4e\xbd\xaf\xc2\xf4\xad\x78\x15\xc1\x67\x70\xc7\xf0\x3b\x69\x02\x5e\x97\x3f\xa0\x12\xd2\x58\xc2\x77\xc1\x67\xd2\xfd\x16\xac\xf3\x6e\x33\xa5\x3f\x42\x4c\xa2\xfa\x56\x14\xa4\x7b\x7c\x1e\x47\xb0\x8b\xa8\xf5\x79\x35\x3d\x80\xbb\x09\x59\x9b\x24\xa5\x9a\xf3\xce\x07\x37\x38\x3d\x18\x2c\x30\xd2\xc1\x85\x3a\xf0\x3a\x6a\x81\x75\x1a\x85\xa6\x55\x31\x85\x03\xfe\x76\xf0\xae\x35\xfb\x1e\x8a\xab\x7b\x85\xca\xbe\x7a\x61\x0f\x2e\x51\xf1\x5a\x97\x77\x0f\x36\xbd\x16\xf1\x81\x8d\xd8\x8b\x6d\x15\x0c\xa7\x5a\x74\x94\x4b\x93\x35\xc2\x3c\xc6\xef\xb3\x68\xfc\xd6\x2a\xdc\x74\x11\xcf\x9c\x87\xc6\xbc\x92\x5a\x4c\x69\x0a\x0b\xaf\x15\x5a\x06\x76\xd8\xb8\x88\x3a\x95\xb9\x6c\xe2\xd3\x41\x5a\x6d\xa7\xb2\xf9\x04\x91\xb6\x06\x63\xc4\x12\x85\xb2\x70\x10\x7d\x4f\x87\xb6\x2d\x71\x90\xb4\xa7\xfb\x9a\x16\x8f\x7e\xff\xe3\x78\xe6\x44\x5f\xdb\x60\x8f\xb4\x7b\xa4\xdd\x23\xed\x1d\x6a\xf5\x48\x7b\xf5\xd3\x23\xed\x1d\x9e\x1e\x69\xf7\x48\x7b\x5d\xc7\x3d\xd2\xee\x91\xf6\xe6\xce\xf7\x43\xda\xfb\xe6\x09\x75\x71\x6f\x08\xce\xf9\x8b\xcc\x84\x93\x69\x9b\x43\x14\x4b\xf9\xbf\xde\x2d\xde\xee\x62\xe9\xe5\x68\xbb\x8b\xc8\x17\x6c\x8b\x64\x03\xb4\x6e\xc0\xf7\x42\xcd\xf5\xa8\xfb\xe3\xca\x85\xda\x83\x37\x3a\x01\x85\x3d\x99\xe3\x65\x0c\x85\x87\x8b\xff\x46\xd8\xc6\xc9\x33\x38\x8a\x11\x97\x63\x22\xbe\xd2\x6e\xf6\xa3\x72\x72\xd8\x96\x68\x62\x30\x1c\x5e\x9c\x39\x6f\x33\x13\x96\x68\xa2\xee\x4d\xa4\xb8\x5d\x4f\x12\x21\x68\x66\xc6\x20\x6d\xb8\xde\x90\xb3\x25\x4c\xad\x14\xb5\xaa\x55\x0c\x1f\x7b\x99\xe3\xef\xe3\x0b\x9c\xe7\xc1\x12\x8f\x87\x11\x53\x4b\xa5\x4e\xbc\x53\x38\x7f\x05\x62\x48\xe5\xd7\x2a\x44\x44\xe9\x4d\x8c\xfa\x46\xa6\xe4\x19\xc9\xa6\xf7\x04\xbe\x63\x3e\xec\x36\x2c\x2d\xd3\x47\x14\x85\xbe\xdb\x45\x24\xfd\x59\xc7\xa2\xee\x76\x3e\x16\x35\x17\xbf\xeb\x4f\x45\xfd\x9b\x9c\x8a\xe2\x8f\x7e\x0b\xbd\xf3\xe3\x51\xf0\xcf\x70\x01\xa1\x41\x26\x55\x59\x17\x4e\x56\x6d\xae\x94\xf5\x5d\x15\x1e\x65\x8e\x43\xe6\xc9\x2c\x5f\x52\x6f\x22\x9d\xcc\xf3\x27\xb7\xc7\xb9\x55\x96\x37\x6d\xc8\xee\x10\x45\x11\xce\x14\x45\x48\xea\x53\x58\xe4\x87\xce\x4c\x78\x1c\xee\x6c\x6d\xac\x19\x16\x32\x47\x24\x0b\x0b\x5a\x50\x92\x6a\x6b\x84\xa8\x37\x8a\x6e\x31\xaa\xde\x5c\xde\xa2\x6a\x25\xe9\x91\x3d\x3e\x8e\x3a\xfc\x9d\x4a\xf8\xf7\x22\xa1\xbf\xea\x48\xd2\x6f\xb6\x91\xd1\x3c\xa1\x46\x4a\xb7\xe4\x6b\x65\xf4\x87\x4c\xc1\xd8\x25\xce\xbf\x9b\x8f\x61\x8f\xf8\xfe\x9f\x18\xdb\xff\x74\x4e\x96\x7d\x60\x0f\xe3\x87\xc8\xad\xff\xe8\xbd\x8a\x7d\x72\x7d\xfb\xdc\x37\xb9\xfe\xbd\x7b\x0e\x3f\x6c\x8e\xfd\x27\xe0\x2d\xfc\x90\x39\xf6\xbd\x87\x70\xed\xa2\x7c\x6c\xa9\xef\xb3\xcf\x5e\x1e\xc1\xde\x1b\xb8\xb7\x16\xde\x51\xe1\xdc\xd7\x0b\xb8\x23\x47\xec\x19\x67\xef\x63\xec\x7f\x4e\x8c\xbd\x47\xbc\x5b\x3e\x3d\xe2\x5d\x49\x94\x1e\xf1\x42\x8f\x78\x37\x4d\xaf\x47\xbc\x6b\xc9\xd3\x23\xde\xb5\x8b\xd2\x23\xde\x1e\xf1\xc2\xa7\x86\x78\xf7\xb9\xa5\xab\x8f\x75\xdf\x2b\xd6\xbd\xab\xb4\xd8\x49\x46\xec\xc8\x07\x3b\xc7\xb6\xfb\xb8\xf6\xc7\x12\xd7\xde\xfa\xc0\xbf\x72\xf2\xbe\x87\xfe\xbb\x6b\xb5\xea\xe4\xbf\xb8\xd5\x32\x83\xaa\x76\xe1\x3c\x75\x7f\xfa\xff\x5d\x9c\xfe\x9f\xa1\x7c\x7f\x05\xc0\x56\x57\x00\xac\xa2\x59\x7f\x0f\x40\x7f\x0f\xc0\x3b\x0e\x42\xf7\xf7\x00\xf4\xf7\x00\xf4\xf7\x00\xc4\xa7\x3f\x9d\x04\xfd\xe9\xa4\xad\x9e\xfe\x74\xd2\xea\xa7\x3f\x9d\xf4\xd1\x7a\x5f\xa1\x3f\x9d\xf4\x71\x7b\x62\xa1\x3f\x9d\xd4\x7b\x67\xb7\x5c\xa8\x4f\xf0\x74\x52\x7f\x0f\xc0\xc7\x9a\xa3\x00\x3d\xd2\xee\x91\x76\x8f\xb4\x7b\xa4\xbd\xfe\xe9\x91\xf6\x0e\x4f\x8f\xb4\x7b\xa4\xbd\xae\xe3\x1e\x69\xf7\x48\x7b\x73\xe7\xfd\x3d\x00\x9f\x50\x6e\x04\xf4\xf7\x00\xf4\xf9\x12\xfd\x3d\x00\xff\xbe\xf7\x00\xcc\xc4\xee\x3f\xdc\x65\x00\xbb\x0f\xa3\xbf\x11\xa0\xbf\x11\xa0\xbf\x11\xa0\xbf\x11\x20\x3e\xfd\x8d\x00\xfe\xf9\x98\x7c\x8d\xfd\xf9\xa8\x95\x44\xe9\xcf\x47\x41\x7f\x3e\x6a\xd3\xf4\x3e\x01\xbf\x61\x7f\x3e\xea\x23\xf4\x15\xf6\xe7\xa3\x7a\xbf\xe0\xfc\xe2\x7c\x22\xe7\xa3\xfa\x1b\x01\x3e\xc6\x68\x7b\x8f\x78\xb7\x7c\x7a\xc4\xbb\x92\x28\x3d\xe2\x85\x1e\xf1\x6e\x9a\x5e\x8f\x78\xd7\x92\xa7\x47\xbc\x6b\x17\xa5\x47\xbc\x3d\xe2\x85\x4f\x0d\xf1\xf6\x37\x02\xf4\x37\x02\xf4\x37\x02\x7c\x8a\x11\xee\x8d\x2b\x4d\x23\xdb\x64\xd0\xce\x2c\xe7\xb3\x4e\x85\x39\xf0\x1e\x4e\x34\x07\xdd\xea\x4c\x8d\x7c\xc0\x3b\xc6\x1f\xf9\xd8\xae\x6b\xe9\x9a\xc0\xd5\x92\x9a\x4c\xbe\x50\xe2\xd0\x7a\x42\xdb\xf9\x76\xe6\xe2\xb5\x9e\xd6\xdc\xe6\x8a\x29\x6c\x21\x6e\x77\x13\xae\x1b\x09\x5b\x19\xa9\x8d\x74\xd3\xf3\x42\x58\xfb\x4c\x94\xb8\x15\x75\x2f\xc6\x2d\xd3\x0e\x40\xaa\x4c\xa6\x8d\x75\xe3\x05\x49\x6c\x97\x01\x10\xf1\x43\xa7\x7c\xa4\x50\x2c\xe3\x03\xdc\x23\x24\xf6\x16\x75\xe1\x68\x8b\xfd\x86\x46\x87\x03\xe9\x06\x3d\x4f\xc5\xcf\xeb\x89\xb7\x66\xae\x16\xd3\x9a\xe7\xaa\x95\xc3\xb7\xee\x5c\xab\xb1\xcc\xb7\x9a\xef\xc1\xd5\xb2\xaa\x90\x0a\x45\xc3\xe6\x0b\x09\xc6\xf0\xa6\xc0\x5c\xa4\xd3\x37\x34\xfc\x37\x06\x69\x20\xb4\x67\xde\x78\xa5\x70\x2e\x9c\x28\x74\x7e\xc5\x11\xb3\xc3\x70\xc3\x84\x05\x94\x7c\x81\x84\x54\xbf\xf8\x0d\xd6\xc8\x0e\xc3\x79\x18\x95\xce\x12\xa2\x5c\x32\x37\x76\x96\xea\xcd\xc7\x00\x00\xd0\xbc\xfa\xec\xf5\x42\xc9\x00\x15\x08\x8c\xd0\x96\xec\xf2\xa7\xa9\x15\xc9\xa0\x4b\x9d\x41\x9c\x20\x9c\x65\xa5\x64\x74\x02\x47\x97\x57\x67\xc7\x33\x33\x81\x92\xaf\xc1\xd0\x06\x32\x8d\x56\x1d\x3a\xb6\x1b\xdc\x04\x6d\x8b\x48\x78\xe7\x73\x40\xd0\xef\x16\x8e\x08\xc6\x3e\x89\x60\x0c\x52\x46\xd8\x74\x7e\x75\x06\x6f\x46\xc2\x62\x21\x15\x7a\xda\x55\x46\xde\xca\x02\x73\xea\xb1\xe3\x5f\x81\xf3\xda\x18\x54\xae\x98\xc6\x9b\x0a\x96\xaf\x8a\xb4\x50\xab\x39\x76\x8b\x9c\xd5\x48\xc7\x66\xb1\xa8\xb4\xc5\x2c\x81\x2b\xae\x31\xf5\x50\x3a\x94\xe3\xb5\x71\x13\xa1\x56\x2e\x2e\x18\xb4\xd4\xb0\x54\xbe\x96\xcc\xd8\xb2\x02\x34\x86\x54\x33\x67\x2f\xd4\x96\x05\x75\x91\xa1\x81\xd4\xb3\x01\xc8\x52\xe4\x5e\xca\x33\x91\x58\xe5\x84\x14\x8f\x40\x98\x25\x84\x5f\x3d\xe7\x56\x69\xf1\x8a\xe8\x66\xbc\x09\x5c\x2b\x32\x5a\x04\x8c\x6b\x57\x1b\x84\x5b\x34\xbc\xba\xbc\xe7\xba\xa4\x89\x9b\x30\x36\xd0\xe9\x7e\xd0\x0c\xbb\x14\x32\xb0\x9a\x8d\x7d\x1a\x1c\xd5\xb2\x60\xb4\x22\x9b\xf9\x59\xcf\xc8\xa2\xe9\x4e\x8f\x41\x57\x65\xb8\x26\xa4\xae\x2a\x6d\x5c\xab\xc3\xd2\xee\xde\x08\x3a\x66\x09\x01\x68\x58\x95\xc1\x8a\x70\x6c\x90\xb4\x16\x21\x9d\x08\x95\x13\x7b\x5c\x2b\x78\xaa\x39\xa5\xc3\xe7\x05\x51\xb7\x62\xa4\x6b\xc7\x3c\x16\xf6\xea\x58\xd7\x2a\x03\x12\x2a\xa7\x30\x71\xae\xb2\xa7\x27\x27\x37\xf5\x08\x8d\x42\x87\x36\x91\xfa\x24\xd3\xa9\x3d\x49\xb5\x4a\xb1\x72\xf6\x24\xee\xa6\x93\x4a\x67\xc3\xf8\x63\x28\xe2\x26\x39\x39\x3c\xd8\x57\x1a\x41\xa4\xfc\x29\xf8\xb5\x5a\x51\x0a\x55\xbd\xe6\x52\x84\xe1\xfa\xca\x54\xa0\x25\xe3\xd2\x42\x4e\x17\x7c\x85\xc8\x1a\x4f\xe1\x2c\x50\x6a\xcb\x37\x57\x79\x44\xf6\xb0\x1d\xe9\x76\x68\xbb\x4d\xaf\x17\xda\xeb\x00\xe4\x06\xc8\xb8\x70\x8d\x07\xcb\x36\x02\x73\xed\x40\x19\x00\x38\x27\xf8\x22\x0f\x42\xe3\xfe\x0b\x89\x2b\x35\x05\xe2\x67\x17\x6e\x75\xe9\x5c\x73\xe2\x0c\xe7\x19\x7d\xd5\x58\x7d\x03\x1c\x8f\x31\x75\xdf\x84\xfd\xdc\xd8\x7f\xbc\xb9\xa3\xa5\xf6\x55\xfc\xeb\x9b\xd5\xc8\x67\x2b\xa3\x6a\x3b\xb7\x98\x1f\xd2\x7a\xb8\x3b\x43\xa1\xef\xb8\xc2\x9c\xca\xf6\x14\xf0\x6d\x11\x7d\x78\x5a\x11\xdb\x79\x23\x21\xe0\x1d\x92\x19\x9d\xc2\x36\x48\xb8\x8e\xb4\x0d\xb8\xaf\xb5\x50\x11\x9e\xe9\x90\x70\x87\x03\xb8\xe4\x3b\x50\xda\x37\xac\xc8\x9e\x69\x9f\x7a\xb7\x12\x17\x75\xe9\xb6\xd1\x1e\xd8\xe8\x18\x9c\x21\xc8\x0f\xad\x1b\xd0\xcf\x6c\xc6\x0d\xd8\x72\xf0\x8c\x95\xb7\x8e\x32\x37\x38\x6d\x5d\x47\xc1\xc9\xc8\x96\xd9\xa0\xe5\x92\x08\x3e\xbd\x27\xe8\xef\x21\x77\x46\x97\x23\xa9\x7c\x67\xbe\xe9\xb8\x14\xdc\x7a\x24\xa8\xca\xf8\x27\x77\xf3\x2e\xc8\xb5\x9d\xb7\x71\x86\x66\xcf\x77\xf0\x2d\x36\xde\x8a\xe5\x5e\xc5\x8e\x2b\xf1\xbb\x5f\x6b\x51\x24\xf0\xd8\x4b\x45\x9e\x7d\x78\x15\x0a\x2d\x78\x57\xee\x64\x91\xa5\xc2\x64\xac\x0d\xfc\x1e\x05\xab\xfd\xea\x89\x06\x70\xc4\xdd\xde\xae\x91\xbf\xe3\x07\x2a\x61\x9c\x4c\xeb\x42\xb0\xda\xc2\x5c\x9b\xe9\x3b\xa1\x68\xcb\x34\x57\x98\x6a\x95\x6d\x30\x78\x57\x48\xd7\x50\xb7\x4b\x63\x86\x51\x68\x64\x48\x65\x93\x25\xce\x33\xe9\xd1\xac\x71\xa3\xc7\x71\x57\x37\x5b\x6c\xe0\x51\xcd\x9d\x64\x58\xd6\xf8\x1b\xa4\x05\xe9\x73\x61\x8f\x3b\xe2\xb1\xd9\x15\x09\xfc\x63\x1a\xf5\xd5\x00\xa4\x8b\x56\x9e\x45\x17\x31\x4c\x64\xd9\x40\xec\x76\x43\x8d\xb5\xc1\x5b\x34\x70\x94\x69\xae\xc3\xe9\x9e\xc7\x09\xfc\x8b\x20\x3e\x7b\x27\x30\xf7\x99\x89\x81\xc5\x23\x12\x71\x7c\x29\x17\x5b\xbb\x0f\xe1\xc8\x67\x89\xca\xb2\xc4\x4c\x0a\x87\xc5\xf4\xd8\x07\x0a\x63\x9e\xe9\x36\x4b\xb7\x4d\x72\x71\x27\xa9\xf8\xcb\xbf\xac\x29\xc9\x83\xdd\x61\x65\x7f\x66\x48\x39\x23\x6a\x3c\xca\x9c\x5b\xc2\x46\x07\xe9\x35\xce\xe3\x8e\xb3\xb8\x83\xfd\xa2\x98\x69\x16\xf8\x17\xe2\x03\x01\x06\x73\xe6\x72\xcf\xb9\xf7\xe0\x71\x99\x2e\x4f\x8e\xde\xa0\xd1\xd6\xc7\x9f\x86\x40\xf0\xff\xcb\xbf\x64\xc2\x89\x15\x05\xfc\x9a\x4f\x2b\x5c\xf2\x7d\x93\xa2\x6c\x1b\x5f\xb5\x58\x1b\xb7\x75\xd3\xfd\x5e\x2d\x30\xd4\x5f\x56\x73\xd6\xa4\xa6\x52\x21\x1e\x11\xd7\x7b\x68\x30\x97\xd6\x99\xc6\xc5\x4b\x96\x22\x97\x73\x1a\xa4\xb2\x4e\x28\x27\x59\xb2\x41\x2c\x39\xb4\x68\x6e\xf9\xd6\x3e\x37\x49\xe0\x39\xd9\x5a\x64\xde\xc0\x1d\xa9\x69\x0f\xb0\x5f\x4e\x2b\x84\xaf\x3b\x3f\xbe\x37\x55\xca\xbc\x16\x04\x8d\x67\x2e\x91\x65\x06\xed\xa2\x7c\x58\xc6\x3e\x6b\xe7\x1f\xcd\xfc\x8d\x24\x38\xbc\x8c\x0e\x81\xe0\x03\xb5\x56\xe6\x84\x32\xe3\xa9\x84\xa0\x4e\x66\xd1\xa6\xb7\x0a\xb8\xa2\xfc\x8d\x77\x53\xd9\x28\x01\xe9\x22\xee\x4f\xb5\xb2\x75\x19\x93\x0b\xc8\xea\xa9\x50\x65\xa8\xd2\x29\xa7\xb1\x16\xb7\x68\x12\xf8\xc9\xd2\x4a\xc1\x7f\xc9\x9c\xec\xbe\xd0\x69\x17\x2a\xc5\xec\xe8\xb9\x11\x48\xdb\xb9\xdb\x8d\xd3\x25\x08\x03\xc5\x16\x30\x9b\x2b\x6f\x63\xc8\x66\x7e\x10\x9c\x5c\x1f\x1c\xf7\x7c\x7a\x22\xb8\xdf\x1a\x47\x89\xdf\xf0\x34\xa5\x5c\xfb\x44\xf9\x4a\x5b\x19\xb3\xba\x1b\x39\x3a\x73\x02\x43\x8f\xfd\xf9\x08\xdf\xee\xac\x21\xcc\xb1\xbf\xb9\xc9\xb0\xe1\x56\x2b\x4f\x7c\xec\x7a\x69\xa2\x98\x79\xe8\x9b\x5a\x56\xcf\xc5\x0b\x33\x67\x87\xdc\xca\x74\x23\xd4\x0d\x66\x50\xe0\x5b\x99\xea\xdc\x88\x6a\x22\x53\x3e\x04\x40\xdb\x94\x9d\x64\x9c\xfa\x2f\x4a\x4c\x0e\x57\x32\xda\x2a\x31\x5e\xd5\xa3\x42\xda\x09\x2e\xc5\x32\x6b\x79\xd4\x62\x6a\xd0\x2d\x95\x20\x33\x2c\x7a\xe5\xcb\xb5\x4a\x39\x46\x4e\x43\x03\x21\x33\xc0\xf3\x1c\x6f\x3c\x22\x71\x9a\xd2\x46\xf2\x47\x67\x94\x6b\x2f\x66\x6c\x68\x98\xc0\x05\xab\xd4\x11\x5a\xe6\xf2\x1b\xc4\xca\x73\x1a\xbb\xf0\x6d\xc9\x3e\x15\x2b\x55\x8a\xfe\x28\x83\x3f\x12\x82\x18\xdd\x8c\xce\x48\xf4\x30\x88\x54\xed\xb4\x59\x1b\x54\x6e\x39\xa8\x59\x6f\x77\xad\xb1\xb9\xd6\x93\xb1\x91\x29\x9b\x29\xd9\xca\xa2\xa8\x13\xe9\x6f\x22\x25\x7f\xd9\x75\x05\xfd\xc9\x93\x2b\x1f\x02\xdd\x2c\x6b\x7e\x9a\x29\x1e\x1c\xeb\x16\x26\xfa\x2e\xb4\x34\xbf\x69\x83\xc7\x26\xae\x6d\x26\x6d\x4a\x3b\x1d\x33\x38\xd7\xca\xc6\xe3\x27\x42\xf9\x13\x25\xb7\xa2\xf0\xac\x10\x1b\xae\x74\xc1\x27\x7b\xb2\x3a\x9a\x13\x3e\x4b\x04\xcb\x11\xf2\xb5\x91\x36\x0e\x65\x85\x9a\xdb\xa0\x62\x37\x69\xc1\xa8\x1f\x2e\x75\x51\xac\xd7\x62\x6b\xed\xd2\x6d\xac\xd2\x48\x80\xad\xaf\xec\xbd\x88\x14\x0b\xbe\x38\xe2\xe9\x0c\x1d\x9a\x52\xaa\x00\x8f\x08\xea\x36\x84\x1d\xa1\xbb\x43\x54\x90\x4e\x30\xbd\xb1\x6d\xac\x83\x2f\x70\x9d\x5b\xb5\xe0\x7f\x9a\x95\x58\x0d\x9e\xa2\x55\x61\x43\xc3\x22\x82\x24\x9b\x40\xe1\x5d\xd7\x67\xb5\x44\xdd\x90\x8a\xbe\x15\xb2\x10\xa3\xc2\x1f\xbb\x6a\x7e\x0d\xba\xe3\x90\x51\x9f\x57\x75\x51\xa0\x0f\xe8\xe5\x2f\x2e\xcf\xc1\x19\x31\x1e\xcb\x94\xc3\x39\xd2\x78\xaf\x6f\x50\x6c\x4b\xa7\xb0\xf9\x52\xe1\x25\x3b\xc2\x3a\xe1\xea\x85\x35\x5a\xb3\xc0\xeb\x16\x96\xec\x10\xb9\xd2\x41\x34\x77\x15\xe7\x8c\xb1\x42\xc3\x40\x6f\x6c\xcd\xf8\xbf\x13\x78\xa6\x5d\xb8\x49\xf7\x29\x5a\x52\xbb\x4c\xa0\x17\x28\xac\x56\x1d\xe9\xca\xe8\xd7\xc8\x5c\x2a\x51\x84\x49\x75\xfd\x7b\x8d\xed\x21\xd8\xa5\x5c\xca\xdc\x08\xd7\x08\xc5\x76\xdc\x41\xbb\x04\xbd\xe8\x3d\xa1\x09\x9c\xa9\x29\xaf\xf7\x18\x05\xbd\xa0\x96\x9d\xd1\x59\x9d\x62\x38\x73\x57\xdb\x6e\x23\xef\x54\x8c\xce\x86\x17\xce\x63\x27\x6d\x2c\x3f\x43\x27\x64\x08\x29\x69\x85\x20\x6c\x45\x76\x5c\xe4\x49\xef\x0a\x6f\x09\xcc\xca\xe2\xec\xf2\x02\x5e\x84\x43\x39\x09\x0c\x87\x43\x1f\xd5\xb4\xce\xd4\x29\xeb\x17\xda\x42\x2a\x0b\x9a\xc2\x73\x1f\x4f\x52\x74\xd2\x60\x82\xe7\xc3\x43\xb0\x4a\xb8\x09\x24\x9e\xf0\x49\x87\x14\x00\x4f\x48\xd7\xbc\x15\x65\x45\x7c\x7f\xad\xbc\xf4\x7e\xa2\xf5\x95\x5f\x24\xdf\xe7\xef\x70\x72\x32\xcf\x13\x7a\x44\x10\x35\x38\x10\x99\x35\xc6\x5a\x1f\xda\xd9\x29\x25\x54\xf1\x07\xa5\xef\xd4\xb2\xde\xb9\x2f\x61\xf0\x14\xae\x0f\xce\xe2\xee\xbb\x3e\x18\xc0\xf5\xc1\xa5\xd1\x39\xa7\x57\xa8\xfc\x3a\xe4\x4b\x5c\x1f\x3c\xc6\xdc\x88\x0c\xb3\xeb\x03\x6a\xf6\x3f\x38\x2f\xe6\x29\x9a\x1c\x7f\xc0\xe9\xd7\xdc\x58\xf3\x3a\x6a\x84\xaf\x7d\x0a\x0d\xbd\x27\x15\x4c\x7a\xea\xeb\x52\x54\xcd\x8b\xa7\xa2\x6a\x2a\x9f\xb7\x7c\xf6\xea\x75\x89\x4e\xdc\x3e\x4a\xda\x15\x7d\xf3\x8b\xd5\xea\xf4\xfa\xa0\x1d\xff\x40\x97\xc4\x19\x95\x9b\x5e\x1f\xc0\x4c\xaf\xa7\xd7\x07\xdc\x6f\x7c\x1f\x07\x79\x7a\x7d\x40\x3d\xd1\x6b\xa3\x9d\x1e\xd5\xe3\xd3\xeb\x83\xd1\xd4\xa1\x1d\x3c\x1a\x18\xac\x06\x04\x98\xbe\x6e\x7b\xb8\x3e\x78\x43\x6b\x72\x72\x12\x42\x18\xe1\x92\xe2\x3f\x96\x3b\xab\x37\xca\xfd\x4d\xf9\x83\x43\x28\x84\x75\x2f\x8d\x50\x96\xfb\x7f\x29\xcb\x65\x2a\x0c\x82\x2d\xc7\xfb\x7d\xe5\x77\xc3\x32\x60\xe5\x67\xcf\x0d\x2b\x3f\xaf\xd0\x9e\xdb\x68\xae\xc5\x39\x6c\xe9\x75\x5e\xac\xd8\x26\x16\x12\x9e\x8b\x7e\x9a\x66\x7d\x48\x07\x84\xd2\x18\x0e\xbc\xd2\x16\x0f\xf2\x8d\xd3\x86\x78\xdd\x42\xca\x57\x6b\xe0\xdf\x85\xc3\xb0\x50\xab\x0c\x4d\xc1\xc1\xaa\xb6\x55\x1f\x09\xc9\x12\xf0\x7e\x03\xd1\x78\x69\x6e\x68\x23\xb1\x76\x52\x1d\xe7\x35\x8f\xab\x69\x91\x64\x47\x38\x0f\xec\x9b\x61\x45\x97\xa6\x58\x39\xd6\x74\xfb\x87\x98\xa1\xe3\x54\x21\x64\x35\x74\xab\xd9\x23\x30\xc7\x96\x84\x0f\xa5\x7d\x7c\x7f\x52\x97\x82\x54\x87\xc8\x68\xbc\xed\x37\x6f\xbe\x79\x73\xcb\x8b\x54\x1f\x14\xf2\x3e\xfe\xb8\x0e\x81\xd4\x41\x91\x88\x26\xf1\x7b\x83\xc7\x64\xab\xc9\x97\xe2\xed\x8f\xa8\x72\x37\x39\x85\x2f\x3e\xff\xcf\x2f\xff\xba\xa2\xa0\x17\x8c\x98\x7d\x8f\x2a\xf8\x82\xb6\x24\xc3\x62\xc5\x79\xa7\x61\x42\x52\x29\x13\x4e\x24\x79\x5b\xa6\x71\x72\xb7\x1c\x74\x27\x2c\x1b\x34\x5e\x5d\xd6\x15\xd1\xe5\x09\x27\xaa\x58\x27\x54\x8a\x03\x02\x49\x4b\x1b\x93\x8d\x00\x2f\xa6\xf0\xe8\x73\x7f\x99\x3f\x77\xbd\x20\xbe\x5f\xbd\x7d\x9d\x2c\x19\xb2\xb4\xf0\xb7\xc1\xdc\x78\xa4\x05\x5a\x2a\x3d\x66\xc6\xf1\x26\xa6\x41\xaf\x09\xa3\x33\x60\x51\x13\x62\x33\xde\x4d\x0b\xb7\xc9\x1f\xb8\x9d\x2f\xb0\x94\x4a\x96\x75\x79\x0a\x0f\x57\x14\xf1\x22\x6d\xcb\xd5\xf4\x85\x5b\x20\x20\x48\x74\xe5\x46\x94\x25\xa7\xa4\xc9\x0c\x95\x93\x63\xc9\x49\x03\x0d\x6b\xb3\xb9\xef\x2b\xc6\x1c\x94\x86\x8a\x9c\x9e\x42\x72\xa8\xc3\xec\x97\x1e\xe7\x18\xd6\xc0\x21\x7a\x93\x76\x05\xd4\xb4\x42\xbf\x1b\xbc\x01\x03\xf8\xb6\xf2\x50\xb5\x13\x86\x28\x51\x28\xa9\xf2\x98\xf6\xd2\xfe\x47\x0e\xf4\xf1\x6e\x82\x21\x7a\x8e\xdd\x58\x50\x4a\xc6\x52\xc6\x76\x93\x80\xbc\x16\x46\x28\x47\x66\xec\xd9\xe5\x85\xc7\xe8\xf3\x3e\x4d\x42\x8e\x25\x16\xe7\xc2\x62\xdc\x8d\x7e\xab\x7a\x61\x15\x6f\x15\x68\xb2\x64\xdf\xd9\x56\x7d\xf4\xf0\xf3\xb5\x4b\xde\x94\x5b\x1d\xc2\x13\xce\xa1\x51\xa7\xf0\x3f\xaf\xce\x86\xff\x12\xc3\xdf\x5e\x1f\x85\x3f\x1e\x0e\xff\xf6\xbf\x83\xd3\xd7\x9f\x75\x7e\xbe\x3e\xfe\xf6\xff\xaf\x68\x69\x39\x98\x5f\xc1\x3e\x41\x89\x44\x9c\x18\x57\x74\x10\xb3\x54\x5e\x9a\x1a\x07\xf0\x44\x14\x16\x07\xf0\x93\x62\xd5\x70\x4f\xa2\xad\x8f\x50\x93\x56\x3e\xa0\x5e\x57\x45\xca\x43\x11\x1e\xd2\xfa\x32\x61\xb8\xeb\xcc\xd7\xed\x88\x14\x5d\x0d\x1d\x49\xa3\x3a\x7c\xe6\x53\xf3\xc6\x5a\x27\x01\xe1\x26\xa9\x2e\x4f\x9a\xef\x1e\x5a\x3f\x15\x6a\x0a\xad\x58\xf3\xa0\x74\x9e\xd3\xad\x23\xd9\x24\x52\xa3\xad\x6d\xcf\xcb\x43\x21\x6f\x10\xce\x5a\xbb\x91\x84\xe5\x08\x53\xc1\x58\xdc\x8c\xa4\x33\xc2\x3b\x7d\x23\xae\x6c\x3d\x4a\xe3\xba\x80\x23\x32\x57\x13\x4e\x24\x5b\x90\xae\xe1\xee\x0d\x31\x92\x05\xff\x17\x08\x64\x4a\xa7\x5a\x8d\x0b\x19\x4c\x80\xb2\xd2\xc6\x09\xe5\x62\x82\x70\x8e\x6f\xfd\xff\xba\xe2\xc3\x0e\xd2\xc2\x51\xa6\xec\xa3\x47\x9f\x7f\x71\x55\x8f\x32\x5d\x0a\xa9\x9e\x94\xee\xe4\xf8\xdb\xa3\x5f\x6b\x51\x70\x94\xf7\x99\x28\xf1\x49\xe9\x56\xff\xff\x15\x3b\xab\xc5\x47\x5f\x6e\xb1\x8b\x8e\x5e\xf9\xbd\xf2\xfa\xe8\xd5\x30\xfc\xf5\x59\x7c\x75\xfc\xed\xd1\x75\xb2\xf6\xfb\xf1\x67\x34\x87\xce\x0e\x7c\xfd\x6a\xd8\x6e\xbf\xe4\xf5\x67\xc7\xdf\x76\xbe\x1d\x2f\xdb\x8c\x6f\x87\x6d\xaa\xc8\x90\xac\x80\x61\x29\xaa\xe1\x0d\x4e\x57\x6c\xce\x95\x70\x74\xb1\x21\x4f\xb1\x52\x54\xcb\xac\xef\xb1\xcc\x9f\x8a\xea\x05\x8e\xd1\xa0\x4a\x97\x32\xf9\x3d\x23\x30\x64\x3f\xac\xf9\xc4\x19\x58\x7b\x78\x9d\x48\xef\x78\x4f\xdb\x3a\x38\xbd\x05\xb7\x6c\x87\x1f\xd5\x9a\xfc\xc5\xcd\x29\xa6\x71\x9e\x7b\xb7\x10\xf7\xf7\xcf\xde\x7f\xb4\x77\x3b\xb5\x5c\x69\x69\xcd\xfa\x30\x2f\x1e\x7b\xe8\xcb\xa2\x87\xe1\xdc\x44\x93\x9d\x57\x2b\xf9\x6b\x8d\x70\xf1\xb8\x39\x9a\x26\x55\x5a\xd4\x7c\x19\xce\x4f\x3f\x5d\x3c\x26\xfb\xfd\x1f\x41\xdc\xdc\x21\x64\x5a\x1d\x3a\x78\xfe\xec\xc7\xff\x66\x67\x00\x97\x18\x78\x85\x1e\xce\xc7\x14\x52\x78\x37\x59\x50\xc0\xf0\x0f\xf4\x79\x72\xdc\x73\x2a\xaa\xc6\x7f\xc2\xe2\x8e\x33\xac\x8a\x8a\x00\xc4\x0d\x82\xad\x4d\x18\x1d\x35\xec\x23\xbe\x9c\x45\x1f\xe2\xc1\x39\xf2\x59\xba\x71\x21\xdc\xea\x7c\xe1\xb5\x44\x4b\xb5\x52\x98\x72\xd0\x9c\x50\xe0\x7b\xd8\x1f\xc4\xc8\xcf\x03\x66\xe5\x3e\xf6\xd8\x0c\x21\xa0\xb6\x37\x5b\xd0\x18\xce\xfd\x4c\xdf\xfb\x4e\x5a\x98\xef\x5e\x3d\x7a\x7f\x26\x47\x36\x5f\x6c\xf0\x3f\x2f\xa4\x71\xcd\x9a\xce\x33\xde\xc3\xe0\x5b\x6d\x82\xa3\x13\x61\x61\x84\xa8\xd8\x9d\xeb\xbd\x7f\xa8\x02\xd7\x61\xeb\x88\xad\xab\xa1\xd3\xc3\x6c\xf9\xe2\x6d\xa0\xdc\x66\xaa\xad\xb1\x5c\xe7\x4e\x99\xee\x6a\xa8\xde\x4d\xa6\xcb\x68\x60\xdb\x4b\x77\x1a\x0c\xb2\xeb\xc4\x56\x1b\x26\x73\x5e\x5d\xb6\x2c\x82\x53\x23\xd8\x19\x8b\x43\x22\xeb\x71\xc6\xb3\xe1\x34\x47\xf3\x66\x3d\x7b\xbb\x8f\xd1\x2f\xf3\x15\x9a\x5b\xb9\x97\xf2\xdb\xb4\x31\x53\x9f\x67\x72\xf6\xfe\xb7\x15\x41\xaf\xbd\x3b\x61\xd7\x5f\xaa\x37\x84\x6f\xd6\xe6\xbf\x33\x05\xd7\x65\xf9\xef\xd2\xc6\xae\xca\xd2\x4b\x93\x53\x3e\x71\x11\x5f\x39\x6d\x38\xe4\xde\x7d\x57\x8f\x1a\xa0\xdc\xb6\x1e\x6c\x20\xf8\xfd\x8f\x07\xff\x17\x00\x00\xff\xff\x25\x01\x0e\x3b\xe7\xe7\x00\x00") +var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x73\xdc\x36\x16\xe0\x77\xff\x8a\x57\xda\xd9\x92\x94\x74\x53\x76\x32\x95\x9d\x68\x72\x94\x46\x3e\x56\x15\x1f\x2a\x4b\xc9\xd4\x8e\xe5\xdd\xa0\xc9\xd7\xdd\x88\x48\x80\x01\x40\x49\x9d\xe3\xbf\x6f\xbd\x07\x80\x64\xdf\x87\xec\xd8\xae\x21\x3f\x24\x6a\x12\xe7\xbb\x2f\xc0\xa2\x94\x3f\xa1\xb1\x52\xab\x63\x10\xa5\xc4\x3b\x87\x8a\x7e\xd9\xe4\xfa\x1f\x36\x91\xfa\xe8\xe6\xd1\x83\x6b\xa9\xb2\x63\x38\xad\xac\xd3\xc5\x6b\xb4\xba\x32\x29\x3e\xc6\xa1\x54\xd2\x49\xad\x1e\x14\xe8\x44\x26\x9c\x38\x7e\x00\x20\x94\xd2\x4e\xd0\x6b\x4b\x3f\x01\x52\xad\x9c\xd1\x79\x8e\xa6\x3f\x42\x95\x5c\x57\x03\x1c\x54\x32\xcf\xd0\xf0\xe0\x71\xea\x9b\x87\xc9\xd7\xc9\xc3\x07\x00\xa9\x41\xee\x7e\x29\x0b\xb4\x4e\x14\xe5\x31\xa8\x2a\xcf\x1f\x00\x28\x51\xe0\x31\xa4\xc2\x89\x5c\x8f\xfc\x22\x6c\xa2\x4b\x34\xc2\x69\x63\x93\x54\x1b\xd4\xf4\xbf\xe2\x81\x2d\x31\xa5\xd9\x47\x46\x57\xe5\x31\x2c\x6c\xe3\xc7\x8b\x8b\x14\x0e\x47\xda\xc8\xf8\x1b\xa0\x0f\x3a\x2f\xf8\xef\xb0\x79\x3f\xed\x05\x4f\xcb\xef\x73\x69\xdd\x0f\xf3\xdf\x9e\x4b\xeb\xf8\x7b\x99\x57\x46\xe4\xb3\x0b\xe6\x4f\x76\xac\x8d\x7b\xd9\x4c\x4f\xd3\xa5\xc2\x59\x93\xfa\xcf\x52\x8d\xaa\x5c\x98\x99\xbe\x0f\x00\x6c\xaa\x4b\x3c\x06\xee\x5a\x8a\x14\xb3\x07\x00\x01\x84\x61\xa8\x3e\x88\x2c\x63\xb4\x88\xfc\xdc\x48\xe5\xd0\x9c\xea\xbc\x2a\x54\x3d\x15\xb5\xc9\xd0\xa6\x46\x96\x8e\x41\x7f\x39\x46\x28\x0d\x3a\x37\x61\x90\x80\x1e\x82\x1b\x63\x9c\xbb\xee\x05\xf0\x8b\xd5\xea\x5c\xb8\xf1\x31\x24\x04\xe1\x24\x93\xb6\xcc\xc5\x84\x56\xd3\x6a\xe5\xd1\xf4\xd8\x7f\x6b\xbd\x77\x13\x5a\xba\x75\x46\xaa\xd1\xaa\xa5\x50\xbb\xcd\xd7\xe0\x41\x73\x39\x29\xe7\x97\x30\xf3\x72\xd3\xf9\xcb\x6a\x90\x4b\x3b\x46\xb3\xf9\x22\xea\x2e\x73\x6b\x38\x5f\xf0\x65\xc9\x42\x5a\x83\x46\x86\x4a\xe6\x98\x61\x6e\x82\x93\xd1\xfc\x1e\x33\xe1\xe2\x4b\xdf\xe8\xe6\x91\xc8\xcb\xb1\x78\x14\x5e\xda\x74\x8c\x85\x68\xe8\x41\x97\xa8\x4e\xce\xcf\x7e\xfa\xf2\x62\xe6\x03\x4c\x43\x67\x8a\xce\x41\x5a\x10\x60\xb0\xd4\x56\x3a\x6d\x26\x04\xad\xd3\x8b\x9f\x6c\x0f\x4e\x5f\x3f\xb6\x3d\x10\x2a\xab\x19\x0f\x4a\x91\x5e\x8b\x11\xda\x64\x6e\xad\x7a\xf0\x0b\xa6\xae\xf5\xda\xe0\xaf\x95\x34\x98\xb5\x57\x41\xe0\x89\x30\x99\x79\x4d\xf0\x6f\xbd\x2a\x0d\xcd\xe9\x5a\x8c\xec\x9f\x96\x94\x9b\x7a\x3f\xb3\xc3\x7d\x02\x83\x6f\x07\x19\x09\x38\xb4\x4c\x02\x81\xc7\x30\x0b\xb0\xf3\xa4\x21\x2d\xed\xdf\xa0\x45\xe5\x45\x1e\xbd\x16\x2a\xec\x29\x81\x0b\x34\xd4\x91\xd8\xbd\xca\x33\x92\x84\x37\x68\x1c\x18\x4c\xf5\x48\xc9\xdf\xea\xd1\x2c\x38\xcd\xd3\xe4\xc2\xa1\x75\xc0\x5c\xab\x44\x0e\x37\x22\xaf\xd0\x83\xb2\x10\x13\x30\x48\xe3\x42\xa5\x5a\x23\x70\x13\x9b\xc0\x0b\x6d\x10\xa4\x1a\xea\x63\x18\x3b\x57\xda\xe3\xa3\xa3\x91\x74\x51\x86\xa7\xba\x28\x2a\x25\xdd\xe4\x88\xc5\xb1\x1c\x54\x24\x0e\x8f\x32\xbc\xc1\xfc\xc8\xca\x51\x5f\x98\x74\x2c\x1d\xa6\xae\x32\x78\x24\x4a\xd9\xe7\xc5\x2a\x96\xe3\x49\x91\xfd\x0f\x13\xa4\xbe\xdd\x9f\x01\xdf\x42\x62\x86\x28\x36\x57\xc2\x9a\x84\xa7\xa7\x22\xdf\xdd\xef\xa5\x01\x29\xbd\x22\xa8\xbc\x7e\x72\x71\x09\x71\x01\x1e\xec\x1e\xc2\x4d\x53\xdb\x00\x9b\x00\x25\xd5\x10\x8d\x6f\x39\x34\xba\xe0\x51\x50\x65\xa5\x96\xca\x79\x96\xce\x25\x2a\x07\xb6\x1a\x14\xd2\x59\xa6\x39\xb4\x8e\xf0\x90\xc0\x29\xab\x30\x18\x20\x54\x25\x71\x52\x96\xc0\x99\x82\x53\x51\x60\x7e\x2a\x2c\xbe\x77\x50\x13\x44\x6d\x9f\xc0\xb7\x39\xb0\xdb\x1a\x78\xbe\xc3\x1c\x8f\x01\x44\x0d\xb9\x51\xe3\x65\x4c\x09\x9e\x03\x17\x49\x60\x58\xc1\x8b\xf4\x88\x2c\x33\x68\x17\x7c\x98\x63\x48\xdf\xd0\xd3\xc9\x58\x5b\xc2\x9f\x70\xf0\xea\xf9\x0b\x48\x85\x82\xca\x22\x31\x4f\xaa\x95\x22\x82\x70\x1a\x04\xe9\xb2\x3e\xde\x49\xcb\x04\x64\x70\x24\xad\x33\x93\x04\x9e\x6a\x53\x08\x77\x0c\xdf\xc4\x57\x7d\x1e\x4e\x1b\x90\xe5\x77\xc7\xdf\x94\xda\xb8\xef\xe0\x95\xca\x27\x34\x68\x06\xb7\x63\x54\x70\x51\xef\x0d\xbe\x6d\xfd\x78\x66\xca\x34\x81\xb3\x91\xd2\x26\xb6\x24\xaa\x3a\x2b\xc4\x08\x61\x28\x31\x67\xba\xb6\xe8\x92\x59\x0c\xae\xc4\x22\x78\x73\x69\x28\x47\x2f\x44\xb9\x16\x34\xa7\xb1\x25\xcd\x45\xd3\xb7\x95\x77\xf3\xd1\x69\x26\x65\xda\x12\xfd\x29\xd2\x6b\x10\x61\x96\x42\x94\x7d\xcb\x6c\xd3\x02\xd3\x66\x10\x38\x8d\x03\x10\xfc\x9a\xd7\x67\x41\x72\x25\xdb\x6e\xbb\xbd\xb3\xad\xfb\x36\x66\xc8\x5a\xa0\xbd\x58\xa4\x45\x36\x98\x63\x64\xca\xf4\x5c\x67\x7e\xdb\x6b\x67\x79\xd6\x6e\x0d\x78\x57\x6a\x8b\x16\x32\x39\x1c\xa2\x21\xb9\xa3\x6f\xd0\x18\x99\xa1\x85\xa1\x36\x8c\xaf\x52\x67\xcc\x93\x35\xfe\xa6\x54\xed\xb9\xce\x36\x45\x0c\x4d\xcd\x0a\xc3\x13\x63\x20\xc3\xa5\xdb\x5d\xc8\xed\xb0\x86\x79\xe9\x11\x43\x36\xff\x27\x8b\xbf\xce\xc0\xe3\x24\x34\x8e\x94\x1a\x2c\xaa\x20\x3a\xf6\x2d\x6d\x7f\xdf\xd6\x63\x2e\x5a\xee\x06\x4b\xde\x64\xd9\xf4\x28\x9d\xe1\xc9\x9a\xe5\xcf\x6d\xe1\x31\xff\x18\xa0\xe5\xee\xf5\x52\x59\x83\x67\x55\xce\xa2\xa6\xca\xa7\x31\xba\x6c\x1f\x1b\xee\x65\xd3\xfd\xf8\x76\x38\x44\x63\x30\x7b\x5c\x11\xfd\x5e\xd4\xab\x0a\x42\xca\xbf\x7e\x72\x87\x69\xb5\x8c\xc7\x96\x6e\x9d\x8c\xe2\xb0\x4d\x34\x70\x2b\xf3\x3c\x4c\x47\x02\x25\x7e\xa0\xfd\xb2\x1d\x43\xe0\xb1\x5e\x48\x5b\xe1\xa4\x1d\x4e\x18\x1c\x35\xc0\xf0\x8e\x74\x36\x7b\x2c\x4c\xf1\x72\x28\x31\x83\xc1\x24\xa8\x6b\x12\x9e\x3d\x18\x54\x0e\xa4\x63\x5d\x9e\x8e\xb5\xb6\x08\xc2\xc3\x9d\xc7\xbd\x91\x9a\x2d\x25\xd0\x0a\x49\xfe\x14\xa4\x90\x03\xe3\xb4\x86\x4f\x78\xe5\x4d\x37\x69\xa1\x20\x89\x5f\xc3\x2a\x92\x23\x0d\x73\x2b\xdd\x98\x7f\x8c\xc8\xe4\x26\x2b\xcc\x56\x05\x0d\x7a\x8b\x72\x34\x76\xb6\x07\x32\xc1\x84\xb1\x8b\x22\x1d\xb7\x86\x2d\x10\x9d\x05\x91\xe7\x71\x09\x6d\x92\xf0\x7a\xb3\x20\x13\x05\x0e\x6a\x1b\x26\xd8\x1b\xbd\x5a\xaf\xce\x62\x6d\x21\xb8\x7a\x80\x2e\x4d\x0e\x7b\x90\xea\xa2\xac\x1c\xc1\x84\xd6\x38\x98\x80\x74\x64\x67\x7b\x7b\xc9\xe8\x6a\xe4\x77\x82\x79\x98\x38\x1a\xab\x5e\x33\x91\x70\x20\x1f\x51\x8d\x60\xcf\x6f\x6e\x2f\xda\x9f\x34\x9c\xf4\x9b\xe0\xfd\x15\xc2\xa5\xe3\x60\x02\xa7\xda\x18\xb4\xa5\x56\xdc\x93\xbf\x3c\x69\xd6\xf6\xcf\xba\xd3\x81\x3d\x6c\x80\x39\x96\xa3\x71\x84\xa5\x30\xc8\xef\xa6\x71\xb0\x8a\x47\x1a\x3e\x11\xc6\x4c\xf9\x92\x8b\x1e\xe9\xb0\x58\xc3\x25\x73\xa4\x7d\xa2\x00\x8b\xd2\x4d\x5a\x34\xd1\xc2\x9e\x43\x53\xd4\x30\x60\x04\x33\xbb\x5a\xbf\x3f\x59\x94\xb9\x4c\xa5\x0b\x14\x02\x0f\xe1\x80\x49\x44\x3a\x12\x65\xa0\x74\x5f\x97\x87\x09\x9c\x70\xf8\x62\x83\x09\x94\xae\xc7\x0f\x03\xd1\xa4\x56\x37\x63\xad\xdd\xdb\x86\x42\xc5\x3f\xcb\x6d\xba\xf9\xa7\x1f\xd6\x8f\x2a\x9d\xb5\xf2\x16\x37\xf7\x30\x59\xdb\x74\x53\xf1\x16\x5b\xc7\x35\x6c\xd2\x7a\x16\xd5\x9e\xa4\x2d\xe6\x98\x92\x4b\x4a\xb0\xef\x81\xb0\x56\xa7\x92\xac\xfc\x86\x68\xa7\x29\xdd\xef\x64\x3d\xec\x61\x5b\xf8\xc3\xd6\xfb\xa7\x67\x96\xf1\x36\xed\x37\x07\x8d\x5c\x92\xf1\x3b\x9c\x81\xca\x94\xc0\x1a\x4c\xf8\xeb\xbe\x85\x5c\x0c\x30\xb7\x9b\x01\x01\xb6\xe2\xda\xe6\xd9\x90\x7f\x97\x6e\x68\xe9\x46\x82\x8f\x59\x23\x9e\x84\x36\xf9\x66\x42\x2a\x1b\xfc\xe7\x1e\x08\xb8\xc6\x89\x77\xb5\xc9\x83\x8f\x81\x0b\x6e\x6c\xd0\xab\x1b\x22\x8e\x6b\x9c\x70\xa3\xe0\x77\x6f\xb1\xdc\xad\x89\xc3\x3f\xdb\xb0\x69\xf3\xf4\x69\xa1\x5b\xf6\x88\x9b\xde\xa2\xdb\xf6\xf4\xeb\x9f\x6b\x5c\x69\x79\x2d\x7a\xe6\x4c\x12\xa6\x49\xc6\x07\x23\x89\xf5\x57\xc4\xb1\x28\xcb\x5c\x22\xfb\xf3\x5b\x4e\xb3\xd2\x0b\x58\xf5\x44\xe8\xdd\x6b\x5f\xaf\xeb\x80\x86\x27\xc8\x7d\xeb\x89\x8f\x38\x7d\x2c\x4b\xef\xdf\x5a\x64\xc6\x8d\x91\x9f\x9f\x44\x2e\x9b\x50\x9b\x65\x3d\x7b\xa6\x7a\xf0\x52\x3b\xfa\xdf\x13\xf2\x84\x6d\x0f\x1e\x6b\xb4\x2f\xb5\xe3\x9f\x09\x3c\x73\x9e\xd6\x9f\x6f\x28\xd9\xde\x01\x80\xfc\x7a\xef\x05\x9e\x13\xe5\x65\x0a\x6d\xbf\x1d\x33\xb2\x09\x9c\x79\xb3\xa5\x66\x5c\x69\xe1\x4c\x91\x71\x18\xc0\xc0\x51\x3c\x6e\x1b\x86\x28\x2a\xcb\x41\x1e\xa5\x55\x9f\x6d\x80\x85\x63\x78\xe8\xd1\x38\x6d\xf8\xad\x18\x6e\xf9\x50\xcf\x38\xd6\xf0\x7c\x69\xe7\xb1\xb8\x61\x93\x4e\xaa\x51\x5e\x1b\x6f\x3d\xb8\x1d\xcb\x74\xec\xad\xee\x01\xfa\xd0\x60\x69\x90\x14\x96\xb0\x24\xaa\xe8\xcd\x08\x0d\x19\xbb\x32\x8e\xe7\x03\x93\xb9\x48\x31\x83\x8c\x4d\x4b\x1f\x64\x13\x0e\x47\x32\x85\x02\xcd\x08\xa1\x24\x4d\xb2\x1b\xf6\xb7\x13\xec\xfe\xd9\x5a\xbc\xb7\x27\xdc\x8a\xdc\x58\x45\x3e\x25\x5b\xf7\x2f\xd2\x8e\x6c\x57\x77\xda\xb1\xd3\x8e\x33\x4f\xa7\x1d\xeb\xa7\xd3\x8e\x6b\x9e\x4e\x3b\x76\xda\xf1\xbd\x6b\x47\xef\xcb\xee\xe0\x3c\xff\xdb\x87\x38\x66\xbd\x65\xd6\xb4\x31\x4d\x37\xed\x36\x93\xbe\xb9\x08\x02\xe7\x92\x5d\x6d\xe9\x93\x24\x46\xa8\x11\xc2\xa3\xfe\xa3\x87\x0f\xb7\x71\xaa\x03\x22\x37\xea\x31\x0c\x99\x1e\xa9\xdc\x97\x5f\xac\xec\xb1\x2c\xfe\xf6\x0e\xa2\xa6\x81\xc6\xeb\x40\xde\x94\xed\xb0\x24\xf0\xc9\xd2\x49\x69\x07\x05\x3a\x10\x6e\x2a\x54\x24\x0b\xec\xd5\xa9\x02\x26\xf8\x90\xa5\x8c\x11\xd8\x0c\xb4\x0a\x71\x3c\x02\x7e\xb2\xdb\x0a\x52\x14\x3e\xa5\x36\xc0\x7a\x15\xba\xa0\x59\xa5\x72\x91\x5d\x68\x09\x18\xa1\x02\x07\x98\x8c\x12\xc8\x2a\xee\x26\x54\x48\x9b\x1e\xfa\xd5\xda\x89\x75\x58\x70\x24\x57\x1b\xfe\x1f\x2d\xdb\x99\x09\x35\xc6\x1b\x54\xae\x12\x79\x3e\x01\xbc\x91\xa9\xab\xf7\xc7\x59\x5b\xe9\x7c\xb0\x7d\xb3\x10\xe1\x46\xa6\xc3\xe6\xe6\x42\x7f\x8e\x82\xed\x9a\x3e\xdb\x68\xfb\xb9\xb1\x37\xe1\xc9\x19\x5d\xe8\x77\x92\x2c\x35\x56\x1d\x8d\xeb\x63\xe0\xfc\x27\x13\xd7\xab\xd7\xeb\x43\xae\xb0\xb5\x24\xdb\x42\x7a\xcd\x9a\xa5\x55\x9e\x13\x61\xf8\x28\xec\xfc\x06\x16\x44\x47\xfd\x96\xa6\x88\xd9\x07\xde\x7d\x88\xf9\xe4\xe5\x63\x82\x0a\xb5\xb9\xd4\xa5\xce\xf5\x68\xd2\x86\xb4\x2f\x2f\x92\x45\x19\x83\xe3\x02\x6c\x35\x08\x46\x03\x91\xdf\xcb\x19\xd4\x74\x91\xbf\x2e\xf2\xd7\xf9\x36\x73\x4f\xe7\xdb\xd4\x4f\xe7\xdb\xac\x79\x3a\xdf\xa6\xf3\x6d\xba\xc8\x1f\x74\xda\x71\x05\x4c\x3a\xed\x08\x9d\x76\x5c\xba\xaf\x4e\x3b\xae\x04\x4f\xa7\x1d\x3b\xed\xb8\xe8\x29\x75\x76\x8f\x42\xc7\x52\x67\x2b\xea\x1c\x7d\xd4\x27\xd5\xfd\x5c\xa7\xc2\x85\xba\x7c\xea\x12\xe2\x7c\x56\x14\x3e\x10\xd5\x83\xdf\xb4\x42\x5f\xbc\x46\xb8\xe1\x70\x92\x76\x63\x34\xd4\xfc\xc0\x1e\xae\x2c\x6c\xea\xea\x24\xbb\x3a\xc9\x8f\xbe\x4e\x72\x2c\xac\xc7\xab\x17\x4a\xcb\xcb\x26\x5b\x0c\x79\x89\xa6\xf8\x44\xab\x26\x89\x5c\x02\xba\xf9\xc4\x53\x83\x52\xbf\xf3\x2c\xe4\x0b\x30\x3b\x9f\xde\x6f\xb0\x97\x79\x53\x22\xcb\x30\x83\x12\x4d\xdf\x93\x88\x86\xa1\x54\xd9\x82\xbd\x46\xf8\x7c\xd0\xea\xc7\xe9\x7d\x7c\xc0\x12\xc8\xe9\x85\xec\x10\x73\x6d\x07\x8e\xa7\x24\xfc\x47\x51\x10\xb9\xad\x55\xdf\x07\x17\x82\xbc\x3f\x6c\x68\xd7\x6f\x6f\x9a\xb3\x41\x1d\x43\xc2\xbb\xfb\x95\x6c\x96\xff\x5a\xa1\x99\xf0\xf9\x8f\xc6\x60\xad\xcf\xd6\x85\x1c\x99\xb4\x90\x0a\xeb\x35\xc5\xb6\xae\xe5\x96\x6e\xd4\x6e\x7e\xca\xee\x91\x68\x98\x85\xcb\xec\x50\xde\x27\x8d\x3e\xb8\x87\xd9\x42\x27\x7c\x41\x16\xa0\x89\xfe\x6f\xb5\x9e\x5d\x4d\xb7\x9d\x0c\xb7\x85\x44\xf1\x11\x3b\xe7\xb0\xbb\x83\x0e\x3b\x3b\xe9\xb0\x93\xa3\x0e\xbb\x3a\xeb\x70\x0f\x87\x1d\x76\x73\xda\x61\x96\x14\x08\x43\xc1\xca\x7a\x3f\xfe\x3b\xdc\xc7\x45\x85\x7b\xf8\xf1\x30\xbb\xd5\x9a\x4c\xcd\xfb\x72\xea\x99\xd6\xa7\xfc\xfa\xbf\x1a\x58\xbb\xf9\xf4\x30\x0b\xaa\xe0\x0c\x4b\x76\x68\x3f\x11\x0f\xff\x2f\x71\xb7\xe1\x5e\x2e\x37\xec\xee\x76\xc3\xee\x94\xc1\xaa\xee\x39\xa7\x53\xef\xab\x30\xfd\x28\x5e\x45\xf0\x19\xdc\x21\xfc\x4e\x9a\x80\xf1\xf2\x27\x94\x42\x1a\x4b\xf6\x5d\x88\x99\xb4\xbf\x05\xef\xbc\x3d\x4c\xe1\x8f\x10\x93\xa8\xbe\x11\x39\xe9\x1e\x5f\xc7\x11\xfc\x22\x1a\x7d\x56\x4d\xf7\xe0\x76\x4c\xde\x26\x49\xa9\xfa\xbc\xf3\xde\x35\x4e\xf6\x7a\x73\x84\xb4\x77\xa6\xf6\xbc\x8e\x9a\x23\x9d\x5a\xa1\x69\x95\x4f\x60\x8f\xbf\xed\xbd\x6b\xcd\xbe\x83\xe2\x6a\x5f\xa1\xb2\xab\x5e\xd8\x81\x4a\x54\xbc\xd6\xe5\xdd\x1b\x9b\x5e\x8b\xf8\xc4\x46\x9c\xc5\x36\x0a\x86\x4b\x2d\x5a\xca\xa5\xae\x1a\x61\x1a\xe3\xf7\x59\x74\x7e\x2b\x15\x6e\xba\x88\x67\xce\xc3\x60\x5e\x49\xcd\x97\x34\x05\xc4\x6b\x85\x96\x0d\x3b\xac\x43\x44\xad\xce\xdc\x36\xf1\xe5\x20\x8d\xb6\x53\xd9\x6c\x81\x48\xd3\x83\x6d\xc4\x02\x85\xb2\xb0\x17\x63\x4f\xfb\xb6\x69\xb1\x97\x34\xa7\xfb\xea\x11\x0f\x7e\xff\xf3\x70\xea\x44\x5f\x33\x60\x67\x69\x77\x96\x76\x67\x69\x6f\xd1\xab\xb3\xb4\x97\x3f\x9d\xa5\xbd\xc5\xd3\x59\xda\x9d\xa5\xbd\x6a\xe2\xce\xd2\xee\x2c\xed\xf5\x93\xef\x66\x69\xef\x5a\x27\xd4\xb6\x7b\x43\x72\xce\x5f\x64\x26\x9c\x4c\x9b\x1a\xa2\xd8\xca\xff\xf5\x6e\xed\xed\xb6\x2d\xbd\xd8\xda\x6e\x5b\xe4\x73\xbe\x45\xb2\xc6\xb4\xae\x8d\xef\xb9\x9e\xab\xad\xee\x8f\xab\x16\x6a\x07\xda\x68\x25\x14\x76\x24\x8e\xcb\x98\x0a\x0f\x17\xff\x0d\xb0\xc9\x93\x67\x70\x10\x33\x2e\x87\x04\x7c\xa5\xdd\xf4\x47\xe5\x64\xbf\x69\x51\xe7\x60\x38\xbd\x38\x75\xde\x66\x2a\x2d\x51\x67\xdd\xeb\x4c\x71\x83\x4f\x12\x21\x68\xa6\xd6\x20\x6d\xb8\xde\x90\xab\x25\x4c\xa5\x14\x8d\xaa\x55\x4c\x1f\x7b\x99\xe3\xef\xe3\x0b\x94\xe7\x8d\x25\x5e\x0f\x5b\x4c\x0d\x94\x5a\xf9\x4e\xe1\xfc\x15\x88\xa1\x94\x5f\xab\x90\x11\xa5\x37\x31\xeb\x1b\x89\x92\x77\x24\xeb\xd9\x13\x78\xc2\x74\xd8\x1e\x58\x5a\x86\x8f\xc8\x73\x7d\xbb\x8d\x48\xfa\xab\x8e\x45\xdd\x6e\x7d\x2c\x6a\x26\x7f\xd7\x9d\x8a\xfa\x2f\x39\x15\xc5\x1f\x3d\x0b\xbd\xf3\xe3\x51\xf0\xef\x70\x01\xa1\x41\x06\x55\x51\xe5\x4e\x96\x4d\xad\x94\xf5\x53\xe5\xde\xca\x1c\x86\xca\x93\x69\xba\xa4\xd9\x44\x3a\x9e\xa5\x4f\x1e\x8f\x6b\xab\x2c\x33\x6d\xa8\xee\x10\x79\x1e\xce\x14\x45\x93\xd4\x97\xb0\xc8\x0f\x5d\x99\xf0\x38\xdc\xd9\x5a\x7b\x33\x2c\x64\x0e\x48\x16\xe6\x84\x50\x92\x6a\x2b\x84\xa8\x77\x8a\x6e\x30\xaa\xde\x91\xbc\x41\xd5\x48\xd2\x03\x7b\x78\x18\x75\xf8\x3b\x95\xf0\xef\x45\x42\x7f\xd3\x92\xa4\xdf\x6d\x22\xa3\x79\x43\xb5\x94\x6e\xc0\xd7\xc8\xe8\x0f\x59\x82\xb1\x4d\x9e\x7f\xbb\x18\xc3\x0e\xf9\xfd\xbf\x30\xb7\xff\xe9\x9c\x2c\xfb\xc0\x11\xc6\x0f\x51\x5b\xff\xd1\x47\x15\xbb\xe2\xfa\xe6\xb9\x6f\x71\xfd\x7b\x8f\x1c\x7e\xd8\x1a\xfb\x4f\x20\x5a\xf8\x21\x6b\xec\xbb\x08\xe1\x4a\xa4\x7c\x6c\xa5\xef\xd3\xcf\x4e\x11\xc1\x2e\x1a\xb8\xb3\x16\xde\x52\xe1\xdc\x37\x0a\xb8\x25\x45\xec\x98\x67\xef\x72\xec\x7f\x4d\x8e\xbd\xb3\x78\x37\x7c\x3a\x8b\x77\x29\x50\x3a\x8b\x17\x3a\x8b\x77\xdd\xf6\x3a\x8b\x77\x25\x78\x3a\x8b\x77\x25\x52\x3a\x8b\xb7\xb3\x78\xe1\x53\xb3\x78\x77\xb9\xa5\xab\xcb\x75\xdf\x2b\xd7\xbd\xad\xb4\xd8\x4a\x46\x6c\x49\x07\x5b\xe7\xb6\xbb\xbc\xf6\xc7\x92\xd7\xde\xf8\xc0\xbf\x72\xf2\xbe\x87\xfe\xdb\xb8\x5a\x76\xf2\x5f\xdc\x68\x99\x41\x59\xb9\x70\x9e\xba\x3b\xfd\xff\x2e\x4e\xff\x4f\x41\xbe\xbb\x02\x60\xa3\x2b\x00\x96\xc1\xac\xbb\x07\xa0\xbb\x07\xe0\x1d\x27\xa1\xbb\x7b\x00\xba\x7b\x00\xba\x7b\x00\xe2\xd3\x9d\x4e\x82\xee\x74\xd2\x46\x4f\x77\x3a\x69\xf9\xd3\x9d\x4e\xfa\x68\xa3\xaf\xd0\x9d\x4e\xfa\xb8\x23\xb1\xd0\x9d\x4e\xea\xa2\xb3\x1b\x22\xea\x13\x3c\x9d\xd4\xdd\x03\xf0\xb1\xd6\x28\x40\x67\x69\x77\x96\x76\x67\x69\x77\x96\xf6\xea\xa7\xb3\xb4\xb7\x78\x3a\x4b\xbb\xb3\xb4\x57\x4d\xdc\x59\xda\x9d\xa5\xbd\x7e\xf2\xee\x1e\x80\x4f\xa8\x36\x02\xba\x7b\x00\xba\x7a\x89\xee\x1e\x80\xff\xde\x7b\x00\xa6\x72\xf7\x1f\xee\x32\x80\xed\x97\xd1\xdd\x08\xd0\xdd\x08\xd0\xdd\x08\xd0\xdd\x08\x10\x9f\xee\x46\x00\xff\x7c\x4c\xb1\xc6\xee\x7c\xd4\x52\xa0\x74\xe7\xa3\xa0\x3b\x1f\xb5\x6e\x7b\x9f\x40\xdc\xb0\x3b\x1f\xf5\x11\xc6\x0a\xbb\xf3\x51\x5d\x5c\x70\x16\x39\x9f\xc8\xf9\xa8\xee\x46\x80\x8f\x31\xdb\xde\x59\xbc\x1b\x3e\x9d\xc5\xbb\x14\x28\x9d\xc5\x0b\x9d\xc5\xbb\x6e\x7b\x9d\xc5\xbb\x12\x3c\x9d\xc5\xbb\x12\x29\x9d\xc5\xdb\x59\xbc\xf0\xa9\x59\xbc\xdd\x8d\x00\xdd\x8d\x00\xdd\x8d\x00\x9f\x62\x86\x7b\x2d\xa6\x0b\x2c\xb4\x99\x5c\x0a\x33\xc2\xa5\x59\xed\x29\x74\xee\xbd\x68\xf5\x20\x09\x39\x94\xa3\xca\x04\x03\xfc\x6f\xcf\x5e\xbd\x78\xf2\xe2\xf9\xd9\x8b\xb3\xcb\x00\xaf\xa1\xf6\x2e\xee\xe8\xf5\xf9\x29\xa4\xc2\x89\x5c\x8f\xe0\x5c\x67\x41\xe9\x7a\xeb\x5f\x0f\x5d\x58\x08\xe4\xb2\x90\xae\xee\x65\xd1\xdc\xa0\xe9\x05\xb8\x71\xf2\xbb\x52\x4e\x16\xe8\x53\xb7\xc2\x39\x62\x4d\x92\x03\x05\xa2\xe3\x73\xee\x85\xb8\x46\x02\x14\x8c\x2a\x61\x84\x72\x18\x51\x21\x9d\xef\x94\x69\xb0\x3a\x98\x0f\x32\xf8\x18\xb4\x0e\x8b\xc1\x52\x38\x8f\x99\xe1\xb1\xb8\xf1\x07\xaa\x87\x9a\x60\x4e\x44\x51\xe8\x4c\x0e\x65\xea\x8d\x3c\x28\x44\x56\x67\xfd\x82\xae\x40\x53\x13\x50\xb3\x81\x63\xe8\xcf\x81\x07\xd5\x8d\x34\x5a\xb1\x06\xbb\x11\x46\x8a\x41\x1e\x76\x35\xf0\x01\x01\x1e\xb7\x59\xa0\x82\xc1\x84\xfc\x1c\x3f\x52\x80\x56\x38\xf9\xbe\xa2\xdf\x54\x73\x0f\xdc\x99\xc6\x5f\x3c\x7c\xf8\x3f\xeb\xe3\xec\xbe\xd3\x95\xf2\xd8\xf1\x12\xb3\xe1\x5b\xea\x21\x87\x20\xdd\x3e\x71\x8c\x25\xcf\x87\x46\x30\x98\x55\x69\x84\x94\x76\xa5\x91\x5e\x2b\x8b\x1a\xe1\x1e\x0c\xc4\x5d\x45\x45\x0c\x40\x02\xc1\x5a\x39\xc8\xb1\x47\x6c\x2f\xdb\x6d\x07\x48\xc0\xe3\x1e\xcc\x9a\x37\x48\x2b\x27\x72\xf3\x12\x17\x91\x78\x5f\xf3\x59\x77\xe1\xf9\x3c\xc3\xa1\xa8\x72\xcf\x1a\x1e\x37\x8c\xdf\x89\xae\x48\x14\x64\x78\x07\xb2\x10\x23\x7f\xf6\x5e\xc0\x50\xe6\xd8\x8f\x39\xf4\x54\xa4\x63\xec\x41\x86\xa4\x5b\xa4\x42\x10\x30\xd2\x3a\x23\x15\x63\xf4\x9d\x2c\x78\xb4\x40\x8f\x35\x7c\x06\x13\xc8\x74\x35\xc8\x6b\x2c\xcb\xdf\x6a\xc9\x50\x8a\xf4\x9a\xe6\xe2\x81\x41\x38\x38\x72\x45\x79\xc4\xbf\xc2\x7f\x43\x0b\x9b\xfc\x62\xb5\x8a\xa2\xaa\xb5\xcc\x64\x06\xfe\xd2\xc2\x00\xad\xeb\xe3\x70\xa8\x8d\xfb\x27\x41\xab\x52\x4c\xad\x4a\xd7\x5b\x8f\x48\xad\x2c\x7a\x1d\xa7\x34\x13\xf2\x14\xe6\xb5\x59\xc0\xa1\x2d\x72\x48\xf6\x96\x48\x80\x92\x38\xcd\xa8\x63\xf8\xbf\x07\x57\x9f\xff\xd1\x3f\xfc\xfe\xe0\xe0\xcd\xc3\xfe\xd7\x6f\x3f\x3f\xb8\x4a\xf8\x8f\xcf\x0e\xbf\x3f\xfc\x23\xfe\xf8\xfc\xf0\xf0\xe0\xe0\xcd\x0f\x2f\x9e\x5d\x9e\x3f\x79\x2b\x0f\xff\x78\xa3\xaa\xe2\xda\xff\xfa\xe3\xe0\x0d\x3e\x79\xbb\xe1\x20\x87\x87\xdf\xff\x6d\xc9\x82\x84\x9a\xbc\x1a\x2e\x57\x46\xfd\x0d\x6b\x5e\xfa\x9b\xa8\xc2\xbb\xfe\x75\x35\x40\xa3\xd0\xa1\xed\x4b\xe5\xfa\xda\xf4\x7d\x87\x63\x70\xa6\xc2\x85\xdd\x48\xe2\xaf\x0b\x14\x4e\xc9\xd5\x97\xad\x0e\x33\x41\x91\x70\x53\x44\xf0\x59\x68\xca\x5a\x40\x92\x5e\xe5\xeb\x10\x5c\xa3\xaf\x12\xb8\x58\xd0\x93\xd5\x52\x68\xb1\x6f\xbd\x02\xb3\xb3\xe3\xcc\xd4\xc1\x78\xc1\xc9\x63\x2e\xd9\xc2\x06\x66\xec\x76\x46\xeb\x5a\x7c\x94\x46\x6a\x23\xdd\xe4\x34\x17\xd6\xbe\x14\x05\x6e\x04\xdd\xb3\x61\x63\x0c\xf4\x88\xd9\x48\x86\x07\xa5\xe5\x0d\xb4\x38\x2e\x4b\x0e\xd2\xb3\xad\xf6\x11\x42\xb1\x4d\xcd\x33\x91\xfb\xb4\x81\xdf\xd0\xe8\x70\xd1\x87\x41\xaf\xab\xe3\xe7\xd5\xc0\x5b\xb1\x57\x8b\x69\xc5\x7b\xd5\xca\xe1\x9d\x3b\x65\x65\xbb\x99\x96\xbe\x58\xd4\x15\x52\xa1\x68\xd9\x7c\xd1\xcb\x10\x7e\xce\x71\x24\xd2\xc9\xcf\xb4\xfc\x9f\x0d\xd2\x42\xc8\x16\xf9\xd9\x1b\xdb\xa7\x5e\x1e\x5f\x70\x25\xc2\x7e\xb8\xb9\xc7\x02\x4a\xbe\x98\x47\xaa\x5f\xbc\xe1\x52\xdb\x64\x86\xeb\xdb\x4a\x9d\x25\x04\xb9\x64\x66\xed\x2c\x93\xea\x8f\xb5\xb2\x7c\xf3\xd9\xdb\xb9\x96\xc1\x05\x23\x27\x8f\xd4\x6e\x9b\x3e\x4d\xc5\x02\x93\x04\x5b\xdc\x20\x9c\x64\x85\x64\xaf\x0f\x0e\xce\x2f\x4e\x0e\xa7\x76\x42\xfa\xda\xab\x98\x4c\xa3\x55\xfb\xce\x2b\xbd\x31\xda\xc6\xd3\x63\xb5\xc1\x85\x16\x9e\x5b\xb8\xd2\x22\xce\x49\x00\x63\xe7\x6f\x80\xf5\xe4\x17\x27\xf0\xf3\x40\x58\xcc\xa5\x42\x0f\xbb\xd2\xc8\x1b\x99\xe3\x88\x66\x6c\xc5\xad\xe1\xb4\x32\x06\x95\xcb\x27\xf1\x06\x98\xc5\x58\x91\x96\x04\xfa\x34\xb9\x45\xca\xaa\xad\xce\x1a\x59\xd4\xda\x62\x96\xc0\x05\xf7\x98\xf8\x10\x45\x68\xc7\xb8\x61\xbd\xb8\x0c\xb9\x60\xd0\xd2\xc0\x52\xf9\x5e\x32\xf3\x2a\x0e\x8d\x21\x97\x87\xab\xc2\x2a\xcb\x06\x70\x9e\xa1\xa9\xd5\x32\xab\x26\x1b\x4d\xb1\x94\x4d\x82\x50\x3a\x17\x00\xb3\x00\xf0\xcb\xf7\x3c\x6d\x54\x38\x5d\xaf\x97\xb5\xdf\x19\x2d\x6e\x58\xb9\xca\x20\xe9\x7f\xc6\x2e\xf3\x5c\x1b\x34\x33\x76\x4c\x7b\xfa\x5e\xbd\xec\x42\xc8\x40\x6a\x36\xce\x69\x70\x50\xc9\x9c\xbd\x40\x59\xef\xcf\x7a\x42\x16\xf5\x74\x7a\x08\xba\x2c\xc2\xf5\x4b\x55\x59\x6a\xe3\x1a\xdf\x20\x6d\xf3\x46\xb0\xdd\x17\x00\x80\x96\x55\x1a\x2c\x85\xa9\x25\xb6\x45\x48\xc7\x42\x91\xfa\xa7\x8d\xbe\xd0\x5c\x2a\xe7\xeb\x2d\x69\x5a\x31\xd0\x95\x63\x1a\x0b\xbc\x3a\xd4\x95\xca\x80\x84\xca\x31\x8c\x9d\x2b\xed\xf1\xd1\x51\xa3\x8f\x12\xa9\x8f\x32\x9d\xda\xa3\x54\xab\x14\x4b\x67\x8f\x22\x37\x1d\x95\x3a\xeb\xc7\x1f\x7d\x11\x99\xe4\x68\x7f\x99\x8e\xdf\x40\x13\x06\xc8\x1f\x83\xc7\xd5\x92\x56\xa8\xaa\x15\x97\xcd\xf4\x57\x77\xa6\x06\x0d\x18\x17\x36\x72\x3a\xe7\xab\x99\x56\x64\x60\xa6\x1d\xd0\xa6\x7d\x7d\x45\x52\x6d\x98\xb6\xa4\xdb\xbe\x6d\x0f\xbd\x5a\x68\xaf\x72\xcc\xd7\xb8\xe2\x73\xd7\x23\xb1\x6c\x23\x73\xaf\x59\x28\x1b\x00\xce\x09\xbe\x20\x89\x0c\x7a\xff\x85\xc4\x95\x9a\x00\xd1\xb3\x0b\xb7\x65\xb5\xae\x8f\x72\x86\xeb\x37\xbf\xa9\xa3\x69\x3d\x1c\x0e\x31\x75\xdf\x05\x7e\xae\xe3\x6a\xcc\xdc\x31\x02\xf6\x4d\xfc\xeb\xbb\xe5\x1e\xe5\x46\xc1\xaa\xcd\xd2\x0d\x7e\x49\xab\xc3\x08\x53\x10\x7a\xc2\x1d\x66\x54\xb6\x87\x80\x1f\x8b\xbd\x3f\x0e\xc8\x06\x9f\xd9\x07\x5f\x82\xbd\x43\x32\xa3\xd5\xd8\x06\x09\xd7\x92\xb6\xc1\x9f\x6e\x22\x7f\x08\x2f\x75\x28\x64\xc6\x1e\x9c\xf3\xdd\x52\xcd\x1b\x56\x64\x2f\xb5\x2f\x69\x5e\x6a\x17\xb5\xe1\xb6\x36\xce\xb2\x36\xe1\x32\x05\x90\x1f\x9a\xf4\x8a\xdf\xd9\x54\x7a\xa5\xa1\xe0\xa9\xe8\xd9\x2a\xc8\x5c\xe3\xa4\x09\xc9\x87\xe4\x0d\x47\xbc\x7a\x0d\x95\x44\xe3\xd3\x47\xd8\xff\x19\x6a\x12\x75\x31\x90\xca\x4f\xe6\x87\x8e\xa8\xe0\xd1\x23\x40\x55\xc6\x3f\x79\x9a\x77\x01\xae\xcd\xb2\x38\x53\x30\x7b\xb5\x45\xce\xa6\x8e\x02\x2f\xce\xd6\xb4\x52\x34\x4f\x7e\xad\x44\x9e\xc0\x63\x2f\x15\x79\xf7\xe1\x55\x68\x34\x17\xb5\xbe\x95\x79\x96\x0a\x93\xb1\x36\xf0\x3c\x0a\x56\x7b\xec\x89\xda\xe0\x88\xdc\xde\xe0\xc8\xdf\x9d\x06\xa5\x30\x4e\xa6\x55\x2e\x58\x6d\xe1\x48\x9b\xc9\x3b\x81\x68\x43\x34\x17\x98\x6a\x95\xad\x09\x24\x2e\x91\xae\xa1\x6f\x1b\xc6\x6c\x46\xa1\x91\xa1\x44\x58\x16\x38\x4b\xa4\x07\xd3\xce\x8d\x1e\x46\xae\xae\x59\xac\xe7\xad\x9a\x5b\xc9\x66\x59\xdb\x2b\x96\xfe\x8c\xc1\x61\x4b\x3c\xd6\x5c\x91\xc0\xbf\x26\x51\x5f\xf5\x40\xba\x18\x3d\x63\xbf\x39\xcc\x19\x48\x36\x00\xbb\x61\xa8\xa1\x36\x78\x83\x06\x0e\x32\xcd\x7d\xb8\x8c\xfe\x30\x81\xff\x90\x89\xef\x63\x10\x23\x5f\xf1\x1d\x48\x3c\x5a\x22\x8e\x2f\x3b\xe4\x28\xe2\x43\x38\xf0\xd5\xf7\xb2\x28\x30\x93\xc2\x61\x3e\x39\xf4\x05\x18\xb1\x7e\x7f\x13\xd4\x6d\x72\x68\xa3\x75\x58\xe3\xab\xbf\xaf\x68\xc9\x8b\xdd\x02\xb3\x3f\xc5\xc8\x58\x03\x19\x6f\x65\xce\xa0\xb0\xd6\x41\x7a\x45\x52\xae\x95\x84\x6b\xd9\x7e\x51\xcc\xd4\x08\xfe\x85\xe8\x40\x80\xc1\x11\x53\xb9\xa7\xdc\x7b\xd0\xb8\x4c\x17\x1f\x3a\x59\xa3\xd1\x56\xe7\xf5\xfb\x40\xe6\xff\x57\x7f\xcf\x84\x13\x4b\x1a\x78\x9c\x4f\xca\x45\xc1\x81\x75\x8a\xb2\x19\x7c\x19\xb2\x36\x88\xea\x86\xe9\x77\x1a\x81\x4d\xfd\x45\x3d\xa7\x5d\x6a\x0e\xa9\xf9\x3c\x6f\xc4\x77\xdf\xe0\x48\x5a\x67\x26\xad\x70\xa8\x0f\xbd\x39\x0d\x52\x59\x27\x94\x93\x2c\xd9\x20\xb6\xec\x87\xd8\x20\x99\xdf\x09\xbc\x22\x5f\x8b\x63\x58\xb7\xa4\xa6\xbd\x81\x7d\x39\x29\x11\xbe\x6d\xfd\x78\x66\xca\x94\x69\x2d\x08\x1a\x4f\x5c\x22\xcb\x0c\xda\x79\xf9\xb0\x88\x7c\x56\xee\x3f\xba\xf9\x6b\x41\xb0\x7f\x1e\x03\x02\x21\xb7\x64\xad\x1c\x91\x95\x19\x4f\x7b\xc5\xd8\xf0\x94\xb5\xe9\xbd\x02\xee\x28\x7f\x63\x6e\x2a\x6a\x25\x20\x5d\xb4\xfb\x53\xad\x6c\x55\xc4\xa2\x2d\xf2\x7a\x4a\x54\x19\xaa\x74\xc2\xc7\x03\xf2\x1b\x34\x09\xfc\x68\x09\x53\xf0\xbf\xe5\x88\xfc\xbe\x30\x69\xdb\x54\x8a\xa7\x4e\x66\x56\x20\x6d\xeb\xce\x4c\x2e\x43\x23\x1b\x28\x8e\x80\xd9\x4c\x7b\x1b\x53\xe1\xb3\x8b\xa8\x7c\xac\xf5\xb2\x3e\x95\x16\x83\xa0\x11\x2e\x9e\xe1\x69\x4b\x23\xed\x0f\x20\x95\xda\xca\x78\x5a\xa6\x96\xa3\x53\x27\xdb\xf4\xd0\x9f\x3b\xf3\xe3\x4e\x3b\xc2\x5c\x53\x31\xb3\x19\x76\xdc\x2a\xe5\x81\x8f\xed\x28\x4d\x14\x33\x0f\xfd\x50\x8b\xfa\xb9\x78\x11\xf1\xf4\x92\x1b\x99\x6e\x84\xba\xc6\x0c\x72\xbc\x93\xa9\x1e\x19\x51\x8e\x65\xca\x87\xab\x88\x4d\x39\x48\xc6\x47\xaa\x44\x81\xc9\xfe\x52\x42\x5b\x26\xc6\xcb\x6a\x90\x4b\x3b\xc6\x85\xb6\xcc\x4a\x1a\xb5\x98\x1a\x74\x0b\x25\xc8\x14\x89\x5e\xf8\x76\x8d\x52\x8e\x15\x29\x61\x80\x50\x71\xe5\x69\x8e\x19\x8f\x40\x9c\xa6\xc4\x48\x31\xad\xd1\x5c\x78\x5b\xc3\x30\x81\x33\x17\x03\xd3\xd4\xe3\x1a\xb1\xf4\x94\xc6\xa9\x51\x5b\x70\x4c\xc5\x4a\x95\xa2\x3f\x22\xe6\x8f\xda\x21\xc6\x30\xa3\x33\x12\xbd\x19\x84\x1c\xe0\x8f\xb8\x41\xe5\x16\x1b\x35\xab\xfd\xae\x15\x3e\xd7\x6a\x30\xd6\x32\x65\x3d\x24\x1b\x59\x14\x75\x22\xfd\x4d\xa0\xe4\x2f\xdb\x62\xd0\x9f\xe8\xbb\xf0\xa5\x25\xeb\x65\xcd\x8f\x53\xcd\x43\xc2\xd2\xc2\x58\xdf\x86\x91\x66\x99\x36\x44\x6c\x22\x6e\x33\x69\x53\xe2\x74\xcc\xe0\x54\x2b\x1b\x8f\xf5\x09\xe5\x4f\xea\xdd\x88\xdc\x93\x42\x1c\xb8\xd4\x39\xe7\x37\xb2\x2a\xba\x13\xbe\xfa\x0e\x8b\x01\xf2\x75\xbc\x36\x2e\x65\x89\x9a\x5b\xa3\x62\xd7\x69\xc1\xa8\x1f\xce\x75\x9e\xaf\xd6\x62\x2b\xfd\xd2\x4d\xbc\xd2\x08\x80\x8d\xaf\x42\x3f\x8b\x10\x0b\xb1\x38\xa2\xe9\x26\x83\xc4\xa4\x41\xa6\x6e\x0d\xd8\x01\xba\x5b\x44\x05\xe9\x18\xd3\x6b\xdb\xe4\x90\xf9\x62\xec\x19\xac\x85\xf8\xd3\xb4\xc4\xaa\xed\x29\xc2\x0a\x3b\x1a\x16\xd1\xa7\xcd\x14\xde\xb6\x63\x56\x0b\xd4\x0d\xa9\xe8\x1b\x21\x73\x31\xc8\xfd\x71\xd6\xfa\x57\xaf\xbd\x0e\x19\xf5\x79\x59\xe5\x79\x48\x22\x71\xd6\xd6\x19\x31\x1c\xca\x94\xd3\xe4\xd2\xf8\xa8\x6f\x50\x6c\x0b\xb7\xb0\xfe\xb2\xf6\x05\x1c\x61\x9d\x70\xd5\x1c\x8e\x56\x20\x78\x15\x62\xc9\x0f\x91\x4b\x03\x44\x33\x57\x1c\x4f\x39\x2b\xb4\x0c\xf4\xce\xd6\x54\xfc\x3b\x81\x97\xda\x85\x1b\xca\x5f\xa0\x25\xb5\xcb\x00\x7a\x8d\xc2\x6a\xd5\x92\xae\x6c\xfd\x1a\x39\x92\x4a\xe4\x61\x53\xed\xf8\x5e\xed\x7b\x08\x0e\x29\x17\x72\x64\x84\xab\x85\x62\xb3\xee\xa0\x5d\x82\x5e\xf4\x91\xd0\x04\x4e\xd4\x84\xf1\x3d\x44\xe1\x38\xe7\x2e\x95\x33\x3a\xab\x52\x0c\x19\xeb\xca\xb6\x07\x79\xa7\x62\x74\x3a\xbd\x70\x1a\x27\x69\x6a\xa4\x32\x74\x42\x86\x94\x92\x56\x08\xc2\x96\xe4\xc7\x45\x9a\xf4\xa1\xf0\x06\xc0\xac\x2c\x4e\xce\xcf\xe0\x75\x38\xec\x98\x40\xbf\xdf\xf7\x79\x4f\xeb\x4c\x95\xb2\x7e\x21\x16\x52\x59\xd0\x14\x9e\xfa\x78\x93\xa2\x55\x5e\x18\x22\x1f\xde\x04\x2b\x85\x1b\x43\xe2\x01\x9f\xb4\x40\x01\xf0\x94\x74\xcd\x9d\x28\x4a\xa2\xfb\x2b\xe5\xa5\xf7\x53\xad\x2f\x3c\x92\xfc\x9c\xbf\xc3\xd1\xd1\x2c\x4d\xe8\x01\x99\xa8\x21\x80\xc8\xa4\x31\xd4\x7a\xdf\x4e\x6f\x29\xa1\x8e\x3f\x28\x7d\xab\x16\xcd\xce\x73\x09\x83\xc7\x70\xb5\x77\x12\xb9\xef\x6a\xaf\x07\x57\x7b\xe7\x46\x8f\xb8\x6c\x4d\x8d\xae\x42\x1d\xda\xd5\xde\x63\x1c\x19\x91\x61\x76\xb5\x47\xc3\x7e\xce\xf5\x86\x2f\xd0\x8c\xf0\x07\x9c\x7c\xcb\x83\xd5\xaf\xa3\x46\xf8\xd6\x97\x26\xd2\x7b\x52\xc1\xa4\xa7\xbe\x2d\x44\x59\xbf\x78\x21\xca\xba\xf3\x69\x43\x67\x6f\xde\x16\xe8\xc4\xcd\xa3\xa4\xc1\xe8\xcf\xbf\x58\xad\x8e\xaf\xf6\x9a\xf5\xf7\x74\x21\xb9\xd2\x62\x72\xb5\x07\x53\xb3\x1e\x5f\xed\xf1\xbc\xf1\x7d\x5c\xe4\xf1\xd5\x1e\xcd\x44\xaf\x8d\x76\x7a\x50\x0d\x8f\xaf\xf6\xb8\x80\xa1\xf7\xa8\x67\xb0\xec\x91\xc1\xf4\x6d\x33\xc3\xd5\xde\xcf\x84\x93\xa3\xa3\x90\xc2\x08\x97\xbf\xff\xb9\x38\x58\xbd\x56\xee\xaf\xab\xcb\xee\x43\x2e\xac\xbb\x34\x42\x59\x9e\xff\x52\x16\x8b\xd3\xb8\xde\x97\x63\x7e\x5f\xfa\xdd\xb0\x0c\x58\xfa\xd9\x53\xc3\xd2\xcf\x4b\xb4\xe7\x26\x9a\x6b\x7e\x0f\x1b\x46\x9d\xe7\x3b\x36\x05\xdb\x64\xcf\xc5\x38\x4d\x8d\x1f\xd2\x01\xa1\x35\x86\x8b\x04\x88\xc5\x83\x7c\xe3\x72\x4c\xc6\x5b\xa8\xea\x69\x1c\xfc\xdb\x70\xc9\x00\x54\x2a\x43\x93\x73\xb2\xaa\x19\xd5\x67\x42\xb2\x04\x7c\xdc\x40\xd4\x51\x9a\x6b\x62\x24\xd6\x4e\xaa\x15\xbc\xf6\x85\x3f\x71\x44\x92\x1d\xe1\x9e\x05\x3f\x0c\x2b\xba\x34\xc5\xd2\xb1\xa6\xdb\x3d\xc5\x0c\xad\xa0\x0a\x59\x56\x7d\xb7\x9c\x3c\x02\x71\x6c\x08\xf8\xd0\xda\xe7\xf7\xc7\x55\x21\x48\x75\x88\x8c\x6b\x7f\xea\x6f\xde\x7d\xf3\xee\x96\x17\xa9\x3e\x29\xe4\x63\xfc\x11\x0f\x01\xd4\x41\x91\x88\xfa\x40\xcd\x9a\x88\xc9\x46\x9b\x2f\xc4\xdd\x73\x54\x23\x37\x3e\x86\x2f\xbf\xf8\x5f\x5f\xfd\x63\x49\x43\x2f\x18\x31\x7b\x86\x2a\xc4\x82\x36\x04\xc3\x7c\xc7\xd9\xa0\x61\x42\x52\x29\x13\x4e\x24\xa3\xa6\x4d\x1d\xe4\x6e\x28\xe8\x56\x70\xe1\x56\x50\x97\x55\x49\x70\x79\xca\x05\x80\xd6\x09\x95\x62\x8f\x8c\xa4\x85\x83\xc9\x5a\x80\xe7\x13\x78\xf4\x85\xff\x47\x52\x78\xea\x39\xf1\xfd\xe6\xee\x6d\xb2\x60\xc9\xd2\xc2\xd7\xbd\x99\xf5\x48\x0b\x84\x2a\x3d\x64\xc2\xf1\x2e\xa6\x41\xaf\x09\x63\x30\x60\x5e\x13\x62\xbd\xde\x75\x88\x5b\x17\x0f\xdc\x2c\x16\x58\x48\x25\x8b\xaa\x38\x86\x87\x4b\x9a\x78\x91\xb6\x21\x36\x7d\xe3\xc6\x10\x10\x24\xba\x46\x46\x14\x05\x97\xfa\xca\x0c\x95\x93\x43\xc9\x45\x03\x35\x69\xb3\xbb\xef\x3b\xc6\x1a\x94\x1a\x8a\x5c\x9e\x42\x72\xa8\x45\xec\xe7\xde\xce\x31\xac\x81\x43\xf6\x26\x6d\x0b\xa8\x49\x89\x9e\x1b\xbc\x03\x03\x78\x57\x7a\x53\xb5\x95\x86\x28\x50\x28\xa9\x46\xb6\xa9\xe7\x0a\xff\x40\x0e\x7d\xbc\x1d\x63\xc8\x9e\x63\x3b\x17\x94\x92\xb3\x94\xb1\xdf\x24\x9a\x9a\xc2\x8c\xc4\x8f\xb7\xd1\x67\x63\x9a\x64\x39\x16\x98\x9f\x0a\x8b\x91\x1b\xdb\xd5\x5c\xf1\xb6\x96\xfa\xf4\xc1\x3b\x63\xd5\x47\x0f\xbf\x58\x89\xf2\xba\xdd\xf2\x14\x5e\x5d\xe6\xf5\xe6\xa4\xff\x1f\xd1\xff\xed\xed\x41\xf8\xe3\x61\xff\xeb\xff\xd7\x3b\x7e\xfb\x59\xeb\xe7\xdb\xe5\xd5\x59\x8b\x8d\xf9\x25\xe4\x13\x94\x48\xb4\x13\x23\x46\x7b\xb1\x4a\xe5\xd2\x54\xd8\x83\xa7\x22\xb7\xd8\x83\x1f\x15\xab\x86\x7b\x02\x6d\x75\x86\x9a\xb4\xf2\x1e\xcd\xba\x2c\x53\x1e\x9a\xf0\x92\x56\xb7\x09\xcb\x5d\xe5\xbe\x6e\x06\xa4\x18\x6a\x68\x49\x1a\xd5\xa2\x33\x5f\xf2\x3c\xd4\x3a\x09\x16\x6e\x92\xea\xe2\xa8\xfe\xee\x4d\xeb\x17\x42\x4d\xa0\x11\x6b\xde\x28\x9d\xa5\x74\xeb\x48\x36\x89\xd4\x68\x6b\x9b\x7b\x48\x20\x97\xd7\x08\x27\x8d\xdf\x48\xc2\x72\x80\xa9\x60\x5b\xdc\x0c\xa4\x33\xc2\x07\x7d\xa3\x5d\xd9\x44\x94\x86\x55\x0e\x07\xe4\xae\x26\x5c\x48\x36\x27\x5d\xc3\x9d\x46\x62\x20\x73\xfe\xa7\x65\xc8\x95\x4e\xb5\x1a\xe6\x32\xb8\x00\x45\xa9\x8d\x13\xca\xc5\x83\x17\x23\xbc\xf3\xff\x9a\x95\x4f\x3b\x48\x0b\x07\x99\xb2\x8f\x1e\x7d\xf1\xe5\x45\x35\xc8\x74\x21\xa4\x7a\x5a\xb8\xa3\xc3\xef\x0f\x7e\xad\x44\xce\x59\xde\x97\xa2\xc0\xa7\x85\x5b\xfe\xef\x02\x6d\xad\x16\x1f\x7d\xb5\x01\x17\x1d\xbc\xf1\xbc\xf2\xf6\xe0\x4d\x3f\xfc\xf5\x59\x7c\x75\xf8\xfd\xc1\x55\xb2\xf2\xfb\xe1\x67\x47\x5c\x23\x59\xb3\xdc\xdb\x37\xfd\x86\xfd\x92\xb7\x9f\x1d\x7e\xdf\xfa\x76\xb8\x88\x19\xa7\x4a\x17\xc9\x0b\xe8\x17\xa2\xec\x5f\xe3\x64\x09\x73\x2e\x35\x47\xe7\x07\xf2\x10\x2b\x44\xb9\xc8\xfb\x1e\xca\xd1\x0b\x51\xbe\xc6\x21\x1a\x54\xe9\x42\x22\xbf\x67\x06\x86\xfc\x87\x15\x9f\xb8\x02\x6b\x87\xa8\x13\xe9\x1d\x1f\x69\x5b\x65\x4e\x6f\x40\x2d\x9b\xd9\x8f\x6a\x45\xfd\xe2\xda\x49\xea\x7d\xee\x3c\x42\xe4\xef\x9f\x7c\xfc\x68\xe7\x71\x2a\xb9\xd4\xd3\x9a\x8e\x61\x9e\x3d\xf6\xa6\x2f\x8b\x1e\x36\xe7\xc6\x9a\xfc\xbc\x4a\xc9\x5f\x2b\x84\xb3\xc7\xf5\x91\x5f\xa9\xd2\xbc\xe2\x4b\xc6\x7e\xfc\xf1\xec\x31\xf9\xef\xff\x0a\xe2\xe6\x16\x21\xd3\x6a\xdf\xc1\xab\x97\xcf\xff\x0f\x07\x03\xb8\x45\xcf\x2b\xf4\x70\xee\x30\x97\xc2\x87\xc9\x82\x02\x86\x7f\xa1\xaf\x93\xe3\x99\x53\x51\xd6\xf1\x13\x16\x77\x5c\x61\x95\x97\x96\x4f\x0f\x80\xad\x4c\x58\x1d\x0d\xec\x33\xbe\x7c\x3a\x29\xe4\x83\xe3\xc1\x87\x5c\xb8\xe5\xe7\x30\x56\x02\x2d\xd5\x4a\x61\xca\x49\x73\xb2\x02\xdf\x03\x7f\x10\x21\xbf\x0a\x36\x2b\xcf\xb1\x03\x33\x84\x84\xda\xce\x64\x41\x6b\x38\xf5\x3b\x7d\xef\x9c\x34\xb7\xdf\x9d\x66\xf4\xf1\x4c\xce\x6c\xbe\x5e\x13\x7f\x9e\x2b\xe3\x9a\x76\x9d\xa7\xa2\x87\x21\xb6\x5a\x27\x47\xc7\xc2\xc2\x00\x51\x71\x38\xd7\x47\xff\x50\x05\xaa\xc3\x26\x10\x5b\x95\x7d\xa7\xfb\xd9\x62\xe4\xad\x81\xdc\x7a\xa8\xad\xf0\x5c\x67\x4e\xef\x6f\xeb\xa8\xde\x8e\x27\x8b\x60\x60\x9b\xcb\xcc\x6a\x1b\x64\xdb\x8d\x2d\x77\x4c\x66\xa2\xba\xec\x59\x84\xa0\x46\xf0\x33\xe6\x97\x44\xde\xe3\x54\x64\xc3\x69\xce\xe6\x4d\x47\xf6\xb6\x5f\xa3\x47\xf3\x05\x9a\x1b\xb9\x93\xf2\x5b\xc7\x98\xa9\xaf\x33\x39\x79\xff\x6c\x45\xa6\xd7\xce\x93\x70\xe8\x2f\xd5\x6b\xd2\x37\x2b\xeb\xdf\x19\x82\xab\xaa\xfc\xb7\x19\x63\x5b\x65\xe9\xa5\xc9\xd4\x21\x0f\xeb\xb4\xe1\x94\x7b\xfb\x5d\x35\xa8\x0d\xe5\x66\xf4\xe0\x03\xc1\xef\x7f\x3e\xf8\xff\x01\x00\x00\xff\xff\x3e\xcb\x2d\xc0\x3f\xed\x00\x00") func operatorsCoreosCom_catalogsourcesYamlBytes() ([]byte, error) { return bindataRead( diff --git a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/catalogsource_types.go b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/catalogsource_types.go index c4c7662d37..53bd40ca40 100644 --- a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/catalogsource_types.go +++ b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/catalogsource_types.go @@ -7,6 +7,7 @@ import ( "github.com/sirupsen/logrus" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ) @@ -145,6 +146,21 @@ type GrpcPodConfig struct { // +kubebuilder:validation:Enum=legacy;restricted // +kubebuilder:default:=legacy SecurityContextConfig SecurityConfig `json:"securityContextConfig,omitempty"` + + // MemoryTarget configures the $GOMEMLIMIT value for the gRPC catalog Pod. This is a soft memory limit for the server, + // which the runtime will attempt to meet but makes no guarantees that it will do so. If this value is set, the Pod + // will have the following modifications made to the container running the server: + // - the $GOMEMLIMIT environment variable will be set to this value in bytes + // - the memory request will be set to this value + // - the memory limit will be set to 200% of this value + // + // This field should be set if it's desired to reduce the footprint of a catalog server as much as possible, or if + // a catalog being served is very large and needs more than the default allocation. If your index image has a file- + // system cache, determine a good approximation for this value by doubling the size of the package cache at + // /tmp/cache/cache/packages.json in the index image. + // + // This field is best-effort; if unset, no default will be used and no Pod memory limit or $GOMEMLIMIT value will be set. + MemoryTarget *resource.Quantity `json:"memoryTarget,omitempty"` } // UpdateStrategy holds all the different types of catalog source update strategies diff --git a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/clusterserviceversion.go b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/clusterserviceversion.go index ffc357b12b..a4c8d17469 100644 --- a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/clusterserviceversion.go +++ b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/clusterserviceversion.go @@ -120,12 +120,19 @@ func (c *ClusterServiceVersion) IsObsolete() bool { // IsCopied returns true if the CSV has been copied and false otherwise. func (c *ClusterServiceVersion) IsCopied() bool { - operatorNamespace, ok := c.GetAnnotations()[OperatorGroupNamespaceAnnotationKey] - if c.Status.Reason == CSVReasonCopied || ok && c.GetNamespace() != operatorNamespace { - return true + return c.Status.Reason == CSVReasonCopied || IsCopied(c) +} + +func IsCopied(o metav1.Object) bool { + annotations := o.GetAnnotations() + if annotations != nil { + operatorNamespace, ok := annotations[OperatorGroupNamespaceAnnotationKey] + if ok && o.GetNamespace() != operatorNamespace { + return true + } } - if labels := c.GetLabels(); labels != nil { + if labels := o.GetLabels(); labels != nil { if _, ok := labels[CopiedLabelKey]; ok { return true } diff --git a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go index cf01001f5c..b4459a00a4 100644 --- a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go @@ -733,6 +733,11 @@ func (in *GrpcPodConfig) DeepCopyInto(out *GrpcPodConfig) { *out = new(string) **out = **in } + if in.MemoryTarget != nil { + in, out := &in.MemoryTarget, &out.MemoryTarget + x := (*in).DeepCopy() + *out = &x + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GrpcPodConfig. diff --git a/vendor/github.com/operator-framework/api/pkg/validation/internal/csv.go b/vendor/github.com/operator-framework/api/pkg/validation/internal/csv.go index b5b7683c0c..f0c1853851 100644 --- a/vendor/github.com/operator-framework/api/pkg/validation/internal/csv.go +++ b/vendor/github.com/operator-framework/api/pkg/validation/internal/csv.go @@ -3,6 +3,7 @@ package internal import ( "encoding/json" "fmt" + "github.com/blang/semver/v4" "io" "reflect" "strings" @@ -45,6 +46,8 @@ func validateCSV(csv *v1alpha1.ClusterServiceVersion) errors.ManifestResult { result.Add(validateExamplesAnnotations(csv)...) // validate installModes result.Add(validateInstallModes(csv)...) + // validate min Kubernetes version + result.Add(validateMinKubeVersion(*csv)...) // check missing optional/mandatory fields. result.Add(checkFields(*csv)...) // validate case sensitive annotation names @@ -240,3 +243,15 @@ func validateVersionKind(csv *v1alpha1.ClusterServiceVersion) (errs []errors.Err } return } + +// validateMinKubeVersion checks format of spec.minKubeVersion field +func validateMinKubeVersion(csv v1alpha1.ClusterServiceVersion) (errs []errors.Error) { + if len(strings.TrimSpace(csv.Spec.MinKubeVersion)) == 0 { + errs = append(errs, errors.WarnInvalidCSV(minKubeVersionWarnMessage, csv.GetName())) + } else { + if _, err := semver.Parse(csv.Spec.MinKubeVersion); err != nil { + errs = append(errs, errors.ErrInvalidCSV(fmt.Sprintf("csv.Spec.MinKubeVersion has an invalid value: %s", csv.Spec.MinKubeVersion), csv.GetName())) + } + } + return errs +} diff --git a/vendor/github.com/operator-framework/api/pkg/validation/internal/operatorhub.go b/vendor/github.com/operator-framework/api/pkg/validation/internal/operatorhub.go index f5da37a274..e82d102875 100644 --- a/vendor/github.com/operator-framework/api/pkg/validation/internal/operatorhub.go +++ b/vendor/github.com/operator-framework/api/pkg/validation/internal/operatorhub.go @@ -240,7 +240,7 @@ func checkSpecMinKubeVersion(checks CSVChecks) CSVChecks { if len(strings.TrimSpace(checks.csv.Spec.MinKubeVersion)) == 0 { checks.warns = append(checks.warns, fmt.Errorf(minKubeVersionWarnMessage)) } else { - if _, err := semver.ParseTolerant(checks.csv.Spec.MinKubeVersion); err != nil { + if _, err := semver.Parse(checks.csv.Spec.MinKubeVersion); err != nil { checks.errs = append(checks.errs, fmt.Errorf("csv.Spec.MinKubeVersion has an invalid value: %s", checks.csv.Spec.MinKubeVersion)) } } diff --git a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler.go b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler.go index dfb7b87049..88a421a713 100644 --- a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler.go +++ b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/reconciler/reconciler.go @@ -219,6 +219,24 @@ func Pod(source *operatorsv1alpha1.CatalogSource, name string, img string, saNam if grpcPodConfig.Affinity != nil { pod.Spec.Affinity = grpcPodConfig.Affinity.DeepCopy() } + + // Add memory targets + if grpcPodConfig.MemoryTarget != nil { + pod.Spec.Containers[0].Resources.Requests[corev1.ResourceMemory] = *grpcPodConfig.MemoryTarget + + if pod.Spec.Containers[0].Resources.Limits == nil { + pod.Spec.Containers[0].Resources.Limits = map[corev1.ResourceName]resource.Quantity{} + } + double := *grpcPodConfig.MemoryTarget + double.Add(double.DeepCopy()) + pod.Spec.Containers[0].Resources.Limits[corev1.ResourceMemory] = double + + grpcPodConfig.MemoryTarget.Format = resource.BinarySI + pod.Spec.Containers[0].Env = append(pod.Spec.Containers[0].Env, corev1.EnvVar{ + Name: "GOMEMLIMIT", + Value: grpcPodConfig.MemoryTarget.String() + "B", // k8s resources use Mi, GOMEMLIMIT wants MiB + }) + } } // Set priorityclass if its annotation exists diff --git a/vendor/modules.txt b/vendor/modules.txt index 72d4433ec3..e20db9a1c4 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -192,7 +192,7 @@ github.com/docker/distribution/registry/client/auth/challenge github.com/docker/distribution/registry/client/transport github.com/docker/distribution/registry/storage/cache github.com/docker/distribution/registry/storage/cache/memory -# github.com/docker/docker v23.0.1+incompatible +# github.com/docker/docker v23.0.3+incompatible ## explicit github.com/docker/docker/api/types github.com/docker/docker/api/types/blkiodev @@ -642,7 +642,7 @@ github.com/openshift/client-go/config/informers/externalversions/config github.com/openshift/client-go/config/informers/externalversions/config/v1 github.com/openshift/client-go/config/informers/externalversions/internalinterfaces github.com/openshift/client-go/config/listers/config/v1 -# github.com/operator-framework/api v0.17.7 => ./staging/api +# github.com/operator-framework/api v0.17.8-0.20230803152844-704ae942c4a9 => ./staging/api ## explicit; go 1.19 github.com/operator-framework/api/crds github.com/operator-framework/api/pkg/constraints